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

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

 

実はこのマイグレーションに伴って、くっそめんどくさい 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 のインストール作業ではあった方が断然良いです。無くてもなんとかなる、ようですが、かなり手間でしょう。

livecd ~ # ifconfig

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

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

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

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

livecd ~ # passwd

sshd 起動

livecd ~ # /etc/init.d/sshd start

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

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

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

パーティション設計

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

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

パーティション作成

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

## パーティション作成(システム領域用)
livecd ~ # parted -a optimal /dev/nvme0n1
(parted) mklabel gpt
(parted) print
Model: Unknown (unknown)
Disk /dev/nvme0n1: 250GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start  End  Size  File system  Name  Flags

## 単位を MB に変更
(parted) unit mib
## Grub ブートローダー用パーティション作成
(parted) mkpart primary 1 3
(parted) name 1 grub
(parted) set 1 bios_grub on
(parted) print
Model: Unknown (unknown)
Disk /dev/nvme0n1: 238475MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start    End      Size     File system  Name  Flags
 1      1.00MiB  3.00MiB  2.00MiB               grub  bios_grub

## boot、swap、ルートファイルシステムパーティション
(parted) mkpart primary 3 259
(parted) name 2 boot
(parted) mkpart primary 259 33027
(parted) name 3 swap
(parted) mkpart primary 33027 -1
(parted) name 4 rootfs
(parted) set 2 boot on
(parted) print
Model: Unknown (unknown)
Disk /dev/nvme0n1: 238475MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start     End        Size       File system  Name    Flags
 1      1.00MiB   3.00MiB    2.00MiB                 grub    bios_grub
 2      3.00MiB   259MiB     256MiB                  boot    boot, esp
 3      259MiB    33027MiB   32768MiB                swap
 4      33027MiB  238474MiB  205447MiB               rootfs

(parted) quit
Information: You may need to update /etc/fstab.

 

ファイルステムを作成

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

## ファイルシステム作成
## ブートパーティション(UEFI では Fat32 で!)
livecd ~ # mkfs.fat -F 32 /dev/nvme0n1p2
mkfs.fat 4.1 (2017-01-24)


## ルートファイルシステムパーティション作成
livecd ~ # mkfs.reiserfs /dev/nvme0n1p4
mkfs.reiserfs 3.6.25

Guessing about desired format.. Kernel 4.14.78-gentoo is running.
Format 3.6 with standard journal
Count of blocks on the device: 52660768
Number of blocks consumed by mkreiserfs formatting process: 9819
Blocksize: 4096
Hash function used to sort names: "r5"
Journal Size 8193 blocks (first block 18)
Journal Max transaction length 1024
inode generation number: 0
UUID: ce1dc929-28cf-48cf-b0b1-614692caf434
ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
        ALL DATA WILL BE LOST ON '/dev/nvme0n1p4'!
Continue (y/n):y
Initializing journal - 0%....20%....40%....60%....80%....100%
Syncing..ok
ReiserFS is successfully created on /dev/nvme0n1p4.

 

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

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

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

 

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

 

## スワップパーティション作成
livecd ~ # mkswap /dev/nvme0n1p3
Setting up swapspace version 1, size = 31.8 GiB (34088153088 bytes)
no label, UUID=8071da94-5567-407b-b48d-f5a334f80757
livecd ~ # swapon /dev/nvme0n1p3

 

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

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

 

## ファイルシステムマウント
livecd ~ # mount /dev/nvme0n1p4 /mnt/gentoo/
livecd ~ # mkdir /mnt/gentoo/boot
livecd ~ # mount /dev/nvme0n1p2 /mnt/gentoo/boot/

 

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

内蔵時計の時刻確認

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

## 時刻確認
livecd ~ # date
Sat Nov 24 22:27:21 UTC 2018

 

stage3 tar ボールの取得と展開

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

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

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

## stage3 tar ボールの取得と展開
livecd ~ # cd /mnt/gentoo/
livecd /mnt/gentoo # wget http://distfiles.gentoo.org/releases/amd64/autobuilds/20181123/systemd/stage3-amd64-systemd-20181123.tar.bz2
livecd /mnt/gentoo # tar xpvf stage3-*.tar.bz2 --xattrs-include='*.*' --numeric-owner

 

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

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

 

## portage システムの設定ファイル「make.conf」の編集
livecd /mnt/gentoo # nano -w /mnt/gentoo/etc/portage/make.conf
COMMON_FLAGS="-march=native -O2 -pipe -fomit-frame-pointer -funroll-loops -fforce-addr"
MAKEOPTS="-j9"

 

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

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

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

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

 

