自宅サーバー引っ越し(システムインストール編)

……いやはや、今回は色々くじけそうになりました(笑)。

 

実はこのマイグレーションに伴って、くっそめんどくさい Gentoo Linux インストールに加えて、三つの「課題」がありました。

 

  • UEFI ブート
  • NVMe 接続デバイス上に「/」パーティション
  • systemd

 

で、この三つが絡み合って「これでもか!」とばかりにトラブルシューティングの連続となるインストール作業となってしまいました。三つが絡まって、簡単な原因の切り分けもままならず、行っては手戻り、行っては手戻りで、場合によっては SSD の初期化まで戻ることも二度三度。

 

結論としては、なんとか OS のシステムインストールは出来ましたので、躓いた点を重点的に、変態的(笑)にめんどくさい Gentoo Linux インストールの流れを記録したいと思います。

まず、今回参考にした URL 等を列挙しておきます。

 

  •  Gentoo AMD64 Handbook 本家のインストールマニュアル(AMD64 となっていますが、X86_64 環境でもまったく問題ありません)
  • Systemd(GentooWiki)

- 目次 -

インストール CD イメージを入れ込んだ USB メモリーから起動

インストールに使う USB メモリーの作成方法は、前回に書きました。

 

イメージは、「Gentoo Minimal Installation CD」のものを使用していますが、実は、別ディストリビューションの Live CD 等でもかまいません(後述)。

ブートローダーが起動すると、ブートカーネルを聞かれるので「gentoo」と入力、Enter。起動中にキーボードレイアウトを聞かれるので、ja キーボードレイアウトの「22」番を入力、Enter。

OS の起動が終了すると、ごく普通のシェルプロンプトが表示されます。……待ってても、華麗な GUI インストーラーなんて表示されません(笑)。

 

そう、Gentoo Linux のインストールは、何から何まで、CUI の手作業で行います。

なので、実はここで使用するのは Gentoo 用のインストール CD イメージである必要は全くなく、大抵の Linux な Live CD ならインストール作業を行えます。

だいぶ昔の話しですが、Knoppix でインストール作業を行ったことがあります。

ただ、Live CD と インストールされる Gentoo のカーネルバージョンがあまりに違っていたり、init システムの Live CD から systemd な Gentoo を入れようとすると、失敗することもあるかもしれません。そういうリスクを避けるならば、やはり謹製の「Minimal Installation CD」か「Gentoo Live CD」からインストール作業を行う方が良いかもしれません。

 

では作業手順に戻ります。

ネットワークの確認

前回述べた、ネットワークインターフェースの起動がしばらくかかる件がありますので、確認をおこないます。ちなみに、ネットワークは Gentoo のインストール作業ではあった方が断然良いです。無くてもなんとかなる、ようですが、かなり手間でしょう。

 インストール作業を行う間の root パスワード設定

インストール作業は、デバイスを触ったり、当然パッケージもインストールしたりしますので、root ユーザーで行います。

すべてインストール先のローカル環境で作業を行う場合は必要ありませんが、後述のとおり、sshd を立ち上げて、Widows 機から作業を行いますので、root ユーザーのパスワードを設定します。

ここで設定するパスワードは、インストール完了後の Gentoo の root パスワードとは別物なので、注意が必要です。

sshd 起動

さて、準備は整いました。以降、Widows 機の PuTTY から root ユーザーでログインして作業を行います。

パーティション設計と作成、ファイルシステム作成

自動でパーティションを切ってくれたりはもちろんしないので(笑)、パーティションを設計(といっても、各用途のパーティションサイズと順番を決める程度)を行い、parted でパーティションを切ります。

パーティション設計

今回は、ハンドブックの記述を参考に、下記のようにします。

  • /dev/nvme0n1p1 Grub ブートパーティション 2MB
  • /dev/nvme0n1p2 ブートパーティション 256MB
  • /dev/nvme0n1p3 スワップパーティション 32GB
  • /dev/nvme0n1p4 ルートパーティション 残り全て

パーティション作成

作業内容は以下の通りです。

 

ファイルステムを作成

次に、切ったパーティションそれぞれにファイルステムを作成します。いわゆるフォーマットというやつです。

 

ここで注意が必要なのは、「/boot」を FAT-32 でフォーマットしていること。

これを間違うと、後述しますが GURUB2 のインストール時に泣きそうになります(笑)。

ハンドブックを隅から隅までよく読むと、ちゃんと「UEFI なら FAT、あるいは FAT-32 で」と書いているのですが、そういうことはファイルシステム作成の項で強調して欲しかった。。。

 

さて、次に swap パーティションを作成し、オンにします。

 

 

ファイルシステムマウント

作成したファイルシステムをマウントします。

 

 

ペースファイル配置、chroot で環境に入る準備

内蔵時計の時刻確認

次に、Gentoo Linux インストールのベースとなるファイルを配置しますが、その前に、マシンの内蔵時計の時刻を確認するよう、ハンドブックに書いているので確認します。時刻は UTC で表示されるので、注意です。

 

