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

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

License

公式 fork である transcode-open 系統は
2013-12-19 現在、Google code で公開されてるオリジナル版は GPL v2 or later で、Github で新たに公開された版は MIT license になってる。
ただし、MIT license 版も version 表示に、GPL って表示が残ってる状態なので、若干まぎらわしい。

野良 fork は GoogleCode で公開されてるオリジナル版から fork しているものがほとんどのようで、基本 GPL v2 or later である。

公式ページ等

活発さって意味では野良の cfg, ashumkin 系統には面白い修正が多数あるが、2013-12-19 現在、他の野良 fork には見るべきものはほとんどない。
むしろ現在に至っても未だに新規で野良 fork 起こしたり、公式リポジトリの root から fork し arch 対応から始める人が後を絶たないというかなり謎な状況が生じている。
Blog も 8〜9 月くらいの blog につかまり arch 対応だけして .xz 対応に気付いてない人とか大量にいるので、多分ググって最初に当たった情報で満足してそれ以上深く調べないで止まっちゃってる人が多いんだと思われ。
2016-02-01 現在だと balanx は割と面白い拡張が入っていそう。

cyg-fast は aria2 の並列ダウンロードを利用することで高速化を図った fork
ただし、うちの fork から fork してるのに、ちょっとばっかし速くするために GNUPG による検証なんかもバッサリ捨て去ってるので、セキュリティ重視する人にはお勧め出来ない。 2015-08-04、ふと気付いてみると lambdalice/cyg-fast の fork が tmshn/cyg-fast に化けていた。
どうも lambdalice 氏が Windows 使っておらずメンテ不能なため 2015-07-29 に tmshn 氏へ fork の管理を委譲したようだ。 これに伴い lambdalice/cyg-fast が tmshn/cyg-fast になると共に、tmshn 氏が owner、lamdalice 氏が collaborator になった模様。

pac-cyg は apt-cyg から fork して Arc Linux の packman ライクな操作体系にしてある模様
  • GitHub / nobuyo/ medy
cyg-fast をベースにした改良版のようだ。(medy - Cygwin向けパッケージマネージャ)
  • GitHub / svnpenn / sage
2016-01-23 に apt-cyg のメンテナを降りた svnpenn 氏によるの改名版なので
trunk 版が好みなら乗り換えれば名前以外は今まで通りだけど、
メンテナ降りた置き土産に apt-cyg の trunk リポジトリへ DMCA でクレーム入れて消してくとか、いろいろと道義的に酷い。

類似システム

現状の解説

2012-12-19 現在の状況を説明すると、
まず 2013-07-22 にリリースされた Cygwin 1.7.22 で x86_64 版のサポートが追加されたことに伴い、cygwin のリポジトリの構造が変更された。
具体的には従来、 となっていた URL が のように architecture 情報を含んだ path に変更された。
これに伴い、オリジナルの apt-cyg が動作不能な状況になったため、2013-07-28 に Github に公式リポジトリが作成されると共に、公式ページの下部に、以下のようなメッセージが追加された。
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: https://github.com/transcode-open/apt-cyg
直訳すると以下のようになる。
もしあなたが Cygwin のより新しいバージョンにおいて動作不良や非互換となる何かを見つけたなら、それを修正するための最も簡単な方法は Github バージョンである https://github.com/transcode-open/apt-cyg を fork することです。
要するに修正を共有し易いよう Github にリポジトリを用意したので、これを fork して修正を皆で共有してくれと言う趣旨だ。
また、元々 GoogleCode では GPLv2 でライセンスしていたのが、Github のリポジトリでは、より制限の緩い MIT ライセンスに変更されており、より共有し易いようにと配慮されたことが伺われる。
ただ、残念なことにこの作業以降、作者様は長い沈黙に入られており 2013-12-19 現在に至るまで apt-cyg に関連の活動には関与された形跡が見当たらない状況。
その後、公式 fork にぶら下がる形で多数の人が不具合の修正をコミットし始めたのだが、なぜかみんな重複した修正を独自かつ不完全に行っているという不思議な状況が生まれている。

