2016年3月20日日曜日

Arch Linuxインストール (OSインストール編)| UEFI, GPT, XFSを使用してインストール

インストール関連記事
インストール関連記事はArch Linuxインストールのページにまとめてあります。それぞれ好みのインストールモードに合わせて参照してください。

はじめに
Arch Linuxのインストール方法をまとめておく。以下の構成でインストールした。最近、多くのディストリビューションで採用されている、UEFIモード、GPTパーティション、XFSフォーマットで行った。
  • OS: Arch Linux x86_64
  • イメージファイル: archlinux-2016.03.01-dual.iso
  • インストールメディア: DVD
  • インストールモード: UEFIモード
  • パーティショニング: GPT
  • パーティショニングツール: gdisk
  • ストレージフォーマット: XFS
  • ネットワーク接続: DHCP(LANケーブル接続)
  • ブートローダ: GRUB

UEFIモードとは
UEFIはBIOSの代替で、最近のマザーボードはBIOSの代わりにUEFIが入っている。UEFI BIOSとも呼ぶ。今までBIOSと呼ばれてきたものだが、ここではできるだけ「UEFI BIOS」と呼ぶようにする。

セキュアブートが可能になったりして、BIOSより高機能なファームウェアになっている。基本的にBIOSモードよりUEFIモードのほうが、高速で起動できるらしい。Arch Linuxの場合、BIOSモードでも起動時間が短いので、UEFIモードにしたからといって起動が早くなったとはあまり感じないが。

セキュアブートとは
ブートローダなどが、OSが起動する前にマルウェアを起動してしまうことなどを防ぐ仕組み。UEFIにおいてセキュアブートが有効になっていると、Microsoftの署名をもったコードしか実行できなくなる。ArchWikiでもセキュアブートは無効にすることが推奨されているため、セキュアブートは無効にしてインストールする。

環境
今回インストールを行ったのは、以下のようなハードウェアで構成したデスクトップPC。
  • MB: ASUS P8Z77-M PRO (BIOS Version: 2105)
  • CPU: Intel i7 3770S
  • Graphics: Intel i7 3770S (Intel HD Graphics 4000)
  • Storage: Crucial m4 CT512M4SSD2
  • Memory: CFD W3U1333F-8G x2
  • Network: UTPケーブル(LANケーブル)接続

インストールメディアの作成とUEFI BIOSの設定
イメージファイルからインストールメディアを作成する
Arch Linux JP Project - ダウンロードに載っている、日本のサーバー(jaist.ac.jp、またはtsukuba)からイメージファイルをHTTPでダウンロードする。今回インストールを行った時は、ファイル名が「archlinux-2016.03.01-dual.iso」であった。

次に、取得したファイル使って、イメージディスクを作成する。Linuxの書き込みソフトのBraseroを使えば、簡単にイメージディスクを作成できる。Braseroからイメージディスクを作成する場合は、「イメージの書き込み」を選択し、「書き込むディスクイメージの選択」をクリックし、ダウンロードした「archlinux-2016.03.01-dual.iso」を選んで、書き込みを実行する。これでインストールメディアが出来上がる。




「archlinux-2016.03.01-dual.iso」のファイルサイズが大きくなっており、700 MBのCDには収まりきらなかったため、DVDに書き込みを行った。

UEFI BIOSの設定など
作成したインストールメディアからArch Linuxを立ち上げる前に、UEFI BIOSの設定を変えておく必要がある。それぞれのマザーボードによって設定の仕方が異なるが、使用しているマザーボードの説明書等を読んで、以下の説明に相当する設定方法を調べればよい。今回使用するASUS P8 Z77-M PROを例にとって、以下説明する。

まず、UEFI BIOSの設定を変えるために、UEFI BIOSのAdvanced Modeに入る。ただし、UEFIの設定が終わったらDVDドライブからArch Linuxを起動するので、UEFI BIOSの設定を変更する前にインストールメディアをDVDドライブにセットしておく。

