あらいです。
以前、Vine5.0 にアップグレードしたら ~/.emacs が破壊されたと報告しま
したが、理由がわかりました。
破壊していたのは、/usr/bin/vupgrade のようです。これは、
$ ls -l /etc/X11/xinit/xinitrc.d/00vupgrade.sh
lrwxrwxrwx 1 root root 17 12月26日 20:23 /etc/X11/xinit/xinitrc.d/00vupgrade.sh
-> /usr/bin/vupgrade*
となっているので、X の起動時にいつも呼ばれます。尤も
~/.vine/VineLinux5.0 があると途中で抜けますが。
で、問題の個所はここです。
chkMD5Update(){ # target md5sum newguy
[ ! -f $1 ] && return 1
CHECK=`md5sum $1 | cut -f 1 -d " "`
if [ "${CHECK}" = "$2" ]; then
cp $3 ${HOME}
echo "$1 was replaced to new one for Vine Linux ${VER}" >>${LOG}
return 0
else
return 1
fi
}
cp を実行していますが、コピー先が ${HOME} となっており、ファイル名を
指定していません。ですが、
##### emacs-faces.el
TARGET=${HOME}/.emacs-faces.el
NEW=/etc/skel/.emacs
chkSame $TARGET $NEW || (
# from 3.x & 4.x
MD5SUM="09ef5702f5022759b092e5f65075ed71"
chkMD5Update $TARGET $MD5SUM $NEW && rm ${TARGET}
# from 2.6
MD5SUM="d66bb8283521eb1b3040a3d7dbf0f5d2"
chkMD5Update $TARGET $MD5SUM $NEW && rm ${TARGET}
# from 2.5
MD5SUM="20117126d492f2ea14e0fb2e89f5f7f6"
chkMD5Update $TARGET $MD5SUM $NEW && rm ${TARGET}
)
のように、$TARGET と $NEW のファイル名が違うことがあります。
今回、~/.emacs-faces.el が存在したところにこれが実行され、
/etc/skel/.emacs が ~/.emacs に上書きされたものと思われます。
なお、このスクリプトの終りの方に、
# new files (Vine Linux 2.5)
chkAndCpFile .emacs-faces.el
chkAndCpFile .emacs-fontset.el
のような感じで /etc/skel をチェックせずにコピーを実行している個所があり
ます。このせいでエラーが表示され、~/upgrade-log には実際には成功してい
ないコピーのログが残されます。