Gentoo Linuxをインストールする(OpenRC + LVM + Xfce + 無線LAN)

概要

今回は、前々回の#GentooInstall 一戦目の振り返りのようにVirtualBox上ではなく、使わなくなった古いPCにGentooをインストールしてみます。LVM導入やWiFiの設定、Xfceの導入等もしていきます。これまでVirtualBoxでGentooInstallBattleしてきましたが、それらは準備運動で今回が本当の初戦となります。

また、いろんな機能をもりもりにインストールするのではなく、最小限にインストールします。なぜかというと、結局自分が使わない機能もインストールしてしまい、結局何が必要なのか知る機会が失われ、勉強にならないからです。最小限インストール完了後に、emergeで怒られながら少しずつ機能追加していきたいので、この記事は都度更新するつもりです。

今回は今までの記事とは違って、自分用の作業メモのような面が強いと思います。なので細かい説明はGentoo Wikiを参照してください。

環境

富士通 LIFEBOOK AH54/D 2011

GentooInstallBattle

MinimalインストールCDの入手

以下のリンクからミラーを選択して、MinimalインストールCDを入手し、CDに焼きます。

Gentoo source mirrors – Gentoo Linux
News and information from Gentoo Linux
# cdrecord dev=/dev/sr0 install-amd64-minimal-20201206T214503Z.iso

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

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

# net-setup

pingして外部のネットワークと通信できていることを確認します。

# ping -c 3 google.com

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

# rc-service sshd start
# passwd

パーティションの作成

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

パーティションファイルシステムサイズ説明
/dev/sda1(ブートローダ)2MiBBIOSブートパーティション
/dev/sda2fat32128MiBブートパーティション
/dev/sda3(swap)8GiBスワップパーティション
/dev/sda4ext45GiBルートパーティション
/dev/sda5(lvm)約300GiBLVM用パーティション
/dev/sda6(space)320GiB予備パーティション

変更前後でprintで状態を確認しながらmkpartして作成します。

# parted -a optimal /dev/sda
(parted) mklabel gpt
(parted) unit mib
(parted) mkpart grub 1 3
(parted) set 1 bios_grub on
(parted) mkpart boot 3 131
(parted) set 2 boot on
(parted) mkpart swap 131 8323
(parted) mkpart root 8323 13443
(parted) mkpart lvm 13443 327680
(parted) set 5 lvm on
(parted) mkpart space 327680 -1
(parted) print
----------(省略)----------
Number  Start   End     Size    File system     Name   Flags
 1      1049kB  3146kB  2097kB                  grub   bios_grub
 2      3146kB  137MB   134MB   fat32           boot   boot, esp
 3      137MB   8727MB  8590MB  linux-swap(v1)  swap
 4      8727MB  14.1GB  5369MB  ext4            root
 5      14.1GB  344GB   330GB                   lvm    lvm
 6      344GB   640GB   297GB                   space

(parted) quit

論理ボリュームの作成

LVは以下の通りになります。

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

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

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

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

# vgcreate vg /dev/sda5
# 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ブートにするのでsda2はvfatにし、他はext4で統一させました。

# mkfs.vfat -F32 /dev/sda2
# 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

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

後々のfatabファイル編集でLABEL指定ができるように、LABEL作成して初期化&有効化します。

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

マウント

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

# mount /dev/sda4 /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

日時確認

# date

stage3のダウンロード

stage3 tarballのアドレスを取得してwgetでダウンロードし、tarコマンドで展開します。

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

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

# 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のミラーサイトを登録します。こうすることで、ソースコードのダウンロード時間を短縮することができます。

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

ebuildリポジトリの設定

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

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

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

# 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 --dereference /etc/resolv.conf /mnt/gentoo/etc/

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

# mount --types 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}"

chroot環境に入ったので、ブートパーティションをマウントします。

# mount /dev/sda2 /boot

ebuildリポジトリの更新

以下のコマンドで最新のebuildリポジトリのスナップショットを取得&更新します。

# emerge-webrsync
# emerge --sync

プロファイル設定

今回は最小限のインストールにして、後から必要なものを足していきます。

# 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/developer (stable)
  [11]  default/linux/amd64/17.1/no-multilib (stable)
  [12]  default/linux/amd64/17.1/no-multilib/hardened (stable)
  [13]  default/linux/amd64/17.1/no-multilib/hardened/selinux (stable)
  [14]  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のインストール

emergeコマンドでvimをインストールし、デフォルトのエディタにします。

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

# eselect editor set 3

ロケールの設定

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

# vi /etc/locale.gen
en_US.UTF-8 UTF-8
ja_JP.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
  [5]   ja_JP.utf8
  [6]   C.UTF8 *
  [ ]   (free form)

# eselect locale set 4

環境設定の更新

以下のコマンドで今までの変更を更新します。

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

