petをインストールした後、デスクトップが乱れます(Puppy-411)

4.X系のバグ、トラブル

モデレータ: 暇人, YoN, nyu

返信する
jake
記事: 403
登録日時: 08/05/05(月) 14:46
お住まい: 滋賀県

petをインストールした後、デスクトップが乱れます(Puppy-411)

投稿記事 by jake »

これはバグと言うべきなのか、とも思いますが、現象を説明しますと、デスクトップのアイコンを消したり追加したりして自分ごのみに設定しておきます。その上で、何でもいいですからpetをインストールします。そして、再起動すると、デスクトップには消したはずのアイコンが出ていたり、作ったアイコンが消えていたり、消えていないまでも歯車アイコンになっていたりします。petのインストール以外にsfsの読み込みを設定したりしても起こります。いずれも起動時に、"Layerd File Sysytem,..Next Boot will be faster.."という赤字のメッセージが出る場合です。
私はUSBブートしかしていないので、他の起動方法でもこの現象が出るのかどうかわかりませんが、とりあえず、対処療法を書いておきます。
/etc/rc.d/rc.shutdownの最初の方(39行目まで)に、

コード: 全て選択

cp -f /root/.config/rox.sourceforge.net/ROX-Filer/globicons /root/.config/rox.sourceforge.net/ROX-Filer/globicons-bak
cp -f /root/Choices/ROX-Filer/PuppyPin /root/Choices/ROX-Filer/PuppyPin-bak
という2行と、
/etc/rc.d/rc.localに、

コード: 全て選択

cp -f /root/.config/rox.sourceforge.net/ROX-Filer/globicons-bak  /root/.config/rox.sourceforge.net/ROX-Filer/globicons
cp -f /root/Choices/ROX-Filer/PuppyPin-bak /root/Choices/ROX-Filer/PuppyPin
という2行を追加します。
終了時に、そのときのデスクトップの状態を、globicons-bakとPuppyPin-bakというファイルにコピーしておき、起動後にそれを、globiconsとPuppyPinに上書きコピーして前回の終了時の状態に復元すると言うものです。
mika-j
記事: 38
登録日時: 08/05/23(金) 22:20
連絡する:

投稿記事 by mika-j »

こんばんは。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モジュールを削除した場合も同様の処理です。


一通りはテストしてみましたが、出来れば、運用環境でなく、
テスト環境でテストしてみてから使ってもらえると嬉しいです。
自己責任でお願いします。


以上です。■□■
*** mika-j as MIKAMI-jiro ***
mika-j
記事: 38
登録日時: 08/05/23(金) 22:20
連絡する:

投稿記事 by mika-j »

こんばんは、mika-jです。

上のtest.update-6.shですが、4.2-jp環境で試したところ、
とてつもなく時間がかかる上にバグがあることが判明しました。
実験的なコードでもあるので、公開を終了したいと思います。
すみませんでした。
*** mika-j as MIKAMI-jiro ***
返信する