IT技術で仕事を減らしたい!

ITエンジニアのメモ+α

Gentoo Linuxのインストール

どうも、NIPPAです。

Linux修行として、Gentoo Linuxをインストールしてみます。
Virtual Boxにデュアルブート可能なインストール方法です。

Gentoo wikiを参考にしています。

f:id:NIPPA:20200116164909p:plain
Gentoo Linux

前提

今回は、MacOSVirtualBoxをインストールして、MacOS上のVirtual machine(VM)にGentoo Linuxをインストールします。

インストール環境など

1. 事前準備

1.1 VirtualBoxのインストール

VirtualBoxの公式サイトから、MacOS用のdmg(disk image file)をダウンロードし、インストールする。

MacOS 10.13以上だと、「システム環境設定」→「セキュリティ&プライバシー」→下の段の「VitualBox」を許可しないとインストールが失敗する。

1.2 Gentooのディスクイメージのダウンロード

Gentooの公式サイトから、Live environmentsをダウンロードする。

今回は、64bit OSを使いたいので、amd64/x86_64のMinimal Installation CDを使用する。

2. VMの設定

今回は、最小スペックで作成する。VMなので、後ほど変更もできる。

構成

  • CPU: 1 CPU

  • Memory size(RAM): 1024 MB

  • Disk: 8GB (VDI/Dynamically allocated)

DiskはVirtual Disk imageで動的な割当で作成。変更しない場合は、固定(fixed)でも良い。

3. VMGentooのLive CDをアタッチして、起動

3.1 VMGentooのLive CDをアタッチ

インストールするVMを選択し、

Storage-> Controller:IDE IDE secondary Master -> [Optical Drive]

をから、ダンロードしたGentoo live CDをアタッチする。

f:id:NIPPA:20200113145946p:plain
VMにDiskをアタッチ

3.2 Boot Orderの設定

インストールするVMを選択し、

System -> Boot Order

OpticalHard Diskの順に設定する。

3.3 VMの起動

インストールするVMを選択し、ツールバーもしくは右クリックのメニューからNormal Startを選択して起動する。 BIOS画面でBootを聞かれるので、EnterでOptical DiskからOSの起動をする。

起動時に、キーボードの

f:id:NIPPA:20200113151854p:plain
Gentoo Live CD起動画面

4. Gentoo Linuxのインストール

4.1 ネットワーク接続設定

基本的にはネットワークデバイスをLive CDから読み込むので、自動でネットワーク接続がされている。

ネットワークの接続確認(接続先はpingが通ればどこでもOK)

ping -c 3 www.gentoo.org

接続できない場合は、公式Wikiを参考に。

4.2 Diskの作成

今回のGPT(GUID Partition Table)構成は以下の通り。

Partition File system size 説明
/dev/sda1 ブートローダ 2MiB BIOSブートパーティション
/dev/sda2 fat32 256MiB EFIシステムパーティション
/dev/sda3 swap 512MiB スワップパーティション
/dev/sda4 ext4 残りのディスク ルートパーティション

fat32の最小は256MiBサイズであることに注意

まず、パーティションを作成するディスクの確認をする。

# fdisk -l

sdaが8GiBのディスクなので、sdaパーティションを作成する。

f:id:NIPPA:20200113163624p:plain
ディスクの確認

partedコマンドでパーティションの作成をする。

# parted -a optimal /dev/sda

パーティションテーブルの名前をつける。

(parted) mklabel gpt

unitの設定をする。

(parted) unit mib

4.2.1 BIOSブートパーティションの作成

(parted) mkpart primary 1 3   # 1から3MiBをパーティションに区切る
(parted) name 1 grub              # パーティション1の名前をつける
(parted) set 1 bios_grub on    # BIOSブートパーティションに設定する
(parted) print                           # 作成したパーティションの確認

4.2.2 ブートパーティションの作成

(parted) mkpart primary 3 259
(parted) name 2 boot
(parted) print

4.2.3 スワップパーティションの作成

(parted) mkpart primary 259 771
(parted) name 3 swap
(parted) print

4.2.4 ルートパーティションの作成

