1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

32bitのポケットPCにGentooを入れてみたい人生だった (WIP

Last updated at Posted at 2021-01-28

Macはいいんだが、度々思うことがある。
フルカスタムできるLinuxがほしい。
Archが良いんじゃないか?
32bitに対応してない。
Linuxはどこも64bitのみの配布に切り替わっていくらしい。

よしわかった。Gentooを入れよう(決意)。

ネタバレ:
途中で心折れてとまりました。いつか続きやる
手順としては終わっているので、初めて入れる場合の参考にはなるかもと思い投下。

環境

余ってるマシン

  • VAIO Pシリーズ VGN-P90NS
    もともとVista入ってたポケットPC。
    ポインティングデバイスはトラックポイント。いいゾこれ。

インストール手順

手持ちのマシンが32bitだったため、基本的にこちらの公式wikiの手順どおりにすすめていく。

なお、shellについてはプロンプトを $ としているが、実際はrootユーザで行っているので、あしからず。

インストールディスク用意

iso拾ってくる

Gentooはビルドの段階に Stage というものがあり、本当にベースから組みたい人は Stage1 からビルドするらしい。
よしわかった。ほとんど揃ってる Stage3 でインストールしよう。(逃げ腰)

USBメモリに焼く

このあたり曖昧なのだが、Vaio type P はUSBからの起動の際、MBR だとうまくいくようす。
このため、ディスクユーティリティからUSBをフォーマットする時、FAT の MBR でフォーマットしている。
母艦がMacなので、漢は黙って dd

$ diskutil list # USBらしきものを確認
# さっき見たN番を入れてアンマウント
$ diskutil unmountDisk /dev/diskN
# ifにはisoのパス、ofはdiskにr付き(RAW)で番号をいれる。
$ dd if=/path/of.iso of=/dev/rdiskN bs=4m

ブート、初期設定

vaioはF2でBIOSが開いた。
USBメモリが優先的に読まれるように変える。

起動

どのカーネルでBootするか聞かれたので、F1で一覧を見せてもらい、
ひとまずgentooを選択。
ここでハードウェア類のオプションなんかをつけられる様子。まずつけないでなんとかしてみる。

この後、起動の最中に一瞬だけキーボード配列を確認されるタイミングがある。
ほっとくと勝手に進んでしまうので、JPと書かれた22番を指定。jisキーボードとして認識される。
※22じゃなくなってる可能性あるので要確認

ただ、できなくても後で設定ができるので、以下の通り編集。

$ vi /etc/conf.d/keymaps # エディタ初心者はnano使ったほうがいいかも

# 以下のように編集して保存
...省略...
keymap="jp106"
...省略...

$ rc-service keymaps restart

ネットワーク設定

プロンプトが立ち上がったので ifconfig すると、無線LANアダプタが認識されていたので net-setup アダプタ名 で設定をすすめる。 以下wpa_supplicantでの設定を参照。
SSIDを一覧で表示して、旦那様どれになさいます?なんてことはないので、
Macで接続している情報を元に、
SSID、セキュリティの種類、password、を入力して接続。
ping -c 3 google.com として疎通を確認する。
ただ、 8.8.8.8 は飛ぶが、 google.com は飛ばない。

原因はipv6だった模様。 ipv6のせいではなかった。
wpa_supplicantで接続するとdhcpまでしっかり行い、ちゃーんとつながってくれた。
wpa_supplicantでの設定についてはArchWikiでかんたんな方法が書いてあるのでこちらでやる
https://wiki.archlinux.jp/index.php/Wpa_supplicant

最近のwifiはだいたいWPA2とかの暗号方式かと思うので、net-setupでは役不足。このあたりはArchwikiのネットワークの設定あたりがわかりやすいので参照のこと。
https://wiki.archlinux.jp/index.php/ワイヤレス設定

追記: DNSが疑われる場合はdhcpcdあたりで dhcpcd <your network interface> するとDHCPサーバにローカルipやらdnsのipやら教わってきてくれる。

一応、以下は備忘録で残す。

標準でipv6が有効になっていて、ipv4しか対応していない弊家回線では使えなかったらしい。
/etc/sysctl.d/ に以下の内容でファイルを作成、ipv6をdisableしてくる。

/etc/sysctl.d/disable_ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
$ sysctl -p /etc/sysctl.d/disable_ipv6.conf # 設定読み込み

これで ifconfig して、 inet6 のアドレスが消えていればOK

※余談
最初、なにを思ったか -p のオブションをQだと空目して、 syscrl: cannot stat /proc/sys//etc/sysctl.d/... とエラーが出て、パスの設定とかマウントとか色々疑って時間を浪費してしまった。恥ずかしい。

ディスクの準備

http://note.kurodigi.com/gentoo-uefi-install/
↑GPTで進めてみている。パーティション切りもこの方法を真似る

パーティション初期化、設定

ハードディスクがどこにあるか、 df -h とか parted -l とかで確認。
追記:

# lsblk # ざっくりディスク名やどのtype(lvmとかdiskとかpartitionとか)とかを表示してくれる
# df -h # 容量みるとき使う
# lvscan # lvmなら

大体、余計なものが刺さってなければ /dev/sdb/ にあるかも。

今回、マザボがUEFI Readyとなっていたので、GPTでインストールしてみる。
以下の作業で元のディスクは読めなくなる。

$ parted /dev/sdb # 今回はsdbだった
(parted) mklabel gpt # YesとかIgnoreしてすすめる。
(parted) print # パーティションテーブルがgptになってるか確認

この後パーティションテーブルを切っていくが、面倒なので以下の設計も参考に。
Gentooをインストールして、XmonadでGUI環境を整える - Qiita

パーティション構成(MiB単位)

  • grub: 1 - 3 (2MiB)
  • boot: 3 - 131 (128MiB)
  • swap: 131 - 16515 (16GiB)
  • root: 16515 - -1 (のこり全部)

追記: ちなみに、このあと数台ArchLinuxをインストールした覚えだと、カーネルが複数入ると想定してboot領域はこれだと少々少ない気がする。念の為に200MiBよりはあるとよさそうかなと思う。今使っているArchは余裕もって512MiB取ってる
更にいうとswapについてはメモリが16GBあるマシンとかなら、正直いらないと思って使っていない(今回のVaio Pは2GBなので要るし、このあと16GBではなく2GBで作成し直している)。最悪欲しくなればパーティションではなくswapファイルを作成して使えばいいし、この柔軟性を確保したければswapパーティションをLVMで切るのが安牌なきがする。ここでは切っていないが、最近Linuxマシンをセットアップする際には必ずLVMにしている。インストールの際にはGentooWikiのLVMの項を確認し、カーネルに含めるのをわすれないとよさそう。

LVMだとわりとかんたんにボリュームサイズを変更したり分けたりくっつけたりできるので、よさそう。例としてはこんな感じ↓
https://densan-hoshigumi.com/server/lvm-change-home-root

以下、公式のインストール手順通り進める。

# 単位をMiBに
(parted) unit mib
# GRUB2用のブートローダ領域
(parted) mkpart primary 1 3
(parted) name 1 grub
(parted) set 1 bios_grub on # grub用のフラグを立てる

partedプロンプトで print すると、grubの領域ができているのが確認できた。
同様にほかも進める。

(parted) mkpart primary 3 131
(parted) name 2 boot
(parted) set 2 boot on # bootフラグ
(parted) mkpart primary 131 16515
(parted) name 3 swap
(parted) mkpart primary 16515 -1
(parted) name 4 rootfs
(parted) print # 確認
(parted) q # quitしておく

ファイルシステムの適用

パーティションを分け終わったのでファイルシステムを適用していく。
fdisk -l すると、さっき切ったパーティションのパスが見える。
ので、これを参考に、最初にswap領域。

$ mkswap /dev/sdb3
$ swapon /dev/sdb3
$ free -g # 認識されているか確認

その他の領域も適用していく。今回はどちらもext4で。

$ mkfs.ext4 /dev/sdb2 # boot領域
$ mkfs.ext4 /dev/sdb4 # root領域

追記: bootでコケるのもアレなので、bootもFAT32 mkfs.fat -F32 /dev/<yourdevice> でフォーマットすることが多くなってきた。ほんとに必要かは不明...

パーティションのマウント

rootパーティションを /mnt/gentoo にマウントする。

$ mount /dev/sdb4 /mnt/gentoo

tarballの展開と準備

stage3 tarballのダウンロード

マウントしたディスクに入る cd /mnt/gentoo/
コマンドラインのブラウザを使い、以下からstage3のtarballを落とす。

$ links https://www.gentoo.org/downloads/mirrors/

JPのミラー配布場所に飛び、 releases/x86/autobuilds/ 内に。
とりあえず、i686のbuildを見つけたので、 d でダウンロード。
終わったら q でブラウザを終了する。

tarballを展開する

$ tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner

今回落としたファイルは tar.bz2 ではなく tar.xz だったので、公式のコマンドから修正。

コンパイルオプションの設定

公式「エディタはnanoを使います」
小生「ヤダ。小生viがいい。」

Gentoo最適化のためにPortageパッケージマネージャの設定をしていく。
/etc/portage/make.conf が設定として使われるので、そこに記入していく。

$ vi /mnt/gentoo/etc/portage/make.conf

(viの使い方は面倒なので、nanoを使うことをおすすめ。)

以下暫定だが、設定をしてみる。

...省略...
COMMON_FLAGS="-O2 -march=native -pipe"
# ↑もともとはmarchはi686だが、native指定で現在のシステムのアーキテクチャを指定してくれるので、一応書き換え。
...省略...
MAKEOPTS="-j2"
# ↑パッケージインストール時の並行実行数。コア数+1がおすすめされているので、2で。

Gentooのベースシステムのインストール

サーバー、リポジトリの設定

ソースを落とす速度を考え、ミラーサーバーを選択しておく。
公式の mirrorselect コマンドでインタラクティブにえらぶ。

$ mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf

スペースでチェックがつけられるので、jaistのサーバーを選択しておいた。

次に ebuildリポジトリの設定。

# おそらく無いので以下ディレクトリを切って、Portageのリポジトリファイルをコピー
$ mkdir --parents /mnt/gentoo/etc/portage/repos.conf
$ cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf

Gentooの環境に入る

の前にDNS情報のコピー

$ cp -L /etc/resolv.conf /mnt/gentoo/etc/

必要になるファイルシステムのマウント。

$ mount -t 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

これ、公式ではprocを --types オプションで指定してるんだが、 /etc/fstab に設定がないよ、とか怒られて、後々うまくいかない。
Gentooのコミュニティとか漁ってたら省略系の -t オプション使ってるのを目にして、ダメ元でやったらうまくいった。

さて次。chrootしてGentooの環境をrootにして、
profileを読み込んで、プロンプトをちょっと変えておく。

$ chroot /mnt/gentoo /bin/bash
$ source /etc/profile
$ export PS1="(chroot) ${PS1}" # なんでもいいけど、わかるようにだけ。

ここがようやくセーブポイント。
ここからは中断してもルートのパーティションをマウントした後、mkswapとかswaponとか、DNS情報をコピーするあたりから戻れる。

ブートパーティションのマウント
あとでカーネルのビルドと、ブートローダーのインストールでつかう。

$ mount /dev/sdb2 /boot

Portageの設定

パッケージマネージャの設定

リポジトリ関係

ebuildリポジトリのスナップショット(Portageのツリーってことか)をアップデート。
以下のコマンドではrsync(873番ポート)が使えない環境向けに、web(80番ポート)で落としてくるものらしい。
要らないけど一応更新掛けて、少し待つ。

$ emerge-webrsync

プロファイルの設定

$ eselect profile list

上記リストから選択。
とりあえずデスクトップ環境は要らない(時間もかかってしまう)ので、そのままなにもないやつを選択。
(今回は[1]番目の default/linux/x86/17.0 (stable) を選択)

$ eselect profile set 1

@World の更新

world setを更新
参考: world setを使おう - 突破してみる?

これでベースシステムの構築ができるらしい。
結構時間食うので、余裕を見て実行されたし。

$ emerge --ask --verbose --update --deep --newuse @world

tmuxとvimのインストール

少しずついつもの環境に近づけていく。

$ emerge -av tmux
$ tmux new -s hogepiyoセッション名

続けてvimも。参考にした先ではデスクトップ環境向けの部分をガン無視して(USEに -X )ビルドしていたので、真似る。
この処理も少しかかるので待機。

$ USE="-X" emerge -av vim

USEフラグの編集

これ、ちょっと曖昧なのだが、Portageパッケージマネージャでビルドする際にデフォルト使うフラグを、 /etc/portage/make.confUSE="hoge -piyo" などと付けておけるものの様子。
まだどれが必要か、というのがわからないので、ひとまず見ていて必要そうだと思ったもののみ記述してみた。
あと、ローカライズ設定もここからできるらしいのでついでに。

/etc/portage/make.conf
USE="unicode git gzip mp3 ogg wifi networkmanager vim-syntax"
...
LINGUAS="ja"
L10N="ja"

タイムゾーン、ロケール

タイムゾーン、ロケールを日本にする。
ロケールは複数選択できるそうだが、utf-8のロケールを最低1つは入れる必要があるとのこと。
その他は使うとは思えないので、 en_US.UTF-8 UFT-8 のみ選択
なんでjpでないかというと、後でところどころ日本語になったときに、豆腐文字化けして(▪▪▪)悲しいので。

$ ls /usr/share/zoneinfo # Japanがあったので今回はそれ
$ echo "Japan" > /etc/timezone
$ emerge --config sys-libs/timezone-data # 設定を適用
/etc/locale.gen
...
# 以下コメントを取った
en_US.UTF-8 UTF-8
ja_JP.UTF-8 UTF-8
$ locale-gen # さっきのファイルに従ってロケールを生成
$ eselect locale list # en_US.utf8の番号を控える
$ eselect locale set 2 # 今回は[2]となっていた

環境をリロードする

$ env-update && source /etc/profile
$ export PS1="(chroot) ${PS1}" # これはプロンプトの識別用に一応。

カーネルのインストール

長い...まだカーネルだ...
ブートローダーまでながい...

カーネルソースをインストール

カーネルのソースをインストールするそうです。
ここもまた、選択のGentooといったところか。
gentoo-sourcesパッケージを使うことが推奨されているので素直に従う。
これまた少々時間がかかる。

$ emerge -av sys-kernel/gentoo-sources
# /usr/src 以下にインストールされていることを確認
$ ls -l /usr/src/linux

さて、この次は2つのアプローチがあるそうだ。

1.カーネルを マニュアル で設定およびビルドする。
2.Linuxカーネルを 自動的 にビルド・インストールするgenkernelを使用する。

おお、自動設定が有るんですか。それではその...

ここ (Gentoo公式Wiki) では、環境を最適化するのに最も適した "マニュアル設定" をデフォルトとして説明します。

おし、やったろみゃーか(血涙)
楽しようとしてgenkernel使ったら、丸1日かけてビルドしたものがコケて心折られたとは言っていない

カーネルをマニュアルでインストール

この Gentoo Install Battle™ に於いて、マニュアルにできるところがあるならば、マニュアルでするしか無いのです。
それがGentooにドハマリした先駆者への礼儀というもの。(なにが)

カーネルのマニュアル設定は難しいと言われるが、幾度かやってみればそんなことはない(Gentoo公式Wiki談)んだそうだ。
そのとき、ハードウェアの構成を知っておくのが大事、とのことで、
lspci などのツールを以下でまとめてインストールしておく。

$ emerge -av sys-apps/pciutils

menuconfigを実行して、インストールするカーネルをカスタマイズする。

$ cd /usr/src/linux
$ make menuconfig

このあたりはこの記事を参照させていただく。
まず走っているカーネルから設定を入手できるよう設定。一旦saveして終わる。
チェックをつけるには y

menuconfig
General setup --->
    <*> Kernel .config support
        [*] Enable access to .config through /proc/config.gz

ということでハードをすべて調べ上げるべきなのだが、
まずはネット関係のみ確実に

有線、無線LAN

$ lspci -k | grep -A 2 -i ethernet
Kernel driver in use: sky2

vimを使い、 sky2 を検索
(vimの初期設定だと大文字と小文字の違いを認識してしまうので :set ignorecase してからの /sky2 )

.config
...
CONFIG_SKY2=y
# CONFIG_SKY2_DEBUG is not set

DEBUGはついていないが、一応SKY2はついているので良しとする。

こんな感じで、探して行くのだが、どうやら .config の並びと make menuconfig の並びが一致するようなので、
大まかなデバイスの種類(EthernetとかNetworkとか)がわかれば、あたりをつけて検索できそう。
まず起動したら今度ビルドし直そう。

そして、カーネルのビルドとインストール。

$ make && make modules_install
$ make install

で、インストールまで完了。

genkernelで楽する (できませんでした。)

以下は失敗したものなので、あくまで手順の記録として。

genkernelでは、最初にGentooのインストールディスクをブートした時と同様に、
自動で判断してカーネルを設定してくれる。
選択のGentooの良さをぶち壊すインストール方法だが、他に勉強しなければならないことがあるので、あしからず。
これはこれで結構インストールに時間がかかった。

$ emerge -av sys-kernel/genkernel

としたのだが、どうやらインストールされていない様子。
何故かと思って調べていたら、Portageにupdateが来ており、それをしていなかったからと言うことのようだ。
ご丁寧に IMPORTANT! と書いていたアップデートを見ていなかった...
調べたフォーラムでは、

IMPORTANT is Important.

という、ありがたいお言葉があったので、肝に銘じることにする。

さて、気を取り直して、公式を参考に etc-update を行い、再度 genkernel のインストールを行った。

つぎ、 /etc/fstab を編集し、 /boot のマウントポジションを記述しておく。

/etc/fstab
/dev/sda2	/boot	ext2	defaults	0 2

カーネルソースをコンパイルする。
ただし、この方法だと何もかもコンパイルするので、小生の低スペ&シングルコアPCでは膨大な時間がかかった。

$ genkernel all

コケました
ビルドに失敗していたようで、結局手動でやりました。
以下続き。

initramfsのビルド

今回ファイルシステムは分けていないのだが、
勉強のためにブート時のRAMベースのファイルシステムをビルドしてみる。

genkernelのインストールは上記のボツ見出しを参考に...

$ genkernel --install initramfs

おわったと思ったら

...
* WARNING... WARNING... WARNING...
* Additional kernel cmdline arguments that *may* be required to boot properly...
* With support for several ext* filesystems available, it may be needed to
* add "rootfstype=ext3" or "rootfstype=ext4" to the list of boot parameters.
...

最後ちょっと気になる表示があったが、調べてみてもそのままで問題になってる人がいなかったのでスルーしておく。

ファームウェアのインストール

一応、インストール後に無線が使えないことが無いように、大凡の無線に対応するファームウェアを入れておく。

$ emerge -av sys-kernel/linux-firmware

実際、入っていたがビルドが数日前の物だった(このインストール自体かなりかかってやっている)ので、一応更新された。

fstabの設定

パーティションに名前をつけて、簡単に指定できる、というものがあるので、使ってみる。

$ e2label /dev/sdb2 boot
$ e2label /dev/sdb4 root
$ e2label /dev/sdb2 # bootと表示されればOK

swapは swapon で。swapし直す。

$ swapoff /dev/sdb3
$ mkswap -L swap /dev/sdb3
$ swapon LABEL=swap

fstab ( /etc/fstab )を書き換える。

/etc/fstab
LABEL=boot    /boot       ext4    noauto,noatime  1 2
LABEL=root    /           ext4    noatime         0 1
LABEL=swap    none        swap    sw              0 0

/etc/conf.d/hostname にホスト名( hostname )、 /etc/conf.d/net にドメイン( dns_domain_lo )をよしなに。

/etc/hosts にも同様に上記を設定。

システム用ツール

それぞれ入れて設定をする。

ログ

$ emerge -av metalog
$ rc-update add metalog default #起動時立ち上がるように

cron
/etc/crontab でcronを使えるように設定しておく。

$ emerge -av fcron
$ rc-update add metalog default
$ crontab /etc/crontab

システム内の検索高速化のため、インデックスを張ってくれる locate コマンド
参考にしていた記事でmlocateパッケージで入れていたのでついでに。

$ emerge -av mlocate

DHCPクライアント

$ emerge -av dhcpcd

あと、公式で推奨しているOpenRCのネットワーク設定スクリプトも。noreplaceオプションも付いているので注意。

$ emerge -avn net-misc/netifrc

grub(ブートローダ)のインストール

ようやく...GRUBまできた...USB起動から開放される...

grubのインストール後、設定ファイルまで生成する。

$ emerge -av grub
$ grub-install /dev/sdb
$ grub-mkconfig -o /boot/grub/grub.cfg

最後に再起動。grubから起動するか...

所感、勉強になったこと

initシステムってなんぞ

もともとGentooではOpenRCというものが使われるらしいが、Portageのプロファイル選択でsystemdを選択することもできる。
このinitはLinuxの機能で、Linuxのランレベルに応じて /etc/init.d/ 内のプロセスを実行するというもの。

参考: Linuxシステムのブート

PortageのUSEフラグ

Portageでは、環境ごと要る要らないという要素をUSEフラグで管理しているようで、
環境ごとに、X Window向けのコードが要らない、とかUnicodeほしい、とかのフラグを立てると、ビルド時に自分の好きなようにカスタマイズできる、ということらしい。
さすが、選択のGentooである。

GRUBからの起動、fstabの設定

GRUB自体はすんなりインストールできていて、USBなしで単体のブートはできたものの、

!! Could not find the root block device in UUID= ...
!! ...

と表示されて、起動の途中で止まってしまった。
このままshellが開けたので /etc/fstab が原因だと思ってviで開いたが
これ、おそらく初回にfstabの設定を中途半端にしていたのが原因で、

今後の展望

  • キー配列の変更 (CapsLock ⇔ Ctrl)

参考

ほぼ @YoshikuniJujo さんの記事ばっかりパクって参照してました。大変参考になりました。

1
0
0

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?