手順としては、「PC電源ON」→「すぐにDVDドライブを開けてインストールメディアを入れる」→「Delキー」→UEFI BIOSの設定画面になるので、画面左下の「Advanced Mode」をクリック、となる。



SATAデバイスをAHCIモードに設定
SATAデバイスのモードにはレガシーなIDEモードと、新しいAHCIモードがある。UEFI起動するにはSATAはAHCIモードでなければならない。RAIDを組んでいるんであれば、RAIDでもよい。

基本的にはデフォルトでACHIになっているはず。設定は、「Advancedのタブ」→「SATA Configuration」をクリックして、「SATA Configuration」メニューに移る。



「SATA Mode Selection」の項目を「AHCI」とする。デフォルトで、「AHCI」となっていた。



Secure Bootモードの解除
ArchWikiでは、セキュアブートを解除してArch Linuxをインストールすることが以下のように推奨されているため、セキュアブートは無効にする。
Arch Linux のインストールメディアは現在 Secure Boot をサポートしていますが、ユーザーが手動で起動時に HashTool をセットアップするように設定する必要があります。Arch Linux を起動する前に UEFI Secure Boot を無効化することが推奨されます。Secure Boot を無効にしても Windows 8/8.1 は問題なく起動できます。
セキュアブートを無効にするには、「Bootのタブ」→「Secure Boot」をクリックしてSecure Boot menuに入る。



「OS Type」の項目を、「Other OS」に変更する。「Other OS」という表記だが、Secure Boot OFFの意味。デフォルトでは、Windows UEFI modeになってSecure BootがONになっていた。



CSMモードを有効にする
Secure Bootを無効にした時は、 Compatibility Support Module (CSM) を有効にしておいた方がよい。CSMを有効にしておくことで、UEFIドライバーを持たないデバイスとの互換性を向上させることができる。

「Bootのタブ」を選び、「CSM」をクリックしてCSMの設定ページに移る。



「Launch CSM」の項目を「Enable」にする。デフォルトでEnableになっていた。



設定の保存とインストールメディアの起動
UEFIモードで起動するには、BootデバイスをUEFIデバイスに設定しておかなければならない。設定は、BootのタブからBoot Option Properties→Boot Option #1→UEFI OS (インストールメディアを入れた光学ドライブ名)に変更。#2以降の順番は重要ではない。



これで設定は終わったので、Exit→Save Changes and Resetして、光学ドライブからArch Linuxを起動させる。もし、光学ドライブからArch LinuxがUEFIモードで起動しなかった場合は、Boot Menuから直接インストールメディアを入れたデバイスを選択する。



Arch Linuxのインストール
Arch Linuxインストーラーの起動とログイン
UEFI BIOSを抜けて、UEFIモードのDVDからの起動が始まると以下のようなブートメニューがでてくる。Arch Linux archiso x86_64 UEFI CDを選択する。

Arch Linux archiso x84_64 UEFI CD
UEFI Shell x86_64 v1
UEFI Shell x86_64 v2
EFI Default Loader
Reboot Into Firmware Interface




rootで自動ログインしたarchisoのプロンプトが立ち上がる。



プロンプトが表示されたら、UEFIモードで起動したか確認する。UEFIモードで起動している場合は、/sys/firmware/にefiというディレクトリが存在する。もし、UEFIモードで起動していなかったら、UEFI BIOSの設定などを見直す。
# ls /sys/firmware/

apci dmi efi memmap

UEFIモードで起動していることが確認できたら、OSのインストールに進む。使用しているキーボードに合わせて、キーボードレイアウトを設定する。
# loadkeys jp106

次にインターネットの接続を確認する。基本的にDHCPが起動しているので、有線でDHCPの場合は何も設定はいらない。pingがgoogleに通るか一応確認する。
# ping -c3 google.com

