# $Header: /cvsroot/nco/nco/doc/debian.txt,v 1.116 2008/05/11 20:30:37 zender Exp $ -*-text-*- # Purpose: Debian information for NCO netCDF Operators project # Notes describe procedure to manipulate Debian-specific distribution netCDF packages: cd ${DATA} wget http://ftp.debian.org/debian/pool/main/n/netcdf/netcdf_3.6.1-0.1.dsc wget http://ftp.debian.org/debian/pool/main/n/netcdf/netcdf_3.6.1.orig.tar.gz wget http://ftp.debian.org/debian/pool/main/n/netcdf/netcdf_3.6.1-0.1.diff.gz dpkg-source -x netcdf_3.6.1-0.1.dsc Debian: http://packages.debian.org/unstable/math/nco.html Gentoo: http://gentoo-stable.iq-computing.de/browse?type=version&category=app-sci&package=nco&version=2.2.0 Debian New Maintainer's Guide (Rod05) is Bible for packaging .deb's: /data/zender/tmp/debian.pdf # Debian Policy Manual file:///usr/share/doc/debian-policy/policy.html/ Questions on procedure go to Debian Mentors <debian-mentors@lists.debian.org> 0. Install Debian packages required to build new packages apt-get install dh-make debhelper devscripts fakeroot gnupg debian-policy developers-reference 0.5 Create key to sign packages gpg --gen-key 1. Create ~/nco/debian directory to hold Debian configuration files 2. Debian build procedure recommends placing entire package source in subdirectory of main package. For starters, we wish to create .debs of tagged releases, e.g., nco-3.9.5 First we create a clean source distribution of nco and place it in nco-3.9.5 Once automated, we will use cvs co -rnco-3_9_5 to get source Until we know what is necessary, however, we just copy a snapshot 2.1 Clean all build files from development directory cd ~/nco;make distclean;cd bld;make clean;cd ~ tar cvzf ./nco/nco.tar.gz ./nco/* cd ~/nco;tar xvzf nco.tar.gz;mv nco nco-3.9.5 /bin/rm nco.tar.gz;tar cvzf nco-3.9.5.tar.gz ./nco-3.9.5/* cd ~/nco/nco-3.9.5 dh_make -e zender@uci.edu -f ../nco-3.9.5.tar.gz 2.2 The preceding steps created template debian files for a .deb, Those files now reside in ~/nco/debian. They are now checked into the CVS repository of the main distribution Step 2 only needs to be performed once per package Now that the Debian template files are a part of the upstream directory, future work consists of building the Debian packages 3. Build new .deb package 3.1 First, remove detritus including *.gz files in parent directory from previous build cd ~/nco;/bin/rm *.gz cd ~/nco/nco-3.9.5 dpkg-buildpackage -rfakeroot > foo 2>&1 4. Find out which packages new package needs for building From Rod02 p. 14 strace -f -o /tmp/strace_log ./configure for x in `dpkg -S ${grep open /tmp/strace_log | perl -pe 's!.* open\(\"([^\"]*).*!$1} 5. Going backwards: How to create the Debian tarball source given the distributed Debian files, nco_X.Y.Z-3.dsc nco_X.Y.Z-3.orig.tar.gz, and nco_X.Y.Z-3.diff.gz dpkg-source -x nco_X.Y.Z-3.dsc This dpkg-source command is functionally equivalent to applying the Debian diff to the original source to produce Debian source: cd /data/zender;/bin/rm -r nco-X.Y.Z.orig nco-X.Y.Z tar xvzf nco_X.Y.Z.orig.tar.gz # Untar original source cp -r nco-X.Y.Z.orig nco-X.Y.Z # Create destination for patches patch -p0 < nco_X.Y.Z-3.diff # Patch destination with Debian diff 6. To synchronize .debs with new releases, follow this procedure: cd ~/nco/bld make tags # Put cute version-specific string in nco_ctl.c:nco_nmn_get() # Install correct version numbers before updating Debian # tags-query replace 3_9_5 with X_Y_Z+1 # tags-query replace 3.9.5 with X.Y.Z+1 # If tags-query replace does not work, be sure to manually change # versions in configure.in, debian/files, doc/ANNOUNCE, doc/debian.txt, # doc/index.shtml, doc/nco.texi, bld/nco_dst.pl, doc/VERSION cd ~/nco/debian dch -v 3.9.5-1 # Update changelog emacs ~/nco/bld/nco.spec # Update changelog # For unknown reason rules file may lose its executable bit chmod a+x ~/nco/debian/rules # Rebuild autotools so new version # propagates cd ~/nco;aclocal;autoheader;automake --foreign;autoconf # Save all files in emacs before tagging # Tag CVS code after changing files in ~/nco/debian cd ~/nco;cvs commit -m "Preparing nco-3.9.5 release";cvs tag -c nco-3_9_5 ${HOME}/nco/bld/nco_dst.pl --dbg=2 --bld --cln nco-3_9_5 # Location of build diagnostics for mentors to help http://dust.ess.uci.edu/nco/src/nco_3.9.5-1.dpkg-buildpackage.txt http://dust.ess.uci.edu/nco/src/nco_3.9.5-1.dsc http://dust.ess.uci.edu/nco/src/nco_3.9.5-1_i386.changes http://dust.ess.uci.edu/nco/src/nco_3.9.5-1_i386.deb http://dust.ess.uci.edu/nco/src/nco_3.9.5.orig.tar.gz # Becoming a Debian developer http://www.debian.org/devel/join/newmaint # Debian mentor FAQ http://people.debian.org/~mpalmer/debian-mentors_FAQ.html Debian Acronyms & Abbreviations: BTS Bug Tracking System DD Debian Developer DDPO Debian Developer's Packages Overview DNMG Debian New Maintainer's Guide FTBFS Fails to Build from Source ITA Intent to Adopt NMU Non-Naintainer Upload PTS Package Tracking System RC Release Critical RFP Request for Package RFS Request for Sponsor WNPP Work-Needing and Prospective Packages # NCO orphan/ITA bug http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=273322 # netCDF orphan/ITA bug http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=321336 # Debian QA member who was de-facto NCO maintainer Matej Vela <vela@debian.org> # New NCO sponsor Oleksandr (Alex) Moskalenko <malex@debian.org> # Former NCO mentor/sponsor Daniel Baumann <daniel.baumann@panthera-systems.net> Daniel Baumann <daniel@debian.org> # Created netCDF 3.6.1 package Warren Turkal <wt@atmos.colostate.edu> Matej Vela <vela@debian.org>, Daniel Baumann <daniel@debian.org>, Warren Turkal <wt@atmos.colostate.edu> # New build system # Non-native debian builds Rod05 p. 46 cd ~/nco;cvc /bin/rm -rf ${DATA}/nco-3.9.5 ${DATA}/nco_3.9.5* ${DATA}/debian # Cleanup last build # cd ${DATA};cvs -d zender@nco.cvs.sf.net:/cvsroot/nco export -kkv -r nco-3_9_5-1 -d nco-3.9.5 nco # Export based on tag cd ${DATA};cvs -d zender@nco.cvs.sf.net:/cvsroot/nco export -kkv -D "1 second ago" -d nco-3.9.5 nco # Export most recent tar cvzf ./nco_3.9.5.orig.tar.gz --exclude='nco-3.9.5/debian*' --exclude='.cvsignore' --exclude='ncap_lex.c' --exclude='ncap_yacc.[ch]' ./nco-3.9.5 /bin/rm -rf ${DATA}/nco-3.9.5 # Remove cvs-exported directory tar xvzf ./nco_3.9.5.orig.tar.gz # Untar to get directory without excluded files mkdir ${DATA}/nco-3.9.5/debian;cd ~/nco/debian;/bin/cp changelog compat control convert copyright doc-base files info rules ${DATA}/nco-3.9.5/debian # Replace debian directory with _CURRENT_ (main trunk) settings export NETCDF_INC='/usr/include';export NETCDF_LIB='/usr/lib';export LD_LIBRARY_PATH='/usr/lib';unset NETCDF4_ROOT; # Guarantee that Debian packages take precedence over development libraries in, e.g., /usr/local. Indirectly inhibits libtool from using RPATH. #cd ${DATA}/nco-3.9.5;dpkg-buildpackage -rfakeroot -uc -us > ~/foo.nco 2>&1 # -uc -us: Do not sign changes or source files #cd ${DATA}/nco-3.9.5;dpkg-buildpackage -rfakeroot -sa > ~/foo.nco 2>&1 # -sa: Include _orig.tar.gz in .changes cd ${DATA}/nco-3.9.5;dpkg-buildpackage -rfakeroot > ~/foo.nco 2>&1 sudo dpkg --remove nco sudo dpkg --install ${DATA}/nco_3.9.5-1_*.deb lintian ${DATA}/nco_3.9.5-1_*.deb ls -l ${DATA}/nco_3.9.5* m ~/foo.nco scp ${DATA}/nco_3.9.5* dust.ess.uci.edu:/var/www/html/nco/src scp ${DATA}/nco_3.9.5* nco.sf.net:/home/groups/n/nc/nco/htdocs/src # NB: Make sure RPMs build before uploading to debian, since changing # Debian versions are such a PITA cd ${DATA};dupload -t mentors nco_3.9.5-1_*.changes bsrc # Reset shell environment for regular development # Pbuilder/chroot system # Configuration in ~/.pbuilderrc or /etc/pbuilderrc # https://wiki.ubuntu.com/PbuilderHowto # DIST=sid sudo pbuilder create DIST=sid sudo pbuilder update # Update chroot before building package in it cd ${DATA} # dget http://ftp.debian.org/debian/pool/main/n/nco/nco_3.9.0-1.dsc # dget http://ftp.debian.org/debian/pool/main/n/netcdf/netcdf_3.6.1-1.dsc # apt-get source nco # Get package source DIST=sid sudo pbuilder build nco_3.9.5-1.dsc lintian /var/cache/pbuilder/sid/result/nco_3.9.5-1_*.deb # NB: Make sure RPMs build before uploading to debian, since changing # Debian versions is such a PITA cd /var/cache/pbuilder/sid/result;dupload -t mentors nco_3.9.5-1_*.changes # RPM builds as root export rpm_root='/usr/src/redhat' # export sudo_sng='' # sudo not-necessary when builing in user directories export sudo_sng='sudo' # sudo necessary when building in system directories cd ~/nco;cvc;cvu /bin/rm -rf ${DATA}/nco-3.9.5 ${DATA}/nco-3.9.5* # Cleanup last build ${sudo_sng} /bin/rm -r -f \ ${rpm_root}/BUILD/nco-3.9.5 \ ${rpm_root}/RPMS/i386/nco-3.9.5-?.i386.rpm \ ${rpm_root}/RPMS/i386/nco-debuginfo-3.9.5-?.i386.rpm \ ${rpm_root}/RPMS/i386/nco-devel-3.9.5-?.i386.rpm \ ${rpm_root}/SOURCES/nco-3.9.5.tar.gz \ ${rpm_root}/SPECS/nco-3.9.5.spec \ ${rpm_root}/SRPMS/nco-3.9.5-?.src.rpm cd ${DATA};cvs -d zender@nco.cvs.sf.net:/cvsroot/nco export -kkv -r nco-3_9_5-1 -d nco-3.9.5 nco # Export based on tag ${sudo_sng} ln -s ${HOME}/nco/bld/nco.spec ${rpm_root}/SPECS/nco-3.9.5.spec tar cvzf ./nco-3.9.5.tar.gz --exclude='nco-3.9.5/debian*' --exclude='.cvsignore' --exclude='ncap_lex.c' --exclude='ncap_yacc.[ch]' ./nco-3.9.5 ${sudo_sng} /bin/cp ${DATA}/nco-3.9.5.tar.gz ${rpm_root}/SOURCES cd ${rpm_root}/SPECS ${sudo_sng} rpmbuild -ba --sign nco-3.9.5.spec > ~/foo.nco 2>&1 scp \ ${rpm_root}/RPMS/i386/nco-3.9.5-?.i386.rpm \ ${rpm_root}/RPMS/i386/nco-debuginfo-3.9.5-?.i386.rpm \ ${rpm_root}/RPMS/i386/nco-devel-3.9.5-?.i386.rpm \ ${rpm_root}/SRPMS/nco-3.9.5-?.src.rpm \ dust.ess.uci.edu:/var/www/html/nco/src scp \ ${rpm_root}/RPMS/i386/nco-3.9.5-?.i386.rpm \ ${rpm_root}/RPMS/i386/nco-debuginfo-3.9.5-?.i386.rpm \ ${rpm_root}/RPMS/i386/nco-devel-3.9.5-?.i386.rpm \ ${rpm_root}/SRPMS/nco-3.9.5-?.src.rpm \ nco.sf.net:/home/groups/n/nc/nco/htdocs/src # RPM builds as user # http://myy.helia.fi/~karte/linux/doc/rpm-build-as-user.html export rpm_root="${DATA}/rpm/nco" cd ~/nco;cvc;cvu mkdir -p ${DATA}/rpm/nco/TMP ${DATA}/rpm/nco/BUILD /bin/rm -rf ${DATA}/nco-3.9.5 ${DATA}/nco-3.9.5* # Cleanup last build /bin/rm -r -f \ ${rpm_root}/nco-3.9.5-?.src.rpm \ ${rpm_root}/nco-3.9.5.spec \ ${rpm_root}/nco-3.9.5.tar.gz \ ${rpm_root}/*/nco-3.9.5-?.*.rpm \ ${rpm_root}/*/nco-debuginfo-3.9.5-?.*.rpm \ ${rpm_root}/*/nco-devel-3.9.5-?.*.rpm # cd ${DATA};cvs -d zender@nco.cvs.sf.net:/cvsroot/nco export -kkv -r nco-3_9_5-1 -d nco-3.9.5 nco # Export based on tag cd ${DATA};cvs -d zender@nco.cvs.sf.net:/cvsroot/nco export -kkv -D "1 second ago" -dnco-3.9.5 nco # Export most recent and build as 3.9.5-1 tar cvzf ./nco-3.9.5.tar.gz --exclude='nco-3.9.5/debian*' --exclude='.cvsignore' --exclude='ncap_lex.c' --exclude='ncap_yacc.[ch]' ./nco-3.9.5 /bin/cp ${DATA}/nco-3.9.5.tar.gz ${rpm_root} ln -s ${HOME}/nco/bld/nco.spec ${rpm_root}/nco.spec cd ${rpm_root} rpmbuild -ba --sign nco.spec > ~/foo.nco 2>&1 rpmlint ${rpm_root}/*/nco-3.9.5-?.*.rpm sudo yum remove nco sudo yum install ${rpm_root}/*/nco-3.9.5-?.*.rpm scp \ ${rpm_root}/*/nco-3.9.5-?.*.rpm \ ${rpm_root}/*/nco-debuginfo-3.9.5-?.*.rpm \ ${rpm_root}/*/nco-devel-3.9.5-?.*.rpm \ ${rpm_root}/nco-3.9.5-?.*.src.rpm \ dust.ess.uci.edu:/var/www/html/nco/src scp \ ${rpm_root}/*/nco-3.9.5-?.*.rpm \ ${rpm_root}/*/nco-debuginfo-3.9.5-?.*.rpm \ ${rpm_root}/*/nco-devel-3.9.5-?.*.rpm \ ${rpm_root}/nco-3.9.5-?.*.src.rpm \ nco.sf.net:/home/groups/n/nc/nco/htdocs/src