恥は/dev/nullへ by 初心者

プログラミング素人がのろのろと学んだことをつづっています♪

Arch Linuxインストールメモ(1)

Arch Linuxで遊ぶために、VirtualBOXにArch Linuxをインストールしてみました。この記事はインストール時に行ったことのメモです。


今回はVirtualBOX仮想マシンにインストールしていますが、気に入ったら実機にインストールすることも視野に入れているので、VirtualBOXにインストールする場合に不要なことも時々行っています。


【文体について】
この記事では、文字数節約のために「0. 事前準備」以降のパートを、「ですます」を省いた口調で記述しています。


参考にしたサイト

(1) Arch Linux インストール
(2) 【入門】猿でもわかるArch Linuxインストール方法 | FascodeNetwork Blog

Arch Linuxのインストールガイドと上記2つのサイトを参考にしてインストール作業を行いました。このうち(1)はとても丁寧に記述してあったので、大変参考になりました。


0. 事前準備

VirtualBOX上にArch Linuxをインストールするための仮想マシンを新規作成しておく。


1. ダウンロード

https://www.archlinux.jp/download/ にミラーサーバーの一覧があるので、「日本のサーバー」に並んでいるリンク先から以下の2つをダウンロードする。

archlinux-2022.11.01-x86_64.iso
sha256sums.txt


sha256sumsをチェックするには、ダウンロードした2つのファイルを同じディレクトリに保存して、以下のコマンドを実行する。

sha256sum -c sha256sums.txt

コマンド実行後に、次の行が表示されていればOK。

archlinux-2022.11.01-x86_64.iso: 完了


2. 仮想マシンを起動

ダウンロードした「archlinux-2022.11.01-x86_64.iso」を仮想マシンのストレージにセットして仮想マシンを起動する。


3. キーボードレイアウトを指定する

デフォルトではキーボードレイアウトがUS配列になっているので、US配列キーボードを使っている場合、やることは無い。

もし日本語配列のキーボードを使用している場合は、次のコマンドを実行する。

loadkeys jp106


4. BIOSで起動しているかUEFIで起動しているか調べる

Arch Linuxのインストールガイドによると、次のコマンドを実行して正常に結果が表示されればUEFIモードで起動している。

ls /sys/firmware/efi/efivars

BIOSモードで起動している場合、「No such file or directory」と表示される。

私の環境で

ls /sys/firmware

としたところ、acpi, dim, nemmapというディレクトリしか無かった(efiというディレクトリが無いのでBIOSモードで起動していることが分かる)。


5. ネットワークインターフェースが認識されているか調べる

無線であれ有線であれ、そもそもPCのネットワークインターフェースがArch Linuxに認識されていないとネット接続できないので、それを以下のコマンドで調べる。

ip link

私の環境では「enp0s3」が認識されていた。


6. ネット接続

有線LANの場合、何もしなくてもネット接続した状態になっているので、やることは無い。 (無線LANで接続するには iwctlを使うらしい)


7. ネットに接続できているか確認する

pingを使ってネットに接続できているか調べる。たとえば、

ping archlinux.jp

を実行して、応答があればネットに接続できている。


8. システムクロックをNTPサーバーと同期する

timedatectl set-ntp true


9. パーティションを作成するデバイスを調べる

VirtualBox仮想マシンにはまだパーティションが無いので、作成する必要がある。lsblk(ブロックデバイスの一覧を表示するコマンド。list blockdevices)を実行する。

lsblk

私の環境では、以下の3つが表示された。

loop0
sda
sr0

この3つのうち、パーティションの作成対象となるのは、TYPEという列が「disk」になっているもの。 「disk」になっているのはsdaだけなので、パーティションを作成する対象はsda(環境によっては、sdb等になっている場合もある)。


参考にしたサイト(1)によると、loop0とsr0はインストールメディアに関連するデバイスとのこと。ちなみに、loop0のTYPEは「loop /run/archiso/airootfs」、sr0のTYPEは「rom」となっていた。


10. パーティションを作成する

先述したとおり、sdaにパーティションを作成する。
sdaは/dev/の直下にある(つまり、/dev/sda)。


以下では、Arch Linuxに割り当てる領域が30GBあり、そのうち2GBをスワップ領域に割り当てるという例で話を進める(ここではスワップ領域を作成しているが、スワップ領域は無くても問題ない)

cfdisk /dev/sda

を実行して、cfdiskを起動する。

まずは、Arch Linuxをインストールするパーティションを作成する。

(1)「New」を選択した状態でEnter押下
(2) Partition size : 28G としてEnter押下
(3)「Primary」を選択した状態でEnter押下
(4)「Bootable」を選択した状態でEnter押下

