2
0

More than 1 year has passed since last update.

Gentoo RTA

Posted at

はじめに

Gentoo Linuxをどれだけ早くインストールできるか気になったのでタイムアタックをしてみます。いわゆるGentoo Install Battleです。

条件

  1. ハードウェア制限なし
  2. インストール先は、VirtualBox上の仮想環境
  3. VirtualBoxは設定済みとし、起動したらMinimal Installation CDが読み出される状態
  4. stage3はホストにダウンロード済み
  5. 自動化するための自前スクリプトの事前用意は禁止
    (すべてのコマンドを自力でタイプする。ただしシェルが持つ機能、タブ保管やワンライナーなどは可)
  6. タイムは起動ボタンを押してから、ログイン後のuname表示まで

VirtualBoxの設定

Screenshot_20220807_172931.png

ホストからゲストへsshでアクセスできるようにポートフォワーディングルールを追加しておきます。

Screenshot_20220807_174936.png

インストールの流れ

インストールに必要な手順はGentoo Handbookに沿っていますが、最低限のコマンドだけ行います。

大まかな流れは下の通りです。

  1. ディスクパーティションの準備
  2. Stage3の展開
  3. 環境設定
  4. Linux kernelの構築
  5. ブートローダーのインストール

それでは、さっそくスタート

本編

起動ボタンを押したらタイマースタートします。

ディスクパーティションの準備

まず、シェルが起動したらディスクパーティションを準備します。
UEFIでブートできるようにGPT上に各パーティション(EFI、rootfs)を作成します。

※swapは省略しています
※EFIパーティションは、bootパーティションも兼ねさせています

livecd ~ # fdisk /dev/sda
コマンド (m でヘルプ): g
コマンド (m でヘルプ): n
パーティション番号 (1-128, 既定値 1): 
最初のセクタ (2048-16777182, 既定値 2048): 
最終セクタ, +/-セクタ番号 または +/-サイズ{K,M,G,T,P} (2048-16777182, 既定値 16777182): +256M
コマンド (m でヘルプ): t
パーティションのタイプ または別名(L で利用可能なタイプを一覧表示します): 1
コマンド (m でヘルプ): n
パーティション番号 (2-128, 既定値 2): 
最初のセクタ (526336-16777182, 既定値 526336): 
最終セクタ, +/-セクタ番号 または +/-サイズ{K,M,G,T,P} (526336-16777182, 既定値 16777182): 
コマンド (m でヘルプ): w

フォーマット

livecd ~ # mkfs.vfat -F 32 /dev/sda1
livecd ~ # mkfs.ext4 /dev/sda2

rootfsパーティションをマウント

livecd ~ # mount /dev/sda2 /mnt/gentoo
livecd ~ # cd /mnt/gentoo

Stage3の展開

あらかじめホストでダウンロードしておいたstarge3をsshでゲストへ送りつけます。

sshを有効

livecd /mnt/gentoo # echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config
livecd /mnt/gentoo # /etc/init.d/sshd start
livecd /mnt/gentoo # passwd
Enter new password: p@ssW0rd
Re-type new password: p@ssW0rd

ホストからゲストへstage3を送信

host $ scp -P 2222 stage3-*.tar.xz root@localhost:/mnt/gentoo

stage3を展開

livecd /mnt/gentoo # tar xpf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner

環境設定

nameserver
chroot後、名前解決ができるようにコピーします。

livecd /mnt/gentoo # cp -L /etc/resolv.conf etc/

device

livecd /mnt/gentoo # mount --types proc /proc proc
livecd /mnt/gentoo # for n in sys dev run; do mount --rbind /$n $n; mount --make-rslave $n; done

chroot

livecd /mnt/gentoo # chroot . /bin/bash
livecd / # source /etc/profile

mount

livecd / # mount /dev/sda1 /boot

password
これを忘れて再起動後ログインできず、よくはまります。

livecd / # passwd
Enter new password: p@ssW0rd
Re-type new password: p@ssW0rd

Portage
回線状況が悪いと時間がかかる運ゲーポイントです。

livecd / # emerge-websync

後のkernel構築用に環境変数を設定しておきます。

livecd / # echo "ACCEPT_LICENSE=@BINARY-REDISTRIBUTABLE" >> /etc/portage/make.conf
livecd / # echo "MAKEOPTS=-j8" >> /etc/portage/make.conf

fstab

livecd / # echo "/dev/sda1 /boot vfat defaults 0 2" >> /etc/fstab 
livecd / # echo "/dev/sda2 / ext4 noatime 0 0" >> /etc/fstab 

Linux kernelの構築

livecd / # emerge sys-kernel/gentoo-sources
livecd / # eselect kernel set 1
livecd / # cd /usr/src/linux
livecd /usr/src/linux # make menuconfig

デフォルトの状態から必要最小限の設定だけ行います。
※不要な構成を外すことで、さらに最適化が可能

Gentoo Linux --->
  Generic Driver Options --->
        Support for init systems, system and service managers  --->
          [ ] OpenRC, runit and other script based systems and managers
          [*] systemd
Device Drivers  --->
 Graphics support  --->
   Frame buffer Devices --->
    <*> Support for frame buffer devices --->
     [*] EFI-based Framebuffer support

kernelをビルド&インストールします。
(ハードスペックにモノを言わせる見せ場)

livecd /usr/src/linux # make -j8 && make modules_install && make install

アプリケーション(オプション)

再起動後、ネットワークへ接続したい場合にインストールします。

livecd /usr/src/linux # emerge net-misc/dhcpcd

ブートローダーのインストール

GRUBをインストールします。

livecd /usr/src/linux # echo 'GRUB_PLATFORMS="efi-64"' >> /etc/portage/make.conf 
livecd /usr/src/linux # emerge sys-boot/grub
livecd /usr/src/linux # grub-install --target=x86_64-efi --efi-directory=/boot
livecd /usr/src/linux # grub-mkconfig -o /boot/grub/grub.cfg

再起動

livecd /usr/src/linux # exit
livecd /mnt/gentoo # cd
livecd ~ # umount -l /mnt/gentoo/dev{/shm,/pts,}
livecd ~ # umount -R /mnt/gentoo/
livecd ~ # reboot

ゴール

localhost login: root
Password: p@ssW0rd
localhost ~ # uname -r
5.15.59-gentoo

ここでタイマーストップ、15分43秒でした。

あとがき

完走した感想ですが、今回はkernelをほぼデフォルトでビルドしてますが、再起動後にkernelを読み出されてから2秒程度でログイン画面が表示されるので、こんなにも早く起動できるのかと驚きました。また、chrootした後にpasswdをし忘れて再起動後ログインできなかったり、kernelのビルド時にEFI-based Framebuffer supportが有効になっておらず、再起動後に固まったりしてよく詰むので注意が必要でした。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0