スポンサーサイト

上記の広告は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まで減る模様.

スポンサーサイト

Cygwinパッケージの追加方法(試行錯誤中)

本日,cyg-aptをバンドルした gnupack 4.06aをリリースしました.詳細はgnupack Users Guideをご覧ください.

ここからが本題です.gnupackの Cygwinには私の考える必要最低限のパッケージを含めていますが,人にとっては必要最低限を満たせていない可能性があります.しかし,万人向けに対応しようとすると,パッケージがどんどん増えて,ファイルサイズが大変なことになります.

そこで,不足のパッケージがあれば,利用者自身で追加する仕組みを組み込むことにしました.Webで調べたところ,cyg-aptというコマンドラインからパッケージが管理できるツールがあるようなので,今回はこれを利用します.ちなみに,導入したばかりでなんですが,xinitのインストールを試してみたところ,うまくインストールできていませんでした.また,rubyのインストールを試したところ,コマンド実行はうまく言っていたようですが,cygcheck -c rubyの結果が「Incomplete」となっていました.まだ見直しが必要そうなので,今後の検討課題にしようと思います.

実行イメージはこんな感じです.

  • 引数なし,あるいは「help」指定で起動するとヘルプを表示します.
    [Path: /tmp]# /app/script/cyg-apt.py help
    cyg-apt [OPTION]... COMMAND [PACKAGE]...
    Commands:
        available -  show packages available to be installed
        ball - print tarball name
        build - build package from source in CWD
        download - download package
        find - package containing file
        help - help COMMAND
        install - download and install packages, including dependencies
        list - installed packages
        md5 - check md5 sum
        missing - print missing dependencies
        new - list available upgrades to currently installed packages
        remove - uninstall packages
        requires - print requires: for package
        search - search package list
        setup - cygwin environment
        source - download, build and install
        update - setup.ini
        upgrade - all installed packages
        url - print tarball url
        version - print installed version
    
    Options: -d,--download download only -i,--ini=FILE use setup.ini [%(setup_ini)s] -m,--mirror=URL use mirror [%(mirror)s] -r,--root=DIR set cygwin root [%(root)s] -t,--t=NAME set dist name (*curr*, test, prev) -x,--no-deps ignore dependencies
  • 初回実行時は setup.iniを取得するために,cyg-apt setupを実行します.setup.iniを再取得する場合には,cyg-apt updateを実行します.
    [Path: /tmp]# /app/script/cyg-apt.py setup
    getting C:/gnupack_devel-4.06a/app/cygwin/cygwin/etc/setup/setup.ini
    ...100%
    
    [Path: /tmp]# /app/script/cyg-apt.py update ...100%
  • パッケージを検索する場合,cyg-apt searchを実行します.例えば,「ruby」文字列が含まれるパッケージを表示するには,cyg-apt search rubyを実行します.
    [Path: /tmp]# /app/script/cyg-apt.py search ruby
    ruby - Interpreted object-oriented scripting language
    subversion-ruby - A version control system (ruby bindings)
    
  • パッケージをインストールする場合,cyg-apt installを実行します.例えば,「ruby」をインストールするには,cyg-apt install rubyを実行します.
    [Path: /tmp]# which ruby
    which: no ruby in (/app/emacs/emacs/bin:GVIM_DIR%/bin:/app/mingw/tdm/bin:/usr/local/bin:/usr/bin:/c/WINDOWS/system32:/c/WINDOWS:/c/WINDOWS/system32/Wbem:/app/gdi++)
    
    [Path: /tmp]# /app/script/cyg-apt.py install ruby Fetching http://ftp.jaist.ac.jp/pub/cygwin/release/ruby/ruby-1.8.7-p72-2.tar.bz2 ...100% C:/gnupack_devel-4.06a/app/cygwin/cygwin/var/cache/setup/http%3a%2f%2fftp.jaist.ac.jp%2fpub%2fcygwin/release/ruby/ruby-1.8.7-p72-2.tar.bz2
    bc133aeeb536c68f2fa815ffff1473f5 ruby-1.8.7-p72-2.tar.bz2 - remote bc133aeeb536c68f2fa815ffff1473f5 ruby-1.8.7-p72-2.tar.bz2 - local installing ruby 1.8.7.p.72-2

    [Path: /tmp]# which ruby /usr/bin/ruby

必要最低限のCygwinパッケージを手軽にローカル保存するスクリプト

gnupack 4.02a gnupack 4.01aをリリースしました.今回のパッケージから私がCygwinを構築するのに使っているスクリプトを含めることにしました.

そもそも Cygwinはパッケージが多く,パッケージ間の依存関係もあるため,自分の必要なものを選ぶのがとても面倒です.そこでこのスクリプトを使うことでローカルディスクに自分の必要なパッケージ(依存関係のあるパッケージを含む)をダウンロードすることができます.ツールの使い方は必要最低限の Cygwinパッケージの取得方法を,ダウンロードはCygwinパッケージ取得スクリプトをご参照ください.

テーマ : UNIX/Linux
ジャンル : コンピュータ

