はるかぜ

気ままてきとう雑記。 本HPは左のHP紹介欄バナーから。

メモ:iBook G4にGentoo Linuxを導入する

 流行というのは、何十年周期で回ってくるそうですね。
PowerBook G4にgentooを導入するーなんて記事を書いてから約3年、
当然の時代の流れとでも言うんでしょうか、
なんだか(日本語以外の)記事や動画が充実してまいりましたので、
なんかもう試行錯誤しなくてもいいんじゃないか、
というところまで来ております。

 早く本題に入らないのは私の悪い癖ですね…。
Apple iBook G4(Mid 2005)/PowerBook G4 (Alminium-Rev B, 15"/17")、
これにGentoo Linuxを入れてみました。
尚、この記事ですが、早い話が私のための備忘録です。
出力結果は省略しています。
Qiitaじゃないんでね…HTMLタグ手打ちなんで許して…
また、
所々面倒であったり、
もう導入してから数ヶ月経ったために失念していたりで、
抜けている箇所も多々あるかと思いますので、
これを参考に導入なさるかたは、
先にハンドブックを熟読することをお勧めします:

------------

■ ブートの方法
-> CDブートとUSBディスクブートが可能です。

▼ CDからのブート
予め、Minimal installation CDを作成しておきます。
Cキーを押下しながらiBook G4の電源を投入し、
すぐにMinimal installation CDを挿入します。
GRUBのブート選択画面で、Boot LiveCD (kernel: ppc32)を選択、
そのまま起動します。

▼ USBディスクからのブート
rufus等を使って、Minimal installation CDを用意したUSBディスクに書き込みます。
USBディスクを挿入し、
alt+command+O+Fキーを押下しながらiBook G4の電源を投入します。
Open Firmwareの画面が表示されたら、キーから手を放します。

dev /aliases .properties(版数によってはdevaliasでも可)と入力して実行し、
出力された一覧からudを探します。

-> udがある機種の場合
load ud:,\System\Library\CoreServices\grub.elf を実行、
go を実行します。

-> udがない機種の場合
dev usb0 lsを実行
/disk@1 があれば、
dev usb0、dev disk@1と実行し、pwdを実行してデバイス情報を表示させます。
筆者の環境では、/pci@f2000000/usb@1b/disk@1 ok となりました。
/disk@1がなければ、dev usb1 lsを実行し、上記操作をします。
load /pci@f2000000/usb@1b/disk@1:,\System\Library\CoreServices\grub.elf を実行、
go を実行します。

CDブートより読み込みに時間が掛かりますが、
待つとCD同様GRUBの選択画面が表示されます。
GRUBのブート選択画面で、Boot LiveCD (kernel: ppc32)を選択します。

■ ネットワークへの接続

livecd ~ # net-setup


mac-fdiskによる区画作成

livecd ~ # mac-fdisk /dev/sda


1MiB=2048ブロック

