debパッケージの作成(ubuntu,debian)

今回は、いつも使用しているバイナリのソースを見たり、再ビルドしてみる。そんで「deb」パッケージにしてみる。
Linuxを使用している人ならおなじみのlsとかcpとかrmとかが入っている「coreutils」の中身を覗いたりしてみようかと思う。
覗くついでに再ビルドして、これらを実行してみる。(インストールはしないで!)
今回はソースをいじったりしないけど、必要に応じて自分なりのカスタマイズコマンドにしたりすることが出来るのがオープンソースのいいところだと思う。
あと、ここでの手順は色々やっていない(sudo debchange -i:バージョン変更とchangelogの変更)ことがあるので、「sudo dpkg -i xxx」でインストールはしないほうがいいと思う。
でも、「dpkg -x xxx」で適当なディレクトリに展開して稼働確認してみるのは問題ないと思う。

じゃあ、どんな感じなのかやってみよう。

準備
ソースを取得、ビルド、再構成する際には下記のパッケージが必要

sudo apt-get install dpkg-dev build-essential debhelper devscripts

 

まずは作業用ディレクトリを作成

mkdir -p ~/tool/src/coreutils

 

lsコマンド達が入っている「coreutils」パッケージを取得

cd ~/tool/src/coreutils

 

「apt-get source xxxx」でソースを取得できるよ

sudo apt-get source coreutils

 

中を見てみる

~/tool/src/coreutils/coreutils-8.5/src$ l
Makefile.am cp-hash.c expr.c kill.c nice.c readlink.c sum.c uname.c
Makefile.in cp-hash.h extract-magic lbracket.c nl.c remove.c sync.c uname.h
base64.c cp.c factor.c libstdbuf.c nohup.c remove.h system.h unexpand.c
basename.c csplit.c false.c link.c nproc.c rm.c tac-pipe.c uniq.c
c99-to-c89.diff cut.c fmt.c ln.c od.c rmdir.c tac.c unlink.c
cat.c date.c fold.c logname.c operand2sig.c runcon.c tail.c uptime.c
chcon.c dcgen* fs.h ls-dir.c operand2sig.h seq.c tee.c users.c
chgrp.c dd.c getlimits.c ls-ls.c paste.c setuidgid.c test.c wc.c
chmod.c df.c group-list.c ls-vdir.c pathchk.c shred.c timeout.c wheel-gen.pl*
chown-core.c dircolors.c group-list.h ls.c pinky.c shuf.c touch.c wheel-size.h
chown-core.h dircolors.h groups.c ls.h pr.c sleep.c tr.c wheel.h
chown.c dircolors.hin head.c md5sum.c printenv.c sort.c true.c who.c
chroot.c dirname.c hostid.c mkdir.c printf.c split.c truncate.c whoami.c
cksum.c du.c hostname.c mkfifo.c prog-fprintf.c stat.c tsort.c yes.c
comm.c echo.c id.c mknod.c prog-fprintf.h stdbuf.c tty.c
copy.c env.c install.c mktemp.c ptx.c stty.c uname-arch.c
copy.h expand.c join.c mv.c pwd.c su.c uname-uname.c

*.cがいっぱい入ってる。必要であればこれらを弄る。(普通いじる必要ないけど)

 

今回は何も変更を加えずに「debuild」で再ビルドだけしてみる

sudo debuild -us -uc (-uc -usは署名を飛ばすオプション)

 

~/tool/src/coreutils/coreutils-8.5/debian$ sudo debuild -us -uc
dpkg-buildpackage -rfakeroot -D -us -uc
dpkg-buildpackage: warning: using a gain-root-command while being root
dpkg-buildpackage: export CFLAGS from dpkg-buildflags (origin: vendor): -g -O2
dpkg-buildpackage: export CPPFLAGS from dpkg-buildflags (origin: vendor):
dpkg-buildpackage: export CXXFLAGS from dpkg-buildflags (origin: vendor): -g -O2
dpkg-buildpackage: export FFLAGS from dpkg-buildflags (origin: vendor): -g -O2
dpkg-buildpackage: export LDFLAGS from dpkg-buildflags (origin: vendor): -Wl,-Bsymbolic-functions
dpkg-buildpackage: source package coreutils
dpkg-buildpackage: source version 8.5-1ubuntu6
dpkg-buildpackage: source changed by Colin Watson <cjwatson@ubuntu.com>
dpkg-source --before-build coreutils-8.5
dpkg-buildpackage: host architecture i386
dpkg-checkbuilddeps: Unmet build dependencies: dh-buildinfo texinfo (>= 4.2) groff dpatch libattr1-dev | not+linux-gnu libacl1-dev | not+linux-gnu libselinux1-dev (>= 1.32) | not+linux-gnu gperf bison
dpkg-buildpackage: warning: Build dependencies/conflicts unsatisfied; aborting.
dpkg-buildpackage: warning: (Use -d flag to override.)
debuild: fatal error at line 1348:
dpkg-buildpackage -rfakeroot -D -us -uc failed

 

