Gentooインストール（無線LANで）: LUKS, LVM, UEFI, systemd, GNOME3

現在ブートプロセス中にエラーが発生しております。
Loading initial ramdisk ...
を最後に動きません。。。

[解決済]現在grub-installでエラーが発生しております。
https://teratail.com/questions/61991


以下のサイトを参考にしました。
https://wiki.gentoo.org/wiki/Sakaki%27s_EFI_Install_Guide/Building_the_Gentoo_Base_System_Minus_Kernel
https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Base/ja
http://note.kurodigi.com/gentoo-uefi-install/
http://ririgon.hatenadiary.jp/entry/20150401/1427821349
https://sharpencryptedpig.noblogs.org/post/2014/05/29/how-to-install-gentoo-hardened-with-encrypted-root-and-swapexpress-procedure/
https://wiki.gentoo.org/wiki/Systemd/ja
https://wiki.gentoo.org/wiki/Intel
https://ja.wikipedia.org/wiki/Intel_HD_Graphics
http://www.hivestream.de/gentoo-installation-with-raid-lvm-luks-and-systemd.html
http://yuex.in/post/2016/12/gentoo-install-mbp-1.html


##### UEFIモードか確認

```
# ls /sys/firmware/
apci dmi efi memmap
```

##### キーボードレイアウトを変更

```
# loadkeys jp106
```

##### 無線LAN設定

```
# ip link show
# ip link set <interface> up
# iwlist <interface> scanning | grep ESSID
# wpa_supplicant -B -i <interface> -c <(wpa_passphrase <ESSID> <password>)
# dhcpcd
# ping google.com
```


##### ディスクをLUKSで暗号化している場合は復号化

```
# cryptsetup open <device-path> <luks-device-name>
```

##### ディスク・lvmの使用状況を確認

```
# lsblk
# df -h
# lvscan
```

## パーティションを作成する場合

sda1はESP（ef00）に設定
sda2はlvm用（8e00）に設定

```
# gdisk /dev/sdX
GPT fdisk (gdisk) version 0.8.6

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present
 
Creating new GPT entries.
 
Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y
 
Command (? for help): n
Partition number :
First sector:
Last sector: +512M
Hex code or GUID: ef00
 
Command (? for help): n
Partition number:
First sector:
Last sector: 
Hex code or GUID: 8e00
 
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
 
Do you want to proceed?: y
OK; writing new GUID partition table (GPT) to /dev/sda.
The operation has completed successfully.
```


##### Logical Volumeの作成
作成するのはルートディレクトリのみです

```
lvcreate -L 64G vg1 -n <lv-root-name>
```


##### ファイルシステムの作成
ext4で作成します。

```
mkfs.ext4 <lv-root-path>
```

##### スワップはオンにする

```
# swapon <lv-swap-path>
```

##### ルートをマウント

```
# mount <lv-root-path> /mnt/gentoo
```

##### EFIディレクトリ作成とマウント

```
mkdir -p /mnt/gentoo/boot/efi
mount /dev/sda1 /mnt/gentoo/boot/efi
```

ちゃんとできたか確認

```
# lsblk
```


##### 時刻を確認

```
#date
```

##### tarball（ステージ3）をダウンロードして展開します。

```
cd /mnt/gentoo

wget http://ftp.jaist.ac.jp/pub/Linux/Gentoo/releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-<yyyymmdd>.tar.bz2

tar xvjpf stage3-amd64-<yyyymmdd>.tar.bz2 --xattrs
```

## make.confの編集

VIDEO_CARDSの値は以下参照

```
lspci | grep VGA
```

https://wiki.gentoo.org/wiki/Intel
https://ja.wikipedia.org/wiki/Intel_HD_Graphics

