Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1 | magnus | 1 | package DebPool::Config; |
2 | |||
3 | ### |
||
4 | # |
||
5 | # DebPool::Config - Module for handling config options |
||
6 | # |
||
7 | # Copyright 2003-2004 Joel Aelwyn. All rights reserved. |
||
8 | # |
||
9 | # Redistribution and use in source and binary forms, with or without |
||
10 | # modification, are permitted provided that the following conditions |
||
11 | # are met: |
||
12 | # 1. Redistributions of source code must retain the above copyright |
||
13 | # notice, this list of conditions and the following disclaimer. |
||
14 | # 2. Redistributions in binary form must reproduce the above copyright |
||
15 | # notice, this list of conditions and the following disclaimer in the |
||
16 | # documentation and/or other materials provided with the distribution. |
||
17 | # 3. Neither the name of the Author nor the names of any contributors |
||
18 | # may be used to endorse or promote products derived from this software |
||
19 | # without specific prior written permission. |
||
20 | # |
||
21 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND |
||
22 | # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
||
23 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
||
24 | # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE |
||
25 | # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
||
26 | # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
||
27 | # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
||
28 | # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
||
29 | # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
||
30 | # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
||
31 | # SUCH DAMAGE. |
||
32 | # |
||
33 | # $Id: Config.pm 38 2005-01-20 21:33:31Z joel $ |
||
34 | # |
||
35 | ### |
||
36 | |||
37 | =head1 NAME |
||
38 | |||
39 | DebPool::Config - configuration file format for debpool |
||
40 | |||
41 | =cut |
||
42 | |||
43 | =head1 SYNOPSIS |
||
44 | |||
45 | package DebPool::Config; |
||
46 | |||
47 | %Options = ( |
||
48 | 'option1' => value1, |
||
49 | 'option2' => value2, |
||
50 | ... |
||
51 | ); |
||
52 | |||
53 | 1; |
||
54 | |||
55 | =cut |
||
56 | |||
57 | =head1 DESCRIPTION |
||
58 | |||
59 | The DebPool::Config file is normally found in three places; |
||
60 | F</usr/share/debpool/Config.pm>, F</etc/debpool/Config.pm>, and |
||
61 | F<$HOME/.debpool/Config.pm> (in ascending order of precedence); |
||
62 | further locations can also be specified on the command line with the |
||
63 | '--config=<file>' option, which overrides all of these (and is, in turn, |
||
64 | overridden by any command line options). Also of note is the --nodefault |
||
65 | option, which prevents any attempt at loading the default (system and user) |
||
66 | config files. |
||
67 | |||
68 | The config files in /etc/debpool and $HOME/.debpool are not required to be |
||
69 | full Perl modules, though they must still declare a package namespace of |
||
70 | 'DebPool::Config' and return a true value. |
||
71 | |||
72 | =cut |
||
73 | |||
74 | # We use 'our', so we must have at least Perl 5.6 |
||
75 | |||
76 | require 5.006_000; |
||
77 | |||
78 | # Always good ideas. |
||
79 | |||
80 | use strict; |
||
81 | use warnings; |
||
82 | |||
83 | ### Module setup |
||
84 | |||
85 | BEGIN { |
||
86 | use Exporter (); |
||
87 | our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); |
||
88 | |||
89 | # Version checking |
||
90 | $VERSION = '0.1.5'; |
||
91 | |||
92 | @ISA = qw(Exporter); |
||
93 | |||
94 | @EXPORT = qw( |
||
95 | ); |
||
96 | |||
97 | @EXPORT_OK = qw( |
||
98 | %Options |
||
99 | %OptionDefs |
||
100 | &Clean_Options |
||
101 | &Load_Default_Configs |
||
102 | &Load_Minimal_Configs |
||
103 | &Load_File_Configs |
||
104 | &Override_Configs |
||
105 | ); |
||
106 | |||
107 | %EXPORT_TAGS = ( |
||
108 | 'functions' => [qw(&Clean_Options &Load_Default_Configs |
||
109 | &Load_Minimal_Configs &Load_File_Configs |
||
110 | &Override_Configs)], |
||
111 | 'vars' => [qw(%Options %OptionDefs)], |
||
112 | ); |
||
113 | } |
||
114 | |||
115 | ### Exported package globals |
||
116 | |||
117 | # The core of everything this package is about. |
||
118 | |||
119 | our(%Options); |
||
120 | our(%OptionDefs); |
||
121 | |||
122 | ### Non-exported package globals |
||
123 | |||
124 | # Thread-safe? What's that? Package global error value. We don't export |
||
125 | # this directly, because it would conflict with other modules. |
||
126 | |||
127 | our($Error); |
||
128 | |||
129 | ### File lexicals |
||
130 | |||
131 | # None |
||
132 | |||
133 | ### Constant functions |
||
134 | |||
135 | # None |
||
136 | |||
137 | ### Meaningful functions |
||
138 | |||
139 | # Load_Default_Configs |
||
140 | # |
||
141 | # Loads the internal default values into %Options via |
||
142 | # Load_Internal_Configs, then 'require's config files from the default |
||
143 | # locations. It would be nice if we could log errors, but we can't safely |
||
144 | # load the logging module until we have all the configs in place. Catch-22. |
||
145 | |||
146 | sub Load_Default_Configs { |
||
147 | Load_Internal_Configs(); |
||
148 | |||
149 | if (-r '/etc/debpool/Config.pm') { |
||
150 | require '/etc/debpool/Config.pm'; # System defaults |
||
151 | } |
||
152 | |||
153 | if (-r "$ENV{'HOME'}/.debpool/Config.pm") { |
||
154 | require "$ENV{'HOME'}/.debpool/Config.pm"; # User defaults |
||
155 | } |
||
156 | } |
||
157 | |||
158 | # Load_Minimal_Configs |
||
159 | # |
||
160 | # Loads only the minimum configs necessary to be able to do parsing - |
||
161 | # that is, populate %OptionDefs. However, for sanity sake in documenting |
||
162 | # things, this has a side effect of also loading %Options, so we clear it |
||
163 | # afterwards. |
||
164 | |||
165 | sub Load_Minimal_Configs { |
||
166 | Load_Internal_Configs(); |
||
167 | |||
168 | undef(%Options); |
||
169 | } |
||
170 | |||
171 | # Load_File_Configs($file) |
||
172 | # |
||
173 | # Loads configuration data from $file. We don't check for readability; if |
||
174 | # the user is insane enough to ask for a non-existant file, just die and |
||
175 | # tell them that they're stupid. Note: if this routine is called while a |
||
176 | # lockfile is held, it won't clean that up if we die. |
||
177 | |||
178 | sub Load_File_Configs { |
||
179 | require "$_[0]"; |
||
180 | } |
||
181 | |||
182 | # Override_Configs($override_hashref) |
||
183 | # |
||
184 | # Overrides current values in %Options (whatever those might be) with the |
||
185 | # values in the hash. Does not destroy unnamed values. |
||
186 | |||
187 | sub Override_Configs { |
||
188 | my($hashref) = @_; |
||
189 | my($key); |
||
190 | |||
191 | foreach $key (keys(%{$hashref})) { |
||
192 | $Options{$key} = $hashref->{$key}; |
||
193 | } |
||
194 | } |
||
195 | |||
196 | # Clean_Options() |
||
197 | # |
||
198 | # Does some cleanup of $Options for sanity sake; also generates some |
||
199 | # auto-calculated values. |
||
200 | |||
201 | sub Clean_Options { |
||
202 | # Clean up the architectures field; 'source' should always be present, |
||
203 | # 'all' should never be. Simplest way to manage this is a throwaway |
||
204 | # hash. This should maybe live somewhere else, but I'm not sure where. |
||
205 | |||
206 | my(%dummy); |
||
207 | my($dummykey); |
||
208 | my(@newarch); |
||
209 | |||
210 | foreach $dummykey (@{$Options{'archs'}}) { |
||
211 | $dummy{$dummykey} = 1; |
||
212 | } |
||
213 | |||
214 | $dummy{'all'} = undef; |
||
215 | $dummy{'source'} = 1; |
||
216 | |||
217 | foreach $dummykey (keys(%dummy)) { |
||
218 | if ($dummy{$dummykey}) { |
||
219 | push(@newarch, $dummykey); |
||
220 | } |
||
221 | } |
||
222 | |||
223 | $Options{'archs'} = \@newarch; |
||
224 | |||
225 | # Generate 'realdists' from %Options{'dists'} - these are the 'real' |
||
226 | # (non-alias) distribution values. |
||
227 | |||
228 | %dummy = (); |
||
229 | |||
230 | foreach $dummykey (values(%{$Options{'dists'}})) { |
||
231 | $dummy{$dummykey} = 1; |
||
232 | } |
||
233 | |||
234 | my(@realdists) = keys(%dummy); |
||
235 | $Options{'realdists'} = \@realdists; |
||
236 | |||
237 | # Also generate a reverse-lookup table of real -> alias; in the case |
||
238 | # of multiple aliases, the first one encountered wins (one of them has |
||
239 | # to, and making it consistant and first means you can have multiple |
||
240 | # aliases in a sensible order). |
||
241 | |||
242 | my(%reverse) = (); |
||
243 | foreach $dummykey (keys(%{$Options{'dists'}})) { |
||
244 | my($real) = $Options{'dists'}->{$dummykey}; |
||
245 | if (!defined($reverse{$real})) { |
||
246 | $reverse{$real} = $dummykey; |
||
247 | } |
||
248 | } |
||
249 | |||
250 | $Options{'reverse_dists'} = \%reverse; |
||
251 | |||
252 | # Enable releases if we have all of the pieces. |
||
253 | if (defined($Options{'release_origin'}) |
||
254 | && defined($Options{'release_label'}) && |
||
255 | defined($Options{'release_description'})) { $Options{'do_release'} = 1; |
||
256 | } else { $Options{'do_release'} = 0; } |
||
257 | |||
258 | # If rebuild-all is present, turn on various rebuild options. |
||
259 | |||
260 | if ($Options{'rebuild-all'}) { |
||
261 | $Options{'rebuild-files'} = 1; |
||
262 | $Options{'rebuild-dbs'} = 1; |
||
263 | } |
||
264 | } |
||
265 | |||
266 | # Load_Internal_Configs() |
||
267 | # |
||
268 | # Loads %Options with basic default values. |
||
269 | |||
270 | sub Load_Internal_Configs { |
||
271 | =head1 OPTIONS |
||
272 | |||
273 | =head2 File/Directory configuration |
||
274 | |||
275 | These config values determine what directories various parts of the archive |
||
276 | are put in, and what permissions those directories have, as well as the |
||
277 | default permissions for files. |
||
278 | |||
279 | NOTE: While debpool will attempt to create db_dir, dists_dir, incoming_dir, |
||
280 | installed_dir, pool_dir, and reject_dir if they do not exist, it will *not* |
||
281 | attempt to do this for archive_dir. |
||
282 | |||
283 | WARNING: If you redefine archive_dir and you want the other four entries to |
||
284 | reflect this by incorporating the new value, you *MUST* redefine them here |
||
285 | (even if you simply use the default value of 'archive_dir'/<dirname>) so |
||
286 | that they use the new definition of archive_dir. |
||
287 | |||
288 | =over 4 |
||
289 | |||
290 | =item B<archive_dir> => I<archive directory> |
||
291 | |||
292 | Base directory of the archive. This is never used directly; however, it |
||
293 | is normally used to construct relative paths for dists_dir, incoming_dir, |
||
294 | installed_dir, pool_dir, and reject_dir. |
||
295 | |||
296 | WARNING: See the section documentation for important details about |
||
297 | redefining this value. |
||
298 | |||
299 | Default value: '/var/cache/debpool' |
||
300 | |||
301 | =cut |
||
302 | |||
303 | $Options{'archive_dir'} = '/var/cache/debpool'; |
||
304 | $OptionDefs{'archive_dir'} = 'archive_dir=s'; |
||
305 | |||
306 | =item B<db_dir> => I<dists directory> |
||
307 | |||
308 | DB directory, where the database files for each distribution are kept. |
||
309 | |||
310 | Default value: "$Options{'archive_dir'}/db" |
||
311 | |||
312 | =cut |
||
313 | |||
314 | $Options{'db_dir'} = "$Options{'archive_dir'}/db"; |
||
315 | $OptionDefs{'db_dir'} = 'db_dir=s'; |
||
316 | |||
317 | =item B<db_dir_mode> = I<permissions (octal)> |
||
318 | |||
319 | Permissions for db_dir. |
||
320 | |||
321 | Default value: 0750 |
||
322 | |||
323 | =cut |
||
324 | |||
325 | $Options{'db_dir_mode'} = 0750; |
||
326 | $OptionDefs{'db_dir_mode'} = 'db_dir_mode=i'; |
||
327 | |||
328 | =item B<db_file_mode> = I<permissions (octal)> |
||
329 | |||
330 | Permissions for database files in db_dir. |
||
331 | |||
332 | Default value: 0640 |
||
333 | |||
334 | =cut |
||
335 | |||
336 | $Options{'db_file_mode'} = 0640; |
||
337 | $OptionDefs{'db_file_mode'} = 'db_file_mode=i'; |
||
338 | |||
339 | =item B<dists_dir> => I<dists directory> |
||
340 | |||
341 | Dists directory, where distribution files (F<{Packages,Sources}{,.gz}> live. |
||
342 | |||
343 | Default value: "$Options{'archive_dir'}/dists" |
||
344 | |||
345 | =cut |
||
346 | |||
347 | $Options{'dists_dir'} = "$Options{'archive_dir'}/dists"; |
||
348 | $OptionDefs{'dists_dir'} = 'dists_dir=s'; |
||
349 | |||
350 | =item B<dists_dir_mode> = I<permissions (octal)> |
||
351 | |||
352 | Permissions for dists_dir and all of it's subdirectories. |
||
353 | |||
354 | Default value: 0755 |
||
355 | |||
356 | =cut |
||
357 | |||
358 | $Options{'dists_dir_mode'} = 0755; |
||
359 | $OptionDefs{'dists_dir_mode'} = 'dists_dir_mode=i'; |
||
360 | |||
361 | =item B<dists_file_mode> = I<permissions (octal)> |
||
362 | |||
363 | Permissions for distribution files ({Packages,Sources}{,.gz}. |
||
364 | |||
365 | Default value: 0644 |
||
366 | |||
367 | =cut |
||
368 | |||
369 | $Options{'dists_file_mode'} = 0644; |
||
370 | $OptionDefs{'dists_file_mode'} = 'dists_file_mode=i'; |
||
371 | |||
372 | =item B<incoming_dir> => I<incoming directory> |
||
373 | |||
374 | Incoming directory, where new packages are uploaded. |
||
375 | |||
376 | Default value: "$Options{'archive_dir'}/incoming"; |
||
377 | |||
378 | =cut |
||
379 | |||
380 | $Options{'incoming_dir'} = "$Options{'archive_dir'}/incoming"; |
||
381 | $OptionDefs{'incoming_dir'} = 'incoming_dir=s'; |
||
382 | |||
383 | =item B<incoming_dir_mode> = I<permissions (octal)> |
||
384 | |||
385 | Permissions for incoming_dir. Should have the sticky bit set if you want a |
||
386 | system archive. |
||
387 | |||
388 | Default value: 01775 |
||
389 | |||
390 | =cut |
||
391 | |||
392 | $Options{'incoming_dir_mode'} = 01775; |
||
393 | $OptionDefs{'incoming_dir_mode'} = 'incoming_dir_mode=i'; |
||
394 | |||
395 | =item B<installed_dir> => I<installed directory> |
||
396 | |||
397 | Incoming directory, where new packages are uploaded. |
||
398 | |||
399 | Default value: "$Options{'archive_dir'}/installed"; |
||
400 | |||
401 | =cut |
||
402 | |||
403 | $Options{'installed_dir'} = "$Options{'archive_dir'}/installed"; |
||
404 | $OptionDefs{'installed_dir'} = 'installed_dir=s'; |
||
405 | |||
406 | =item B<installed_dir_mode> = I<permissions (octal)> |
||
407 | |||
408 | Permissions for installed_dir. Should have the sticky bit set if you want a |
||
409 | system archive. |
||
410 | |||
411 | Default value: 0755 |
||
412 | |||
413 | =cut |
||
414 | |||
415 | $Options{'installed_dir_mode'} = 0755; |
||
416 | $OptionDefs{'installed_dir_mode'} = 'installed_dir_mode=i'; |
||
417 | |||
418 | =item B<installed_file_mode> = I<permissions (octal)> |
||
419 | |||
420 | Permissions for installed Changes files. |
||
421 | |||
422 | Default value: 0644 |
||
423 | |||
424 | =cut |
||
425 | |||
426 | $Options{'installed_file_mode'} = 0644; |
||
427 | $OptionDefs{'installed_file_mode'} = 'installed_file_mode=i'; |
||
428 | |||
429 | =item B<pool_dir> => I<pool directory> |
||
430 | |||
431 | Pool directory where all .deb files are stored after being accepted. Normally |
||
432 | this is constructed as a relative path from archive_dir. |
||
433 | |||
434 | Default value: "$Options{'archive_dir'}/pool" |
||
435 | |||
436 | =cut |
||
437 | |||
438 | $Options{'pool_dir'} = "$Options{'archive_dir'}/pool"; |
||
439 | $OptionDefs{'pool_dir'} = 'pool_dir=s'; |
||
440 | |||
441 | =item B<pool_dir_mode> = I<permissions (octal)> |
||
442 | |||
443 | Permissions for pool_dir and all of it's subdirectories. |
||
444 | |||
445 | Default value: 0755 |
||
446 | |||
447 | =cut |
||
448 | |||
449 | $Options{'pool_dir_mode'} = 0755; |
||
450 | $OptionDefs{'pool_dir_mode'} = 'pool_dir_mode=i'; |
||
451 | |||
452 | =item B<pool_file_mode> = I<permissions (octal)> |
||
453 | |||
454 | Permissions for files installed into the pool area (orig.tar.gz, tar.gz, |
||
455 | diff.gz, dsc, deb). |
||
456 | |||
457 | Default value: 0644 |
||
458 | |||
459 | =cut |
||
460 | |||
461 | $Options{'pool_file_mode'} = 0644; |
||
462 | $OptionDefs{'pool_file_mode'} = 'pool_file_mode=i'; |
||
463 | |||
464 | =item B<reject_dir> => I<reject directory> |
||
465 | |||
466 | Reject directory, where rejected packages are placed. |
||
467 | |||
468 | Default value: "$Options{'archive_dir'}/reject" |
||
469 | |||
470 | =cut |
||
471 | |||
472 | $Options{'reject_dir'} = "$Options{'archive_dir'}/reject"; |
||
473 | $OptionDefs{'reject_dir'} = 'reject_dir=s'; |
||
474 | |||
475 | =item B<reject_dir_mode> = I<permissions (octal)> |
||
476 | |||
477 | Permissions for reject_dir. |
||
478 | |||
479 | Default value: 0750 |
||
480 | |||
481 | =cut |
||
482 | |||
483 | $Options{'reject_dir_mode'} = 0750; |
||
484 | $OptionDefs{'reject_dir_mode'} = 'reject_dir_mode=i'; |
||
485 | |||
486 | =item B<reject_file_mode> = I<permissions (octal)> |
||
487 | |||
488 | Permissions for rejected package files. |
||
489 | |||
490 | Default value: 0640 |
||
491 | |||
492 | =cut |
||
493 | |||
494 | $Options{'reject_file_mode'} = 0640; |
||
495 | $OptionDefs{'reject_file_mode'} = 'reject_file_mode=i'; |
||
496 | |||
497 | =item B<lock_file> => I<lockfile> |
||
498 | |||
499 | Location of the lockfile to use when running. |
||
500 | |||
501 | Default value: "$Options{'archive_dir'}/.lock" |
||
502 | |||
503 | =cut |
||
504 | |||
505 | $Options{'lock_file'} = "$Options{'archive_dir'}/.lock"; |
||
506 | $OptionDefs{'lock_file'} = 'lock_file=s'; |
||
507 | |||
508 | =item B<compress_dists> = I<boolean> |
||
509 | |||
510 | This determines whether or not compressed versions of the distribution |
||
511 | files (Packages.gz, Sources.gz) are generated. Note that enabling this |
||
512 | introduces a dependancy on gzip. |
||
513 | |||
514 | =cut |
||
515 | |||
516 | $Options{'compress_dists'} = 0; |
||
517 | $OptionDefs{'compress_dists'} = 'compress_dists!'; |
||
518 | |||
519 | =back |
||
520 | |||
521 | =cut |
||
522 | |||
523 | =head2 Archive configuration |
||
524 | |||
525 | These values control which distributions, components, and architectures the |
||
526 | archive will support. |
||
527 | |||
528 | =over 4 |
||
529 | |||
530 | =item B<dists> => I<hash of distribution names and codenames> |
||
531 | |||
532 | A hashref pointing to a hash with entries for all distributions we will |
||
533 | accept packages for, and what the current codename for each distribution |
||
534 | is. Note that it is acceptable for more than one distribution to point to a |
||
535 | given codename (for example, when frozen is active); however, this has some |
||
536 | strange (and non-deterministic) consequences for Release files. |
||
537 | |||
538 | Default value: |
||
539 | |||
540 | { 'stable' => 'woody', |
||
541 | 'testing' => 'sarge', |
||
542 | 'unstable' => 'sid', |
||
543 | 'experimental' => 'experimental' } |
||
544 | |||
545 | =cut |
||
546 | |||
547 | $Options{'dists'} = { |
||
548 | 'stable' => 'woody', |
||
549 | 'testing' => 'sarge', |
||
550 | 'unstable' => 'sid', |
||
551 | 'experimental' => 'experimental' |
||
552 | }; |
||
553 | $OptionDefs{'dists'} = 'dists=s%'; |
||
554 | |||
555 | =item B<virtual_dists> => I<hash of virtual distribution names and targets> |
||
556 | |||
557 | A hashref pointing to a hash with entries for all 'virtual' distributions |
||
558 | we will accept packages for, and what distribution it should be treated |
||
559 | as. It is acceptable for more than one virtual distribution to point to a |
||
560 | given target. Note that unlike 'dists' entries, symlinks pointing from the |
||
561 | virtual name to the real name will not be created, and no attempt is made |
||
562 | to use these names in reverse processes (such as Release files); however, |
||
563 | virtual distributions may target any name ("unstable") or codename ("sid") |
||
564 | which appears in the 'dists' hash. |
||
565 | |||
566 | Default value: |
||
567 | |||
568 | { |
||
569 | } |
||
570 | |||
571 | Exsample value: |
||
572 | |||
573 | { 'unstable-hostname' => 'unstable', |
||
574 | 'testing-hostname' => 'sarge', |
||
575 | } |
||
576 | |||
577 | =cut |
||
578 | |||
579 | $Options{'virtual_dists'} = { |
||
580 | }; |
||
581 | |||
582 | =item B<sections> => I<array of section names> |
||
583 | |||
584 | An arrayref pointing to an array which lists all sections we will accept |
||
585 | packages for. Typically, these will be drawn from the set 'main', |
||
586 | 'contrib', 'non-free', 'experimental', 'alien', and 'local' (at least on |
||
587 | the author's systems). |
||
588 | |||
589 | Default value: [ 'main', 'contrib', 'non-free' ] |
||
590 | |||
591 | =cut |
||
592 | |||
593 | $Options{'sections'} = [ 'main', 'contrib', 'non-free' ]; |
||
594 | $OptionDefs{'sections'} = 'sections=s@'; |
||
595 | |||
596 | =item B<archs> => I<array of architecture names> |
||
597 | |||
598 | An arrayref pointing to an array which lists all architectures we will |
||
599 | accept packages for. Note that 'source' will always be present, and 'all' |
||
600 | will be silently ignored (uploads for Arch: all will still work, but the |
||
601 | listings appear in arch-specific Packages files). |
||
602 | |||
603 | Default value: [ 'i386' ] |
||
604 | |||
605 | =back |
||
606 | |||
607 | =cut |
||
608 | |||
609 | $Options{'archs'} = [ 'i386' ]; |
||
610 | $OptionDefs{'archs'} = 'archs=s@'; |
||
611 | |||
612 | =head2 Release configuration |
||
613 | |||
614 | If all of the variables below are defined (release_origin, release_label, |
||
615 | and release_description), Release files will be generated for each |
||
616 | distribution directory. |
||
617 | |||
618 | Please note that enabling Release files will introduce a dependancy on the |
||
619 | packages 'libdigest-md5-perl' and 'libdigest-sha1-perl'. |
||
620 | |||
621 | See also: sign_release |
||
622 | |||
623 | =over 4 |
||
624 | |||
625 | =cut |
||
626 | |||
627 | =item B<release_origin> => I<origin tag> |
||
628 | |||
629 | A string to be used for the Origin tag in the Release file. |
||
630 | |||
631 | Default value: undef |
||
632 | |||
633 | =cut |
||
634 | |||
635 | $Options{'release_origin'} = undef; |
||
636 | $OptionDefs{'release_origin'} = 'release_origin=s'; |
||
637 | |||
638 | =item B<release_label> => I<label tag> |
||
639 | |||
640 | A string to be used for the Label tag in the Release file. |
||
641 | |||
642 | Default value: undef |
||
643 | |||
644 | =cut |
||
645 | |||
646 | $Options{'release_label'} = undef; |
||
647 | $OptionDefs{'release_label'} = 'release_label=s'; |
||
648 | |||
649 | =item B<release_description> => I<description tag> |
||
650 | |||
651 | A string to be used for the Description tag in the Release file. (Note that |
||
652 | this should be a single line.) |
||
653 | |||
654 | Default value: undef |
||
655 | |||
656 | =cut |
||
657 | |||
658 | $Options{'release_description'} = undef; |
||
659 | $OptionDefs{'release_description'} = 'release_description=s'; |
||
660 | |||
661 | =item B<release_noauto> = <array of NonAutomatic release names> |
||
662 | |||
663 | An array of release names which should be tagged with 'NonAutomatic: yes' |
||
664 | in their Release files. This tag will keep APT from ever automatically |
||
665 | selecting a package from that archive as an installation candidate. |
||
666 | |||
667 | Default value: [ 'experimental' ] |
||
668 | |||
669 | =cut |
||
670 | |||
671 | $Options{'release_noauto'} = [ |
||
672 | 'experimental', |
||
673 | ]; |
||
674 | |||
675 | =back |
||
676 | |||
677 | =cut |
||
678 | |||
679 | =head2 Signature configuration |
||
680 | |||
681 | Please note that enabling any of these options will cause a dependancy on |
||
682 | the 'gnupg' package. See F</usr/share/doc/debpool/README.GnuPG> for more |
||
683 | information. |
||
684 | |||
685 | =over 4 |
||
686 | |||
687 | =item B<require_sigs_debs> = I<boolean> |
||
688 | |||
689 | If true, packages will be rejected unless their package files (.deb) |
||
690 | are GPG-signed with a recognized key found one of the keyrings listed |
||
691 | in 'gpg_keyrings'. These can be signed with the tools in the 'debsigs' |
||
692 | package. |
||
693 | |||
694 | Default value: 0 (false) |
||
695 | |||
696 | See also: gpg_keyrings |
||
697 | |||
698 | =cut |
||
699 | |||
700 | $Options{'require_sigs_debs'} = 0; |
||
701 | $OptionDefs{'require_sigs_debs'} = 'require_sigs_debs!'; |
||
702 | |||
703 | =item B<require_sigs_meta> = I<boolean> |
||
704 | |||
705 | If true, packages will be rejected unless their meta-files (.changes and |
||
706 | .dsc) are GPG-signed with a recognized key found one of the keyrings listed |
||
707 | in 'gpg_keyrings'. These are the files normally signed by the 'debsign' |
||
708 | utility in devscripts package. |
||
709 | |||
710 | Default value: 0 (false) |
||
711 | |||
712 | See also: gpg_keyrings |
||
713 | |||
714 | =cut |
||
715 | |||
716 | $Options{'require_sigs_meta'} = 0; |
||
717 | $OptionDefs{'require_sigs_meta'} = 'require_sigs_meta!'; |
||
718 | |||
719 | =item B<sign_release> = I<boolean> |
||
720 | |||
721 | If true, generated Release files with be GPG-signed with the key specified |
||
722 | in 'gpg_sign_key'. |
||
723 | |||
724 | Note that this will have no effect unless 'gpg_sign_key' is also defined at |
||
725 | some point. |
||
726 | |||
727 | Default value: 0 (false) |
||
728 | |||
729 | See also: L<"Release configuration">, gpg_sign_key |
||
730 | |||
731 | =cut |
||
732 | |||
733 | $Options{'sign_release'} = 0; |
||
734 | $OptionDefs{'sign_release'} = 'sign_release!'; |
||
735 | |||
736 | =back |
||
737 | |||
738 | =cut |
||
739 | |||
740 | =head2 GnuPG configuration |
||
741 | |||
742 | These values will only be used if the use of GnuPG is triggered in some |
||
743 | fashion (such as any of the values in L<"Signature configuration"> being |
||
744 | enabled) , and thus do not (in themselves) trigger a dependancy on GnuPG. |
||
745 | Please see F</usr/share/doc/debpool/README.GnuPG> for more information. |
||
746 | |||
747 | =over 4 |
||
748 | |||
749 | =item B<gpg_bin> = I<GnuPG binary> |
||
750 | |||
751 | This is used to specify the GnuPG binary to run. |
||
752 | |||
753 | Default value: '/usr/bin/gpg' |
||
754 | |||
755 | =cut |
||
756 | |||
757 | $Options{'gpg_bin'} = '/usr/bin/gpg'; |
||
758 | $OptionDefs{'gpg_bin'} = 'gpg_bin=s'; |
||
759 | |||
760 | =item B<gpg_home> = I<GnuPG homedir> |
||
761 | |||
762 | This is used to specify the GnuPG homedir (via the --homedir option). |
||
763 | |||
764 | Default value: '/home/user/.gnupg' |
||
765 | |||
766 | =cut |
||
767 | |||
768 | $Options{'gpg_home'} = '/home/user/.gnupg'; |
||
769 | $OptionDefs{'gpg_home'} = 'gpg_home=s'; |
||
770 | |||
771 | =item B<gpg_keyrings> = I<array of keyring filenames> |
||
772 | |||
773 | An arrayref pointing to an array which lists all of the GPG keyrings that |
||
774 | hold keys for approved uploaders. Note that this will have no effect unless |
||
775 | at least one of 'require_sigs_debs' or 'require_sigs_meta' is enabled. |
||
776 | |||
777 | Default value: [ 'uploaders.gpg' ] |
||
778 | |||
779 | See also: require_sigs_debs, require_sigs_meta |
||
780 | |||
781 | =cut |
||
782 | |||
783 | $Options{'gpg_keyrings'} = [ 'uploaders.gpg' ]; |
||
784 | $OptionDefs{'gpg_keyrings'} = 'gpg_keyrings=s@'; |
||
785 | |||
786 | =item B<gpg_sign_key> = I<signature keyID> |
||
787 | |||
788 | A string which contains the ID of the key which we will sign Release files |
||
789 | with. Note that this will have no effect unless 'sign_release' is true. |
||
790 | |||
791 | Default value: undef |
||
792 | |||
793 | See also: sign_release |
||
794 | |||
795 | =cut |
||
796 | |||
797 | $Options{'gpg_sign_key'} = undef; |
||
798 | $OptionDefs{'gpg_sign_key'} = 'gpg_sign_key=s'; |
||
799 | |||
800 | =item B<gpg_passfile> = I<passphrase file> |
||
801 | |||
802 | This specifies the name of the file from which we read the GnuPG passphrase |
||
803 | for the key listed in gpg_sign_key. Note that it will have no effect unless |
||
804 | 'sign_release' is true and 'gpg_sign_key' is defined. |
||
805 | |||
806 | Default value: '/home/user/.gnupg/passphrase'; |
||
807 | |||
808 | See also: sign_release, gpg_sign_key |
||
809 | |||
810 | =cut |
||
811 | |||
812 | $Options{'gpg_passfile'} = '/home/user/.gnupg/passphrase'; |
||
813 | $OptionDefs{'gpg_passfile'} = 'gpg_passfile=s'; |
||
814 | |||
815 | =back |
||
816 | |||
817 | =head2 Logging configuration |
||
818 | |||
819 | These are values which control the logging system. |
||
820 | |||
821 | =over 4 |
||
822 | |||
823 | =item B<log_file> = I<filename> |
||
824 | |||
825 | If this option is defined, logging output will be sent to the filename |
||
826 | specified. Note that an undefined value is considered an explicit request |
||
827 | to log nothing. |
||
828 | |||
829 | =cut |
||
830 | |||
831 | $Options{'log_file'} = '/home/user/.debpool/DebPool.log'; |
||
832 | $OptionDefs{'log_file'} = 'log_file=s'; |
||
833 | |||
834 | =head2 Misc. configuration |
||
835 | |||
836 | These are values which don't particularly fit into any of the other |
||
837 | sections. |
||
838 | |||
839 | =over 4 |
||
840 | |||
841 | =item B<daemon> = I<boolean> |
||
842 | |||
843 | This determines whether debpool runs as a daemon (never exiting except on |
||
844 | fatal errors, rescanning the Incoming directory periodically), or on a |
||
845 | single-run basis. True values cause debpool to run as a daemon. |
||
846 | |||
847 | Default value: 0 (false) |
||
848 | |||
849 | =cut |
||
850 | |||
851 | $Options{'daemon'} = 0; |
||
852 | $OptionDefs{'daemon'} = 'daemon!'; |
||
853 | |||
854 | =item B<sleep> = I<delay> |
||
855 | |||
856 | This option determines how long the daemon sleeps for, between each |
||
857 | processing run. Note that signals (such as SIGHUP, SIGINT, or SIGTERM) |
||
858 | will force the daemon to wake up before this expires, so don't worry about |
||
859 | setting it too long. |
||
860 | |||
861 | Default value: 300 (5 minutes) |
||
862 | |||
863 | =cut |
||
864 | |||
865 | $Options{'sleep'} = 300; |
||
866 | $OptionDefs{'sleep'} = 'sleep=i'; |
||
867 | |||
868 | =item B<rollback> = I<boolean> |
||
869 | |||
870 | This determines whether older packages in the incoming queue are allowed |
||
871 | to replace newer versions already in the archive (roll back the archive |
||
872 | version). |
||
873 | |||
874 | Default value: 0 (false) |
||
875 | |||
876 | =cut |
||
877 | |||
878 | $Options{'rollback'} = 0; |
||
879 | $OptionDefs{'rollback'} = 'rollback!'; |
||
880 | |||
881 | =item B<rebuild-files> = I<boolean> |
||
882 | |||
883 | This option can be set in configfiles, but is more commonly used from the |
||
884 | commandline; if set, it forces all of the distribution files (Packages and |
||
885 | Sources) to be rebuilt, whether or not they need it. This should almost |
||
886 | never be used in conjunction with the daemon option. |
||
887 | |||
888 | Default value: 0 (false) |
||
889 | |||
890 | =cut |
||
891 | |||
892 | $Options{'rebuild-files'} = 0; |
||
893 | $OptionDefs{'rebuild-files'} = 'rebuild-files!'; |
||
894 | |||
895 | =item B<rebuild-dbs> = I<boolean> |
||
896 | |||
897 | This option should not be set in configfiles, only used from the |
||
898 | commandline; if set, it forces all of the metadata files to be rebuilt from |
||
899 | scratch. It should, of course, also not be used with the daemon option. |
||
900 | |||
901 | WARNING: This feature is not yet implemented, and will (silently) fail to |
||
902 | do anything, at this time. It will be implemented in a future version. |
||
903 | |||
904 | Default value: 0 (false) |
||
905 | |||
906 | =cut |
||
907 | |||
908 | $Options{'rebuild-dbs'} = 0; |
||
909 | $OptionDefs{'rebuild-dbs'} = 'rebuild-dbs!'; |
||
910 | |||
911 | =item B<rebuild-all> = I<boolean> |
||
912 | |||
913 | This option should not be set in configfiles, only used from the |
||
914 | commandline; if set, it is equivalent to turning on all other rebuild |
||
915 | options (currently --rebuild-files and --rebuild-dbs). |
||
916 | |||
917 | WARNING: This feature depends on rebuild-dbs, which is not yet implemented; |
||
918 | only the --rebuild-files section will be triggered. |
||
919 | |||
920 | Default value: 0 (false) |
||
921 | |||
922 | =cut |
||
923 | |||
924 | $Options{'rebuild-all'} = 0; |
||
925 | $OptionDefs{'rebuild-all'} = 'rebuild-all!'; |
||
926 | |||
927 | =item B<config> = I<configfile> |
||
928 | |||
929 | This is a special option that should not be put into configfiles; it is |
||
930 | intended only for command-line use. It may be issued multiple times; each |
||
931 | time it is used, it will add the named config file to the list which |
||
932 | DebPool will load (later config files override earlier ones, in case of any |
||
933 | conflicts). |
||
934 | |||
935 | Default value: N/A |
||
936 | |||
937 | =back |
||
938 | |||
939 | =cut |
||
940 | } |
||
941 | |||
942 | END {} |
||
943 | |||
944 | 1; |
||
945 | |||
946 | __END__ |
||
947 | |||
948 | =head1 CAVEATS |
||
949 | |||
950 | Command line options will override all Config.pm declarations. |
||
951 | |||
952 | =cut |
||
953 | |||
954 | =head1 SEE ALSO |
||
955 | |||
956 | L<debpool(1)> |
||
957 | |||
958 | =cut |
||
959 | |||
960 | =head1 AUTHOR |
||
961 | |||
962 | Joel Baker <fenton@debian.org> |
||
963 | |||
964 | =cut |
||
965 | |||
966 | # vim:set tabstop=4 expandtab: |