Edited at

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

More than 1 year has passed since last update.

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


前準備など

参考文献

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


作業


はじめの一歩

このマシンはRAIDコントローラが組み込まれているが、Linuxからは使えない模様。従って起動時に Ctrl+I を押して、Non-RAIDにしておく。手順の詳細は省略。画面指示に従えば良い。



  • Linuxから使えない状況証拠:


    • LinuxからRAIDコントローラが見えなければハードウェアRAIDは不可。

    • LinuxにはソフトウェアRAIDを構成する標準的な方法が整備されており、スピードではハードウェア構成が勝るものの、機能的には圧倒的にソフトウェアRAIDに軍配が上がる。

    • 元々LinuxユーザはWindowsに比べて圧倒的に少数派であり、その上ソフトウェアRAIDが中心の為、RAIDコントローラメーカがLinux用ドライバを用意する旨味は無い。

    • そういった理由から、Linux対応RAIDコントローラは数万円以上するのが普通。Windows向けと比べると一桁近く違うとの事。→マシン組込コントローラは環境が異なるとは言え、経済的な事情は似たり寄ったりと推測できる。




  • Linuxから使えない直接証拠:



# 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 - インストールガイド を読んで、この通りに操作。以下、その手順。


キーボード

# loadkeys jp106


コンソールフォント

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


起動モードの確認

# ls /sys/firmware

acpi dmi memmap

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


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

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

その場合の注意点。ArchWiki - Btrfs#パーティショニングによるとスワップ領域を作成できないらしい。

しかしArchWiki - パーティショニング の[パーティションの大きさはどうすればいいですか?]には下記の記述あり。これを信じる事にする。


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


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

という訳で Btrfs によるフォーマット。コマンドの日本語ヘルプはOracle® Linux管理者ソリューション・ガイドfor リリース6 - 5.2 Btrfsファイル・システムの作成

# 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 - インストールガイドを鵜呑みにしながらというワケにはいかない。ちょっと脇道に逸れる模様。結果はインストールガイドと全く同じだけども。

参考文献:

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

# 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 - インストールガイドの手順に戻る。


インターネットへの接続

# 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 が鉄板だと思ってる。特殊事情が無ければこの一択。

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


インストール


ミラーの選択

日本なら 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参照。



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

参考文献:

# 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をインストールする。

参考文献:

# 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


ネットワーク設定

参考文献


ドライバの状態の確認

# 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

このマシンには、組み込みの物の他に、取り付けたネットワークカードもある。それが表れているようだ。それらのドライバがロードされたかチェック。

# 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 デバイス名には「この名前の付け方を止めさせるにはカーネルコマンドラインに net.ifnames=0 を追加してください」なんてあっさり一行で書いてあるけど、カーネルコマンドラインって何だ?調べると結構面倒臭いぞ。ArchLinux - カーネルパラメータ のGRUBの項目には、何だかピンと来ない事が書いてあるし。いや理解してる人が書けば一行なんだろうけど、その背景となる理屈を私は理解しきれていない。このままでは何かあった時に対応できない。

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

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

ちょっと脇道に逸れたが、そういう理由で、systemd-networkdを利用してインターフェース名を固定するように設定してみる。何事も経験だ。

参考文献: ArchWiki - systemd-networkd - インターフェイスの名前を変更

# 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.confarch-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 ネットワーク設定、名前解決の設定とその動作確認の章を追記。