bootmanagerで指定したはずの追加SFSが、一度では読み込まれず、指定の操作を2度行わないといけないということがありました。
viewtopic.php?f=28&t=1476#p10592
再現性がよく分からず、特定ハードの問題かと思ってました。
しかし複数のPC、複数の保存メディアで経験したので、ソフト的な問題であろうと思われます。
この現象が起きる理由が少し分かりかけたので報告します。
他のモードでも起こるのかもしれないけれど、フラッシュメモリからの起動で経験したので、この場合で説明します。PUPMODE=13
この場合個人保存ファイルは /initrd/pup_ro1に、テンポラリファイルシステムは/initrd/pup_rwにマウントされています。
- bootmanagerで新たな追加SFSを指定すると/etc/rc.d/BOOTCONFIGにその情報が書き込まれます。
- 更新されたものは /initrd/pup_rw/etc/rc.d/BOOTCONFIGにあります。いっぽう /initrd/pup_ro1/etc/rc.d/BOOTCONFIGは古い情報を保持しています。
- ここでデスクトップ上の「save」アイコンをクリックすると/initrd/pup_rw以下と/initrd/pup_ro1以下との内容の同期が取られます。実行プログラムは /usr/sbin/snapmergepuppyです。
- シャットダウンあるいは再起動のときもsnapmergepuppyが呼ばれるので「save」アイコンをクリックと同様にpup_rwの内容はpup_ro1に移され、pup_rwはRAM上なのでシャットダウンにより消滅します。
次のようにすると再現すると思われます。
- フラッシュメモリから起動(PUPSATE=13)
- 一度デスクトップ上の「save」アイコンをクリック
- その後bootmanagerでなにか追加SFSを指定
- /etc/rc.d/BOOTCONFIGが更新されていることを確認
- 再起動→追加指定したSFSが読み込まれない
- /etc/rc.d/BOOTCONFIGを見ると追加分が消えている
これが起こる理由のひとつは /usr/sbin/snapmergepuppyの159行目で cp コマンドのオプションに -u が付いていることです。
cp の -u オプションは、上書きコピーするべきかどうかを、タイムスタンプを見て判断します。
理由の2つめは、/etc/rc.d/BOOTCONFIGのタイムスタンプがおかしなものになっているということです。
このファイルは起動のとき initrd.gz内のinitスクリプトが更新します。いっぽうタイムゾーンの設定は chroot後の rc.initから呼ばれる/etc/rc.d/rc.countryの仕事です。
/etc/rc.d/rc.countryの161行目で hwclock --hctosys --localtime を実行しています。
/etc/rc.d/BOOTCONFIGが更新されるのはこれ以前なので、タイムスタンプがおかしくなるのだと思われます。
回避法の一つは/home/mntに追加SFSを置いたあとの起動直後にbootmanagerが尋ねてくるので、その機会にすぐさま指定を済ませてしまうということです。
viewtopic.php?f=12&t=1519#p10891
/home/mnt/puppyなどのサブディレクトリに追加SFSを置いたときにはこれは出ないかもしれないが、ともかく起動直後(30分以内)にbootmanagerで追加SFSを指定すれば回避できます。
もっとスマートな解決法はないですかねえ……。