続々・ArchLinux インストール覚書

[ArchLinux インストール覚書](http://qiita.com/katz_engineer/items/f032a24cb273c4eb6669)で示したArchLinuxプロジェクトの第一歩。[続・ArchLinux インストール覚書](http://qiita.com/katz_engineer/items/d3ce99cd79eaea8670b6)では失敗したが、そこでご指摘いただいた内容などを反映した成功手順である。[続・ArchLinux インストール覚書](http://qiita.com/katz_engineer/items/d3ce99cd79eaea8670b6)を書き直すのが筋だろうと思うが、私の日誌も兼ねているので、失敗談もそのまま残しておく。

# 前準備など

参考文献

- [ArchWiki - インストールガイド](https://wiki.archlinuxjp.org/index.php/インストールガイド)
- [ArchWiki - Btrfs](https://wiki.archlinuxjp.org/index.php/Btrfs)

インストール用のisoイメージは、昨年ダウンロード(2016.12.01.版)したものをDVDに焼いた。USBメモリじゃないのは、たまたま手元に無かったから。

# 作業

## はじめの一歩

[このマシン](http://qiita.com/katz_engineer/items/f032a24cb273c4eb6669#ハードウェア)はRAIDコントローラが組み込まれているが、Linuxからは使えない模様。従って起動時に Ctrl+I を押して、Non-RAIDにしておく。手順の詳細は省略。画面指示に従えば良い。

- Linuxから使えない状況証拠:
 - LinuxからRAIDコントローラが見えなければハードウェアRAIDは不可。
 - LinuxにはソフトウェアRAIDを構成する標準的な方法が整備されており、スピードではハードウェア構成が勝るものの、機能的には圧倒的にソフトウェアRAIDに軍配が上がる。
 - 元々LinuxユーザはWindowsに比べて圧倒的に少数派であり、その上ソフトウェアRAIDが中心の為、RAIDコントローラメーカがLinux用ドライバを用意する旨味は無い。
 - そういった理由から、Linux対応RAIDコントローラは数万円以上するのが普通。Windows向けと比べると一桁近く違うとの事。→マシン組込コントローラは環境が異なるとは言え、経済的な事情は似たり寄ったりと推測できる。

- Linuxから使えない直接証拠:
 - SCSIコントローラを認識できれば /proc/scsi 以下に色々と情報が入るはず。[Red Hat Enterprise Linux 4: リファレンスガイド - 章 5章. proc ファイルシステム - 5.3. /proc/配下のディレクトリ - 5.3.8. /proc/scsi/](http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-rg-ja-4/s1-proc-directories.html#S2-PROC-DIR-SCSI)
 - ArchLinuxのインストールDVDを挿入して起動後、下記のように確認。HDDそのものはそれぞれ見えているが、RAIDコントローラは認識されていない。

```
# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: ST3320620AS      Rev: K
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi1 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: WDC WD3200AAKS-0 Rev: 3A01
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi5 Channel: 00 Id: 00 Lun: 00
  Vendor: TSSTcorp Model: DVD+-RW RS-H653F Rev: D300
  Type:   CD-ROM                           ANSI  SCSI revision: 05
```

## インストールの準備

起動時には x86_64 を選択。当たり前だけど、しばらくはインストールメディアを抜かずにそのままにしておく。

[ArchWiki - インストールガイド](https://wiki.archlinuxjp.org/index.php/インストールガイド) を読んで、この通りに操作。以下、その手順。

### キーボード

```
# loadkeys jp106
```

### コンソールフォント

コンソールフォントはそのまま変更せず。日本語が表示されればそれなりに便利そうだけども、当面は必要無いと判断。

### 起動モードの確認

```
# ls /sys/firmware
acpi dmi memmap
```

UEFIではなくてBIOS起動だった。以下、BIOS起動に沿った手順でインストール。

### パーティション、パーティションのフォーマット

まずはドライブのフォーマットを決める。今回はドライブ丸ごと Btrfs にしたい。

その場合の注意点。[ArchWiki - Btrfs#パーティショニング](https://wiki.archlinuxjp.org/index.php/Btrfs#.E3.83.91.E3.83.BC.E3.83.86.E3.82.A3.E3.82.B7.E3.83.A7.E3.83.8B.E3.83.B3.E3.82.B0)によるとスワップ領域を作成できないらしい。

しかし[ArchWiki - パーティショニング](https://wiki.archlinuxjp.org/index.php/パーティショニング) の[パーティションの大きさはどうすればいいですか？]には下記の記述あり。これを信じる事にする。

> 大容量のメモリ（1024MB 以上）を積んでいるときは、スワップパーティションは小さく、または作らなくてもかまわないでしょう。

ちなみに Btrfs の読み方だが、SAOファンとしては「ビーターエフエス」と読みたい所。ビーター… うむ、良い響きだ。

という訳で Btrfs によるフォーマット。コマンドの日本語ヘルプは[Oracle® Linux管理者ソリューション・ガイドfor リリース6 - 5.2 Btrfsファイル・システムの作成](https://docs.oracle.com/cd/E39368_01/b71105/ol_create_btrfs.html)

```
# ls /dev/sd*
/dev/sda  /dev/sdb
# mkfs.btrfs -L btrfs_raid1 -d raid1 /dev/sda /dev/sdb
btrfs-progs v4.8.2
See http://btrfs.wiki.kernel.org for more information.

/dev/sda appears to contain an existing filesystem (zfs_member).
ERROR: use the -f option to force overwrite of /dev/sda
```

既にフォーマット済のHDDなので、注意を促すエラーメッセージが出た。画面表示の通りに -f オプションを付けて再実行。

```
# mkfs.btrfs -f -L btrfs_raid1 -d raid1 /dev/sda /dev/sdb
btrfs-progs v4.8.2
See http://btrfs.wiki.kernel.org for more information.

Label:              btrfs_raid1
UUID:
Node size:          16384
Sector size:        4096
Filesystem size:    596.18GiB
Block group profiles:
  Data:             RAID1             1.00GiB
  Metadata:         RAID1             1.00GiB
  System:           RAID1             8.00MiB
SSD detected:       no
Incompat features:  extref, skinny-metadata
Number of devices:  2
Devices:
   ID        SIZE  PATH
    1   298.09GiB  /dev/sda
    2   298.09GiB  /dev/sdb
```

一つだけ気になるのは Filesystem size。約300GBのHDDが2台なのだが、この表示ではミラーリングしてない容量になっているように見える。少々不安だが、RAID1としっかり表示されているし、とりあえず先へ進む。

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

この辺は[ArchWiki - インストールガイド](https://wiki.archlinuxjp.org/index.php/インストールガイド)を鵜呑みにしながらというワケにはいかない。ちょっと脇道に逸れる模様。結果はインストールガイドと全く同じだけども。

参考文献:

* [ArchWiki - Btrfs#パーティショニング](https://wiki.archlinuxjp.org/index.php/Btrfs#.E3.83.91.E3.83.BC.E3.83.86.E3.82.A3.E3.82.B7.E3.83.A7.E3.83.8B.E3.83.B3.E3.82.B0)
* [Oracle® Linux管理者ソリューション・ガイドfor リリース6 - 5.2 Btrfsファイル・システムの作成](https://docs.oracle.com/cd/E39368_01/b71105/ol_create_btrfs.html) この中に「ファイル・システムをマウントする場合、次のようにそのコンポーネント・デバイスのいずれかによって指定できます」という記述がある。
* [ただのメモ: rootfs に btrfs をつかってみる](http://blog.at-dk.info/2010/07/rootfs-btrfs.html)
* [ArchWiki - Snapper#推奨ファイルシステムレイアウト](https://wiki.archlinuxjp.org/index.php/Snapper#.E6.8E.A8.E5.A5.A8.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.82.B7.E3.82.B9.E3.83.86.E3.83.A0.E3.83.AC.E3.82.A4.E3.82.A2.E3.82.A6.E3.83.88)

まだスナップショットなどを試す段階ではないので、差し当たってルートディレクトリをサブボリュームとして作成する所までにしておく。

```
# mount /dev/sda /mnt
# btrfs subvolume create /mnt/@
Create subvolume '/mnt/@'
# btrfs subvolume list -p /mnt
ID 258 gen 7 parent 5 top level 5 path @
# umount /mnt
# mount -o subvol=@ /dev/sda /mnt
```

ここからはまた[ArchWiki - インストールガイド](https://wiki.archlinuxjp.org/index.php/インストールガイド)の手順に戻る。

### インターネットへの接続

```
# ping archlinuxjp.org
64 bytes from tk2-235-27344.vs.sakura.ne.jp (160.16.119.98): icmp_seq=1 ttl=53 time=43.4 ms
〈以下略〉
```

### システムクロックの更新

```
# timedatectl set-ntp true
# timedatectl status
      Local time: Sat 2017-02-04 15:00:26 UTC
  Universal time: Sat 2017-02-04 15:00:26 UTC
        RTC time: Sun 2017-02-04 15:00:26
       Time zone: UTC (UTC, +0000)
 Network time on: yes
NTP synchronized: no
 RTC in local TZ: no
```

```NTP synchronized: no``` が気になったが、少々時間を置くと（数秒程度か？） yes になるようだ。

```
# timedatectl status
      Local time: Sat 2017-02-04 15:01:33 UTC
  Universal time: Sat 2017-02-04 15:01:33 UTC
        RTC time: Sun 2017-02-04 15:01:33
       Time zone: UTC (UTC, +0000)
 Network time on: yes
NTP synchronized: yes
 RTC in local TZ: no
```

本当はntpサーバは自分で設定したい。[日本なら ntp.nict.jp が鉄板](http://jjy.jp/tsp/PubNtp/index.html)だと思ってる。特殊事情が無ければこの一択。

が、その辺の調整は後回し。

## インストール

### ミラーの選択

日本なら Japan をファイル先頭に持ってくる。

```
# cd /etc/pacman.d
# mv mirrorlist mirrorlist.org
# cp mirrorlist.org mirrorlist
# vi mirrorlist
〈編集コマンド省略〉
# diff -U0 mirrorlist.org mirrorlist
--- mirrorlist.org     2016-12-01 16:52:03.000000000 +0000
+++ mirrorlist 2017-02-04 15:07:47.751819902 +0000
@@ -6,0 +7,2 @@
+## Score: 2.0, Japan
+Server = http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch
@@ -213,2 +214,0 @@
-## Score: 2.0, Japan
-Server = http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch
```

### ベースシステムのインストール

同時に btrfs の関連プログラムやブートローダーなどもインストール。
また今時は、CPUのデバッグ用パッチもOSが面倒を見るらしい。その為のパッケージ intel-ucode も落としておく。

```
# cd
# pwd
/root
# pacstrap /mnt base btrfs-progs intel-ucode grub
〈表示省略〉
```

pacstrap の画面表示をよく見ると、最後のgrubのインストールで mkinitcpio を実行しているように見える。とすれば、以降の設定の順番などを工夫すれば mkinitcpio 実行の一手間を省けるような気がする。しかしその為に grub インストールを別にするなど一手間増えては本末転倒。という訳で、ここはこの順番で実行するのが一番と思う。

## システムの設定

### fstab

```
# genfstab -U /mnt >> /mnt/etc/fstab
# cat /mnt/etc/fstab
#
# /etc/fstab: static file system information
#
# <file system> <dir>   <type>  <options>      <dump>  <pass>
# /dev/sda LABEL=btrfs_raid1
UUID=〈省略〉                                   /                btrfs   rw,relatime,space_cache,subvolid=258,subvol=/@,subvol=@ 0 0

```

> （2017.05.16.追記）
> この /mnt/etc/fstab の内容は冗長です。サブボリュームの指定は subvol=@ だけあればOK。
> [重ねて・ArchLinux インストール覚書 の /etc/fstab](http://qiita.com/katz_engineer/items/2dcc4f3e0a3dd7b828f8#etcfstab)参照。


### chroot

```
# arch-chroot /mnt
```

### タイムゾーン

```
# rm /etc/localtime
# ln -s /usr/share/zoneinfo/Japan /etc/localtime
# hwclock --systohc --utc
```

### ロケール

```
# mv /etc/locale.gen /etc/locale.gen.org
# cp /etc/locale.gen.org /etc/locale.gen
# vi /etc/locale.gen
〈編集内容省略〉
# diff -U0 /etc/locale.gen.org /etc/locale.gen
--- /etc/locale.gen.org 2016-08-06 20:17:48.000000000 +0900
+++ /etc/locale.gen     2017-02-05 00:33:51.507870723 +0900
@@ -291,2 +291,2 @@
-#ja_JP.EUC-JP EUC-JP
-#ja_JP.UTF-8 UTF-8
+ja_JP.EUC-JP EUC-JP
+ja_JP.UTF-8 UTF-8
# rm /etc/locale.gen.org
# echo KEYMAP=jp106 >/etc/vconsole.conf
```

### ホストネーム

```
# echo 〈例えば taro〉 >/etc/hostname
# mv /etc/hosts /etc/hosts.org
# cp /etc/hosts.org /etc/hosts
# vi /etc/hosts
〈編集内容省略〉
# diff -U0 /etc/hosts.org /etc/hosts
--- /etc/hosts.org      2016-12-06 08:43:55.000000000 +0900
+++ /etc/hosts  2017-02-05 00:41:14.795469974 +0900
@@ -7,0 +8 @@
+〈家庭内で割り当てるIPアドレス〉  〈例えば taro.example.com〉 〈例えば taro〉
# rm /etc/hosts.org
```

### Initramfs

参考文献:

- [ArchWiki - mkinitcpio - HOOKS - 通常のフック](https://wiki.archlinuxjp.org/index.php/Mkinitcpio)

```
# mv /etc/mkinitcpio.conf /etc/mkinitcpio.conf.org
# cp /etc/mkinitcpio.conf.org /etc/mkinitcpio.conf
# vi /etc/mkinitcpio.conf
〈編集内容省略〉
# diff -U0 /etc/mkinitcpio.conf.org /etc/mkinitcpio.conf
--- /etc/mkinitcpio.conf.org    2016-11-28 05:08:44.000000000 +0900
+++ /etc/mkinitcpio.conf        2017-02-05 00:44:15.627872167 +0900
@@ -52 +52 @@
-HOOKS="base udev autodetect modconf block filesystems keyboard fsck"
+HOOKS="base udev autodetect modconf block filesystems keyboard fsck btrfs"
# rm /etc/mkinitcpio.conf.org
```

mkinitcpio を実行。

```
# mkinitcpio -p linux
〈表示省略〉
但し、途中で警告が出た:
==> WARNING: Possibly missing firmware for module: wd719x
==> WARNING: Possibly missing firmware for module: aic94xx
良くわからないが、ひとまず無視
```

### ブートローダー

RAID1を構成しているドライブのすべてに対してgrubをインストールする。

参考文献:

* [ArchWiki - GRUB#RAID](https://wiki.archlinuxjp.org/index.php/GRUB#RAID)

```
# grub-install --recheck --target=i386-pc --root-directory=/ /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.
# grub-install --recheck --target=i386-pc --root-directory=/ /dev/sdb
Installing for i386-pc platform.
Installation finished. No error reported.
# grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-linux
Found initrd image(s) in /boot: intel-ucode.img initramfs-linux.img
Found fallback inited image(s) in /boot: intel-ucode.img initramfs-linux-fallback.img
done
```

### Root パスワード

```
# passwd
New password: 〈root用パスワード〉
Retype new password: 〈root用パスワード〉
passwd: password updated successfully
```

### ネットワーク設定

参考文献

- [ArchWiki - ネットワーク設定](https://wiki.archlinuxjp.org/index.php/ネットワーク設定)
 - [3.デバイスドライバ](https://wiki.archlinuxjp.org/index.php/ネットワーク設定#.E3.83.87.E3.83.90.E3.82.A4.E3.82.B9.E3.83.89.E3.83.A9.E3.82.A4.E3.83.90)
  - [4.3 ネットワークインターフェースの有効化・無効化](https://wiki.archlinuxjp.org/index.php/ネットワーク設定#.E3.83.8D.E3.83.83.E3.83.88.E3.83.AF.E3.83.BC.E3.82.AF.E3.82.A4.E3.83.B3.E3.82.BF.E3.83.BC.E3.83.95.E3.82.A7.E3.83.BC.E3.82.B9.E3.81.AE.E6.9C.89.E5.8A.B9.E5.8C.96.E3.83.BB.E7.84.A1.E5.8A.B9.E5.8C.96)

#### ドライバの状態の確認

```
# lspci -v | grep -A 1 ^$ | grep -v "^$¥|--"
lspci: Unable to load libkmod resources: error -12
00:01.0 PCI bridge: Intel Corporation 82G33/G31/P35/P31 Express PCI Express Root Port (rev 02) (prog-if 00 [Normal decode])
00:02.0 VGA compatible controller: Intel Corporation 82G33/G31 Express Integrated Graphics Controller (rev 02) (prog-if 00 [VGA controller])
00:19.0 Ethernet controller: Intel Corporation 82562V-2 10/100 Network Connection (rev 02)
00:1a.0 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 02) (prog-if 00 [UHCI])
00:1a.1 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 (rev 02) (prog-if 00 [UHCI])
00:1a.2 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 02) (prog-if 00 [UHCI])
00:1a.7 USB controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 02) (prog-if 20 [EHCI])
00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 02)
00:1d.0 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 02) (prog-if 00 [UHCI])
00:1d.1 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 02) (prog-if 00 [UHCI])
00:1d.2 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 02) (prog-if 00 [UHCI])
00:1d.7 USB controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 02) (prog-if 20 [EHCI])
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 92) (prog-if 01 [Subtractive decode])
00:1f.0 ISA bridge: Intel Corporation 82801IR (ICH9R) LPC Interface Controller (rev 02)
00:1f.2 RAID bus controller: Intel Corporation SATA Controller [RAID mode] (rev 02)
00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 02)
02:01.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8169 PCI Gigabit Ethernet Controller (rev 10)
```

最初の lspci エラーが良くわからない。無視して、それで問題があるのかどうかもわからない。エラーメッセージでぐぐってみたが、5分やそこらではどうも良くわからないし、今回は放っておこう。後で問題が起きたら改めて調べる事にする。

ドライバ名の全体を斜め読みすると、ネットワークカードと思しきものはすべて Ethernet 何とかいう名前で出力されたようだ。それを確認した所で、ネットワークカードだけ絞り込む。

```
# lspci -v | grep Ethernet
lspci: Unable to load libkmod resources: error -12
00:19.0 Ethernet controller: Intel Corporation 82562V-2 10/100 Network Connection (rev 02)
02:01.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8169 PCI Gigabit Ethernet Controller (rev 10)
#　lspci -v | sed -e "/Ethernet/,/^$/! d"
lspci: Unable to load libkmod resources: error -12
00:19.0 Ethernet controller: Intel Corporation 82562V-2 10/100 Network Connection (rev 02)
        Subsystem: Dell Inspiron 530
        Flags: bus master, fast devsel, latency 0, IRQ 25
        Memory at fdfc0000 (32-bit, non-prefetchable) [size=128K]
        Memory at fdfff000 (32-bit, non-prefetchable) [size=4K]
        I/O ports at fe00 [size=32]
        Capabilities: [c8] Power Management version 2
        Capabilities: [d0] MSI: Enable+ Count=1/1 Maskable- 64bit+
        Capabilities: [e0] Vendor Specific information: Len=06 <?>
        Kernel driver in use: e1000e

02:01.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8169 PCI Gigabit Ethernet Controller (rev 10)
        Subsystem: Melco Inc Device 032b 
        Flags: bus master, 66MHz, medium devsel, latency 64, IRQ 16
        I/O ports at ce00 [size=256]
        Memory at fdeff000 (32-bit, non-prefetchable) [size=256]
        [virtual] Expansion ROM at fde00000 [disabled] [size=64K]
        Capabilities: [dc] Power Management version 2
        Kernel driver in use: r8169

```

[このマシンには、組み込みの物の他に、取り付けたネットワークカードもある](http://qiita.com/katz_engineer/items/f032a24cb273c4eb6669#ハードウェア)。それが表れているようだ。それらのドライバがロードされたかチェック。

```
# dmesg | grep e1000e
[    2.873787] e10000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k
[    2.783787] e10000e: Copyright(c) 1999 - 2015 Intel Corporation.
[    2.846854] e10000e 0000:00:19.0: Interrupt Throttling Rate (ints/sec) set to dynamic conservative mode
[    3.634225] e10000e 0000:00:19.0 eth1: (PCI Express:2.5GT/s:Width x1) 00:21:9b:1a:5f:94
[    3.634226] e10000e 0000:00:19.0 eth1: Intel(R) PRO/10/100 Network Connection
[    3.634246] e10000e 0000:00:19.0 eth1: MAC: 7, PHY: 7, PBA No: FFFFFF-0FF
[   19.874811] e10000e 0000:00:19.0 enp0s25: renamed from eth1
[   31.951128] e10000e: enp0s25 NIC Link is Up 100 Mbps Full Duplex, Flow Control: Rx/Tx
# dmesg | grep r8169
[    2.849328] r8169 Gigabit Ethernet driver 2.3LK-NAPI loaded
[    2.849382] r8169 0000:02:01.0 (unnamed net_device) (uninitialized): net PCI Express
[    2.849538] r8169 0000:02:01.0 eth0: RTL8110s at 0xffffc90000e76000, 00:16:01:5c:19:df, XID 04000000 IRQ 16
[    2.849538] r8169 0000:02:01.0 eth0: jumbo features [frames: 7152 bytes, tx checksumming: ok]
[   20.120141] r8169 0000:02:01.0 enp2s1: renamed from eth0
[   30.601706] r8169 0000:02:01.0 enp2s1: link down
[   30.601811] r8169 0000:02:01.0 enp2s1: link down
```

ひとまず組み込みのネットワークカードだけ有効にする。後でくっ付けたRTL8110sの方は、え〜とこれはドライバがロードされていない？ワケではないように見えるが…いずれにしても link down してるから使えない。ドライバがどうこうではなくて、家庭内LAN環境をギガビットで整えれば link up するのかな？

そして、デバイス名は固定した方がいい。それはわかってるのだが、今回は自動生成されるデバイス名で良しとする。問題が起きた時に対応しようと思う。[ArchLinux - 4.1 デバイス名](https://wiki.archlinuxjp.org/index.php/ネットワーク設定#.E3.83.87.E3.83.90.E3.82.A4.E3.82.B9.E5.90.8D)には「この名前の付け方を止めさせるにはカーネルコマンドラインに net.ifnames=0 を追加してください」なんてあっさり一行で書いてあるけど、カーネルコマンドラインって何だ？調べると結構面倒臭いぞ。[ArchLinux - カーネルパラメータ のGRUBの項目](https://wiki.archlinuxjp.org/index.php/カーネルパラメータ#GRUB)には、何だかピンと来ない事が書いてあるし。いや理解してる人が書けば一行なんだろうけど、その背景となる理屈を私は理解しきれていない。このままでは何かあった時に対応できない。

いやまぁやるだけやって結果を見ればいいんだろうけど、今回はそこまでやらなくても問題は起きないだろう。逆にえいやっとやっちゃってOKでした〜という結果を期待する手もあるが、そういう事やると大抵、手に負えない問題が起きて元に戻す事になる。マーフィーの法則「起きる可能性のある事象は必ず起きる」

…と、ここまで考えて、一旦は決断したのだが。どうやら systemd-networkd を使えばお手軽に何とかなるらしい。いや、個人的に systemd から距離を置きたいと考えているので、なるべくならそっちに手を染めるような事はしたくないのだが。以前自分でちょこっといじったら、Microsoft的大鑑巨砲主義の匂いがプンプンしてきたのだ。ちょっと調べてみると、同じ理由で嫌っている人は有識者にも少なくない模様。

ちょっと脇道に逸れたが、そういう理由で、[systemd-networkd](https://wiki.archlinuxjp.org/index.php/Systemd-networkd)を利用してインターフェース名を固定するように設定してみる。何事も経験だ。

参考文献: [ArchWiki - systemd-networkd - インターフェイスの名前を変更](https://wiki.archlinuxjp.org/index.php/Systemd-networkd#.E3.82.A4.E3.83.B3.E3.82.BF.E3.83.BC.E3.83.95.E3.82.A7.E3.82.A4.E3.82.B9.E3.81.AE.E5.90.8D.E5.89.8D.E3.82.92.E5.A4.89.E6.9B.B4)

```
# ls -a /etc/systemd/network
.  ..
# vi /etc/systemd/network/10-nic.link
# vi /etc/systemd/network/20-nic.link
# cat /etc/systemd/network/10-nic.link
[Match]
MACAddress=00:21:9b:1a:5f:94

[Link]
Description=Intel Corporation 82562V-2 10/100 Network Connection
Name=nic0
# cat /etc/systemd/network/20-nic.link
[Match]
MACAddress=00:16:01:5c:19:df

[Link]
Description=Realtek Semiconductor Co., Ltd. RTL8169 PCI Gigabit Ethernet Controller
Name=nic1
```

DHCPクライアントの設定

```
# vi /etc/systemd/network/all.network
# cat /etc/systemd/network/all.network
[Match]
Name=nic*

[Network]
DHCP=ipv4
```

ネットワークの有効化

```
# systemctl enable systemd-networkd
Created symlink /etc/systemd/system/multi-user.target.wants/systemd-networkd.service → /usr/lib/systemd/system/systemd-networkd.service.
Created symlink /etc/systemd/system/sockets.target.wants/systemd-networkd.socket → /usr/lib/systemd/system/systemd-networkd.socket.
```

#### 名前解決の設定

名前解決には systemd ではなくて ```/etc/resolv.conf``` を設定。

```
# exit
exit
arch-chroot /mnt  9.56s user 1.53s system 0% cpu 23:08:32 total
# cat /etc/resolv.conf
# Generated by resolvconf
domain example.com
nameserver 10.0.0.1
# vi /mnt/etc/resolv.conf
# cat /mnt/etc/resolv.conf
#
# /etc/resolv.conf
#

domain example.com
nameserver 10.0.0.1

# End of file
```

```/mnt/etc/resolv.conf``` は ```arch-chroot``` によって ```/etc/resolv.conf``` に置き換えられているようだ。そのため ```exit``` してからでないと設定できない。それでこんな歪な手順になってしまっている。

# 再起動

```
# umount -R /mnt
```

ここでインストール用メディアを取り出す。

```
# reboot
```

再起動後にブート画面を経てログインのプロンプトが表示される。

```
Arch Linux 4.9.11-1-ARCH (tty1)

taro login:
```

# 設定確認

loginプロンプトに対し、ユーザ名 root とRootパスワードでログイン。

```
taro login: root
Password: 〈root用パスワード〉
```

ネットワーク設定の確認。

```
# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc no queue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: nic1: <NO-CARRIER,BROADCAST,NULTICAST,UP> mtu 1500 qdisc fq_code1 state DOWN mode DEFAULT group default qlen 1000
    link/ether 00:16:01:5c:19:df bed ff:ff:ff:ff:ff:ff
3: nic0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_code1 state UP mode DEFAULT group default qlen 1000
    link/ether 00:21:9b:1a:5f:94 bed ff:ff:ff:ff:ff:ff
# ping archlinuxjp.org
PING archlinuxjp.org (160.16.119.98) 56(84) bytes of data.
64 bytes from tk2-235-27344.vs.sakura.ne.jp (160.16.119.98): icmp_seq=1 ttl=53 time=43.4 ms
〈以下略〉
```

やった:thumbsup:

※2017/04/02 ネットワーク設定、名前解決の設定とその動作確認の章を追記。