```
vi /mnt/gentoo/etc/portage/make.conf

# These settings were set by the catalyst build script that automatically
# built this stage.
# Please consult /usr/share/portage/config/make.conf.example for a more
# detailed example.
CFLAGS="-O2 -pipe"
CXXFLAGS="${CFLAGS}"

# WARNING: Changing your CHOST is not something that should be done lightly.
# Please consult http://www.gentoo.org/doc/en/change-chost.xml before changing.
CHOST="x86_64-pc-linux-gnu"

# These are the USE and USE_EXPAND flags that were used for
# buidling in addition to what is provided by the profile.
USE="bindist"
CPU_FLAGS_X86="mmx sse sse2"

# Important Portage directories
PORTDIR="/usr/portage"
DISTDIR="${PORTDIR}/distfiles"
PKGDIR="${PORTDIR}/packages"

# Turn on logging
PORTAGE_ELOG_CLASSES="info warn error log qa"
PORTAGE_ELOG_SYSTEM="save"

# Setting for X11
VIDEO_CARDS="intel i965"
INPUT_DEVICES="evdev synaptics"

MAKEOPTS="-j4"
LINGUAS="en ja"

GRUB_PLATFORMS="efi-64"
```


##### ミラーの設定

```
mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf
```

以下、引用
メインのGentooリポジトリ
ミラーを選択するために次に重要なステップは、/etc/portage/repos.conf/gentoo.confファイルでメインのGentooリポジトリを設定すること。
このファイルはPortageツリーを更新するときに必要になる同期情報を含んでいます
Portageツリー：
Portageがソフトウェアパッケージをダウンロード、インストールする時に必要なすべての情報を含むebuildと関連ファイルを集めたもの

メインのGentooリポジトリの設定は単純です。
最初に（存在しなければ）repos.confディレクトリを作成。 

```
mkdir /mnt/gentoo/etc/portage/repos.conf
```

次に、Portageが提供するGentooリポジトリ設定ファイルを（新規作成した）repos.confディレクトリにコピーします。 

```
cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf
```

##### DNS情報のコピー
/etc/resolv.confをコピーしておく

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

##### 色々マウントする
以下、引用
必要なファイルシステムをマウントする
新しい環境を適切に動作させるために、いくつかのファイルシステムを使えるようにしなければなりません。
/proc/ 
Linuxカーネルから情報を引き出すための擬似ファイルシステム
/sys/
/proc/同様、擬似ファイルシステムです。/proc/より構造化されており、一度は/proc/を置き換えることが目的
/dev/
通常のファイルシステムです。一部はLinuxのデバイス管理機構(通常はudev)により管理されており、すべてのデバイスファイルを含む。

/proc/は、/mnt/gentoo/proc/にマウントされるでしょう。
他の２つはbindマウントされます。

```
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
```

##### chrootします。

```
chroot /mnt/gentoo /bin/bash
source /etc/profile
export PS1="(chroot) $PS1"
```


##### portageのスナップショットをインストールする

```
emerge-webrsync
```

Portageツリーを最新版にアップデート
（やらなくてもよいと公式HPに書いてありました。結構長かったです。）

```
emerge --sync --quiet
```

Portageからのニュース
飛ばします


##### 選択できるプロファイルの確認

```
eselect profile list
```
##### プロファイルを変更

```
eselect profile set default/linux/amd64/13.0/desktop/gnome/systemd
```
プロファイルの変更を確認

```
eselect profile list
```
##### プロファイルを変更したので、更新する

```
emerge --ask --update --deep --newuse @world
```


##### 無線LANツールをインストールしておく

```
emerge -av net-wireless/wireless-tools net-wireless/wpa_supplicant net-misc/dhcpcd
```


##### いろいろemerge

```
# emerge -av vim app-misc/screen cryptsetup lvm2
```


##### ロケールを設定する。

```
ls /usr/share/zoneinfo
echo "Japan" > /etc/timezone
emerge --config sys-libs/timezone-data
```

```
vim /etc/locale.gen
:
en_US.UTF-8 UTF-8
:
jp_JP.UTF-8 UTF-8
:
```


```
locale-gen
eselect locale list
eselect locale set [0-9]
env-update
source /etc/profile
export PS1="(chroot) $PS1"
```


##### genkernelではなくマニュアルでカーネルを設定します。
カーネルソースのインストール
カーネルソースを/usr/src/にインストールします

