eeic学科民よ、Gentooを抱け！

この記事は [eeic （東京大学工学部電気電子・電子情報工学科）その2 Advent Calendar 2016](http://qiita.com/advent-calendar/2016/eeic2) の13日目の記事です。
昨日 (12/12) 分はnakachan94さん担当の[大学生活で死にたくなったときに](http://nakachan-misc.hatenablog.com/entry/2016/12/24/205144)です。明日 (12/14) 分は62_stormkさん担当の[弱者視点のEEICライフ（途中中断）](http://fkfkfkmaru.hatenablog.com/entry/2016/12/14/041638)です。
書き上げる頃にはすでに12/14になっていますがｷﾆｼﾃﾊｲｹﾅｲ。

[:pray::pray::pray:ナマステみなさんおはようございます](https://twitter.com/nawajyoti01)。みなさんは、PCのOS/ディストリビューションとして何を使っていますか？いつかの自己紹介のときにGentoo Linuxと言ったらドン引きされたマンです。
でも、言うほどGentoo Linuxってドン引きするようなものじゃなくね？みたいな気持ちを胸に、この記事を書いています。

# Gentoo Linuxってなによ

[公式サイト](https://www.gentoo.org/)によれば、

> Welcome to Gentoo, a flexible, source-based Linux distribution that becomes just about any system you need—and much more.

超意訳すると、あなたが必要とするようなシステムになる、フレキシブルLinuxディストリビューションです。

重要な特徴は、ソースベースであること、つまり、**基本的には**使うPCでコンパイルを必要とするディストリビューションだということです。
この一文だけでうわあとなる人が多いようですが、ビルド自体はUbuntuのような主要ディストリビューションでも (ビルドサーバーが肩代わりする形で) 行われているものです。それをローカルでやって何が変わるというのでしょうか？

# そんなことして何が楽しいのさ

## 軽い
ぼくの一世代前のPCは増設後メモリ2GBのAthlon 64 X2のような名前のCPUでしたが、Windows Vistaがプリインストールされていて、みなさんだったら想像は付くと思うのですが、重くて使い物にしたくようなPCでした。
そこで、少しでも軽くしようとしてUbuntu Linuxを入れたのですが、それでもeclipseを動かすと普通に重い。
じゃあということで導入したのがGentoo Linuxでした。重量系で噂のGNOME3を入れても驚きの軽さ [^1]。eclipseも ~~ある程度~~ スイスイ動く。基本的人権を確保した瞬間でした。

Gentoo Linuxでは、USE flagというしくみで本当に必要な機能のみを導入することができるので軽くしやすいです [^2]。

## Linux力や問題解決能力が身につく
UbuntuだとTUIやGUIである程度設定してくれたりしますが、Gentooは自分で必要なものをインストールするタイプなので、この機能にはこういう名前のソフトウェアを使えばいいのだという知識が身につきやすい気がします。

ちなみに、普通に暮らしてたらGentooであっても引っかかりポイントはあまりないのですが、それでもたまに引っかかることが有ります。
その時は人脈やTwitterやぐぐるを駆使して問題解決を目指してみましょう。昨日の自分とは変われますよ？

## めんどくさくなったので箇条書きでまとめると、
### 利点
* (普段使用時のオペレーションは) 比較的軽い
* Linux力、CLI力、問題解決能力のような (学科民にとっては) 将来必要になるであろう能力を実践的に身につけることができる
* firefox-bin, libreoffice-binのようなバイナリパッケージも一部存在する
* Ubuntuよりもパッケージのバージョンが新しいことが多い
* 新しいことが多い割に最新のものを強制しないので、ある程度枯れていてなおかつバグの少なそうなバージョンを使用できる [^3]
* 暇な時期には無限に遊べる
* ビルド時の流れるコンソールを見て興奮できる

### 欠点
* ビルドが重い [^4]
* 他のパッケージのビルドに必要なヘッダファイルなどもインストールされるので他の有名ディストリよりもストレージ消費が大きい
* Linuxを全く触ったことのない人には厳しいかも
* 全てにおいて死ぬほど楽をしたい人には向かない
* パッケージマネージャーの依存解決が遅い [^5]
* 万が一ハマると大変
* (場合によっては) 若干の英語力とggる力が必要になる

といったところでしょうか (他にもある気がするけどぱっと思いつかない)

# Gentoo Linuxのインストール方法

基本的なインストールの仕方は[公式ハンドブック (AMD64版)](https://wiki.gentoo.org/wiki/Handbook:AMD64/ja)に譲ることにします。

ハンドブックはGentoo MinimalインストールCDを使用する形で書かれていますが、GUIを使用できるLiveDVDやUbuntu Install Diskを使用するほうが楽だと思います。

USEフラグの設定はめんどくさいのでflaggieをインストールして使用すると楽です。

## MacBookにインストールする
おそらく学科の大多数の人はどうせインストールするならWindows+Mac+Linuxのトリプルブートをしたいと思います \[要出典\]。
私が試したのは2014年3月頃に買った新品のMacBook AirとWindows 8.1なので、それ以外の時期に買ったものだったりWindows 10だと状況が違うかもしれませんが。
ちなみに、たぶんプリインストールされた最近のWindows機にインストールするより簡単だと思います。

MacでトリプルブートするならrEFIndという固定概念が有りましたが、なぜかrEFIndではWindowsが起動できませんでした。

しょうがないので、rEFIndを使わずに起動するように設定したところ、起動ディスク設定のメニューからGentooで再起動を選べたり、
![boot_os_selection.png](https://qiita-image-store.s3.amazonaws.com/0/92991/60766285-641c-c500-053d-80fd9b141fb0.png)
Altキーを押しながらPCを起動すると3つのOSから選べるようになりました
![2016-12-14 01.02.01.jpg](https://qiita-image-store.s3.amazonaws.com/0/92991/b611a6e4-b119-dac1-d601-81620cfe9952.jpeg)

私がトリプルブートをするときに参考にしたページは[Debian EFI mode boot on a Macbook Pro, without rEFIt][without-refit]です。Debianと書いてありますがLinuxならどれでもおっけーのはず。

(下の項を書いてて、ふと気がついてArchWikiを見に行ったら、[同じようなことが書いてありました](https://wiki.archlinuxjp.org/index.php/MacBook#bless_.E3.82.92.E4.BD.BF.E3.81.86)。ﾏｱｿｳﾃﾞｽﾖﾈｰ、一応残しておくことにします。

このページを参考に進めていきます。

まずは、MacなどでApple HFS形式でパーティションを作ります。あとで見分けがつくよう、名前をつけておくことをおすすめします。この記事中ではGentBootと呼ぶことにします。大きなサイズはいらないはずですが、512MB分用意しました [^7]。

Linux側でそのHFSパーティションの中にEFI向けブートローダーのファイルを置きます (作成方法は後で書く)。パスは一応似非ながらもEFIなので、(GentBoot)/boot/efi/EFI/gentoo/grubx64.efi にしました。

再起動して、Macに切り替えます。mactel-bootを使えばLinux上でできるっぽいですが、デフォルトのPortageレポジトリに見当たらなかったので……。再度Linuxに切り替えるためにはLinux CDから起動するなど面倒な手順が (おそらく) 必要になるので注意してください。

先のGentBootをマウントします。

```shell-session
# cd /Volumes
# diskutil list  # GentBootのIDENTIFIERを確認します。disk0s5として話を進めます。
# mkdir GentBoot
# diskutil mount -mountPoint /Volumes/GentBoot /dev/disk0s5
Volume GentBoot on /dev/disk0s5 mounted
# cd GentBoot
```

起動パーティションとして認識させるために、色々やっていきます。

```shell-session
# mkdir -p System/Library/CoreServices/
# ln EFI/gentoo/grubx64.efi System/Library/CoreServices/boot.efi
# echo 'This file is required for booting' > mach_kernel
```

下の内容で/Volumes/GentBoot/System/Library/CoreServices/SystemVersion.plistを用意します。

```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>ProductBuildVersion</key>
        <string></string>
        <key>ProductName</key>
        <string>Linux</string>
        <key>ProductVersion</key>
        <string>Gentoo</string>
</dict>
</plist>
```

blessコマンドを使用して起動パーティションとして認識させます。[おそらくEl Capitan以降は追加の処理が必要です](http://qiita.com/colajam93/items/4811659f8e6ae1981bb5)。blessだけ行い、Network Recovery Modeから起動ディスクの選択をしてもうまくいくっぽいです。

```shell-session
# bless --folder `pwd` --file System/Library/CoreServices/boot.efi --setBoot
```

オプションで、アイコンを設定します。Gentooのロゴでも萌えキャラでもなんでもいいので、128x128 (もっと大きくてもいいかもしれない) のicnsファイルを用意して、(GentBoot)/.VolumeIcon.icnsに置きます。pngファイルからnpmのpng2icnsとか[オンラインコンバータ][png2icns-online]を使うといいと思います[^8]。

[without-refit]: https://glandium.org/blog/?p=2830
[png2icns-online]: https://iconverticons.com/online/

## セキュアブートが有効になったプリインストールWindows機にインストールする
セキュアブートは死んでください [^6]

[Sakaki's EFI Install Guide/Configuring Secure Boot](https://wiki.gentoo.org/wiki/Sakaki%27s_EFI_Install_Guide/Configuring_Secure_Boot)を参照するといいかもしれません (試す環境がない……)

## 今あるOSを使いながらGentooを触ってみたいと言う方へ

仮想マシン生活も楽しいですが、Gentoo Prefixというものがあるので、それはそれで楽しくなれるかもしれません。ちなみに私はPrefixのインストールに成功したことがありません。

# まとめ

最後は駆け足になってしまいましたが、Gentooは楽しいですよ！ あなたもGentooしませんか？

[Gentoo Advent Calendar 2016](http://www.adventar.org/calendars/1493)や[Gentooの優れているところ](http://gnu.hatenablog.com/entry/2015/12/04/212213)も参照してみてください。

# 脚注
[^1]: 個人の感想です。
[^2]: もちろん全ての機能で取捨選択ができるわけではありません。
[^3]: 全てが最リリース新に追従しているわけではありませんが、一部のパッケージについてはgit HEADに追従することも可能です。
[^4]: distccやccacheを使えばある程度ビルド負荷を下げることは出来ます。
[^5]: 実際にはビルド時間のほうが長くなることが多いので無視できる。
[^6]: 死ねと言っていますがあくまで個人の感想です。
[^7]: Macでパーティションを作成するときの最小サイズなのか、そのサイズじゃないと成功しなかったか、は申し訳ありませんが記憶にありません
[^8]: YosemiteかMavericksには[Debian EFI mode boot on a Macbook Pro, without rEFIt][without-refit]のようにrsvg-convertやpng2icnsコマンドがあったはずなのですが、Sierraにはなさそうでした。