おー。failedだっ
Unmet build dependencies=満たされていないビルドの依存関係

 

足りてないらしのでインストールする

sudo apt-get install dh-buildinfo libattr1-dev libacl1-dev libselinux1-dev texinfo groff dpatch gperf bison

 

で、もう一回

sudo debuild -us -uc

 

ビルド中

いつもより余計にCPU使用中

Finished running lintian.
ビルド終わった

 

debファイルが出来ているか確認してみる

cd ~/tool/src/coreutils$ ll -tr
-rw-r--r-- 1 root root 10740866 2010-06-08 18:05 coreutils_8.5.orig.tar.gz
drwxrwxr-x 3 hoge hoge 4096 2012-03-04 21:06 ../
-rw-r--r-- 1 root root 23313 2012-03-04 21:54 coreutils_8.5-1ubuntu6.diff.gz
-rw-r--r-- 1 root root 1013 2012-03-04 21:54 coreutils_8.5-1ubuntu6.dsc
drwxr-xr-x 14 root root 4096 2012-03-04 22:02 coreutils-8.5/
-rw-r--r-- 1 root root 15752 2012-03-04 22:03 mktemp_8.5-1ubuntu6_all.deb
-rw-r--r-- 1 root root 4642556 2012-03-04 22:03 coreutils_8.5-1ubuntu6_i386.deb
drwxrwxr-x 3 hoge  hoge 4096 2012-03-04 22:03 ./
-rw-r--r-- 1 root root 1729 2012-03-04 22:03 coreutils_8.5-1ubuntu6_i386.changes
-rw-r--r-- 1 root root 171912 2012-03-04 22:04 coreutils_8.5-1ubuntu6_i386.build

coreutils_8.5-1ubuntu6_i386.debが出来ている。

 

今はやらないけど

sudo dpkg -i coreutils_8.5-1ubuntu6_i386.deb

でインストール。

 

debパッケージの中身を見る

dpkg -c coreutils_8.5-1ubuntu6_i386.deb
:
:
-rwxr-xr-x root/root 21956 2012-03-04 22:03 ./bin/true
-rwxr-xr-x root/root 112448 2012-03-04 22:03 ./bin/cp
-rwxr-xr-x root/root 21996 2012-03-04 22:03 ./bin/uname
-rwxr-xr-x root/root 34312 2012-03-04 22:03 ./bin/readlink
-rwxr-xr-x root/root 104228 2012-03-04 22:03 ./bin/mv
-rwxr-xr-x root/root 46652 2012-03-04 22:03 ./bin/ln
-rwxr-xr-x root/root 42536 2012-03-04 22:03 ./bin/mkdir
-rwxr-xr-x root/root 104412 2012-03-04 22:03 ./bin/ls

 

debパッケージの情報を見る

~/tool/src/coreutils$ dpkg --info coreutils_8.5-1ubuntu6_i386.deb
new debian package, version 2.0.
size 4642556 bytes: control archive= 7396 bytes.
1177 bytes, 26 lines control
14954 bytes, 251 lines md5sums
Package: coreutils
Version: 8.5-1ubuntu6
Architecture: i386
Essential: yes
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Installed-Size: 12808
Pre-Depends: libacl1 (>= 2.2.51-3), libattr1 (>= 2.4.46-3), libc6 (>= 2.7), libselinux1 (>= 1.32)
Conflicts: timeout
Replaces: mktemp, timeout
Section: utils
Priority: required
Homepage: http://gnu.org/software/coreutils
Description: GNU core utilities
This package contains the basic file, shell and text manipulation
utilities which are expected to exist on every operating system.
.
Specifically, this package includes:
arch base64 basename cat chcon chgrp chmod chown chroot cksum comm cp
csplit cut date dd df dir dircolors dirname du echo env expand expr
factor false flock fmt fold groups head hostid id install join link ln
logname ls md5sum mkdir mkfifo mknod mktemp mv nice nl nohup nproc od
paste pathchk pinky pr printenv printf ptx pwd readlink rm rmdir runcon
sha*sum seq shred sleep sort split stat stty sum sync tac tail tee test
timeout touch tr true truncate tsort tty uname unexpand uniq unlink
users vdir wc who whoami yes
Original-Maintainer: Michael Stone <mstone@debian.org>

 

