* 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 件のコメント:
コメントを投稿