💻

Arch Linux インストールの流れ

2020/10/26に公開

この記事は, 2020 年 10 月 13 日に行った Arch Linux のインストールに基づいています.
使用したインストールメディアは, 2020 年 10 月 01 日のリリース (カーネル: 5.8.12) です.

また,インストール作業中はインターネットに接続されている必要があります.

公式のインストールガイドが丁寧に書かれているので,これに従っていれば基本的に大丈夫です.

  1. ここから最新のインストールメディアをダウンロードします.古いイメージを使うとよく失敗します.

  2. ここの説明に従って, USB メモリに書き込みます.

  3. USB メモリを挿し込んだ状態でマシンを起動し, UEFI 画面から USB メモリを選択して起動します.

  4. 起動するとまず選択肢が表示されますが,デフォルトの Arch Linux install medium (x86_64, UEFI) を選択します(何もせずに放置しても自動的に選択されるので大丈夫です).自動ログインが行われ,次のように表示されて入力を受け付ける状態になります.

    archiso login: root (automatic login)
    
    To install Arch Linux follow the installation guide:
    https://wiki.archlinux.org/index.php/Installation_guide
    
    For Wi-Fi, authenticade to the wireless network using the iwctl utility.
    Ethernet and Wi-Fi connections using DHCP should work automatically.
    
    After connecting to the internet, the installation guide can be accessed
    via the convenience script Installation_guide.
    
    root@archiso ~ #
    
  5. デフォルトのキーボードレイアウトは US キーボードです.インストール中に他のキーボードレイアウトを使用したい場合 loadkeys コマンドを使って切り替えます(これはインストール完了後に反映されるものではない).例えば Programmer Dvorak の場合:

    # loadkeys dvorak-programmer.map
    
  6. UEFI モードであることを確認します.

    # ls /sys/firmware/efi/efivars
    

    ここで No such file or directory などと出力されたら, UEFI モードではなく BIOS モードで起動しています. UEFI モードに切り替えることができない場合,この記事とは違うやり方でインストールすることになります.

  7. インターネット接続を確認します.

    # ping -c3 www.google.com
    

    有線でつないでいれば,起動した際に自動的に接続されているはずです.無線の場合,iwctl のようなコマンドを用いて接続します.

  8. gdisk あるいは cgdisk を使ってディスクをパーディションに分けます.ディスクには /dev/sda のような名前が付いています.以下では gdisk を使って /dev/sda のパーティションを作る場合を説明します.

    # gdisk /dev/sda
    

    とすると, Command (? for help): と出力されてコマンド入力を受け付けるようになります.
    まず 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 を指定することで EFI system とし, 512 MB 用意します.デフォルトのままのところは何も打たずにエンターを押せば良いです.

    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'
    

    残りの部分は,自由に分けます.もう何も分けずに全て / にしても良いですし, //home で分けるのも良いでしょう.あるいはスワップ領域を作っても良いです.以下では, / に 100 GB 割り当てて,残りを /home に割り当てることにします.

    Command (? for help): n
    Partition number (1-128, default 2):
    First sector (〜) or {+-}size{KMGTP}:
    Last sector (〜) or {+-}size{KMGTP}: +100G
    Current type is 'Linux filesystem'
    Hex code or GUID (L to show codes, Enter = 8300):
    Changed type of partition to 'Linux filesystem'
    
    Command (? for help): n
    Partition number (1-128, default 3):
    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): 8302
    Changed type of partition to 'Linux /home'
    

    OS インストール後のディレクトリとパーティションの関係を,次のようにしようとしているわけです:

    /       → /dev/sda2
    ├ /boot → /dev/sda1
    ├ /home → /dev/sda3
    ├ /etc
    └ ...
    

    / の中身のうち, /boot/home だけがそれぞれ /dev/sda1/dev/sda3 にあり,それ以外の部分は全て /dev/sda2 にある状態です.
    作成したパーティションテーブルをディスクに書き込みます.

    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
    
  9. 各パーティションをフォーマットします.
    ESP は FAT32 でフォーマットします.

    # mkfs.vfat -F32 /dev/sda1
    

    他のパーティションは ext4 でフォーマットします.

    # mkfs.ext4 /dev/sda2
    # mkfs.ext4 /dev/sda3
    
  10. 各パーティションをマウントします.まず最初に,後の / である /dev/sda2 を, /mnt 自体にマウントします.

    # mount /dev/sda2 /mnt
    

    他は, /mnt の下にディレクトリを作ってマウントします.今回の例では /dev/sda1 が後の /boot/dev/sda3 が後の /home なので

    # mkdir /mnt/boot /mnt/home
    # mount /dev/sda1 /mnt/boot
    # mount /dev/sda3 /mnt/home
    

    とします.これで

    /mnt        → /dev/sda2
    ├ /mnt/boot → /dev/sda1
    └ /mnt/home → /dev/sda3
    

    という形になり,インストール後のディレクトリとパーティションの関係と同じになります.

  11. この後 pacstrap で Arch Linux の本体をディスクへとインストールするのですが,その前にミラーリストを設定します.

    # vim /etc/pacman.d/mirrorlist
    

    このファイルを編集して,日本のミラーである jaist.ac.jp を先頭に持ってきます.
    このときさらに, Server = https://ftp.tsukuba.wide.ad.jp/Linux/archlinux/$repo/os/$arch という行を追加しても良いと思います.つまり,

    Server = https://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch
    Server = https://ftp.tsukuba.wide.ad.jp/Linux/archlinux/$repo/os/$arch
    

    の 2 行が,他の Server = の行よりも前にあれば大丈夫です.

  12. pacstrap コマンドで Linux を含む各種パッケージをインストールします.

    # pacstrap /mnt base base-devel linux linux-firmware vi vim dhcpcd intel-ucode
    
    • ファイルの編集に用いる vivim は, nanoemacs などでも良いです(この記事では今後の設定に vim を使います).また vi をインストールしない場合は,あとで visudo を使う際に少し設定が必要になります.
    • CPU が Intel ではなく AMD の場合 intel-ucode の代わりに amd-ucode とします.
    • ネットワークに関しては,有線接続であれば dhcpcd だけで大丈夫です.無線接続の場合これに加えて wpa_supplicant が必要になります.

    エンターを押し続けて,言われたものを全てインストールします.

  13. ファイルシステムテーブルを作成します.

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

    個人的には,後でパーティション分けを変更したりするときのために, /etc/fstab 内にメモを書くことにしています. Windows/Linux でデュアルブートしている場合などは,後で分からなくならないようにここで

    /mnt/etc/fstab
    ...
    # /dev/sda1: FAT32; Linux/Windows boot partition (shared)
    # /dev/sda2: ntfs; Windows reserved
    # /dev/sda3: ntfs; Windows C: drive
    # /dev/sda4: ext4; Linux root
    # /dev/sda5: ext4; Linux home
    # /dev/sda6: FAT32; Linux/Windows shared partition
    # /dev/sda7: ntfs; Windows recovery
    

    などと書いておくと便利です.

  14. ルートを /mnt に切り替えます.

    # arch-chroot /mnt
    

    新たにシェル (bash) が起動し,さっきまでの /mnt/ になります.つまりディレクトリとパーティションの関係は

    /       → /dev/sda2
    ├ /boot → /dev/sda1
    ├ /home → /dev/sda3
    ├ /etc
    └ ...
    

    となっていて,インストール完了後に使うときと同じ状態になるわけです.

  15. 諸設定

    • ロケールの設定
      # vim /etc/locale.gen
      
      # en_US.UTF-8 UTF-8 と書かれた行を探し,最初の # を削除します.同様に # ja_JP.UTF-8 UTF-8 と書かれた行を探し,最初の # を削除します.そして次を実行します.
      # locale-gen
      
    • 言語の設定
      # echo LANG=en_US.UTF-8 > /etc/locale.conf
      # export LANG=en_US.UTF-8
      
    • キーボードレイアウトとフォントの設定
      # vim /etc/vconsole.conf
      
      例えば次のように設定します:
      /etc/vconsole.conf
      KEYMAP=dvorak-programmer.map
      FONT=Lat2-Terminus16
      
    • 場所の設定
      # ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
      
    • 時刻の設定
      # hwclock -u -w
      
    • ホスト名の設定
      # echo (ホスト名) > /etc/hostname
      
    • インターネット接続の設定
      # systemctl enable dhcpcd
      
    • root パスワードの設定
      # passwd
      
  16. ブートローダのインストールと設定を行います.
    現在 Arch Linux は起動した状態で,ここからずっと起動したままの状態で使い続けることが可能です.いわば暖炉の中で薪が燃えている状態です.あなたはその火を使ってさまざまなことができます.
    しかし,あなたはまだマッチを持っていません.今燃えている火は, USB メモリの archiso が点火してくれた火です.暖炉と薪は整いましたが,マッチが無いことには火を付けることができません.
    ここでマッチとなるのがブートローダです.今回は systemd-boot というブートローダを用います.次のコマンドを打ってインストールします.

    # bootctl --path=/boot install
    

    この後,ブートローダの設定を行い, USB メモリを抜いて再起動します.ここで設定を間違えると再起動に失敗します.もし失敗した場合は,慌てることなく USB メモリを挿し直して起動し,⑦まで行ったら⑧と⑨を飛ばして⑩を行った後,⑭で arch-chroot してここに戻ってきて下さい

    設定するのは /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 (何かあったとき用のフォールバック)の 2 つを用意します.
      まず,ルートパーティション(今回は /dev/sda2 )の PARTUUID を調べ, arch.conf に出力します.

      # blkid -s PARTUUID -o value /dev/sda2 > arch.conf
      

      ここで arch.conf を開くと, PARTUUID が書き込まれているはずです.これを編集して次のようにします.

      /boot/loader/entries/arch.conf
      title Arch Linux
      linux /vmlinuz-linux
      initrd /intel-ucode.img
      initrd /initramfs-linux.img
      options root=PARTUUID=(/dev/sda2 の PARTUUID) rw
      

      Intel ではなく AMD の CPU を使っている場合は /intel-ucode.img の代わりに /amd-ucode.img となります.同様に arch-fallback.conf は次のようにします.

      /boot/loader/entries/arch-fallback.conf
      title Arch Linux Fallback
      linux /vmlinuz-linux
      initrd /initramfs-linux-fallback.img
      options root=PARTUUID=(/dev/sda2 の PARTUUID) rw
      
    • /boot/loader/loader.conf

      # cd ..
      # vim loader.conf
      

      ここに設定を書いていきます.editor no の一行は必ず書きましょう.これを書いていないと,起動画面で e を押して init=/bin/bash を書き加えることで,パスワード無しで root 権限が手に入ってしまうようになります.
      設定例として,起動したら即座に Arch Linux ( fallback でない方) が選択されて起動するようにします.そのためには「タイムアウト:0」と「デフォルト:Arch Linux」の 2 つを指定する必要があります.タイムアウトの方は何も書かなくても自動で 0 になります.明示的に書くとしたら timeout 0 です.デフォルトのローダは default (ファイル名)と書いて指定する。ファイル名のところには上で作ったファイル名 arch.conf の拡張子を除いた部分(つまり arch )を書きます.最終的には次のようになります:

      /boot/loader/loader.conf
      editor no
      default arch
      

      他の設定例:

      /boot/loader/loader.conf
      editor no
      timeout 3
      default arch
      

      この場合,起動してから 3 秒間 Arch Linux / Arch Linux Fallback の選択肢が表示され,その間に何もしないと Arch Linux の方が起動するようになります.
      timeout 0 のときは,スペースキーを押しながら起動すると, Arch Linux / Arch Linux Fallback の選択肢が表示されるようになります.

  17. USB メモリを抜いて再起動します.

    # exit
    # reboot
    

    起動したら

    login: root
    password: (パスワード)
    

    でログインします.

  18. ユーザを追加します.

    # useradd -m -G wheel (ユーザ名)
    # passwd (ユーザ名)
    
  19. sudoers ファイルを設定します.

    # visudo
    

    # %wheel ALL=(ALL) ALL と書かれた行を探してコメントアウトします.個人的にはこのとき Defaults timestamp_timeout=0 と追記することにしています.

  20. 今作ったユーザでログインし直します.

    # exit
    

おめでとうございます! Arch Linux のインストールが完了しました.

この記事はここで終わりとします.ここから先の設定に関しては諸設定集を読んで下さい.

Discussion