#GentooInstallBattleにおける自分の選択(systemd + LVM + GRUB2)

概要

今回はsystemdを選択し、GUI環境を導入しないシンプルな環境を目指してGentooInstallBattleします。

これまで数回バトルしてきましたが、個人的に今回の選択が一番しっくりときています。

当記事ではインストールメディアの作成からscreenfetchでGentooのロゴを確認するまでの手順を説明しながらまとめていきます。

環境

MinimalインストールCDの入手

ブータブルUSBを作成する方が楽だと思うのですが、Gentooをインストールする富士通LIFEBOOKとは相性が悪いようで起動できませんでした。なので今回はブータブルCDを作成します。

MinimalインストールCDは下記リンクからダウンロードします。

Gentoo source mirrors – Gentoo Linux
News and information from Gentoo Linux

ダウンロード後は下記コマンドでブータブルCDを作成します。

# cdrecord dev=/dev/sr0 install-amd64-minimal-********.iso

インストールメディアからの起動

WiFiを使用するためnet-setupスクリプトで設定を行い、IPアドレスを取得します。

# net-setup

pingコマンドで外部ネットワークと通信できているか確認します。

# ping -c 3 google.com

他PCからssh接続したいので、sshdを起動させてログイン用のパスワードを設定します。

# rc-service sshd start
# passwd

パーティションの作成

今回のパーティションの構成は以下の通りです。

パーティションファイルシステムサイズ説明
/dev/sda1fat32128MiBブートパーティション
/dev/sda2(swap)8GiBスワップパーティション
/dev/sda3ext45GiBルートパーティション
/dev/sda4(lvm)約300GiBLVM用パーティション
/dev/sda5(space)320GiB予備パーティション

パーティションテーブルの方式にはGPTを選択し、partedコマンドでパーティションを作成していきます。

# parted -a optimal /dev/sda
(parted) mklabel gpt
(parted) unit mib
(parted) mkpart boot 1 129
(parted) set 2 boot on
(parted) mkpart swap 129 8321
(parted) mkpart root 8321 13441
(parted) mkpart lvm 13441 327678
(parted) set 5 lvm on
(parted) mkpart space 327678 -1
(parted) print
Model: ATA WDC WD6400BPVT-1 (scsi)
Disk /dev/sda: 610480MiB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number  Start      End        Size       File system  Name   Flags
 1      1.00MiB    129MiB     128MiB                  boot   boot, esp
 2      129MiB     8321MiB    8192MiB                 swap
 3      8321MiB    13441MiB   5120MiB                 root
 4      13441MiB   327678MiB  314237MiB               lvm    lvm
 5      327678MiB  610479MiB  282801MiB               space

(parted) quit

論理ボリュームの作成

LVは以下の通りです。後から柔軟に容量を調整できるので、あまり考え込まずサクッと作成します。

論理ボリュームサイズ
/dev/vg/usr20GiB
/dev/vg/home20GiB
/dev/vg/opt5GiB
/dev/vg/var20GiB
/dev/vg/tmp5GiB

まずは物理ボリューム(PV)を作成します。

# pvcreate /dev/sda4
# pvs
PV         VG Fmt  Attr PSize   PFree  
/dev/sda4     lvm2 ---  306.87g 306.87g

次にボリュームグループ(VG)を作成します。

# vgcreate vg /dev/sda4
# vgs
VG #PV #LV #SN Attr   VSize   VFree  
vg   1   0   0 wz--n- 306.87g 306.87g

最後に論理ボリューム(LV)を作成します。

# lvcreate -L20G -nusr vg
# lvcreate -L20G -nhome vg
# lvcreate -L5G -nopt vg
# lvcreate -L20G -nvar vg
# lvcreate -L5G -ntmp vg
# lvs
LV   VG Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
home vg -wi-a----- 20.00g                                                    
opt  vg -wi-a-----  5.00g                                                    
tmp  vg -wi-a-----  5.00g                                                    
usr  vg -wi-a----- 20.00g                                                    
var  vg -wi-a----- 20.00g                         

ファイルシステム作成

UEFIブートのためsda1はFAT32にし、他はext4で統一させました。

