vine-users ML アーカイブ



[vine-users:079998] Re: Vine5.0 へのアップグレードで ~/.emacs 破壊

  • From: KATO Masashi <mkato@xxxxxxxxxxxxx>
  • Subject: [vine-users:079998] Re: Vine5.0 へのアップグレードで ~/.emacs 破壊
  • Date: Sat, 23 Jan 2010 01:15:03 +0900
加藤(大阪)です。

ちょっと興味が有ったので、こちらでも調べてみました。
(単なる "補足" になりそうですが...)

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 パッケージのいずれか、又は両方に
不具合が有るようですね。

バグ報告されては如何でしょうか?

-- 
加藤 雅 <mkato@xxxxxxxxxxxxx>
	http://add10.hp.infoseek.co.jp/rox/
	http://www2.odn.ne.jp/add10/fluxbox/