stage3 tar ボールの取得と展開

いよいよ、インストールのベースとなるファイルを配置します。

作業内容は次の通りですが、今回は systemd プロファイル向けベースファイルを取得しています。

ちなみに、なぜ「stage3」なのかは、話せば歴史的経緯が長くなるので割愛します(笑)。現在は stage1、stage2 は配布されていないようですね。

 

portage システムの設定ファイル「make.conf」の編集

次に、Gentoo のパッケージ管理システム「portage」の中核となる設定ファイル「make.conf」を編集します。

 

 

ここで編集したのは「COMMON_FLAGS」「MAKEOPTS」の二行です。

その他は追々、自動化ツールで記述してくれることもあれば、必要に応じて手動で編集したり、といった感じです。

パッケージ配布ミラーリストの選択

次に、パッケージミラーサイトのリストを選択します。国内のサイトが良いでしょう。

 

 

Gentoo ebuildリポジトリの設定

この作業は……何をやっているのか実はあまり理解していませんが、ハンドブックの記載通りです。

 

 

DNS 情報をコピー

/etc/resolv.conf の編集です。

 

 

これをここでやっておかないと、次で chroot でインストール環境に入った時、名前解決が出来なくなるようですので、忘れずに。

chroot! そしてカーネルインストールの準備

さて、こころからが Gentoo らしい(?)、chroot の実行、そしてカーネルインストールに必要な設定やパッケージのインストールです。

chroot する

 

 

これでやっと、インストール環境に入りました。

ebuild ツリーを取得

次に、Gentoo のパッケージ管理システム Portage で使う、ebuild ツリーを取得します。

ebuild とは、*.rpm や *.deb が「コンパイル済みバイナリ」の集合なのに対して、*.ebuild ファイルは「コンパイル法を含む、パッケージインストール指示書」と考えれば、分かりやすいかもです。

 

 

ここで唐突に「ニュース」という言葉が出て来ますが、gcc のバージョンが上がるとか、重要なニュースについては、ebuild ファイルツリーやプロファイル群と共に配信されていますので、ここで「ニュースがあるよ」と言われます。すなおに読みましょう。

プロファイル選択

Gentoo では、その気になれば今でも init システムを敢えて使い続けることもできるし、今回のように systemd 環境にすることも出来ます。

また、hardend 用途なのか、Gnome デスクトップ、KDE デスクトップ用途なのかなど、柔軟に選択できるようになっており、それぞれ「プロファイル」にまとめられていますので、どういう用途なのか、ここで選んでおきます。

 

 

今回は、「25」番の「一般的 systemd」を選んでいます。

必要なパッケージを更新する

stage3 ファイルが作成されて以降に更新があったプログラムを、最新バージョンに更新します。

 

 

タイムゾーン、ロケール設定

ここで設定する、とハンドブックに書いてますが。。。正直、これはインストール作業が終わって再起動後に、systemd 環境で設定した方が良い気がしますが、まあ、やっておきましょう。

 

 

カーネルインストール

さて、いよいよ山場の一つ、カーネル構築に入ります。

カーネルソースパッケージのインストール

 

カーネルコンパイルツール「genkernel」のインストール

ハンドブックや Gentoo Wiki の Systemd を見ると、systemd ではどうやら genkernel ではなく、genkernel-next を使う、ということらしいので、こちらをインストールします。

 

genkernel の設定を少しだけ変え、コンパイル前に make menuconfig が実行されるようにします。

fstab に /boot パーティションの設定を入れる

/boot パーティションを FAT-32 でフォーマットしていますので、「vfat」を指定することを忘れないようにします。

 

 

Kernel 設定とコンパイル

 

 

genkernel all すると menuconfig が実行されるので、

  • systemd
  • NVM Express block device

の二点を必ず kernel 組み込みにします。

 

検証した限りでは、「OpenRC, runit and other script based systems and managers」も kernel 組み込みにしておかないと、なぜか kernel がコンパイル途中でエラーとなりました。

 

また、「NVM Express block device」を組み込んでおかないと、GRUB2 が /boot パーティションの UUID を見つけられず、起動しなくなります。

 

この二点、ハマってかなり悩みましたが、特に /boot が見つからない件は、何度も パーティションの全削除、切り直しまで手戻りし、あげく、ubuntu をインストールしてみて、こっちでは正常に起動することを確認するなど、かなり時間をとられてしまいました。

インストール中は、正常に NVMe のパーティションをマウント出来ていたので、デフォルトで組み込まれているものとばかり思い込んでいたのが、敗因ですね。。。

 

とはいえ、旧自宅サーバーで、35分25秒かかっていたカーネルのコンパイル、新サーバーで計測すると、カーネルのバージョンが少し違うのと、カーネル設定も少し違うので、単純比較は出来ませんが、なんと 10分29秒で終わりました。

 

かなり苦労した甲斐はあったと思います。

Linux ファームウェアのインストール

