Linuxを日常的に使う実験ブログ

Gentoo LinuxをUEFI + GPT環境にインストールする

 2015-08-03

 2015-08-20

 Gentoo Linux

こんにちは。今回のテーマは『Gentoo LinuxをUEFI + GPT環境にインストールする』です。最近はUEFIシステムのマシンが増えてきてGentooもUEFIに対応した公式ハンドブックを更新しました。しかし、ほとんど英語であり、少々分かりづらい点もあると思います。今回は実際に行った作業に基づき、「そんなに難しくない」という点をお伝えできればと思います。 【関連記事】 Arch LinuxをUEFI + GPT環境にインストールする Slackware 14.1をUEFI + GPT環境にインストールする [adsense02] 【目次】 インストール環境と構築するシステム インストールメディアの準備と起動 ネットワークの準備 パーティショニングとファイルシステムの作成 システムファイルのインストール Gentooベースシステムの設定 カーネルの設定 システムの設定とローカライズ ブートローダの設定 システムの再起動

インストール環境と構築するシステム

<インストール環境>

CUP:AMD Phenom RAM:1 GB ブートシステム:UEFI ネットワーク:有線

<構築する予定のシステム>

アーキテクチャ:amd64(64bit) initシステム:OpenRC ブートローダー:Grub2

インストールメディアの準備と起動

Minimal CDではUEFIブートは出来ないのでUEFIシステムへのGRUBのインストールが出来ません。ここで選択肢は以下のようなものがあると考えられます。

  1. Live DVDを使用する
  2. Minimal CDからUEFI起動可能なUSBメモリを作成する
  3. SystemRescureCDなどのGentoo以外のメディアを用いる
  4. ブートローダ設定部分だけLive DVDを使用し、他はBIOSモードでMinimal CDを使用する

ここでは1番のUEFIブート可能なLive DVDを使用する前提で話を進めます。

LiveDVDの入手

公式ページからダウンロード出来ますが、直接のダウンロードは失敗する可能性があります。こちらのページから.torrentファイルをダウンロードしてTorrentを用いてダウンロードすることをオススメします。 ファイルをダウンロードしたら公式ページのハッシュと一致するか確認して正しいファイルをダウンロードしたか確かめます。

$ sha512sum livedvd-amd64-multilib-20140826.iso

LiveDVDの起動

LiveDVDはUEFIシステムで起動可能です。起動するとディスプレイマネージャーKDMが起動し、ログインする環境を選べますが、筆者としては日本語キーボードへの変更が容易なコンソールログインをオススメします。 CASE 1: Live DVDでコンソールログインする場合 電源ボタンを押して”console login”を選びます。これはGUI環境ではキーボードの日本語化に手間取るためです。コンソール環境の方が設定が容易であり、Minimal CDを用いる場合と同様の作業環境となります。 02 Minimal CDではキーボード選択画面がでますが、LiveDVDでは出ません。以下コマンドでキーボードを日本語に切り替えます。

$ loadkey jp106

CASE 2:Live DVDでGUIログインする場合 GUIデスクトップ環境でログインするとブラウザで情報を集めながら作業ができるメリットがあります。 03 しかし日本語キーボードへ変更を手動で行う必要があります。以下の操作をして下さい。

$ sudo su -

vim /etc/X11/xorg.conf.d/00-keybord.conf

以下のように修正

Option “XkbLayout” “us” ↓ Option “XkbLayout” “jp”

この設定後にログアウトして再ログインして下さい。日本語キーレイアウトへ変更されています。 これで準備は完了です。

ネットワークの準備

インストールは有線LANで行うことをオススメします。無線LANの構築はシステム構築後にトライするのが賢明かと思います。これより先は有線LANを前提に進めます。

ネットワーク接続確認

多くの場合はLive DVDのシステムが自動でネットワークデバイスを読み込み自動でネットワーク接続を行います。以下コマンドで接続有無を確認します。

ping -c 3 www.google.com

ping: unknown host

のエラーが出たら接続が確立されていません。 コチラを見ながら設定作業をしてください。

パーティショニングとファイルシステムの作成

パーティショニングにはgdiskがオススメ

UEFIブートではGPTを使うことが推奨されています。今回もGPTでパーティショニングをします。PartedはMBRとGPTに対応していますが、少々使い勝手が悪いです。筆者としてはGPTでパーティショニングをする場合はgdiskをオススメします。gdiskは以下コマンドで実行します。(OSをインストールするHDDがsdaの場合)

# gdisk /dev/sda

gdiskを起動したら以下のようにoでGPTのパーティションテーブルを作成します。(この作業で既存パーティションは全て削除されますので注意して下さい)

Command (? for help):o

ESP(EFI System Partition)の作成

UEFIブートをする場合はESPと呼ばれるFAT32でフォーマットされたパーティションを作成する必要があります。容量は512MB程度が推奨されています。