## パッケージ配布ミラーリストの選択
livecd /mnt/gentoo # mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf
rsync://ftp.iij.ad.jp/pub/linux/gentoo/
rsync://ftp.jaist.ac.jp/pub/Linux/Gentoo/

 

Gentoo ebuildリポジトリの設定

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

 

## Gentoo ebuildリポジトリの設定
livecd /mnt/gentoo # mkdir --parents /mnt/gentoo/etc/portage/repos.conf
livecd /mnt/gentoo # cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf

 

DNS 情報をコピー

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

 

## DNS 情報をコピー
livecd /mnt/gentoo # cp --dereference /etc/resolv.conf /mnt/gentoo/etc/

 

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

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

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

chroot する

 

## chroot で必要になる特殊ファイルシステムをマウントする
livecd /mnt/gentoo # mount --types proc /proc /mnt/gentoo/proc
livecd /mnt/gentoo # mount --rbind /sys /mnt/gentoo/sys
livecd /mnt/gentoo # mount --make-rslave /mnt/gentoo/sys
livecd /mnt/gentoo # mount --rbind /dev /mnt/gentoo/dev
livecd /mnt/gentoo # mount --make-rslave /mnt/gentoo/dev

livecd /mnt/gentoo # test -L /dev/shm && rm /dev/shm && mkdir /dev/shm
livecd /mnt/gentoo # mount --types tmpfs --options nosuid,nodev,noexec shm /dev/shm
livecd /mnt/gentoo # chmod 1777 /dev/shm


## chroot する
livecd /mnt/gentoo # chroot /mnt/gentoo /bin/bash
livecd / # source /etc/profile
livecd / # export PS1="(chroot) ${PS1}"

 

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

ebuild ツリーを取得

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

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

 

## ebuild スナップショットを取得する
(chroot) livecd / # emerge-webrsync
(chroot) livecd / # emerge --sync


## ニュースを確認する
(chroot) livecd / # eselect news list
(chroot) livecd / # eselect news read

 

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

プロファイル選択

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

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

 

## プロファイル選択
(chroot) livecd / # eselect profile list
  [18]  default/linux/amd64/17.0/desktop/gnome/systemd (stable)
  [25]  default/linux/amd64/17.0/systemd (stable) *
(chroot) livecd / # eselect profile set 25

 

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

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

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

 

## 必要なパッケージを更新する
(chroot) livecd / # emerge --ask --verbose --update --deep --newuse @world

 

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

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

 

## タイムゾーン設定
(chroot) livecd / # ls /usr/share/zoneinfo
(chroot) livecd / # echo "Japan" > /etc/timezone


## ロケール設定
(chroot) livecd / # nano -w /etc/locale.gen
en_US.UTF-8 UTF-8
ja_JP.UTF-8 UTF-8
(chroot) livecd / # locale-gen
(chroot) livecd / # locale -a
(chroot) livecd / # eselect locale list
(chroot) livecd / # eselect locale set 4
(chroot) livecd / # nano -w /etc/env.d/02locale
## For UTF-8
LC_ALL="ja_JP.utf8"
LC_COLLATE="C"
LANG="ja_JP.utf8"
LANGUAGE="ja_JP.utf8"
#LINGUAS="ja"
LINGUAS="ja ja_JP"
L10N="ja"
PAGER="less"
KEYMAP="ja_JP.UTF-8"
(chroot) livecd / # . /etc/profile
livecd / # export PS1="(chroot) ${PS1}"

 

カーネルインストール

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

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

(chroot) livecd / # emerge --ask sys-kernel/gentoo-sources
(chroot) livecd / # ls -l /usr/src/
合計 1
lrwxrwxrwx  1 root root  20 11月 24 23:58 linux -> linux-4.14.83-gentoo
drwxr-xr-x 25 root root 944 11月 24 23:58 linux-4.14.83-gentoo

 

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

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

(chroot) livecd / # emerge --ask sys-kernel/genkernel-next
(chroot) livecd / # nano -w /etc/genkernel.conf
MENUCONFIG="no"
  ↓
MENUCONFIG="yes"

 

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

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

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

 

(chroot) livecd / # nano -w /etc/fstab
/dev/nvme0n1p2          /boot           vfat            defaults        0 2

 

Kernel 設定とコンパイル

 

(chroot) livecd / # genkernel all

Gentoo Linux --->
        Support for init systems, system and service managers --->
                [*] OpenRC, runit and other script based systems and managers
                [*] systemd
Device Drivers  --->
  <*> NVM Express block device

