スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Cygwinパッケージマネージャ自作中

cyg-apt.pyは Pythonを知らないので,実装を読み解くのに時間がかかりそうなため,自分でPerlを使って作ってみることにしました.スクリプトの名前は,他に使われていないところでcyg-pm.plとしました.とりあえず,setup.iniを解析するところまではなんとかできたので,来週にでも Cygwinインストールのロジックを調査しようと思います.

実行イメージは以下のような感じです.まだ公開できるようなレベルではありませんが…

# ヘルプ表示.「*」付きはまだ設計・実装中
#  cyg-pm.pl help
cyg-pm - Cygwin Package Manager (Version 0.01)

  Usage: cyg-pm [Option]... Command [PACKAGE]...

  Command:
    help              display this message.
    setup             download leaset setup.ini.
    search PACKAGE    search package information.
  * require PACKAGE   search package which depended.
  * list [PACKAGE]    print installed package information.
  * download PACKAGE  download pakage.
  * install PACKAGE   download and install package.

  Option:
    -root DIR         set Cygwin root directory.
    -inifile FILE     set used setup.ini path.
    -mirror URL       set mirror-site URL.
    -output DIR       set download directory for command download.
    -dist NAME        set dist name. (*curr*, prev, test)
    -regexp           available regular expression for PACKAGE.

NOTE
  * is function that is not implemented.

Copyright (C) 2010 ksugita <ksugita0510@gmail.com>

