古いNetbookにArch Linuxを入れてみる
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