Cygwin1.7の /etc/fstabのフォーマット

 そろそろ Cygwin1.7への移行を考えているので,色々調べ始めています.
 今日は,/etc/fstabのフォーマットを整理したので,備忘録として残しておきます.

 1行に1つのマウントポイントを定義.「#」で始まる行はコメント.
 1行に定義する項目の意味は以下のとおり.
# Comment
<WinPath> <CygPath> <FsType> <Option> 0 0
<WinPath>
Cygwinにマウントする Windowsフォルダのパスを指定する.
パス区切り文字は「\」ではなく「/」を使う必要がある.
また,パス中に空白を含む場合,空白を「\040」に置換する必要がある.
<CygPath>
WinPathをマウントする Cygwin上のディレクトリのパスを指定する.
パス中に空白を含む場合,空白を「\040」に置換する必要がある.
<FsType>
ファイルシステム種別を指定するが,Cygwinでは使わない(評価しない)
ただし,cygdriveを設定する際には「cygdrive」を指定する.
<Option>
ファイルシステムに対応したオプションをカンマ「,」区切りで指定する.
以下のオプション設定が推奨(らしい)
  • binary
    Files default to binary mode (default).
  • text
    Files default to CRLF text mode line endings.
  • nouser
    Mount is a system-wide mount.
  • user
    Mount is a user mount.
  • exec
    Treat all files below mount point as executable.
  • notexec
    Treat all files below mount point as not executable.
  • cygexec
    Treat all files below mount point as cygwin executables.
  • nosuid
    No suid files are allowed (currently unimplemented).
  • posix=0
    Switch off case sensitivity for paths under this mount point
    (default for the cygdrive prefix).
  • posix=1
    Switch on case sensitivity for paths under this mount point
    (default for all other mount points).
第5,6引数
Linuxの /etc/fstabの書式を踏襲するためのダミー.
とりあえず,「0」固定で指定.
参考ページ:http://cygwin.com/cygwin-ug-net/using.html#mount-table

Cygwinと一緒に使うお気に入りのツール

 Cygwinのインストール後,cygwin\usr\bin\bash.exeを実行することで Bashが起動できます.このときウィンドウは cmd.exeで表示されますが,以下の点を不便に思っていました.
  • カーソルカラーをIMEの ON/OFFに応じて変更できない
  • 文字色・背景色やフォントなどを設定ファイルで指定できない ※
  • ウィンドウレイアウト(サイズ,位置)を指定できない
※ 一応,cmd.exeのプロパティで変更できますが,PCを変える毎に設定が必要しなくてはいけないようです.
 ちなみに画面イメージはこんな感じです.

pict091103-001.png

 そこで cmd.exeの代わりに ckwというのを使っています.こちらオリジナル版を改造された方がいたので,それを利用させてもらっています.画面イメージはこんな感じです.

pict091103-002.png

 これに加えて,gdi++ FreeTypeというのを使うと,こんな感じの見た目になります.

pict091103-003.png

 さらに,フォントをVL ゴシックにすると,小文字のエル「l」,数字の一「1」,パイプ「|」とか,大文字のオー「O」,数字の零「0」などが区別しやすくなり,個人的にかなり満足しています.

pict091103-004.png

ちなみに,それぞれの設定は以下のとおりです.
  • ckw
      Ckw*foreground:       red
      Ckw*background:       black
      Ckw*cursorColor:      red
      Ckw*cursorImeColor:   green
    
      Ckw*title:            Bash
      Ckw*exec:             cmd.exe
      Ckw*chdir:            c:\
    
      Ckw*scrollHide:       no
      Ckw*scrollRight:      yes
      Ckw*internalBorder:   1
      Ckw*lineSpace:        1
      Ckw*internalBorder:   0
      Ckw*lineSpace:        0
      Ckw*topmost:          no
      Ckw*transp:           255
      Ckw*transpColor:      #000000
    
      Ckw*font:             VL Gothic2
      Ckw*fontSize:         12
    
      Ckw*geometry:         91x26
      Ckw*saveLines:        1024
    
      Ckw*color0:  #000000
      Ckw*color1:  #000080
      Ckw*color2:  #008000
      Ckw*color3:  #008080
      Ckw*color4:  #800000
      Ckw*color5:  #800080
      Ckw*color6:  #808000
      Ckw*color7:  #C0C0C0
    
      Ckw*color8:  #808080
      Ckw*color9:  #0000FF
      Ckw*color10: #00FF00
      Ckw*color11: #00FFFF
      Ckw*color12: #FF0000
      Ckw*color13: #FF00FF
      Ckw*color14: #FFFF00
      Ckw*color15: #FFFFFF
    
    
  • gdi++
    [General]
    HookChildProcesses=1
    HintingMode=2
    AntiAliasMode=2
    TextTuning=0
    TextTuningR=-1
    TextTuningG=-1
    TextTuningB=-1
    NormalWeight=30
    BoldWeight=30
    ItalicSlant=30
    EnableKerning=0
    MaxHeight=2400
    FontLoader=1
    GammaMode=0
    GammaValue=1.0
    
    LoadOnDemand=1
    LcdFilter=2
    CacheMaxFaces=16
    CacheMaxSizes=16
    CacheMaxBytes=4194304
    

テーマ : UNIX/Linux
ジャンル : コンピュータ

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