# setup.iniの取得,再取得もsetupで行う
#  cyg-pm.pl setup
* Download setup.ini (ftp://ftp.jaist.ac.jp/pub/cygwin/setup.ini -> C:/gnupack/app/cygwin/1.7.7/etc/setup/setup.ini)


# searchで特定パッケージの情報を表示.
#  cyg-pm.pl search cygwin
* Analyze setup.ini (C:/gnupack/app/cygwin/1.7.7/etc/setup/setup.ini)

* Search package (cygwin [curr])
    Version     : 1.7.7-1
    Description : "The UNIX emulation engine"
    Category    : Base
    Requires    : base-passwd base-cygwin


# さらに -regexpオプションでパッケージで正規表現が利用可能.
# cyg-pm.pl -regexp search cygwin
* Analyze setup.ini (C:/gnupack/app/cygwin/1.7.7/etc/setup/setup.ini)

* Search package (base-cygwin [curr])
    Version     : 2.1-1
    Description : "Upgrade helper scripts from 1.5.x to 1.7.x"
    Category    : Base
    Requires    : cygwin

* Search package (cygwin [curr])
    Version     : 1.7.7-1
    Description : "The UNIX emulation engine"
    Category    : Base
    Requires    : base-passwd base-cygwin

* Search package (cygwin-doc [curr])
    Version     : 1.7-1
    Description : "Cygwin-specific documentation, including man pages and User's Guide"
    Category    : Doc Base
    Requires    : cygwin coreutils man texinfo cygutils _update-info-dir

* Search package (cygwin-x-doc [curr])
    Version     : 1.1.0-1
    Description : "Cygwin/X-specific documentation"
    Category    : X11 Doc
    Requires    : cygwin

追記.Pythonを抜くと gnupack develは 113MB -> 107MB,basicは89MB -> 83MBまで減る模様.

スポンサーサイト

コメントの投稿

非公開コメント

No title

ページャについては、確かに好みもあるところなので、基本パッケージとしてはviewで行くというのはリーズナブルだと思います。(UTF-8関連で泣く泣く好みのjam lessから遠ざかってます...)

ckwについても一通り探してみましたがよい解が見つからず、待ちかなと。(コピペなんてダメというお告げ?)

いずれにせよ作者の方が便利だというのが第一で、素のcygwinとは違って展開してそのままいい感じで使えるというコンセプトは素晴らしいと思っています。

Re: No title

/etc/passwdは,興味深いアイディアですね!
私自身のニーズからいえば,gnupackはシングルユーザで使えればOKなレベルだったので,どちらかといえば,全ユーザのHOMEを固定にするというのが一番楽かなと思ってます(あくまで個人的ですが
bash --login -iにするアイディアは確かにスマートな気がします.まずは,お試しでビルドして gnupack pretestとしてリリースし,様子見をしてみようかと思います.

いずれにしても,/etc/passwdにWindowsログオンユーザのエントリがない場合の問題は,TODOとして記録しておきます.


ページャについて,学生時代は less一筋でしたが,最近はめっきり viewばかりを使っています.
lvが容量も多くないようですし,導入してもいいかなとも思っていますが,やっぱり viewで事足りないようでしょうか?(一応UTF-8とかもちゃんと見えるようですし


ckwについて,これは私も改修したと思っています.どこかでパッチあるいは情報展開されるのを待ってるだけの他人任せな状況ですが..

No title

HOMEの扱いについて以下のようにするのはいかがでしょうか。(3)の変更でbashの起動に若干時間がかかるようになるのがいやな場合は、ユーザが初めて使う場合は一回だけCygwin.batを実行するといいうのもありかと)

(1)config.iniを変更

[SetEnv]
HOME = %inst_dir%\home\%USERNAME%
[Mnt]
mount_point4 = %HOME% ;/home/%USERNAME%;ntfs ;binary,nouser,noacl,posix=0;

(2)/etc/skelに各ユーザ用のカスタマイズ済みドットファイルを作成

(3)startup.bash.cppを変更
(旧) startTerminal(args, "bash");
(新) startTerminal(args, "bash --login -i");

(4)%inst_dir%/bash.exeを起動すると、自動的にホームディレクトリが作成されて、(2)のスケルトンがこぴされます。passwd/groupが更新されてい場合は警告メッセージが出るので、必要に応じてユーザ自身がmkpasswd/mkgroupする(詳細は/etc/profileをご覧ください)

No title

/etc/passwd に利用ユーザのエントリがない状態で、apt-cyg を使ったら、パッケージ展開時にパーミッションの警告が出てしまったので気持ちが悪いのでmkpasswd/mkgroupしました。

以下の何れかがわかりやすい気がしますがいかがでしょうか。
(1)利用するユーザすべてのホームディレクトリを/homeに固定する
(2)利用するユーザごとにホームディレクトリを/home/$USERNAMEにする(個人的にはこちらが自然な気がします)

また、さらに以下が改善するともっと使いやすくなると思います。
(1)いわゆる日本語に対応したページャ(cygwinに含まれるものではlvコマンドでしょうか)を含める
(2)ckwでコピー&ペーストした時に改行がうまく扱われない

Re: No title

/etc/passwdから Administratorのエントリを削除すると,ホームディレクトリを /etc/passwdからではなく,環境変数 HOMEから読み取って,sshがうまく動作しませんでしょうか?

実際に私の環境では,/etc/passwdに Windowsにログオンしているユーザのエントリを登録していません.(逆に登録すると,確かに .sshの作成で失敗しています)

# もし上記でうまくいくようなら,/etc/passwdから全エントリを削除する…?
# それはそれでなんか怖そうな気がします…

No title

apt-cygについては、svn で checkout するなり、wget http://apt-cyg.googlecode.com/svn/trunk/apt-cyg などしてダウンロードできます。1行目の空行を削除して、PATHの通っている場所に置くのを忘れずに。(apt-cygコマンド内部で自分自身を呼んでいるのでPATHが通っている場所に置く必要があります)

apt-cyg自体はシェルスクリプトなので、pythonは必要なくなります。

sshコマンドは、/etc/passwdにあるホームディレクトリを見るようです。(/etc/passwd を本当に見ているかまではきちんと追っていません。straceすればたぶん分かると思います)このため、例えばgnupackを展開しただけの状態でAdministratorでsshを起動すると、/home/Administrator/.sshを見に行きます。このため、Administratorというディレクトリがないのでホスト鍵の保存に失敗します。

gnupackを展開した後で、mkpasswd/mkgroupを実行し、/home/$USERNAMEを作成、config.iniのHOMEとマウントポイントを/home/$USERNAMEに変更するのがよいかと。これだとconfig.iniを単一ユーザ決め打ちにしてしまうので根本解にはなりませんが、私は取り急ぎこれで逃げています。

No title

非常に参考になるご意見いただき,ありがとうございます!

apt-cygについて,ぱっと見で同じものと思いましたが,
CygApt(http://code.google.com/p/maphew/wiki/CygApt)とは別物なんですね.
ちなみに,「Downloads」タブを選択すると「This project currently has no downloads.」と
表示されているのですが,現在公開されているんでしょうか…
(あとは,実装言語がなんであるかが気になるところ…

LC_ALLとLC_CTYPEおよびSHELLについては,次のリリースで修正させていただきます.
(最悪でも 4.07bとして今週末にリリースするつもりです)

sshの失敗については,もう少し詳細を教えていただけますでしょうか?
私自身は,sourceforgeなどのホスト鍵を ~/.ssh/known_hostsに保存してますが,
特に問題がおきていません.マニュアルに記載するため,ご参考にさせて
いただければと思っています.

他にも何か気づくことがあれば,ご連絡いただけると幸いです.
(基本,週末しか動けませんが…

No title

apt-cyg (http://code.google.com/p/apt-cyg/)はいかがでしょうか。wgetを使っているので、proxyがある環境では.wgetrcで設定すればいいので便利です。

以下、gnupackを便利に使っていて気が付いた点です。

gnupackのconfig.iniでは、LANGのみ設定して、LC_ALLやLC_CTYPEは設定しないほうがいいと思います。env LC_TIME=C dateとかしたときにはまりました。

SHELLをconfig.iniで設定するならばbashではなく/bin/bashにしたほうがいいと思います。scriptコマンドではまりました。

以下のコマンド実行や、HOMEへの反映をマニュアルに記述しておくといいと思います。sshコマンドで、ホスト鍵の保存がうまくいかなくてはまりました。

mkpasswd -l > /etc/passwd
mkgroup -l > /etc/group
リンク
最新コメント
カテゴリー
最近の記事
月別アーカイブ
ブログ内検索
最新トラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。