玩式草子─ソフトウェアとたわむれる日々

第11回 P-Plamoのカスタマイズ[その1]

この記事を読むのに必要な時間:およそ 5 分

前回までに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から起動して使うには,このイメージファイルをダウンロードして,cdrecordgrowisofsコマンドでDVDメディアに書き込めばいいわけですが,P-PlamoをUSBメモリから起動するには,上記DVDのイメージファイルの中からsquashfs化したルートファイルシステムやinitrd等の必要なファイルを取り出して,それらを直接USBメモリ上に配置する必要があります。また,USBメモリから起動するためにはsyslinuxというブートローダをUSBメモリの先頭部分に書き込んでやる必要があります。

isolinuxsyslinuxもH.Peter Anvinさんが開発したソフトウェアで,isolinuxがISO9660形式(CD/DVDメディア)⁠syslinuxがDOS/VFAT形式(FD/USB/HDD)のファイルシステムからlinuxカーネルを起動するためのブートローダです。このシリーズのブートローダには,他にもext2/ext3形式のファイルシステムからブートするextlinuxや,PXE機能を使ってネットワーク経由でブートするpxelinuxがあります。

これらの作業はPlamo Linuxから行うことも可能ですが,P-Plamoにも必要なコマンドは用意しているので,以下ではDVDメディアから起動したP-Plamo環境で,P-PlamoをUSBメモリにインストールする手順を紹介しましょう。

現在のP-Plamoは約1.6GBほどのサイズなので,2GBのUSBメモリに収めることができます。ただし,将来に渡って2GBに収まる保証はありませんし,2GBだとP-Plamoだけでほぼ一杯になってしまうので,自分用のデータを保存する等,いろいろやってみたい人は4GB程度のUSBメモリを用意する方がいいでしょう。

まずDVDメディアからP-Plamoを起動し,root権限でログインしておきます。P-Plamoではrootのパスワードはpasswordにしています。

P-Plamo login:root
Password:password
P-Plamo:~# 

USBメモリを挿入します。しばらく待つと画面上にカーネルがUSBメモリを認識した旨の表示が出ます。

P-Plamo:~# sd 7:0:0:0 [sdb] Assuming drive cache: write through
sd 7:0:0:0: [sdb] Assuming drive cache: write through

この例ではUSBメモリは/dev/sdbとして認識されたことがわかりますが,念のためにfdisk -lでディスクのリストを確認しておきます。

P-Plamo:~# fdisk -l

ディスク /dev/sda: 100.0GB, 100030242816 バイト
ヘッド 240, セクタ 63, シリンダ 12921
....
ディスク /dev/sdb: 4016MB, 4016046080 バイト
ヘッド 90, セクタ 25, シリンダ 3486
...
デバイス  ブート        始点            終点    ブロック      Id システム
/dev/sdb1                 19            3487    3917824        b  W95 FAT32

fdisk -lで見ると,USBメモリはFAT32形式のファイルシステムで/dev/sdb1として認識されています。

このUSBメモリから起動可能にするには,パーティションのブート可能フラグを有効にしておく必要があります。この操作はfdiskコマンドから行います。

P-Plamo:~# fdisk /dev/sdb

コマンド (m でヘルプ):a
領域番号 (1-4):1

コマンド (m でヘルプ):p

ディスク /dev/sda: 100.0GB, 100030242816 バイト
ヘッド 240, セクタ 63, シリンダ 12921
....
ディスク /dev/sdb: 4016MB, 4016046080 バイト
ヘッド 90, セクタ 25, シリンダ 3486
...
デバイス  ブート        始点            終点    ブロック      Id システム
/dev/sdb1   *             19            3487    3917824        b  W95 FAT32

コマンド (m でヘルプ):w
領域テーブルは交換されました!

ioctl() を呼び出して領域テーブルを再読み込みします
...
P-Plamo:~#

ここで使っているコマンドは, "a" がブート可能フラグのトグル,"p" が情報の表示,"w" が実際の書き込み処理です。fdiskコマンドは,安全のために,データの変更処理はメモリ上で行い,"w" コマンドで書き込みを指示した段階で実際に対象デバイスに書き込まれるようになっています。"w" コマンドで実際に書き込む操作を忘れると,処理が反映されないのでご注意ください。

このパーティションを /media/usb にマウントし,isolinuxディレクトリにあるP-Plamoに必要なファイル一式をコピーします。

P-Plamo:~# mkdir /media/usb
P-Plamo:~# mount /dev/sdb1 /media/usb
P-Plamo:~# cp -r /loop/cdrom/isolinux /media/usb

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をカーネルとして起動する設定を記載してあります。

P-Plamo:~# cd /media/usb
P-Plamo:~# mv ./isolinux/syslinux.cfg .

これで必要なファイルの準備ができたので,syslinuxコマンドを実行してUSBメモリの先頭部分にブートローダを書き込みます。

P-Plamo:~# syslinux -d isolinux /dev/sdb1

以上の操作で,たいていのUSBメモリからP-Plamoを起動できるはずです。

「たいていの」と限定したのは,USBメモリにはかなり個体差があり,上記の操作だけでは起動できないUSBメモリも存在するためです。 手元では3種ほどのUSBメモリで試してみましたが,TranscendのJetFlash V30というUSBメモリでは syslinux(3.84)が設定ファイルを正しく認識できず, P-Plamoのカーネルを起動することができませんでした。あれこれ試したところ,開発中のsyslinuxの最新版(syslinux-4.00-pre47)を使えば syslinux.cfg を読み込めるようになりました。このUSBメモリは,他の2種のUSBメモリに比べてファイルコピーがかなり高速なので,高速化されたUSBメモリのfirmwareに従来版のsyslinuxでは対応できていない,といった問題なのでしょう。

加えて,USBメモリから起動するにはPC側のBIOSが対応している必要もあります。このあたりはハードウェア依存なので一概には述べにくいですが,古めのマザーボードにはUSBメモリから起動できないBIOSが散見されるようです。確認するには,BIOSメニューの「起動デバイス」の対象に,USBストレージデバイスから起動する旨の設定が存在するかを調べてみてください。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html

コメント

コメントの記入