LoginSignup
1
0

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-02-24

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

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0