Arch Linux インストールの流れ
追記!!!
この記事は古いので,現在はこの内容に従っても正しくインストールできません!!
今はこちらを参照してください!
zenn.dev
BIOS/MBRとUEFI/GPTのうち、より優れたUEFI/GPTを使う。
全体の流れ
1. インストール作業のための一時的な設定
2. パーティション分け
3. Linux自体のインストール
(chroot)
4. 今後使う上で必要な設定
5. 次回起動時のブートローダのインストールと設定
(exit)
6. 再起動
7. 諸設定
Arch Linuxのインストールメディアは牛肉屋を営む牛のようなものである。牛が仕入れて客に提供するのは牛肉だが、牛が自らを捌いて売るわけではない。同様に、Arch Linuxのインストールメディアはインターネット上からArch Linuxをダウンロードしてコンピュータにインストールするが、インストールメディアの中のArch Linuxがコピーされるわけではない。また、ユーザーは初めのうちは売る方の牛に指示を出すが、途中からは売られた方の牛を調理するようになる。この切り替えがchrootである。
インストール作業の中でテキストエディタviが登場する。慣れないうちは操作が大変なのでnanoを代わりに使ってもよい。ただ今後のためにviを使うことを推奨する。
以上のことを押さえた上でインストール作業に取り掛かる。
インストールメディアの入ったUSBメモリーを刺し、有線でインターネットに繋ぎ、PCの電源ボタンを押して即座にF2、Boot List Optionで[UEFI]、Boot Option #1で[UEFI: (USBメモリの名前)]を選択、Save Changes and Reset。表示される選択肢の中からArch Linux archiso x86_64 UEFI USBを選択して起動、Welcome to Arch Linux! に続いてコンソールに文字が流れる。
tty1でroot自動ログインが行われ、入力を受け付ける状態になる。
archiso login: root (automatic login) root@archiso ~ # _
1. インストール作業のための一時的な設定
Dvorakユーザなのでloadkeysを使って切り替える。
# loadkeys dvorak-programmer.map
UEFIブートであることを確認する。
# ls /sys/firmware/efi
pingを使ってインターネット接続を一応確認する。
# ping -c3 www.google.com
2. パーティション分け
ディスク/dev/sdaのパーティションを決める。UEFIなのでgdiskまたはcgdiskを使う。私はどちらかというと対話型のgdiskの方が使いやすいように感じた。/dev/sdaはコマンドライン引数と標準入力のどちらでも指定できる。
# gdisk /dev/sda
コマンド入力を受け付けるようになる。
oで新しいパーティションテーブルを作成し、ここにパーティションを書いてゆく。
Command (? for help): o This option deletes all partitions and creates a new protective MBR. Proceed? (Y/N): Y
UEFIの場合まず/boot用のEFI System パーティション(ESP)を作る必要がある。Hex CodeとしてEF00を指定することでLinux filesystemではなくEFI systemとし、512M用意する。デフォルトのままのところは何も打たずにエンターを押せば良い。
Command (? for help): n Partition number (1-128, default 1): First sector (〜) or {+-}size{KMGTP}: Last sector (〜) or {+-}size{KMGTP}: +512M Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): EF00 Changed type of partition to 'EFI System'
残りはすべて/用のrootパーティションとした。
Command (? for help): n Partition number (1-128, default 2): First sector (〜) or {+-}size{KMGTP}: Last sector (〜) or {+-}size{KMGTP}: Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): Changed type of partition to 'Linux filesystem'
メモリが1GB以下だとswapも作ることが多いが、幸い4GB(十分!)もあったので作らなかった。swapを作るとしたらHex codeは8200になる。
そしてwriteで作成したパーティションテーブルをハードディスクに書き込む。
Command (? for help): w Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! Do you want to proceed? (Y/N): Y
これで/dev/sda1(後の/boot)、/dev/sda2(後の/)の2つのパーティションが作られた。
ESPはF32でフォーマットする。
# mkfs.vfat -F32 /dev/sda1
他はext4でフォーマットする。
# mkfs.ext4 /dev/sda2
swapを作るならここでmkswap /dev/sdaXとswapon /dev/sdaXを行う。
/dev/sda2(後の/)を/mnt自体にマウントする。
# mount /dev/sda2 /mnt
/dev/sda1(後の/boot)は/mnt/bootを作ってマウントする。
# mkdir /mnt/boot # mount /dev/sda1 /mnt/boot
3. Linux自体のインストール
viを起動してミラーリスト(どのサーバーから優先的に落とすか)を設定する。
# vi /etc/pacman.d/mirrorlist
日本在住の場合Japanを検索して一番上に持ってくる。キーボード操作としては「/Japan(エンター)」で検索、「2dd{p」でコピー&ペースト、「n」と「N」で次を検索&前を検索、終わったら「:wq(エンター)」で保存&終了。
pacstrapでLinuxをインストールする。
$ pacstrap -i /mnt base base-devel
エンターを押し続け、言われたものを全てインストールする。
fstabを生成する。
genfstab /mnt >> /mnt/etc/fstab
次回起動時に/mntが/、/mnt/bootが/bootになる。ここでfstabが書き込まれた/mnt/etc/fstabを確認する(cat /mnt/etc/fstab)と、/dev/sda2がext4で/に、/dev/sda1がvfatで/bootになるという趣旨の表があるはずだ。genfstabに-Uオプションを付けていると左の列がUUID=(数字とアルファベットの羅列)になる。
肉屋で牛肉を買い終えた。このあとは肉屋を出て、受け取った牛を調理する。
# arch-chroot /mnt
家に帰って牛肉を調理台に置いた。
4. 今後使う上で必要な設定
viで/etc/locale.genを開く。
# vi /etc/locale.gen
「/en_US」などとして「n」「N」を使いながら「# en_US.UTF-8 UTF-8」と書かれた行を探し、「0x」でコメントアウト。同様に「/ja_JP」などとして「# ja_JP.UTF-8 UTF-8」を探し、「0x」でコメントアウト。「:wq」で保存終了。そして変更を反映。
# locale-gen
locale.confで言語を設定する。
# echo LANG=en_US.UTF-8 > /etc/locale.conf # export LANG=en_US.UTF-8
次回起動時のキーボードレイアウトとフォントを設定する。
# vi /etc/vconsole.conf
「i」で入力を開始、Escで入力を終了。一例:
KEYMAP=dvorak-programmer.map FONT=Lat2-Terminus16
場所の設定。
# ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
時刻の設定。
# hwclock -u -w
ホスト名の設定。
# echo (ホスト名) > /etc/hostname
インターネット接続にはdhcpcdを使う。systemctlコマンドを使い、起動時にdhcpcdが自動でインターネットに接続するようにする。systemctlの後に続けてオプションを指定する:その場で立ち上げるにはstart、その場で止めるにはstopを使い、enable↔disableは起動したときに立ち上がるかどうかを選ぶ。次回起動時に繋がらなかった場合はまたsystemctlを使ってdhcpcdの状態を確認する。
# systemctl enable dhcpcd
パスワードを設定する。
# passwd
5. 次回起動時のブートローダのインストールと設定
Arch Linux自体の設定は完了した。現在Arch Linuxは起動した状態であり、ここからこのOSをずっと起動したままで使い続けることが可能である。いわば暖炉の中で薪が燃えている状態である。あなたはその火を使ってさまざまなことができる。
しかしあなたはまだマッチを持っていない。今燃えている火は、USBメモリのarchisoが点火してくれた火である。暖炉と薪は整ったが、マッチが無いことには火を付けることができない。
マッチとなるのはブートローダである。ブートローダには数種類あるが、今回はsystemd-boot(旧称gummiboot)を使う。インストール。
# bootctl --path=/boot install
この後いくつかの設定を行い、USBを抜いて再起動する。設定に失敗すると次の再起動ができなくなる。その場合は慌てずUSBを挿し直して起動し、/dev/sda1と/dev/sda2のマウントを上と同じように行い、ここからやり直す。
設定するのは/boot/loader/entriesディレクトリと/boot/loader/loader.confファイルの2つである。
まず/boot/loader/entriesに移動する。
# cd /boot/loader/entries
/boot/loader/entriesには起動モードの選択肢1つごとに1つのファイルを拡張子confで作る。arch.conf(普段)とarch-fallback.conf(Fallback、何かあったとき用)の2つを用意する。
ルートパーティション/dev/sda2の固有PARTUUIDを調べる。
# blkid -s PARTUUID -o value /dev/sda2
arch.confを編集して次のようにする。
title Arch Linux linux /vmlinuz-linux initrd /initramfs-linux.img options root=PARTUUID=(PARTUUID) rw
PARTUUIDのところにblkidで調べたPARTUUIDを書く。長い文字列なので、メモするのが面倒ならblkidの最後に> arch.confと付け加えておくとPARTUUIDが表示される代わりにarch.confに出力される。
arch-fallback.confは
title Arch Linux Fallback linux /vmlinuz-linux initrd /initramfs-linux-fallback.img options root=PARTUUID=(PARTUUID) rw
次に、既に存在する/boot/loader/loader.confを編集する。
# cd .. # vi loader.conf
このファイルに一行ずつ設定を書いていく。必ず書かなければならないのは「editor no」の一行である。これを書かないと、「スペースキーを押しながら起動→eを押してinit=/bin/bashを書き加えた状態でArch Linuxを起動→パスワード無しでroot権限が手に入る!ガハハ!」なのでまずい*1。何も書かないとデフォルトでeditor yesになってしまう。
僕は、電源ボタンを押したら即座にArch Linux(fallbackでない方)が選択されて起動するようにした。そのためには「タイムアウト:0」と「デフォルト:Arch Linux」の2つを指定する。タイムアウトの方は何も書かなくても自動で0になる。書くとしたら「timeout 0」。デフォルトのローダは「default (ファイル名)」と書いて指定する。ファイル名のところにはさっき作ったファイル名arch.confの拡張子を除いた部分(つまりarch)を書く。「i」で入力開始、Escで入力終了。
最終的にloader.confの中身は次のようになる:
editor no default arch
「:wq」で保存終了。他の設定例:
editor no timeout 3 default arch
この場合,起動してから3秒間選択肢が表示され、その間に何もしないとArch Linuxが起動する。ここで表示される選択肢をtimeout 0でも表示するには起動時にスペースキーを押す。
6. 再起動
exitしてUSBを抜いて再起動。
# exit # reboot
起動したら
login: root password: (パスワード)
でログイン。
7. 諸設定
ユーザを追加する。
# useradd -m -G wheel (ユーザ名)
作ったユーザのパスワードを設定する。
# passwd (ユーザ名)
sudoersファイルを設定する。
# visudo
# %wheel ALL=(ALL) ALL と書かれた行を探し、コメントアウト。
さらに一度入力したパスワードが一定時間有効なままなのが嫌なので
Defaults timestamp_timeout=0
を追記した。別に構わないならしなくて良い。
そうしたら今作ったユーザでログインし直す。
# exit