💻

古いNetbookにArch Linuxを入れてみる

2024/03/22に公開

Ubuntu Server 14.04で長い間サーバとして運用されていたネットブックGateway Notebook LT4010uをやっと退役させることができたので、手元で汎用の端末として利用できるようにします。このマシンのCPUはIntel Atom N2600でメモリは1 GBのようです。フラッシュメモリからXubuntu 22.04のインストーラを起動してみたところ、

Initramfs unpacking failed: write error

というエラーを表示して止まってしまいます。きっとメモリが足りないのでしょう。せっかくなので、Arch Linuxを試してみることにしました。

この記事は2024年1-3月の作業をMastodonに記録していたメモから再編集したものです。不正確な情報や記録されていない手順があるかもしれません。

インストーラの起動と基本的なパッケージのインストール

Installation guideに従って作業を進めました。

インストーラのイメージをダウンロードしてUSBフラッシュメモリに書き込み、ネットブックのUSBポートに挿入して起動しました。このネットブックでは、カーネルの起動オプションとしてnomodesetを追加する必要がありました。

下記のコマンドでWPA-PSKのWiFiへ接続しました。

# iwctl --passphrase <パスフレーズ> station wlan0 connect <SSID>

mkfsとmkswapでサーバ時代のルートファイスシステムとスワップ領域をまっさらにした後、下記のコマンドでルートファイルシステムを/mntにマウントし基本的なパッケージを導入しました。

# mount /dev/sda1 /mnt
# pacstrap -K /mnt base linux linux-firmware

このまま再起動してもgrubがルートファイルシステムを認識できませんでした。インストーラを起動して、下記のコマンドでルートファイルシステムをマウントし、grubをインストールし再起動しました。

# mount /dev/sda1 /mnt
# arch-chroot /mnt
# pacman -S grub
# grub-install /dev/sda
# exit
# reboot

grubのコマンドラインから下記を指定してOSを起動することができました。

grub> set root=(hd0,msdos1)
grub> linux /boot/vmlinuz-linux root=/dev/sda1 nomodeset
grub> initrd /boot/initramfs-linux.img
grub> boot

rootでログインし、GRUBに従って設定ファイルを作りました。

# grub-mkconfig -o /boot/grub/grub.cfg

起動後の基本的な環境の整備

インストール先でWiFiに接続し、設定ファイルを編集するため、もう一度インストーラから起動して環境を整える必要がありました。

# iwctl --passphrase <パスフレーズ> station wlan0 connect <SSID>
# mount /dev/sda1 /mnt
# swapon /dev/sda2
# arch-chroot /mnt
# pacman -S iwd

vimはインストール中に404 Not Foundになってしまうパッケージがあったので、インデックスの更新もしました。

# pacman -Syy
# pacman -S vim

キーマップの設定

Caps LockをCtrlにするものを作りました。

# cd /usr/local/share/kbd/keymaps
# zcat /usr/share/kbd/keymaps/i386/qwerty/us.map.gz > us-nocaps.map
# vim us-nocaps.map
kaycode 58 = Caps_Lock

の行を、

kaycode 58 = Control

に変更して、

# loadkeys /usr/local/share/kbd/keymaps/us-nocaps.map

でCaps LockをCtrlにすることができたようです。/etc/vconsole.confファイルで

KEYMAP=/usr/local/share/kbd/keymaps/us-nocaps

にしてリブートするとコンソールが期待どおりのキーマップになりました。

インストーラの環境の確認

次の項のネットワークを設定する段階で、インストーラでどのようなサービスが稼動しているのか確認する必要がありました。起動後にインストーラをUSBポートに挿入してみると/dev/sdb1になったようです。下記の手順でインストーラのルートファイルシステムを取り出して/mntにマウントしてみました。

# mount -o ro /dev/sdb1 /mnt
# cp -p /mnt/arch/x68_64/airootfs.sfs /root/
# umount /mnt
# mount -o ro -t squashfs /root/airootfs.sfs /mnt

ネットワークの設定

インストール先では、iwctl station wlan0 connect <SSID>を実行するだけではネットワークインターフェースが有効になるだけでIPアドレスはもらってきてくれませんでした。iwdを参考にいろいろと試しました。作業の過程でlessパッケージもインストールしました。

無線LANインターフェースがIPアドレスをもらうよう、/etc/iwd/main.confファイルを下記の内容で作成しました。

[Network]
EnableIPv6=true
EnableIPv4=true

[General]
EnableNetworkConfiguration=true

パスワードの記録されている/var/lib/iwd/<SSID>.pskファイルにも下記を追加しました。

[Settings]
AutoConnect=true

この状態でリブートして下記のコマンドを実行するとネットワークに接続してIPアドレスをもらってくれるようになりました。

# iwctl station wlan0 connect <SSID>

下記のコマンドで、リブート後にローカルでDNSサーバが起動し、ネットワークの接続時に名前解決が可能になりました。

# systemctl enable systemd-resolved
# cd /etc
# mv resolv.conf resolv.conf.bak
# ln -s /run/systemd/resolve/stub-resolv.conf resolv.conf

下記のコマンドでリブート後にネットワークを接続してくれるようになりました。