Command (? for help):n Permission number: 1 First sector : 何も押さずエンター Last sector : +512M Hex code or GUID : EF00

その他のパーティショニング

ESP以外は自由にパーティショニングして下さい。root,swap,home等のパーティションに分けるのが一般的です。今回はrootとswapのみ作成します。 swapパーティション(作成例)

Command (? for help):n Permission number: 2 First sector : 何も押さずエンター Last sector : +1G Hex code or GUID : 8200

rootパーティション(作成例)

Command (? for help):n Permission number: 3 First sector : 何も押さずエンター Last sector : 何も押さずエンター Hex code or GUID : 8300

今回はこのようなパーティションにしてみました。

sda 8:0 0 93.2G 0 disk ├─sda1 8:1 0 512M 0 part /boot ├─sda2 8:2 0 1G 0 [swap]
└─sda3 8:3 0 13G 0 part /

ファイルシステムとswapの作成

ESPのフォーマット

# mkfs.vfat -F32 /dev/sda1

Linuxファイルシステム(ext4)のフォーマット

# mkfs.ext4 /dev/sda3

スワップの作成と読み込み

# mkswap /dev/sda2

swapon /dev/sda2

パーティションのマウント

先ほど作成したパーティションをマウントしましょう。まずはルートからです。

# mount /dev/sda3 /mnt/gentoo

次にESPを/mnt/bootにマウントします。ESPの場所は後に重要になってきます。

# mkdir /mnt/gentoo/boot

mount /dev/sda1 /mnt/gentoo/boot

システムのインストール

日時の修正

まず日付を正確に合わせます。 <日時の確認>

# date

<日時の設定>

# date [MMDDhhmmYYYY]

stagetarballのダウンロードとインストール

# cd /mnt/gentoo

links http://www.gentoo.org/main/en/mirrors.xml

国内のミラーリンクを選択し releases/x86/autobuilds/ディレクトリに移動しstage3-i686-.tar.bz2をダウンロードします。ダウンロードは”d”を押せばOKです。 以下コマンドで展開します。

# tar -xvjpf stage3-i686-.tar.bz2

※オプション”p”はパーミッションの付加に必要なので省略しないこと

コンパイルオプションの変更

以下コマンドでmake.confを編集

# nano -w /mnt/gentoo/etc/portage/make.conf

筆者の場合はデフォルトの設定に以下を追加しました。特にGRUBの設定は後ほど重要になるので注意が必要です。

MAKEOPTS=“-j3” LINGUAS=“en ja” GRUB_PLATFORMS=“efi-64”

Gentooベースシステムの設定

公式ハンドブックではミラーリンクの設定をするようになっていますが、mirrorselectコマンドがうまく働かず、設定ファイルに反映されませんでしたので無視して進めます。

chrootする

<DNS情報のコピー>

# cp -L /etc/resolv.conf /mnt/gentoo/etc/

</procと/devファイルシステムのマウント>

# mount -t proc proc /mnt/gentoo/proc

mount —rbind /dev /mnt/gentoo/dev

mount —rbind /sys /mnt/gentoo/sys

もしsystemdを導入する場合は以下のコマンドも実行しておいて下さい。今回はOpen-RCのため割愛します。

# mount —make-rslave /mnt/gentoo/sys

mount —make-rslave /mnt/gentoo/dev

<新環境へのchroot>

# chroot /mnt/gentoo /bin/bash

source /etc/profile

export PS1=“(chroot) $PS1”

portageのインストール

CASE 1:emerge-webrsyncを使う こちらの方が公式ページで紹介されている方法であり、より簡単にportageを導入できるようになっています。以下コマンドを実行するだけです。

# emerge-webrsync

CASE 2:手動によるインストール ※CASE 1でemerge-webrsyncを実行した場合は不要です。 従来通り手動でportageのスナップショットをインストールする場合は以下の操作を行って下さい。

# cd /

links http://www.gentoo.org/main/en/mirrors.xml

国内のミラーリンクのsnapshots/ディレクトリに移動してportage-latest.tar.bz2をダウンロードします。 では展開しましょう。

# tar xvjf portage-latest.tar.bz2 -C /usr

portageシステムの設定

<portageツリーの更新>

# emerge —sync

<profileの設定> 以下コマンドで使用可能なprofile一覧が現れる

# eselect profile list

以下コマンドでprofileを変更する。

# eselect profile set [番号]

筆者は以下の設定にしました。

default-linux/amd64/13.0/desktop *

<USEフラグの設定> 利用可能なUSEフラグは以下コマンドで確認

# less /usr/portage/profiles/use.desc

以下コマンドでmake.confを修正

# nano -w /etc/make.conf

筆者の設定は以下のとおり(かなり適当です) 後にいくらでも修正可能なので気負わなくて大丈夫です。基本的にプロファイル設定時に基本的なフラグは設定されているので、追加するぐらいの気持ちで気楽にやりましょう。

