]> git.decadent.org.uk Git - dak.git/blob - setup/README
Merge remote-tracking branch 'jcristau/cs-set-log-suite'
[dak.git] / setup / README
1 Initialising a dak database schema
2 ==================================
3
4 The following packages are needed for the database:
5  * postgresql-9.4 postgresql-client-9.4 postgresql-9.4-debversion
6 and the following packages for dak itself:
7  * python-psycopg2 python-sqlalchemy python-apt gnupg dpkg-dev lintian
8    binutils-multiarch python-yaml less python-ldap python-pyrss2gen python-rrdtool
9    symlinks python-debian python-debianbts
10
11 (the schema assumes at least postgresql 9.1; ftpmaster in Debian currently uses
12 the postgresql 9.4 version from Debian 8)
13
14 The following roles are assumed to exist:
15  * dak: database superuser: needs to be an actual user
16  * ftpmaster: role which should be given to archive administrators
17  * ftpteam: people who can do NEW processing, overrides, removals, etc
18  * ftptrainee: people who can add notes to packages in NEW
19
20 For the purposes of this document, we'll be working in /srv/dak
21
22 Set up the dak user:
23 # sudo addgroup ftpmaster
24 # sudo adduser dak --disabled-login --ingroup ftpmaster --shell /bin/bash
25
26 Create postgres roles and database:
27 # sudo -u postgres psql
28   CREATE USER dak CREATEROLE;
29   CREATE ROLE ftpmaster WITH ROLE dak;
30   CREATE ROLE ftpteam WITH ROLE ftpmaster;
31   CREATE ROLE ftptrainee WITH ROLE ftpmaster, ftpteam;
32
33   CREATE DATABASE projectb WITH OWNER dak TEMPLATE template0 ENCODING 'SQL_ASCII';
34   \c projectb
35   CREATE EXTENSION IF NOT EXISTS plpgsql;
36   CREATE EXTENSION IF NOT EXISTS debversion;
37
38 Set up the dak directory:
39 # sudo mkdir /etc/dak
40 # sudo mkdir /srv/dak
41 # sudo chown dak:ftpmaster /srv/dak
42 # sudo chmod 2775 /srv/dak
43
44 Create a symlink to /srv/dak/dak.conf in /etc/dak
45 (we'll create the config file in a bit)
46 # sudo ln -s /srv/dak/dak.conf /etc/dak/dak.conf
47
48 Become the dak user:
49 # sudo -u dak -s -H
50
51 Import the schema.  We redirect STDOUT to /dev/null as otherwise it's
52 impossible to see if something fails.
53 # psql -1 -f current_schema.sql -d projectb >/dev/null
54
55 Set up some core data in projectb to get started (read the init_vars file if
56 you wish to customise various aspects):
57 # ./init_core
58
59 Create a minimal dak.conf
60 # ./init_minimal_conf > /srv/dak/dak.conf
61
62 Set up a symlink somewhere
63 # mkdir ~dak/bin
64 # ln -s /path/to/dak.py ~dak/bin/dak
65
66 At this point, you should be able to test that the database schema is
67 up-to-date
68 # dak update-db
69
70 Run dak init-dirs to set up the initial /srv/dak tree
71 # dak init-dirs
72
73 Copy the email templates into the /srv/dak tree.
74 WARNING: Please check these templates over and customise as necessary
75 # cp templates/* /srv/dak/templates/
76
77 Set up a private signing key: don't set a passphrase as dak will not
78 pass one through to gpg.  Guard this key carefully!
79 The key only needs to be able to sign, it doesn't need to be able
80 to encrypt.
81 # 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
82 Remember the signing key id for when creating the suite below.
83 Here we'll pretend it is DDDDDDDD for convenience
84
85 Import some developer keys.
86 Either import from keyservers (here AAAAAAAA):
87 # gpg --no-default-keyring --keyring /srv/dak/keyrings/upload-keyring.gpg --recv-key AAAAAAAA
88 or import from files:
89 # gpg --no-default-keyring --keyring /srv/dak/keyrings/upload-keyring.gpg --import /path/to/keyfile
90
91 Import the developer keys into the database
92 The -U '%s' tells dak to add UIDs automatically
93 # dak import-keyring -U '%s' /srv/dak/keyrings/upload-keyring.gpg
94
95 Add some architectures you care about:
96 # dak admin architecture add i386 "Intel x86 port"
97 # dak admin architecture add amd64 "AMD64 port"
98
99 Add a suite (origin=, label= and codename= are optional)
100 signingkey= will ensure that Release files are signed
101 # dak admin suite add-all-arches unstable x.y.z origin=MyDistro label=Master codename=sid signingkey=DDDDDDDD
102
103 Add the components to the suite
104 # dak admin s-c add unstable main contrib non-free
105
106 Re-run dak init-dirs to add new suite directories to /srv/dak
107 # dak init-dirs
108
109 #######################################################################
110 # Example package flow
111 #######################################################################
112
113 For this example, we've grabbed and built the hello source package
114 for AMD64 and copied it into /srv/dak/queue/unchecked.
115
116 We start by performing initial package checks which will
117 result in the package being moved to NEW
118 # dak process-upload -d /srv/dak/queue/unchecked
119
120 -----------------------------------------------------------------------
121 hello_2.6-1_amd64.changes
122
123 hello (2.6-1) unstable; urgency=low
124  .
125    * New upstream release.
126    * Drop unused INSTALL_PROGRAM stuff.
127    * Switch to 3.0 (quilt) source format.
128    * Standards-Version: 3.9.1 (no special changes for this).
129
130 source:hello
131 binary:hello
132
133 binary:hello is NEW.
134 source:hello is NEW.
135
136 [N]ew, Skip, Quit ? N
137 ACCEPT-TO-NEW
138 Installed 1 package set, 646 KB.
139 -----------------------------------------------------------------------
140
141 We can now look at the NEW queue-report
142 # dak queue-report
143 -----------------------------------------------------------------------
144 NEW
145 ---
146
147 hello | 2.6-1 | source amd64 | 42 seconds old
148
149 1 new source package / 1 new package in total / 0 new package to be processed.
150 -----------------------------------------------------------------------
151
152 And we can then process the NEW queue:
153 # dak process-new
154
155 -----------------------------------------------------------------------
156 hello_2.6-1_amd64.changes
157 -------------------------
158
159    Target:     unstable
160    Changed-By: Santiago Vila <sanvila@debian.org>
161
162 NEW
163
164 hello                optional             devel
165 dsc:hello            extra                misc
166 Add overrides, Edit overrides, Check, Manual reject, Note edit, Prod, [S]kip, Quit ?A
167 PENDING ACCEPT
168 -----------------------------------------------------------------------
169
170 At this stage, the package has been marked as ACCEPTed from NEW.
171 We now need to process the NEW policy queue:
172
173 # dak process-policy new
174 -----------------------------------------------------------------------
175 Processing changes file: hello_2.6-1_amd64.changes
176   ACCEPT
177 -----------------------------------------------------------------------
178
179 We can now see that dak knows about the package:
180 # dak ls -S hello
181
182 -----------------------------------------------------------------------
183      hello |      2.6-1 |      unstable | source, amd64
184 -----------------------------------------------------------------------
185
186 # dak control-suite -l unstable
187
188 -----------------------------------------------------------------------
189 hello 2.6-1 amd64
190 hello 2.6-1 source
191 -----------------------------------------------------------------------
192
193 Next, we can generate the packages and sources files:
194 # dak generate-packages-sources2
195 (zcat /srv/dak/ftp/dists/unstable/main/binary-amd64/Packages.gz for instance)
196
197 And finally, we can generate the signed Release files:
198 # dak generate-release
199
200 -----------------------------------------------------------------------
201 Processing new
202 Processing byhand
203 Processing unstable
204 -----------------------------------------------------------------------
205 (Look at /srv/dak/ftp/dists/unstable/Release, Release.gpg and InRelease)
206
207
208 #######################################################################
209 # Next steps
210 #######################################################################
211
212 The debian archive automates most of these steps in jobs called
213 cron.unchecked, cron.hourly and cron.dinstall.
214
215 TODO: Write example (simplified) versions of these cronjobs which will
216 do for most installs.