2009年12月1日火曜日

debian-emacs-policyのポイント (2)

perlを思い出しつつ、スクリプトを多少調べてみた。


* emacsen-commonのスクリプト
- debian-emacs-policyにある例を理解できない。それ
を理解したい。
- 例1

1) Xemacs21 and the add-on packages tm and auctex are already installed,
and now someone installs emacs21.

In it's postinst, emacs21 would make this call:

/usr/lib/emacsen-common/emacs-install emacs21

which would result in calls to

/usr/lib/emacsen-common/packages/install/auctex emacs xemacs21
/usr/lib/emacsen-common/packages/install/auctex emacs21 xemacs21
/usr/lib/emacsen-common/packages/emacs21/install/tm emacs xemacs21
/usr/lib/emacsen-common/packages/emacs/install/tm emacs21 xemacs21

- わからないところの特定
- /usr/lib/emacsen-common/emacs-install emacs21
- これはわかる。これをpostinstで実行するとがポ
リシーだから。
- しかし、上の呼出しが、

/usr/lib/emacsen-common/packages/install/auctex emacs xemacs21
/usr/lib/emacsen-common/packages/install/auctex emacs21 xemacs21
/usr/lib/emacsen-common/packages/emacs21/install/tm emacs xemacs21
/usr/lib/emacsen-common/packages/emacs/install/tm emacs21 xemacs21

これになるのはわからない。特に、なんで'emacs
が呼ばれるの?というところ。具体的には、

/usr/lib/emacsen-common/packages/install/auctex emacs21 xemacs21
/usr/lib/emacsen-common/packages/emacs/install/tm emacs21 xemacs21

こうじゃないの? と。

- ソース解読
- 解決。私の「こうじゃないの?」で正しそう。
- 根拠。
- install済みのflavorsは、

/var/lib/emacsen-common/installed-flavors

に記載されており、emacs-install
scriptも'other-flavors'の値はこれを使用してい
る。なので、ここに何が書いてあるかが、展開し
て実行する命令群を決める。
- すると、ポイントは、meta packageである'emacs'
がここに含まれるかどうか、だ。私の環境では、

i emacs - The GNU Emacs editor (metapackage)
i emacs22 - The GNU Emacs editor (Emacs 22)

というinstall状況だが、installed-flavors
は'emacs22' のみを内容として含んでいる。
- 実証。
- 'emacs22'と'xemacs21'がinstall済みの状態で、
'emacs21'にて、emacs-install scriptをdry
runさせてみる。を入れてみよう。
- emacs-installをcopyしてemacs-install-testと
して、my $dry_run = 1;とする。

emacsen-common $ ./emacs-install-test emacs21
emacs-install emacs21
/usr/lib/emacsen-common/packages/install/apel emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/cedet-common emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/debian-el emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/dictionaries-common emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/emacs-extra emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/emacs-goodies-el emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/emacsen-common emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/global emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/latex-cjk-common emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/lookup-el emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/mdk emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/mew emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/mmm-mode emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/octave3.0-emacsen emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/paredit-el emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/prolog-el emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/ruby1.8-elisp emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/w3m-el emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/flim emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/elscreen emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/ddskk emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/speedbar emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/eieio emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/dpkg-dev-el emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/slime emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/nxml-mode emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/maxima-emacs emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/latex-cjk-thai emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/ede emacs21 emacs22 xemacs21
/usr/lib/emacsen-common/packages/install/semantic emacs21 emacs22 xemacs21
Installed flavors are now: emacs22 xemacs21 emacs21
emacsen-common $
- うむ。実証できた。

- 例2
- これは例1のremove版なのでinstallと同様の動作
であろう。内容確認は割愛。

- 例3
- an add-on packageをremoveする例。
- 'emacs22'と'xemacs21'がinstall済みとする。
- 'wget-el' add-on packageがinstall済みとする。
- 'wget-el'をremoveする。
- 例の挙動は、次のとおり。
- prermにて、emacsen-package-removeが'wget-el'を
引数にて呼ばれる。
- その結果、次の命令群が生成される。

/usr/lib/emacsen-common/packages/remove/wget-el emacs emacs22 xemacs21
/usr/lib/emacsen-common/packages/remove/wget-el emacs22 emacs22 xemacs21
/usr/lib/emacsen-common/packages/remove/wget-el xemacs21 emacs22 xemacs21

- ここでも、'emacs'が何故存在するのかがわから
ない。次のものならわかる。

/usr/lib/emacsen-common/packages/remove/wget-el emacs22 xemacs21
/usr/lib/emacsen-common/packages/remove/wget-el xemacs21 emacs22
- dry run。
- 今度は先にdry runしてみる。

emacsen-common $ ./emacs-package-test-remove wget-el
/usr/lib/emacsen-common/packages/remove/wget-el emacs emacs22 xemacs21
/usr/lib/emacsen-common/packages/remove/wget-el emacs22 emacs22 xemacs21
/usr/lib/emacsen-common/packages/remove/wget-el xemacs21 emacs22 xemacs21
emacsen-common $

- なんと。。。

- ソース解読。
- あ、

map {
my $script = $lib_dir . "/packages/$action/$_";
execute($script, 'emacs', @installed_flavors) if -e $script;
} @pkgs_to_handle;

なるものがいる。
- なので、add-on packagesについては
install/removeにおいて、'emacs'がかならず引
数に入ってくるのだな。
- そもそも、なんでothersをならべる必要がある
のか?
- packages/remove/wget-elをみてみる。

#!/bin/sh -e
# /usr/lib/emacsen-common/packages/remove/emacs-wget

FLAVOR=$1
PACKAGE=wget-el

if [ ${FLAVOR} != emacs ]; then
# if test -x /usr/sbin/install-info-altdir; then
# echo remove/${PACKAGE}: removing Info links for ${FLAVOR}
# install-info-altdir --quiet --remove --dirname=${FLAVOR} /usr/info/emacs-wget.info.gz
# fi

echo remove/${PACKAGE}: purging byte-compiled files for ${FLAVOR}
rm -rf /usr/share/${FLAVOR}/site-lisp/${PACKAGE}
fi
- うむー。$1しか使っていない。


こつこつ。

0 件のコメント: