ジャンル不定の日記です。

LOOX U/C40にGentoo Linuxを入れてみた

先日ひさしぶりにArchlinux32が入ったLOOX U/C40を起動してアップデートしたら壊れて再インストールしたが、
現在のArchlinux32は公式リポジトリでパッケージバージョンの不整合が起きてるようで自分でlibにリンク張ったりする必要があって継続利用は厳しいと感じた。

古いPCで使える32bitのLinuxを探したんだが、Gentoo Linuxならソースからビルドだから永久に32bit対応じゃね?
つーわけでGentoo Linuxをインストールしてみた。

公式サイトからx86のMinimal Installation CDをダウンロードしてきて、USBメモリにcatで書き込んでsyncして抜き取る。
以前はUSBメモリにisoを書き込む時にddしてたが、この前Archlinux32を再インストールする時にArch LinuxのUSBメディアの作成方法がcatになってたんで同様にcatで書き込んだ。
昔からcatは変わってないと思うが、なんで昔はddだったんだろ?
# cat>/dev/sda
# sync
sdaがUSBメモリ。

USBメモリでブートするとキーマップの選択ぽいのがでるんでjpを入力するとjpキーボードになる?
jpキーボードに初回はならなくてloadkeys jp106したんだが、インストール中に問題が生じて再起動したときは最初からjpキーボードだったんで入力ミスったかも?

[ネットワーク]
ISOから起動すると有線DHCP環境の場合は自動でネットワークが利用できるがwifiはダメ。
net-setupってコマンドがあるんでそれ使った。

[ストレージ]
# fdisk /dev/sda
# mkfs.ext4 /dev/sda1
Archlinux32を再インストールした際に/bootを分けて失敗したんでシングルパーティションにした。

[マウント]
mount /dev/sda1 /mnt/gentoo
cd /mnt/gentoo
最初から/mnt/gentooが作られてるんで、そこにマウント。
Gentooハンドブックでマウント後にcdしてたんで同じようにしてたが、rootfsのtarをダウンロードする際にストレージ上に保存するってだけだと思うんで、
メモリが十分にあればcdしなくても良いと思う。
ハンドブックだとミラーからStage3(初期rootfs?)をLinksでダウンロードしてくるように書いてあるが、ミラーのファイルはバージョンがバラバラだったんで、
[Get Gentoo]を押して公式サイトのダウンロードページに飛んで[x86]を押してi686 systemdのStage3を落とした。

[Stage3の展開]
# tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner -C /mnt/gentoo

[chroot]
# cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
# mount --types proc /proc /mnt/gentoo/proc
# mount --rbind /sys /mnt/gentoo/sys
# mount --make-rslave /mnt/gentoo/sys
# mount --rbind /dev /mnt/gentoo/dev
# mount --make-rslave /mnt/gentoo/dev
# mount --bind /run /mnt/gentoo/run
# mount --make-slave /mnt/gentoo/run
# chroot /mnt/gentoo /bin/bash
# source /etc/profile
# export PS1="(chroot) ${PS1}"
Gentooハンドブックの通りにやったがめんどくさい。
arch-chrootみたいなコマンドがほしい・・・

[ミラーサーバーを選択]
# emerge --ask --verbose --oneshot app-portage/mirrorselect
# mirrorselect -i -o >> /etc/portage/make.conf
emergeがパッケージ管理コマンドでapp-portageカテゴリのmirrorselectを入れる感じ。--ask --verboseは-avと省略できるみたい。
mirrorselectコマンドはダイアログが出てきてスペースで選択(複数可)してEnterで終了。
出力をportageの設定ファイルに追加する。
パッケージ管理コマンドはemergeなのにパッケージシステムはportageって名称って感じかな?
ftp://の日本のサーバーを選択した。

[バイナリパッケージ]
# /etc/portage/make.conf
# FEATURES="${FEATURES} getbinpkg"
# FEATURES="${FEATURES} binpkg-request-signature"
これでバイナリパッケージが優先されるらしい。
だが、64bitならそこそこバイナリパッケージがあるようなんだがi686だとほとんど無かった。

[CPU_FLAGS]
# emerge --ask --oneshot app-portage/cpuid2cpuflags
# echo "*/* $(cpuid2cpuflags)" > /etc/portage/package.use/00cpu-flags
これでコンパイルの際にCPUに最適化される?

[linux-firmware]
# nano /etc/portage/package.license
sys-kernel/linux-firmware linux-fw-redistributable
# emerge --ask sys-kernel/linux-firmware
linux-firmwareを入れる際にライセンスで弾かれるんで、sys-kernel/linux-firmwareにlinux-fw-redistributableを追加する。
linux-fw-redistributableはクローズドだがバイナリ再頒布が認められたものがインストール対象になるぽい。

[kernelインストール]
# nano /etc/portage/package.use/installkernel
sys-kernel/installkernel grub dracut
# emerge --ask sys-kernel/gentoo-kernel-bin
/etc/portage/package.use以下のファイルに設定するとパッケージ単位でUSEフラグがつけられる。
sys-kernel/installkernel grub dracutをつけるとカーネル(再)インストール時にgrub.cfgとinitramfsの再作成が行われる。
gentoo-kernelが標準kernelでbinパッケージを入れた。
が、kernel自体はバイナリだが依存関係で80パッケージインストールになって12時間ほどかかった。

# nano /etc/portage/make.conf
USE="dist-kernel"
標準kernelを使う場合、USEフラグにdist-kernelがあるとモジュールインストールをした場合にinitramfsの再作成などをしてくれるぽい。
/etc/portage/make.confはportageのグローバル設定ファイル。

[fstab]
# nano /etc/fstab
# /dev/sda1 ext4 defaults 0 0

[rootパスワードとユーザー作成]
# passwd
# useradd -m user
# passwd user

[システム初期設定]
# systemd-machine-id-setup
# systemd-firstboot --prompt
# nano /etc/hostname
localhost
systemd-machine-id-setupマシンIDを設定して、systemd-firstboot --promptはキーボードとホスト名の設定なのか?
キーボードはjp106にしたらエラーになった。
ホスト名もよくわからんかったからnanoで直接設定した。

[時刻同期]
メインPCを参考にsystemd-timesyncdで同期するようにした。
Arch Wikiが詳しい。
[ファイルシステムツール]
# emerge --ask sys-fs/e2fsprogs

[DHCP]
emerge --ask net-misc/dhcpcd
systemctl enable dhcpcd

[Wifi]
# nano /etc/portage/package.use/iwd
net-wireless/iwd +client
# emerge --ask net-wireless/iwd
Gentooハンドブックだとwpa_supplicantを使うように書かれてるが、先日Archlinux32を入れた際にiwctlを使ってwpa_supplicantより簡単と思ったんでiwdを入れた。
が、+clientのUSEフラグをつけないとiwdのインストールの際にiwctlが入らない模様。
なしでインストールして最後の出力で気づいた・・・

[ブートローダ]
# grub-install --target=i386-pc /dev/sda
# grub-mkconfig -o /boot/grub/grub.cfg
Gentooハンドブック見ながらインストールしてて、kernelインストールの際にgrubフラグをつけてたんでgrub-mkconfigは入ってるものと認識してたが、grub-installは入ってないと勘違いしてgrubをemergeしてしまった。
[Y]押した直後にリビルドになってるのに気づいたが、強制終了しちゃって良いのかわからなかったんで再インストールしたが2時間ほどかかった・・・
grub-mkconfigはkernelインストールの際に行われてるので省略可能だが、確認のため。

grub-installが完了すれば/dev/sdaから再起動できるが、
grub-installなんか秒で終わる気がするが10分以上経っても終わらなくておかしいと思って強制終了して何度か試したが完了しなかった。
lsコマンドとかもやたら遅くなってて、どうやらパッケージビルドでディスクアクセスしまくりで異常が発生していた模様。
grubが入る前に再起動は避けたかったが、再起動してchrootからやり直すことにした。
再起動後は秒でgrub-install完了した。

問題なくインストールしたシステムで起動してiwdでネットワークも繋がった。

xfce環境を構築しようとして、
Gentooハンドブックでシステムのプロファイルをdesktopにするのが推薦されているが、gnomeとplasmaにはsystemdのプロファイルがあるが、desktopにはsystemdのプロファイルがないんで変更しなかった。

xfceを入れるとpopplerが依存で入るがpopplerは標準だとqt5が入るらしいんで、
nano /etc/portage/package.use/xfce
app-text/poppler -qt5
でpopplerからqt5フラグを外した。

xfce-extra/xfce4-notifydを先に入れるように書かれているんで、
# emerge --ask --oneshot xfce-extra/xfce4-notifyd
したが弾かれる。
/etc/portage/make.confでUSEフラグに"X gtk3 harfbuzz"を追加するとインストールできる。

が、途中でまた遅くなった感じがして、よく見るとemergeの出力に紛れてjournaldのエラー出力が・・・
強制終了して再起動して、journaldのログ出力をvolatileに変更した。
emerge強制終了後は、
# emerge --resume
で再開できるらしい。


でインストール進めてたんだが、どうもメモリ不足ぽいエラーで止まった。
1GBだとxfceのビルドはできない模様・・・
ストレージをメインPCにつないでQEMUでビルドするとか考えたが、面倒だわ。

Gentoo以外にLinuxではなくBSDを使うってことも考えたんだが、そっち方向試してみるか・・・
tinycoreなんかもi686対応なんで考えたが、あれはストレージには余裕がないがメモリには余裕がある環境向けよね・・・