* WARNING... WARNING... WARNING...
* Additional kernel cmdline arguments that *may* be required to boot properly...
* With support for several ext* filesystems available, it may be needed to
* add "rootfstype=ext3" or "rootfstype=ext4" to the list of boot parameters.
(chroot) livecd / # ls /boot/kernel* /boot/initramfs*
/boot/initramfs-genkernel-x86_64-4.14.83-gentoo
/boot/kernel-genkernel-x86_64-4.14.83-gentoo

 

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 ファームウェアのインストール

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

 

## ファームウェアのインストール
(chroot) livecd / # emerge --ask sys-kernel/linux-firmware

 

諸設定

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

fstab 作成

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

 

## fstab 作成
(chroot) livecd / # nano -w /etc/fstab
/dev/nvme0n1p2          /boot           vfat            defaults        0 2
/dev/nvme0n1p3          none            swap            sw              0 0
/dev/nvme0n1p4          /               reiserfs        noatime         0 1
/dev/sda1               /home           xfs             noatime         0 0

 

諸設定

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

 

## ネットワーク
(chroot) livecd ~ # nano -w /etc/systemd/network/eno1.network
[Match]
Name=eno1

[Network]
DHCP=none
DNS=192.168.8.254
Domains=home.lunarflake.com

[Address]
Address=192.168.8.1/24

[Route]
Gateway=192.168.8.254
(chroot) livecd ~ # systemctl enable systemd-networkd.service
(chroot) livecd ~ # systemctl enable systemd-resolved.service


## resolv.conf を Systemd 用に
j9 ~ # ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
j9 ~ # ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 32 11月 30 20:43 /etc/resolv.conf -> /run/systemd/resolve/resolv.conf

 

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

root パスワード設定

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

 

## root パスワード設定
(chroot) livecd ~ # passwd

 

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

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

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

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

 

## システムロガーのインストール
(chroot) livecd ~ # emerge --ask syslog-ng
j9 /var/log # nano -w /etc/syslog-ng/syslog-ng.conf
source src { systemd(); internal(); };
    ↓