ファームウェアの追加

無線ネットワークを使用するため、追加のファームウェアをダウンロードします。

# emerge -a linux-firmware

lspciで自分のPCのハードウェア情報を知りたいので以下のパッケージをダウンロードします。

# emerge -a pciutils

lspciでドライバ名を確認し、この表から該当するものを探します。

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

カーネルにドライバとファームウェアを組み込もうと思うので、カーネルコンフィグ前にファームウェア名を確認しておきます。

# ls /lib/firmware | grep iwlwifi
-----------(省略)------------
iwlwifi-1000-5.ucode

カーネルのビルド

以下のコマンドでカーネルソースを/usr/src/ディレクトリ内にインストールします。

# emerge -a gentoo-sources

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

# cd /usr/src/linux
# make menuconfig

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

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

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

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

ファームウェア名を入力します。

Device Drivers --->
  Generic Driver Options --->
    Firmware loader --->
      -*- Firmware loading facility
      (iwlwifi-1000-5.ucode) Build named firmware blobs into the kernel binary
      make(/lib/firmware) Firmware blobs root directory (NEW) 

カーネルのコンパイルとインストールをしていきます。

# make && make modules_install

最後にカーネルを/bootディレクトリにインストールします。

# make install

initramfsの作成

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

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

/etc/fstabの編集

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

# e2label /dev/sda4 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
/dev/cdrom              /mnt/cdrom      auto            noauto,ro       0 0

ネットワーク関連の設定

ホスト名、ドメイン名等を適当に決めます。

# vi /etc/conf.d/hostname
hostname="zukenux"
# vi /etc/conf.d/net
dns_domain_lo="local.jp"
# vi /etc/hosts
127.0.0.1       zukenux zukenux.local.jp localhost
::1             zukenux zukenux.local.jp localhost

起動時のネットワークの自動設定ができるようにdhcpクライアントをインストールします。

# emerge -a dhcpcd
# rc-update add dhcpcd default

WiFiを使用できるように、ssidやpsk等を入力して以下のように編集します。

# emerge -a wpa_supplicant
# vi /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel

network={
        ssid="YourSSID"
        psk="your-secret-key"
        scan_ssid=1
        proto=RSN
        key_mgmt=WPA-PSK
        group=CCMP TKIP
        pairwise=CCMP TKIP
        priority=5
}

起動時に自動的にWiFi接続できるようにします。

# rc-update add wpa_supplicant default

rootパスワード設定

新しい環境用のrootパスワードを設定します。

# passwd

システムツールのインストール

ログツール、cron、mlocateをインストールしておきます。

# emerge -a sysklogd
# rc-update add sysklogd default
# emerge -a cronie
# rc-update add cronie default
# emerge -a mlocate

sshdの設定

起動時にデフォルトでsshdが起動するように設定します。

# rc-update add sshd default

Grub2のインストール&設定

Grub2のemergeでyesを実行する前に、GRUB_PLATFORMS=”efi-64″が有効になっていることを確認して、emergeを実行します。

# emerge -a grub:2

以下のコマンドでGrubをインストールします。

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

grub-mkconfigコマンドで/boot/grub/brub.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

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

# ping -c 3 google.com

いらなくなったtarファイルを削除しておきます。

# rm /stage3-amd64-20201206T214503Z.tar.xz 

一般ユーザの作成

普段の作業のために一般ユーザを作成しておきます。

# useradd -G wheel -s /bin/bash suzuken
# passwd

sudoのインストール

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

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

xorgのインストール

PCのグラフィックボード(ビデオカード)をlscpiで調べます。

$ lspci
------------(省略)-------------
00:02.0 VGA compatible controller: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09)

make.confファイルのグラフィックドライバにintelを設定しておきます。

$ sudo vi /etc/portage/make.conf
VIDEO_CARDS="intel"  #追記

軽量を重視したいので、xorg-x11ではなくxorg-serverパッケージをインストールします。

$ sudo emerge -a xorg-server

Xfceのインストール

Xfceのメタパッケージ(Xfce関連パッケージの集合をインストールするためのパッケージ)をインストールします。

$ sudo emerge -a xfce4-meta

Gentoo Wikiでオススメされているターミナルをインストールします。

$ sudo emerge -a xfce4-terminal

システムの環境設定を更新します。

$ sudo env-update && source /etc/profile

Xfceの起動

~/.xinitrcを編集し、startxで起動します。

$ vi ~/.xinitrc
exec startxfce4
$ startx

最後に

以上、GentooInstallBattleでした。インストールを無事に行うことができ、まだまだひよっこレベルですが少しは理解深まったかなと感じています。

実際にしばらくGentooを使ってみてから気づくことがたくさんあると思うので、インストールはおやすみして、カスタマイズに力を入れていこうと思います。

Comments

Copied title and URL