続・玩式草子 ―戯れせんとや生まれけん―

第15回 Days of WINE and Struggles[2]

この記事を読むのに必要な時間:およそ 4.5 分

7月YZ日:CLFS環境完成とPlamo用ビルドツールの導入

CLFSの記述に従ってソフトウェアのビルド,インストールを進めてきたものの,今ごろになってイヤなことに気がついた。というのも,CLFSでは32ビット版のライブラリを/usr/lib/に収め,64ビット版のライブラリは/usr/lib64/に収めるという設定になっていることだ。

Plamo Linuxでも,32ビット版をメインに開発していた6.xまではこのスタイルで配置していたものの,64ビット版をメインにした7.xでは64ビット版のライブラリを/usr/lib/に収めているので,32ビット版のライブラリは/usr/lib32/に収めるようにしなければならない。

前のステップに戻って作り直した方がいいかな,と考えたものの,今作っているのはCLFS環境であってPlamo Linux用のパッケージではないし,Plamo用には再度クロスコンパイル用GCCパッケージから作り直すことになるので,CLFSの構築はクロスコンパイルの経験値を高めるための修行と割り切って,ビルド,インストールを続けることとした。

CLFS10章の最後の方になってくるとlibpipelinelibestrlibeeなど,あまり記憶にないライブラリも入ってくる。これらPlamo用にビルドしたことのないソフトウェアについては,今後パッケージ化する必要があるかどうかを考えないといけないだろう。

今回はchroot環境のまま運用するつもりなので,rsysloggrubsysvinitといったシステム運用/起動用のツールは不要と判断した。また,11章以降では起動用の各種スクリプトやネットワーク回りの設定等が続くものの,これらもCLFSを本格運用するつもりはないので不要と考え,とりあえず10章を終えたあたりでCLFS環境は完成とした。

さて,CLFS環境は完成したものの,本来の目標はPlamo LinuxのMultilib化なので,次はCLFS上でPlamo用のクロスコンパイルツールを作成することになる。Plamo用のパッケージ作りには多少手間がかかるかな,と心配したものの,やってみると意外と簡単で,パッケージを作成するためのmakepkgコマンドを含むパッケージ管理ツールpkgtoolsとビルドスクリプトの補助機能を提供するパッケージplamobuildをtarコマンドで展開すれば事足りた。このあたりは専用のパッケージツールを必要としないPlamo Linuxのメリットと言えそうだ。

まずは2つのパッケージをchroot環境内から利用できる場所に移しておく。

# cp pkgtools-7.0-x86_64-B3.txz plamobuild-1.4-noarch-B1.txz /mnt/clfs/sources

次に,chrootしたCLFS環境内で,これらのパッケージを"/"以下に展開する。

root@pl72:/mnt/clfs/sources# tar xvf pkgtools-7.0-x86_64-B3.txz -C /
sbin/
sbin/installer/
sbin/installer/busybox
...
root@pl72:/sources# tar xvf plamobuild-1.4-noarch-B1.txz -C /
usr/
usr/share/
usr/share/plamobuild_functions.sh
...

この状態でPlamo-7.x用のPlamoBuildスクリプトを試したら,そのままでパッケージ作成まで実行できた。

# cp PlamoBuild.binutils-2.32 /mnt/clfs/sources
root@pl72:/mnt/clfs/sources# ./PlamoBuild.binutils-2.32        
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking target system type... x86_64-pc-linux-gnu
checking for a BSD-compatible install... /tools/bin/install -c
checking whether ln works... yes
checking whether ln -s works... yes
....
/bin/sh ./libtool  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I/sources/Binutils/binutils-2.32/bfd
   -DBINDIR='"/usr/bin"' -I. -I/sources/Binutils/binutils-2.32/bfd -I/sources/Binutils/binutils-2.32/bfd/../include
   -DHAVE_x86_64_elf64_vec -DHAVE_i386_elf32_vec -DHAVE_iamcu_elf32_vec -DHAVE_x86_64_elf32_vec -DHAVE_i386_pei_vec
   -DHAVE_x86_64_pei_vec -DHAVE_l1om_elf64_vec -DHAVE_k1om_elf64_vec -DHAVE_elf64_le_vec -DHAVE_elf64_be_vec
   -DHAVE_elf32_le_vec -DHAVE_elf32_be_vec -DHAVE_x86_64_pe_vec -DHAVE_x86_64_pe_be_vec -DHAVE_i386_pe_vec
   -DHAVE_plugin_vec   -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -Wstack-usage=262144
   -g -O2 -MT pe-x86_64.lo -MD -MP -MF .deps/pe-x86_64.Tpo -c -o pe-x86_64.lo
   /sources/binutils-2.32/bfd/pe-x86_64.c
...
pruning symlink in /sources/Binutils/work/usr/share/man/mann
basename:binutils
version:2.32
arch:x86_64
build:B1
ext:txz

root@pl72:/sources# tar tvf binutils-2.32-x86_64-B1.txz 
drwxr-xr-x root/root         0 2019-12-02 12:29 var/
drwxr-xr-x root/root         0 2019-12-02 12:29 var/local/
drwxr-xr-x root/root         0 2019-12-02 12:29 var/local/la-files/
-rwxr-xr-x root/root       980 2019-12-02 12:29 var/local/la-files/libbfd.la
-rwxr-xr-x root/root      1003 2019-12-02 12:29 var/local/la-files/libopcodes.la
drwxr-xr-x root/root         0 2019-12-02 12:29 usr/
drwxr-xr-x root/root         0 2019-12-02 12:29 usr/lib/
-rw-r--r-- root/root   2322920 2019-12-02 12:29 usr/lib/libopcodes.a
-rw-r--r-- root/root  12217270 2019-12-02 12:29 usr/lib/libbfd.a
...

Plamoの場合,tarとxzさえあれば手作業でもパッケージは作れるものの,使い慣れたPlamoBuildスクリプトが動けば設定情報等も保存できるので心強い。まずは,CLFSの手順をビルドスクリプトに反映してPlamo用のMultilib版GCCを作ることにしよう。


今回はCLFSの記述そのままの作業なので,あまりCLFSの内容は引かずに,筆者の感想を中心にまとめてみました。

CLFSやその元となったLFSは手順やパッチ等がよく考慮されていて,初見では何のためかわからなかった変更箇所が,だいぶ後になって「ああ,ここの処理のためだったのか」と気づくことがよくあります。

そのあたり,もう少し詳しい解説が欲しいな,と思う反面,すでに通読するには大変なサイズになっているので,詳しさと分量のバランスに配慮する編集者の苦労が偲ばれるところです。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html