source src { systemd-journal(); internal(); };
j9 /var/log # systemctl enable syslog-ng@default
Created symlink /etc/systemd/system/multi-user.target.wants/syslog-ng@default.service → /lib/systemd/system/syslog-ng@.service.
j9 /var/log # systemctl start syslog-ng@default
j9 /var/log # systemctl status syslog-ng@default
● syslog-ng@default.service - System Logger Daemon "default" instance
   Loaded: loaded (/lib/systemd/system/syslog-ng@.service; enabled; vendor pres>
   Active: active (running) since Sun 2018-12-02 16:32:52 JST; 9s ago
     Docs: man:syslog-ng(8)
 Main PID: 23824 (syslog-ng)
   CGroup: /system.slice/system-syslog\x2dng.slice/syslog-ng@default.service
           └─23824 /usr/sbin/syslog-ng -F --enable-core --cfgfile /etc/syslog-n>

12月 02 16:32:52 j9 systemd[1]: Starting System Logger Daemon "default" instanc>
12月 02 16:32:52 j9 systemd[1]: Started System Logger Daemon "default" instance.
(chroot) livecd ~ # emerge --ask logrotate

j9 ~ # emerge --ask app-admin/logrotate

 

cron デーモンインストール

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

 

## cron デーモンインストール
(chroot) livecd ~ # emerge --ask sys-process/cronie
(chroot) livecd ~ # systemctl enable cronie.service
(chroot) livecd ~ # crontab -e
13,33,53 * * * * /usr/bin/wget -O - "http://dyn.value-domain.com/cgi-bin/dyn.fcg?d=lunarflake.com&p=****&h=home">/dev/null 2>&1        # DynamicDNS
23 5 * * * /usr/bin/eix-sync > /dev/null2>&1 ; /usr/bin/emerge -puDv world #EmergeUpWatch
43 5 * * * /usr/bin/mandb
53 5 * * 6 /usr/bin/certbot renew

## インデックス作成
(chroot) livecd ~ # emerge --ask sys-apps/mlocate

 

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

## ファイルシステムツール
(chroot) livecd ~ # emerge --ask sys-fs/e2fsprogs
(chroot) livecd ~ # emerge --ask sys-fs/dosfstools
(chroot) livecd ~ # emerge --ask sys-fs/xfsprogs
(chroot) livecd ~ # emerge --ask sys-fs/reiserfsprogs

 

sshd 自動起動

## sshd 自動起動
(chroot) livecd ~ # systemctl enable sshd.service

 

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

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

 

GRUB2 インストール

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

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

## GRUB2 インストール
(chroot) livecd ~ # nano -w /etc/portage/make.conf
GRUB_PLATFORMS="efi-64"
(chroot) livecd ~ # emerge --ask --verbose sys-boot/grub:2

 

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

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

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

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

 

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

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

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

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

 

(chroot) livecd / # grub-install --target=x86_64-efi --efi-directory=/boot --removable
Installing for x86_64-efi platform.
Installation finished. No error reported.

 

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

Kernel 起動設定

 

## Kernel 起動設定
j9 ~ # nano -w /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="video=uvesafb:mtrr:3,ywrap vga=795 splash=silent"

 

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

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

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

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

 

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

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

 

## /boot/grub に設定ファイル生成
(chroot) livecd ~ # grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Linux イメージを見つけました: /boot/kernel-genkernel-x86_64-4.14.83-gentoo
Found initrd image: /boot/initramfs-genkernel-x86_64-4.14.83-gentoo
完了

 

システムリブート!

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

 

## システムリブート
(chroot) livecd ~ # exit
livecd ~ # cd
livecd ~ # umount -l /mnt/gentoo/dev{/shm,/pts,}
livecd ~ # umount -R /mnt/gentoo



livecd ~ # shutdown

 

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

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

お片付け

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

## お片付け
localhost ~ # rm /stage3-*.tar.bz2*

 

タイムゾーン設定

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

 

## タイムゾーン設定
localhost ~ # timedatectl status
               Local time: 水 2018-11-28 17:07:13 UTC
           Universal time: 水 2018-11-28 17:07:13 UTC
                 RTC time: n/a
                Time zone: n/a (UTC, +0000)
System clock synchronized: no
              NTP service: inactive
          RTC in local TZ: no
localhost ~ # timedatectl list-timezones | grep Tokyo
Asia/Tokyo
localhost ~ # timedatectl set-timezone Asia/Tokyo
localhost ~ # timedatectl status
               Local time: 木 2018-11-29 02:08:22 JST
           Universal time: 水 2018-11-28 17:08:22 UTC
                 RTC time: n/a
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: no
              NTP service: inactive
          RTC in local TZ: no

 

ホストネーム設定

## ホストネーム設定
localhost ~ # hostnamectl status
   Static hostname: n/a
Transient hostname: localhost
         Icon name: computer-desktop
           Chassis: desktop
        Machine ID: fb2d29ca9ee1f28c8220175e5bf81227
           Boot ID: b5b6fd672e284d409044c8c6a21d20dd
  Operating System: Gentoo/Linux
            Kernel: Linux 4.14.83-gentoo
      Architecture: x86-64
localhost ~ # hostnamectl set-hostname j9
localhost ~ # hostnamectl status
   Static hostname: j9
         Icon name: computer-desktop
           Chassis: desktop
        Machine ID: fb2d29ca9ee1f28c8220175e5bf81227
           Boot ID: b5b6fd672e284d409044c8c6a21d20dd
  Operating System: Gentoo/Linux
            Kernel: Linux 4.14.83-gentoo
      Architecture: x86-64

 

普段使いのユーザー追加

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

 

## ユーザー追加
j9 ~ # useradd sagay
j9 ~ # passwd sagay
新しいパスワード:
新しいパスワードを再入力してください:
passwd: パスワードは正しく更新されました

 

常用パッケージの追加

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

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

 

## eix インストール
j9 ~ # emerge eix -Dv --ask


## gentoolkit インストール
j9 ~ # emerge gentoolkit -Dv --ask


## portage-utils インストール
j9 ~ # emerge portage-utils -Dv --ask


## ufed インストール
j9 ~ # emerge ufed -Dv --as


## bash-completion インストール
j9 ~ # emerge bash-completion -Dv --ask

 

旧 SSD のマウント

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

## 旧SSD マウント・アンマウントスクリプト
j9 ~ # nano -w bin/backmount.sh
#!/bin/sh
case $1 in
	mount)
		mount /dev/sdc3 /mnt/root
		mount /dev/sdc1 /mnt/boot
		mount /dev/sdc5 /mnt/usr
		mount /dev/sdc6 /mnt/var
		;;
	umount)
		umount /mnt/root
		umount /mnt/boot
		umount /mnt/usr
		umount /mnt/var
		;;
        *)
		echo 'mount or umount BackupSDD at /mnt/*'
		echo 'if mount HDD use backmount.sh mount'
		echo 'if umount HDD use backmount.sh umount'
		;;
esac

j9 ~ # chmod 700 bin/backmount.sh

 

 

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

 

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

 

 

コメントを残す

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

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