wiki:AndreesStuff

Mixed bag of things I'm just jotting down for now... I'd prefer if people could refrain from updating this page - get your own mixed bag! ;-)

Building Packages for Debian (and Derivatives)

Prepare

To be able to build Debian packages, install the following packages to start with:

  • build-essential
  • fakeroot

Download

Firstly, download the package sources from:

 http://packages.debian.org/

or my download site for the bleeding edge (in Debian packages):

 http://people.debian.org/~andree/packages/

You need to download the following three files for every package you want to build:

  • <package>_<upstream version>.orig.tar.gz
  • <package>_<upstream version>-<package version>.diff.gz
  • <package>_<upstream version>-<package version>.dsc

Unpack

To create the build directory with the package source run:

dpkg-source -x <package>_<upstream version>-<package version>.dsc

Build

Change into the newly create directory named <package>-<upstream version> and run:

dpkg-buildpackage -rfakeroot -us -uc > /tmp/build-<package>.log

Note: The above command may fail because build dependencies are not fulfilled. If the build fails, read the error message carefully and install any missing packages.

Note: Appart from missing build-dependencies, there may be other issues building the packages on Debian derivatives or older versions of Debian. Often, toning down the dependencies defined in debian/control inside the build directory can help here. However, this is a bit more advanced.

Install

In the parent of the build directory run:

dpkg -i  mindi_<package>-<upstream version>_<arch>.deb 

Note: The above command may fail because binary dependencies are not fulfilled. If the install fails, read the error message carefully and install any missing packages.

Further Reading

For more, information about the fascinating world of Debian packaging, please have a look here:

 http://www.debian.org/doc/maint-guide/

and for a more comprehensive overview here:

 http://www.debian.org/doc/developers-reference/

For all information about Debian development including but not limited to package manangement, please see here:

 http://www.debian.org/devel/

Restore Problems

ext2fs_check_if_mount: No such file or directory while determining whether <device> is mounted.

This error is issued by mkfs. The reason is that no mtab support is present in busybox and busybox's mount is used.

busybox 1.1.3 (and possbily other version) may be broken on amd64 in that they seem to require the existence of /etc/mtab regardless of whether the corresponding configuration option is set or not. This is not an issue on i386.

mondorestore killed

If mondorestore gets killed during restore for no apparent reason, this may be a memory problem. If there is still swap space available, the underlying issue maybe the kernel OOM killer.

On Debian Sid amd64, kernel linux-image-2.6.16-2-amd64-k8, version 2.6.16-14 has this problem, whereas kernel linux-image-2.6.16-2-amd64-generic, version 2.6.16-14 is fine.

Compilation Problems

Compiler Warnings

gcc 4.1.2 appears to be stricter than earlier versions when '-Wall' is used. The following is fine in earlier versions of gcc:

*pos++;

but gives the following warning with gcc 4.1.2 (and '-Wall'):

warning: value computed is not used

This is rubbish, as e.g. it is perfectly valid to change a string pointer without ever directly using it because we might only be interested in the string from a certain position. A workaround to avoid the warning is to use:

pos += 1;

(No '*' at the front!)

busybox Error './sh: Cannot set tty process group (Operation not permitted)'

On Debian sid amd64, busybox versions 1.00, 1.1.3 and possibly others may give the following error when called as sh:

./sh: Cannot set tty process group (Operation not permitted)

Given that there is no prompt, this is a rather severe problem. Removing NFS mount supprot from busybox addresses the problem. Also, compilation against glibc 2.4 makes this go away. More info about the glibc side of things can be found here:  http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=367656

This problem does not occur on i386.

Build from SVN on Debian (and maybe others)

Trying to build packages from SVN may currently have some issues. The following tries to address the ones I experience on Debian. They may be applicable to other environments as well.

bash: ./tools/svn2build: /bin/sh: bad interpreter: Permission denied

This has nothing to do with the build script. Rather it indicates that the filesystem the script lives in does not allow anything to be executed. As an example, for an NFS mount this happens when the noexec flag is set in the mount options.

cat: <some path>mondo/VERSION: No such file or directory

(followed by some more errors)

This is because tools/svn-env makes assumptions about the user's directory layout which are not necessily true. To overcome this, change tools/svn-env to:

#!/bin/bash
#
# Creates common environment for SVN repository
#
# $Id: svn-env 553 2006-05-17 22:40:32Z bcornec $
#

export VER="`cat ${TOOLHOME}/../mondo/VERSION`"
export SVNBRANCH="`dirname ${TOOLHOME}`"

# To be safe for SVN commands
export REVISION=`(cd $TOOLHOME/.. ; svnversion .)`
export TAG=`cat ${TOOLHOME}/TAG`

tools/svn2build.andree: line 35: cd: /home/<user>/mondo/svn: No such file or directory

This is because svn2build assumes that there is an svn directory in the ${BASE} directory as defined in tools/common-env. This assumption may not be valid, e.g. my SVN tree is somewhere else. Changing common-env could address this. But so can commenting the following in svn2build:

# Make it safe for SVN commands
#cd ${BASE}/svn

<some path>/stable/tools/distro-env: line 120: rpm: command not found

svn2build also reads in information about distribution specific activities from distro-env. distro-env needs to be adjusted for Debian.

Can't locate Date/Manip?.pm in @INC …

Install Debian package 'libdate-manip-perl'.

/bin/sh: man2dvi: command not found

Unfortunately, Debian does not have a package that would provide this tool. Fortuntely it is just a little shell script:

#! /bin/sh
#
# script to format manpages to dvi
# Copyright (c) 1997 Tobias Begalke (tb@lst.de)
#
# Changelog:
# 23May06AL: - extracted from upstream man-1.6c package which can be found at
#              http://primates.ximian.com/~flucifredi/man/
#            - changed:
#                location=`man -c -w $1`
#              to:
#                location=`man -w $1`
#

groff="groff -Tdvi -mandoc"

if [ ! $# = 1 ]; then
  echo "$0: usage:"
  echo "  $0 [topic] > topic.dvi"
  exit 1
fi

location=`man -w $1`

if [ "$location" = "" ]; then
  exit 1
fi

case `file $location` in
  *gzip* )
    zcat $location | $groff
    ;;

  *troff* )
    $groff $location
    ;;
esac

Save the abive in e.g. /usr/local/bin/man2dvi and make the resulting file executable.

make: docbook2ps: Command not found

Install Debian package 'docbook-utils'.

/bin/sh: man2html: command not found

Install Debian package 'man2html'.

groff: can't find `DESC' file

groff:fatal error: invalid device `dvi'

make: * [mindi.8.ps] Error 3

Install Debian package 'groff'. (This is not the same as 'groff-base'.)

![…]/mondorescue-howto.sgml:1:55:W: cannot generate system identifier for public text "-OASISDTD DocBook V4.1EN" (folloed by many openjade errors)

Install Debian package 'docbook'.

Tip

Run the following to just get mindi and mondo source tarballs:

tools/svn2build "mondo-doc mindi mondo"