This is an old revision of the document!
Debian Build Notes
### some debian environment pieces: $ cat >>~/.bashrc <<EOF DEBEMAIL=your.email.address@example.org DEBFULLNAME="Firstname Lastname" EOF ### Setup a crystal clean source package, with lower program name and version number $ svn co https://svn.met.no/kvoss/kvQc2/trunk/kvqc2-0.9.0 $ tar cvf kvqc2-0.9.0.tar kvqc2-0.9.0/ $ gzip kvqc2-0.9.0.tar ### For this sandbox exercise I made up the 0.9.0 version number ... but Debian likes that and needs it! ###Initial debianisation $ cd kvqc2-0.9.0/ pak@pak:~/DEBIAN-SANDBOX/kvqc2/kvqc2-0.9.0$ dh_make -f ../kvqc2-0.9.0.tar.gz Type of package: single binary, multiple binary, library, kernel module or cdbs? [s/m/l/k/b] s Maintainer name : emilssen Email-Address : pak@pak Date : Sun, 25 Apr 2010 17:21:34 +0200 Package Name : kvqc2 Version : 0.9.0 License : blank Type of Package : Single Hit <enter> to confirm: Currently there is no top level Makefile. This may require additional tuning. Done. Please edit the files in the debian/ subdirectory now. You should also check that the kvqc2 Makefiles install into $DESTDIR and not in / . pak@pak:~/DEBIAN-SANDBOX/kvqc2/kvqc2-0.9.0$
Lets look now into the debian directory and see what needs to be done:
pak@pak:~/DEBIAN-SANDBOX/kvqc2/kvqc2-0.9.0$ pwd /home/pak/DEBIAN-SANDBOX/kvqc2/kvqc2-0.9.0 pak@pak:~/DEBIAN-SANDBOX/kvqc2/kvqc2-0.9.0$ ls debian changelog emacsen-install.ex manpage.1.ex preinst.ex compat emacsen-remove.ex manpage.sgml.ex prerm.ex control emacsen-startup.ex manpage.xml.ex README.Debian copyright init.d.ex menu.ex rules cron.d.ex init.d.lsb.ex patches watch.ex dirs kvqc2-default.ex postinst.ex docs kvqc2.doc-base.EX postrm.ex pak@pak:~/DEBIAN-SANDBOX/kvqc2/kvqc2-0.9.0$
control
Some initial minor mods:
Source: kvqc2 Section: science Priority: extra Maintainer: kvalobs <kvalobs@met.no> Build-Depends: debhelper (>= 5) Standards-Version: 3.7.2 Package: kvqc2 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: <insert up to 60 chars description> <insert long description, indented with spaces>
How to find what to put in Build-Depends, go to an autobuilt version of kvqc2:
kvalobs@pak:~/kvQc2-svn/trunk$ objdump -p /metno/kvalobs/bin/kvqc2 | grep NEEDED NEEDED libkvalobs_kvcpp.so.1 NEEDED libpuTools.so.3 NEEDED libboost_thread-gcc42-mt-1_34_1.so.1.34.1 NEEDED libboost_regex-gcc42-1_34_1.so.1.34.1 NEEDED libboost_filesystem-gcc42-1_34_1.so.1.34.1 NEEDED libboost_program_options-gcc42-1_34_1.so.1.34.1 NEEDED libomniDynamic4.so.1 NEEDED libomniORB4.so.1 NEEDED libomnithread.so.3 NEEDED libperl.so.5.8 NEEDED libpthread.so.0 NEEDED libcrypt.so.1 NEEDED libproj.so.0 NEEDED libnetcdf.so.4 NEEDED libnetcdf_c++.so.4 NEEDED libgsl.so.0 NEEDED libgslcblas.so.0 NEEDED libdl.so.2 NEEDED libstdc++.so.6 NEEDED libm.so.6 NEEDED libc.so.6 NEEDED libgcc_s.so.1 NEEDED libkvalobs_kvalobs.so.1 NEEDED libkvalobs_kvdb.so.1 NEEDED libkvalobs_fileutil.so.1 NEEDED libkvalobs_milog.so.1 NEEDED libkvalobs_kvskel.so.1 NEEDED libkvalobs_dnmithread.so.1 NEEDED libkvalobs_miconfparser.so.1
Or …
kvalobs@pak:~/kvQc2-svn/trunk$ dpkg-depcheck -d ./configure ... ... Packages needed: postgresql-server-dev-8.3 m4 libc6-i686 libomniorb4-dev gcc-3.4 libboost-filesystem-dev libboost-thread-dev flex libsqlite3-dev locales cpp-3.4 g77 r-base-core libxml++2.6-dev libboost-program-options-dev libboost-regex-dev g77-3.4 libcppunit-dev gawk
This leads to a first guess of (probably over the top):
Source: kvqc2 Section: science Priority: extra Maintainer: kvalobs <kvalobs@met.no> Build-Depends: debhelper (>= 5), autotools-dev, lsb-base, g++ (>= 4.1.1), debconf, automake, libtool, sqlite3 (>= 3.3.8), libsqlite3-dev (>= 3.3.8), libboost-dev (>= 1.33.1), libboost-thread-dev (>= 1.33.1), libboost-regex-dev (>= 1.33.1), libboost-filesystem-dev (>= 1.33.1), libboost-program-options-dev (>= 1.33.1), libomniorb4-dev (>= 4.0.6), omniidl4 (>= 4.0.6), metlibs-putools-dev (>= 3.0), libproj (>= 0.0.0), libperl (>= 5.8), libnetcdf (>= 4.0.0), libnetcf_c++ (>= 4.0.0), libgsl (>= 0.0.0), libgslcblas (>= 0.0.0), libkvalobs_kvcpp (>= 1.0.0), libkvalobs_kvalobs (>= 1.0.0), libkvalobs_kvdb (>= 1.0.0), libkvalobs_fileutil (>= 1.0.0), libkvalobs_milog (>= 1.0.0), libkvalobs_kvskel (>= 1.0.0), libkvalobs_dnmithread (>= 1.0.0), libkvalobs_miconfparser (>= 1.0.0) Standards-Version: 3.7.2 Package: kvqc2 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, sqlite3 Description: Non-real-time and geo-statistical quality controls. The geo-statistical algorithms will make up the QC2-ROM (space-control) and will rely on: handling of data-sets comprising points from the whole station network of interest, filtering of uncertain values before and after checks, gridding of data and iterative techniques, kriging interpolation and cross-validation, as well as the additional user-defined algorithms performing specific checks on data selected by the QC2-ROM engine in both time and/or space.
TODO
THIS STEP NOT INCLUDED …. did not provide clear results, docs not clear
$ dpkg -S libfoo.so.6
Then you just take -dev version of every package as Build-Depends entry.
TODO
Minor changes to the “rules” file, and added some flag spec from the synopd case
compat echo 7 > debian/compat
/ not available on the ubuntu system … so this went back to 5 Now try to make a package by writing in . the source directory:
$ dpkg-buildpackage
Now try to sort out all the dependencies … many errors:
dpkg-shlibdeps -Tdebian/kvqc2.substvars debian/kvqc2/usr/local/bin/kvqc2 dpkg-shlibdeps: failure: no dependency information found for /metno/kvalobs/lib/libkvalobs_dnmithread.so.1 (used by debian/kvqc2/usr/local/bin/kvqc2). dh_shlibdeps: command returned error code 512 make: *** [binary-arch] Error 1 dpkg-buildpackage: failure: fakeroot debian/rules binary gave error exit status 2
I would like to include items such as metlibs-putools-dev but caanot get access to the internal met sources from my external machine, i.e. such like:
$ apt-get update ... W: Failed to fetch http://mirror.oslo.dnmi.no/development/dists/etch/contrib/i18n/Translation-en_US.bz2 Could not connect to mirror.oslo.dnmi.no:80 (157.249.16.70). - connect (111 Connection refused) ...
Switching to Internal Test Machine
Work has been switched to an internal virtual machine where package dependencies are more easily met. Since the machine wants to remain confidential she is hereafter referred to as AGNES.
The following are addiitonal libraries installed on AGNES to compile Qc2:
apt-get install libgsl0-dbg apt-get install libgsl0-dev apt-get install proj apt-get install netcdfg-dev
Then test the build:
autoreconf -i ./configure --prefix=$MY-DIRS/deploy make make install
Afterwards ran as kvalobs: $MY-DIRS/deploy/bin/kvqc2 OUTPUT as follows:
INFO: -- Reading configuration from file </etc/kvalobs/kvalobs.conf>! INFO: -- Configuration file loaded! INFO: -- Using 'database.dbconnect' from configuration file FROM CONFIGURATION FILE: pgdriver.so FROM CONFIGURATION FILE: HTMLPATH HTMLPATH Logging to file </var/log/kvalobs/Qc2.log>! HTMLPATH/var/log/kvalobs/html INFO: (Qc2 ...) -- Qc2: starting .... INFO: (Qc2 ...) -- Using <kvtest-dev-vm101-test/> as path in CORBA nameserver INFO: (Qc2 ...) -- Using CORBA nameserver at: corbans.met.no INFO: (Qc2 ...) -- Soup arg 0: /home/paulee/deploy/bin/kvqc2 INFO: (Qc2 ...) -- Loading driver for database engine </usr/lib/kvalobs/db/pgdriver.so>! INFO: (Qc2 ...) -- Driver <PostgreSQL> loaded! INFO: (Qc2 ...) -- Writing pid to file </var/run/kvalobs/kvQc2-dev-vm101.pid>! INFO: -- Qc2Work: starting work thread! INFO: -- New database connection (PostgreSQL) created! DEBUG: -- Created a new connection to the database! INFO: -- %%%%%%%%%%%%%%%%%%%%%%%% Scanning For Files Does not exist: /etc/kvalobs/Qc2Config INFO: (Qc2 ...) -- Writing pid to file </var/run/kvalobs/Qc2-dev-vm101.pid>! Scanning For Files Does not exist: /etc/kvalobs/Qc2Config
First debian package construction ...
mkdir DEBIAN-SANDBOX cd DEBIAN-SANDBOX/ svn co https://svn.met.no/kvoss/kvQc2/trunk/ mv trunk kvqc2-0.9.0 tar cvf kvqc2-0.9.0.tar kvqc2-0.9.0/ gzip kvqc2-0.9.0.tar
Now I would do something like the following if from scratch … but this has already been done and the “debain” directory exists in the svn repositpory. But I just add this box here for reference (note my paths were a little different on pak (extra kvqc2):
###Initial debianisation $ cd kvqc2-0.9.0/ pak@pak:~/DEBIAN-SANDBOX/kvqc2/kvqc2-0.9.0$ dh_make -f ../kvqc2-0.9.0.tar.gz Type of package: single binary, multiple binary, library, kernel module or cdbs? [s/m/l/k/b] s Maintainer name : emilssen Email-Address : pak@pak Date : Sun, 25 Apr 2010 17:21:34 +0200 Package Name : kvqc2 Version : 0.9.0 License : blank Type of Package : Single Hit <enter> to confirm: Currently there is no top level Makefile. This may require additional tuning. Done. Please edit the files in the debian/ subdirectory now. You should also check that the kvqc2 Makefiles install into $DESTDIR and not in / . pak@pak:~/DEBIAN-SANDBOX/kvqc2/kvqc2-0.9.0$
cd kvqc2-0.9.0 dpkg-buildpackage -rfakeroot
Some useful commands:
dpkg --get-selections # see what is installed dpgk -s kvalobs # get all the details on a package
Running “dpgk -s kvalobs” one can see all the dependencies defined for kvalobs, jolly useful for building like packages. For kvqc2 .. just need to add “kvalobs” to the control:
cat kvqc2-0.9.0/debian/control Source: kvqc2 Section: science Priority: extra Maintainer: kvalobs <kvalobs@met.no> Build-Depends: debhelper (>= 5), autotools-dev, lsb-base, g++ (>= 4.1.1), debconf, automake, libtool, sqlite3 (>= 3.3.8), libsqlite3-dev (>= 3.3.8), libboost-dev (>= 1.33.1), libboost-thread-dev (>= 1.33.1), libboost-regex-dev (>= 1.33.1), libboost-filesystem-dev (>= 1.33.1), libboost-program-options-dev (>= 1.33.1), libomniorb4-dev (>= 4.0.6), omniidl4 (>= 4.0.6), metlibs-putools-dev (>= 3.0), kvalobs (>=2.1.2) Standards-Version: 3.7.2 Package: kvqc2 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, sqlite3 Description: Non-real-time and geo-statistical quality controls. The geo-statistical algorithms will make up the QC2-ROM (space-control) and will rely on: handling of data-sets comprising points from the whole station network of interest, filtering of uncertain values before and after checks, gridding of data and iterative techniques, kriging interpolation and cross-validation, as well as the additional user-defined algorithms performing specific checks on data selected by the QC2-ROM engine in both time and space.
See the svn repository https://svn.met.no/viewvc/kvoss/kvQc2/ Revision 1551 for the debian “control” and “rules” specified.
And is does seem to install:
User@AGNES:~/DEBIAN-SANDBOX$ sudo dpkg -i kvqc2_0.9.0-1_i386.deb Selecting previously deselected package kvqc2. (Reading database ... 43963 files and directories currently installed.) Unpacking kvqc2 (from kvqc2_0.9.0-1_i386.deb) ... Setting up kvqc2 (0.9.0-1) ... User@AGNES:~/DEBIAN-SANDBOX$ which kvqc2 /usr/bin/kvqc2
ToDos
- Add full copyright information
Make New Package
1. First prepare the source. Make a new branch in the svn distribution. Copy the development tree. Actually not a branch but a tagged version!!!
Make a copy of the development directory … first to a branch:
svn copy https://svn.met.no/kvoss/kvQc2/trunk/ https://svn.met.no/kvoss/kvQc2/branches/kvqc2-1.0.1/ -m 'branch for preparation of version 1.0.1 for debianisation'
Check out:
$ # On the development machine: $ cd $HOME $ svn co https://svn.met.no/kvoss/kvQc2/branches/kvqc2-1.0.1
CHANGES: To make a clean/safe distribution:
- …
- …
When work is finished for the release then I copy to the tags!
svn copy https://svn.met.no/kvoss/kvQc2/branches/kvqc2-1.0.1/ https://svn.met.no/kvoss/kvQc2/tags/kvqc2-1.0.1/ -m 'finalised version'