トップページ

Unixのインストール

はじめに

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を以下のように設定します。

  1. VirtualBoxマネージャーのリストからインストール先の仮想PCを選択して[設定]をクリックします。
  2. 左のリストから[システム]を選択します。
  3. [マザーボード]を選択して[メインメモリー]を4GB以上に設定します。最低でも2GBは必要です。[チップセット]は[ICH9]を選択します。[ポインティングディバイス]は[USBタブレット]を選択します。[機能]から[EFIを有効化]をチェックします。
  4. [プロセッサー]を選択して[CPU数]を2以上に設定します。[機能]から[PAE/NX]をチェックします。可能であれば[ネステッドVT-x/AMD-V]もチェックします。
  5. 左のリストから[ディスプレイ]を選択します。
  6. [スクリーン]を選択して[ビデオメモリー]を256MB(最大)に設定します。[グラフィックスコントローラー]は[VMSVGA]を選択します。[機能]から[3Dアクセラレーション]をチェックします。
  7. 左のリストから[ストレージ]を選択します。
  8. [デバイス]のリストから[空]と表示されたCDのアイコンをクリックし、右上にあるCDのアイコンをクリックしてメニューから[ディスクファイルを選択]を選択します。
  9. 表示されたファイル選択ダイアログでArchLinuxのイメージファイルを選択して[開く]をクリックします。
  10. SSDを使用しているならハードディスクのアイコンをクリックして[属性]の[SSD]をチェックします。
  11. 左のリストから[ネットワーク]を選択して[アダプター1]の[ネットワークアダプターを有効化]がチェックされ[割り当て]が[NAT]になっていることを確認します。
  12. [高度]をクリックして[ポートフォワーディング]をクリックします。
  13. 一番右上のアイコンをクリックしてルールを追加し、ホストポートに2222、ゲストポートに22を指定して[OK]をクリックします。
  14. [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. インストール先のディスクを準備する(パーティションの作成、パーティションのフォーマット)
  2. インストール先のディスクにパッケージをインストールする
  3. 1で準備したインストール先のディスク(ここではESPおよびルートパーティション)をマウントする
  4. 3でマウントしたインストール先のディスク(ルートパーティション)にchrootして各種設定を行う
  5. chrootから抜けてインストール作業を終了する
  6. インストール先のディスクからシステムを起動する
  7. インストール後の各種設定を行う

ArchLinuxのブートプロセスを把握しておけば以下のインストール作業をスムーズに進められます。詳細についてはインストールガイド - ArchWikiを参照してください。

キーボードの設定

キーボードの配列を日本語に設定します。

# loadkeys jp106

ターミナルの用意

コンソール画面では入力しづらいのでWindowsターミナルで作業できるようにします。

sshで使用するためのパスワードを設定します。

# passwd

Windowsターミナルでsshを実行してホストOS(Windows)からゲストOS(ArchLinux)に接続します。設定したパスワードを入力すれば接続できます。

Windowsターミナル
$ ssh -p 2222 root@localhost

接続に失敗した場合は以下のようにして再度接続します。

Windowsターミナル
$ 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) quit

sda2をcrypt-rootというデバイス名で暗号化します。暗号化したデバイスやパーティションを使用するにはパスワードを入力して解錠する必要があります。解錠すると指定したデバイス名で/dev/mapperに追加され、暗号化したデバイスやパーティションを使用できるようになります。/dev/sda2を解錠すると/dev/mapper/crypt-rootとして追加されます。

# cryptsetup luksFormat /dev/sda2
# cryptsetup luksDump /dev/sda2
# cryptsetup open /dev/sda2 crypt-root

crypt-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 /mnt

ESPは/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 sudo

fstabの設定

fstabを生成します。

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

fstabの内容を確認します。

# cat /mnt/etc/fstab

chroot

インストールするシステムに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/hosts
/etc/hosts
127.0.0.1       localhost
::1             localhost
127.0.1.1       HOSTNAME.localdomain HOSTNAME

インターネット接続の設定

NetworkManagerを有効にして再起動後もインターネットに接続できるようにしておきます。

# systemctl enable NetworkManager

sshの設定

sshdを有効にして再起動後もsshで接続できるようにしておきます。

# systemctl enable sshd

sshの設定ファイル/etc/ssh/sshd_configから以下の項目をアンコメントして設定します。

# nano /etc/ssh/sshd_config
/etc/ssh/sshd_config
Port 22
PermitRootLogin yes
PasswordAuthentication yes

rootパスワードの設定

rootユーザのパスワードを設定します。

# passwd

ブートローダの設定

ここではブートマネージャとしてsystemd-bootを使用します。

/boot/に置かれているブートイメージvmlinuz-linux/initramfs-linux.img/initramfs-linux-fallback.imgを確認します。

# ls -la /boot

ESPにブートローダをインストールします。

# bootctl --path=/boot install

マイクロコードをインストールします。CPUの製造元(IntelもしくはAMD)に応じてどちらかをインストールしてください。

# pacman -S intel-ucode
# pacman -S amd-ucode

ブートローダの設定ファイル/boot/loader/loader.confを必要に応じて変更します。パースエラーを引き起こすので、行末のコメントはファイルに含めないでください。

# nano /boot/loader/loader.conf
/boot/loader/loader.conf
default         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.conf
/boot/loader/entries/arch.conf
title   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.conf
/boot/loader/entries/arch-fallback.conf
title   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
/etc/pacman.d/hooks/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
/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 USERNAME

USERNAMEのパスワードを設定します。

# passwd USERNAME

visudoで/etc/sudoersの"%wheel ALL=(ALL) ALL"をアンコメントします。

# EDITOR=nano visudo

USERNAMEでログインし直します。

# su USERNAME

  1. ブロックデバイスは複数の区画に分割できます。その区画をパーティションといいます。 ↩︎

  2. 基本パーティションの1つを拡張パーティション(Extended Partition)に指定すれば、その中にいくつでも論理パーティション(Logical Partition)を作成できます。ただし拡張パーティションにはOSをインストールできません。 ↩︎

  3. LUKSの上にLVMを構築した場合、デバイスをまたいでLVMを使用することができなくなるので注意してください。 ↩︎