実は公式 fork が作成される以前から github へ独自作成された repository が少なくとも 3 つは存在している。
これらいわゆる野良 fork のいくつかは、結構活発かつ意欲的な開発・修正が行われている。
実際、早い物だと cygwin 1.7.22 のリリース当日である 2013-07-22 のうちに patch(ashumkin / apt-cyg / 0926530)が作成されていることも確認できる。
公式 fork よりも、野良 fork の cfg, ashumkin 系統の方がかなり機能強化も進んでいるので、興味のある人はそちらを調べてみる方が面白いと思う。



2014-02-20:
状況に進展があった模様。
2014-02-17 突如として i..@skl.me 氏により Google Code / apt-cyg のリポジトリが更新され始めた。
メンテナまかされたのかな?
その後 transcode-open/apt-cyg にも更新が入り始めたんだけど、github 版は折角 MIT license 化されてたのに Google Code の方から GPLv2 のコードそのまま持って来てるし orz
committer が複数いる場合、そこはちょっと配慮が欲しい。



2014-07-22:
GoogleCode にあるオリジナル版は 2014-02-17 〜 2014-02-19 にかけて patch が適用されて r18 → r34 までリビジョンが進んだため、実用上の不具合は解消されたはずだが、その後再び更新が停滞してしまった。
一方で GitHub 版の trunk に関しては 2014-03-14 に svnpenn 氏により commit された ecef939c7ce267e6c554c3278c38721c1721fe41 で show が list に変更されたのを皮切りに、それ以降オリジナル版と互換性のない形でいくつかのサブコマンドが変更されているものの、msys2 対応をはじめとした機能拡張等が積極的に行われている模様。



2016-01-26:
GitHub 版 trunk に再び闇の時代が訪れた。
GitHub 版 trunk のメンテナ―やってた svnpenn こと Steven Penny 氏が 2016-01-23 13:31 JST に you guys love wasting my time or: fix #72 という素敵なコミットメッセージを残した後メンテナ―を去ったらしい。
このため 2016-01-25 00:06 JST に原作者である transcode-open こと Stephen Jungels 氏が readme.md へ Status update として以下のような主旨のメッセージを追加している。

週末に apt-cyg は唯一のアクティブメンテナ―を失いました。
私は他のものに取り組んでいるため、このプロジェクトは基本的に読み込み専用です。
これは bug report や issue に応答しないことを意味します。
もしあなたが、apt-cyg について問題を抱えたなら:
  1. あなたが bash プログラミングを楽しむなら、apt-cyg を fork してそれを修正する事が出来るかもしれません。
  2. アクティブメンテナ―のいる fork を探し、あなたのために動作するものを一つ選び、投票してください。

流れとしては、issue #37 辺りで
解決済みの md5sum → sha512sum 移行問題を何度も蒸し返された挙句、
MobaXterm とか cygwin 関係ねぇじゃんって環境で動かんとか、
正直しらんがなって案件まで issue に上げられてピキピキしてたところに、
今度は issue #71, issue #72
bash v4.1 使ってるんだけど test -v が v4.2 からじゃないと動かねんだけど?って聞かれて、
は? v4.2 は 2011 年から使用可能だぞ、更新しろ、ってブチ切れた結果、上記の状況に至った模様。
Cygwin は基本的に setup.exe で最新状態維持しながら使うもんだし、
cygwin 公式のリポジトリに収録されてるバイナリパッケージには既にそんな古いバージョン残ってないんだから、
古いバージョンで動かんとか言われても、そりゃ知らんわと思う。