# mkfs.vfat -F32 /dev/sda1
# mkfs.ext4 /dev/sda4
# mkfs.ext4 /dev/vg/usr
# mkfs.ext4 /dev/vg/home
# mkfs.ext4 /dev/vg/opt
# mkfs.ext4 /dev/vg/var
# mkfs.ext4 /dev/vg/tmp

スワップの初期化&有効化

スワップとして使用するために初期化を行います。また、LABELの設定もしておきます。

# mkswap -L swap /dev/sda2
# swapon LABEL=swap

マウント

最初にルートパーティションである/dev/sda3をマウントしてから他のパーティションをマウントします。また、ブートパーティションはchroot環境に入ってからマウントすることにします。

# mount /dev/sda3 /mnt/gentoo
# mkdir /mnt/gentoo/{boot,usr,home,opt,var,tmp}
# mount /dev/vg/usr /mnt/gentoo/usr
# mount /dev/vg/home /mnt/gentoo/home
# mount /dev/vg/opt /mnt/gentoo/opt
# mount /dev/vg/var /mnt/gentoo/var
# mount /dev/vg/tmp /mnt/gentoo/tmp

stage3のダウンロード

stage3(systemd用)のtarボールを下記コマンドで取得し、展開します。

# cd /mnt/gentoo
# links https://www.gentoo.org/downloads/mirrors/
# tar xpvf stage3-amd64-systemd-20210224T214503Z.tar.xz --xattrs-include='*.*' --numeric-owner

コンパイルオプションの設定

-march=nativeを追記することで、現在Gentooをインストールしようとしているマシンのアーキテクチャをターゲットにしてくれます。

また、MAKEOPTSには並列ビルド時のジョブ数を指定します。自分の場合、論理CPU数が4だったため、-j4にしています。

# vi /mnt/gentoo/etc/portage/make.conf
COMMON_FLAGS="-march=native -O2 -pipe"  #追記
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"
MAKEOPTS="-j4"  #追記

ミラーサイトの選択

Japanのミラーサイトを登録します。こうすることで、ソースコードのダウンロード時間を短縮することができます。

Shiftキーを押すことで選択できます。EnterキーやYキーではないので注意です。

# mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf

ebuildリポジトリの設定

以下のコマンドでebuildリポジトリの設定ファイルを置くためのディレクトリを作成します。

# mkdir -p /mnt/gentoo/etc/portage/repos.conf

このディレクトリ内にebuildリポジトリ設定ファイルの雛形をコピーして配置します。

# cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf

念の為catコマンドで設定ファイルの内容を確認しておきます。

# cat /mnt/gentoo/etc/portage/repos.conf/gentoo.conf
[DEFAULT]
main-repo = gentoo

[gentoo]
location = /var/db/repos/gentoo
sync-type = rsync
sync-uri = rsync://rsync.gentoo.org/gentoo-portage
auto-sync = yes
sync-rsync-verify-jobs = 1
sync-rsync-verify-metamanifest = yes
sync-rsync-verify-max-age = 24
sync-openpgp-key-path = /usr/share/openpgp-keys/gentoo-release.asc
sync-openpgp-keyserver = hkps://keys.gentoo.org
sync-openpgp-key-refresh-retry-count = 40
sync-openpgp-key-refresh-retry-overall-timeout = 1200
sync-openpgp-key-refresh-retry-delay-exp-base = 2
sync-openpgp-key-refresh-retry-delay-max = 60
sync-openpgp-key-refresh-retry-delay-mult = 4
sync-webrsync-verify-signature = yes

DNS情報のコピー

下記コマンドでネームサーバの情報が書かれている/etc/resolv.confをコピーしてきます。

# cp /etc/resolv.conf /mnt/gentoo/etc/

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

# mount -t proc /proc /mnt/gentoo/proc
# mount --rbind /sys /mnt/gentoo/sys
# mount --make-rslave /mnt/gentoo/sys
# mount --rbind /dev /mnt/gentoo/dev
# mount --make-rslave /mnt/gentoo/dev

chrootの実行

chrootで新しい環境に移動した後、環境を更新し、chroot環境であることを分かりやすいようにプロンプトを設定します。

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

ブートパーティションをマウントします。

# mount /dev/sda1 /boot

ebuildリポジトリの更新

以下のコマンドでebuildリポジトリを最新の状態にします。

# emerge --sync

プロファイル設定

今回はsystemdでGUI環境なしのため、systemd(stable)を選択します(デフォルト)。

