続・玩式草子 ―戯れせんとや生まれけん―

第67回仮想環境とPlamo Linuxネットワークインストール

前回はPlamo LinuxでQEMU/KVM仮想環境を動かすために必要なパーツ(パッケージ)とその役割を紹介し、それらをインストールしてvirt-manager経由で仮想マシンを動かすまでを概観、実行例としてPlamo Linuxのネットワークインストール用のisoイメージを使ってみました。今回は、このネットインストール用イメージについて詳しく見てみます。

Plamo Linuxのネットワークインストーラ

伝統的にPlamo Linuxはインストーラとパッケージをひとまとめにしたisoイメージの形式で配布しています。この伝統は、開発の最初期にLinux関係者の飲み会の席で焼きたてのCD-Rを配っていたころまで遡り(笑⁠⁠、パッケージが増えて複数枚のDVDイメージをインターネットで公開するようになった現在まで続いています。

この方式の場合、インストール用のisoイメージは固定できるので公開前のテストは十分できますし、問題が報告された場合の再現も容易です。その一方、収録されるパッケージも作成時点のバージョンに固定されるため古めになりがちです。最近では、パッケージの更新に追従するためベータ版的な位置づけのisoイメージを年に数回公開するようにしているものの、メンテナ陣のご尽力もあり、インストール後に⁠get_pkginfo⁠でバージョンをチェックすると更新済みのものが多数見つかります。

このあたりを解決するために「Plamo Linuxを最新パッケージが揃ったリポジトリからネットワークインストールする」という課題をしばらく前から考えていました。当初は「インストーラからwgetかcurlを起動して……」という手順を考えてはみたものの、現状でもずいぶん入り組んでいるインストーラに更にコードを追加するのは気が進みません(苦笑⁠⁠。

もう少し楽な方法はないかな…… とあれこれ考えているうちに「インストーラはネットワークが使える最小規模の環境を構築するだけに留めて、再起動後にその環境内で必要なパッケージを追加していく」という2段ロケットのような方法を思いつきました。

確か⁠lxc-create⁠の手順を見てて、⁠あ、こういう手があるか」と思いついたような記憶があります。

この方法の場合、インストール用のisoイメージはインストーラと最小規模のパッケージのみになるため、isoイメージのサイズもずいぶん縮小できそうです。また「必要なパッケージを追加していく」ためのコードも既存のインストーラから流用できるでしょう。

このアイデアを実装してみたのがネットインストール用のisoイメージで、Plamo-8.x_netinst_2026XXXX.iso(XXXXは作成した日付が入る)という名称でplamo.linet.gr.jpの/Plamo-test/for-8.x/Kojima以下に置いてます。

ネットワークインストーラの構成

それではこのisoイメージの中身を見てみましょう。今回使うのはPlamo-8.x_netinst_20260815.isoです。

$ mkdir /tmp/loop
$ sudo mount -o loop Plamo-8.x_netinst_20260815.iso /tmp/loop
...
$ ls /tmp/loop
EFI/  efiboot.img  isolinux/  plamo/

isoイメージの⁠/⁠には上記のように3つのディレクトリと1つのファイルを置いています。Plamo Linuxのインストール用isoイメージは、BIOS起動とUEFI起動のそれぞれ用に、DVDからでもベタ書きしたUSBメモリからでも起動できるようisoイメージを作っています。また、これらのファイルやディレクトリをUSBメモリにコピー(VFAT上に書き込み)するだけでも起動できます。

このあたりは以前整理したことがあるので、興味ある方は前シリーズの第79回「Plamo LinuxのGPT/UEFI対応[その3⁠⁠」をご参照ください。

通常のインストール用isoイメージでは、このplamo/以下に00_base/から16_virtualization/までのディレクトリを用意し、Plamo Linux用のパッケージを収めています(正確に言うと、1枚には収まらないので複数のイメージに分割しています⁠⁠。それに対し、このネットインストール用のisoイメージの"plamo/"以下には00_base/しかありません

$ ls /tmp/loop/plamo/
00_base/
$ ls /tmp/loop/plamo/00_base/
aaa_base-7.0-noarch-B3.txz          grub-2.14-x86_64-B3.tzst                 ncurses-6.4_20231104-x86_64-B2.tzst
acl-2.3.1-x86_64-B1.tzst            gzip-1.12-x86_64-B1.txz                  net_inst-0.2-noarch-B1.tzst
attr-2.5.1-x86_64-B1.tzst           iproute2-6.4.0-x86_64-B1.tzst            net_tools-git_20160913-x86_64-B1.txz
bash-5.2.37-x86_64-B1.tzst          iputils-20221126-x86_64-B1.tzst          netconfig7-1.3-x86_64-B1.tzst
...
grep-3.11-x86_64-B1.tzst            microcode_intel-20260811-x86_64-B1.tzst
groff-1.23.0-x86_64-B1.tzst         mpfr-4.2.0-x86_64-B1.txz

そのため、isoイメージも従来の4分の1の1.2GB程度に収まっています。

$ ls -lh Plamo-8.x_netinst_20260815.iso 
-rw-r--r-- 1 root root 1.2G  8月 15日  17:08 Plamo-8.x_netinst_20260815.iso

ネットワークインストールの手順

さて、それではこのisoイメージを使ってvirt-managerでQEMU/KVMな仮想環境にネットワークインストールする手順を紹介しましょう。前回紹介したように、⁠新しい仮想マシンの作成」時に「ローカルのインストールメディア」としてこのisoイメージを指定すると、自動的に「インストールするオペレーティングシステム」として⁠Plamo 8.x⁠が表示されます。その後は「メモリのサイズ」「CPU数⁠⁠、⁠HDDのサイズ」を指定していきます。

virt-managerが作成する仮想マシンはデフォルトではBIOS起動になります。UEFI起動にしたい場合は前回紹介したように「インストールの前に設定をカスタマイズする」をチェックし、⁠詳細設定」[ハイパーバイザーの情報⁠⁠→⁠ファームウェア]をUEFIにします。

UEFIで起動しHDDをGPT形式でフォーマットする場合は、ブートローダー(grub)を収めるための128MBのESP(EFI System Partition)を忘れず作成してください。

cfdiskでのESP指定
cfdiskでのESP指定

最近のPCは全てUEFI起動なので、仮想マシンもUEFIで起動できるのはインストーラの開発者にとってはすごくありがたいものの、実のところ、それ以外に仮想マシンをUEFI/GPTで使うメリットはあまり感じません。

さて、それでは実際のインストールの手順を見てみましょう。もっとも先述したようにPlamo Linuxのネットワークインストールは2段ロケット式になっていて、1段目は通常のインストーラと変わらず、cfdiskでパーティションを切り、スワップパーティションADDSWAPとインストール先のパーティションを指定TARGET⁠、インストール元のメディアを指定SOURCEして…… と進みます。

1段目のインストーラ画面
1段目のインストーラ画面

唯一の違いは、インストールするカテゴリ(ディスクセット)00_baseのみなので「DISK SETSの選択メニュー」は現れず、インストール元のメディアを指定すればそのままインストールへ進むことです。パッケージのインストール後、rootのパスワードやホスト名等の初期設定を行って1段目のインストールは終了します。

システムを再起動して、新しくインストールした環境にrootでログインします。この時点では1.5GBほどのサイズで、95個ほどのパッケージがインストール済みです。

1段目をインストールした状態
1段目をインストールした状態

2段目のインストールを行うためにnet_inst.shコマンドを実行します。このコマンドはネットワーク経由で必要なパッケージをダウンロード、インストールします。最初にパッケージをダウンロードするリポジトリを指定します。

リポジトリの選択
リポジトリの選択

次に、1段目のインストールでは飛していた「インストールするカテゴリ」を指定します。Plamo Linuxの「カテゴリ」「用途ごとに整理したパッケージ群」の意味で、CUI環境用の⁠01_minimum⁠から、Xfce(10_xfce)やMate(12_mate)といったデスクトップ環境、オフィススーツ(14_libreoffice)等、16のカテゴリが存在します。

これらのカテゴリには依存関係があって、⁠06_xapps⁠にあるパッケージ(たとえば⁠inkscape⁠⁠)を使うためには、それより前のカテゴリのパッケージ(⁠⁠04_x11⁠⁠gtk3⁠⁠cairo⁠等)が必要になります。すなわち、⁠06_xapps⁠をインストールする場合、それより前の⁠01_minimum⁠から⁠05_ext⁠のカテゴリもインストールする必要がある、ということです。

インストールするカテゴリの選択
インストールするカテゴリの選択

デフォルトでは指定したカテゴリに含まれるパッケージを全てインストールしますが、パッケージごとにインストールするかしないかをより細かく指定できます。

一括インストールするかの指定
一括インストールするかの指定

パッケージはカテゴリごとに一括ダウンロードされたのち、installpkgでインストールされます。その際、先の「選択したカテゴリのパッケージを全てインストールしますか?」いいえを選ぶと、パッケージごとにインストールするかしないかを指定できます。ただし、Plamo Linuxではパッケージの依存関係を自動では解決しないので、手動でパッケージを選択する場合、関連するパッケージも忘れずインストールしてください。

カテゴリ内の全パッケージをインストールすれば依存関係が解決されるように調整してるので、不慣れな方は全パッケージのインストールをお勧めします。

インストールするパッケージの選択
インストールするパッケージの選択

後は、指定したカテゴリごとに、パッケージのダウンロードとインストールをくり返します。

インストールの進行状況
インストールの進行状況

インストールが終了すれば、念のため一度再起動しておきましょう。これで、リポジトリにある最新パッケージを使ったPlamo Linux環境が完成しました。

2段目のインストール完了
2段目のインストール完了

今回紹介してきたネットワークインストールを使えば、1.2GB程度の比較的小規模なインストールメディアからリポジトリ上の最新パッケージを取り込んだPlamo Linux環境を構築できます。

この機能は、安定したネットワーク環境を使える場合には便利なものの、パッケージのダウンロードに失敗した場合のリカバリー手順など、エラー処理回りは未実装なのでご注意ください。また、パッケージが最新の分、互換性等のテストが不十分で、ライブラリの依存関係等に齟齬が生じる可能性もあります。


今回は現在開発中のPlamo Linuxのネットワークインストールについて紹介しました。この機能は、インターネット接続環境さえあれば、2GBに満たないUSBメディアからフルセットのPlamo Linux環境を簡単に構築できるので、仮想環境に限らず、少し古めのPCをPlamo Linux化するのに便利なように思います。ご興味ある方は、ぜひPlamo Linuxの増殖活動にご参加ください(笑⁠⁠。

おすすめ記事

記事・ニュース一覧