```
emerge -av sys-kernel/gentoo-sources
```

## カーネルをMake
##### カーネルコンフィギュレーション設定をする

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

```
    Gentoo Linux --->
            [*] Gentoo Linux support (NEW)
            [*] Linux dynamic and persistent device naming (userspace devfs) support (NEW)
            [*] Select options required by Portage features (NEW)
          Support for init systems, system and service managers --->
            [*] OpenRC, runit and other script based systems and managers
            [*] systemd
[*] 64-bit kernel
    General Setup --->
      ()  Cross-compiler tool prefix (NEW)
      [ ] Compile also drivers which will not load (NEW)
      ()  Local version - append to kernel release (NEW)
      [ ] Automatically append version information to the version string
          Kernel compression mode (Gzip) --->
      ((none)) Default hostname (NEW)
      [*] Support for paging of anonymous memory (swap) (NEW)
      :
      -*- System V IPC
      :
      -*- Control Group support --->
            --- Control Group support
            [ ]   Example debug cgroup subsystem
            [*]   Freezer cgroup subsystem
            :
            [*]   Device controller for cgroups
            [*]   Cpuset support
            [*]     Include legacy /proc/<pid>/cpuset file
            [*]   Simple CPU accounting cgroup subsystem
            [*]   Resource counters
            [*]     Memory Resource Controller for Control Groups
            [*]       Memory Resource Controller Swap Extension
            [*]         Memory Resource Controller Swap Extension enabled by default
            [*]       Memory Resource Controller for Kernel Memory accounting
            [ ]     HugeTLB Resource Controller for Control Groups
            [*]   Enable perf_event per-cpu per-container group (cgroup) monitoring
            [*]   Group CPU scheduler --->
            [*]   Block IO contoroller
            [ ]     Enable Block IO controller debugging
      -*- Namespaces support --->
            --- Namespaces support
            [*] UTS namespace
            [*] IPC namespace
            [*] User namepace
            [*] PID Namespaces
            -*- Network namespace
      :
      [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
      :
      [*] Configure standard kernel features (expert users)  --->
            :
            [*] Enable eventpoll support
            [*] Enable signalfd() system call
            [*] Enable timerfd() system call
      :
    -*- Enable the block layer --->
      --- Enable the block layer
          Partition Types --->
             :
            [*]   EFI GUID partition support
 
    Processor type and features --->
      :
      [*] EFI runtime service support
      [*]   EFI stub support
      [ ]     EFI mixed-mode support
       :
      [*] Built-in kernel command line
      :
    :
    Device Drivers --->
          Generic Driver Options --->
            [*] Support for uevent helper
            (/sbin/hotplug)    path to uevent helper
          :
          Multiple devices driver support (RAID and LVM)  --->
                 <*> Device mapper support
                 <*> Crypt target support
                 <*> Snapshot target
                 <*> Mirror target
                 <*> Multipath target
                 <*>   I/O Path Selector based on the number of in-flight I/Os
                 <*>   I/O Path Selector based on the service time

    Firmware Drivers --->
          EFI (Extensible Firmware Interface)  Support >
                 <*> EFI Variable Support via sysfs
-*- Cryptographic API
     <*>  SHA256 digest algorithm (SSSE3/AVX/AVX2)
     <*>  SHA512 digest algorithm
     <*>  AES cipher algorithms (x86_64)
```

##### カーネルのコンパイルとモジュールインストールとカーネルのインストール

```
make && make modules_install && make install
```

## initramfsの生成

次回はdracutでやってみよう
http://www.hivestream.de/gentoo-installation-with-raid-lvm-luks-and-systemd.html

genkernelのemerge

```
# echo "sys-kernel/genkernel-next cryptsetup" > /etc/portage/package.use/genkernel-next
# emerge -av genkernel-next
```

## initramfsの作成

```
genkernel --udev –-lvm –-luks –-install initramfs
ls /boot/initramfs*
```

以下引用
/etc/mtab

