日中は厳しい残暑が続くものの、

このひと月ばかり、
% find x86_64 -type f -user kojima -mtime -40 -name "*txz" | wc -l 367 % find x86 -type f -user kojima -mtime -40 -name "*txz" | wc -l 467
となり、
もちろん、
このひと月ほどの間に、
これくらいのペースでパッケージを作ろうとすると、
Plamo Linuxで採用しているtgz/
PlamoBuildスクリプトの使い方
Plamo Linuxのパッケージを作るためのビルドスクリプトは、
たとえば、
$ ls /usr/share/doc/Thunar-1.4.0/ AUTHORS.gz HACKING.gz README.gtkrc TODO.gz COPYING.LIB.gz INSTALL.gz README.gz Thunar-1.4.0-filename-order.patch.gz COPYING.gz NEWS.gz README.thunarrc ChangeLog.gz PlamoBuild.Thunar-1.4.0.gz* THANKS.gz
PlamoBuildスクリプトは、
例として、
まず適当なディレクトリを用意して、
$ mkdir /mnt/Srcs/T/Thunar ; cd /mnt/Srcs/T/Thunar $ cp /usr/share/doc/Thunar-1.4.0/PlamoBuild.Thunar-1.4.0.gz . $ gunzip PlamoBuild.Thunar-1.4.0.gz
次に、
$ ./PlamoBuild.Thunar-1.4.0 download --2012-09-26 15:03:38-- http://archive.xfce.org/src/xfce/thunar/1.4/Thunar-1.4.0.tar.bz2 archive.xfce.org (archive.xfce.org) をDNSに問いあわせています... 138.48.2.107 archive.xfce.org (archive.xfce.org)|138.48.2.107|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 302 Found 場所: http://mirror.yongbok.net/X11/xfce-mirror/src/xfce/thunar/1.4/Thunar-1.4.0.tar.bz2 ... 100%[======================================>] 1,915,160 25.4K/s 時間 73s 2012-09-26 15:04:53 (25.5 KB/s) - `Thunar-1.4.0.tar.bz2' へ保存完了 [1915160/1915160] Thunar-1.4.0/ Thunar-1.4.0/plugins/ Thunar-1.4.0/plugins/thunar-sendto-email/ Thunar-1.4.0/plugins/thunar-sendto-email/thunar-sendto-email.desktop.in.in ... Thunar-1.4.0/acinclude.m4 Thunar-1.4.0/README $ ls PlamoBuild.Thunar-1.4.0* Thunar-1.4.0/ Thunar-1.4.0.tar.bz2
次にconfigを指定してビルドスクリプトを実行し、
$ cp /usr/share/doc/Thunar-1.4.0/Thunar-1.4.0-filename-order.patch.gz . $ gunzip Thunar-1.4.0-filename-order.patch.gz
なお、
ビルドスクリプトの引数にconfigを指定して実行すると、
$ ./PlamoBuild.Thunar-1.4.0 config patching file thunar/thunar-file.c patching file thunar/thunar-file.h patching file thunar/thunar-file.c checking build system type... x86_64-unknown-linux-gnu checking host system type... x86_64-unknown-linux-gnu ... * Trash Panel Applet: yes * User Customizable Actions: yes * Wallpaper support: yes $
次にbuildを指定して実際のコンパイル作業を行います。
$ ./PlamoBuild.Thunar-1.4.0 build make all-recursive make[1]: ディレクトリ `/mnt2/Srcs/T/Thunar/build' に入ります Making all in icons ... ITMRG Thunar-folder-handler.desktop rm Thunar-folder-handler.desktop.in Thunar.desktop.in Thunar-bulk-rename.desktop.in make[2]: ディレクトリ `/mnt2/Srcs/T/Thunar/build' から出ます make[1]: ディレクトリ `/mnt2/Srcs/T/Thunar/build' から出ます $
最後にpackageを指定して、
$ ./PlamoBuild.Thunar-1.4.0 package Do you want to package as root? [y/N] Making install in icons make[1]: ディレクトリ `/mnt2/Srcs/T/Thunar/build/icons' に入ります Making install in 16x16 ... pruning symlink in /mnt2/Srcs/T/Thunar/work/usr/share/man/mann basename:Thunar version:1.4.0 arch:x86_64 build:P4 ext:txz
以上の操作でThunar-1.
$ ls -l *txz -rw-r--r-- 1 kojima users 955,932 9月 27日 08:01 Thunar-1.4.0-x86_64-P4.txz
作成したパッケージは、
$ tar tvf Thunar-1.4.0-x86_64-P4.txz drwxr-xr-x kojima/users 0 2012-09-27 09:00:00 usr/ drwxr-xr-x kojima/users 0 2012-09-27 09:00:00 usr/share/ drwxr-xr-x kojima/users 0 2012-09-27 09:00:00 usr/share/icons/ ... drwxr-xr-x kojima/users 0 2012-09-27 08:01:11 install/ -rw-r--r-- kojima/users 285 2012-09-27 09:00:00 install/doinst.sh
PlamoBuildスクリプトは、
PlamoBuildスクリプトの内側
次に、
以下では、
スクリプトのヘッダ
ビルドスクリプトの先頭の15行ほどがパッケージに関する情報の定義部分です。GNU autotoolsを採用し、
1 #!/bin/sh
2 ##############################################################
3 url='http://archive.xfce.org/src/xfce/thunar/1.4/Thunar-1.4.0.tar.bz2'
4 pkgbase=Thunar
5 vers=1.4.0
6 arch=x86_64
7 #arch=i586
8 build=P4
9 src=Thunar-1.4.0
10 OPT_CONFIG="--docdir=/usr/share/doc/${src} --disable-static"
11 DOCS='AUTHORS COPYING COPYING.LIB ChangeLog HACKING INSTALL NEWS README THANKS TODO'
12 patchfiles='Thunar-1.4.0-filename-order.patch'
13 compress=txz
14 ##############################################################
15
3行目の"url="行がソースコードの入手先です。ビルドスクリプトではwgetを用いてソースコードをダウンロードするので、
4行目から8行目がパッケージ名に関する情報で、
"arch="はCPUの種類の指定で"x86_
"build="の指定は、
9行目の"src="はソースコードが存在するディレクトリ名を指定します。ビルドスクリプトはこのディレクトリ以下のファイルをビルド用の作業ディレクトリにコピーして、
10行目の"OPT_
11行目はバイナリファイルと共にインストールするドキュメント類の指定です。ここで指定したREADMEやNEWS、
12行目は適用するパッチファイルの指定で、
13行目は圧縮形式の指定で、
configの処理
configを指定した際の処理が195行目から225行目の部分です。
195 if [ $opt_config -eq 1 ] ; then
196 for i in `seq 0 $((${#B[@]} - 1))` ; do
197 if [ -d ${B[$i]} ] ; then rm -rf ${B[$i]} ; fi ; cp -a ${S[$i]} ${B[$i]}
198 done
199 ######################################################################
200 # * ./configure を行う前に適用したい設定やパッチなどがある場合はここに
201 # 記述します。
202 ######################################################################
203 for i in `seq 0 $((${#B[@]} - 1))` ; do
204 cd ${B[$i]}
205 for patch in $patchfiles ; do
206 patch -p1 207 done
208
209 # if [ -f autogen.sh ] ; then
210 # sh ./autogen.sh
211 # fi
212
213 if [ -x configure ] ; then
214 export PKG_CONFIG_PATH=/usr/${libdir}/pkgconfig:/usr/share/pkgconfig:/opt/kde/${libdir}/pkgconfig
215 export LDFLAGS='-Wl,--as-needed'
216 export CC="gcc -isystem /usr/include $target"
217 export CXX="g++ -isystem /usr/include $target "
218 ./configure --prefix=/usr --libdir=/usr/${libdir} --sysconfdir=/etc --localstatedir=/var --mandir='${prefix}'/share/man ${OPT_CONFIG[$i]}
219 fi
220 if [ $? != 0 ]; then
221 echo "configure error. $0 script stop"
222 exit 255
223 fi
224 done
225 fi
この部分では、
その後、
215行目のLDFLAGSで指定している'-Wl,--as-needed'は、
216行目と217行目はgccやg++に与えるオプションの指定で、
ビルドとパッケージ化
configureが終われば次はコンパイル作業ですが、
226 if [ $opt_build -eq 1 ] ; then
227 for i in `seq 0 $((${#B[@]} - 1))` ; do
228 cd ${B[$i]}
229 if [ -f Makefile ] ; then
230 export LDFLAGS='-Wl,--as-needed'
231 make -j3
232 fi
233 done
234 fi
231行目のmake -j3は、
パッケージ化の作業はやや複雑ですが、
250 if [ -f Makefile ] ; then
251 export LDFLAGS='-Wl,--as-needed'
252 make install DESTDIR=$P
253 fi
という形でインストール先のディレクトリをDESTDIRオプションで指定してmake installを実行し、
303 for i in `seq 0 $((${#DOCS[@]} - 1))` ; do
304 for j in ${DOCS[$i]} ; do
305 for k in ${S[$i]}/$j ; do
306 install2 $k $docdir/${src[$i]}/${k#${S[$i]}/}
307 touch -r $k $docdir/${src[$i]}/${k#${S[$i]}/}
308 gzip_one $docdir/${src[$i]}/${k#${S[$i]}/}
309 done
310 done
311 if [ $i -eq 0 ] ; then
312 install $myname $docdir/$src
313 touch -t `date '+%m%d0900'` $docdir/$src/$myname
314 gzip_one $docdir/$src/$myname
315 else
316 ln $docdir/$src/$myname.gz $docdir/${src[$i]}
317 fi
318 ( cd $docdir ; find ${src[$i]} -type d -exec touch -r $W/{} {} \; )
319 done
320
321 for patch in $patchfiles ; do
322 cp $W/$patch $docdir/$src/$patch
323 gzip_one $docdir/$src/$patch
324 done
325
11行目の$DOCSや12行目の$patchfilesで指定したファイルを$P/
351 cd $P
352 /sbin/makepkg ../$pkg.$compress <<EOF
353 y
354 1
355 EOF
356
357 fi
パッケージ作成用ディレクトリに移動して、
352行目で使っている/sbin/
今回紹介したビルドスクリプトはconfigureとmakeだけでビルドできるもっとも簡単なタイプでしたが、