こんばんは。mika-jです。
"layered-filesystem next boot will be faster!"
というメッセージは誰が出力しているのか気になったので
少し調べてみました。
要点...
● rc.updateの動作から、デスクトップが乱れる問題について考えます。
● sfsモジュール内のアイコンをデスクトップに表示するスクリプトを考えてみました。
以下は、私の独自研究です。
できれば、間違っている内容等、
ご指摘いただけると、助かります。
□□ rc.updateの説明
/etc/rc.dでメッセージ内容でgrepすると、
メッセージを出力しているのはrc.updateの様です。
出力している箇所を抜き出すとこんな感じ。
コード: 全て選択
355 #v2.16 if unionfs layers have changed, may need to fix menu (etc)...
356 #note, BootManager may be popped-up, see /usr/sbin/delayedrun.
357 if [ -d /initrd ];then #test it isn't full hd installation.
358 . /etc/rc.d/BOOTCONFIG
359
360 #v2.16.1 bug with multisession-cd, different folder at each startup, so screen out...
361 xLASTUNIONRECORD="`echo -n "$LASTUNIONRECORD" | sed -e 's/^20[0-9][0-9][-0123456789]* //'`"
362 xPREVUNIONRECORD="`echo -n "$PREVUNIONRECORD" | sed -e 's/^20[0-9][0-9][-0123456789]* //'`"
363
364 ##v2.17 2nd boot, new pup_save, prevent update....
365 #[ " pup_${NEWPVERSION}.sfs" = "$PREVUNIONRECORD" ] && xPREVUNIONRECORD="$xLASTUNIONRECORD"
366 #...no, want to do fix if using an old pup_save file.
367
368 if [ "$xLASTUNIONRECORD" != "$xPREVUNIONRECORD" ];then
369 echo -en " layered-filesystem ¥¥033[1;35mnext boot will be faster!¥¥033[0;39m" > /dev/console
370 echo "Unionfs layers have changed since previous boot, fixing menu..."
371 #master help index has to be updated...
372 /usr/sbin/indexgen.sh
373 #Reconstruct configuration files for JWM, Fvwm95, IceWM...
374 /usr/sbin/fixmenus
375 fi
376 #fix the desktop...
369〜370行目でメッセージを出力しています。
で、どんな時メッセージが出力されるのかと言うと、その直前のif文より、
$xLASTUNIONRECORDと$xPREVUNIONRECORDが異なった場合で、
もっと前に遡って、361〜362行を見ると分かると思いますが、
結局、/etc/rc.d/BOOTCONFIGの
$LASTUNIONRECORDと$PREVUNIONRECORDが異なった場合
と言うことかと思います。
これらの変数には、ブート時に組み込むsfsモジュール名が格納されています。
LASTの方が現在のブート時に組み込んだモジュール。PREVの方は
前回ブート時に組み込んだモジュールです。
今、私のBOOTCONFIGは以下の様になっています。
コード: 全て選択
# cat /etc/rc.d/BOOTCONFIG
EXTRASFSLIST='devx_412.sfs'
PREVUNIONRECORD='pup_save-work.2fs pup_412JPbeta.sfs devx_412.sfs'
LASTUNIONRECORD='pup_save-work.2fs pup_412JPbeta.sfs devx_412.sfs'
#
と言うことなので、環境を新たにセーブしたりsfsモジュールの追加・削除を行った
場合、もしくは、バージョンアップで、pup_xxx.sfsの名称が変更された場合、
メッセージが出力され、なんらかの処理が行われます。
で、どんな処理が行われるか?ですが。
376行目以降の処理は、デスクトップの更新処理を行っているようです。
詳しくは、実際に、rc.updateを見て頂くとわかるのですが、
大まかに言うと、新しい環境とsfsモジュールに含まれる、
PuppyPinとglobiconsを合体し、重複した分を削除する様な処理です。
新しい環境というのは、/initrd/pup_ro2配下の事で、
それは、pup_xxx.sfs内の環境になります。
□■ rc.updateの動作・まとめ
以下の場合
- 環境を新たにセーブした場合
- sfsモジュールの追加・削除を行った場合
- Puppy Linuxをバージョンアップした場合
デスクトップアイコンが
pup_xxx.sfs + sfsモジュール のものに更新される。
■□ rc.updateと問題点の関連はありや?
以上の説明で、jakeさんの問題点が全て説明つくかというと、
そうではありませんが、
もし、CDからブートし、アイコンを変更後、
《セーブファイルを作って起動した》
と仮定したなら、
消した筈のアイコンが復活したり、作ったアイコンが消えると言うことだけは
ある程度説明がつきます。
■■ sfsモジュール内のアイコン
一方、globiconsとglobiconsをセーブするのは良いアイデアですが、
追加したsfsモジュールに入っているアイコンが使えなくなります。
例えば、日本語サイトに置いてある、OpenOffice.orgのsfsモジュールは
6つのアイコンが入っていると思いますが、これが、使えません。
そこで、pup_save.2fs内のアイコンとsfsモジュール内のアイコンを合体させる
スクリプトをrc.updateの処理を参考に、実験で作ってみました。
http://homepage3.nifty.com/mika-j/archi ... pdate-6.sh
スクリプトをダウンロードして適当なディレクトリに置いてください。
アイコンが含まれる、sfsモジュールを組み込んで、ブートしたら、
スクリプトを実行してください。
# /path/to/test.update-6.sh
少し時間がかかるので、プロンプトが返るまであせらず、お待ちください。
その後、Xをリスタートすれば、新しいアイコンが表示されます。
もし、デスクトップアイコンに異常が生じたら、/var/tmp配下に以下の様に
バックアップを取っているので、これで、復元してください。
/root/Choices/ROX-Filer/PuppyPin -> /var/tmp/PuppyPin.update.org
/root/Choices/ROX-Filer/globicons -> /var/tmp/globicons.update.org
sfsモジュールを削除した場合も同様の処理です。
一通りはテストしてみましたが、出来れば、運用環境でなく、
テスト環境でテストしてみてから使ってもらえると嬉しいです。
自己責任でお願いします。
以上です。■□■