# systemctl enable iwd
Created symlink /etc/systemd/multi-user.target.wants/iwd.service → /user/lib/systemd/system/iwd.service.

NTP

しばらく使っていたら時計が進みすぎているのに気づきました。systemd-timesyncd - ArchWikiを参考にNTPクライアントを有効にしてみました。

# timedatectl set-ntp true

しばらくすると時計が同期していました。NTPクライアントを有効にするまでは下記のコマンドはdbusのエラーで失敗していましたが、NTPクライアントを有効にしてからは再起動後もNTPクライアントが有効であることを確認できました。

$ timedatectl status
               Local time: Wed 2024-08-07 20:30:32 HST
           Universal time: Thu 2024-08-08 06:30:32 UTC
                 RTC time: Thu 2024-08-08 06:30:32
                Time zone: Pacific/Honolulu (HST, -1000)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

常用する環境の整備

ホームディレクトリ

サーバとして利用していた時の/home/backupがそれぞれ/dev/sda3/dev/sda4に残っているのを、そのまま利用することにします。

インストーラによって作成された/etc/fstabにはファイルシステムがUUIDとして列挙されているのでそれに倣います。vi /etc/fstabして:r!ls -l /dev/disk/by-uuidして目当てを探して編集しました。

マウントオプションは、/home/と同様relatimeに、/backupはとりあえずro,noatimeにしておきます。後者のマウントポイントはmkdirしておきました。

常用ユーザー

ホームディレクトリの作成先をmount /homeでマウントしておいて、Uses and groupsに従って常用ユーザーを作成します。新規に作成した常用ユーザーのuid,gidはサーバ時代のuig,gidとはかぶらずに済んだようです。

# useradd -m -s /bin/bash zunda
# passwd zunda

常用ユーザーによるリブートやシャットダウン

現状では常用ユーザーは電源を切ることができません。

$ poweroff
Call to PowerOff failed: Access denied

Power managementによると、pokitパッケージで可能になるようです。

# packman -S polkit

Xfce4

Xfceに従ってとりあえず最低限をインストールしてみます。

# pacman -Syy
# pacman -S xfce4
$ startxfce4
/usr/bin/startxfce4: Starting X server

/etc/x11/xinit/xserverc: line 2: /usr/bin/X: No such file or directory
xinit: giving up
xinit: unable to connect to X server: Connection refused
xinit: server error

なるほどな。

Xorgに従ってインストールします。

# pacman -S xorg-server
$ startxfce4

これでXfceが起動してきてくれました。

次にXでもCaps LockキーをCtrlキーとして扱ってもらいます。Index » Newbie Corner » setxkbmap does not persist after putting machine on sleep modeを参考に、下記の内容で/etc/X11/xorg.conf.d/00-keyboard.confファイルを作成しました。

Section "InputClass"
        Identifier "system-keyboard"
        MatchIsKeyboard "on"
        Option "XkbOptions" "ctrl:nocaps"
EndSection

Xfce4の追加のパッケージ群をインストールして、スクリーショットやトラックパッドの設定もしました。

# pacman -Syy
# pacman -S xfce4-goodies

sshクライアント

# pacman -S openssh

鍵対のデフォルトのアルゴリズムはed25519のようです。

$ ssh-keygen

鍵エージェントはXfceが起動してくれるようです。.ssh/configを下記の内容で作成してchmod 600しておいたら、startxfce4した上で最初にsshしたときに得られた鍵をエージェントが覚えておいてくれるようになりました。コンソールでは使えないけれど、まあいいか。

AddKeysToAgent yes

fcitx-skk

Localization/Japaneseを参考に、下記のコマンドで必要なパッケージをインストールしました。

# pacman -S fcitx5-im fcitx5-skk

常用ユーザーでログインして~/.bashrcに下記を追加しました。

GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx

このファイルをsourceしてstartxfce4してターミナルを開き、fcitx5-configtoolを起動して、

  • Available Input Methodからskkを検索して追加
  • Keyboard - English (US)を削除
  • Altを押しながらマウスを上にドラッグしてApplyボタンが見えるようにしてクリック

することで、skkを利用できるようになりました。フォントが無いので、まだ入力した文字を確認することはできません。

日本語のフォント

Rictyが好きだったのですが、他のフォントも使ってみることにします。

# pacman -S otf-ipafont ttf-inconsolata

一般ユーザーでログインしstartxfce4して、Settings-AppearanceからDefault FontをSystem-ui Regular 10に、Default Monospace FontをInconsolata Regular 10にしてみました。端末の日本語はよしなに表示してくれるようになりました。「ぱ」と「ば」とは見分けづらいけど、まあいいかな…。

ブラウザ

Firefoxを入れます。

 # pacman -S firefox
  :
There are 2 providers available for jack:
Repository extra
  1) jack2 2) pipewire-jack

デフォルトのjack2にしてみました。

フォントはnoto-fontsにしてみました。

manページ

システムコールのmanページを索けないことに気づきました。

# pacman -S man-pages

手元の環境ではmanパッケージはデフォルトでインストールされていて、pacman -Ql pacman | grep -Eo 'man/man./.+などのコマンドラインで確認するとman関係のページは同梱されていました。pacmanコマンドについてはpacmanパッケージにmanページが同梱されていました。

Discussion