2016-01-29:
今のところ私家版には実害は及んでないんだけど、
なんか、状況が混沌としてきたと言うか、目を疑う事態になった。
まず、私家版の fork 元が ahmedzafar28/apt-cyg に変わっていた。
新メンテナーが名乗りを挙げて引き継ぎが行われたのかと思い、良かった良かったと思ったのも束の間、
ahmedzafar28/apt-cyg は3年前に Stephen Jungels 氏が GitHub に公開した初期版最後のバージョンであり
どうも様子がおかしい。
transcode-open/apt-cyg を覗いて見たところ
どうも DMCA でクレーム入れた輩が出たらしく、
リポジトリが takedown されている。
クレームでは
I own 635/673 lines, or 94% of the code.
って言ってるんだけど、直近のコードでそれ主張するのは Steven Penny 以外あり得ないので、
彼の Publick activity 覗いてみたら、
svnpenn/sage/issue#2: How does sage compares to apt-cyg ? #2 に、
The apt-cyg repository has been closed by me under a DMCA takedown, likely permanently. I am seeking a court order today to assist in this. I am the sole developer for both projects so I would say the choice is clear.
とか書いてある始末。
え?お前何様? transcode-open/apt-cyg のメンテナまかされてて
人様のリポジトリ間借りして MIT license の下、コード改変して公開して来たんだから、
今更メンテナ降りたからって、人様のリポジトリ消す権利あるんだっけ?
契約を反故に出来る条文は MIT license にはないし、一旦契約している以上その契約には従う義務があるはずだが?
それにそもそも9割以上書き換えたと言っても Stephen のコードがベースにあって、今のコードがあるんだよね?

で、当の Steven はと言うと、彼が最後に手を加えた
2016-01-23 13:31 JST に you guys love wasting my time or: fix #72 をまるごと移設して名前だけ変えた
svnpenn/sage (Cygwin package manager) とかいうプロジェクトを
5日前 2016-01-24 10:24JST にちゃっかり立ち上げていて、絶賛開発を継続中とか、え?それはいくら何でも酷すぎるでしょ?
一部のユーザーに対する腹いせのつもりかもしれないが、その他何も関係ないユーザーにとばっちり浴びせるとか、
彼には何も迷惑かけてない大多数の trunk 版 apt-cyg ユーザーに対してあまりにも非道な行いじゃね?それは?
むしろ嫌がらせだよね?
それはいくらなんでも道義的におかしいわ



2016-02-02:
counter notice はリポジトリの owner が出してねって書いてあったけど、
Stephen Jungels 氏は最後の commit で忙しいから適当にやってね的なコメントしてたので、
2016-01-30 00:58 に自分は transcode-open の owner じゃないけどと断り書きをした上で
ダメ元で DMCA counter notice 出してみた。
同日明け方 05:20 に住所、氏名、電話番号、メールアドレスが抜けてるのは受け付けられない。
様式が整っていたら迅速に処理するよって返事が来たので、
owner じゃなくても通るのかと、ちょっと期待しながら同日 18:23 に再提出。
週末挟んでたのでその間音沙汰がなかったのは仕方ないとして、
2016-02-02 04:40 に owner 以外の counter notice は受け付けられないと返事が来てカチンと来た。
それ、最初に owner じゃないって断ってる時点で明らかだよね?
落とすなら最初の返事の時点で落とせよ。その判断基準でわざわざ個人情報求める意味が分からない。
そのくせ自分で出した MIT license に食って掛かっている svnpenn のクレームは素通ししてるし、
本当にお役所仕事と言うか、ロジックが完全に破綻しザル極まってて実に酷い。
DMCA claim 入れれば簡単にリポジトリ止めちゃうのに、再開が地味に面倒とか、
DMCA spam で埋まったら簡単に機能麻痺するよね?死にたいのだろうか?
オープンソースに理解のある会社だと思ってたんだが失望に値する。

とりあえず 2016-01-30 05:42 に Stephen Jungels 氏 (twitter だと Steve Jungles になってるけど) が
counter-claim 出したって言ってるのでこっちが通るのを待つしかなさそう。


