前回までにP-Plamoの概要や起動処理について解説しました。その際にも触れたように、P-PlamoではPlamo Linuxの環境をできるだけ変更せずに使うために、liveDVD化に必要な処理は起動時のinitrdに集め、squashfsに収めたPlamo Linuxには、自らが特殊な環境で動いていることを意識させないような作りにしています。また、liveDVD化の処理を担うinitスクリプトも、前回までに紹介したように、簡単なシェルスクリプトになっています。
そのため、Plamo Linuxを使い慣れた人なら、パッケージを取捨選択して自分好みの環境を作ったり、特定用途向けにチューニングするなど、P-Plamoを比較的簡単にカスタマイズできるでしょう。そのようなカスタマイズの例として、今回はP-PlamoをUSBメモリから起動する方法を紹介します。
USBメモリへのインストール
現在のP-PlamoはDVDのイメージファイルの形で公開しています(たとえばP-Plamo-100329_dvd.iso)。このイメージファイルは、isolinuxをブートローダにして、mkisofsコマンドでEl Torito形式でブート可能にしています。今までに紹介してきたsquashfs化したルートファイルシステムやinitスクリプトを含むinitrdなどは、全てこのイメージファイルの中に含まれています。
P-PlamoをDVDから起動して使うには、このイメージファイルをダウンロードして、cdrecordやgrowisofsコマンドでDVDメディアに書き込めばいいわけですが、P-PlamoをUSBメモリから起動するには、上記DVDのイメージファイルの中からsquashfs化したルートファイルシステムやinitrd等の必要なファイルを取り出して、それらを直接USBメモリ上に配置する必要があります。また、USBメモリから起動するためにはsyslinuxというブートローダをUSBメモリの先頭部分に書き込んでやる必要があります。
これらの作業はPlamo Linuxから行うことも可能ですが、P-Plamoにも必要なコマンドは用意しているので、以下ではDVDメディアから起動したP-Plamo環境で、P-PlamoをUSBメモリにインストールする手順を紹介しましょう。
まずDVDメディアからP-Plamoを起動し、root権限でログインしておきます。P-Plamoではrootのパスワードはpasswordにしています。
USBメモリを挿入します。しばらく待つと画面上にカーネルがUSBメモリを認識した旨の表示が出ます。
この例ではUSBメモリは/dev/sdbとして認識されたことがわかりますが、念のためにfdisk -lでディスクのリストを確認しておきます。
fdisk -lで見ると、USBメモリはFAT32形式のファイルシステムで/dev/sdb1として認識されています。
このUSBメモリから起動可能にするには、パーティションのブート可能フラグを有効にしておく必要があります。この操作はfdiskコマンドから行います。
ここで使っているコマンドは、 "a" がブート可能フラグのトグル、"p" が情報の表示、"w" が実際の書き込み処理です。fdiskコマンドは、安全のために、データの変更処理はメモリ上で行い、"w" コマンドで書き込みを指示した段階で実際に対象デバイスに書き込まれるようになっています。"w" コマンドで実際に書き込む操作を忘れると、処理が反映されないのでご注意ください。
このパーティションを /media/usb にマウントし、isolinuxディレクトリにあるP-Plamoに必要なファイル一式をコピーします。
P-Plamoでも、デスクトップ環境を利用していればUSBメモリを挿入すると自動的にマウントして内容を表示してくれますが、今回はコンソールから直接root権限で操作しているので手動でマウントポイントを作りマウントしています。動作中のP-Plamoでは、前回紹介したpivort_rootにより、起動したDVDイメージは/loop/cdrom以下に見えるようになっているので、そこからisolinuxディレクトリをUSBメモリ上にコピーしています。
なお最後のコピー処理は、1.6GB程度のファイルをUSBメモリ上にコピーするため、かなり時間がかかります。ちゃんと動いているか心配な人はcpコマンドに "&" を付けてバックグラウンドで実行するか、Alt+F2 等でコンソールを切り替えてログインし、df -h等でUSBメモリへの書き込みが正常に進行しているか適宜確認してみてください。
この操作でP-PlamoをUSBメモリからブートするために必要なファイルはコピーできましたが、USBメモリからブートするためのブートローダである syslinux の設定ファイル(syslinux.cfg)は、起動デバイスのルートディレクトリに置く必要があるので、このファイルをisolinuxディレクトリからUSBメモリのルートディレクトリに移動しておきます。
なお、syslinux.cfgには、あらかじめisolinuxディレクトリにあるvmlinuzをカーネルとして起動する設定を記載してあります。
これで必要なファイルの準備ができたので、syslinuxコマンドを実行してUSBメモリの先頭部分にブートローダを書き込みます。
以上の操作で、たいていのUSBメモリからP-Plamoを起動できるはずです。
init スクリプトの修正
上記手順でUSBメモリからP-Plamoを起動しようとすると、起動の途中で「squashfsが見つからない」旨のエラーになることがあります。
このエラーは、initrd上のinitスクリプトがUSBメモリ上のsquashfsファイルを正しく見つけられないことが原因で、USBメモリをチェックする前に少し待ち時間を置くと解決するようです。
liveDVDの場合、この手の修正を加えるためには一度HDD上にliveDVDの中身をコピーした上で必要な修正を施し、再度isoイメージを作成し直すという手間がかかるのに対し、USBメモリの場合はファイルを直接書き替えることが可能なので、修正を加えるのは簡単です。
再度DVDメディアから起動し、/media/usb/ にUSBメモリをマウントしておきます。
先にコピーしたisolinuxディレクトリに移動して、initrd.gzを展開、適当なディレクトリにloopbackマウントします。
この状態で、前回紹介したinitスクリプトは/tmp/loop/initとしてアクセスできるので、このファイルを修正します。修正すべき箇所は23行目からのUSBメモリをマウントしてチェックしている部分で、24行目に10秒間ほど時間待ちを置いてみます。
修正できれば、initrdを圧縮し直します。
USBメモリの場合、initスクリプトの修正はこれで終了です。再起動してUSBメモリから起動できるか確認します。
USBメモリから起動した際の新機能
動作中に書き替えることができないDVDメディアに対し、USBメモリでは動作中でも自由に書き替えることができます。そこでUSBメモリから起動した際は、ユーザがホームディレクトリに作ったファイルをUSBメモリ上に保存するような機能を追加してみました。
具体的には、USBメモリから起動したP-Plamoを終了する際、tmpfs上のユーザ領域に作成されたファイルを保存するか否かを問い合わせ、保存する場合はUSBメモリ上にユーザ領域のファイルをアーカイブファイルとして保存します。起動時には、このアーカイブファイルの有無をチェックして、ファイルがあればあらかじめユーザ領域に展開しておき、前回終了時の状態から使い続けることができるようにしました。
ここで作成したアーカイブファイルはUSBメモリ上にP_Plamo_backup.cpio.gzという名称で保存されています。名称が示すように、このファイルはcpio形式でgzip圧縮しています。
起動時には、USBメモリ上にこの名称のファイルがあれば、以前のデータを復旧するかを問い合わせ、復旧するならば、tmpfs 上に用意されたユーザ領域上に保存されたアーカイブファイルの中身を展開します。
これらの処理は、前回紹介したinitスクリプトでinitrd上のetcディレクトリからコピーした修正版(modified)のrc.Mとrc.6で行っています。
具体的には、終了時の処理を行うrc.6の中で起動メディアに書き込めるかをテストして、書き込めるようならばaufsのユーザ用領域に使っている/tmp/ow/home以下から、キャッシュやaufsの作業ファイル以外のファイルをcpio+gzipで固める処理を追加しました。
それに合わせて、起動時の処理を行うrc.Mの方では、書庫ファイルがあればそれらをaufsの作業領域上に展開する処理を追加しました。
これらは簡単なハックですが、実際に使ってみると、前回に施した各種設定やホームディレクトリに作ったファイルなどを引き継ぐことができ、案外便利です。ただし、アーカイブファイル作成時にUSBメモリの空き容量のチェックはしていないので、ファイルが多すぎると容量不足になるかも知れませんのでご注意ください。
USBメモリから起動できるかは環境を選ぶので、当初はUSBブートはP-Plamoのオプション的に考えていましたが、実際に使ってみると、USBメモリはDVDメディアよりもアクセス速度が速いのでコマンド起動時に待たされる時間もずいぶん短くなりました。
また、USBメモリはDVDメディアよりもコンパクトなので、ポケットに入れて気軽に持ち運ぶことも可能です。利用可能なPCは選ぶものの、最近ではDVDメディアよりもUSBメモリの方が、Plamo Linuxを「持ち歩く」のに適しているようです。