press: add linux-magazin.de URL
[grml.org.git] / online-docs / repo-cookbook.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"\r
2     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">\r
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">\r
4 <head>\r
5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
6 <meta name="generator" content="AsciiDoc 8.2.2" />\r
7 <style type="text/css">\r
8 /* Debug borders */\r
9 p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 {\r
10 /*\r
11   border: 1px solid red;\r
12 */\r
13 }\r
14 \r
15 body {\r
16   margin: 1em 5% 1em 5%;\r
17 }\r
18 \r
19 a {\r
20   color: blue;\r
21   text-decoration: underline;\r
22 }\r
23 a:visited {\r
24   color: fuchsia;\r
25 }\r
26 \r
27 em {\r
28   font-style: italic;\r
29 }\r
30 \r
31 strong {\r
32   font-weight: bold;\r
33 }\r
34 \r
35 tt {\r
36   color: navy;\r
37 }\r
38 \r
39 h1, h2, h3, h4, h5, h6 {\r
40   color: #527bbd;\r
41   font-family: sans-serif;\r
42   margin-top: 1.2em;\r
43   margin-bottom: 0.5em;\r
44   line-height: 1.3;\r
45 }\r
46 \r
47 h1 {\r
48   border-bottom: 2px solid silver;\r
49 }\r
50 h2 {\r
51   border-bottom: 2px solid silver;\r
52   padding-top: 0.5em;\r
53 }\r
54 \r
55 div.sectionbody {\r
56   font-family: serif;\r
57   margin-left: 0;\r
58 }\r
59 \r
60 hr {\r
61   border: 1px solid silver;\r
62 }\r
63 \r
64 p {\r
65   margin-top: 0.5em;\r
66   margin-bottom: 0.5em;\r
67 }\r
68 \r
69 pre {\r
70   padding: 0;\r
71   margin: 0;\r
72 }\r
73 \r
74 span#author {\r
75   color: #527bbd;\r
76   font-family: sans-serif;\r
77   font-weight: bold;\r
78   font-size: 1.1em;\r
79 }\r
80 span#email {\r
81 }\r
82 span#revision {\r
83   font-family: sans-serif;\r
84 }\r
85 \r
86 div#footer {\r
87   font-family: sans-serif;\r
88   font-size: small;\r
89   border-top: 2px solid silver;\r
90   padding-top: 0.5em;\r
91   margin-top: 4.0em;\r
92 }\r
93 div#footer-text {\r
94   float: left;\r
95   padding-bottom: 0.5em;\r
96 }\r
97 div#footer-badges {\r
98   float: right;\r
99   padding-bottom: 0.5em;\r
100 }\r
101 \r
102 div#preamble,\r
103 div.tableblock, div.imageblock, div.exampleblock, div.verseblock,\r
104 div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,\r
105 div.admonitionblock {\r
106   margin-right: 10%;\r
107   margin-top: 1.5em;\r
108   margin-bottom: 1.5em;\r
109 }\r
110 div.admonitionblock {\r
111   margin-top: 2.5em;\r
112   margin-bottom: 2.5em;\r
113 }\r
114 \r
115 div.content { /* Block element content. */\r
116   padding: 0;\r
117 }\r
118 \r
119 /* Block element titles. */\r
120 div.title, caption.title {\r
121   font-family: sans-serif;\r
122   font-weight: bold;\r
123   text-align: left;\r
124   margin-top: 1.0em;\r
125   margin-bottom: 0.5em;\r
126 }\r
127 div.title + * {\r
128   margin-top: 0;\r
129 }\r
130 \r
131 td div.title:first-child {\r
132   margin-top: 0.0em;\r
133 }\r
134 div.content div.title:first-child {\r
135   margin-top: 0.0em;\r
136 }\r
137 div.content + div.title {\r
138   margin-top: 0.0em;\r
139 }\r
140 \r
141 div.sidebarblock > div.content {\r
142   background: #ffffee;\r
143   border: 1px solid silver;\r
144   padding: 0.5em;\r
145 }\r
146 \r
147 div.listingblock {\r
148   margin-right: 0%;\r
149 }\r
150 div.listingblock > div.content {\r
151   border: 1px solid silver;\r
152   background: #f4f4f4;\r
153   padding: 0.5em;\r
154 }\r
155 \r
156 div.quoteblock > div.content {\r
157   padding-left: 2.0em;\r
158 }\r
159 \r
160 div.attribution {\r
161   text-align: right;\r
162 }\r
163 div.verseblock + div.attribution {\r
164   text-align: left;\r
165 }\r
166 \r
167 div.admonitionblock .icon {\r
168   vertical-align: top;\r
169   font-size: 1.1em;\r
170   font-weight: bold;\r
171   text-decoration: underline;\r
172   color: #527bbd;\r
173   padding-right: 0.5em;\r
174 }\r
175 div.admonitionblock td.content {\r
176   padding-left: 0.5em;\r
177   border-left: 2px solid silver;\r
178 }\r
179 \r
180 div.exampleblock > div.content {\r
181   border-left: 2px solid silver;\r
182   padding: 0.5em;\r
183 }\r
184 \r
185 div.verseblock div.content {\r
186   white-space: pre;\r
187 }\r
188 \r
189 div.imageblock div.content { padding-left: 0; }\r
190 div.imageblock img { border: 1px solid silver; }\r
191 span.image img { border-style: none; }\r
192 \r
193 dl {\r
194   margin-top: 0.8em;\r
195   margin-bottom: 0.8em;\r
196 }\r
197 dt {\r
198   margin-top: 0.5em;\r
199   margin-bottom: 0;\r
200   font-style: italic;\r
201 }\r
202 dd > *:first-child {\r
203   margin-top: 0;\r
204 }\r
205 \r
206 ul, ol {\r
207     list-style-position: outside;\r
208 }\r
209 ol.olist2 {\r
210   list-style-type: lower-alpha;\r
211 }\r
212 \r
213 div.tableblock > table {\r
214   border: 3px solid #527bbd;\r
215 }\r
216 thead {\r
217   font-family: sans-serif;\r
218   font-weight: bold;\r
219 }\r
220 tfoot {\r
221   font-weight: bold;\r
222 }\r
223 \r
224 div.hlist {\r
225   margin-top: 0.8em;\r
226   margin-bottom: 0.8em;\r
227 }\r
228 div.hlist td {\r
229   padding-bottom: 5px;\r
230 }\r
231 td.hlist1 {\r
232   vertical-align: top;\r
233   font-style: italic;\r
234   padding-right: 0.8em;\r
235 }\r
236 td.hlist2 {\r
237   vertical-align: top;\r
238 }\r
239 \r
240 @media print {\r
241   div#footer-badges { display: none; }\r
242 }\r
243 \r
244 div#toctitle {\r
245   color: #527bbd;\r
246   font-family: sans-serif;\r
247   font-size: 1.1em;\r
248   font-weight: bold;\r
249   margin-top: 1.0em;\r
250   margin-bottom: 0.1em;\r
251 }\r
252 \r
253 div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {\r
254   margin-top: 0;\r
255   margin-bottom: 0;\r
256 }\r
257 div.toclevel2 {\r
258   margin-left: 2em;\r
259   font-size: 0.9em;\r
260 }\r
261 div.toclevel3 {\r
262   margin-left: 4em;\r
263   font-size: 0.9em;\r
264 }\r
265 div.toclevel4 {\r
266   margin-left: 6em;\r
267   font-size: 0.9em;\r
268 }\r
269 /* Workarounds for IE6's broken and incomplete CSS2. */\r
270 \r
271 div.sidebar-content {\r
272   background: #ffffee;\r
273   border: 1px solid silver;\r
274   padding: 0.5em;\r
275 }\r
276 div.sidebar-title, div.image-title {\r
277   font-family: sans-serif;\r
278   font-weight: bold;\r
279   margin-top: 0.0em;\r
280   margin-bottom: 0.5em;\r
281 }\r
282 \r
283 div.listingblock div.content {\r
284   border: 1px solid silver;\r
285   background: #f4f4f4;\r
286   padding: 0.5em;\r
287 }\r
288 \r
289 div.quoteblock-content {\r
290   padding-left: 2.0em;\r
291 }\r
292 \r
293 div.exampleblock-content {\r
294   border-left: 2px solid silver;\r
295   padding-left: 0.5em;\r
296 }\r
297 \r
298 /* IE6 sets dynamically generated links as visited. */\r
299 div#toc a:visited { color: blue; }\r
300 </style>\r
301 <script type="text/javascript">\r
302 /*<![CDATA[*/\r
303 window.onload = function(){generateToc(2)}\r
304 /* Author: Mihai Bazon, September 2002\r
305  * http://students.infoiasi.ro/~mishoo\r
306  *\r
307  * Table Of Content generator\r
308  * Version: 0.4\r
309  *\r
310  * Feel free to use this script under the terms of the GNU General Public\r
311  * License, as long as you do not remove or alter this notice.\r
312  */\r
313 \r
314  /* modified by Troy D. Hanson, September 2006. License: GPL */\r
315  /* modified by Stuart Rackham, October 2006. License: GPL */\r
316 \r
317 function getText(el) {\r
318   var text = "";\r
319   for (var i = el.firstChild; i != null; i = i.nextSibling) {\r
320     if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.\r
321       text += i.data;\r
322     else if (i.firstChild != null)\r
323       text += getText(i);\r
324   }\r
325   return text;\r
326 }\r
327 \r
328 function TocEntry(el, text, toclevel) {\r
329   this.element = el;\r
330   this.text = text;\r
331   this.toclevel = toclevel;\r
332 }\r
333 \r
334 function tocEntries(el, toclevels) {\r
335   var result = new Array;\r
336   var re = new RegExp('[hH]([2-'+(toclevels+1)+'])');\r
337   // Function that scans the DOM tree for header elements (the DOM2\r
338   // nodeIterator API would be a better technique but not supported by all\r
339   // browsers).\r
340   var iterate = function (el) {\r
341     for (var i = el.firstChild; i != null; i = i.nextSibling) {\r
342       if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {\r
343         var mo = re.exec(i.tagName)\r
344         if (mo)\r
345           result[result.length] = new TocEntry(i, getText(i), mo[1]-1);\r
346         iterate(i);\r
347       }\r
348     }\r
349   }\r
350   iterate(el);\r
351   return result;\r
352 }\r
353 \r
354 // This function does the work. toclevels = 1..4.\r
355 function generateToc(toclevels) {\r
356   var toc = document.getElementById("toc");\r
357   var entries = tocEntries(document.getElementsByTagName("body")[0], toclevels);\r
358   for (var i = 0; i < entries.length; ++i) {\r
359     var entry = entries[i];\r
360     if (entry.element.id == "")\r
361       entry.element.id = "toc" + i;\r
362     var a = document.createElement("a");\r
363     a.href = "#" + entry.element.id;\r
364     a.appendChild(document.createTextNode(entry.text));\r
365     var div = document.createElement("div");\r
366     div.appendChild(a);\r
367     div.className = "toclevel" + entry.toclevel;\r
368     toc.appendChild(div);\r
369   }\r
370 }\r
371 /*]]>*/\r
372 </script>\r
373 <title>Cookbook for the grml repository software</title>\r
374 </head>\r
375 <body>\r
376 <div id="header">\r
377 <h1>Cookbook for the grml repository software</h1>\r
378 <div id="toc">\r
379   <div id="toctitle">Table of Contents</div>\r
380   <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>\r
381 </div>\r
382 </div>\r
383 <h2>1. Preface</h2>\r
384 <div class="sectionbody">\r
385 <p>This is a short documentation for common tasks with the grml repository.\r
386 Notice: reprepro actions have to take place in ~/grml-repo/archive.</p>\r
387 </div>\r
388 <h2>2. Recipes</h2>\r
389 <div class="sectionbody">\r
390 <p>Here are some common tasks:</p>\r
391 <div class="listingblock">\r
392 <div class="title">Example: Add a single deb to a distribution</div>\r
393 <div class="content">\r
394 <pre><tt>#insert the deb\r
395 reprepro includedeb `&lt;suite&gt;` `&lt;foo.deb&gt;`\r
396 #check the result\r
397 reprepro list `&lt;suite&gt;` `&lt;packagename&gt;`</tt></pre>\r
398 </div></div>\r
399 <div class="listingblock">\r
400 <div class="title">Example: Copy all packages from one repo to another</div>\r
401 <div class="content">\r
402 <pre><tt>reprepro dumptracks grml-testing  | \\r
403 awk '/ pool\/.*\/.*\.deb/ {print $1}' | \\r
404 xargs -n 1 basename | cut -d _ -f 1 | \\r
405 sort -u | xargs reprepro copy \\r
406 grml-test grml-testing</tt></pre>\r
407 </div></div>\r
408 <div class="listingblock">\r
409 <div class="title">Example: Move a package from one distribution to another</div>\r
410 <div class="content">\r
411 <pre><tt>#move the package\r
412 reprepro copy `&lt;source distribution&gt;` `&lt;target distribution&gt;` `&lt;packagename&gt;`\r
413 #check the result\r
414 reprepro list `&lt;target distribution&gt;`</tt></pre>\r
415 </div></div>\r
416 <div class="exampleblock">\r
417 <div class="title">Example: Adding users</div>\r
418 <div class="exampleblock-content">\r
419 <p>Prerequsites:</p>\r
420 <ul>\r
421 <li>\r
422 <p>\r
423 GPG Key ID of the new user\r
424 </p>\r
425 </li>\r
426 <li>\r
427 <p>\r
428 ssh public-key of the new user\r
429 </p>\r
430 </li>\r
431 </ul>\r
432 <p>Steps to follow to allow uploading for a new user:</p>\r
433 <ol>\r
434 <li>\r
435 <p>\r
436 Add the public-key to /home/incoming/.ssh/authorized_keys\r
437 </p>\r
438 </li>\r
439 <li>\r
440 <p>\r
441 As user archive do: ~/grml-repo/bin/importkey.sh <tt>GPGKeyid</tt>\r
442 </p>\r
443 </li>\r
444 </ol>\r
445 </div></div>\r
446 </div>\r
447 <h2>3. About this document</h2>\r
448 <div class="sectionbody">\r
449 <p>(c) Michael Prokop &lt;mika@grml.org&gt; and Alexander Wirt &lt;formorer@grml.org&gt;; HTML version powered by <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>.</p>\r
450 </div>\r
451 <div id="footer">\r
452 <div id="footer-text">\r
453 Last updated 29-Feb-2008 04:31:59 CEST\r
454 </div>\r
455 </div>\r
456 </body>\r
457 </html>\r