いろんないみで

はまっちゃた

CygWinのapt-cygが上手くいかない場合

cygwinのapt-cygが上手くいかない。


解決法

  • Githubでforkしたものを使う。
  • ミラーの設定はftp://ftp.iij.ad.jp/pub/cygwinのような感じで cygwin までのパスにする。
  • apt-cygシェルスクリプトなのでちょっとだけ修正する。
    setup.bz2 と setup.ini を wget している部分を修正する。
    • wget -N $mirror/setup.bz2wget -N $mirror/x86_64/setup.bz2
    • wget -N $mirror/setup.iniwget -N $mirror/x86_64/setup.ini

acさんよりコメントを頂いたので追記

一次情報当たろうよ。 作者は github で fork したの使えって言ってるぞ。

とコメントを頂いたので調べてみた。

apt-cygの公式ページを見てみた。

If you find something that is not working or not compatible with a newer version of Cygwin, the easiest way to fix it is to fork the Github version:

とある。acさんの言うとおりの意味だ。

あなたはCygwinの新しいバージョンと互換性が動作していないかされていないものを見つけた場合、それを修正する最も簡単な方法は、GitHubのバージョンをフォークすることです

Githubのapt-cygのページにアクセスして、そこからforkしたものを使ってみた。

# $ wget https://github.com/kou1okada/apt-cyg
# 修正: 2013/11/27 acさんのアドバイスを参考に
$ wget https://raw.github.com/kou1okada/apt-cyg/master/apt-cyg
$ chmod +x apt-cyg
$ cp apt-cyg /bin/
# $ apt-cyg -m ftp://ftp.iij.ad.jp/pub/cygwin update
# 修正: 2013/11/27 acさんのアドバイスを参考に
$ apt-cyg --use-setuprc update
$ apt-cyg install w3m

まずは一次情報を当たる癖をつけようと思う。

そしてhelpを見てみる癖をつけることも大事だと思った。

$ apt-cyg --help

ヘルプを見ると

--use-setuprc      : set cache and mirror with /etc/setup/setup.rc

とある。

それにしても間違いを指摘していただけるコメントはありがたいと思う。 acさんありがとうございます。


以下は自分の奮闘記

たとえば

$ apt-cyg install w3m

としてw3mをインストールする場合

md5sum: w3m-0.5.3-1.tar.bz2: No such file or directory

とエラーが出力される。他の出力を見てみる。

pub/cygwin/x86_64/x86_64/release/w3m' というディレクトリはありません。

この部分が明らかにおかしい。ミラーを設定し直してみる。

$ apt-cyg -m ftp://ftp.iij.ad.jp/pub/cygwin update

今度はsetup.iniが取得できない。

Error updating setup.ini, reverting

とエラーになる。

ミラーサーバのディレクトリの構成と一致していないみたい。

まず、setup.iniを見てみた。たとえばzipの部分

install: x86_64/release/zip/zip-3.0-1.tar.bz2 254472 b05936098a480b05e90531facf416c2d
source: x86_64/release/zip/zip-3.0-1-src.tar.bz2 1125562 53ef9a34d07897d10fed37bc2edaef77

となっているのでミラーの設定は

apt-cyg -m ftp://ftp.iij.ad.jp/pub/cygwin update

でOK。


apt-cygシェルスクリプトなので簡単に修正できる。 wgetsetup.inisetup.bz2を取得している部分があった。

$ cat apt-cyg | grep 'wget.*setup'
    wget -N $mirror/setup.bz2
      wget -N $mirror/setup.ini

じゃあ変数mirrorの中身は?

$ cat apt-cyg | grep 'mirror='
  mirror=ftp://mirror.mcs.anl.gov/pub/cygwin
    mirror="`head -1 /etc/setup/last-mirror`"

そのままコピペ

$ head -1 /etc/setup/last-mirror
ftp://ftp.iij.ad.jp/pub/cygwin

なるほど(゜o゜)

修正しよ。自分の場合x86_64なので

wget -N $mirror/setup.bz2

の部分と

wget -N $mirror/setup.ini

の部分はそれぞれ

wget -N $mirror/x86_64/setup.bz2

wget -N $mirror/x86_64/setup.ini

ですね。