2015年2月8日日曜日

Arch Linux インストール(OSインストール編)| UEFI, GPT, XFS, archlinux-2015.02.01-dual.isoでインストール

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

はじめに
2014年にインストールした頃と微妙に変わっているところがある。大きな変更は、インストールメディアからArch Linuxを立ち上げるときに、UEFIモードではセキュアブートで立ち上げるようになっている。そのため、インストール前に新たな作業が加わっている。あと、Intel CPUのucodeのあたりも変わっている。

今回のインストールは、UEFIで行う。前回2014年に行った時は、UEFIモードでインストールはできたがその後のブートディスクのつなぎ変えでOSを起動できなくなった。そのため、UEFIでインストールしたArch Linuxの使用は諦めていた。

今回、いじってみたらUEFIで起動できなくなっていた原因がわかったので、まとめておく。UEFIモードの起動にはUEFI BIOSの設定が必要だが、使っているマザーボードに依存するので、Arch Wikiに詳しい設定が載ってなく苦労した。

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

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

Arch Linuxのインストール
isoファイルからイメージディスクを作成
https://www.archlinux.org/download/にあがっているミラーサイトから、archlinux-2015.02.01-dual.isoをダウンロードし、イメージディスクとして書き込む。Linuxの書き込みソフトのbraseroを使えば、イメージディスクを作成できる。braseroを使う場合は、「イメージの書き込み」から、「書き込むディスクイメージの選択」でダウンロードしたarchlinux-2015.02.01-dual.isoを選んで、書き込む。これでインストールメディアが出来上がる。




UEFI BIOSの設定など
作成したインストールメディアからArch Linuxを立ち上げる前に、UEFI BIOSの設定を変えておく必要がある。それぞれのMBによって設定の仕方が異なると思うので、説明書等を読んでUEFIでLinuxを立ち上げるのに必要な設定を調べる。以下は、現在使用しているASUS P8 Z77-M PROの場合。

とりあえず、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 Mode Selection→AHCI。






Secure Bootモードの解除
Arch LinuxでSecure Bootモードを有効にしてインストールしてみたが、インストール後にOSの認証ができてないようだった。結局Secure Bootは最初から無効にしておいたほうが良さそう。余談として、Secure Bootを有効にしたときどうなるか書いておく。

デフォルトではSecure Bootは有効になっている。Secure Bootを有効にしたままUEFIモードで起動した場合、認証されてないコードが実行されることになるので、以下のような警告が表示される。この時は、Nを3回ぐらいタイプするとブートはできたりする。
The system found unauthorized changes on the firmware, operating system or UEFI drivers.

Press [N] to run the next boot device, or enter directory to BIOS Setup if there are no other boot devices installed. Go to BIOS Setup > Advanced > Boot and change the current boot device into other secured boot devices.
さらに、この状態でインストールメディアを起動した時に以下のようなメッセージが出てHashToolが起動する。
Failed to Start loader... I will now execute HashTool
この場合は、[OK]を選択して、Enroll Hash→/Loader.efi→Yesを選択。さらに、Enroll Hash→../→./archiso→vmlinuz-efi→Yesを選択してarchisoをSecure Bootする。結局Secure Bootしても、インストールが完了した後で"The system found unauthorized changes..."のメッセージがでてしまったので、最初から無効にしておいて良いと思う。

本題に戻る。Secure Bootを無効にするには、Bootのタブ→Secure Bootをクリック→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をクリック→Launch CSM→Enableにする。デフォルトでEnableになっている。





Bootモードの設定
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のインストール
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のプロンプトが立ち上がる。



プロンプトが表示されたら、EFIモードで起動したか確認する。EFIモードで起動している場合は、/sys/firmware/にefiというディレクトリが存在する。
# ls /sys/firmware/

acpi/ efi/ memmap/

もし、EFIモードで起動していなかったら、UEFI BIOSの設定などを見直す。EFIモードで起動していることが確認できたら、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

ドライブのパーティショニング
以前使用してたドライブへインストールする場合は、以下のコマンドでドライブの既存のパーティションを消しておく。sdXはsda等に変更する。基本的にArch Linuxをインストールしたいドライブしか繋いでいないのであれば、sdaになる。
# sgdisk --zap-all /dev/sdX