ここまでで30GBのうち28GBのパーティションができたので、今度は残る2GBをスワップパーティションにする。

この段階で、画面には

/dev/sda1
Free space

の2行がある。カーソルキーを使って「Free space」という行を選択した状態にする。
この領域を次の手順でスワップ領域にする。

(1)「New」を選択した状態でEnter押下
(2) Partition size : 2G としてEnter押下
(3)「Primary」を選択した状態でEnter押下
(4)「Type」を選択した状態でEnter押下
(5)「Linux swap / Solaris」を選択した状態でEnter押下

以上の操作で作成した2つのパーティションを/dev/sdaに書き込む。

「Write」を選択した状態でEnterを押下

この時「Are you sure you want to write the partiotion table to disk?」と聞かれるので

yes

と入力してEnterを押下する。

最後に

「Quit」を選択した状態でEnterを押下

することにより、cfdiskを終了する。
なお、lsblkコマンドを実行すると、sdaの下にsda1とsda2が表示される。この時、sda1とsda2のTYPE列にはパーティションを示す「part」が表示される。


11. パーティションをフォーマットする

まずは/dev/sda1をフォーマットする

mkfs.ext4 /dev/sda1

次にスワップパーティションを作成する。

mkswap /dev/sda2

結果をチェックしたい場合は

lsblk –fs

を実行する。この時、sda1にext4と、sda2にswapと表示されていればOK。

スワップパーティションを有効化する

swapon /dev/sda2


12. ファイルシステムをマウントする

mountコマンドでファイルシステムをマウントする。

mount /dev/sda1 /mnt

BIOSモードでは不要だが、UEFIモードで作業している場合はEFIシステムパーティションもマウントする必要がある。なお、インストールガイドでは、EFI システムパーティションを/mnt/bootにマウントしている。


13. ミラーサーバーの設定

パッケージのダウンロードに使われるミラーサイトは次のファイルに記述されている。

/etc/pacman.d/mirrorlist

このファイルを編集する前にバックアップを取っておく。

cd /etc/pacman.d
cp mirrorlist mirrorlist.bak


次に以下のページで日本のミラーサイトを調べる。 https://www.archlinux.jp/mirrors/status/

このURLを開いたら、次のように表示された。

ミラー URL                                        接続成功率  μ 遅延 (hh:mm)   μ 接続時間 (s) σ 接続時間 (s)  ミラースコア
http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/       100.0%          0:34            0.04            0.10            0.1
http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/     96.7%          2:30            0.00            0.03            2.0
https://ftp.jaist.ac.jp/pub/Linux/ArchLinux/      100.0%          0:34            0.05            0.02            0.1
http://mirrors.cat.net/archlinux/                  95.0%      16270:55            0.09            0.45       15,457.0
https://mirrors.cat.net/archlinux/                 95.0%      16270:55            0.12            0.28       15,456.9

接続成功率とミラースコアを見ると、jaist.ac.jpが一番良さそうで、次に良さそうなのがtsukuba.wide.ad.jp。


/etc/pacman.d/mirrorlistについて、インストールガイドに「上の方に書かれているミラーほど、パッケージのダウンロードで優先されます。(中略)設定したミラーリストが pacstrap によって後のインストール時にコピーされます。そのため、正しく設定しておいた方がよいでしょう」という記述がある。


参考にしたサイト(2)に次のコマンドが記載されていたので、これを実行した。

pacman -Sy wget    (元記事では -Sとなっていたが上手く行かなかったので -Syを使用)  
wget -O /etc/pacman.d/mirrorlist https://0u0.biz/YNhG

この結果、/etc/pacman.d/mirrorlistの中に日本向けミラーサイトが記述された状態になる。


ただし、/etc/pacman.d/mirrorlistの中身は全てコメント行になっているので、「#Server」となっている部分を「Server」にする(行頭の # を除去する)必要がある。


それと、先ほど引用したように、上の方に書かれているミラーほどパッケージのダウンロードで優先されるとのことなので、ファイル内のミラーサイトの順番を変更することにした。


以上の作業を終えた結果、/etc/pacman.d/mirrorlistは次のようになった。

Server = https://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch
Server = http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch
Server = http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/$repo/os/$arch
Server = https://mirrors.cat.net/archlinux/$repo/os/$arch
Server = http://mirrors.cat.net/archlinux/$repo/os/$arch
#Server = https://mirror.saebasol.org/archlinux/$repo/os/$arch

(おまけ)
ファイルを見たら、https://www.archlinux.jp/mirrors/status/ で調べた時には登場しなかった「saebasol.org」というミラーサイトが含まれていた。使う気にならなかったので、この行だけコメントのままにしておいた。