開発元は、 /etc/mtab ファイルが /proc/self/mounts へのシンボリックリンクである環境のみをサポートしています。
また、このシンボリックリンクが存在しない場合、mount (bug #434090) および df (bug #477240) にも問題が発生します。
かつて一部のユーティリティがマウントオプションなどを書き込んでいたため、/etc/mtab は通常のファイルであることが期待されていましたが、現在ではあらゆるソフトウェアが対策を終えているものと思われます。
とはいえ念のため、ファイルをリンクに変更する作業を行う前に、 bug #477498 を閲覧の上、システムが既知の問題を抱えていないことをお確かめください。
シンボリックリンクを作成するには、以下を実行します: 

```
# ln -sf /proc/self/mounts /etc/mtab
```



LVM を使用するシステムでは、LVM ボリュームをマウントするため、systemd と共に lvmetad デーモンが起動されなければなりません。
lvmetad は /etc/lvm/lvm.conf で有効化できます:

```
# vim /etc/lvm/lvm.conf
:
use_lvmetad = 1
:
```

任意自由選択: ファームウェアのインストール

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

##### 自動マウントの設定
まず、コピペできるようにUUIDを/etc/fstabに追記します。

```
blkid >> /etc/fstab
```

/etc/fstabを編集する

```
vim /etc/fstab
:
# <fs>            <mountpoint>    <type>     <opts>                  <dump/pass>
UUID=<UUID>       /               ext4       defaults,noatime        0 1
UUID=<UUID>       /boot/efi       vfat       defaults,noatime        0 2
UUID=<UUID>       none            swap       sw                      0 0
:
```

##### ホストネームの設定

```
echo <hostname> > /etc/conf.d/hostname
```

##### ルートパスワードの設定

```
passwd root
```

##### キーマップの設定

```
vim /etc/conf.d/keymaps
:
keymap="jp106"
:
```

サービス・デーモンのインストール
やらなかった

```
emerge -av app-admin/sysklogd sys-apps/systemd net-misc/dhcpcd
```

/etc/hostsの編集

```
vim /etc/hosts
:
# IPv4 and IPv6 localhost aliases
127.0.0.1       localhost <hostname>
::1             localhost <hostname>
:
```

## ブートローダー

GRUB2とsys-fs/dosfstoolとefibootmgrのインストール
lvmとluksを使用するためにはGRUBがdevice mapperをサポートする必要があります。

```
# echo "sys-boot/grub:2 device-mapper" >> /etc/portage/package.use/grub:2
# emerge -av sys-boot/grub:2 sys-fs/dosfstools sys-boot/efibootmgr
# emerge -av sys-fs/dosfstools sys-boot/efibootmgr
```


/etc/default/grubを編集

 Note
dracut が systemd をとりこんで生成した initramfs を使用するときには、この作業は必要ありません。initramfs が systemd を起動することになります。
FILE /etc/default/grubConfigure GRUB2 for systemd

/etc/crypttab is for when you need to decrypt any partition except 'root (/)'. In your use case scenario decryption occurs only in initramfs. 

```
vim /etc/default/grub
:
GRUB_CMDLINE_LINUX="cryptdevice=/dev/disk/by-uuid/<UUId>:<luks-disk-name>" init=/usr/lib/systemd/systemd"
:
GRUB_ENABLE_CRYPTODISK=y
```

use_lvmetad = 0
https://wiki.archlinuxjp.org/index.php/%E6%97%A2%E5%AD%98%E3%81%AE_Linux_%E3%81%8B%E3%82%89%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB#lvmetad

```
vim /etc/lvm/lvm.conf
:
volume_list = { "vg1" }
:
```


##### GRUB2をESPにインストール（ここでエラー発生中）

```
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=gentoo_grub --recheck
# mkdir /boot/efi/EFI/boot
# cp /boot/efi/EFI/arch_grub/grubx64.efi  /boot/efi/EFI/boot/bootx64.efi
# grub-mkconfig -o /boot/grub/grub.cfg
```

##### これで終了なので、アンマウントしてリブート

```
exit
umount -R /mnt/gentoo/
reboot
```