(parted) mkpart primary 771 -1
(parted) name 4 rootfs
(parted) print

4.2.5 EFIシステムの設定

ブートパーティションEFIシステムパーティションとして設定する。

(parted) set 2 boot on

最終的に以下のようになる。

(parted) print
Model: ATA Block Device (scsi)
Disk /dev/sda: 8192MiB
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     771MiB   512MiB                swap
 4       771MiB     2000MiB 19.4GiB              rootfs

5. ファイルシステムの作成

BIOSブートパーティションは空領域である必要があります。なので、/dev/sda1はフォーマットしません。

# mkfs.vfat -F32 /dev/sda2
# mkfs.ext4 /dev/sda4

6. スワップパーティションの有効化

スワップ領域を初期化する。

# mkswap /dev/sda3

スワップを有効化する。

# swapon /dev/sda3

7. パーティションのマウント

7.1 ルートパーティションのマウント

# mount /dev/sda4 /mnt/gentoo

7.2 espパーティション(ブートパーティション)のマウント

場所を間違えないように注意してください。

# mkdir /mnt/gentoo/boot
# mount /dev/sda2 /mnt/gentoo/boot

8 日時の設定

日時が大幅にずれていると、ファイルをダウンロードできない。

日時の確認

# date

日時の手動設定

# date [MMDDhhmmYYYY]

または

# date --set "YYYY-MM-DD hh:mm:ss"

9. stage tarballのインストール

# cd /mnt/gentoo
# links https://www.gentoo.org/downloads/mirrors/

download -> adm64 -> stage fileをダウンロードする。

f:id:NIPPA:20200113174411p:plain
links:https://www.gentoo.org/downloads/mirrors/

または、

# wget http://distfiles.gentoo.org/releases/amd64/autobuilds/20200112T214502Z/stage3-amd64-20200112T214502Z.tar.xz

でダウンロードする。

ダウンロードしたstage tarballファイルを検証する。

# openssl dgst -r -sha512 stage3-amd64-20200112T214502Z.tar.xz

stage tarballファイルを展開する。

# tar xpvf stage3-amd64-20200112T214502Z.tar.xz --xattrs-include='*.*' --numeric-owner

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

make.confを設定する。

# nano /mnt/gentoo/etc/portage/make.conf
# すべての言語において設定するコンパイラフラグ
COMMON_FLAGS="-march=native -O2 -pipe"
# 同じ設定を両方の変数に使用
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"

# makeのオプションを必要に応じてつける。CPU+1を推奨。
MAKEOPTS="-j2"

11 Gentooベースシステムの設定

11.1 chrootする

mirrorselectでミラーを選択する。

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

# cat /mnt/gentoo/etc/portage/make.conf

手動で設定する場合は、make.conf内にGENTOO_MIRRORS変数の設定にmirrorのURLを与えてば良い。

GENTOO_MIRRORS="[mirror URL]"

11.2 Gentoo ebuild リポジトリの設定

ebuildリポジトリディレクトリを作成する。

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

Gentooリポジトリ設定ファイルをコピーする。

# cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf
# 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-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

11.3 DNS 情報のコピー

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

11.4 必要なファイルシステムのマウント

# mount --types proc /proc /mnt/gentoo/proc
# mount --rbind /sys /mnt/gentoo/sys
# mount --rbind /dev /mnt/gentoo/dev

# mount --make-rslave /mnt/gentoo/sys
# mount --make-rslave /mnt/gentoo/dev

systemdを使う場合、--make-rslaveが必要。

11.5 新しい環境へchroot

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

11.6 ブートパーティションのマウント

# mount /dev/sda2 /boot

すでにマウントしてある場合は、スキップ。

11.7 Portageのインストール

# emerge-webrsync

「/var/db/repos/gentoo/がない」エラーは無視する。

11.8 Gentoo ebuildリポジトリの更新

emerge-webrsyncコマンドはほぼ最新の(通常は24時間以内に作成される)スナップショットをインストールしているので、任意。

# emerge --sync

11.9 プロファイルの選択

# eselect profile list

ここでは、default/linux/amd64/17.1 (stable)を選択した。