2016-02-04:
より 見るとStephen Jungels 氏による DMCA couter-notice が公開された模様。 しかし、transcode-open/apt-cyg は依然として凍結中。
これ、commit が 2016-01-28 01:25 JST になってるんだけど、これ時系列的におかしくない???

commit の確認

| * commit e74005839a278219774a8c53fd57c6574b607eb0
|/ Author: Hubot <cwanstrath+hubot@gmail.com>
| AuthorDate: Wed Jan 27 14:25:19 2016 -0800
| Commit: Hubot <cwanstrath+hubot@gmail.com>
| CommitDate: Wed Jan 27 14:25:19 2016 -0800
|
| Process DMCA request
...
| * commit 28ceb5f8dd70b1a7f92d3f9fae053f039b2883c4
|/ Author: Hubot <cwanstrath+hubot@gmail.com>
| AuthorDate: Wed Jan 27 14:24:52 2016 -0800
| Commit: Hubot <cwanstrath+hubot@gmail.com>
| CommitDate: Wed Jan 27 14:24:52 2016 -0800
|
| Process DMCA request

うちから出した counter notice が却下された件については
2016-02-02 11:23 に「オーナーじゃないって書いてるのに再提出しろとか非論理的だ」(意訳)って返信したら
2016-02-03 02:30 に「ごめん読んでなかった」(意訳)って返事が来た。まぁザルだよね。
うちから出した counter notice には
「MIT ライセンスを根拠にすれば、svnpenn に DMCA takedown する権利はないのは明白だろ?」(意訳)
って書いてるんだけど、
svnpenn の DMCA claim は権利関係についてろくに根拠確認もせずに通してるのに、
DMCA claim が無効な明確な根拠示しても、オーナーじゃないので受理できないって姿勢。
正直あほかと思った。。

この件に関しては以下のようなやり取りもされてて

svnpenn が来た時、何も考えずに Google Code からパッチ含めて丸写しされたので、一旦ライセンス表記とかが GPL に戻ってたんだが、
「この fork は原作者の意向で MIT license に変更されたのになんで勝手に戻すの?」(意訳)って言ってやった結果、
また MIT license に戻ったって経緯もあったため、
そのまま GPL にしてたら今頃 FSF のライセンシングチームに降臨頂けてたのになぁと地味に後悔してるところ。
まぁ、普通、trunk のメンテナ任された奴が、こんな法的根拠のない DMCA claim 使った無様な反乱起こして、
よもやそれが素通しされた上、
ましてやそれが解除もままならないなんて状況は想像出来ないけどね。
MIT license は自由度高いけど組織的な後ろ盾がないので、
こういう時マッチョな後ろ盾のある GPL って本当に心強いなって思った。

Oh my St. Ignucius!
Amen.



2016-02-06:
なんか trunk が揉めてるせいでうちから派生して GPLv3 適用した fork が現れた。
  • GitHub / pi0 / cyg

fork 自体は歓迎するし、
MIT license を GPLv3 で再ライセンスするのもライセンス的に何も問題はないんだけど、
そのモチベーションが
So i forked kou1okada/apt-cyg (MIT) and legally sublicensed it to GPLv3 to avoid problems like this in the future..
ってのは具体的に誰を想定してるんですか?
って意味でとんだとばっちりな気がするのは気のせいだろうか?

クレジット書いてくれてるのはありがたいし、おそらく他意はないんだろうけど、
その書き方だと一見リスペクトしてるように見えて、実はディスってるという高度なレトリックとしても読めてしまう。
作文って難しい。

閑話休題

上記 fork は現時点でライセンスの変更以外にも aria2c 対応等の改良も少しずつ行っているようなので、
今後も継続的にメンテされることを願いたいが、
うちが MIT license で行く限り、うちへの還元は有り得ないのがちょっと悲しい。

折角 MIT license でゆるくやってたのに
いらん猜疑心を植えつけたって意味で svnpenn の罪は大きいな。

