redmine の apt なソース掘削
とりあえず devscripts パケジを入れる。ソースパケジを導入した最初の状態が以下。
$ ls redmine-1.1.3 redmine_1.1.3-4.debian.tar.gz redmine_1.1.3-4.dsc redmine_1.1.3.orig.tar.gz $
.debian.tar.gz って何だろ。導入に関する標準出力も以下に。
$ apt-get source redmine Reading package lists... Done Building dependency tree Reading state information... Done NOTICE: 'redmine' packaging is maintained in the 'Git' version control system at: git://git.debian.org/git/pkg-ruby-extras/redmine.git Need to get 4,873 kB of source archives. Get:1 http://archive.ubuntu.com/ubuntu/ oneiric/universe redmine 1.1.3-4 (dsc) [1,337 B] Get:2 http://archive.ubuntu.com/ubuntu/ oneiric/universe redmine 1.1.3-4 (tar) [4,838 kB] Get:3 http://archive.ubuntu.com/ubuntu/ oneiric/universe redmine 1.1.3-4 (diff) [33.8 kB] Fetched 4,873 kB in 11s (430 kB/s) gpgv: Signature made Fri 02 Sep 2011 04:58:23 AM JST using DSA key ID 074141DC gpgv: Can't check signature: public key not found dpkg-source: warning: failed to verify signature on ./redmine_1.1.3-4.dsc dpkg-source: info: extracting redmine in redmine-1.1.3 dpkg-source: info: unpacking redmine_1.1.3.orig.tar.gz dpkg-source: info: unpacking redmine_1.1.3-4.debian.tar.gz dpkg-source: info: applying 2001_fix_shebang_interpreter.patch dpkg-source: info: applying 2002_FHS_through_env_vars.patch dpkg-source: info: applying 2003_externalize_session_config.patch dpkg-source: info: applying 2004_FHS_plugins_assets.patch dpkg-source: info: applying 2005_FHS_schema_dump.patch dpkg-source: info: applying 2006_fix_shebang_interpreter.patch dpkg-source: info: applying 2008_force_table_encoding_mysql.patch dpkg-source: info: applying 2009_FHS_thin_config.patch dpkg-source: info: applying 2010_use_i18n_0.4.1.patch dpkg-source: info: applying 1013_cookie_symbol_to_s.patch dpkg-source: info: applying 1014_send_CSRF_ajax.patch $
で、debuild してみます。出力を控えて以下に。
cd redmine-1.1.3 $ debuild dpkg-buildpackage -rfakeroot -D -us -uc 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 redmine dpkg-buildpackage: source version 1.1.3-4 dpkg-buildpackage: source changed by Jérémy Lal <kapouer@melix.org> dpkg-source --before-build redmine-1.1.3 dpkg-buildpackage: host architecture amd64 fakeroot debian/rules clean test -x debian/rules dh_testroot dh_clean dpkg-source -b redmine-1.1.3 dpkg-source: info: using source format `3.0 (quilt)' dpkg-source: info: building redmine using existing ./redmine_1.1.3.orig.tar.gz dpkg-source: info: building redmine in redmine_1.1.3-4.debian.tar.gz dpkg-source: info: building redmine in redmine_1.1.3-4.dsc debian/rules build test -x debian/rules mkdir -p "." fakeroot debian/rules binary test -x debian/rules dh_testroot dh_prep dh_installdirs -A mkdir -p "." Adding cdbs dependencies to debian/redmine.substvars dh_installdirs -predmine Adding cdbs dependencies to debian/redmine-mysql.substvars dh_installdirs -predmine-mysql Adding cdbs dependencies to debian/redmine-pgsql.substvars dh_installdirs -predmine-pgsql Adding cdbs dependencies to debian/redmine-sqlite.substvars dh_installdirs -predmine-sqlite dh_installdocs -predmine dh_installexamples -predmine dh_installman -predmine dh_installinfo -predmine dh_installmenu -predmine dh_installcron -predmine dh_installinit -predmine dh_installdebconf -predmine dh_installemacsen -predmine dh_installcatalogs -predmine dh_installpam -predmine dh_installlogrotate -predmine dh_installlogcheck -predmine dh_installchangelogs -predmine dh_installudev -predmine dh_lintian -predmine dh_bugfiles -predmine dh_install -predmine dh_link -predmine dh_installmime -predmine dh_installgsettings -predmine # Clean up the "extra" license files with typos :) find debian/redmine/usr/share/redmine -name COPYING -exec rm -f '{}' \; find debian/redmine/usr/share/redmine -name "*LICEN*E*" -exec rm -f '{}' \; # ...and other various files find debian/redmine -name '.gitignore' -type f | xargs rm -f find debian/redmine -name '.git' -type d | xargs rm -rf find debian/redmine -name '.svn' -type d | xargs rm -rf # remove htacccess example file : complete examples are given in /usr/share/doc/redmine/examples rm -f debian/redmine/usr/share/redmine/public/htaccess.fcgi.example # running redmine as cgi is too slow rm -f debian/redmine/usr/share/redmine/public/dispatch.cgi.example # rename cgi script, check permissions mv debian/redmine/usr/share/redmine/public/dispatch.fcgi.example debian/redmine/usr/share/redmine/public/dispatch.fcgi # remove example config files rm -f debian/redmine/usr/share/redmine/config/database.yml.example # replace config/email.yml by /etc/redmine/<instance>/email.yml in all locales (Closes: #590846) sed -i -e 's/config\/email\.yml/\/etc\/redmine\/\<\;instance\>\;\/email\.yml/g' debian/redmine/usr/share/redmine/config/locales/*.yml # Mark scripts as executable until upstream fixes their .tar.gz archive build chmod a+x debian/redmine/usr/share/redmine/extra/mail_handler/rdm-mailhandler.rb chmod a+x debian/redmine/usr/share/redmine/extra/svn/reposman.rb chmod a+x debian/redmine/usr/share/redmine/extra/svn/svnserve.wrapper chmod a+x debian/redmine/usr/share/redmine/vendor/plugins/rfpdf/lib/rfpdf/makefont.rb chmod a+x debian/redmine/usr/share/redmine/vendor/plugins/rfpdf/test/test_helper.rb chmod a+x debian/redmine/usr/share/redmine/script/dbconsole chmod a+x debian/redmine/usr/share/redmine/script/performance/request chmod a+x debian/redmine/usr/share/redmine/script/process/inspector chmod a+x debian/redmine/usr/share/redmine/lib/faster_csv.rb chmod a+x debian/redmine/usr/share/redmine/vendor/gems/rubytree-0.5.2/test/test_binarytree.rb chmod a+x debian/redmine/usr/share/redmine/vendor/gems/rubytree-0.5.2/test/test_tree.rb chmod a+x debian/redmine/usr/share/redmine/vendor/gems/coderay-0.9.7/bin/coderay chmod a+x debian/redmine/usr/share/redmine/vendor/gems/coderay-0.9.7/bin/coderay_stylesheet # Replace shebang by /usr/bin/ruby1.8 sed -i -e 's/\#\!\/usr\/bin\/env\ ruby/\#\!\/usr\/bin\/ruby1\.8/g' `fgrep -Rl '#!/usr/bin/env ruby' debian/redmine/usr/share/redmine/*` fgrep: debian/redmine/usr/share/redmine/public/javascripts/controls.js: No such file or directory fgrep: debian/redmine/usr/share/redmine/public/javascripts/dragdrop.js: No such file or directory fgrep: debian/redmine/usr/share/redmine/public/javascripts/prototype.js: No such file or directory fgrep: debian/redmine/usr/share/redmine/public/javascripts/effects.js: No such file or directory dh_installdocs -predmine-mysql dh_installexamples -predmine-mysql dh_installman -predmine-mysql dh_installinfo -predmine-mysql dh_installmenu -predmine-mysql dh_installcron -predmine-mysql dh_installinit -predmine-mysql dh_installdebconf -predmine-mysql dh_installemacsen -predmine-mysql dh_installcatalogs -predmine-mysql dh_installpam -predmine-mysql dh_installlogrotate -predmine-mysql dh_installlogcheck -predmine-mysql dh_installchangelogs -predmine-mysql dh_installudev -predmine-mysql dh_lintian -predmine-mysql dh_bugfiles -predmine-mysql dh_install -predmine-mysql dh_link -predmine-mysql dh_installmime -predmine-mysql dh_installgsettings -predmine-mysql dh_installdocs -predmine-pgsql dh_installexamples -predmine-pgsql dh_installman -predmine-pgsql dh_installinfo -predmine-pgsql dh_installmenu -predmine-pgsql dh_installcron -predmine-pgsql dh_installinit -predmine-pgsql dh_installdebconf -predmine-pgsql dh_installemacsen -predmine-pgsql dh_installcatalogs -predmine-pgsql dh_installpam -predmine-pgsql dh_installlogrotate -predmine-pgsql dh_installlogcheck -predmine-pgsql dh_installchangelogs -predmine-pgsql dh_installudev -predmine-pgsql dh_lintian -predmine-pgsql dh_bugfiles -predmine-pgsql dh_install -predmine-pgsql dh_link -predmine-pgsql dh_installmime -predmine-pgsql dh_installgsettings -predmine-pgsql dh_installdocs -predmine-sqlite dh_installexamples -predmine-sqlite dh_installman -predmine-sqlite dh_installinfo -predmine-sqlite dh_installmenu -predmine-sqlite dh_installcron -predmine-sqlite dh_installinit -predmine-sqlite dh_installdebconf -predmine-sqlite dh_installemacsen -predmine-sqlite dh_installcatalogs -predmine-sqlite dh_installpam -predmine-sqlite dh_installlogrotate -predmine-sqlite dh_installlogcheck -predmine-sqlite dh_installchangelogs -predmine-sqlite dh_installudev -predmine-sqlite dh_lintian -predmine-sqlite dh_bugfiles -predmine-sqlite dh_install -predmine-sqlite dh_link -predmine-sqlite dh_installmime -predmine-sqlite dh_installgsettings -predmine-sqlite dh_strip -predmine dh_compress -predmine dh_fixperms -predmine dh_makeshlibs -predmine dh_strip -predmine-mysql dh_compress -predmine-mysql dh_fixperms -predmine-mysql dh_makeshlibs -predmine-mysql dh_strip -predmine-pgsql dh_compress -predmine-pgsql dh_fixperms -predmine-pgsql dh_makeshlibs -predmine-pgsql dh_strip -predmine-sqlite dh_compress -predmine-sqlite dh_fixperms -predmine-sqlite dh_makeshlibs -predmine-sqlite dh_installdeb -predmine dh_perl -predmine dh_shlibdeps -predmine dh_installdeb -predmine-mysql dh_perl -predmine-mysql dh_shlibdeps -predmine-mysql dh_installdeb -predmine-pgsql dh_perl -predmine-pgsql dh_shlibdeps -predmine-pgsql dh_installdeb -predmine-sqlite dh_perl -predmine-sqlite dh_shlibdeps -predmine-sqlite dh_gencontrol -predmine dpkg-gencontrol: warning: package redmine: unused substitution variable ${perl:Depends} # only call dh_scour for packages in main if grep -q '^Component:[[:space:]]*main' /CurrentlyBuilding 2>/dev/null; then dh_scour -predmine ; fi dh_md5sums -predmine dh_builddeb -predmine dpkg-deb: building package `redmine' in `../redmine_1.1.3-4_all.deb'. dh_gencontrol -predmine-mysql # only call dh_scour for packages in main if grep -q '^Component:[[:space:]]*main' /CurrentlyBuilding 2>/dev/null; then dh_scour -predmine-mysql ; fi dh_md5sums -predmine-mysql dh_builddeb -predmine-mysql dpkg-deb: building package `redmine-mysql' in `../redmine-mysql_1.1.3-4_all.deb'. dh_gencontrol -predmine-pgsql # only call dh_scour for packages in main if grep -q '^Component:[[:space:]]*main' /CurrentlyBuilding 2>/dev/null; then dh_scour -predmine-pgsql ; fi dh_md5sums -predmine-pgsql dh_builddeb -predmine-pgsql dpkg-deb: building package `redmine-pgsql' in `../redmine-pgsql_1.1.3-4_all.deb'. dh_gencontrol -predmine-sqlite # only call dh_scour for packages in main if grep -q '^Component:[[:space:]]*main' /CurrentlyBuilding 2>/dev/null; then dh_scour -predmine-sqlite ; fi dh_md5sums -predmine-sqlite dh_builddeb -predmine-sqlite dpkg-deb: building package `redmine-sqlite' in `../redmine-sqlite_1.1.3-4_all.deb'. dpkg-genchanges >../redmine_1.1.3-4_amd64.changes dpkg-genchanges: not including original source code in upload dpkg-source --after-build redmine-1.1.3 dpkg-buildpackage: binary and diff upload (original source NOT included) Now running lintian... Finished running lintian. Now signing changes and any dsc files... Could not find a signing program (pgp or gpg)! debuild: fatal error at line 1269: running debsign failed $
む、debuild は以下のコマンドを順に実行してるのか。
- dpkg-buildpackage -rfakeroot -D -us -uc
- dpkg-source --before-build redmine-1.1.3
- fakeroot debian/rules clean
- dpkg-source -b redmine-1.1.3
- debian/rules build
- fakeroot debian/rules binary
- dpkg-source --after-build redmine-1.1.3
- dpkg-genchanges >../redmine_1.1.3-4_amd64.changes
あと、.deb は ar なナニということなので展開してみます。
$ mkdir tmp $ cd tmp $ ar -x ../redmine_1.1.3-4_all.deb $ ls control.tar.gz data.tar.gz debian-binary $
ええと、data.tar.gz が本体なのかな。展開してみたら etc と usr と var が出てきた。あるいはソースなディレクトリの redmine-1.1.3 の中の debian/redmine が以下。
DEBIAN etc usr var
中を見てみるに、でびあん方式だと /usr/share に置くのか。あと、DEBIAN ディレクトリ配下にはスクリプトの類が居ますね。これは control.tar.gz に纏まってるナニなはず。
あと、標準出力で気になるのが debian/rules build のあたり。
debian/rules build test -x debian/rules mkdir -p "."
test -x は testdir ってターゲットなのか。あるいは mkdir -p "." なナニは makebuilddir というターゲットになるのかな。ええと testdir とか makebuilddir というターゲットは基本的には pre-build ターゲットが依存しているのか。
入門 Debian パッケージによると build ターゲットは
- pre-build
- common-configure-arch または common-configure-indep
- configure/パケジ名
- common-build-arch または common-build-indep
- build/パケジ名
- build-arch または build-indep
- build
とのことなので pre-build なターゲットが、ということなのか。redmine の場合は configure とか make とかってソレを実行しないのですが、ある場合どんな形でそれらが実行されるのか、が buildcore.mk な記述からは分からんな。
と言いつつ configure にどうやってオプションとか渡すんだろ、と思ってググッてみたら以下なドキュメントが出てきた。
debian/rules で上記なターゲットを再定義するのか。なるほど。
とは言え
ファイルを配置する規則みたいなナニが若干微妙。install/パケジ名 なターゲットで dh_installdir というコマンドを実行しているようです。標準出力な記録によれば以下。
dh_installdirs -A mkdir -p "." Adding cdbs dependencies to debian/redmine.substvars dh_installdirs -predmine Adding cdbs dependencies to debian/redmine-mysql.substvars dh_installdirs -predmine-mysql Adding cdbs dependencies to debian/redmine-pgsql.substvars dh_installdirs -predmine-pgsql Adding cdbs dependencies to debian/redmine-sqlite.substvars dh_installdirs -predmine-sqlite
おそらく、なんですが -A な dh_installdirs で debian/dirs なナニを作成しているのかどうなのか。ちなみに debian/dirs の中身が以下。
var/log/redmine var/cache/redmine var/lib/redmine etc/redmine usr/share/redmine/tmp
あとは /usr/share/redmine の中に全部つっこんでいる、って理解で良いみたいなんですが、/usr/share/doc/redmine の根拠が不明。あ、これは dh_installdocs で debian/doc の配下が入るのか。
ちなみに導入した後、どう動かすのかと思ったら以降は apache の設定を云々せねばいけない模様。Jenkins は 8080 で動いてるから DocumentRoot にしちゃえば良いのか (ってそれは内輪の話だな)。
もうすこし postinst の中身をほげる方向。というか、入門 Debian パッケージ の 4.5 メンテナスクリプトの項を確認が先かな。
メモ
- apt-file search ってのがあるのか、知らなんだ