Clarify that we no longer support i586 but require i686+
[grml.org.git] / online-docs / ml-mmj.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 mailinglistsetup</title>\r
374 </head>\r
375 <body>\r
376 <div id="header">\r
377 <h1>Cookbook for the grml mailinglistsetup</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 mailing list\r
386 setup (mlmmj).</p>\r
387 </div>\r
388 <h2>2. Upstream docs</h2>\r
389 <div class="sectionbody">\r
390 <p><a href="http://mlmmj.mmj.dk/">mlmmj Homepage</a></p>\r
391 </div>\r
392 <h2>3. Configuration of lists</h2>\r
393 <div class="sectionbody">\r
394 <p>Configuration of lists takes apart in the control directory of every list.\r
395 This can be found in <tt>/etc/mlmmj/lists/$list/control</tt>. A full list of\r
396 tunable options can be found in the file\r
397 <tt>/usr/share/doc/mlmmj/TUNABLES.gz</tt>.</p>\r
398 </div>\r
399 <h2>4. Recipes</h2>\r
400 <div class="sectionbody">\r
401 <p>Here are some common tasks:</p>\r
402 <h3>4.1. Add a new mailinglist</h3>\r
403 <div class="listingblock">\r
404 <div class="content">\r
405 <pre><tt>mlmmj-make-ml</tt></pre>\r
406 </div></div>\r
407 <h3>4.2. Subscribe somebody to a mailinglist</h3>\r
408 <div class="listingblock">\r
409 <div class="content">\r
410 <pre><tt>/usr/bin/mlmmj-sub -L /var/spool/mlmmj/$list/ -a joe@domain.tld</tt></pre>\r
411 </div></div>\r
412 <h3>4.3. Add custom headers to a mailinglist</h3>\r
413 <p>Just add your Headers to the file customheaders in the control\r
414 directory of a list.</p>\r
415 <div class="exampleblock">\r
416 <div class="title">Example: Add the custom header List-Id to list <tt>foo</tt></div>\r
417 <div class="exampleblock-content">\r
418 <p><tt>echo "List-Id funny list &lt;foo.ml.grml.org&gt;" &gt;&gt; /etc/mlmmj/lists/foo/control/customheaders</tt></p>\r
419 </div></div>\r
420 <h3>4.4. Restrict allowed posters to a list</h3>\r
421 <p>If you add a file <tt>access</tt> to the control directory you can control who is\r
422 allowed to post to a list. Rules are parsed from top to down and are\r
423 specified by a regex against the header of mail and the keyword <strong>reject</strong> or\r
424 <strong>deny</strong>. If you add a <strong>deny</strong> to the end of the file everybody who is not\r
425 explicitly allowed to post will be rejected. If you want to customize the\r
426 reject mail that users get modify the file\r
427 <tt>/etc/mlmmj/lists/$list/text/access</tt> the Macro <strong>$listaddr$</strong> will be\r
428 replaced with the address of the list.</p>\r
429 <div class="exampleblock">\r
430 <div class="title">Example: Deny all mails to a list with an exception for mails from foo@bar.de</div>\r
431 <div class="exampleblock-content">\r
432 <p>allow   ^From: .*foo@bar.de.*</p>\r
433 <p>deny</p>\r
434 </div></div>\r
435 <div class="exampleblock">\r
436 <div class="title">Example: Reject all mails from bar@baz.de</div>\r
437 <div class="exampleblock-content">\r
438 <p>deny    ^From: .*bar@baz.de.*</p>\r
439 </div></div>\r
440 <div class="admonitionblock">\r
441 <table><tr>\r
442 <td class="icon">\r
443 <div class="title">Caution</div>\r
444 </td>\r
445 <td class="content">Every header can be forged, so don't rely to hard on this feature. If you\r
446 really want to control all mails to a list use moderation.</td>\r
447 </tr></table>\r
448 </div>\r
449 </div>\r
450 <h2>5. List Archives</h2>\r
451 <div class="sectionbody">\r
452 <p>Currently we use <a href="http://www.sourceforge.net/projects/hypermail">Hypermail</a>\r
453 for archive generation. To get a new list archived the following steps have\r
454 to be followed:</p>\r
455 <ol>\r
456 <li>\r
457 <p>\r
458 Subscribe the archive user. For traditional reasons this is the user\r
459 <strong>lurker</strong>\r
460 </p>\r
461 <div class="listingblock">\r
462 <div class="content">\r
463 <pre><tt>`/usr/bin/mlmmj-sub -L /var/spool/mlmmj/$list/ -a lurker@ml.grml.org`.</tt></pre>\r
464 </div></div>\r
465 </li>\r
466 <li>\r
467 <p>\r
468 Tune the procmail file of the lurker user so that mails of the list get\r
469 there own inbox file:\r
470 </p>\r
471 <div class="listingblock">\r
472 <div class="content">\r
473 <pre><tt>:0 w\r
474 * ^X-Mailing-List: &lt;grml-live@ml.grml.org&gt;.*\r
475 grml-live</tt></pre>\r
476 </div></div>\r
477 </li>\r
478 <li>\r
479 <p>\r
480 Copy <tt>/home/lurker/conf/hg-commits.conf</tt> to a new config\r
481 </p>\r
482 </li>\r
483 <li>\r
484 <p>\r
485 Adjust at least the following config options in the config:\r
486 </p>\r
487 <ol class="olist2">\r
488 <li>\r
489 <p>\r
490 <tt>mbox = /home/lurker/hg-commits</tt> - set this to the mbox of the list\r
491 </p>\r
492 </li>\r
493 <li>\r
494 <p>\r
495 <tt>label = Mercurial commits changes for hg.grml.org</tt> - informative\r
496 description of the list\r
497 </p>\r
498 </li>\r
499 <li>\r
500 <p>\r
501 <tt>dir = /var/www/archive/hg-commits/</tt> - where to generate the html files\r
502 </p>\r
503 </li>\r
504 </ol>\r
505 </li>\r
506 <li>\r
507 <p>\r
508 If the archive should be mentioned on <a href="http://ml.grml.org">ml.grml.org</a> add\r
509 it to <tt>/var/www/archive/index.html</tt>\r
510 </p>\r
511 </li>\r
512 </ol>\r
513 </div>\r
514 <h2>6. About this document</h2>\r
515 <div class="sectionbody">\r
516 <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
517 </div>\r
518 <div id="footer">\r
519 <div id="footer-text">\r
520 Last updated 29-Feb-2008 04:31:59 CEST\r
521 </div>\r
522 </div>\r
523 </body>\r
524 </html>\r