USE “bindist x acpi alsa dbs dvd flac gimp git gtk gzip ogg wifi networkmanager java”

カーネルの設定

マニュアルでカーネルをビルドする場合

今回はマニュアルでコンフィギュレーションしました。 以下コマンドでカーネルをインストールしコンフィギュレーションメニューを開く

# emerge gentoo-sources

cd /usr/src/linux

make menuconfig

コンフィギュレーションについて具体的なことは書けないのですが、何回でもやり直せますのでハードの情報をよく調べて挑戦してください。デバイスに関する情報はlspciコマンドで得られます。特に注意すべき点はEFIのサポートに関する部分はチェックを漏らさないように注意して下さい。納得のいく設定ができたらカーネルをビルドしてインストールします。

# make && make modules_install

make install

genkernelを使って自動でカーネルをビルドする場合

※マニュアルでカーネルビルドした場合は飛ばしてOKです。 もしマニュアルでカーネルをビルドするのが面倒だったり自身がない場合も問題ありません。genkernelという自動ビルドツールがあります。genkernelを使う場合は次の章のfstabの作成を先に行ってから以下コマンドを実行して下さい。

# emerge —ask genkernel

genkernel all

/boot以下にkernel-から始まるカーネルが作成されています。

システムの設定とローカライズ

fstabの作成

以下コマンドでfstabを編集します。

# nano /etc/fstab

”boot”,“root”,“swap”の部分をそれぞれ”sda1,“sda3”,“sda2”に置き換えればOK。あと、注意しなければいけないのがbootのフォーマットですが、vfatに修正して下さい。

ネットワークの設定

ネットワークがシステム起動時に起動するように設定しておきましょう。 ネットワーク名はeth0とかenp0s3などが当てられていると思います。ifconfigで確認し、設定しましょう。 設定例

# cd /etc/init.d

ln -s net.lo net.enp0s3

rc-update add net.enp0s3 default

Rootパスの設定

以下コマンドでルートパスを設定します。

# passwd New password : ********

ローカライズ

ここの設定は後回しにしてもOKしてです。 コンソール環境のローカライズをしておきます。 <タイムゾーン> 日本国内に住んでる場合 手っ取り早いのは以下のようにコピーする方法です。

# cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

別の方法としては以下のようにemerge —configを使う方法があります。

# echo “Asia/Tokyo” > /etc/timezone

emerge —config sys-libs/timezone-data

<キーボードレイアウト>

# nano /etc/conf.d/keymap

以下のように修正

KEYMAP=“jp106”

<言語> /etc/locale-genの編集

# nano /etc/locale-gen

以下のように修正、あるいはコメントアウトを外す

en_US.UTF-8 ja_JP.UTF-8

以下コマンドを実行

# locale-gen

ブートローダの設定

公式ハンドブックではefibootmgrを使う方法が紹介されていますが、ルートパーティションを特定できずカーネルパニックを起こし上手く行きませんでした。ここではGRUBを導入する方法をオススメします。

Grub2のインストール

GrubのインストールはBIOSブートの時とは異なる点が多いので注意をして下さい。 #1 /etc/portage/make.confの編集

# nano /etc/portage/make.conf

以下のフレーズを追加します。既に追加済みの場合は結構です。

GRUB_PLATFORMS=“efi-64”

# grub2とefibootmgrのインストール

# mkdir -p /boot/efi

emerge grub efibootmgr

grub2-install —target=x86_64-efi —efi-directory=/boot —bootloader-id=gentoo_grub /dev/sda

このままではVirtualBox等のUEFIファームウェアではefiファイルが検出されません。以下のように/boot/efi/boot以下にbootx64.efiファイルを作成します。

# mkdir -p /boot/efi/boot

cp /boot/efi/gentoo_grub/grubx64.efi /boot/efi/boot/bootx64.efi

#3 GRUB設定ファイルの作成 以下コマンドで自動作成します。

# grub2-mkconfig -o /boot/grub/grub.cfg

カーネルのビルドがトラブルなく終わっていればここでカーネルが検出されるはずです。一つも検出されない場合は/bootディレクトリでlsで確認してください。

システムの再起動

以下コマンドを実行し、マウント解除と再起動を実行する。再起動時はMinimal CDを抜くのを忘れずに。

# exit cdimage ~# cd cdimage ~# umount -l /mnt/gentoo/dev{/shm,/pts,} cdimage ~# umount -l /mnt/gentoo{/boot,/proc,} cdimage ~# reboot

最後に

ひとまず、ここまでとします。お疲れ様でした。Arch Linux等でUEFIブートシステムに慣れている方にとってはお馴染みの方法だったと思いますが、BIOSブートに慣れている方には何やら面倒に感じられたかも知れません。Arch LinuxのようにGentooのminimal CDもUEFIブートに対応すればもう少し楽になるとは思うのですが。 [adsense]