UEFI起動するため、パーティショニングはGPTで行う。gdiskを使ってパーティショニングすれば、GPTで行われる。自分のブートドライブ(256 GBのSSD)のパーティションの構成は以下のようにした。

/dev/sda1: UEFI System Partition (/bootとしてマウント、512 MB)
/dev/sda2: swap (32 GB)
/dev/sda3: / (64 GB)
/dev/sda4: /home (残りの領域)

コマンドは以下のとおり。
# gdisk /dev/sdX

Command (? for help): o (新しいパーティションテーブルを作る)
Command (? for help): 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
Do you want to proceed?: Y

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のサーバーを一番上に持ってくる。
# 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で、baseとbase-develをインストールする。
# pacstrap /mnt base base-devel

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 -s /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
#

#<ip-address> <hostname .domain.org=""> <hostname>
127.0.0.1 localhost.localdomain localhost 任意のホストネーム 
::1  localhost.localdomain localhost 任意のホストネーム

# End of file
</hostname></hostname></ip-address>

ネットワーク接続の設定をする。有線でDHCPの回線がひとつ繋がっているだけの時は、以下の通り。
# systemctl enable dhcpcd.service

pacmanを設定する。必要であれば、/etc/pacman.confの[multilib]とInclude = /etc/pacman.d/mirrorlistのコメントアウトを解除する。そして、pacman -Syyでデータベースをアップデート。[multilib] リポジトリを有効にすることで、64ビット環境の Arch Linux で32ビットアプリケーションの動作・ビルドができるようになる。自分は、32ビットアプリケーションを使っていないので、[multilib]はコメントアウトしたままにしている。
# vi /etc/pacman.conf

...
[multilib]
Include = /etc/pacman.d/mirrorlist
...

# pacman -Syy

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

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

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

ブートローダ(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

reboot直後、CDを取り出し、UEFI BIOSで、Boot PriorityをUEFIのArch Linuxをインストールしたブートドライブに変更しておく。



2014年にインストールしたときは、ことあとドライブを繋ぎ変えて非UEFIのOSを起動すると、その後UEFI OSが入ったドライブにつなぎもとどした時にOSが起動しなくなる現象に陥った。このとき、以下のようなメッセージがでてUEFIのOSが検出されなくなってしまう。
Reboot and Select proper Boot device or Insert Boot Media in selected Boot device and press a key

さらに、PCのリセットボタンを押してPCを再起動して、UEFI BIOSに入ろうとしてDelキーやF2キーを押してもUEFI BIOSに入れないというどうしようもない状態にはまった。そして、今回もUEFIモードのインストールに挑戦してみて、同じ状況にはまった。

色々もがいた結果、この状態は、非UEFI OSの入ったドライブにつなぎ替えて非UEFI OSを起動したことにより、Boot Priorityが変わって非UEFI OSが優先的に起動されるようになってしまったことが原因と分かった。ただし、この状況に陥ってからドライブのBoot Priorityを変えようとしてもUEFI BIOSに入れないため、Boot Priorityを変えようにも変えられない。

さらに色々もがいた結果、UEFI BIOSに入るための裏ワザを見つけた。Arch Linuxを焼いたインストールメディア(別にArch Linuxでなくてもブータブルなものなら何でも良いと思う)をDVDドライブにセットしておくと、PC起動直後にDelキーを押してUEFI BIOSに入れることがわかった。この方法でUEFI BIOSに入ってから、UEFI OSをインストールしたドライブのPriorityを上げれば、元通りにUEFI OSを起動できるようになる。



DelキーでUEFI BIOSに入れなくなるのは、おそらくASUSのUEFI BIOSのバグだと思う。ちなみに、UEFI BIOSは最新のバージョンに更新してある。このバグのせいで、Arch Linuxをインストールした後も、Arch Linuxを焼いたCDが手放せないw


参考:
[1]Beginners' guide

スポンサーリンク

スポンサーリンク


関連コンテンツ


この記事をシェアする

0 件のコメント:

コメントを投稿