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 ../..