32bitのポケットPCにGentooを入れてみたい人生だった (WIP

Macはいいんだが、度々思うことがある。
フルカスタムできるLinuxがほしい。
Archが良いんじゃないか？
32bitに対応してない。
Linuxはどこも64bitのみの配布に切り替わっていくらしい。

よしわかった。Gentooを入れよう(決意)。

ネタバレ:
途中で心折れてとまりました。いつか続きやる
手順としては終わっているので、初めて入れる場合の参考にはなるかもと思い投下。

# 環境
余ってるマシン

- VAIO Pシリーズ VGN-P90NS  
もともとVista入ってたポケットPC。
ポインティングデバイスはトラックポイント。いいゾこれ。

# インストール手順
手持ちのマシンが32bitだったため、基本的に[こちらの公式wiki](https://wiki.gentoo.org/wiki/Handbook:X86/Full/Installation/ja)の手順どおりにすすめていく。

なお、shellについてはプロンプトを `$` としているが、実際はrootユーザで行っているので、あしからず。

## インストールディスク用意
### iso拾ってくる
Gentooはビルドの段階に `Stage` というものがあり、本当にベースから組みたい人は `Stage1` からビルドするらしい。
よしわかった。ほとんど揃ってる `Stage3` でインストールしよう。(逃げ腰)

### USBメモリに焼く
このあたり曖昧なのだが、Vaio type P はUSBからの起動の際、MBR だとうまくいくようす。
このため、ディスクユーティリティからUSBをフォーマットする時、FAT の MBR でフォーマットしている。
母艦がMacなので、漢は黙って `dd`

```shell
$ diskutil list # USBらしきものを確認
# さっき見たN番を入れてアンマウント
$ diskutil unmountDisk /dev/diskN
# ifにはisoのパス、ofはdiskにr付き(RAW)で番号をいれる。
$ dd if=/path/of.iso of=/dev/rdiskN bs=4m
```

## ブート、初期設定
vaioはF2でBIOSが開いた。
USBメモリが優先的に読まれるように変える。

### 起動
どのカーネルでBootするか聞かれたので、F1で一覧を見せてもらい、
ひとまずgentooを選択。
ここでハードウェア類のオプションなんかをつけられる様子。まずつけないでなんとかしてみる。

この後、起動の最中に一瞬だけキーボード配列を確認されるタイミングがある。
ほっとくと勝手に進んでしまうので、JPと書かれた22番を指定。jisキーボードとして認識される。
**※22じゃなくなってる可能性あるので要確認**

ただ、できなくても後で設定ができるので、以下の通り編集。

```shell
$ vi /etc/conf.d/keymaps # エディタ初心者はnano使ったほうがいいかも

# 以下のように編集して保存
...省略...
keymap="jp106"
...省略...

$ rc-service keymaps restart
```

### ネットワーク設定

プロンプトが立ち上がったので `ifconfig` すると、無線LANアダプタが認識されていたので ~~`net-setup アダプタ名` で設定をすすめる。~~ 以下wpa_supplicantでの設定を参照。
~~SSIDを一覧で表示して、旦那様どれになさいます？なんてことはないので、
Macで接続している情報を元に、
SSID、セキュリティの種類、password、を入力して接続。
`ping -c 3 google.com` として疎通を確認する。
ただ、 `8.8.8.8` は飛ぶが、 `google.com` は飛ばない。~~

~~原因はipv6だった模様。~~ ipv6のせいではなかった。
wpa_supplicantで接続するとdhcpまでしっかり行い、ちゃーんとつながってくれた。
wpa_supplicantでの設定についてはArchWikiでかんたんな方法が書いてあるのでこちらでやる
https://wiki.archlinux.jp/index.php/Wpa_supplicant

最近のwifiはだいたいWPA2とかの暗号方式かと思うので、net-setupでは役不足。このあたりはArchwikiのネットワークの設定あたりがわかりやすいので参照のこと。
https://wiki.archlinux.jp/index.php/ワイヤレス設定

追記: DNSが疑われる場合はdhcpcdあたりで `dhcpcd <your network interface>` するとDHCPサーバにローカルipやらdnsのipやら教わってきてくれる。

一応、以下は備忘録で残す。
> 標準でipv6が有効になっていて、ipv4しか対応していない弊家回線では使えなかったらしい。
> `/etc/sysctl.d/` に以下の内容でファイルを作成、ipv6をdisableしてくる。

```:/etc/sysctl.d/disable_ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
```

```shell
$ sysctl -p /etc/sysctl.d/disable_ipv6.conf # 設定読み込み
```

> これで `ifconfig` して、 `inet6` のアドレスが消えていればOK

**※余談**
最初、なにを思ったか `-p` のオブションをQだと空目して、 `syscrl: cannot stat /proc/sys//etc/sysctl.d/...` とエラーが出て、パスの設定とかマウントとか色々疑って時間を浪費してしまった。恥ずかしい。

## ディスクの準備
http://note.kurodigi.com/gentoo-uefi-install/
↑GPTで進めてみている。パーティション切りもこの方法を真似る



### パーティション初期化、設定
ハードディスクがどこにあるか、 `df -h` とか `parted -l` とかで確認。
追記:

```
# lsblk # ざっくりディスク名やどのtype(lvmとかdiskとかpartitionとか)とかを表示してくれる
# df -h # 容量みるとき使う
# lvscan # lvmなら
```

大体、余計なものが刺さってなければ `/dev/sdb/` にあるかも。

今回、マザボがUEFI Readyとなっていたので、GPTでインストールしてみる。
以下の作業で元のディスクは読めなくなる。

```shell
$ parted /dev/sdb # 今回はsdbだった
(parted) mklabel gpt # YesとかIgnoreしてすすめる。
(parted) print # パーティションテーブルがgptになってるか確認
```

この後パーティションテーブルを切っていくが、面倒なので以下の設計も参考に。
[Gentooをインストールして、XmonadでGUI環境を整える - Qiita](https://qiita.com/YoshikuniJujo/items/6888f3ff42b3f06c9741)

**パーティション構成(MiB単位)**
- grub: 1 - 3 (2MiB)
- boot: 3 - 131 (128MiB)
- swap: 131 - 16515 (16GiB)
- root: 16515 - -1 (のこり全部)

追記: ちなみに、このあと数台ArchLinuxをインストールした覚えだと、カーネルが複数入ると想定してboot領域はこれだと少々少ない気がする。念の為に200MiBよりはあるとよさそうかなと思う。今使っているArchは余裕もって512MiB取ってる
更にいうとswapについてはメモリが16GBあるマシンとかなら、正直いらないと思って使っていない(今回のVaio Pは2GBなので要るし、このあと16GBではなく2GBで作成し直している)。最悪欲しくなればパーティションではなくswapファイルを作成して使えばいいし、この柔軟性を確保したければswapパーティションをLVMで切るのが安牌なきがする。ここでは切っていないが、最近Linuxマシンをセットアップする際には必ずLVMにしている。インストールの際にはGentooWikiのLVMの項を確認し、カーネルに含めるのをわすれないとよさそう。

LVMだとわりとかんたんにボリュームサイズを変更したり分けたりくっつけたりできるので、よさそう。例としてはこんな感じ↓
https://densan-hoshigumi.com/server/lvm-change-home-root

以下、公式のインストール手順通り進める。

```shell
# 単位をMiBに
(parted) unit mib
# GRUB2用のブートローダ領域
(parted) mkpart primary 1 3
(parted) name 1 grub
(parted) set 1 bios_grub on # grub用のフラグを立てる
```
partedプロンプトで `print` すると、grubの領域ができているのが確認できた。
同様にほかも進める。

```shell
(parted) mkpart primary 3 131
(parted) name 2 boot
(parted) set 2 boot on # bootフラグ
(parted) mkpart primary 131 16515
(parted) name 3 swap
(parted) mkpart primary 16515 -1
(parted) name 4 rootfs
(parted) print # 確認
(parted) q # quitしておく
```

### ファイルシステムの適用
パーティションを分け終わったのでファイルシステムを適用していく。
`fdisk -l` すると、さっき切ったパーティションのパスが見える。
ので、これを参考に、最初にswap領域。

```shell
$ mkswap /dev/sdb3
$ swapon /dev/sdb3
$ free -g # 認識されているか確認
```

その他の領域も適用していく。今回はどちらもext4で。

```shell
$ mkfs.ext4 /dev/sdb2 # boot領域
$ mkfs.ext4 /dev/sdb4 # root領域
```

追記: bootでコケるのもアレなので、bootもFAT32 `mkfs.fat -F32 /dev/<yourdevice>` でフォーマットすることが多くなってきた。ほんとに必要かは不明...

### パーティションのマウント
rootパーティションを `/mnt/gentoo` にマウントする。

```shell
$ mount /dev/sdb4 /mnt/gentoo
```

## tarballの展開と準備
### stage3 tarballのダウンロード
マウントしたディスクに入る `cd /mnt/gentoo/`
コマンドラインのブラウザを使い、以下からstage3のtarballを落とす。

```shell
$ links https://www.gentoo.org/downloads/mirrors/
```

JPのミラー配布場所に飛び、 `releases/x86/autobuilds/` 内に。
とりあえず、i686のbuildを見つけたので、 `d` でダウンロード。
終わったら `q` でブラウザを終了する。

tarballを展開する

```shell
$ tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner
```
今回落としたファイルは `tar.bz2` ではなく `tar.xz` だったので、公式のコマンドから修正。

### コンパイルオプションの設定
公式「エディタはnanoを使います」
小生「ヤダ。小生viがいい。」

Gentoo最適化のためにPortageパッケージマネージャの設定をしていく。
`/etc/portage/make.conf` が設定として使われるので、そこに記入していく。

```shell
$ vi /mnt/gentoo/etc/portage/make.conf
```
（viの使い方は面倒なので、nanoを使うことをおすすめ。）

以下暫定だが、設定をしてみる。

```conf
...省略...
COMMON_FLAGS="-O2 -march=native -pipe"
# ↑もともとはmarchはi686だが、native指定で現在のシステムのアーキテクチャを指定してくれるので、一応書き換え。
...省略...
MAKEOPTS="-j2"
# ↑パッケージインストール時の並行実行数。コア数+1がおすすめされているので、2で。
```

## Gentooのベースシステムのインストール
### サーバー、リポジトリの設定
ソースを落とす速度を考え、ミラーサーバーを選択しておく。
公式の `mirrorselect` コマンドでインタラクティブにえらぶ。

```shell
$ mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf
```
スペースでチェックがつけられるので、jaistのサーバーを選択しておいた。

次に ebuildリポジトリの設定。

```shell
# おそらく無いので以下ディレクトリを切って、Portageのリポジトリファイルをコピー
$ mkdir --parents /mnt/gentoo/etc/portage/repos.conf
$ cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf
```

### Gentooの環境に入る

の前にDNS情報のコピー

```shell
$ cp -L /etc/resolv.conf /mnt/gentoo/etc/
```

必要になるファイルシステムのマウント。

```shell
$ mount -t proc /proc /mnt/gentoo/proc
$ mount --rbind /sys /mnt/gentoo/sys
$ mount --make-rslave /mnt/gentoo/sys
$ mount --rbind /dev /mnt/gentoo/dev
$ mount --make-rslave /mnt/gentoo/dev
```

これ、公式ではprocを `--types` オプションで指定してるんだが、 `/etc/fstab` に設定がないよ、とか怒られて、後々うまくいかない。
Gentooのコミュニティとか漁ってたら省略系の `-t` オプション使ってるのを目にして、ダメ元でやったらうまくいった。

さて次。chrootしてGentooの環境をrootにして、
profileを読み込んで、プロンプトをちょっと変えておく。

```shell
$ chroot /mnt/gentoo /bin/bash
$ source /etc/profile
$ export PS1="(chroot) ${PS1}" # なんでもいいけど、わかるようにだけ。
```

ここがようやくセーブポイント。
ここからは中断してもルートのパーティションをマウントした後、mkswapとかswaponとか、DNS情報をコピーするあたりから戻れる。

ブートパーティションのマウント
あとでカーネルのビルドと、ブートローダーのインストールでつかう。

```shell
$ mount /dev/sdb2 /boot
```

## Portageの設定
パッケージマネージャの設定

### リポジトリ関係
ebuildリポジトリのスナップショット(Portageのツリーってことか)をアップデート。
以下のコマンドではrsync(873番ポート)が使えない環境向けに、web(80番ポート)で落としてくるものらしい。
要らないけど一応更新掛けて、少し待つ。

```shell
$ emerge-webrsync
```

### プロファイルの設定

```shell
$ eselect profile list
```

上記リストから選択。
とりあえずデスクトップ環境は要らない(時間もかかってしまう)ので、そのままなにもないやつを選択。
(今回は[1]番目の `default/linux/x86/17.0 (stable)` を選択)

```shell
$ eselect profile set 1
```

### `@World` の更新
world setを更新
参考: [world setを使おう - 突破してみる？](http://toppa.hatenablog.com/entry/japanese/use_world_set_in_gentoo)

これでベースシステムの構築ができるらしい。
結構時間食うので、余裕を見て実行されたし。

```shell
$ emerge --ask --verbose --update --deep --newuse @world
```

### tmuxとvimのインストール
少しずついつもの環境に近づけていく。

```shell
$ emerge -av tmux
$ tmux new -s hogepiyoセッション名
```

続けてvimも。[参考にした先](https://qiita.com/YoshikuniJujo/items/6888f3ff42b3f06c9741)ではデスクトップ環境向けの部分をガン無視して(USEに `-X` )ビルドしていたので、真似る。
この処理も少しかかるので待機。

```shell
$ USE="-X" emerge -av vim
```

### USEフラグの編集
これ、ちょっと曖昧なのだが、Portageパッケージマネージャでビルドする際にデフォルト使うフラグを、 `/etc/portage/make.conf` に `USE="hoge -piyo"` などと付けておけるものの様子。
まだどれが必要か、というのがわからないので、ひとまず見ていて必要そうだと思ったもののみ記述してみた。
あと、ローカライズ設定もここからできるらしいのでついでに。

```conf:/etc/portage/make.conf
USE="unicode git gzip mp3 ogg wifi networkmanager vim-syntax"
...
LINGUAS="ja"
L10N="ja"
```

### タイムゾーン、ロケール
タイムゾーン、ロケールを日本にする。
ロケールは複数選択できるそうだが、utf-8のロケールを最低1つは入れる必要があるとのこと。
その他は使うとは思えないので、 `en_US.UTF-8 UFT-8` のみ選択
なんでjpでないかというと、後でところどころ日本語になったときに、豆腐文字化けして(▪▪▪)悲しいので。

```shell
$ ls /usr/share/zoneinfo # Japanがあったので今回はそれ
$ echo "Japan" > /etc/timezone
$ emerge --config sys-libs/timezone-data # 設定を適用
```

```text:/etc/locale.gen
...
# 以下コメントを取った
en_US.UTF-8 UTF-8
ja_JP.UTF-8 UTF-8
```

```shell
$ locale-gen # さっきのファイルに従ってロケールを生成
$ eselect locale list # en_US.utf8の番号を控える
$ eselect locale set 2 # 今回は[2]となっていた
```

環境をリロードする

```shell
$ env-update && source /etc/profile
$ export PS1="(chroot) ${PS1}" # これはプロンプトの識別用に一応。
```

## カーネルのインストール
長い...まだカーネルだ...
ブートローダーまでながい...

### カーネルソースをインストール
カーネルのソースをインストールするそうです。
ここもまた、選択のGentooといったところか。
gentoo-sourcesパッケージを使うことが推奨されているので素直に従う。
これまた少々時間がかかる。

```shell
$ emerge -av sys-kernel/gentoo-sources
# /usr/src 以下にインストールされていることを確認
$ ls -l /usr/src/linux
```

さて、この次は2つのアプローチがあるそうだ。

> 1.カーネルを **マニュアル** で設定およびビルドする。
> 2.Linuxカーネルを **自動的** にビルド・インストールするgenkernelを使用する。

おお、自動設定が有るんですか。それではその...

> ここ *(Gentoo公式Wiki)* では、環境を最適化するのに最も適した **"マニュアル設定"** をデフォルトとして説明します。

おし、やったろみゃーか(血涙)
~~楽しようとしてgenkernel使ったら、丸1日かけてビルドしたものがコケて心折られたとは言っていない~~

### カーネルをマニュアルでインストール
この `Gentoo Install Battle™` に於いて、マニュアルにできるところがあるならば、マニュアルでするしか無いのです。
それがGentooにドハマリした先駆者への礼儀というもの。(なにが)

カーネルのマニュアル設定は難しいと言われるが、幾度かやってみればそんなことはない(Gentoo公式Wiki談)んだそうだ。
そのとき、ハードウェアの構成を知っておくのが大事、とのことで、
`lspci` などのツールを以下でまとめてインストールしておく。

```shell
$ emerge -av sys-apps/pciutils
```

menuconfigを実行して、インストールするカーネルをカスタマイズする。

```shell
$ cd /usr/src/linux
$ make menuconfig
```

このあたりは[この記事](https://qiita.com/YoshikuniJujo/items/6888f3ff42b3f06c9741)を参照させていただく。
まず走っているカーネルから設定を入手できるよう設定。一旦saveして終わる。
チェックをつけるには `y`

```text:menuconfig
General setup --->
    <*> Kernel .config support
        [*] Enable access to .config through /proc/config.gz
```

ということでハードをすべて調べ上げるべきなのだが、
まずはネット関係のみ確実に

#### 有線、無線LAN

```shell
$ lspci -k | grep -A 2 -i ethernet
Kernel driver in use: sky2
```

vimを使い、 `sky2` を検索
(vimの初期設定だと大文字と小文字の違いを認識してしまうので `:set ignorecase` してからの `/sky2` )

```conf:.config
...
CONFIG_SKY2=y
# CONFIG_SKY2_DEBUG is not set
```

DEBUGはついていないが、一応SKY2はついているので良しとする。

こんな感じで、探して行くのだが、どうやら `.config` の並びと `make menuconfig` の並びが一致するようなので、
大まかなデバイスの種類(EthernetとかNetworkとか)がわかれば、あたりをつけて検索できそう。
まず起動したら今度ビルドし直そう。

そして、カーネルのビルドとインストール。

```shell
$ make && make modules_install
$ make install
```

で、インストールまで完了。

### ~~genkernelで楽する~~ (できませんでした。)
**以下は失敗したものなので、あくまで手順の記録として。**

genkernelでは、最初にGentooのインストールディスクをブートした時と同様に、
自動で判断してカーネルを設定してくれる。
選択のGentooの良さをぶち壊すインストール方法だが、他に勉強しなければならないことがあるので、あしからず。
これはこれで結構インストールに時間がかかった。

```shell
$ emerge -av sys-kernel/genkernel
```

としたのだが、どうやらインストールされていない様子。
何故かと思って調べていたら、Portageにupdateが来ており、それをしていなかったからと言うことのようだ。
ご丁寧に `IMPORTANT!` と書いていたアップデートを見ていなかった...
調べたフォーラムでは、

> IMPORTANT is Important.

という、ありがたいお言葉があったので、肝に銘じることにする。

さて、気を取り直して、[公式](https://wiki.gentoo.org/wiki/Handbook:X86/Portage/Tools/ja#etc-update)を参考に `etc-update` を行い、再度 `genkernel` のインストールを行った。

つぎ、 `/etc/fstab` を編集し、 `/boot` のマウントポジションを記述しておく。

```text:/etc/fstab
/dev/sda2	/boot	ext2	defaults	0 2
```

カーネルソースをコンパイルする。
ただし、この方法だと何もかもコンパイルするので、小生の低スペ&シングルコアPCでは膨大な時間がかかった。

```shell
$ genkernel all
```

**コケました**
ビルドに失敗していたようで、結局手動でやりました。
以下続き。

### initramfsのビルド

今回ファイルシステムは分けていないのだが、
勉強のためにブート時のRAMベースのファイルシステムをビルドしてみる。

genkernelのインストールは上記のボツ見出しを参考に...

```shell
$ genkernel --install initramfs
```

おわったと思ったら

```text
...
* WARNING... WARNING... WARNING...
* Additional kernel cmdline arguments that *may* be required to boot properly...
* With support for several ext* filesystems available, it may be needed to
* add "rootfstype=ext3" or "rootfstype=ext4" to the list of boot parameters.
...
```

最後ちょっと気になる表示があったが、調べてみてもそのままで問題になってる人がいなかったのでスルーしておく。

### ファームウェアのインストール
一応、インストール後に無線が使えないことが無いように、大凡の無線に対応するファームウェアを入れておく。

```shell
$ emerge -av sys-kernel/linux-firmware
```

実際、入っていたがビルドが数日前の物だった(このインストール自体かなりかかってやっている)ので、一応更新された。

### fstabの設定
パーティションに名前をつけて、簡単に指定できる、というものがあるので、使ってみる。

```shell
$ e2label /dev/sdb2 boot
$ e2label /dev/sdb4 root
$ e2label /dev/sdb2 # bootと表示されればOK
```

swapは `swapon` で。swapし直す。

```shell
$ swapoff /dev/sdb3
$ mkswap -L swap /dev/sdb3
$ swapon LABEL=swap
```

fstab ( `/etc/fstab` )を書き換える。

```text:/etc/fstab
LABEL=boot    /boot       ext4    noauto,noatime  1 2
LABEL=root    /           ext4    noatime         0 1
LABEL=swap    none        swap    sw              0 0
```

`/etc/conf.d/hostname` にホスト名( `hostname` )、 `/etc/conf.d/net` にドメイン( `dns_domain_lo` )をよしなに。

`/etc/hosts` にも同様に上記を設定。

### システム用ツール
それぞれ入れて設定をする。

ログ

```shell
$ emerge -av metalog
$ rc-update add metalog default #起動時立ち上がるように
```

cron
`/etc/crontab` でcronを使えるように設定しておく。

```shell
$ emerge -av fcron
$ rc-update add metalog default
$ crontab /etc/crontab
```

システム内の検索高速化のため、インデックスを張ってくれる locate コマンド
参考にしていた記事でmlocateパッケージで入れていたのでついでに。

```shell
$ emerge -av mlocate
```

DHCPクライアント

```shell
$ emerge -av dhcpcd
```

あと、公式で推奨しているOpenRCのネットワーク設定スクリプトも。noreplaceオプションも付いているので注意。

```shell
$ emerge -avn net-misc/netifrc
```

### grub(ブートローダ)のインストール
ようやく...GRUBまできた...USB起動から開放される...

grubのインストール後、設定ファイルまで生成する。

```shell
$ emerge -av grub
$ grub-install /dev/sdb
$ grub-mkconfig -o /boot/grub/grub.cfg
```

最後に再起動。grubから起動するか...


# 所感、勉強になったこと
## initシステムってなんぞ
もともとGentooではOpenRCというものが使われるらしいが、Portageのプロファイル選択でsystemdを選択することもできる。
このinitはLinuxの機能で、Linuxのランレベルに応じて `/etc/init.d/` 内のプロセスを実行するというもの。

参考: [Linuxシステムのブート](https://www.infraeye.com/study/linuxz2.html)

## PortageのUSEフラグ
Portageでは、環境ごと要る要らないという要素をUSEフラグで管理しているようで、
環境ごとに、X Window向けのコードが要らない、とかUnicodeほしい、とかのフラグを立てると、ビルド時に自分の好きなようにカスタマイズできる、ということらしい。
さすが、選択のGentooである。

## GRUBからの起動、fstabの設定
GRUB自体はすんなりインストールできていて、USBなしで単体のブートはできたものの、

```text
!! Could not find the root block device in UUID= ...
!! ...
```

と表示されて、起動の途中で止まってしまった。
このままshellが開けたので `/etc/fstab` が原因だと思ってviで開いたが
これ、おそらく初回にfstabの設定を中途半端にしていたのが原因で、


# 今後の展望
- キー配列の変更 (CapsLock ⇔ Ctrl)

# 参考
ほぼ @YoshikuniJujo さんの記事ばっかり~~パクって~~参照してました。大変参考になりました。

- [Gentoo Linux x86 ハンドブック: Gentoo をインストールする - Gentoo公式wiki](https://wiki.gentoo.org/wiki/Handbook:X86/Full/Installation/ja)
- [Linuxディスク関連コマンドまとめ - Qiita](https://qiita.com/aosho235/items/ad9a4764e77ba43c9d76)
- [Gentooをインストールして、XmonadでGUI環境を整える - Qiita](https://qiita.com/YoshikuniJujo/items/6888f3ff42b3f06c9741)
- [Gentooの最小限のシステムを構築する(BIOS編) - Qiita](https://qiita.com/YoshikuniJujo/items/ef414c42eb66285202c8)
- [world setを使おう - 突破してみる？](http://toppa.hatenablog.com/entry/japanese/use_world_set_in_gentoo)
- [ハンドブック:X86/Portage/ツール - Gentoo公式wiki](https://wiki.gentoo.org/wiki/Handbook:X86/Portage/Tools/ja)
- [GentooでDvorak配列を設定して"control"と"caps lock"キーを入れ替える - Ship of Fools](https://kachina.github.io/post/2013-05-12-gentoo-dvorak/)