1 Initialising a dak database schema
2 ==================================
4 The following packages are needed:
5 * postgresql-9.0 postgresql-client-9.0 postgresql-plperl-9.0 postgresql-plpython-9.0 postgresql-9.0-debversion
7 (the schema assumes at least postgresql 9.0; ftpmaster in Debian currently uses
8 the squeeze postgresql 9.0 backport)
10 The following roles are assumed to exist:
11 * dak: database superuser: needs to be an actual user
12 * ftpmaster: role which should be given to archive administrators
13 * ftpteam: people who can do NEW processing, overrides, removals, etc
14 * ftptrainee: people who can add notes to packages in NEW
16 For the purposes of this document, we'll be working in /srv/dak
18 Set up the dak user on both the system and in postgres:
19 # sudo addgroup --system ftpmaster
20 # sudo adduser --system dak --ingroup ftpmaster
21 # sudo -u postgres createuser -s dak
23 Set up the dak directory:
26 # sudo chown dak:ftpmaster /srv/dak
27 # sudo chmod 2775 /srv/dak
29 Create a symlink to /srv/dak/dak.conf in /etc/dak
30 (we'll create the config file in a bit)
31 # sudo ln -s /srv/dak/dak.conf /etc/dak/dak.conf
36 Create the additional roles:
37 # createuser -S -R -D ftpmaster
38 # createuser -S -R -D ftpteam
39 # createuser -S -R -D ftptrainee
41 Create an empty database with SQL_ASCII encoding:
42 # createdb -T template0 -E SQL_ASCII -O dak projectb
45 # psql -f current_schema.sql -d projectb
47 Set up some core data in projectb to get started (read the init_vars file if
48 you wish to customise various aspects):
51 Create a minimal dak.conf
52 # ./init_minimal_conf > /srv/dak/dak.conf
54 Set up a symlink somewhere
56 # ln -s /path/to/dak.py ~dak/bin/dak
58 At this point, you should be able to test that the database schema is
62 Run dak init-dirs to set up the initial /srv/dak tree
65 Copy the email templates into the /srv/dak tree.
66 WARNING: Please check these templates over and customise as necessary
67 # cp templates/* /srv/dak/templates/
69 Set up a private signing key: don't set a passphrase as dak will not
70 pass one through to gpg. Guard this key carefully
71 # gpg --no-default-keyring --secret-keyring /srv/dak/keyrings/s3kr1t/dot-gnupg/secring.gpg --keyring /srv/dak/keyrings/s3kr1t/dot-gnupg/pubring.gpg --gen-key
72 Remember the signing key id for when creating the suite below.
73 Here we'll pretend it is DDDDDDDD for convenience
75 Import some developer keys.
76 Either import from keyservers (here AAAAAAAA):
77 # gpg --no-default-keyring --keyring /srv/dak/keyrings/upload-keyring.gpg --recv-key AAAAAAAA
79 # gpg --no-default-keyring --keyring /srv/dak/keyrings/upload-keyring.gpg --import /path/to/keyfile
81 Import the developer keys into the database
82 The -U '%s' tells dak to add UIDs automatically
83 # dak import-keyring -U '%s' /srv/dak/keyrings/upload-keyring.gpg
85 Add some architectures you care about:
86 # dak admin architecture add i386 "Intel x86 port"
87 # dak admin architecture add amd64 "AMD64 port"
89 Add a suite (origin=, label= and codename= are optional)
90 signingkey= will ensure that Release files are signed
91 # dak admin suite add-all-arches unstable x.y.z origin=MyDistro label=Master codename=sid signingkey=DDDDDDDD
93 Re-run dak init-dirs to add new suite directories to /srv/dak
96 #######################################################################
97 # Example package flow
98 #######################################################################
100 For this example, we've grabbed and built the hello source package
101 for AMD64 and copied it into /srv/dak/queue/unchecked.
103 We start by performing initial package checks which will
104 result in the package being moved to NEW
105 # cd /srv/dak/queue/unchecked
106 # dak process-upload *.changes
108 -----------------------------------------------------------------------
109 hello_2.6-1_amd64.changes
113 (new) hello_2.6-1.debian.tar.gz optional devel
114 (new) hello_2.6-1.dsc optional devel
115 (new) hello_2.6-1_amd64.deb optional devel
116 The classic greeting, and a good example
117 The GNU hello program produces a familiar, friendly greeting. It
118 allows non-programmers to use a classic computer science tool which
119 would otherwise be unavailable to them.
121 Seriously, though: this is an example of how to do a Debian package.
122 It is the Debian version of the GNU Project's `hello world' program
123 (which is itself an example for the GNU Project).
124 (new) hello_2.6.orig.tar.gz optional devel
125 Changes: hello (2.6-1) unstable; urgency=low
127 * New upstream release.
128 * Drop unused INSTALL_PROGRAM stuff.
129 * Switch to 3.0 (quilt) source format.
130 * Standards-Version: 3.9.1 (no special changes for this).
133 Override entries for your package:
135 Announcing to debian-devel-changes@lists.debian.org
140 -----------------------------------------------------------------------
142 We can now look at the NEW queue-report
144 -----------------------------------------------------------------------
148 hello | 2.6-1 | source amd64 | 5 seconds old
150 1 new source package / 1 new package in total.
151 -----------------------------------------------------------------------
153 And we can then process the NEW queue:
154 # cd /srv/dak/queue/new
155 # dak process-new *.changes
157 -----------------------------------------------------------------------
158 hello_2.6-1_amd64.changes
162 Add overrides, Edit overrides, Check, Manual reject, Note edit, Prod, [S]kip, Quit ?A
164 -----------------------------------------------------------------------
166 At this stage, the package has been ACCEPTed from NEW into NEWSTAGE.
167 We now need to finally ACCEPT it into the pool:
169 # cd /srv/dak/queue/newstage
170 # dak process-upload *.changes
172 -----------------------------------------------------------------------
173 hello_2.6-1_amd64.changes
177 hello_2.6-1.debian.tar.gz
178 to main/h/hello/hello_2.6-1.debian.tar.gz
180 to main/h/hello/hello_2.6-1.dsc
181 hello_2.6-1_amd64.deb
182 to main/h/hello/hello_2.6-1_amd64.deb
183 hello_2.6.orig.tar.gz
184 to main/h/hello/hello_2.6.orig.tar.gz
187 Override entries for your package:
188 hello_2.6-1.dsc - optional devel
189 hello_2.6-1_amd64.deb - optional devel
191 Announcing to debian-devel-changes@lists.debian.org
192 [A]ccept, Skip, Quit ?A
194 Installed 1 package set, 646 KB.
195 -----------------------------------------------------------------------
197 We can now see that dak knows about the package:
200 -----------------------------------------------------------------------
201 hello | 2.6-1 | unstable | source, amd64
202 -----------------------------------------------------------------------
204 # dak control-suite -l unstable
206 -----------------------------------------------------------------------
209 -----------------------------------------------------------------------
211 Next, we can generate the packages and sources files:
212 # dak generate-packages-sources2
213 (zcat /srv/dak/ftp/dists/unstable/main/binary-amd64/Packages.gz for instance)
215 And finally, we can generate the signed Release files:
216 # dak generate-release
218 -----------------------------------------------------------------------
220 -----------------------------------------------------------------------
221 (Look at /srv/dak/ftp/dists/unstable/Release, Release.gpg and InRelease)
224 #######################################################################
226 #######################################################################
228 The debian archive automates most of these steps in jobs called
229 cron.unchecked, cron.hourly and cron.dinstall.
231 TODO: Write example (simplified) versions of these cronjobs which will
232 do for most installs.