Safie Engineers' Blog!

Safieのエンジニアが書くブログです

Archlinux install RTA

こんにちは、セーフィーでサーバーサイドの開発をしてる金成です。 今回は、ArchlinuxのインストールRTAを行ってみたいと思います。 Archlinuxと会社の業務とはほぼ関係ありませんが、やってみて色々勉強になったので共有させてください。

Archlinuxとは何か

Archlinuxとは、Linuxディストリビューションのうちの一つです。 そもそもLinuxディストリビューションとは、OSの中核となるカーネルとその他のソフトウェア群を一つにまとめ、インストール・利用しやすくしたものです。 概ねLinuxディストリビューションにはパッケージマネージャー(apt, yum や dnfなど)も同梱され、ソフトウェアの維持管理がしやすいようになっています。 有名なディストリビューションは、ubuntuなどDebianを祖とするものやFedoraやcentOSなど Red Hat Linuxの系譜をひくものがあります。それ以外だと、OpenSUSEなどのslakwareの系譜のディストリビューションやGentoo Linuxなど変わったものも存在します。普段の開発では、ubuntuやcentOSなどにお世話になることが多いかもしれません。 今回利用するArchlinuxは、Debian系やRedHat系のどちらにも属さず、商用に利用されることはほとんどないOSです。 個人のデスクトップPC用に使う、自宅サーバーに使うなどが主な用途です。 自分で調べて解決できるユーザーをターゲットとしたOSのため、ユーザーフレンドリーでなく(GUIもデフォルトだとない)決して扱いやすいものではありませんが、 軽量で不必要なものの入っていないためカスタマイズ性が高く、好きなだけイジることができるため、自分好みのPCを組むことができるOSとなってます。 *1

Archlinux install RTA

Archlinux Install RTAは、Archlinuxをライブ起動してからインストールし、各種設定を完了するまでの時間を競うバトルです。 先程書いた通り、Archlinuxは軽量なOSのため、インストールした時点ではほぼほぼ何も設定されいません。ディスクのパーティショニング、時刻の設定、ルートユーザーの作成 など一通りの初期設定をインストール時に行う必要があります。USBに焼いたisoファイルで起動して、各初期設定を終えてリブートするまでの時間を競うのが今回やることです。 今までネット上でゲリラ的に開催されていますが、決まったルールはないので、今回はこちらでルールを決めて行いたいと思います。 *2

レギュレーションについて

実機へのインストールだと、マシンごとの差が大きいため、仮想環境を使います。 Virtual Boxは筆者の使用してるPCだと起動できないので、今回はUTMを利用します。 レギュレーションは以下の通りです。

  • 起動モードはUEFIモード
  • インターネットへは接続できる状態にある
  • partionは、ESPとルートの二つを作成する
  • ローカルタイムの設定をする
  • 言語設定をする
  • /etc/hostnameはセットする
  • bootloaderは何を使っても良い(今回は、systemd-bootを使う)
  • live起動で、ターミナルが入力できるようになったらタイマースタート
  • 再起動し、uname -r の表示がされたらタイマーストップ
  • 仮想環境のUTMを使う
  • utmの設定は、x86_64 アーキテクチャ、メモリ4Mib, ストレージ64GB, コア数2, システムStandard PC (Q35 + ICH9 2009) とする

Archlinuxのインストール手順について

Archlinuxのインストール手順については公式サイトのものを利用します。 始める前に、今回のインストール手順について解説していきます。なお、Archlinuxのインストールメディアはすでに準備してあるものとします。 以下コマンドをうち、実行完了するまでを競います

1. 起動モードの確認

UEFI変数(OSとファームウェアが情報を交換するために定義された変数)を、efivarsディレクトリを表示することで確認します。

ls /sys/firmware/efi/efivars  # 起動モードの確認。正しく表示されればUEFIモード
2. インターネットへの接続

ネットワークインターフェースの有効化の確認と、ping での接続確認を行います

ip link
ping -c 3 archlinux.jp
3. システムクロックの更新

ライブ環境では、インターネットの接続が確立されると時刻が同期されます。 下記のコマンドで現在の設定を確認します

timedatectl status
4. パーティションを作成

パーティショニングとは、ストレージデバイス(HDDやSSDなどの記録装置)を分割することを指します。論理的に分割された領域をパーティションといいいます。 これにより、1のハードディスクに複数のファイルシステムをもつことや用途別にパーティション作成することが可能になります。 パーティションの情報を格納するパーティションテーブルには、GPTとMBRの二つがありますが、今回はGPTを使用します Archlinuxでは、インストールに以下のパーティションが必要になります

  • ルートディレクトリ / のパーティション
  • EFIシステムパーティション (OSの起動やブートローダーの管理に利用)

今回はpartedコマンドで、0%-551MibをEFIシステムパーティション用に、残りをルートディレクリのパーティション用に分割します。

parted /dev/sda # インタラクティブモードでpartedを実行
(parted) mklabel gpt # PTにGPTを指定
(parted) mkpart ESP fat32 0% 551Mib # EFIシステムパーティションを作成
(parted) set 1 esp on # パーティションを起動可能に
(parted) mkpart primary ext4 551Mib 100% # ルートディレクトリのパーティションを作成
(parted) q
5. パーティションをフォーマットする

作成したパーティションは、適切なファイルシステムでフォーマットされる必要があります。 下記のコマンドで作成したファイルシステムをフォーマットします。

mkfs.fat -F 32 /dev/sda1 # EFIシステムパーティションのフォーマット
mkfs.ext4 /dev/sda2 # ルートディレクトリのパーティションのフォーマット
6. ファイルシステムのマウント