14. インストール

必要そうなものをインストール。

pacstrap -K /mnt base base-devel linux linux-headers linux-firmware bash-completion man-db man-pages texinfo vim

ここでは、/mntに対して、次のものをインストールしている。

base
base-devel
linux
linux-headers
linux-firmware
bash-completion
man-db
man-pages
texinfo
vim

テキストエディタとしてvimをインストールしているが、vimを使わない人はnanoをインストールしておけば無難。

他に、ネットワーク関係のソフト(ネットワークマネージャーや DHCP クライアント)も必要かもしれないが、インストールガイドに「chrootを実行した後にpacmanコマンドでインストールすることも可能です」と書かれていたので、この時点では行わなかった。


15. fstabの生成

次のコマンドを実行する。

genfstab -U /mnt >> /mnt/etc/fstab

念のため、/mnt/etc/fstabの中身を確認する(おかしな点があれば編集する)。


インストールガイドによると「UUID を使う場合は -U オプション、ラベルを使う場合は -L オプション」を使う。

参考にしたサイト(1)に、UUIDを使うメリットが次のように書かれていた。

物理的にディスクの接続順を変更することがないのであれば、/dev/... でも構いませんが、PC 構成が変わることがあるのであれば、UUID または PARTUUID を使った方が良いでしょう。
※ UUID は、フォーマットする度に値が変更されます。
※ PARTUUID は、GPT の場合のみ使えます。フォーマットしても、値が変化しません。

引用元:Arch Linux インストール (3)


16. chroot

以下のコマンドを実行して、新しくインストールしたシステムに chrootする。

arch-chroot /mnt


17. タイムゾーンの設定

ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
hwclock --systohc  (これにより、/etc/adjtimeが生成される)

2行目に関しては「hwclock --systohc --utc」としている例もネット上にあった。
詳しいことは不明。以下のページを後ほど読む予定。
https://wiki.archlinux.jp/index.php/%E6%99%82%E5%88%BB#.E6.99.82.E5.88.BB.E7.B3.BB


18. ローカライゼーション