さて、本日も絶賛凍結中の trunk であるが、
週末に入ってしまったので来週頭まで GitHub は動かないはず。
29日からなので既に1週間を超えてしまった。
地味に長い戦いだ。
Stephen Jungels 氏の counter notice も既に公開されているというのに一体どうなっているのだろうか?



2016-02-16:
2016-02-09 12:33 に、GitHub へ進捗を教えてほしいとメールしたけど、音沙汰がなかったので、
2016-02-16 03:21 にもう一度、進捗を教えてほしいとメールしてみたところ、
2016-02-16 04:10 に返事があった。
曰く、DMCA Takedown Policy に従ってるよと。
If a copyright owner wishes to keep the content disabled after receiving a counter notice, they will need to initiate a legal action seeking a court order to restrain the user from engaging in infringing activity relating to the content on GitHub. In other words, you might get sued. If the copyright owner does not notify GitHub within 10-14 days that it has initiated a legal action, GitHub will reenable the disabled content.
これは以下の8番目の項目 GitHub における DMCA Takedown Policy の最終段階の手続きのようだ。
簡単に言えば、counter notice が提出されてもなお DMCA takedown を続けたければ、裁判所に訴状出してね。
訴状出したって通知が GitHub 届かなかったら 10-14 日で凍結解除するよ。
と言う事なんだけど、つまり、あとは当事者間の問題なので裁判所でやってねと言う事だね。

Counter notice が公開されたのが 2016-01-27 なので、本日で既に 20 日経過していることになるわけだが、
それはつまり、svnpenn が裁判所に訴状提出したって事ですか?
えっと、確かに、上で参照した svnpenn/sage/issue#2: How does sage compares to apt-cyg ? #2 にも、
The apt-cyg repository has been closed by me under a DMCA takedown, likely permanently. I am seeking a court order today to assist in this.
って書いてあるんだけど、まさか、これ本当に裁判所に訴状提出したって意味だったの???
Stephen Jungels 氏が

で「問題が解決するまで何も言えない(意訳)」って言ってた意味はそういう事ですか?

ここまでするとは正直驚きを隠せないのだが、
人のリポジトリ任されて MIT license 下で修正版の開発と公開して来たのに、その根拠のない自身はどこから来るんだ???
いや、それよりも MIT license の法的根拠を理解出来ない奴がリアルな訴状出したって事がむしろ新鮮な驚きと言うか、
冷静になって考えてみると、これは実に巧妙な嫌がらせなのかもしれない。
だって、裁判になったら、裁判所に行かないと不戦敗なんじゃないか???

えっと、 見るとカリフォルニアの法の下で使えと書いてあるけど、これ裁判どこでやるんだろう?
普通に考えると svnpenn が訴状出したのは地元の裁判所だよな?

仮に自分が訴えられたとして、
無償提供しているたかだか 1,000 行やそこらコードのために
海渡ってまで裁判しに行くかと言われると正直勘弁して欲しいんだが、
これ本当、地味に示唆に富んだ事件だな。

極めて質が悪い。

念のため、GitHub には、「それは訴状出されたって意味で合ってますか?(意訳)」って質問しておいたが、
GitHub さん、いい加減な処理してるなーとか思ってごめんなさい。
訴状出されたら、そりゃ仕方ない。
えげつないわ。

Stephen Jungels 氏と svnpenn の個人的な関係については知る由もないが、
メンテナ降板前後の svpenn の言動を見ると、
明らかに的外れな issue 上げるユーザーにキレてたように見えるので、
仮に、それらユーザーに対する嫌がらせだとすれば、
巻き込まれた Stephen Jungels 氏は良いとばっちりだが、
何ともまぁ巧妙な手を考えたものだなと。
でもそれらのユーザーは今回の件について、
多分何とも思ってないし、下手すれば気付いてもないんじゃないだろうか?
結果として issue とは全く関係ない大多数のユーザーに対して
多大な迷惑をかけている点について全考えてないんだろうなぁ。