PING google.com (173.194.38.2) 56(84) bytes of data.
64 bytes from kix01s03-in-f2.1e100.net (173.194.38.2): icmp_seq=1 ttl=51 time=21.2 ms
64 bytes from kix01s03-in-f2.1e100.net (173.194.38.2): icmp_seq=2 ttl=51 time=20.6 ms
64 bytes from kix01s03-in-f2.1e100.net (173.194.38.2): icmp_seq=3 ttl=51 time=20.8 ms

--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 20.672/20.896/21.204/0.280 ms

ドライブのパーティショニングの準備
どのドライブにインストールすべきか、lsblkで確認する。基本的には、インストール対象のドライブ以外はPCから外しておいた方が良い。以下のように表示されるので、ボリュームのサイズ等を確認して対象のドライブか確認する。ここでは、sdaがインストール対象のドライブとわかる。
# lsblk | grep -v "rom\|loop\|airoot"

NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                     8:0    0    512G  0 disk
└─sda1            8:1    0    512G  0 part

以前使用してたドライブへインストールする場合は、以下のコマンドでドライブの既存のパーティションを消しておく。

以降sdXのような表記を使うが、適宜インストール対象のデバイスの名前(sda等)に変更する。Arch Linuxをインストールしたいドライブしか繋いでいないのであれば、sdaになる。
# sgdisk --zap-all /dev/sdX

UEFI起動するため、パーティショニングはGPTで行う。扱えるディスクの容量は、MBR が 2TB であるのに対して、 GPT は 8ZBであったり、GPT では標準で 128 個のパーティションエントリがあり、基本パーティション・論理パーティションといった区別はない、などの点でMBRと大きく異なっている。

ドライブのパーティショニングの構成
今回のブートドライブ(512 GBのSSD)のパーティションの構成は以下のようにした。

パーティションフォーマット用途マウントポイント容量
/dev/sda1FAT32UEFI System Partition/boot512 MB
/dev/sda2swapswap領域32 GB
/dev/sda3XFSrootディレクトリ/64 GB
/dev/sda4XFS一般ユーザのhomeディレクトリ/home残りの領域

・/bootとUEFI System Partitionについて
UEFIからの起動に必要なファイルは/boot/EFI以下に保存されるため、UEFI System Partitionは/boot/EFIにマウントしてもよいが、Arch Linuxでは/bootにマウントすることが推奨されている。理由は以下の通り。
systemd-bootが自動的にアップデートされるように EFI System Partition は /boot にマウントすることを強く推奨します。(*systemd-bootはGRUBとは別のブートローダ)

ビギナーズガイド - ArchWiki
ノート: 他のファイルシステムのドライバーを含んでいない UEFI ブートローダーを使用してブートする場合、ESP は /boot にマウントすることが推奨されます。例えば EFISTUB や gummiboot などのローダーが該当します。

パーティショニング - ArchWiki

・スワップ領域について
念の為、スワップ領域は「メモリの2倍」の32 GB確保している。ハイバーネートを使用する可能性がない場合は、より小さい領域で良いと思う。以下、ArchWikiより。
歴史的に、物理メモリの容量の2倍のスワップパーティションを用意するべきという一般法則がありました。より大容量のメモリがコンピュータに積まれるようになり、この法則はすでに現状にあてはまりません。メモリが 512 MB 以下のマシンでは、2倍ルールが基本的に適合します。大容量のメモリ(1024MB 以上)を積んでいるときは、スワップパーティションは小さく、または作らなくてもかまわないでしょう。2GB 以上の物理 RAM を持っているなら、スワップパーティションがないほうが一般的に良いパフォーマンスを発揮すると思われます。
ノート: スワップパーティション・ファイルにハイバネートするつもりならば、サスペンドとハイバネート#スワップパーティション(ファイル)のサイズについてを見てください。

パーティショニング - ArchWiki

ドライブのパーティショニング
以下のように、gdiskでパーティショニングを行う。gdiskを使ってパーティショニングすれば、自動でGPTでパーティショニングが行われる。