マウントとは、OSにストレージやパーティションにあるファイルシステムを認識させ、アクセス可能にすることを指します。 下記のコマンドで、EFIシステムパーティション・ルートディレクトリのパーティションのファイルシステムを認識させ、アクセス可能にします

mount /dev/sda2 /mnt # ルートディレクトリ
mount --mkdir /dev/sda1 /mnt/boot # EFIシステムパーティション
7. 必須パッケージのインストール

baseパッケージ、カーネル、ファームウェアのインストールをします. このコマンドでは、テキストエディタやネットワークを設定するソフトウェア(ネットワークマネージャー etc) のインストールは含まれていません。 場合によっては、インストール後にインターネットに接続できない状態になる可能性があります。通常であれば、エディタやネットワークマネージャーもインストールすることをお勧めします。

pacstrap -K /mnt base linux linux-firmware
8. fstabの生成

fstabファイルとは、パーティションやブロックデバイスをどうやってファイルシステムにマウントするかを記述したファイルです。 下記のコマンドでfstabを生成します。

genfstab -U /mnt >> /mnt/etc/fstab
9. chrootする

新しくインストールしたシステムにchrootします

arch-chroot /mnt
10. タイムゾーンの設定

下記のコマンドでタイムゾーンを設定します。今回は Asia/Tokyo にします また、ハードウェアクロックをシステムの現在時刻に設定します

ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
hwclock --systohc
11. ローカリゼーション

en_US.UTF-8 のロケールの生成、環境変数の設定をします

sed -i -e "171 s/^#//" /etc/locale.gen # 171行目に#en_US.UTF-8があるので、先頭の#を削除
locale-gen
echo LANG=en_US.UTF-8 > /etc/locale.conf
12. ホスト名の設定

ホスト名とは、ネットワーク上でマシンを識別するために作られる名前です 基本的に好きな名前を使って大丈夫です 今回は入力速度を考慮して、safieとします

echo safie > /etc/hostname
13. ルートパスワードの設定

パスワードを設定します

passwd
14. ブートローダーのインストール、設定

ブートローダーとはパソコンの起動時に呼び出されるプログラムで、ストレージからOSを呼び出して起動するものです。 今回は、systemd-bootがbaseパッケージとともにインストールされるため、こちらを利用します。 下記のコマンドで、EFIブートマネージャーのインストール、設定を行います。

bootctl install # bootloaderのインストール
cat << EOF > /boot/loader/loader.conf # 設定ファイルの作成.
default arch 
timeout 0 
editor no
EOF
cat << EOF > /boot/loader/entries/arch.conf # ローダーの追加
title archlinux
linux /vmlinuz-linux
initrd /initramfs-linux.img
options root=UUID=$(blkid -s UUID -o value /dev/sda2) rw
EOF
15. 再起動

exitで、chroot環境から抜けて、再起動します。任意ですが、アンマウントも実行します

exit # live環境に戻る
umount -R /mnt # アンマウント
poweroff # シャットダウン. 

停止後、インストールメディアを取り除きUTMで再起動。 rootユーザーでログインし、uname でカーネルのバージョンを表示したところでタイマーストップで す。

uname -r

今回実行するコマンドのまとめ

ls /sys/firmware/efi/efivars  # 起動モードの確認。正しく表示されればUEFIモード
ip link # ネットワークインターフェースの状態を確認
ping -c 3 archlinux.jp # archlinux.jpとの疎通確認
timedatectl status # 時刻確認
parted /dev/sda # パーティション作成
(parted) mklabel gpt
(parted) mkpart ESP fat32 0% 551Mib 
(parted) set 1 esp on
(parted) mkpart primary ext4 551Mib 100%
(parted) q
mkfs.fat -F 32 /dev/sda1 # フォーマット
mkfs.ext4 /dev/sda2
mount /dev/sda2 /mnt # マウント
mount --mkdir /dev/sda1 /mnt/boot
pacstrap -K /mnt base linux linux-firmware
genfstab -U /mnt >> /mnt/etc/fstab
arch-chroot /mnt
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
hwclock --systohc
sed -i -e "171 s/^#//" /etc/locale.gen
locale-gen
echo LANG=en_US.UTF-8 > /etc/locale.conf
echo safie > /etc/hostname # 入力速度を考慮してsafieに
passwd
bootctl install # bootloaderのインストール
cat << EOF > /boot/loader/loader.conf # 設定ファイルの作成。起動時にarch.confを見るように
default arch
timeout 0
editor no
EOF
cat << EOF > /boot/loader/entries/arch.conf # ローダーエントリの追加
title archlinux
linux /vmlinuz-linux
initrd /initramfs-linux.img
options root=UUID=$(blkid -s UUID -o value /dev/sda2) rw
EOF
exit
umount -R /mnt # マウントを解除
poweroff # 電源を切る
# utmでCD/DVDを消去し起動
# rootでログイン
uname -r # 表示されたらタイマーストップ

記録

記録は、11:07.19 でした

完走した感想

完走した感想ですが、キーボードの入力速度とコマンドをどれだけ記憶してるかが勝負を分つと思います。 OSのインストールに関わるコマンドやツールを色々と知ることができたので楽しかったです。 ちなみに、このレギュレーションでやってる人はいなかったので私が世界一です(N=1)。皆さんの挑戦をお待ちしております。

最後になりますが、セーフィーではエンジニアを積極的に募集しています。気になる方はこちらをご覧ください! https://safie.co.jp/teams/engineering/ カジュアル面談から受け付けておりますので、気軽に応募いただければと思います! 最後までお読みいただき、ありがとうございました。

参考

*1:ただ、archlinuxのwikiは説明が充実しており、わかりやすいです。

*2:インストールのスピードを競う必要性は全くありません。

© Safie Inc.