pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


cygwin 64bit版でapt-cygを使おうと思ったらイロイロ嵌ったテスト

cygwin 64bit版を入れた。apt-cyg というのが便利らしいので試してみるが動かない。
http://uturo2.nevernothing.jp/cygwin-3/

どうやら、オリジナル版は32bit版にしか対応していないらしいので、改変されたバージョンをありがたく使わせて頂こうと思ったら、こちらも動かない。
http://rcmdnk.github.io/blog/2013/08/08/computer-windows-cygwin/

動かない原因は、cygwinで配布されるバイナリの一部が .xz なファイルであるが、apt-cyg 自体が .bz2 を前提としているためです。ならばと、ファイル形式を判定して適切な展開プログラムを通すように 64bit 対応の apt-cyg をさらに改変してみるテスト。

  • アーカイブのファイル名をシェル変数展開して拡張子部分だけ抜く。
  • case 文でパターンマッチする。
  • case 文全体をサブシェル "( で囲む )" にしているので、case 文のパターンマッチ処理では、標準出力に対して xz -c や bunzip2 -c するだけ。
  • サブシェルの外側で tar にパイプでつなぐ。
diff -u apt-cyg /bin/apt-cyg
--- apt-cyg     2013-12-10 19:23:47.479936900 +0900
+++ /bin/apt-cyg        2013-12-10 19:05:16.135871400 +0900
@@ -69,7 +69,8 @@
 {
   # default working directory and mirror

-  mirror=ftp://mirror.mcs.anl.gov/pub/cygwin
+  #mirror=ftp://mirror.mcs.anl.gov/pub/cygwin
+  mirror=http://ftp.iij.ad.jp/pub/cygwin
   arch=x86_64
   if [ "`uname -m`" = "i686" ];then
     arch=x86
@@ -374,7 +375,13 @@
     fi

     echo "Unpacking..."
-    cat $file | bunzip2 | tar > "/etc/setup/$pkg.lst" xvf - -C /
+    (
+        case "${file##*.}" in
+       xz)     xz -d -c $file ;;
+       bz2)    bunzip2 -c $file ;;
+       *)      gunzip -c $file ;;
+        esac
+    ) | tar > "/etc/setup/$pkg.lst" xvf - -C /
     gzip -f "/etc/setup/$pkg.lst"
     cd ../..