gdiskを起動して、gdisk内で対話形式でパーティショニングの設定をする。「?」を入力すれば、使用可能なコマンドを調べられる。
# gdisk /dev/sdX

GPT fdisk (gdisk) version 0.8.6

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries.

Command (? for help): o  (oで、新しいパーティションテーブルを作る)
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y (yで進む)

Command (? for help): n (nで、新しいパーティションを作る)
Partition number : 1
First sector: (デフォルトで2048から始まるようになっているので、何も入力せずにエンター)
Last sector: +512M
Hex code or GUID: ef00  (UEFI System partition用のパーティションなのでef00にする)

Command (? for help): n
Partition number: 2
First sector: (何も入力せずエンター)
Last sector: +32G
Hex code or GUID: 8200 (swap用は8200)

Command (? for help): n
Partition number: 3
First sector: (何も入力せずエンター)
Last sector: +64G
Hex code or GUID: (何も入力せずエンター、デフォルトが8300)

Command (? for help): n
Partition number: 4
First sector: (何も入力せずエンター)
Last sector: (何も入力せずエンターで、残りの領域すべてを使用)
Hex code or GUID: (何も入力せずエンター)

Command (? for help): w (wで、書き込みに移る)
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed?: y (yで、書き込み実行)
OK; writing new GUID partition table (GPT) to /dev/sda.
The operation has completed successfully.

UEFI起動の場合は、MBRのとき必要であったブートフラグなどはつけなくてよい。というか、GPTのパーティショニングにはブートフラグというものが存在しない。UEFIモードではUEFI System PartitionにあるブートローダーをUEFI BIOSが自動で見つけて、起動してくれる。

ドライブのフォーマット
以下の形式でフォーマットする。
  • /dev/sda1: FAT32
  • /dev/sda2: swap
  • /dev/sda3: XFS
  • /dev/sda4: XFS

以下のコマンドでフォーマットできる。XFSでフォーマットできないとかエラーが帰ってきたら、mkfs.xfs -m crc=1 -f /dev/sdX3のように、-fオプションをつけてフォーマットする。
# mkfs.fat -F32 /dev/sdX1
# mkswap /dev/sdX2
# swapon /dev/sdX2
# mkfs.xfs -m crc=1 /dev/sdX3
# mkfs.xfs -m crc=1 /dev/sdX4

フォーマットできたら、以下の通りマウントする。順番を変えないように注意する。
# mount /dev/sdX3 /mnt (ルートパーティション(ここではsdX3)を、/mntにマウントする)
# mkdir /mnt/home
# mount /dev/sdX4 /mnt/home
# mkdir /mnt/boot
# mount /dev/sdX1 /mnt/boot

Arch Linux環境の構築
/etc/pacman.d/mirrorlistでjaist、またはtsukubaのサーバーを一番上に持ってくる。
# vi /etc/pacman.d/mirrorlist

##
## Arch Linux repository mirrorlist
## Sorted by mirror score from mirror status page
## Generated on 2015-01-01
##

## Score: 2.4, Japan
Server = http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch
## Score: 0.3, Germany
...

pacstrapで、linuxカーネル、base、base-develをインストールする。
(※2019年10月に「baseがパッケージ化」され、多くのパッケージが除外された。以下のコマンドでは、「baseのパッケージ化」以前にインストールされていたパッケージを含めてインストールしている。もし、いらないパッケージがある場合は除いても良い。)
# pacstrap /mnt linux base base-devel cryptsetup device-mapper dhcpcd e2fsprogs inetutils jfsutils linux-firmware logrotate lvm2 man-db man-pages mdadm nano netctl perl reiserfsprogs s-nail sysfsutils texinfo usbutils vi xfsprogs

fstabを生成する。
# genfstab -U -p /mnt >> /mnt/etc/fstab

/mntにchrootする。
# arch-chroot /mnt /bin/bash