野良プロジェクトとは言え、
ある意味 cygwin のキラーアプリケーションと言っても過言ではないプロジェクトの
公式リポジトリのメンテナ―を任された人間の取る行動としてはあまりにも不適切と言うか
責任感、倫理観、正義感等が決定的に欠如しているように思える。

何で公式のメンテナになった?
野良か、せめて fork でやれば良かったじゃん。



2016-02-17:
2016-02-16 13:07 に訴訟になっているのか質問した回答が、
2016-02-17 15:00 に返って来た。
内容は、プライバシーに対する懸念から、DMCA takedown の個別の内容について第三者への回答は致し兼ねます(意訳)との事だったのだが、こういう答え難い内容に対してもきちんと返信をしてもらえた事に非常に感謝している。

まぁ、状況的に考えて、昨日の推論で合ってるんだろう。



2016-03-02:
03:17 現在 DMCA takedown が解除されていることが確認出来た。
しかし Watch と Star は以前のままだが、Fork は空の状態で、DMCA takedown 以前の fork の親子関係は復元されていない。
つまり takedown 以前に fork されたリポジトリは ahmedzafar28/apt-cyg が親の状態のままであり、
transcode-open/apt-cyg は単独で fork なしの状態となっている。

16:16 fork の親子関係が壊れたままなので修正してもらえないかお伺いを立ててみた。


2016-03-13:
2016-03-02 20:10 に返信があり、kou1okada/apt-cyg 以下は transcode-open/apt-cyg 以下に再配置された。
ただし、ahmedzafar28/apt-cyg 以下にぶら下がっている fork は依然としてそのままだったので、
2016-03-03 04:38 にその点を指摘するメールを投げておいたところ、
2016-03-10 21:00 に「正しい階層への再配置に取り組んでいるが、ネットワークサイズが大きいので少し時間が必要(意訳)」と返信があった。
2016-03-13 05:23 現在、ahmedzafar28/apt-cyg 以下に大半の fork がぶら下がっている状況。

その一方で、
ふと気付けば 2016-03-03 12:51 のコミットで sage へ GPLv3 が付与されてるし。
どうも issue #15 の結果のようだが、
意味分からん。本当に意味分からん。
svnpenn。君は一体何がしたいんだ!?

とりあえず、公式 fork に現状で必要だった修正を施した私家版を以下で公開している。 この件で、以前ここにごちゃごちゃ書いていたことは apt-cyg.20131025, apt-cyg.20131219, apt-cyg.20140521 に退避したので、興味があればそちらを参照。

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パラメータに与える必要がある。

Cygwin 1.7.22 で導入された multiarch 対応についての修正は以上だが、その他にも以下のような修正を施してある。
  • --ignore-case,-i オプション: 検索時に大文字小文字を無視する。
  • --use-setuprc オプション: setup-x86.exe, setup-x86_64.exe の cache, mirror 情報を引き継ぐ。
  • --force-remove オプション: remove 時に強制的に削除する(.xz 非対応版で package db が壊れた場合等への対応用)。
  • --ipv4,-4 オプション: wget で ipv4 を強制する。
  • GnuPG による署名確認必須化 (-X オプションでキャンセル可能)
  • 公開鍵管理機能の追加(cygwinports 等も検証できるようにした)
  • upgrade-self サブコマンドの追加。git clone で取ってきている場合 git pull 出来るようにした。(2014-04-10)
  • --proxy,-p オプション: proxy を設定する。デフォルトは簡易版 wpad により proxy の自動設定する。APT_CYG_PROXY 環境変数でデフォルト値を指定可能。(2014-05-06)
  • depends, rdepends サブコマンドの追加。依存関係を芋づる式に辿って表示する。(2014-05-06)
  • bash completion のサポート。completion-install, complition-uninstall サブコマンドで bash completion の登録・解除を行なえるようにした。completion script は apt-cyg の更新を検出して自動更新する。--completion-disable-autoupdate オプションをつけて completion-install すると自動更新しない。(2014-05-11)
  • benchmark-mirrors サブコマンドの追加。ミラー選択用に各ミラーサイトのダウンロード速度を計測する。(2014-05-19)

