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)
...

http://mirror.oslo.dnmi.no/development

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'