こちらは、必要なのかどうか確認はしていませんが、新しいドライバ類が収録されているッぽいので、インストールしています。

 

 

諸設定

ここで、色々と設定と必須ツールをインストールします。

fstab 作成

先ほど、取り急ぎ /boot だけ設定した fstab ですが、ここで完全な状態にしておきます。

 

 

諸設定

ここで、ハンドブックどおりだと、ホスト名やネットワークの設定する手順となっていますが、ホスト名とかはインストール後の再起動が終わってから、systemd 用のコマンドで設定する必要があるようなので、ネットワークの設定のみ行います。

 

 

もしかしたら、この時点では resolv.conf は「/run/systemd/resolve/resolv.conf」が存在せず、シンボリックリンクが張れないかもしれません。その場合は、普通に「/etc/resolv.conf」を書いておいて、再起動後に、あらためてシンボリックリンクを張れば良いと思います。

root パスワード設定

次に、root のパスワード(実運用に入ってからのもの)を設定します。これは強固なパスワードにするべきなのは、言うまでもありません。

 

 

syslog-ng のインストール、設定

https://wiki.gentoo.org/wiki/Syslog-ng

再起動後、すぐに /var/log/messages を確認できた方が、トラブルシューティング時に都合が良いので、syslog-ng をインストールし、有効化しておきます。

ちみなに、上記 Wiki に書いてあるとおり、ちょっとだけ syslog-ng.conf の設定変更の必要があります。

 

 

cron デーモンインストール

次に、cronie をインストールします。

 

 

ファイルシステム用ツールのインストール

 

sshd 自動起動

 

こんなところでしょうか。

まぁ、足りないものは、システムインストールが終わって、再起動後ですね。。。

 

GRUB2 インストール

やっとここまで来ました。ブートローダーのインストール。そしてワクワクの再起動→ NVMe な SSD から起動です。

grub2 パッケージのインストールと設定

 

make.conf に、「GRUB_PLATFORMS=”efi-64″」と書いた方が良い、とハンドブックや Systemd の Wiki に書いてますので、一応従っていますが、ここは無くても、多分大丈夫。

起動 SSD にブートローダーをインストール

先述の通り、ここはハマりまくりました。まず、GURB2 が /boot にインストール出来ない。

これは、先述の通り /boot はFAT-32 でフォーマットすることで、インストール出来るようになりました。

 

が、しかし。もう一段問題が控えていました。

SSD から起動すると、grub が読み込まれる寸前でエラーになる、という状態でした。

こちらも色々試行錯誤し、ヘトヘトになった頃、ハンドブックに書いてあるこの記述に目がとまりました。曰く「いくつかのマザーボードメーカーは、EFI システムパーティション (ESP) 内の .EFI ファイルの場所として /efi/boot/ ディレクトリのみをサポートしているようです。GRUB のインストーラーは –removable オプションを付けることでこの操作を自動的に行うことができます。」

ダメ元で試してみますと、

 

 

インストールに成功し、再起動後に kernel が読み込まれるようになりました。

Kernel 起動設定

 

 

「/etc/default/grub」に、Kernel 起動じに渡すパラメーターなどが指定できます。

取り敢えず、旧自宅サーバーと同じパラメーターを渡してみます。

…… uvesafb が起動していないっぽい。

これは、Kernel の menuconfig が必要そうですが、まだ解決できていません。

 

/boot/grub に設定ファイル生成

ようやく、grub.cfg の生成までこぎ着けました。あと一息。。。

 

 

システムリブート!

まず、chroot から抜け、chroot に入るのに設定した特殊ファイルのマウントを解除、そして通常のパーティションのマウント解除、そして shtudown -h now です。

 

 

……この後、先述の通り、grub が入った /boot パーティションが見つからなかったり、NVMe デバイスが実は組み込まれていないことが判明したり、非常に多くの手戻りが発生して、最期は疲労困憊状態でした(笑)。

再起動後のお片付けと各種設定

お片付け

/ 上に残っている、stage3 圧縮ファイルを削除します。

 

タイムゾーン設定

ここからしばらく、systemd 用のツールを使って、各種設定を行います。

 

 

ホストネーム設定

 

普段使いのユーザー追加

これは一般的な Linux の設定方法でいけました。

 

 

常用パッケージの追加

普段、よく使う、というか無いととにかく不便なツールをインストヘルします。

eix は、Portage の提供するパッケージの検索ツール、ufed は、USE フラグを適切に make.conf に追加、削除してくれるツール、bash-completion は CLI で Gentoo 関連のコマンドのタブ補完をかなり便利にしてくれるツールです。

 

 

旧 SSD のマウント

いちいち / /boot /usr /var のマウントを行うのもしんどいので、下記シェルスクリプトを /root/bin/ 内に作りました。

 

 

いや~長かった。お疲れさまですまったく(笑)。

 

まだ、Linux の「ガワ」だけできて、samba 他、必要なソフトのインストールについては、また次回に書きたいと思います。

 

 


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください