rcmdnk's blog
Last update

Cygwinでコマンドラインからパッケージ管理をするで紹介したapt-cygですが、 久しぶりに使ったらミラーサイトで必要なsetupファイルが 見つからないと言ったエラーが出たのでその対処について。

apt-cygの修正

以前設定したままapt-cygしてみると

$ apt-cyg find vim
Working directory is /setup
Mirror is http://ftp.jaist.ac.jp/pub/cygwin/
--2013-08-08 xx:xx:xx--  http://ftp.jaist.ac.jp/pub/cygwin//setup.bz2
Resolving ftp.jaist.ac.jp (ftp.jaist.ac.jp)... 150.65.7.130
Connecting to ftp.jaist.ac.jp (ftp.jaist.ac.jp)|150.65.7.130|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2013-08-08 xx:xx:xx-- ERROR 404: Not Found.

--2013-08-08 xx:xx:xx--  http://ftp.jaist.ac.jp/pub/cygwin//setup.ini
Resolving ftp.jaist.ac.jp (ftp.jaist.ac.jp)... 150.65.7.130
Connecting to ftp.jaist.ac.jp (ftp.jaist.ac.jp)|150.65.7.130|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2013-08-08 xx:xx:xx ERROR 404: Not Found.

Error updating setup.ini, reverting
...

のようにsetupファイルが無いと言われて情報が更新出来ません。

$ apt-cyg update -m http://ftp.jaist.ac.jp/pub/cygwin/

の様にしてみても同じ。

http://ftp.jaist.ac.jp/pub/cygwin/ のサイトをブラウザで見てみると、x86x86_64と言うディレクトリがあり、 それぞれの下にsetupファイルがあることがわかります。

手元にある32bit Windowsマシンで試しに

$ apt-cyg update -m http://ftp.jaist.ac.jp/pub/cygwin/x86

としてみるとちゃんと設定出来た様子。 ただ、この状態で

$ apt-cyg -u remove git
$ apt-cyg -u install git

等としてみると、

$ apt-cyg -u install git
...
--2013-xx-xx xx:xx:xx--  http://ftp.jaist.ac.jp/pub/cygwin/x86/x86/release/git/git-1.7.9-1.tar.bz2
...
HTTP request sent, awaiting response... 404 Not Found
...
MD5 sum did not match, exiting

となり失敗します。 setup.ini等から得る各パッケージパス情報の中に、x86の部分が入ってしまっているため、 ミラーサイト名にx86までいれてしまうと余計に入ってしまてパッケージへのパスが間違ってる様。

仕方ないのでapt-cyg自体を書き換えてみました。

追記: 2013/08/12

修正版をGitHubにUpしました。

https://github.com/rcmdnk/apt-cyg

追記ここまで

追記: 2013/08/13

上のGitHubの修正版をにアップデートしました。 新しいものでは最後にx86等指定する必要がありませんので、 今までのapt-cygと完全に同じ様に使えます。

ちなみに、apt-cygのページをもう一度良く見てみたら、 gitHubにレポジトリが作られた様です: transcode-open/apt-cyg。 16日程前なので、恐らくその頃にこの問題が起こって指摘されて、 勝手に改造して使って、となったのでしょうか? せっかく見つけたので、何も考えずにpull requestしてみましたが、 数日前にすでに他の人が出してたので取り下げました。(ちゃんと見ないと駄目ですね :sweat: ) 数日放置されてるので、どうなるんでしょう?(pull requestされてる内容自体は指摘されてる様にもう1つ書き換える必要がありますが。) 正直に、これ見て、unameで自動で決めちゃえば良いか、と気づいてのアップデートです。

追記ここまで

apt-cyg.diff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Index: apt-cyg
===================================================================
--- apt-cyg	(revision 18)
+++ apt-cyg	(working copy)
@@ -75,6 +75,11 @@
     tmp="`head -1 /etc/setup/last-cache`"
     cache="`cygpath -au "$tmp"`"
   fi
+
+  if test -e /etc/setup/last-arch
+  then
+    arch="`head -1 /etc/setup/last-arch`"
+  fi
 
   if test -e /etc/setup/last-mirror
   then
@@ -83,7 +88,7 @@
   mirrordir="`echo "$mirror" | sed -e "s/:/%3a/g" -e "s:/:%2f:g"`"
 
   echo Working directory is $cache
-  echo Mirror is $mirror
+  echo Mirror is $mirror, architecture is $arch
   mkdir -p "$cache/$mirrordir"
   cd "$cache/$mirrordir"
 }
@@ -95,14 +100,14 @@
   then
     touch setup.ini
     mv setup.ini setup.ini-save
-    wget -N $mirror/setup.bz2
+    wget -N $mirror/$arch/setup.bz2
     if test -e setup.bz2 && test $? -eq 0
     then
       bunzip2 setup.bz2
       mv setup setup.ini
       echo Updated setup.ini
     else
-      wget -N $mirror/setup.ini
+      wget -N $mirror/$arch/setup.ini
       if test -e setup.ini && test $? -eq 0
       then
         echo Updated setup.ini
@@ -140,8 +145,14 @@
   case "$1" in
 
     --mirror|-m)
-      echo "$2" > /etc/setup/last-mirror
-      shift ; shift
+      arch=`basename $2`
+      if [[ ! "$arch" =~ x86 ]];then
+        echo "Need /x86 (for 32 bit) or /x86_64 (for 64 bit) at the end of site ULR."
+        exit 1
+      fi
+      mirror=`dirname $2`
+      echo "$mirror" > /etc/setup/last-mirror
+      echo "$arch" > /etc/setup/last-arch
     ;;
 
     --cache|-c)

ミラーサイトの情報が/etc/setup/last-mirrorに書かれている様なので、 これに加えて/etc/setup/last-archでアーキテクチャ情報を管理するようにしています。

ひと通りミラーサイトを見たところ、見た限りすべてx86x86_64というディレクトリを 持っているので、-mでミラーサイトを指定するときに、最後にかならず x86x86_64を入れるようにし、 それらの情報をサイト情報とは分けて保存しておくようにしてあります。

Sponsored Links
Sponsored Links

« Lua対応Vimをインストール stowでmake installしたパッケージを管理 »

}