はじめに
ArchLinuxをWindowsのVirtualBoxにインストールします。詳細についてはArchWikiを参照してください。
BIOS/MBRとUEFI/GPT
LinuxをインストールするにあたってBIOS/MBRとUEFI/GPTの違いを理解しておく必要があります。両者は機能的には同じものでUEFI/GPTはBIOS/MBRの後継として開発されました。UEFIはBIOSの新しい規格ですが、ここでは従来のBIOSをBIOS、UEFIに対応した新しいBIOSをUEFIと呼び分けることにします。
BIOS(Basic Input/Output System)およびUEFI(Unified Extensible Firmware Interface)にはWindowsなどのOSとPCの橋渡しをする役目があります。これらはPCにあらかじめ内蔵されたプログラム(ファームウェア)であり、電源投入時にハードウェアを初期化したりOSを起動したりします。
MBR(Master Boot Record)およびGPT(GUID Partition Table)はハードディスクなどのブロックデバイスの先頭にある小さな領域です。ここにはパーティション1の構成情報がパーティションテーブルとして格納されています。
OSをインストールすることができるパーティションを基本パーティション(Primary Partition)といいます。MBRでは4つの基本パーティションしか作成できませんが2GPTでは128の基本パーティションを作成できます。
OSを起動するためのプログラムをブートローダといいます。ブートローダは電源投入時にBIOSもしくはUEFIによって実行されます。BIOSではMBRと特定のパーティションにブートローダが格納されています。UEFIではESP(EFI System Partition)という専用のパーティションにブートローダが格納されています。
デバイスマッパーとLUKS/LVM
Linuxにはデバイスマッパーと呼ばれるブロックデバイスの仮想レイヤーがあります。これは物理デバイスを抽象化して扱いやすくします。LUKS/LVMはこのデバイスマッパーを利用しています。LUKS(Linux Unified Key Setup)はブロックデバイスを暗号化する仕組みです。LVM(Logical Volume Manager)は複数の物理ブロックデバイスを仮想的な1つのブロックデバイスとして扱う仕組みです。
LVMにはPV/VG/LVという3つの構成要素があります。PV(Phisical Volume)は物理ブロックデバイスです。VG(Volume Group)はPVで構成された仮想的な1つのブロックデバイスです。LV(Logical Volume)はVGに作成された仮想的なパーティションです。この仕組みによって物理ブロックデバイスの構成を気にすることなくパーティションを操作できます。
ArchLinuxのインストール
インストールの準備
ここではWindowsからVirtualBoxの仮想PCにArchLinuxをインストールします。ArchLinuxのイメージファイル(archlinux-*-x86_64.iso)をダウンロードしておいてください。
VirtualBoxマネージャーのメニューから [仮想マシン] > [新規] を選択し、指示にしたがって仮想PCを作成してください。割り当てるハードディスクファイルを可変サイズにしておけば、仮想PCのディスク容量を自由に変更できるので便利です。
作成したインストール用の仮想PCを以下のように設定します。
- VirtualBoxマネージャーのリストからインストール先の仮想PCを選択して[設定]をクリックします。
- 左のリストから[システム]を選択します。
- [マザーボード]を選択して[メインメモリー]を4GB以上に設定します。最低でも2GBは必要です。[チップセット]は[ICH9]を選択します。[ポインティングディバイス]は[USBタブレット]を選択します。[機能]から[EFIを有効化]をチェックします。
- [プロセッサー]を選択して[CPU数]を2以上に設定します。[機能]から[PAE/NX]をチェックします。可能であれば[ネステッドVT-x/AMD-V]もチェックします。
- 左のリストから[ディスプレイ]を選択します。
- [スクリーン]を選択して[ビデオメモリー]を256MB(最大)に設定します。[グラフィックスコントローラー]は[VMSVGA]を選択します。[機能]から[3Dアクセラレーション]をチェックします。
- 左のリストから[ストレージ]を選択します。
- [デバイス]のリストから[空]と表示されたCDのアイコンをクリックし、右上にあるCDのアイコンをクリックしてメニューから[ディスクファイルを選択]を選択します。
- 表示されたファイル選択ダイアログでArchLinuxのイメージファイルを選択して[開く]をクリックします。
- SSDを使用しているならハードディスクのアイコンをクリックして[属性]の[SSD]をチェックします。
- 左のリストから[ネットワーク]を選択して[アダプター1]の[ネットワークアダプターを有効化]がチェックされ[割り当て]が[NAT]になっていることを確認します。
- [高度]をクリックして[ポートフォワーディング]をクリックします。
- 一番右上のアイコンをクリックしてルールを追加し、ホストポートに2222、ゲストポートに22を指定して[OK]をクリックします。
- [OK]をクリックします。
インストール先のハードディスク(sda)のレイアウトを決めておきます。最初のパーティション(sda1)をESPにします。次のパーティション(sda2)をルートパーティションにします。sda2はLUKSで暗号化して、その上にLVMを構築します。
ArchLinuxにはインストーラとしてarchinstallが用意されています。以下のような面倒な作業をしたくないのであればarchinstallを使用してください。詳細についてはArchLinuxを超簡単にインストールできる「archinstall」を試す – SlackNoteを参照してください。
インストールの手順
UEFIの仮想PCはハードディスクから起動されるので、すでに他のOSがインストールされている場合はそのOSが起動してしまいます。光学ドライブから起動するには、仮想PCの起動時にEscキーを連打してUEFIの設定画面に入り、[Boot Manager]を選択して[UEFI VBOX CD-ROM]を選択します。
仮想PCを起動してメニューが表示されたら[Arch Linux install medium (x86_64, x64 UEFI)]を選択してください。しばらくすると一時的なUnix環境が構築され自動的にrootユーザにログインします。ここからシェルを使用してインストール作業を進めていきます。ArchLinuxのインストール作業は他のディストリビューションとは少し異なるので、大まかな流れを以下に示します。
- インストール先のディスクを準備する(パーティションの作成、パーティションのフォーマット)
- インストール先のディスクにパッケージをインストールする
- 1で準備したインストール先のディスク(ここではESPおよびルートパーティション)をマウントする
- 3でマウントしたインストール先のディスク(ルートパーティション)にchrootして各種設定を行う
- chrootから抜けてインストール作業を終了する
- インストール先のディスクからシステムを起動する
- インストール後の各種設定を行う
ArchLinuxのブートプロセスを把握しておけば以下のインストール作業をスムーズに進められます。詳細についてはインストールガイド - ArchWikiを参照してください。
キーボードの設定
キーボードの配列を日本語に設定します。
# loadkeys jp106ターミナルの用意
コンソール画面では入力しづらいのでWindowsターミナルで作業できるようにします。
sshで使用するためのパスワードを設定します。
# passwdWindowsターミナルでsshを実行してホストOS(Windows)からゲストOS(ArchLinux)に接続します。設定したパスワードを入力すれば接続できます。
$ ssh -p 2222 root@localhost接続に失敗した場合は以下のようにして再度接続します。
$ ssh-keygen -R '[localhost]:2222'以後はWindowsターミナルで作業できます。
起動モードの確認
EFIモードで起動していることを確認します。ファイルがリストされていれば問題ありません。
# ls /sys/firmware/efi/efivarsネットワークの確認
ネットワークインターフェイスが認識され有効であることを確認します。
# ip linkインターネットに接続できていることを確認します。
# ping -c3 archlinux.jpシステムクロックの更新
システムの時刻(システムクロック)を合わせます。
# timedatectl set-ntp trueシステムクロックが合っていることを確認します。
# timedatectl statusデバイス名の確認
インストール先のデバイス/dev/sdaを確認します。
# lsblk |grep -Ev 'rom|loop|airoot'パーティションの作成
/dev/sdaにパーティションを作成してレイアウトを確認します。
# parted /dev/sda
(parted) mklabel gpt
(parted) mkpart ESP fat32 1MiB 512MiB
(parted) set 1 esp on
(parted) mkpart primary ext4 512MiB 100%
(parted) print
(parted) quitsda2をcrypt-rootというデバイス名で暗号化します。暗号化したデバイスやパーティションを使用するにはパスワードを入力して解錠する必要があります。解錠すると指定したデバイス名で/dev/mapperに追加され、暗号化したデバイスやパーティションを使用できるようになります。/dev/sda2を解錠すると/dev/mapper/crypt-rootとして追加されます。
# cryptsetup luksFormat /dev/sda2
# cryptsetup luksDump /dev/sda2
# cryptsetup open /dev/sda2 crypt-rootcrypt-root(暗号化したsda2)をPV(物理ブロックデバイス)として登録します。このPVをvgという名前のVG(仮想的なブロックデバイス)に追加します。このvg全体を使用してrootという名前のLV(仮想的なパーティション)を作成します。作成したLVはvg-rootというデバイス名[(VG名)-(LV名)]で/dev/mapperに追加されます。
# pvcreate /dev/mapper/crypt-root
# vgcreate vg /dev/mapper/crypt-root
# lvcreate -l 100%FREE vg -n root/dev/mapper/crypt-rootにLVMが構築され、作成したLVが/dev/mapper/vg-rootとして使用できるようになります。3
パーティションのフォーマット
パーティションをフォーマットします。
# mkfs.vfat -F32 /dev/sda1
# mkfs.ext4 /dev/mapper/vg-rootパーティションのマウント
/mnt/にルートパーティションをマウントします。
# mount /dev/mapper/vg-root /mntESPは/mnt/boot/にマウントします。
# mkdir /mnt/boot
# mount /dev/sda1 /mnt/bootルートパーティションをマウントしてからESPをマウントするようにしてください。そうしないとESPが消えてしまいます。
リポジトリの設定
パッケージは/etc/pacman.d/mirrorlistの上位にリストされているリポジトリからダウンロードされます。コマンドreflectorを入力して日本のリポジトリを選択します。
# reflector --sort rate --country Japan --latest 10 --save /etc/pacman.d/mirrorlistパッケージのインストール
必要なパッケージをインストールします。
# pacman-key --init && pacman -Sy archlinux-keyring
# pacstrap -K /mnt base base-devel linux linux-firmware linux-headers lvm2 nano networkmanager openssh sudofstabの設定
fstabを生成します。
# genfstab -U /mnt >>/mnt/etc/fstabfstabの内容を確認します。
# cat /mnt/etc/fstabchroot
インストールするシステムにchrootします。/mnt/が/になります。
# arch-chroot /mntタイムゾーンの設定
タイムゾーンを東京に設定します。
# ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtimeハードウェアクロックの設定
ハードウェアクロックをシステムクロックに合わせます。
# hwclock --systohc --utcロカールの設定
/etc/locale.genから使用するロカール(en_US.UTF-8およびja_JP.UTF-8)をアンコメントします。
# nano /etc/locale.genロカールを生成します。
# locale-genデフォルトのロカールを設定します。現時点では日本語にしません。GUI環境を構築してから日本語にします。
# echo LANG=en_US.UTF-8 >/etc/locale.conf
# export LANG=en_US.UTF-8コンソール画面のキーボード配列およびフォントを設定します。デフォルトのフォントは小さいので大きめのフォントを指定しています。
# pacman -S terminus-font
# echo "KEYMAP=jp106" >/etc/vconsole.conf
# echo "FONT=ter-124b" >>/etc/vconsole.confホスト名の設定
ホスト名を追加します。以下のHOSTNAMEは自分のホスト名に置き換えてください。
# echo HOSTNAME >/etc/hostname
# nano /etc/hosts127.0.0.1 localhost
::1 localhost
127.0.1.1 HOSTNAME.localdomain HOSTNAMEインターネット接続の設定
NetworkManagerを有効にして再起動後もインターネットに接続できるようにしておきます。
# systemctl enable NetworkManagersshの設定
sshdを有効にして再起動後もsshで接続できるようにしておきます。
# systemctl enable sshdsshの設定ファイル/etc/ssh/sshd_configから以下の項目をアンコメントして設定します。
# nano /etc/ssh/sshd_configPort 22
PermitRootLogin yes
PasswordAuthentication yesrootパスワードの設定
rootユーザのパスワードを設定します。
# passwdブートローダの設定
ここではブートマネージャとしてsystemd-bootを使用します。
/boot/に置かれているブートイメージvmlinuz-linux/initramfs-linux.img/initramfs-linux-fallback.imgを確認します。
# ls -la /bootESPにブートローダをインストールします。
# bootctl --path=/boot installマイクロコードをインストールします。CPUの製造元(IntelもしくはAMD)に応じてどちらかをインストールしてください。
# pacman -S intel-ucode
# pacman -S amd-ucodeブートローダの設定ファイル/boot/loader/loader.confを必要に応じて変更します。パースエラーを引き起こすので、行末のコメントはファイルに含めないでください。
# nano /boot/loader/loader.confdefault arch.conf # デフォルトエントリのファイル名
timeout 60 # ブートメニューの表示時間(秒)
console-mode auto # コンソール画面の解像度
editor no # ブートオプション変更の可否起動画面でeを押してブートオプションにinit=/bin/bashを書き加えるとパスワード無しでroot権限が手に入ってしまいます。ブートオプションは変更できないようにしておきましょう。
ブートローダのエントリを追加します。
ルートパーティション/dev/sda2のPARTUUIDを/boot/loader/entries/arch.confに出力しておきます。
# cd /boot/loader/entries
# blkid -s PARTUUID -o value /dev/sda2 >arch.conf続けて以下のような内容のファイルを作成します。PARTUUIDには上で出力したものを使用します。
# nano arch.conftitle Arch Linux
linux /vmlinuz-linux
initrd /intel-ucode.img
#initrd /amd-ucode.img
initrd /initramfs-linux.img
options cryptdevice=PARTUUID=********-****-****-****-************:crypt-root root=/dev/mapper/vg-root rw# cp arch.conf arch-fallback.conf
# nano arch-fallback.conftitle Arch Linux Fallback
linux /vmlinuz-linux
initrd /intel-ucode.img
#initrd /amd-ucode.img
initrd /initramfs-linux-fallback.img
options cryptdevice=PARTUUID=********-****-****-****-************:crypt-root root=/dev/mapper/vg-root rwブートローダが自動で更新されるようにするため/etc/pacman.d/hooks/にファイルsystemd-boot.hookを作成します。
# cd /etc/pacman.d
# mkdir hooks
# cd hooks
# nano systemd-boot.hook[Trigger]
Type = Package
Operation = Upgrade
Target = systemd
[Action]
Description = Updating systemd-boot
When = PostTransaction
Exec = /usr/bin/bootctl update初期RAMディスクの作成
フックを設定します。/etc/mkinitcpio.confの以下に示す箇所を書き換えます。項目の順番を間違えないようにしてください。
# nano /etc/mkinitcpio.conf#HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block filesystems fsck)
HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block encrypt lvm2 filesystems fsck)initramfsを生成します。
# mkinitcpio -p linuxシステムの再起動
chrootから抜けます。ここでインストール作業は終了です。
# exit/mnt/にマウントしたパーティションをアンマウントします。
# umount -R /mnt仮想PCからArchLinuxのインストールディスクを取り出します。メニューから [デバイス] > [光学ドライブ] > [仮想ドライブからディスクを除去] を選択してください。
システムを再起動します。
# reboot起動直後にLUKSで設定したパスワードを要求されます。パスワードが正しければルートパーティションが解錠されてシステムが起動します。
GuestAdditionsのインストール
VirtualBoxのGuestAdditionsをインストールします。
# pacman -S virtualbox-guest-utils
# systemctl enable vboxservice再起動後にGuestAdditionsが有効になっていることを確認します。
# reboot
# systemctl status vboxadd-serviceスワップファイルの作成
スワップファイルを作成します。スワップファイルはメモリが足りなくなったときに使用されます。メモリサイズに余裕があれば必要ありません。
# fallocate -l 512M /swapfile
# chmod 600 /swapfile
# mkswap /swapfile
# swapon /swapfile
# echo /swapfile none swap defaults 0 0 >>/etc/fstab再起動後にスワップファイルが有効になっていることを確認します。
# reboot
# free -h一般ユーザの作成
一般ユーザを作成します。以下のUSERNAMEは自分のユーザ名に置き換えてください。
# useradd -m -G wheel -s /bin/bash USERNAMEUSERNAMEのパスワードを設定します。
# passwd USERNAMEvisudoで/etc/sudoersの"%wheel ALL=(ALL) ALL"をアンコメントします。
# EDITOR=nano visudoUSERNAMEでログインし直します。
# su USERNAME