2013-12-19 現在、GnuPG による署名確認に対応している fork は見当たらない状況なので、セキュリティ気にする人にはお勧めかもしれない。
wpad による proxy 自動設定は proxy 設定しないと外に出れない環境対策。申し訳ないが wpad が提供されない環境だと1秒くらい起動にもたつく。export APT_CYG_PROXY=inherit 設定して親の環境引き継ぐようにしておいてもらえれば実害はなくなる。

今後の拡張すべき項目

2013-12-19:
  • noarch 対応(cygwinportsで必要) x86, x86_64 の setup.ini の中からパス指定して呼ばれているので、対応は不要だった。
  • last-mirror の複数 mirror 対応(cygwin と cygwinports の併用で必要)
  • upgrade 対応(mintty, bash, cygwin1.dll 等が使用中だと上書きが難しいのが難点) 2015-04-09 に 01318a にて dist-upgrade サブコマンドを追加。
  • setup wrapper(オプションつけて呼べるので自前でごちゃごちゃやるよりこっちの方が楽そう) 2015-04-10 に 61e7222 にて setup サブコマンドを追加。
  • remove 時の依存関係解消
  • completion 対応 (2014-05-11 対応)
  • 高速化

公式版

Google Code 版について、カレントディレクトリに最新版を取得するには以下のようにすれば良い。
wget http://apt-cyg.googlecode.com/svn/trunk/apt-cyg
chmod +x apt-cyg
GitHub 版については以下のようにすれば良い。
wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
chmod +x apt-cyg

私家版

上記の私家版については、要 PowerShell だけど、cygwin 本体に加え apt-cyg と mintty here までセットにして bootstrap 的に自動セットアップする BAT ファイルを作っているので、これをダウンロードして実行するだけで cygwin が入ってない状態から apt-cyg のインストールまでが一気に完了する。
apt-cyg は git clone で取って来てくるので upgrade-self も可能。
ただし、メーカー製の PC の一部で UAC の設定が微妙にカスタマイズされているらしく、パーミッションの問題が出る事があるようなので注意が必要かも。
安全に入れるには wget,ca-certificates,gnupg,git の4パッケージを導入した上で、以下のように git clone しておくと upgrade-self サブコマンドで最新版に同期出来るのでオススメ。
[ "`arch`" = "i686" -a ! -e /etc/ssl ] && ln -s /usr/ssl /etc/
git clone https://github.com/kou1okada/apt-cyg.git
ln -s "$(realpath apt-cyg/apt-cyg)" /usr/local/bin/
apt-cyg --use-setuprc
git clone する場所はどこでも良いが /usr/local 以下が良いと思う。
git を入れたくない人は wget,ca-certificates,gnupg の3パッケージを導入した上で、以下のようにしても良い。
[ "`arch`" = "i686" -a ! -e /etc/ssl ] && ln -s /usr/ssl /etc/
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')"
あと、署名の検証なんて不要と言う男らしい(?)人は --no-verify または -X オプションで検証を省略出来るので GnuPG はなくても動くが、そういう人は私家版を使う意義はないと思う。