# eselect profile list
Available profile symlink targets:
  [1]   default/linux/amd64/17.1 (stable)
  [2]   default/linux/amd64/17.1/selinux (stable)
  [3]   default/linux/amd64/17.1/hardened (stable)
  [4]   default/linux/amd64/17.1/hardened/selinux (stable)
  [5]   default/linux/amd64/17.1/desktop (stable)
  [6]   default/linux/amd64/17.1/desktop/gnome (stable)
  [7]   default/linux/amd64/17.1/desktop/gnome/systemd (stable)
  [8]   default/linux/amd64/17.1/desktop/plasma (stable)
  [9]   default/linux/amd64/17.1/desktop/plasma/systemd (stable)
  [10]  default/linux/amd64/17.1/desktop/systemd (stable)
  [11]  default/linux/amd64/17.1/developer (stable)
  [12]  default/linux/amd64/17.1/no-multilib (stable)
  [13]  default/linux/amd64/17.1/no-multilib/hardened (stable)
  [14]  default/linux/amd64/17.1/no-multilib/hardened/selinux (stable)
  [15]  default/linux/amd64/17.1/systemd (stable) *

@worldの更新

以下のコマンドで、gentooベースシステムを構築する様々なパッケージ群を取得します。

# emerge -avuDN @world

タイムゾーンの設定

/usr/share/zoneinfoを確認し、タイムゾーンを日本に設定します。

# echo "Japan" > /etc/timezone

下記コマンドを実行することで、システムのライブラリがタイムゾーンを知るために参照する/etc/localtimeを、/etc/timezoneを元にアップデートします。

# emerge --config sys-libs/timezone-data

Vimのインストール

デフォルトではvimはインストールされていないため、emergeコマンドで入手します。

# emerge -a vim

エディタリストでviが追加されたことを確認し、デフォルトのエディタとして設定します。

# eselect editor list
Available targets for the EDITOR variable:
  [1]   nano
  [2]   ex
  [3]   vi
  [ ]   (free form)

# eselect editor set 3

ロケールの設定

デフォルトで入っているC.UTF-8に加えて、英語(en_US.UTF-8)を設定ファイルに追加します。

# vi /etc/locale.gen
en_US.UTF-8 UTF-8
C.UTF8 UTF-8

locale-genコマンドで/etc/locale.genに書かれたロケールを生成します。

# locale-gen

生成されたかどうか以下のコマンドで確認して変更します。

# eselect locale list
Available targets for the LANG variable:
  [1]   C
  [2]   C.utf8
  [3]   POSIX
  [4]   en_US.utf8
  [6]   C.UTF8 *
  [ ]   (free form)

# eselect locale set 4

環境設定の更新

ここまでの変更を下記コマンドで更新します。

# env-update && source /etc/profile && export PS1="(chroot) ${PS1}"

ファームウェアの追加

lspciコマンドでネットワークアダプタの情報を知りたいので以下のパッケージをダウンロードします。

# emerge -a pciutils

lspciコマンドで確認し、この表から該当するものを探しておきます。

# lspci
-----------(省略)--------------
0b:00.0 Network controller: Intel Corporation Centrino Wireless-N 1000 [Condor Peak]

追加のファームウェアをダウンロードします。

# emerge -a linux-firmware

カーネルのビルド

下記コマンドでカーネルソースを入手します。

# emerge -a gentoo-sources

/usr/src/linuxへと移動し、カーネルコンフィグの設定をしていきます。

# cd /usr/src/linux
# make menuconfig

公式ハンドブックで必須のオプションを確認するのですが、ほとんどが設定済みであったため、新しく設定した部分は以下の場所だけになります。

Device Drivers --->
  HID support  --->
    [*]   Battery level reporting for HID device
-*- Enable the block layer --->
   Partition Types --->
      [*] Advanced partition selection

systemdを選択するので下記オプションを有効にします。するとsystemd環境で必須、推奨されるカーネルオプションが自動的に設定されます。

Gentoo Linux  --->
  Support for init systems, system and service managers  --->
    [ ] OpenRC, runit and other script based systems and managers (NEW)                
    [*] systemd (NEW)

先程調べたWiFiのドライバを選択します。