debパッケージの中身を展開する(バイナリ、ライブラリを指定した場所に展開する)

mkdir temp
dpkg -x coreutils_8.5-1ubuntu6_i386.deb temp

 

展開したものを見てみる

cd bin
~/tool/src/coreutils/temp/bin$ l
cat* chmod* cp* dd* dir* false* ls* mknod* mv* readlink* rmdir* stty* touch* uname*
chgrp* chown* date* df* echo* ln* mkdir* mktemp* pwd* rm* sleep* sync* true* vdir*

 

せっかくだから実行してみよう

~/tool/src/coreutils/temp/bin$ ./ls -l
合計 1476
-rwxr-xr-x 1 hoge hoge 42580 2012-03-04 22:03 cat
-rwxr-xr-x 1 hoge hoge 50748 2012-03-04 22:03 chgrp
-rwxr-xr-x 1 hoge hoge 50720 2012-03-04 22:03 chmod
-rwxr-xr-x 1 hoge hoge 54852 2012-03-04 22:03 chown
-rwxr-xr-x 1 hoge hoge 112448 2012-03-04 22:03 cp
-rwxr-xr-x 1 hoge hoge 54828 2012-03-04 22:03 date
-rwxr-xr-x 1 hoge hoge 50796 2012-03-04 22:03 dd
-rwxr-xr-x 1 hoge hoge 67208 2012-03-04 22:03 df
-rwxr-xr-x 1 hoge hoge 104412 2012-03-04 22:03 dir
-rwxr-xr-x 1 hoge hoge 21968 2012-03-04 22:03 echo
-rwxr-xr-x 1 hoge hoge 21956 2012-03-04 22:03 false
-rwxr-xr-x 1 hoge hoge 46652 2012-03-04 22:03 ln
-rwxr-xr-x 1 hoge hoge 104412 2012-03-04 22:03 ls
-rwxr-xr-x 1 hoge hoge 42536 2012-03-04 22:03 mkdir
-rwxr-xr-x 1 hoge hoge 30184 2012-03-04 22:03 mknod
-rwxr-xr-x 1 hoge hoge 34352 2012-03-04 22:03 mktemp
-rwxr-xr-x 1 hoge hoge 104228 2012-03-04 22:03 mv
-rwxr-xr-x 1 hoge hoge 26132 2012-03-04 22:03 pwd
-rwxr-xr-x 1 hoge hoge 34312 2012-03-04 22:03 readlink
-rwxr-xr-x 1 hoge hoge 54852 2012-03-04 22:03 rm
-rwxr-xr-x 1 hoge hoge 34288 2012-03-04 22:03 rmdir
-rwxr-xr-x 1 hoge hoge 21976 2012-03-04 22:03 sleep
-rwxr-xr-x 1 hoge hoge 58904 2012-03-04 22:03 stty
-rwxr-xr-x 1 hoge hoge 21964 2012-03-04 22:03 sync
-rwxr-xr-x 1 hoge hoge 46640 2012-03-04 22:03 touch
-rwxr-xr-x 1 hoge hoge 21956 2012-03-04 22:03 true
-rwxr-xr-x 1 hoge hoge 21996 2012-03-04 22:03 uname
-rwxr-xr-x 1 hoge hoge 104412 2012-03-04 22:03 vdir

いつも動いているlsじゃなく今回ビルドしたls(./ls -l)で表示出来た。

 

こんな感じで、色々いじれるのがオープンソースの良い所だと思う。
(今回は何もいじってないけど。。)

でも、悪意を持って仕込みをすれば、これが危険であることを認識しておかなければいけないと思う。

http://brokendish.org/debian/449/を参照。

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です