UEFIでGentooとWindowsのデュアルブート環境を構築する

#はじめに
学校でGentooを布教しようとするとかならずといっていいほど
「でも、難しいんでしょ？」と聞かれますがそんなことは無いよって話しです。
##インストールメディアの準備
[こ↑こ↓](https://www.gentoo.org/downloads/)からアーキテクチャに合せた*Minimal Installation CD*のISOイメージをダウンロードしてきます。
Minimal CDではUEFIブートできないようなのでUEFIブートできるUSBメモリを作成します(Rufusというソフトを利用しました)。
##パーテーション
「間違えてWindowsのパーテーションを消しちゃいそう」などという意見があったので先にWindowsからGentoo用のパーテーションを作っておきます。
Windowsで「ディスクの管理」を起動します。
Cドライブを縮小するなどして/とswapにするために二つのパーテーションを用意します。このとき、作成したパーテーションはフォーマットせずドライブレターを割り当て無いようにします。
#起動
準備がととのったら起動しましょう。
boot:というプロンプトが出たらgentooで起動できます。
起動中、唐突にキー配列をきかれるので指示に従ってください。英語キーボードならそのままで大丈夫です。
#ネットワーク設定
##有線接続
LANケーブルが刺さっていれば自動的に繋っていると思います。
##無線接続
最近はEthernetポートが無いPCも増えていますね、その場合はwifiを利用しましょう。
`# ifconfig`でデバイスが認識されているか確認しましょう。
認識されていれば*wl~*みたいな名前になっていはずです。
次に`# wlist wl~ scan | grep ESSID`でアクセスポイントを探します。
アクセスポイントが見付かったら
`# wpa_passphrase "essid" "パスフレーズ" > hoge.conf`で設定ファイル作って
`# wpa_supplicant -i wl~ -D wext -c hoge.conf`で接続できます。
##接続の確認
接続できたら
`# ping www.gentoo.org`で接続の確認をします。
#ファイルシステムの作成
下準備で用意したGentoo用のパーテーションをフォーマットします。
`# mkfs.ext4 /dev/sdax`(sdaxの部分は各自置き換えてください)
次にswapを作成します。
`# mkswap /dev/sday`
`# swapon /dev/sday`(sdayの部分は各自置き換えてください)
#パーテーションのマウント
先程のパーテーションをマウントします。
`# mount /dev/sdax /mnt/gentoo`
次にEFIのパーテーションをマウントします
`# mkdir -p /mnt/gentoo/boot/efi`
`# mount /dev/sda1 /mnt/gentoo/boot/efi`
#インストール
##stage3のダウンロード、展開
/mnt/gentooに移動し、wget等を利用してstage3のアーカイブをダウンロードしてきます。
`# tar -xvjpf stage3-amd64.tar.bz2`で展開します。
##chroot
`# cp -L /etc/resolv.conf /mnt/gentoo/etc/`でDNS情報をコピーしておきます。

`# mount -t proc proc /mnt/gentoo/proc`
`# mount --rbind /dev /mnt/gentoo/dev`
`# mount --rbind /sys /mnt/gentoo/sys`で/proc,/dev,/sysをマウントします。

`# chroot /mnt/gentoo /bin/bash`
`# source /etc/profile`
これで新しい環境の中に入ることができました。

##portageの導入
`# emerge-webrsync`
導入したらportageツリーを更新します。
`# emerge --sync`

`# eselect profile list`でprofileのリストが見れるので
`# eselect profile set 番号`で設定します。
##make.confの編集
make.confに以下を追加します

```bash:/etc/portage/make.conf
MAKEOPTS="-j4"
LINGUAS="en ja"
GRUB_PLATFORMS="efi-64"
```
MAKEOPTSはCPUにあわせて最適な値を設定してください。GRUBの設定は後で重要になるので注意してください。
また、必要に応じてUSEフラグを設定してください。
##fstab
fstabを書き換えます。

```bash:/etc/fstab
/dev/sda1		/boot/efi	vfat		noauto,noatime	1 2
/dev/sdax		/            ext4		noatime		    0 1
/dev/sday		none		swap		sw		        0 0
```

##カーネルコンパイル
今回はgenkernelを利用して自動でビルドします。
`# emerge gentoo-sources genkernel`
`# genkernel all`
/boot以下にカーネルが作成されています。
##パッケージのインストール
必要なパッケージをインストールしておきましょう。
`# emerge emacs`
また、ネットワーク周りのもの(dhcpcd,wireless-tools,wpa_supplicant)は今の内にインストールしておかないと後でネットに繋げなくて確実に詰みます。
##rootパスワードの設定,ユーザーの追加
`# passwd`でrootのパスワードを設定します。
一般ユーザーを追加します。
`# useradd -m -G users -s /bin/bash ユーザー名`
`# passwd ユーザー名`
##ローカライズ
タイムゾーンを設定します
`# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime`
ロケールを設定します

```bash:/etc/locale.gen
en_US.UTF-8
ja_JP.UTF-8
```
`# locale-gen`
英語キーボード以外のキーボードを利用している人は/etc/conf.d/keymapsを自分のキーボードにあわせて書き換えましょう。
#ブートローダーの設定
make.confにGRUB_PLATFORMS="efi-64"を書き加えていない人は先に書いておきましょう。
`# emerge grub efibootmgr`
`# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=gentoo_grub /dev/sda`
`# grub-mkconfig -o /boot/grub/grub.cfg`
#再起動
`# exit`でchrootから抜けます。
`# umount -l /mnt/gentoo/dev{/shm,/pts,}`
`# umount -l /mnt/gentoo{/boot/efi,/proc,}`
で、マウントを解除し、`# reboot`で再起動します

#おしまい