……いやはや、今回は色々くじけそうになりました(笑)。
実はこのマイグレーションに伴って、くっそめんどくさい 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 他、必要なソフトのインストールについては、また次回に書きたいと思います。