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\/\&lt\;instance\&gt\;\/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 ってのがあるのか、知らなんだ

追記

そうか rails って色々な動かし方があるので apache 云々なソレはでびあんパケジの管理範疇外になってるのか。ちなみに apache 上で動かすのであれば passenger というナニが必要らしい。ええとパケジ名は libapache2-mod-passenger なのかな。
別な rails アプリをでびあん化するとしたら debian/rules とか debian/postinst とかは流用可能と見てるんですが甘いかな。