hack のためのネタ帳, etc,,,

このページは履歴用の backup です。
最新版は apt-cyg を参照してください。

cygwin 用コマンドライン版パッケージ管理ツール
Debian GNU/Linux の apt-get ライクな操作が可能

公式ページ等

まず 2013-07-22 にリリースされた Cygwin 1.7.22 で x86_64 版のサポートが追加されたことに伴い、リポジトリの構造が変更された。
しかし 2013-10-26 現在、上記のオリジナル版では、Cygwin 1.7.22 対応は行われていないので、そのままでは使用できない。
Cygwin 1.7.22 で apt-cyg を使うには Cygwin 1.7.22 対応の修正を行った版を探す必要がある。
github で fork されているものから探すと良い。
2013-10-27 現在、github 上には 2013-07-28 に作者自身が MIT License で再ライセンスして公式に fork したものと、それ以前の 2012-10-11 に野良で fork されたものの2系統が存在している模様。
2013-12-05 現在、github 上には 2013-07-28 に作者自身が MIT License で再ライセンスして公式に fork したものと、それとは別に GoogleCode にあるオリジナルの GPL 版から野良で fork したものが複数系統存在している模様。 活発さって意味では野良の cfg, ashumkin 系統には面白い patch や fork がいくつかあるんだけど、2013-12-19 現在、他の野良 fork には見るべきものはない。
むしろ現在に至っても未だに新規で野良 fork 起こすして arch 対応から始める人がいるのがかなり謎。
Blog も 8〜9 月の blog につかまり arch 対応だけして .xz 対応に気付いてない人とか大量にいるので多分ググって最初に当たった情報で止まっちゃってる人が多いんだと思われ。

License

公式 fork である transcode-open 系統は
2013-09-30 現在、Google code で公開されてる版は GPL v2 or later で、Github で新たに公開された版は MIT license になってる模様。
ただし 2013-10-18 現在、version 表示に、GPL って表示が残ってる状態なので、若干まぎらわしい。修正が有ると嬉しい。

野良 fork は GoogleCode で公開されてる GPL 版から fork しているので、GPL のままと考えるのが妥当なはず。
とりあえず、現状で必要だった修正を施した私家版を以下で公開した。 この件で、以前ここにごちゃごちゃ書いていたことは apt-cyg.20131025 に退避したので、興味があればそちらを参照。

2013-10-26 時点で、主な修正点は以下の4点。
  1. package の .tar.xz 対応 (sieste31/apt-cyg/d0bb8af から pull)
  2. mirror の multiarch 対応 (boothj5/apt-cyg/d05f149 から pull)
  3. cache の multiarch 対応
  4. rootdir の multiarch 対応

1. は、一部のパッケージが .xz 形式で提供されるようになっているため対応が必要。
例えば 2013-10-26 現在だと、x86_64 版の vim-7.3.1314-1.tar.xz 等が該当する。
2. は、1.7.22 でサーバー側のリポジトリ構造が変更されたため対応が必要。
3. は、x86_64 版と x86 版の両方をインストールしている場合、ダウンロードしてきたパッケージ情報やパッケージ等が相互に干渉してしまうため、対応が必要。
4. は、x86_64 環境から x86 環境側のパッケージをインストール、またはその逆を行いたい場合に対応が必要。

2013-10-26 現在、1, 2 の patch は、github 上に存在してたけど、3, 4 は私家版以外存在してなさそうな雰囲気。

4. は、例えば 2013-10-26 現在 x86_64 環境には chere パッケージが提供されていないので、x86_64 環境から x86 環境の chere パッケージをインストールしたい場合等で役に立つと思う。
やり方は、新たに追加した --charch オプションを用いて、以下のようにすれば良い。
apt-cyg --charch x86 install chere
--charch オプションは x86_64 または x86 の何れかを取ることが出来る。
--charch は chroot コマンドを利用して、x86_64, x86 環境の rootdir に変更した後 apt-cyg を実行し直しすことで実現している、現在の apt-cyg はパラメーターを読んだ端から shift で捨てて行くため、他のパラメータを捨てられる前に chroot する必要がある。このため --charch は必ず第1パラメータに与える必要がある。
オリジナルのバージョンについて、カレントディレクトリに最新版を取得するには以下のようにすれば良かったが、これは既に OBSOLETE.
wget http://apt-cyg.googlecode.com/svn/trunk/apt-cyg
chmod +x apt-cyg
Cygwin 1.7.22 で 64 bit 環境がサポートされた際、リポジトリが x86_64 と x86 に分かれた事に対応出来てないので、そもそも使えない。
作者様が github に放流してくれているので漁れば対応した fork が多数見つかるはず。