localeを設定する。/etc/locale.genのなかの、en_US.UTF UTF-8とja_JP.UTF UTF-8のコメントアウトを解除する。
# vi /etc/locale.gen

...
#en_SG ISO-8859-1  
en_US.UTF-8 UTF-8  ←#を削除。
#en_US ISO-8859-1  
...
#ja_JP.EUC-JP EUC-JP  
ja_JP.UTF-8 UTF-8   ←#を削除。
#ka_GE.UTF-8 UTF-8 
...

locale-genでlocaleを生成する。
# locale-gen

locale.confを作成する。ただし、システムのインストールが終わって、Xと日本語フォントをインストールしたら、ja_JP.UTF-8に変更する。
# echo LANG=en_US.UTF-8 > /etc/locale.conf
# export LANG=en_US.UTF-8

キーマップを変更。
# loadkeys jp106

また、/etc/vconsole.confにも、KEYMAP=jp106と記入しておく。
# vi /etc/vconsole.conf

KEYMAP=jp106

タイムゾーンを設定する。
# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# hwclock --systohc --utc

ホストネームを設定する。「任意のホストネーム」は、つけたいホストネームに置き換える。
# echo 任意のホストネーム > /etc/hostname

/etc/hostsにもホストネームを追加する。
# vi /etc/hosts

#
# /etc/hosts: static lookup table for host names
#

#  
127.0.0.1 localhost.localdomain localhost 任意のホストネーム 
::1  localhost.localdomain localhost 任意のホストネーム

# End of file

ネットワーク接続の設定をする。有線でDHCPの回線がひとつ繋がっているだけの環境では、以下のようにsystemdのdhcpcdユニットを有効にすれば良い。
# systemctl enable dhcpcd.service

ルートパスワードを設定する。
# passwd

pacman -Syyで、pacmanのパッケージデータベースをアップデートしておく。
# pacman -Syy

Intel製のCPUを使っている場合は、Intelのマイクロコードのアップデートを有効にするために、intel-ucodeをインストールする。
# pacman -S intel-ucode

AMDのCPUを使っている場合は、AMDのマイクロコードをインストールしておく。
# pacman -S amd-ucode

ブートローダをインストールする前に、EFI System Partition を操作するための dosfstools パッケージと、.efiブータブルスタブを作成するためのefibootmgrをインストールしておく。
# pacman -S dosfstools efibootmgr

ブートローダ(GRUB)をインストールする。ArchWikiでは、軽量なsystemd-bootが推奨されているようだが、ここでは、より広く使われているGRUBを使用する。
# pacman -S grub
# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=arch_grub --recheck

さらに、/boot/EFI/bootにもブータブルスタブを作成しておく。
# mkdir /boot/EFI/boot
# cp /boot/EFI/arch_grub/grubx64.efi /boot/EFI/boot/bootx64.efi

grub.cfgを作成する。
# grub-mkconfig -o /boot/grub/grub.cfg


設定はこれで終わりなので、再起動する。
# exit
# umount -R /mnt
# reboot

再起動したらOSが立ち上がる前にUEFI BIOSに入り、以下のように、Boot Priorityの最上位を、Arch Linuxをインストールしたブートドライブ(UEFI)に変更する。



UEFI BIOSの設定を保存して、抜け出したら、UEFIモードでArch Linuxが起動に移る。GRUBが起動しデフォルトの「Arch Linux」を選択する。以下のようなプロンプトが出てくれば、成功。

Arch Linux バージョン-ARCH (tty1)
ホスト名 login:






参考:
[1]ビギナーズガイド - ArchWiki

スポンサーリンク

スポンサーリンク


関連コンテンツ


この記事をシェアする

2 件のコメント:

  1. ハマってましたが,この記事のおかげで無事に起動できました
    ありがとうございました

    返信削除
    返信
    1. お役に立てたようで、何よりです。
      他にも設定関連の記事など書いてますので、参考にしていただければ幸いです。

      削除