/etc/locale.gen を開き、次の2行をアンコメント(行頭にある # を削除)して保存。

en_US.UTF-8 UTF-8
ja_JP.UTF-8 UTF-8

次のコマンドを実行する。

locale-gen

画面に次のように表示される。

Generating locales…
  en_US.UTF-8…  done
  ja_JP.UTF-8…  done
Generation complete.

/etc/locale.conf を作成して、中に「LANG=en_US.UTF-8」と記述する。
次のコマンドを実行すればOK。

echo "LANG=en_US.UTF-8" > /etc/locale.conf

参考にしたページによると、この段階ではまだロケールを日本語にしてはいけないとのこと。


19. コンソールのキーマップを永続化する

コンソールのKEYMAP(キーボードレイアウト)は、デフォルトではUS配列となっている。そのため、日本語配列のキーボードを使っている人がコンソールを使う時に「loadkeys jp106」というコマンドを実行する必要がある。

この作業を毎回行う手間を省くために、/etc/vconsole.conf というファイルを用意して、ファイルの中に「KEYMAP=jp106」と記述する。
次のようにechoコマンドとリダイレクトで作成すればOK。

echo "KEYMAP=jp106" > /etc/vconsole.conf


20. /etc/hostnameの作成

ホストネームとして好きな名前を/etc/hostnameに記述する。仮にホストネームをtakoyakiにするのであれば次のコマンドを実行する。

echo "takoyaki" > /etc/hostname


21. /etc/hostsの編集

/etc/hostsに次の2行を記述する(ホストネームがtakoyakiの場合)。

127.0.0.1 localhost.localdomain localhost takoyaki
::1       localhost.localdomain localhost takoyaki

(列と列の間は、スペースで区切っても、TABで区切っても可)


22. ネットワークの設定

これはインストールガイドに書かれていなかったので、参考にしたサイト(1)の次のページを元に作業した。 https://aznote.jakou.com/archlinux/install4.html


有線LANと無線LANでやり方が異なるが、私の場合はVirtualBOXなので、dhcpcdを使うことにした。
先に、ネットワークインターフェース名を調べておく。

ip link

を実行したところ、私の環境では「lo」と「enp0s3」と表示された。
よって、enp0s3を使用する。

以下のコマンドでdhcpcdをインストールする。

pacman -S dhcpcd

起動時にdhcpcdが有効になるように以下のコマンドを実行する(@以下がネットワークインターフェース名)。

systemctl enable dhcpcd@enp0s3


23. Initramfsの作成(←必要なし)

インストールガイドに次の記述がある。私の場合は不要だが、人によっては必要になるかも?

pacstrap でカーネルパッケージをインストールしたときに mkinitcpio が実行されている
ため、普通は新しい initramfs の作成は必要ありません。
LVM, システム暗号化, RAID 環境などであれば、 mkinitcpio.conf(5) を編集して以下の
コマンドで initramfs を再生成してください
mkinitcpio -P


24. rootのパスワードを設定する

以下のコマンドでrootのパスワードを設定する。

passwd


25. 一般ユーザーの作成

ここでは、pandaという一般ユーザーを作るという想定で話を進める。

groupadd panda
useradd -m -g panda -s /bin/bash panda

1行目で、pandaというグループを作成。 2行目で、pandaというユーザーを作成、-mでホームディレクトリを作成、-g でユーザーをpandaグループに属させ、-sでシェルをbashにする。


以下のコマンドで、pandaのパスワードを設定する。

passwd panda


26. sudoの設定

sudoグループを作り、そこにpandaというユーザーを所属させる

groupadd sudo
usermod -aG sudo panda

1行目で、sudoというグループを作成。
2行目で、sudoグループにpandaを加える(-Gだけだと所属グループの変更になるので、-aG)。

次にvisudoコマンドを実行して、/etc/sudoersを編集する。やることは、以下の行の先頭にある # を除去して保存するだけ。

# %sudo ALL=(ALL:ALL) ALL


27. マイクロコードをインストール

次のコマンドでマイクロコードをインストールする。

pacman -S intel-ucode

参考にしたサイト(1)によると、マイクロコードはCPU のファームウェア。CPUの動作に修正があった時に更新されるものだが、インストールしただけでは更新されない。

更新はブートローダーが行う。後述するGRUBの設定時にgrub-mkconfigを実行すると、更新に関する設定を行ってくれる。
よって、grub-mkconfigを実行するよりも前にマイクロコードのパッケージをインストールしておく必要がある。

なお、Intel用のマイクロコードのパッケージはintel-ucodeで、AMD用のものはamd-ucode。私の場合はCPUがIntel製なので、intel-ucodeをインストールした。


28. os-proberをインストール

pacman -S os-prober

参考にしたサイト(1)に、UEFIではなく「BIOS の場合、os-prober パッケージをインストールしておくと、grub-mkconfig 実行時に、他のパーティションにインストールされている OS を自動で検出して設定してくれます。複数の OS をインストールしている場合は、これを使うと便利です。」との記述があったので、インストールしておいた。

VirtualBox仮想マシンデュアルブートにすることは無いので本来この作業は不要だが、仮想マシンではなく実機にArch Linuxをインストールする時には必要になるので、ここに記述した。


29. GRUBのインストールと設定

以下は、UEFIではなくBIOSで起動、GRUBMBRに書き込む」ことを前提にしている。

pacman -S grub
grub-install --target=i386-pc /dev/sda

ブートローダーはパーティション(sda1やsda2)ではなく、デバイスMBRに書き込むので/dev/sdaを指定している。
参考にしたサイト(1)によると、64bitマシンにインストールする場合でも –target=i386-pc で良いとのこと。

最後に次のコマンドを実行する。

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


30. networkmanagerをインストール

参考にしたサイト(2)に「再起動後はネットに接続されていない可能性もある」というアドバイスがあったので、networkmanagerをインストールする。

pacman -S networkmanager


今回はVirtualBox仮想マシンにインストールしているので、再起動後にネット接続していないということは無いが、実機にインストールする時のことを想定してここに記述した。


31. chrootを抜けて、システムを終了する

exit
umount -R /mnt
swapoff /dev/sda2
shutdown -h now


32. Arch Linuxを起動する

仮想マシンのストレージから「archlinux-2022.11.01-x86_64.iso」を除去して仮想マシンを起動すると、Arch Linuxが起動する。


33. ログイン

画面にプロンプトが表示されているので、次のようにする。

(1)rootと入力してEnter押下
(2)rootのパスワードを入力してEnter押下


34. ネットワークの接続状況を調べる

参考にしたサイト(1)に「/etc/resolv.conf で DNS サーバーの IP アドレスの設定が行われていない場合は、ネットに接続できません」と書かれていたので、以下のコマンドを実行した。

cat /etc/resolve.conf

私の環境では次のように表示された(問題なし)。

nameserver 192.168.1.1

今回は必要無かったが、参考にしたサイト(2)によると、ネットワーク接続ができていない場合は、次のコマンドを実行するとのこと。

systemctl enable NetworkManager
systemctl start NetworkManager

以上で、インストール作業は終了。