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

第80回 Plamo-6.1 released

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

昨秋,オープンソースカンファレンス(OSC)2015 Tokyo/Fallに合わせてPlamo-6.0をリリースしたのに続き,2月下旬に開催されたOSC2016 Tokyo/Springに合わせてPlamo Linux 6.1をリリースしました。

3ヶ月ちょっと,というPlamoのリリースサイクルとしてはずいぶん早いペースでのリリースだったものの(苦笑)⁠6.0には間に合わなかったパッケージをはじめ,セキュリティ・フィックス等で更新したパッケージは200を超え,本連載で紹介してきたようなUEFI回りの処理なども追加して,6.0ではかなり荒削りだった部分をPlamo-6.1ではずいぶん洗練させることができました。

今回は,UEFI回りの処理をインストーラにどのように組み込んだかをはじめ,Plamo-6.1で追加した新機能について紹介してみます。

インストーラのUEFI対応

前回までに紹介してきたように,UEFIから起動するためにはマザーボードがUEFIに対応している上で,

  1. GPT形式で管理されるHDD
  2. FAT32形式でフォーマットされたEFIシステムパーティション(ESP)
  3. UEFIに対応したブートローダ

という条件が必要です。

Plamo-6.0ではGPT形式に対応したfdisk/cfdiskを用意することで1.に,UEFI版のgrubを用意することで3.に対応したものの,ESPをフォーマットする作業はユーザにゆだねていました。

一方,Plamo-6.1ではインストーラにSeTespjという新しいスクリプトを用意して,未フォーマットなESPが存在すれば自動的にフォーマットする処理を追加しました。

 87     is_gpt=`LANG=C ; /sbin/blkid $ROOT_DRIVE | grep -i gpt`
 88     echo "is_gpt:$is_gpt"
 89     if [ "$is_gpt.x" = ".x" ]; then   # NOT GPT HDD
 90         exit
 91     else
 92         root_drive_has_esp=`LANG=C ; fdisk -l $ROOT_DRIVE | grep  EFI`
 93         echo "root_drive_has_esp: $root_drive_has_esp"
 94     
 95         if [ "$root_drive_has_esp.x" = ".x" ]; then
 96             has_esp=`LANG=C ; fdisk -l | grep -i EFI`
 97             if [ "$has_esp.x" = ".x" ]; then
 98                 dialog --title "No ESP found" --menu \
...
119         else  # found ESP on this HDD
120             mkdir /mnt_chk
121             ESP=`echo $root_drive_has_esp | cut -f1 -d' '`
122             #echo "ESP:$ESP"
123             #sleep 10
124             mount -t vfat $ESP /mnt_chk
125             if [ $? -eq 0 ]; then    # OK We have formatted ESP.
126                 echo $ESP > /tmp/ESP_partition
127                 umount /mnt_chk
128                 rmdir /mnt_chk
129             else
130                 dialog --title "Format ESP?" --yesno \
131                        "EFIシステムパーティション($ESP)をマウントできませんでした.このパーティションを \
132     フォーマットしますか?EFIシステムパーティションはFAT32形式でフォーマットされます." 11 72
133                 if [ $? -eq 0 ]; then
134                     format_esp $ESP
135                 else
...

このスクリプトでは,87行目でblkidコマンドを利用してインストール先のHDDがGPT形式になっているかを調べ,GPT形式ならば92行目でfdiskを使ってパーティションのリスト(-lオプション)を調べて,ESPの有無をチェックします。

ESPが無ければその旨を表示し,ESPがあればVFAT形式でマウントできるかを確認して(124行目)⁠マウントできればESPの準備完了,マウントできなければ確認のうえフォーマットする(134行目)⁠という処理を行います。

当初,上記2.の条件を満たすため,⁠ESPが見つからなかった場合,HDDに空きがあれば自動的にESPを作成する」という処理も用意したものの,実際に試してみたところ,スクリプトでパーティションを切り直しても変更されたパーティションテーブルの情報がカーネルに伝わらず,想定外のパーティションをフォーマットしてしまうエラーが頻発したため,ESPはインストール先のHDDを設定する際に手動で作ってもらうことにしました。上記リストが87行目から始まっているのはそのためで,前半は無効にしたESP作成用スクリプトの残骸です。

カーネルがHDDのパーティションテーブルを認識すると,その情報が内部にキャッシュされ,リブートしないとクリアされないようです。

UEFIから起動するための3条件全てをインストーラ的に対応することはできなかったものの,パーティションテーブルを切るあたりは人力に任せておく方がPlamoらしいかな,という気もしています。

著者プロフィール

こじまみつひろ

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

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

コメント

コメントの記入