今回は、いつも使用しているバイナリのソースを見たり、再ビルドしてみる。そんで「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)で表示出来た。
こんな感じで、色々いじれるのがオープンソースの良い所だと思う。
(今回は何もいじってないけど。。)
でも、悪意を持って仕込みをすれば、これが危険であることを認識しておかなければいけないと思う。
https://brokendish.org/debian/449/を参照。