Device Drivers --->
  Network device support --->
    Wireless LAN --->
      <M> Intel Wireless WiFi Next Gen AGN - Wireless-N/Advanced-N/Ultimate-N (iwlwifi)
      <M> Intel Wireless WiFi DVM Firmware support

カーネルをビルドします。

# make -j4
# make modules_install
# make install

initramfsの作成

initramfsをlvmサポートを有効にしてインストールします。

# emerge -a genkernel
# genkernel --install --lvm initramfs

/etc/fstabの編集

fstabを簡潔に記述できるようLABELを設定し、起動時に自動的にマウントできるようにfstabを編集します。

# e2label /dev/sda3 root
# e2label /dev/vg/usr usr
# e2label /dev/vg/home home
# e2label /dev/vg/opt opt
# e2label /dev/vg/var var
# e2label /dev/vg/tmp tmp
# vi /etc/fstab
/dev/sda2               /boot           vfat            noauto,noatime  0 2
LABEL=root              /               ext4            noatime         0 1
LABEL=swap              none            swap            sw              0 0
LABEL=usr               /usr            ext4            noatime         0 2
LABEL=home              /home           ext4            noatime         0 2
LABEL=opt               /opt            ext4            noatime         0 2
LABEL=var               /var            ext4            noatime         0 2
LABEL=tmp               /tmp            ext4            noatime         0 2

ネットワーク関連ツールの導入

WiFiを使用するために必要なツールとdhcpクライアントツールをインストールしておきます。細かい設定はGentoo起動後に行います。

# emerge -a wpa_supplicant
# emerge -a dhcpcd

rootパスワードの設定

新しい環境用のrootパスワードを設定します。これを忘れるとGentoo起動後にログインできません。

# passwd

GRUB2のインストール&設定

システム起動時にLVMが認識され、正常にマウントされるにはdevice-mapperサポートを有効にして、GRUB2をemegeしなければなりません。これを忘れるとGentooが起動できません。

LVM - Gentoo Wiki
# echo 'sys-boot/grub:2 device-mapper' >> /etc/portage/package.use/package.use
# emerge -a grub:2

下記コマンドでGRUB2をインストールします。

# grub-install --target=x86_64-efi --efi-directory=/boot --removable

LVMの場合は下記設定もする必要があります。

LVM - Gentoo Wiki
# vi /etc/default/grub
GRUB_CMDLINE_LINUX="dolvm"

最後にgrub-mkconfigコマンドで/boot/grub/grub.cfgに設定ファイルを作成します。

# grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.4.80-gentoo-r1
done

システムの再起動

ではchrootから抜けて、全てのパーティションをアンマウントして再起動します。

# exit
# cd
# umount -l /mnt/gentoo/dev{/shm,/pts,}
# umount -R /mnt/gentoo
# reboot

ネットワークの設定

wpa_supplicantの設定を行います。インターフェース名の設定ファイルを下記内容で新規作成します。

# vi /etc/wpa_supplicant/wpa_supplicant-wlp11s0.conf
network={
        ssid="YourSSID"
        psk="your-secret-key"
}

dhcpcdも一緒に起動させます。

# systemctl enable --now wpa_supplicant@wlp11s0
# systemctl enable --now dhcpcd

pingで外部と通信できているか確認します。

# ping -c 3 google.com

sshdの起動

メインPCからssh接続で利用するのが便利だと思うのでsshdを起動させておきます。

# systemctl enable --now sshd

ホスト名の設定

ホスト名を好みの名前に設定します。

# hostnamectl set-hostname zukenux

一般ユーザの作成

普段の作業用ユーザを作成しておきます。

# useradd -G wheel suzuken
# passwd suzuken

sudoのインストール

一般ユーザがルート権限でコマンドを実行できるようにsudoをインストールします。

# emerge -a sudo
# visudo
----------(省略)-----------
## Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL) ALL

screenfetch

GentooInstallBattle恒例のscreenfetchコマンドをインストールして実行します。

# emerge -a screenfetch
# screenfetch

最後に

今回はGentoo Linuxインストールにおける自分の選択をまとめてみました。

やはりGentooの軽量さを活かすならGUI環境を導入しないほうが個人的にかっこいいなと思います。

そもそもメインPC(macOS)を閉じて、わざわざGentooでブラウジングしようという気持ちになれません。

流石にインストールは飽きてきたのでしばらくGentooInstallBattleはお休みします。

Comments

Copied title and URL