Arch Linux と systemd-nspawn を使って Gentoo Linux 環境を構築する

概要

Gentoo Linux 環境を邪道っぽい感じで構築した記録。「Gentoo Linux を試してみたい Arch Linux 使い」 向けの記事(すなわち私のための備忘録)です。

Arch Linux じゃなくても systemd な Linux ディストリビューションなら同じ手法が適用できるはずです。説明を端折ってしまったがために、この記事を読むのに Arch Linux をブートできる程度の知識が必要となってしまった、というのが真相です。まあ ArchWiki か Gentoo Wiki を読めば大概なんとかなります。

Gentoo Linux にはまだあまり詳しくないので後々ヤバいことが発生するかもしれません。自己責任でお願いします。

目標

  • Arch Linux 上に Gentoo Linux コンテナを構築する
    • Arch Linux 環境は既に構築されているという前提
    • カーネルは親(Arch Linux)のものを使う
  • ブートローダーから Gentoo Linux を単独で起動できるようにする
    • ここでは(面倒なので) boot パーティションを Arch Linux と共有する
    • 筆者の環境は UEFI-GPT です

手順

以下、arch# プロンプトは親 (Arch) 環境、gentoo# プロンプトは Gentoo 環境での作業を表します。なお、systemd-nspawn には root / sudo の権限が必須です。

Gentoo 用パーティションをマウントする

Gentoo Linux を単独で立ち上げたい場合は、Gentoo Linux のルートディレクトリ用パーティションをマウントしておきます(コンテナとして立ち上げたいだけであればこの作業は不要です)。

arch# mkdir gentoo  
arch# mount /dev/sdXY ./gentoo  

Stage 3 アーカイブを展開する

https://www.gentoo.org/downloads/ から Gentoo Linux の Stage 3 Archive (systemd 版) をディレクトリにダウンロードして展開してください。通常 (OpenRC) 版だと systemd-nspawn 時にコンテナの起動が途中でストップするようです。

arch# cd ./gentoo  
arch# wget http://.../stage3-amd64-systemd-YYYYMMDD.tar.bz2  
arch# tar jxvf stage3-amd64-systemd-YYYYMMDD.tar.bz2  
arch# cd ..  

コンテナを起動するための準備をする

このまま systemd-nspawn すると etc/machine-id が無いと怒られるので、UUID を生成して書き込んでおきます。

arch# systemd-machine-id-setup --root=./gentoo  

(16/06/15 修正) uuidgen でなく systemd-machine-id-setup を使うよう修正。

root のパスワードを設定しないとログインができないので、まず -b なしで systemd-nspawn コマンドを実行します。chroot 環境内で passwd コマンドを実行し、root のパスワードを設定します。

arch# systemd-nspawn -D ./gentoo  
gentoo# passwd  

パスワードの設定が終わったら ^D で chroot 環境を抜けてください。

systemd-nspawn でコンテナを起動する

systemd-nspawn -b コマンドでいよいよコンテナを起動します。

arch# systemd-nspawn -b -D ./gentoo  
gentoo# emerge --sync  

あとは emerge --sync するなどして通常の Gentoo Linux のように使います。ネットワークは Arch 側できちんと設定できていれば Gentoo 側でも使えます。以降は Gentooベースシステムのインストール - Gentoo Wiki 等を参考にしてくさい。

コンテナは poweroff / shutdown -h now で終了できます。あるいは ^] を 3 回連打すると強制終了できます。

Gentoo を単独で起動できるようにする

/etc/fstab/ ,/boot のマウントの記述をします。 / については arch-install-scripts パッケージの genfstab コマンドを使うと楽です(邪道)。また、面倒なのでとりあえず Arch と Gentoo で同じ /boot パーティションを共用します(邪道)(Arch Linux の /etc/fstab の記述を流用)。Gentoo を本格的に使いたくなったらその時にカーネルをリビルドするという方針で。

arch# genfstab -U -p ./gentoo >> ./gentoo/etc/fstab  
arch# $EDITOR ./gentoo/etc/fstab  

カーネルモジュール類も Arch 環境から Gentoo 環境に丸ごとコピーします(邪道)。

arch# cp -r /lib/modules/X.X.X-XXXX ./gentoo/lib/modules/  

あとはブートローダーの設定をすれば(UEFI の場合 /boot/loader/entries/ 以下にエントリを追加すればよい)、Gentoo を起動できるようになるはずです。

ちなみに単独で起動する際は systemd ではなく OpenRC が立ち上がるようです。よくわからない。

(16/06/25 追記)systemd で起動したい場合はカーネルパラメータ init=/usr/lib/systemd/systemd を付けましょう。

まとめ

まだネットワーク周りの設定が終わってない……。

Arch と Gentoo は似てるようで割と思想の異なるディストリビューションだし、設定の仕方も設定ファイルの位置も結構違っていたりして大変です。ここからが本当の Gentoo Linux だ……。