bh@42: README for TreePackager bh@42: ======================= bh@42: bh@42: bh@42: TreePackager is a tool to automatically build debian packages from SVN. bh@42: bh@42: bh@42: Prerequisites bh@42: ------------- bh@42: bh@42: You need the following software to run TreePackager. In the list below, bh@42: parentheses contain the name of the corresponding package in Debian Etch bh@42: if its not the same as the software. The version required is usually bh@42: the one from debian etch. bh@42: bh@42: Python 2.4 (python2.4-minimal) bh@42: Debian devscripts (devscripts) bh@42: subversion bh@42: pbuilder bh@42: sudo bh@42: bzip2 bh@42: bh@42: For the web front-end you also need the following software: bh@42: bh@42: Genshi (python-genshi) bh@42: CherryPy (python-cherrypy) bh@42: bh@42: Some of the packagers require additional software. The KDEPIM bh@42: enterprise branch packagers require the following additional software: bh@42: bh@42: autoconf2.13 bh@42: automake1.9 bh@42: bh@42: bh@42: Installation bh@42: ------------ bh@42: bh@42: You can run the tree packager itself directly from the source tree. bh@42: However, you need to configure it first and setup pbuilder. bh@42: bh@42: bh@42: Configuration bh@42: ------------- bh@42: bh@42: To understand the configuration, first a few notes about the bh@42: architecture of TreePackager. The TreePackager consist of one program bh@42: that periodically updates svn working directories and if something has bh@42: changed, builds a new debian package from the working directory. The bh@42: program should run as a normal user. The sample configuration assumes bh@42: that it's the user "builder" with a home directory "/home/builder". The bh@42: default configuration manages a directory tree under bh@42: "/home/builder/enterprise". bh@42: bh@42: The binary packages are built with pbuilder. Because pbuilder uses a bh@42: chroot environment to build the packages, it must be run as root. The bh@42: tree packager therefore needs a way to run pbuilder as root even though bh@42: itself runs as a non-root user. By default the tree packager uses sudo, bh@42: so you have to setup sudo to allow the tree packager user to invoke bh@42: pbuilder without a password. This can be accomplished with the bh@42: following line in /etc/sudoers (using the default user name): bh@42: bh@42: builder ALL = NOPASSWD: /usr/sbin/pbuilder bh@42: bh@42: bh@42: Configure TreePackager bh@42: ~~~~~~~~~~~~~~~~~~~~~~ bh@42: bh@42: The file demo.cfg contains example configuration that contains most of bh@42: what is needed to package KDEPIM and kde-i18n from the KDEPIM enterprise bh@42: branch. Copy this file to treepkg.cfg and adapt it to your needs. The bh@71: comments in the file should provide most of the hints to get you bh@71: started. Some more information is in the "Configuring a packager" bh@71: section below. bh@71: bh@71: bh@71: Configuring a packager bh@71: ~~~~~~~~~~~~~~~~~~~~~~ bh@71: bh@71: The configuration file contains on section for each packager. The bh@71: section name starts with a "pkg_" prefix. The possible options are bh@71: described in demo.cfg. However there are some things that need to be bh@71: set up outside of the config file. bh@71: bh@71: Each packager has a base directory (the base_dir option in the bh@71: corresponding pkg_-section). One thing needed by a packager is the bh@71: contents of the debian subdirectory of the debian source package. When bh@71: creating the source package, the packager simply copies the subdirectory bh@71: "debian" of the base_dir into the directory making up the source tree. bh@71: How the debian directory is created and maintained is up to you. bh@71: Usually it's a good idea to start with the debian subdirectory an bh@71: existing debian package for the software. bh@42: bh@42: bh@42: Configure pbuilder bh@42: ~~~~~~~~~~~~~~~~~~ bh@42: bh@50: It's best to give the tree packager its own pbuilder configuration and bh@50: directories. The default configuration uses a "pbuilder" subdirectory bh@50: in /home/builder/enterprise. If you have created the treepkg.cfg file bh@50: with at least one packager and the correct root_cmd and pbuilderrc bh@50: options (the defaults for both should be OK if you use sudo as described bh@50: above), you can create the directories, the pbuilder configuration and bh@50: the chroot environment with the script initpbuilder.py like this: bh@50: bh@50: ./initpbuilder.py --mirrorsite= bh@50: bh@50: You can specify some more mirrors with the --othermirror option. For bh@50: more information run "./initpbuilder.py --help" and consult the pbuilder bh@50: documentation. bh@42: bh@42: bh@42: Configure the web front-end bh@42: ~~~~~~~~~~~~~~~~~~~~~~~~~~~ bh@42: bh@70: The web front-end consists of a single HTML-page with an overview of the bh@70: packager status and links to build logs when available. There are two bh@70: ways to publish this front-end: as little web-server with a dynamic bh@70: web-page or as a directory with a bunch of files making up a static bh@70: web-site. bh@70: bh@70: Webserver: bh@70: bh@42: The default configuration should be OK in most cases. If you want you bh@42: can customize it in cherrypy.cfg. Start the web front-end with bh@42: bh@42: ./starttreepkgweb.py bh@42: bh@42: starttreepkgweb has some options to specify which configuration files to use. bh@70: bh@70: bh@70: Static pages: bh@70: bh@70: The static pages are published using two programs, createstaticweb.py bh@70: and publishstaticweb.py. createstaticweb.py is run on the system where bh@70: the tree packager runs. publishstaticweb.py is usually run on another bh@70: system and connects via ssh and rsync to the tree packager host, creates bh@70: the files with createstaticweb.py and copies the files from the tree bh@70: packager host to a third host. bh@70: bh@70: The config file for publishstaticweb.py is demostaticweb.cfg. Copy this bh@70: file to ststaticweb.cfg and adapt it to your system. The comments in bh@70: the file describe the options. Afterwards, run the script with bh@70: bh@70: ./publishstaticweb.py bh@71: bh@71: bh@71: Running the Tree Packager bh@71: ------------------------- bh@71: bh@71: After configuration, run the tree packager with bh@71: bh@71: ./runtreepkg.py [options] [packager...] bh@71: bh@71: For each packager listed on the command line -- or all configured bh@71: packagers if none are given -- the tree packager checks our or updates bh@71: the sources and builds binary packages if the new revision hasn't been bh@71: packaged yet. bh@71: bh@71: If the option --once has been given, the tree packager exits after it bh@71: has checked each packager once. Without it, the check is done bh@71: repeatedly. The interval between two checks can be set in the config bh@71: file. bh@71: bh@71: Call runtreepkg.py with the --help option to see a list of the available bh@71: options.