/dev/sda1  Apple Partition Map  63 @ 1    ▼ mac-fdisk操作
/dev/sda2  Apple bootstrap   1600 @ 64   <- b,2p
/dev/sda3  /boot       1310720 @ 1664  <- c,3p,1310720(640MiB確保
/dev/sda4  /        83230720 @ 1312384 <- c,4p,4p


■ 区画の初期化とマウント

livecd ~ # mkfs.ext2 /dev/sda3
livecd ~ # mkfs.ext4 /dev/sda4
livecd ~ # mount /dev/sda4 /mnt/gentoo
livecd ~ # cd /mnt/gentoo
livecd /mnt/gentoo #


スワップファイル(4GiB)の作成

livecd /mnt/gentoo # dd if=/dev/zero of=swapfile bs=128K count=32768
livecd /mnt/gentoo # chmod 600 swapfile
livecd /mnt/gentoo # mkswap swapfile
livecd /mnt/gentoo # swapon swapfile


■ stage tarballのダウンロードと展開


適宜ファイル名*を変更してください:

livecd /mnt/gentoo # tar xpvf stage3-*.tar.bz2 --xattrs-include='*.*' --numeric-owner


コンパイルオプションの設定
▼ /mnt/gentoo/etc/portage/make.conf
筆者の環境はこんな感じです:

# gentoo wikiのSafe CFLAGSを参照
CFLAGS="-O2 -pipe -mcpu=7450 -mtune=7450 -maltivec -mabi=altivec -fno-strict-aliasing"

MAKEOPTS="-j1"
NINJAOPTS="-j1"
USE="X -wayland gtk opengl xfce -gnome -kde elogind -systemd dbus acpi mtp networkmanager bluetooth alsa pulseaudio cups fcitx5"
L10N="ja"
CPU_FLAGS_PPC="altivec"
ACCEPT_KEYWORDS="ppc"
INPUT_DEVICES="libinput synaptics"
VIDEO_CARDS="ati radeon r300"
GRUB_PLATFORMS="ieee1275"


CONFIG_PROTECTやACCEPT_LICENSEは…各自におまかせします(汗

■ ミラーの選択

livecd /mnt/gentoo # mirrorselect -i -o >> etc/portage/make.conf
livecd /mnt/gentoo # mkdir -p etc/portage/repos.conf
livecd /mnt/gentoo # cp usr/share/portage/config/repos.conf etc/portage/repos.conf/gentoo.conf


DNS情報の複写

livecd /mnt/gentoo # cp -L /etc/resolv.conf etc/


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

livecd /mnt/gentoo # mount --types proc /proc /mnt/gentoo/proc
livecd /mnt/gentoo # mount --rbind /sys /mnt/gentoo/sys
livecd /mnt/gentoo # mount --make-rslave /mnt/gentoo/sys
livecd /mnt/gentoo # mount --rbind /dev /mnt/gentoo/dev
livecd /mnt/gentoo # mount --make-rslave /mnt/gentoo/dev
livecd /mnt/gentoo # mount --bind /run /mnt/gentoo/run
livecd /mnt/gentoo # mount --make-slave /mnt/gentoo/run


chroot

livecd /mnt/gentoo # chroot /mnt/gentoo /bin/bash
livecd / # source /etc/profile
livecd / # export PS1="(chroot) ${PS1}"
(chroot) livecd / # mount /dev/sda3 /boot


■ スナップショットの導入

(chroot) livecd / # emerge-webrsync


■ プロファイル選択
適宜プロファイル*を変更してください:

(chroot) livecd / # eselect profile list
(chroot) livecd / # eselect profile set *


タイムゾーンの選択

(chroot) livecd / # echo "Asia/Tokyo" > /etc/timezone
(chroot) livecd / # emerge --config sys-libs/timezone-data


ロケールの設定
▼ /etc/locale.gen

# 以下をコメントアウトして保存する:
en_US.UTF-8 UTF-8
ja_JP.UTF-8 UTF-8

 

(chroot) livecd / # locale-gen
(chroot) livecd / # env-update && source /etc/profile && export PS1="(chroot) ${PS1}"


Gentoo-sourcesの導入

(chroot) livecd / # emerge --ask sys-kernel/gentoo-sources sys-kernel/genkernel dev-util/pahole sys-kernel/linux-firmware


参考にしたい.configファイルがあるなら、
それに合ったバージョンのソースを導入します。
gentooのppcフォーラムにいいスレッドがありますよ…

(chroot) livecd / # eselect kernel 1


▼ /etc/fstab
ここでは便宜上ブロック名にしていますが、UUID指定でいいと思います:

/dev/sda3  /boot  ext2  defaults,noatime  0 2
/dev/sda4  /    ext4  noatime       0 1
swapfile   none   swap  sw         0 0


カーネルコンフィグとコンパイル

(chroot) livecd / # cd /usr/src/linux
(chroot) livecd /usr/src/linux # make pmac32_defconfig


使いたい.configがあるなら、
/usr/src/linux/arch/powerpc/configに
例えばg4_defconfigというファイル名で複写後、
make g4_defconfigを実行します。

(chroot) livecd /usr/src/linux # make menuconfig


追加すべきものや外すべきもの、
追加したいものや外したいものを選択していきます。
追加すべきものとは、

Device Drivers --->
 Graphics support --->
  <M> ATI Radeon

Device Drivers --->
 Generic Driver Options --->
  Firmware loader --->
   (radeon/R300_cp.bin) Build named firmware blobs into the kernel binary

Device Drivers --->
 -*- Network device support --->
  [*] Wireless LAN --->
   [*] Broadcom devices
    <M> Broadcom 43xx wireless support (mac80211 stack)


外すべきものは、
ATI用Framebufferの無効化

Device Drivers --->
 Graphics support --->
  Frame buffer Devices --->
   <*> Support for frame buffer devices --->
    < > ATI Radeon display support


追加したいものは、例えばzramモジュールの有効化など。
外したいものは…なんでしょね。

できた.configファイルを、genkernelで扱えるように、どこかに複写します。

(chroot) livecd /usr/src/linux # cp .config .config.bak
(chroot) livecd /usr/src/linux # genkernel --no-mrproper --no-clean --kernel-config=/usr/src/linux/.config.bak all

 

(chroot) livecd /usr/src/linux # cd
(chroot) livecd / #


■ ネットワーク関連の設定
▼ /etc/conf.d/hostname

hostname="PC名"


▼ /etc/conf.d/net

dns_domain_lo="ドメイン名"


▼ /etc/hosts

127.0.0.1  PC名.ドメイン名 PC名 localhost


■ rootパスワードの設定

(chroot) livecd / # passwd


■ キーボードレイアウト設定
▼ /etc/conf.d/keymaps

keymap="jp106"


■ ハンドブックで指定されている、追加で導入するもの

(chroot) livecd / # emerge --ask app-admin/sysklogd sys-process/cronie sys-apps/mlocate
(chroot) livecd / # rc-update add sysklogd default
(chroot) livecd / # rc-update add cronie default


■ 扱いたいファイルシステムがあるなら

(chroot) livecd / # emerge --ask sys-fs/dosfstools sys-fs/ntfs3g


■ ネットワーク関連のパッケージ導入

(chroot) livecd / # emerge -av net-misc/networkmanager sys-firmware/b43-firmware


■ zram-initの導入

(chroot) livecd / # emerge -av zram-init


▼ /etc/conf.d/zram-init
圧縮率結構いいっていうんですが…
1/2弱と仮定して、必要な箇所を編集、
既定で記述のある、type1以下は削除します。

type0=swap
size0=2048
algo0=zstd


■ サービスの有効化

(chroot) livecd / # rc-update add NetworkManager default
(chroot) livecd / # rc-update add bluetooth default
(chroot) livecd / # rc-update add zram-init default
(chroot) livecd / # rc-update add cupsd default
(chroot) livecd / # rc-update add elogind boot


■ 読み込むモジュールの指定
▼ /etc/modules-load.d/ppc.conf

apm_emu
therm_adt746x
snd-aoa-i2sbus
i2c-dev
pmu_battery


■ ユーザの作成とパスワードの設定

(chroot) livecd / # useradd -m -G users,wheel,audio,video,lp,plugdev,cdrom,cdrw,floppy -s /bin/bash ユーザ名
(chroot) livecd / # passwd ユーザ名


ブートローダ関係の作業

(chroot) livecd / # emerge --ask sys-boot/grub sys-fs/hfsutils sys-apps/ibm-powerpc-utils

 

(chroot) livecd / # hformat /dev/sda2
(chroot) livecd / # mkdir -p /mnt/bootstrap
(chroot) livecd / # mount -t hfs /dev/sda2 /mnt/bootstrap
(chroot) livecd / # grub-install --macppc-directory=/mnt/bootstrap
(chroot) livecd / # umount /dev/sda2

 

(chroot) livecd / # hmount /dev/sda2
(chroot) livecd / # hattrib -t tbxi -c UNIX :System:Library:CoreServices:BootX
(chroot) livecd / # hattrib -b :System:Library:CoreServices
(chroot) livecd / # humount

 

(chroot) livecd / # grub-mkconfig -o /boot/grub/grub.cfg


■ 再起動

(chroot) livecd / # exit
livecd /mnt/gentoo # cd
livecd ~ # umount -l /mnt/gentoo/dev/{shm,pts,}
livecd ~ # umount -R /mnt/gentoo
livecd ~ # reboot



 お疲れさまでした。
旧式のPCでこれをやると、まあひどく時間がかかるわけで…
正直、genkernelやらなくても、
今はカーネルイメージをそのまま配布していますので、
それを使うのもひとつ手だと思います。
動くみたいですよ。

これでちゃんと起動して、ログインができるようなら、
デスクトップ環境を揃えられるというわけです。
先に分散コンパイルの準備をしたほうがいいかもしれませんが…
どっちの記事を先に書こうかしら。

------------

分散コンパイル