上記、私家版で良ければ、wget,ca-certificates の2パッケージを導入した上で、以下のようにしてもらえば良い。
if [ "`arch`" = "i686" -a ! -e /etc/ssl ]; then ln -s /usr/ssl /etc/; fi
wget https://raw.github.com/kou1okada/apt-cyg/master/apt-cyg
chmod +x apt-cyg
./apt-cyg --use-setuprc
x86 版の場合に /etc/ssl へシンボリックリンクを作っている理由は Cygwin - wget を参照。
setup.exe で利用していた last-cache と last-mirror は /etc/setup/setup.rc 内に記録されている。
これを apt-cyg に引き継ぐのを簡単にするため私家版では --use-setuprc オプションを追加している。
内容的としては以下の処理をやっているだけ。
apt-cyg -c "$(grep -A1 last-cache  /etc/setup/setup.rc | tail -n1 | sed -r 's/^\s*|\s*$//g')"
apt-cyg -m "$(grep -A1 last-mirror /etc/setup/setup.rc | tail -n1 | sed -r 's/^\s*|\s*$//g')"

バグ

Cygwin 1.7.22 対応出来ていない版を使うと、例えば以下のようなエラーが発生する。
$ apt-cyg update
Working directory is /cygdrive/c/Users/kou/Downloads/cygwin
Mirror is http://ftp.jaist.ac.jp/pub/cygwin/
--2013-12-02 15:58:16--  http://ftp.jaist.ac.jp/pub/cygwin//setup.bz2
ftp.jaist.ac.jp をDNSに問いあわせています... 150.65.7.130, 2001:df0:2ed:feed::feed
ftp.jaist.ac.jp|150.65.7.130|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 404 Not Found
2013-12-02 15:58:16 エラー 404: Not Found。

--2013-12-02 15:58:16--  http://ftp.jaist.ac.jp/pub/cygwin//setup.ini
ftp.jaist.ac.jp をDNSに問いあわせています... 150.65.7.130, 2001:df0:2ed:feed::feed
ftp.jaist.ac.jp|150.65.7.130|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 404 Not Found
2013-12-02 15:58:16 エラー 404: Not Found。

Error updating setup.ini, reverting
$ LANG=C apt-cyg update
Working directory is /cygdrive/c/Users/kou/Downloads/cygwin
Mirror is http://ftp.jaist.ac.jp/pub/cygwin/
--2013-12-02 15:59:58--  http://ftp.jaist.ac.jp/pub/cygwin//setup.bz2
Resolving ftp.jaist.ac.jp... 150.65.7.130, 2001:df0:2ed:feed::feed
Connecting to ftp.jaist.ac.jp|150.65.7.130|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2013-12-02 15:59:58 ERROR 404: Not Found.

--2013-12-02 15:59:58--  http://ftp.jaist.ac.jp/pub/cygwin//setup.ini
Resolving ftp.jaist.ac.jp... 150.65.7.130, 2001:df0:2ed:feed::feed
Connecting to ftp.jaist.ac.jp|150.65.7.130|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2013-12-02 15:59:58 ERROR 404: Not Found.

Error updating setup.ini, reverting
これは、前述の通り cygwin 1.7.22 対応のパッチが当たった版を利用すれば解決する。
Cygwin 1.7.25 では、cygcheck -c で check-setup する際、/etc/setup/installed.db に記録されているアーカイブの末尾が .tar.gz または .tar.bz2 に決め打ちされている。
このためかどうかは分からないが、cygwin 1.7.25 では、setup-x86.exe, setup-x86_64.exe で .tar.xz 形式のパッケージをインストールした場合でも /etc/setup/installed.db には .tar.bz2 と記録される。
apt-cyg では正しく .tar.xz として記録するので、cygcheck -c で check-setup する際に、インストール済みのパッケージとして認識してもらえない。
この問題は、src/winsup/utils/dump_setup.cc#rev1.28 で修正されているので、次期バージョンの cygwin 1.7.26 では解消さるはずである。
と言うことで、cygwin 本体側のバグであるため、cygwin の更新を待つことにする。
2013-12-19:
上記の問題は、2013-11-29 にリリースされた cygwin 1.7.26 で解消した。

大まかなサブコマンドの対応

apt-cygcygcheckapt-getapt-cacheapt-filedpkg
installinstall
removeremove
updateupdate
show-c-l
findsearch
describeshow
packageof-S
upgrade
-l-L
-psearch,find
list,show

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます