加藤(大阪)です。
ちょっと興味が有ったので、こちらでも調べてみました。
(単なる "補足" になりそうですが...)
Fri, 22 Jan 2010 21:15:51 +0900 (JST) 付
ARAI Shun-ichiさんのメールより:
> cp $3 ${HOME}
> ......
> cp を実行していますが、コピー先が ${HOME} となっており、ファイル名を
> 指定していません。
ここは、ファイル名を指定していないのではなく、$3 = $NEW をコピー元ファイ
ル名として指定しているので、例えば、
> ##### emacs-faces.el
> TARGET=${HOME}/.emacs-faces.el
> NEW=/etc/skel/.emacs
> ......
> chkMD5Update $TARGET $MD5SUM $NEW && rm ${TARGET}
の部分で chkMD5Update() がよばれた時は、
cp /etc/skel/.emacs ~/
が実行されると思います。
で、その前の箇所、
> chkSame $TARGET $NEW || (
で、$TARGET と $NEW を比較する chkSame() を呼んでますが、
> TARGET=${HOME}/.emacs-faces.el
> NEW=/etc/skel/.emacs
と、全く違うファイルを、
if diff $1 $2 >/dev/null 2>&1; then
※ $1 → $TARGET、$2 → $NEW
で比較している為、chkSame() は、必ず 1 を返すの
で、|| 以下の部分が実行され、chkMD5Update() で ~/.emacs-faces.el が "旧
バージョンよりの修正が無かった場合" は、/etc/skel/.emacs-faces.el ではな
く、/etc/skel/.emacs がコピーされてしまう、という感じですね。
この為、直前の、
##### emacs
TARGET=${HOME}/.emacs
NEW=/etc/skel/.emacs
......
chkMD5Update $TARGET $MD5SUM $NEW
の部分で折角 "以前のバージョンの、カスタマイズ済みの ${HOME}/.emacs が保
持された" 場合でも、
> 今回、~/.emacs-faces.el が存在したところにこれが実行され、
> /etc/skel/.emacs が ~/.emacs に上書きされたものと思われます。
と書かれていますように、##### emacs-faces.el 以下の部分で、
${HOME}/.emacs が /etc/skel/.emacs で、無条件に上書きされてしまうようで
すね。
> chkAndCpFile .emacs-faces.el
> chkAndCpFile .emacs-fontset.el
>
> のような感じで /etc/skel をチェックせずにコピーを実行している個所があり
> ます。このせいでエラーが表示され、~/upgrade-log には実際には成功してい
> ないコピーのログが残されます。
Vine 5 では、.emacs-faces.el と .emacs-fontset.el は etcskel パッケージ
から省かれてるようですが、「省かれているのが間違ってる」のか、
vupgrade スクリプトの、
##### emacs-faces.el
TARGET=${HOME}/.emacs-faces.el
NEW=/etc/skel/.emacs
などの部分や、
chkAndCpFile .emacs-faces.el
chkAndCpFile .emacs-fontset.el
の部分が "不要" なのかは知りませんが、いずれにしても、
install -m 644 /etc/skel/$1 ${HOME}
は、必ず失敗(インストール元が存在しない)しているのに、続く
echo "added new config file $1" >> ${LOG}
で、コピーした旨のログが残されるというのはおかしいですね。
/etc/skel/ 以下のファイルを供給している etcskel パッケージと
/usr/bin/vupgrade を供給している vutils パッケージのいずれか、又は両方に
不具合が有るようですね。
バグ報告されては如何でしょうか?
--
加藤 雅 <[email protected]>
http://add10.hp.infoseek.co.jp/rox/
http://www2.odn.ne.jp/add10/fluxbox/