バグ

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 で解消した。
2014-01-14 現在、以下のようにすると、検証に失敗する。
原因は setup.bz2 が更新されているのに setup.bz2.sig が更新されていないせい。
setup.ini.sig で setup.ini を検証すると問題ない模様。
関連:
Windows8 上の cygwin64 にインストール ca-certificates パッケージを導入すると、postinstall に失敗するらしく、SSL 認証が出来ない状態に陥る。
原因は裏で呼ばれてる /usr/bin/p11-kit が seg る事なんだが、少なくとも Windows 7 Ultimate 上の cygwin64 だと再現しない。
Windows8 と p11-kit の相性が悪いのか???
とりあえず、cygwin32 も入れてるなら、そちらから pkey をコピーしておくことで場当たり的な対応は可能。 Cygwin 本家にも投げてみたが、伝わるのか?これ?
MITM (man-in-the-middle) 攻撃対策の一環で setup.ini に記録されてるファイルのハッシュ値が md5 から sha512 に変更されたらしい。
手元に残っている setup.ini を見ると、少なくとも 2015-03-20 09:10 JST の時点では、md5 だったようだが、GitHub 上の本家 apt-cyg の issues を見ると 2015-03-24 12:31 JST の時点では sha512 に変更されている模様。
とりあえずハッシュの長さ見て自動的に md5, sha1, sha224, sha256, sha384, sha512 を選択するように変更しといた。

参考:
追記: 2015-04-16
この件については、影響が極めて大きいのに本家の対応があまりにも遅いので見るに見かねて pull request #43 を投げた。

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

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

このページへのコメント

Kazu さん、コメントありがとうございました。

"C:\cygwin\bin\ash" 決め打ちは、64bit版 cygwin 対応を考えても明らかに問題があったので、コメントを参考に修正させて頂きました。

cygwin プロセスが終了されていないと怒られたので
Taskkill /IM bash.exe /F
されたという件については
kill_all_cygwin_process
が同じ役割をしてくれるはずで、
少なくとも私の手元にあるいくつかの環境では上手く行っているため、
上手く行かない場合の状況がつかめていない状況です。
すみません。

Posted by kou1okada 2015年06月29日(月) 05:13:27

初めまして。
github/kou1okada/apt-cyg を使わせて頂いております。

まず、私の cygwin のインストールディレクトリは "D:\cygwin" です。その際、

# apt-cyg dist-upgrade

の挙動がおかしいことに気付きました。
そこでソースを確認すると function apt-cyg-dist-upgrade-no-ask 内で
"C:\cygwin\bin\ash"を実行している箇所がありました。
cygstart で立ち上げた cmd のパスは cygwin シェルのパスを引き継いでいるはずなので

"C:\cygwin\bin\ash" -> "ash"

とすると rebaseall が呼ばれました。
しかし cygwin プロセスが終了されていないと怒られたので
SETUP_EXE 実行後に

> Taskkill /IM bash.exe /F

してから rebaseall すると dist-upgrade がうまくいきました。
以上、報告でした。

Posted by Kazu 2015年05月06日(水) 17:57:43

コメントありがとうございます。
2014-02-24 の commit で if 文のスタイルを統一した際、真偽値が逆にする大ポカをやらかしていました。すみません。
2014-04-11 の commit で修正したので現在は直っていると思います。

Posted by kou1okada 2014年05月05日(月) 21:16:27

始めまして。
早速ですが、今年の初めごろより貴 apt-cyg を便利に利用させて頂いておりました。

それで、本日別の PC にも cygwin を一から入れ直す事になったため、最新の apt-cyg を GitHub より取得して入れたのですが、どうもうまく動作しません。

具体的には、どの package も引数に指定した物は入るのですが、それが requires として要求しているものが一切入りません。

それで確認してみたところ、どうも

https://github.com/kou1okada/apt-cyg/commit/20399a5fc86b9dc00eac2849d8666f0c9b98d87c#diff-f648982bd734e49811c931f511cb33e2

で、688 行目に追加された if [ -z .. ] の条件が逆な様に思います。試しに、これを if [ -n .. ] としたところ、requires も自動で入るようになりました。

とりあえず、情報まで。

Posted by Forgetty 2014年03月24日(月) 21:44:16

コメントをかく


ユーザーIDでかく場合はこちら

画像に記載されている文字を下のフォームに入力してください。

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

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

Wiki内検索

フリーエリア

編集にはIDが必要です