Arch Linux インストールの悪戦苦闘メモ
Arch Linuxを使ってみようと思ったきっかけ
なんかかっこいいから。以上。
環境
PC: Lenovo ThinkPad X13 Gen 1
- CPU: AMD Ryzen 5 PRO(?)
- メモリ: 16GB
- ストレージ: 256GB SSD
- elementary OS(linux)をインストール済み インストールメディア
- 事前にisoイメージを焼いたUSB
- 作り方は arch linux - USB インストールメディア を参考にした(わからない人は 「arch linux iso 作り方」とかで検索してね)
※ PCの機種によってBIOS起動などの手順は異なります。今回はThinkPadが前提です。
※ Arch Linux初心者 & Linuxに精通しているわけでもない ため、詳細までは保証できません。あくまで自分用の環境構築メモとなります。
Arch Linuxの起動
F12 を連打するとブートメニューが開けるので、事前に作成したインストールメディアを選択する。
※ ThinkPadの場合は F1 を連打し、セキュアブートを無効化しておく必要がある。
正しく起動できるとarch linuxの画面が開くので、Arch Linux install medium (X86_64, UEFI)を選択する。
BIOS起動の場合は Arch Linux install medium (X86_64, BIOS)となっているはず。
適当に待っていると、root@archiso ~ #という文字列が表示される
→ ここからインストールを始めていく!!!
※ 補足: JIS配列を使いたい場合は以下を実行する。自分はUS配列のため実行しない。
$ loadkeys jp106
wifi設定
pingでインターネット接続を確認する。
$ ping -c 3 archlinux.jp
64 bytes from ...みたいな感じで出力されていれば接続済み。
今回はwifiに接続したいので、iwctlを使う
$ iwctl
[iwd]# device list -- 'wlan0'のみ表示された
[iwd]# station wlan0 get-networks -- 利用できるwifi一覧が表示された
[iwd]# station wlan0 connect xxxxxxxx(SSID) -- passphraseを求められるので入力
[iwd]# quit
もう一度 ping -c 3 archlinux.jpを実行すると、無事接続できていた模様🎉
システムクロック設定
以下を実行する。
$ timedatectl set-ntp true
timedatectl statusで正しい時刻になっているか確認できる。
パーティションの割当
ここからが難関だった。 正直詳細を説明する自信はないが、↓のような手順でなんとか成功した...
まずは、lsblkを用いてPC本体のストレージを特定する。
$ lsblk -o NAME,TRAN,RM,SIZE,MOUNTPOINT
# 結果
NAME TRAN RM SIZE MOUNTPOINT
sda usb 1 14.4G
├─sda1 1 1.2G
└─sda2 1 248M
nvme0n1 nvme 0 238.5G
├─nvme0n1p1 nvme 0 500M
├─nvme0n1p2 nvme 0 954M
└─nvme0n1p3 nvme 0 237.1G
nvme0n1がPC本体のストレージと判断した。不安。。。
すでにインストール済みの elementary OS はぶち消してしまって構わないので、このnvme0n1にパーティションを割り当てて行こうと決意した。
!FAIL 警告 失敗した際の動きを保証できないので、ぶち消す際は自己責任でお願いします...!
fdiskによるパーティショニング
fdisk /dev/nvme0n1を実行すると、対話型のコマンドが進んでいく
コマンドの実行手順を書くと、
fdisk /dev/nvme0n1を実行gで新しいGPTテーブルを作成nで1つ目のパーティションを作成Partition number: 1First sector: 2048Last sector: +500M
3で作成したパーティションに対し、tでタイプをEFI Systemに設定nで2つ目のパーティションを作成Partition number: 2First sector: [デフォルト値]Last sector: +1G
5で作成したパーティションに対し、tでタイプをLinux swapに設定nで3つ目のパーティションを作成Partition number: 3First sector: [デフォルト値]Last sector: [デフォルト値]-> 残りすべてを割り当てる
7で作成したパーティションに対し、tでタイプをLinux root(x86-64)に設定wで保存してexit- 念のため、
lsblk -fで確認する
パーティションのフォーマット
$ mkfs.fat -F 32 /dev/nvme0n1p1
$ mkswap /dev/nvme0n1p2
$ mkfs.ext4 /dev/nvme0n1p3
パーティションのマウント
$ mount /dev/nvme0n1p3 /mnt
$ mount --mkdir /dev/nvme0n1p1 /mnt/boot
$ swapon /dev/nvme0n1p2
最終的なパーティション割当
| パーティション | パーティションタイプ | first sector | last sector | マウントポイント |
|---|---|---|---|---|
/dev/nvme0n1p1 | EFI System | default | +1GB | /mnt/boot |
/dev/nvme0n1p2 | Linux swap | default | +16GB | swap |
/dev/nvme0n1p3 | Linux root(x86-64) | default | default | /mnt |
OSのインストール
/etc/pacman.d/mirrorlistをvimで編集し、先頭に以下を追加する。
Server = http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/$repo/os/$arch
次に、必要なパッケージをpacstrapでインストールする。
$ pacstrap /mnt base base-devel linux linux-firmware
これで基本パッケージのインストールが完了した。
システム設定
fstabを生成する。 これは、パーティション情報等が書き込まれているファイルで、起動時にどのパーティションをマウントするかなどを指定しているらしい。詳しくはわからない。
$ genfstab -U /mnt >> /mnt/etc/fstab
続けて、インストールしたシステムにchrootで入る。
$ arch-chroot /mnt
chroot環境に入ったらタイムゾーンを設定する。
$ ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
$ hwclock --systohc
ロケール設定
いくつかの設定ファイルを編集したいので、まずはvimをインストールする。
$ pacman -Syyu
$ pacman -S vim
/etc/locale.genを開き、en_US.UTF-8とja_JP.UTF-8の行のコメントアウトを外す。
最上部に以下を追記してもよい。
ja_JP.UTF-8 UTF-8
en_US.UTF-8 UTF-8
完了後、locale-genを実行して/etc/locale.genの内容をコンパイルする。
次に、/etc/locale.confにLANG環境変数を設定する。
$ echo "LANG=en_US.UTF-8" > /etc/locale.conf
JIS配列を使っている場合は、/etc/vconsole.conf にキーマップを設定する。
$ echo "KEYMAP=jp106" > /etc/vconsole.conf
ホスト名の設定
/etc/hostnameにホスト名を追記する。
$ echo "myhostname" > /etc/hostname
上記で設定したホスト名を/etc/hostsにも設定する。
127.0.0.1 localhost
::1 localhost
127.0.1.1 myhostname.localdomain myhostname
正しく設定されているか確認。
$ getent hosts
127.0.0.1 localhost
::1 localhost
127.0.1.1 myhostname
ネットワーク設定
今回は無線LANを利用しているため、Network Managerなるものが良いらしい。
$ pacman -S networkmanager
# 次回起動時にNetwork Managerが自動で有効化されるように設定
$ systemctl enable NetworkManager
rootパスワードの設定
$ passwd
ブートローダー
systemd-bootを使う。
先に、マイクロコードのアップデートに対応するためのライブラリ(らしい)amd-ucodeをインストールする。
$ pacman -S amd-ucode -- intelのCPUの場合は intel-ucode
EFIシステムパーティションに systemd-boot をインストールし、自動更新を設定。
$ bootctl --path=/boot install
$ systemctl enable systemd-boot-update
次は/boot/loader/loader.conf を開いて、ローダーの設定をする。
自分は以下のように設定した。
default arch.conf
timeout 5
console-mode max
editor no
完了したら、/boot/loader/entries/arch.conf を作成し以下を追加。
title Arch Linux
linux /vmlinuz-linux
initrd /amd-ucode.img
initrd /initramfs-linux.img
option値を取得するため、ルートパーティションのUUIDを取得して /boot/loader/entries/arch.confに書き込む。
$ echo $(blkid -s UUID -o value /dev/nvme0n1p3) >> /boot/loader/entries/arch.conf
末尾にUUIDのみが追加されているはずなので、以下のように整形する。
title Arch Linux
linux /vmlinuz-linux
initrd /amd-ucode.img
initrd /initramfs-linux.img
options root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rw
準備は整った!!あとは再起動!!
の前に、chroot環境から抜けて/mntにマウントしたパーティションをアンマウントする。
$ exit
$ umount -R /mnt
願いを込めて再起動。
$ reboot
問題なくインストールできていれば、USBを抜いてもArch Linuxが起動する。
ログインが求められるので、先ほど設定したパスワードを使ってrootユーザーでログインする。
無事起動できたなら、以下も合わせて対応してしまった方がよい。
無線LANの設定
nmcli を使う。
まず、以下でSSIDのリストを確認する。
$ nmcli device wifi
接続したいSSIDを選択し、パスワードを入力する。
--askはパスワードを対話式で入力するためのオプション。
$ nmcli device wifi connect [SSID] --ask
ユーザーの追加
rootユーザーは手放したいので、新しいユーザーを作成する。
$ useradd -m -G wheel -s /bin/bash [username]
各オプションの意味はこんな感じ
-m: ホームディレクトリを作成する-G wheel: wheelグループ (suが使えるユーザーのグループ) に追加する-s /bin/bash: ログインシェルをbashに設定する
パスワードも設定。
$ passwd [username]
次に、sudoをインストールする
$ pacman -S sudo
wheel グループに対して sudo の権限を与える。
これをしないと、追加したユーザーがsudoを使えない。
$ vim /etc/sudoers
## uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL:ALL) ALL
exitでrootユーザーからログアウトし、作成したユーザーでログイン
→ sudo lsなどが問題なく実行できればOK
おわりに
5回くらいやり直しました。Arch Linuxむずい。