11.10 USE変数の設定

USE変数の確認。

# emerge --info | grep ^USE

USEフラグの詳細は/var/db/repos/gentoo/profiles/use.descを確認。

nano /etc/portage/make.conf

にUSEフラグを設定する。後ほど変更も可能。

USE="x gtk git curl networkmanager kde vim zip zlib"

11.11 タイムゾーンの設定

タイムゾーンの確認する。

# ls /usr/share/zoneinfo/

タイムゾーンJapanに設定する。

# echo "Japan" > /etc/timezone
# emerge --config sys-libs/timezone-data

11.12 ロケールの設定

# nano /etc/locale.gen

ここでは、/etc/locale.gen

en_US.UTF-8 UTF-8
jp_JP.UTF-8 UTF-8

を記載。ロケールを生成し、設定・反映する。

# locale-gen
# eselect locale list
# eselect locale set [番号]
# env-update && source /etc/profile && export PS1="(chroot) ${PS1}"

11.13 カーネルソースのインストール

カーネルソースを/usr/src/にインストールする。ソースの確認。

# emerge --ask sys-kernel/gentoo-sources
# ls -l /usr/src/linux

11.14 カーネルのビルド

# emerge gentoo-sources
# cd /usr/src/linux
# make menuconfig
# make && make modules_install
# make install

lspciコマンドでハードウェア情報を確認して、menuconfigカーネルのconfigurationを決める。 設定はgentoo公式wikiも参考にしてください。

11.15 fstabの編集

# nano -w /etc/fstab

ここでは以下を追記した。

/dev/sda2   /boot        ext2    defaults,noatime     0 2
/dev/sda3   none         swap    sw                   0 0
/dev/sda4   /            ext4    noatime              0 1

11.16 ホスト名の設定

/etc/conf.d/netを作成して、ホスト名を記載する。

dns_domain_lo="[Host Name]"

11.17 ネットワークの設定

DHCPの設定をするために、現在のネットワークをifconfigで確認をする。 /etc/conf.d/netにinterface名ごとに記載する。 以下、一例。

config_eth0="dhcp"

DHCPクライアントのインストール。

# emerge --ask net-misc/dhcpcd

指定IPを利用する場合は、以下のように設定する。

config_enp0s3="192.168.0.2 netmask 255.255.255.0 brd 192.168.0.255"
routes_enp0s3="default via 192.168.0.1"

ネットワークを起動時に自動設定するために、以下を行う。

# cd /etc/init.d
# ln -s net.lo net.eth0
# rc-update add net.eth0 default

11.18 クロック設定

UTC以外の時間設定の場合、/etc/conf.d/hwclockに以下に変更する。

clock="local"

11.19 ランレベルの設定

systemlogger

# emerge --ask app-admin/sysklogd
# rc-update add sysklogd default

cron

# emerge --ask sys-process/cronie
# rc-update add cronie default

ssh

# rc-update add sshd default

11.20 rootユーザのパスワードの設定

passwd

11.21 ブートローダーの設定

UEFIを使用するため、/etc/portage/make.confに設定を追加する。

# echo 'GRUB_PLATFORMS="efi-64"' >> /etc/portage/make.conf

ブートローダーを取得する。

# emerge --ask --newuse --deep sys-boot/grub:2

間違えて、make.confを編集する前にブートローダーを取得してしまった場合は、

# emerge --ask --update --newuse --verbose sys-boot/grub:2

でアップデートする。

インストール

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

Grub2の設定ファイルの作成

# grub-mkconfig -o /boot/grub/grub.cfg

11.22 システムのリブート

# exit
lived ~# cd 
lived ~# umount -l /mnt/gentoo/dev
lived ~# umount -R /mnt/gentoo
lived ~# reboot

11.23 VirtualBoxEFIの有効化

Enable EFIにチェックを入れる。

f:id:NIPPA:20200116164754p:plain
Enable EFI

12. 最後に

これでGentoo Linuxのインストールが完了です。

勉強することが多かったですが、インストールできました。

次は、このOSを使って、ラズパイ用ディスクを作成してみたいと思います。

ではでは、また次回。