Merge lp:~mvo/unattended-upgrades/whitelisting into lp:unattended-upgrades

Proposed by Michael Vogt
Status: Merged
Merged at revision: 312
Proposed branch: lp:~mvo/unattended-upgrades/whitelisting
Merge into: lp:unattended-upgrades
Diff against target: 1672 lines (+521/-456)
14 files modified
README.md (+40/-1)
debian/changelog (+33/-6)
debian/po/de.po (+23/-222)
debian/po/tr.po (+40/-0)
debian/unattended-upgrades.service (+12/-0)
po/da.po (+85/-73)
po/de.po (+84/-72)
setup.py (+1/-1)
test/test_in_chroot.py (+49/-10)
test/test_origin_pattern.py (+34/-13)
test/test_pep8.py (+5/-2)
test/test_pyflakes.py (+1/-1)
unattended-upgrade (+113/-54)
unattended-upgrade-shutdown (+1/-1)
To merge this branch: bzr merge lp:~mvo/unattended-upgrades/whitelisting
Reviewer Review Type Date Requested Status
Christopher Warner (community) Approve
unattended-upgrades-developers Pending
Review via email: mp+238398@code.launchpad.net

Description of the change

Based on lp:~cwarner/unattended-upgrades/whitelisting/ - provide a whitelist option.

To post a comment you must log in.
Revision history for this message
Christopher Warner (cwarner) wrote :

Looking good, works, covers all intended and possible use cases for the whitelisting feature with all niceties. Thanks for all your help here Michael, this should help lots of people.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'README.md'
2--- README.md 2013-05-16 08:45:15 +0000
3+++ README.md 2014-10-15 08:16:16 +0000
4@@ -42,7 +42,7 @@
5 "origin:archive".
6
7 Origins-Pattern allows you to give a list of
8-patterns to match against. For example:
9+(glob-style) patterns to match against. For example:
10 ```
11 Unattended-Upgrade::Origins-Pattern {
12 "origin=Google\, Inc.,suite=contrib";
13@@ -54,6 +54,14 @@
14 component "main". The apt-cache policy short identifiers
15 (e.g. "o" for "origin") are also supported.
16
17+If you already configure what to install via apt pinning, you can
18+simply use "origin=*", e.g.:
19+```
20+ Unattended-Upgrade::Origins-Pattern {
21+ "origin=*";
22+ };
23+```
24+
25 All operations are be logged in /var/log/unattended-upgrades/. This
26 includes the dpkg output as well.
27
28@@ -89,3 +97,34 @@
29 your needs. If you do not have this file, just create it or
30 create/edit /etc/apt/apt.conf - you can check your configuration by
31 running "apt-config dump".
32+
33+
34+Supported Options Reference
35+---------------------------
36+
37+* `Unattended-Upgrade::Package-Whitelist` - list of regular expressions
38+
39+ Only packages that match the regular expressions in this list will be
40+ marked for upgrade. By default dependencies of whitelisted packages
41+ are allowed. This can be changed to allow only ever allow whitelisted
42+ packages with the `Unattended-Upgrade::Package-Whitelist-Strict`
43+ boolean option.
44+
45+ Example:
46+ ```
47+ Unattended-Upgrade::Package-Whitelist {
48+ "bash";
49+ };
50+ ```
51+
52+* `Unattended-Upgrade::Package-Whitelist-Strict` - boolean
53+
54+ When set, allow only packages in `Unattended-Upgrade::Package-Whitelist`
55+ to be upgraded. This means that you also need to list all dependencies
56+ of a whitelisted packages, e.g. if A depends on B and only A is
57+ whitelisted, it will be held back.
58+
59+ Example:
60+ ```
61+ Unattended-Upgrade::Package-Whitelist-Strict "true";
62+ ```
63
64=== modified file 'debian/changelog'
65--- debian/changelog 2014-09-11 13:12:05 +0000
66+++ debian/changelog 2014-10-15 08:16:16 +0000
67@@ -1,8 +1,35 @@
68-unattended-upgrades (0.82.8) UNRELEASED; urgency=low
69-
70- * unattended-upgrade:
71- - use mode 0640 and root:adm for the dpkg terminal log files
72- (closes: #757438)
73+unattended-upgrades (0.82.10) unstable; urgency=medium
74+
75+ [ Helge Kreutzmann ]
76+ * Move misplaced German program translation update from debian/po/de.po to
77+ po/de.po and update debconf translation from Chris Leick, closes: #751162
78+
79+ -- Michael Vogt <mvo@debian.org> Sun, 21 Sep 2014 21:31:20 +0200
80+
81+unattended-upgrades (0.82.9) unstable; urgency=low
82+
83+ * po/da.po:
84+ - updated, thanks to Joe Dalton, closes: #754130
85+ * debian/po/tr.po:
86+ - add Turkish translation, thanks to Mert Dirik
87+ closes: #757500
88+ * unattended-upgrades:
89+ - improve docstring for adjust_candidate_versions
90+ - ignore versions with pin priority < 100 (instead of < 0),
91+ thanks to Stefano Zacchiroli
92+ - raise error if there are marked removals in the cache
93+ (as a extra precaution)
94+ * README.md:
95+ - add example for matching all upgradable packages
96+ (thanks to Paul van der Vlis for the suggestion)
97+
98+ -- Michael Vogt <mvo@debian.org> Thu, 21 Aug 2014 09:42:52 +0200
99+
100+unattended-upgrades (0.82.8) unstable; urgency=low
101+
102+ * really add unattended-upgrades.service file, thanks
103+ to Simon McVittie (closes: #745992)
104+ * pep8 fixes
105 - fix output when "dpkg --configure -a" is run to recover
106 from a unclean state
107 - log to a rotated and compressed
108@@ -13,7 +40,7 @@
109 - set /var/log/unattended-upgrades/ permissions to 0750
110 (closes: #757438). Thanks to Joey Hess
111
112- -- Michael Vogt <mvo@debian.org> Thu, 11 Sep 2014 13:26:03 +0200
113+ -- Michael Vogt <mvo@debian.org> Fri, 04 Jul 2014 16:55:19 +0200
114
115 unattended-upgrades (0.82.7) unstable; urgency=low
116
117
118=== modified file 'debian/po/de.po'
119--- debian/po/de.po 2014-03-18 15:04:13 +0000
120+++ debian/po/de.po 2014-10-15 08:16:16 +0000
121@@ -6,10 +6,10 @@
122 #
123 msgid ""
124 msgstr ""
125-"Project-Id-Version: unattended-upgrades 0.82.3\n"
126+"Project-Id-Version: unattended-upgrades 0.82.7\n"
127 "Report-Msgid-Bugs-To: unattended-upgrades@packages.debian.org\n"
128-"POT-Creation-Date: 2013-09-13 08:12+0200\n"
129-"PO-Revision-Date: 2014-03-16 13:16+0100\n"
130+"POT-Creation-Date: 2009-07-06 17:32+0100\n"
131+"PO-Revision-Date: 2014-06-04 22:34+0100\n"
132 "Last-Translator: Chris Leick <c.leick@vollbio.de>\n"
133 "Language-Team: German <debian-l10n-german@lists.debian.org>\n"
134 "Language: de\n"
135@@ -18,222 +18,23 @@
136 "Content-Transfer-Encoding: 8bit\n"
137 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
138
139-#: ../unattended-upgrade:136
140-#, c-format
141-msgid "Progress: %s %% (%s)"
142-msgstr "Fortschritt: %s %% (%s)"
143-
144-#: ../unattended-upgrade:352 ../unattended-upgrade:436
145-#: ../unattended-upgrade-shutdown:161
146-msgid "All upgrades installed"
147-msgstr "alle Upgrades installiert"
148-
149-#: ../unattended-upgrade:354 ../unattended-upgrade:428
150-msgid "Installing the upgrades failed!"
151-msgstr "Installation der Upgrades fehlgeschlagen!"
152-
153-#: ../unattended-upgrade:355 ../unattended-upgrade:429
154-#, c-format
155-msgid "error message: '%s'"
156-msgstr "Fehlermeldung: »%s«"
157-
158-#: ../unattended-upgrade:356 ../unattended-upgrade:430
159-#, c-format
160-msgid "dpkg returned a error! See '%s' for details"
161-msgstr "Dpkg gab einen Fehler zurück. Siehe »%s« für Einzelheiten"
162-
163-#: ../unattended-upgrade:685
164-msgid ""
165-"No '/usr/bin/mail' or '/usr/sbin/sendmail',can not send mail. You probably "
166-"want to install the 'mailx' package."
167-msgstr ""
168-"kein »/usr/bin/mail« oder »/usr/sbin/sendmail«, Mail kann nicht gesandt "
169-"werden. Möglicherweise möchten Sie das Paket »mailx« installieren."
170-
171-#: ../unattended-upgrade:698
172-#, c-format
173-msgid "[reboot required] unattended-upgrades result for '%s': %s"
174-msgstr "[Neustart erforderlich] Unattended-Upgrades-Ergebnis für »%s«: %s"
175-
176-#: ../unattended-upgrade:701
177-#, c-format
178-msgid "unattended-upgrades result for '%s': '%s'"
179-msgstr "Unattended-Upgrades-Ergebnis für »%s«: %s"
180-
181-#: ../unattended-upgrade:703
182-#, c-format
183-msgid ""
184-"Unattended upgrade returned: %s\n"
185-"\n"
186-msgstr ""
187-"Das unbeaufsichtigte Upgrade gab %s zurück.\n"
188-"\n"
189-
190-#: ../unattended-upgrade:706
191-msgid ""
192-"Warning: A reboot is required to complete this upgrade.\n"
193-"\n"
194-msgstr ""
195-"Warnung: Um dieses Upgrade zu komplettieren, ist ein Neustart erforderlich.\n"
196-"\n"
197-
198-#: ../unattended-upgrade:708
199-msgid "Packages that were upgraded:\n"
200-msgstr "Pakete, von denen ein Upgrade durchgeführt wurde:\n"
201-
202-#: ../unattended-upgrade:710
203-msgid "Packages that attempted to upgrade:\n"
204-msgstr "Pakete, bei denen versucht wurde, ein Upgrade durchzuführen:\n"
205-
206-#: ../unattended-upgrade:714
207-msgid "Packages with upgradable origin but kept back:\n"
208-msgstr ""
209-"Pakete, von deren Ursprung ein Upgrade durchgeführt werden kann, die aber\n"
210-"zurückgehalten werden.\n"
211-
212-#: ../unattended-upgrade:719
213-msgid "Package installation log:"
214-msgstr "Paketinstallationsprotokoll:"
215-
216-#: ../unattended-upgrade:723
217-msgid "Unattended-upgrades log:\n"
218-msgstr "Unattended-Upgrades-Protokoll:\n"
219-
220-#: ../unattended-upgrade:747
221-#, c-format
222-msgid "Writing dpkg log to '%s'"
223-msgstr "Dpkg-Protokoll wird nach »%s« geschrieben"
224-
225-#: ../unattended-upgrade:873
226-#, c-format
227-msgid "Initial blacklisted packages: %s"
228-msgstr "Pakete, die anfangs auf die schwarzen Liste standen: %s"
229-
230-#: ../unattended-upgrade:875
231-msgid "Starting unattended upgrades script"
232-msgstr "Skript für unbeaufsichtigte Upgrades wird gestartet."
233-
234-#: ../unattended-upgrade:878
235-#, c-format
236-msgid "Allowed origins are: %s"
237-msgstr "erlaubte Ursprünge sind: %s"
238-
239-#: ../unattended-upgrade:891 ../unattended-upgrade:892
240-msgid "Unclean dpkg state detected, trying to correct"
241-msgstr "unsauberer Dpkg-Status entdeckt, es wird versucht dies zu korrigieren"
242-
243-#: ../unattended-upgrade:901
244-#, c-format
245-msgid ""
246-"dpkg --configure -a output:\n"
247-"%s"
248-msgstr ""
249-"»dpkg --configure -a«-Ausgabe:\n"
250-"%s"
251-
252-#: ../unattended-upgrade:910
253-msgid "Lock could not be acquired (another package manager running?)"
254-msgstr ""
255-"Sperrung konnte nicht erreicht werden (läuft eine weitere Paketverwaltung?)"
256-
257-#: ../unattended-upgrade:912
258-msgid "Cache lock can not be acquired, exiting"
259-msgstr "Zwischenspeicher konnte nicht gesperrt werden, wird beendet"
260-
261-#: ../unattended-upgrade:919 ../unattended-upgrade:920
262-msgid "Cache has broken packages, exiting"
263-msgstr "Zwischenspeicher enthält beschädigte Pakete, wird beendet"
264-
265-#: ../unattended-upgrade:961
266-#, c-format
267-msgid "package '%s' upgradable but fails to be marked for upgrade (%s)"
268-msgstr ""
269-"Von Paket »%s« könnte ein Upgrade durchgeführt werden, es ist jedoch "
270-"fehlgeschlagen, dies für das Upgrade zu markieren (%s)"
271-
272-#: ../unattended-upgrade:982
273-#, c-format
274-msgid "GetArchives() failed: '%s'"
275-msgstr "GetArchives() fehlgeschlagen: »%s«"
276-
277-#: ../unattended-upgrade:992 ../unattended-upgrade:993
278-#, c-format
279-msgid "An error occurred: '%s'"
280-msgstr "Es ist ein Fehler aufgetreten: »%s«"
281-
282-#: ../unattended-upgrade:995 ../unattended-upgrade:997
283-#, c-format
284-msgid "The URI '%s' failed to download, aborting"
285-msgstr "Herunterladen von der URI »%s« fehlgeschlagen, wird abgebrochen"
286-
287-#: ../unattended-upgrade:1001
288-#, c-format
289-msgid "Download finished, but file '%s' not there?!?"
290-msgstr "Herunterladen beendet, aber Datei »%s« ist nicht dort!?"
291-
292-#: ../unattended-upgrade:1017 ../unattended-upgrade:1021
293-#, c-format
294-msgid "Package '%s' has conffile prompt and needs to be upgraded manually"
295-msgstr ""
296-"Das Paket »%s« hat eine Conffile-Abfrage und muss einem manuellen Upgrade "
297-"unterzogen werden."
298-
299-#: ../unattended-upgrade:1044
300-#, c-format
301-msgid "package '%s' not upgraded"
302-msgstr "Von Paket »%s« wurde kein Upgrade durchgeführt."
303-
304-#: ../unattended-upgrade:1059
305-#, c-format
306-msgid "Packages that are auto removed: '%s'"
307-msgstr "Pakete, die automatisch entfernt wurden: »%s«"
308-
309-#: ../unattended-upgrade:1068
310-msgid "No packages found that can be upgraded unattended"
311-msgstr ""
312-"Es wurden keine Pakete gefunden, von denen ein unbeaufsichtigtes Upgrade "
313-"durchgeführt werden kann."
314-
315-#: ../unattended-upgrade:1088
316-#, c-format
317-msgid "Packages that will be upgraded: %s"
318-msgstr "Pakete, von denen ein Upgrade durchgeführt wird: %s"
319-
320-#: ../unattended-upgrade:1125
321-msgid "print debug messages"
322-msgstr "Nachrichten zur Fehlersuche ausgeben"
323-
324-#: ../unattended-upgrade:1128
325-msgid "make apt/libapt print verbose debug messages"
326-msgstr "APT/LibAPT detaillierte Nachrichten zur Fehlersuche ausgeben lassen"
327-
328-#: ../unattended-upgrade:1131
329-msgid "print info messages"
330-msgstr "Informationsnachrichten ausgeben"
331-
332-#: ../unattended-upgrade:1134
333-msgid "Simulation, download but do not install"
334-msgstr "Simulation, herunterladen, aber nicht installieren"
335-
336-#: ../unattended-upgrade:1137
337-msgid "Upgrade in minimal steps (and allow interrupting with SIGINT"
338-msgstr "Upgrade in minimalen Schritten (Unterbrechung mit SIGINT erlaubt)"
339-
340-#: ../unattended-upgrade:1142
341-msgid "You need to be root to run this application"
342-msgstr "Sie müssen Root sein, um diese Anwendung auszuführen."
343-
344-#: ../unattended-upgrade-shutdown:72
345-msgid "Unattended-upgrade in progress during shutdown, sleeping for 5s"
346-msgstr ""
347-"Unattended-Upgrade läuft während des Herunterfahrens weiter, es wird fünf "
348-"Sekunden lang gewartet."
349-
350-#: ../unattended-upgrade-shutdown:125
351-msgid "Running unattended-upgrades in shutdown mode"
352-msgstr "Unattended-Upgrades im Herunterfahrmodus ausführen"
353-
354-#: ../unattended-upgrade-shutdown:153
355-#, c-format
356-msgid "Giving up on lockfile after %s delay"
357-msgstr "Sperrdatei, hier wird nach %s Verzögerung aufgegeben."
358+#. Type: boolean
359+#. Description
360+#: ../templates:2001
361+msgid "Automatically download and install stable updates?"
362+msgstr "Aktualisierungen für Stable automatisch herunterladen und installieren?"
363+
364+#. Type: boolean
365+#. Description
366+#: ../templates:2001
367+msgid ""
368+"Applying updates on a frequent basis is an important part of keeping systems "
369+"secure. By default, updates need to be applied manually using package "
370+"management tools. Alternatively, you can choose to have this system "
371+"automatically download and install security updates."
372+msgstr ""
373+"Häufige Aktualisierungen sind wichtig, um Systeme sicher zu halten. "
374+"Standardmäßig müssen Aktualisierungen manuell mittels "
375+"Paketverwaltungswerkzeugen durchgeführt werden. Alternativ können Sie "
376+"auswählen, dass dieses System Sicherheitsaktualisierungen automatisch "
377+"herunterlädt und installiert."
378
379=== added file 'debian/po/tr.po'
380--- debian/po/tr.po 1970-01-01 00:00:00 +0000
381+++ debian/po/tr.po 2014-10-15 08:16:16 +0000
382@@ -0,0 +1,40 @@
383+# Turkish translation of unattended-upgrades package
384+# Copyright (C) 2014 Mert Dirik
385+# This file is distributed under the same license as the unattended-upgrades package.
386+# Mert Dirik <mertdirik@gmail.com>, 2014.
387+#
388+msgid ""
389+msgstr ""
390+"Project-Id-Version: unattended-upgrades 0.82.8\n"
391+"Report-Msgid-Bugs-To: unattended-upgrades@packages.debian.org\n"
392+"POT-Creation-Date: 2009-07-06 17:32+0100\n"
393+"PO-Revision-Date: 2014-08-03 17:03+0200\n"
394+"Last-Translator: Mert Dirik <mertdirik@gmail.com>\n"
395+"Language-Team: Debian L10n Turkish <debian-l10n-turkish@lists.debian.org>\n"
396+"MIME-Version: 1.0\n"
397+"Content-Type: text/plain; charset=UTF-8\n"
398+"Content-Transfer-Encoding: 8bit\n"
399+"X-Generator: Poedit 1.5.4\n"
400+"Language: tr\n"
401+
402+#. Type: boolean
403+#. Description
404+#: ../templates:2001
405+msgid "Automatically download and install stable updates?"
406+msgstr ""
407+"Kararlı sürüm güncellemeleri otomatik olarak indirilsin ve kurulsun mu?"
408+
409+#. Type: boolean
410+#. Description
411+#: ../templates:2001
412+msgid ""
413+"Applying updates on a frequent basis is an important part of keeping systems "
414+"secure. By default, updates need to be applied manually using package "
415+"management tools. Alternatively, you can choose to have this system "
416+"automatically download and install security updates."
417+msgstr ""
418+"Sisteminiz için yayımlanan güncellemeleri sık sık uygulamak sisteminizi "
419+"güvenli tutmanın önemli bir parçasıdır. Öntanımlı durumda güncellemeleri "
420+"paket yönetim araçlarını kullanarak elle uygulamanız gerekir. Bunun yerine, "
421+"bu sistemi güvenlik güncellemelerini otomatik olarak indirecek ve kuracak "
422+"şekilde ayarlayabilirsiniz."
423
424=== added file 'debian/unattended-upgrades.service'
425--- debian/unattended-upgrades.service 1970-01-01 00:00:00 +0000
426+++ debian/unattended-upgrades.service 2014-10-15 08:16:16 +0000
427@@ -0,0 +1,12 @@
428+[Unit]
429+Description=Unattended Upgrades
430+DefaultDependencies=no
431+Before=shutdown.target reboot.target halt.target
432+Documentation=man:unattended-upgrade(8)
433+
434+[Service]
435+Type=oneshot
436+ExecStart=/usr/share/unattended-upgrades/unattended-upgrade-shutdown
437+
438+[Install]
439+WantedBy=shutdown.target
440
441=== modified file 'po/da.po'
442--- po/da.po 2012-06-18 07:22:43 +0000
443+++ po/da.po 2014-10-15 08:16:16 +0000
444@@ -1,14 +1,14 @@
445 # Danish translation unattended-upgrades.
446-# Copyright (C) 2012 unattended-upgrades & nedenstående oversættere.
447+# Copyright (C) 2014 unattended-upgrades & nedenstående oversættere.
448 # This file is distributed under the same license as the unattended-upgrades package.
449-# Joe Hansen <joedalton2@yahoo.dk>, 2012.
450+# Joe Hansen <joedalton2@yahoo.dk>, 2012, 2014.
451 #
452 msgid ""
453 msgstr ""
454 "Project-Id-Version: unattended-upgrades\n"
455 "Report-Msgid-Bugs-To: \n"
456-"POT-Creation-Date: 2011-07-19 15:24+0200\n"
457-"PO-Revision-Date: 2012-06-16 23:51+0200\n"
458+"POT-Creation-Date: 2013-09-13 08:12+0200\n"
459+"PO-Revision-Date: 2014-07-07 23:51+0200\n"
460 "Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
461 "Language-Team: Danish <debian-l10n-danish@lists.debian.org>\n"
462 "Language: da\n"
463@@ -16,53 +16,49 @@
464 "Content-Type: text/plain; charset=UTF-8\n"
465 "Content-Transfer-Encoding: 8bit\n"
466
467-#: ../unattended-upgrade:72
468+#: ../unattended-upgrade:136
469 #, c-format
470 msgid "Progress: %s %% (%s)"
471 msgstr "Status: %s %% (%s)"
472
473-#: ../unattended-upgrade:190 ../unattended-upgrade:254
474+#: ../unattended-upgrade:352 ../unattended-upgrade:436
475+#: ../unattended-upgrade-shutdown:161
476 msgid "All upgrades installed"
477 msgstr "Alle opgraderinger er installeret"
478
479-#: ../unattended-upgrade:192 ../unattended-upgrade:246
480+#: ../unattended-upgrade:354 ../unattended-upgrade:428
481 msgid "Installing the upgrades failed!"
482 msgstr "Installation af opgraderingerne mislykkedes!"
483
484-#: ../unattended-upgrade:193 ../unattended-upgrade:247
485+#: ../unattended-upgrade:355 ../unattended-upgrade:429
486 #, c-format
487 msgid "error message: '%s'"
488 msgstr "fejlbesked: »%s«"
489
490-#: ../unattended-upgrade:194 ../unattended-upgrade:248
491+#: ../unattended-upgrade:356 ../unattended-upgrade:430
492 #, c-format
493 msgid "dpkg returned a error! See '%s' for details"
494 msgstr "dpkg returnerede en fejl! Se »%s« for detaljer"
495
496-#: ../unattended-upgrade:231
497-#, c-format
498-msgid "Progress: %s %%: (%s)"
499-msgstr "Status: %s %%: (%s)"
500-
501-#: ../unattended-upgrade:412
502+#: ../unattended-upgrade:685
503 msgid ""
504-"No '/usr/bin/mail', can not send mail. You probably want to install the "
505-"'mailx' package."
506+"No '/usr/bin/mail' or '/usr/sbin/sendmail',can not send mail. You probably "
507+"want to install the 'mailx' package."
508 msgstr ""
509-"Ingen »/usr/bin/mail«, kan ikke sende post. Du skal sikkert installere "
510-"pakken »mailx«."
511-
512-#: ../unattended-upgrade:423
513-#, c-format
514-msgid "[reboot required] unattended-upgrades result for '%s'"
515-msgstr "[genstart krævet] unattended-upgrades resultat for »%s«"
516-
517-#: ../unattended-upgrade:425
518-#, c-format
519-msgid "unattended-upgrades result for '%s'"
520-msgstr "unattended-upgrades resultat for »%s«"
521-
522-#: ../unattended-upgrade:428
523+"Ingen »/usr/bin/mail« eller »/usr/sbin/sendmail« kan sende post. Du skal "
524+"sikkert installere pakken »mailx«."
525+
526+#: ../unattended-upgrade:698
527+#, c-format
528+msgid "[reboot required] unattended-upgrades result for '%s': %s"
529+msgstr "[genstart krævet] unattended-upgrades resultat for »%s: %s«"
530+
531+#: ../unattended-upgrade:701
532+#, c-format
533+msgid "unattended-upgrades result for '%s': '%s'"
534+msgstr "unattended-upgrades resultat for »%s«: »%s«"
535+
536+#: ../unattended-upgrade:703
537 #, c-format
538 msgid ""
539 "Unattended upgrade returned: %s\n"
540@@ -71,7 +67,7 @@
541 "Unattended upgrade returnerede: %s\n"
542 "\n"
543
544-#: ../unattended-upgrade:430
545+#: ../unattended-upgrade:706
546 msgid ""
547 "Warning: A reboot is required to complete this upgrade.\n"
548 "\n"
549@@ -79,41 +75,50 @@
550 "Advarsel: En genstart er krævet for at færdiggøre denne opgradering.\n"
551 "\n"
552
553-#: ../unattended-upgrade:431
554-msgid "Packages that are upgraded:\n"
555-msgstr "Pakker som opgraderes:\n"
556-
557-#: ../unattended-upgrade:435
558+#: ../unattended-upgrade:708
559+msgid "Packages that were upgraded:\n"
560+msgstr "Pakker som blev opgraderet:\n"
561+
562+#: ../unattended-upgrade:710
563+msgid "Packages that attempted to upgrade:\n"
564+msgstr "Pakker som forsøgte at opgradere:\n"
565+
566+#: ../unattended-upgrade:714
567 msgid "Packages with upgradable origin but kept back:\n"
568 msgstr "Pakker med opgraderbar oprindelse men holdt tilbage:\n"
569
570-#: ../unattended-upgrade:439
571+#: ../unattended-upgrade:719
572 msgid "Package installation log:"
573 msgstr "Log for pakkeinstallation:"
574
575-#: ../unattended-upgrade:442
576+#: ../unattended-upgrade:723
577 msgid "Unattended-upgrades log:\n"
578 msgstr "Log for unattended-upgrades:\n"
579
580-#: ../unattended-upgrade:513
581+#: ../unattended-upgrade:747
582+#, c-format
583+msgid "Writing dpkg log to '%s'"
584+msgstr "Skriver dpkg-log til »%s«"
585+
586+#: ../unattended-upgrade:873
587 #, c-format
588 msgid "Initial blacklisted packages: %s"
589 msgstr "Oprindelig sortlistede pakker: %s"
590
591-#: ../unattended-upgrade:514
592+#: ../unattended-upgrade:875
593 msgid "Starting unattended upgrades script"
594 msgstr "Starter skript for unattended upgrades"
595
596-#: ../unattended-upgrade:517
597+#: ../unattended-upgrade:878
598 #, c-format
599 msgid "Allowed origins are: %s"
600 msgstr "Tilladte oprindelser er: %s"
601
602-#: ../unattended-upgrade:528 ../unattended-upgrade:529
603+#: ../unattended-upgrade:891 ../unattended-upgrade:892
604 msgid "Unclean dpkg state detected, trying to correct"
605 msgstr "Uklar dpkg-tilstand detekteret, forsøger at rette"
606
607-#: ../unattended-upgrade:538
608+#: ../unattended-upgrade:901
609 #, c-format
610 msgid ""
611 "dpkg --configure -a output:\n"
612@@ -122,95 +127,102 @@
613 "dpkg --configure -a output:\n"
614 "%s"
615
616-#: ../unattended-upgrade:546
617+#: ../unattended-upgrade:910
618 msgid "Lock could not be acquired (another package manager running?)"
619 msgstr "Lås kunne ikke indhentes (kører en anden pakkehåndtering?)"
620
621-#: ../unattended-upgrade:548
622+#: ../unattended-upgrade:912
623 msgid "Cache lock can not be acquired, exiting"
624 msgstr "Lås for mellemlager kan ikke indhentes, afslutter"
625
626-#: ../unattended-upgrade:554 ../unattended-upgrade:555
627+#: ../unattended-upgrade:919 ../unattended-upgrade:920
628 msgid "Cache has broken packages, exiting"
629 msgstr "Mellemlager har ødelagte pakker, afslutter"
630
631-#: ../unattended-upgrade:581
632+#: ../unattended-upgrade:961
633 #, c-format
634 msgid "package '%s' upgradable but fails to be marked for upgrade (%s)"
635 msgstr "pakke »%s« kan opgraderes men fejler i markering for opgradering (%s)"
636
637-#: ../unattended-upgrade:601
638+#: ../unattended-upgrade:982
639 #, c-format
640 msgid "GetArchives() failed: '%s'"
641 msgstr "GetArchives() mislykkedes: »%s«"
642
643-#: ../unattended-upgrade:610 ../unattended-upgrade:611
644+#: ../unattended-upgrade:992 ../unattended-upgrade:993
645 #, c-format
646-msgid "An error ocured: '%s'"
647+msgid "An error occurred: '%s'"
648 msgstr "Der opstod en fejl: »%s«"
649
650-#: ../unattended-upgrade:613 ../unattended-upgrade:614
651+#: ../unattended-upgrade:995 ../unattended-upgrade:997
652 #, c-format
653 msgid "The URI '%s' failed to download, aborting"
654 msgstr "Der kunne ikke hentes fra adressen »%s«, afbryder"
655
656-#: ../unattended-upgrade:617
657+#: ../unattended-upgrade:1001
658 #, c-format
659 msgid "Download finished, but file '%s' not there?!?"
660 msgstr "Hentning færdig, men filen »%s« var der ikke?!?"
661
662-#: ../unattended-upgrade:626
663+#: ../unattended-upgrade:1017 ../unattended-upgrade:1021
664 #, c-format
665 msgid "Package '%s' has conffile prompt and needs to be upgraded manually"
666 msgstr ""
667 "Pakke »%s« bliver spurgt om oplysninger fra konfigurationsfilen og skal "
668 "opgraderes manuelt"
669
670-#: ../unattended-upgrade:648
671+#: ../unattended-upgrade:1044
672 #, c-format
673 msgid "package '%s' not upgraded"
674 msgstr "pakke »%s« blev ikke opgraderet"
675
676-#: ../unattended-upgrade:662
677+#: ../unattended-upgrade:1059
678 #, c-format
679 msgid "Packages that are auto removed: '%s'"
680 msgstr "Pakker som automatisk fjernes: »%s«"
681
682-#: ../unattended-upgrade:669
683+#: ../unattended-upgrade:1068
684 msgid "No packages found that can be upgraded unattended"
685 msgstr "Ingen pakker fundet som kan opgraderes uden ledsager"
686
687-#: ../unattended-upgrade:679
688-#, c-format
689-msgid "Packages that are upgraded: %s"
690-msgstr "Pakker som blev opgraderet: %s"
691-
692-#: ../unattended-upgrade:693
693-#, c-format
694-msgid "Writing dpkg log to '%s'"
695-msgstr "Skriver dpkg-log til »%s«"
696-
697-#: ../unattended-upgrade:744
698+#: ../unattended-upgrade:1088
699+#, c-format
700+msgid "Packages that will be upgraded: %s"
701+msgstr "Pakker som vil blive opgraderet: %s"
702+
703+#: ../unattended-upgrade:1125
704 msgid "print debug messages"
705 msgstr "vis fejlsøgningsbeskeder"
706
707-#: ../unattended-upgrade:747
708+#: ../unattended-upgrade:1128
709+msgid "make apt/libapt print verbose debug messages"
710+msgstr "lad apt/libapt vise uddybende fejlsøgningsbeskeder"
711+
712+#: ../unattended-upgrade:1131
713+msgid "print info messages"
714+msgstr "vis informationsbeskeder"
715+
716+#: ../unattended-upgrade:1134
717 msgid "Simulation, download but do not install"
718 msgstr "Simulation, hent men installer ikke"
719
720-#: ../unattended-upgrade:750
721+#: ../unattended-upgrade:1137
722 msgid "Upgrade in minimal steps (and allow interrupting with SIGINT"
723 msgstr "Opgrader i små trin (og tillad afbrydelse med SIGINT)"
724
725-#: ../unattended-upgrade:754
726+#: ../unattended-upgrade:1142
727 msgid "You need to be root to run this application"
728 msgstr "Du skal være administrator (root) for at køre dette program"
729
730-#: ../unattended-upgrade-shutdown:95
731+#: ../unattended-upgrade-shutdown:72
732 msgid "Unattended-upgrade in progress during shutdown, sleeping for 5s"
733 msgstr "Unattended-upgrade i gang under nedlukning, sover for 5 sekunder"
734
735-#: ../unattended-upgrade-shutdown:106
736+#: ../unattended-upgrade-shutdown:125
737+msgid "Running unattended-upgrades in shutdown mode"
738+msgstr "Kører unattended-upgrades i nedlukningstilstand"
739+
740+#: ../unattended-upgrade-shutdown:153
741 #, c-format
742 msgid "Giving up on lockfile after %s delay"
743 msgstr "Opgiver låsefilen efter %s forsinkelse"
744
745=== modified file 'po/de.po'
746--- po/de.po 2012-06-20 07:02:22 +0000
747+++ po/de.po 2014-10-15 08:16:16 +0000
748@@ -1,15 +1,15 @@
749 # Translation of unattended-upgrades to German.
750-# Copyright (C) .
751+# Copyright (C) 2005-2009 Canonical Ltd.
752 # This file is distributed under the same license as the
753 # unattended-upgrades package.
754-# Copyright (C) of this file 2012 Chris Leick.
755+# Copyright (C) of this file 2012-2014 Chris Leick.
756 #
757 msgid ""
758 msgstr ""
759-"Project-Id-Version: unattended-upgrades 0.77\n"
760+"Project-Id-Version: unattended-upgrades 0.82.3\n"
761 "Report-Msgid-Bugs-To: unattended-upgrades@packages.debian.org\n"
762-"POT-Creation-Date: 2011-07-19 15:24+0200\n"
763-"PO-Revision-Date: 2012-06-14 21:28+0200\n"
764+"POT-Creation-Date: 2013-09-13 08:12+0200\n"
765+"PO-Revision-Date: 2014-03-16 13:16+0100\n"
766 "Last-Translator: Chris Leick <c.leick@vollbio.de>\n"
767 "Language-Team: German <debian-l10n-german@lists.debian.org>\n"
768 "Language: de\n"
769@@ -18,53 +18,49 @@
770 "Content-Transfer-Encoding: 8bit\n"
771 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
772
773-#: ../unattended-upgrade:72
774+#: ../unattended-upgrade:136
775 #, c-format
776 msgid "Progress: %s %% (%s)"
777 msgstr "Fortschritt: %s %% (%s)"
778
779-#: ../unattended-upgrade:190 ../unattended-upgrade:254
780+#: ../unattended-upgrade:352 ../unattended-upgrade:436
781+#: ../unattended-upgrade-shutdown:161
782 msgid "All upgrades installed"
783 msgstr "alle Upgrades installiert"
784
785-#: ../unattended-upgrade:192 ../unattended-upgrade:246
786+#: ../unattended-upgrade:354 ../unattended-upgrade:428
787 msgid "Installing the upgrades failed!"
788 msgstr "Installation der Upgrades fehlgeschlagen!"
789
790-#: ../unattended-upgrade:193 ../unattended-upgrade:247
791+#: ../unattended-upgrade:355 ../unattended-upgrade:429
792 #, c-format
793 msgid "error message: '%s'"
794 msgstr "Fehlermeldung: »%s«"
795
796-#: ../unattended-upgrade:194 ../unattended-upgrade:248
797+#: ../unattended-upgrade:356 ../unattended-upgrade:430
798 #, c-format
799 msgid "dpkg returned a error! See '%s' for details"
800 msgstr "Dpkg gab einen Fehler zurück. Siehe »%s« für Einzelheiten"
801
802-#: ../unattended-upgrade:231
803-#, c-format
804-msgid "Progress: %s %%: (%s)"
805-msgstr "Fortschritt: %s %%: (%s)"
806-
807-#: ../unattended-upgrade:412
808+#: ../unattended-upgrade:685
809 msgid ""
810-"No '/usr/bin/mail', can not send mail. You probably want to install the "
811-"'mailx' package."
812+"No '/usr/bin/mail' or '/usr/sbin/sendmail',can not send mail. You probably "
813+"want to install the 'mailx' package."
814 msgstr ""
815-"kein »/usr/bin/mail«, Mail kann nicht gesandt werden. Möglicherweise möchten "
816-"Sie das Paket »mailx« installieren."
817-
818-#: ../unattended-upgrade:423
819-#, c-format
820-msgid "[reboot required] unattended-upgrades result for '%s'"
821-msgstr "[Neustart erforderlich] Unattended-Upgrades-Ergebnis für »%s«"
822-
823-#: ../unattended-upgrade:425
824-#, c-format
825-msgid "unattended-upgrades result for '%s'"
826-msgstr "Unattended-Upgrades-Ergebnis für »%s«"
827-
828-#: ../unattended-upgrade:428
829+"kein »/usr/bin/mail« oder »/usr/sbin/sendmail«, Mail kann nicht gesandt "
830+"werden. Möglicherweise möchten Sie das Paket »mailx« installieren."
831+
832+#: ../unattended-upgrade:698
833+#, c-format
834+msgid "[reboot required] unattended-upgrades result for '%s': %s"
835+msgstr "[Neustart erforderlich] Unattended-Upgrades-Ergebnis für »%s«: %s"
836+
837+#: ../unattended-upgrade:701
838+#, c-format
839+msgid "unattended-upgrades result for '%s': '%s'"
840+msgstr "Unattended-Upgrades-Ergebnis für »%s«: %s"
841+
842+#: ../unattended-upgrade:703
843 #, c-format
844 msgid ""
845 "Unattended upgrade returned: %s\n"
846@@ -73,7 +69,7 @@
847 "Das unbeaufsichtigte Upgrade gab %s zurück.\n"
848 "\n"
849
850-#: ../unattended-upgrade:430
851+#: ../unattended-upgrade:706
852 msgid ""
853 "Warning: A reboot is required to complete this upgrade.\n"
854 "\n"
855@@ -81,43 +77,52 @@
856 "Warnung: Um dieses Upgrade zu komplettieren, ist ein Neustart erforderlich.\n"
857 "\n"
858
859-#: ../unattended-upgrade:431
860-msgid "Packages that are upgraded:\n"
861+#: ../unattended-upgrade:708
862+msgid "Packages that were upgraded:\n"
863 msgstr "Pakete, von denen ein Upgrade durchgeführt wurde:\n"
864
865-#: ../unattended-upgrade:435
866+#: ../unattended-upgrade:710
867+msgid "Packages that attempted to upgrade:\n"
868+msgstr "Pakete, bei denen versucht wurde, ein Upgrade durchzuführen:\n"
869+
870+#: ../unattended-upgrade:714
871 msgid "Packages with upgradable origin but kept back:\n"
872 msgstr ""
873 "Pakete, von deren Ursprung ein Upgrade durchgeführt werden kann, die aber\n"
874 "zurückgehalten werden.\n"
875
876-#: ../unattended-upgrade:439
877+#: ../unattended-upgrade:719
878 msgid "Package installation log:"
879 msgstr "Paketinstallationsprotokoll:"
880
881-#: ../unattended-upgrade:442
882+#: ../unattended-upgrade:723
883 msgid "Unattended-upgrades log:\n"
884 msgstr "Unattended-Upgrades-Protokoll:\n"
885
886-#: ../unattended-upgrade:513
887+#: ../unattended-upgrade:747
888+#, c-format
889+msgid "Writing dpkg log to '%s'"
890+msgstr "Dpkg-Protokoll wird nach »%s« geschrieben"
891+
892+#: ../unattended-upgrade:873
893 #, c-format
894 msgid "Initial blacklisted packages: %s"
895 msgstr "Pakete, die anfangs auf die schwarzen Liste standen: %s"
896
897-#: ../unattended-upgrade:514
898+#: ../unattended-upgrade:875
899 msgid "Starting unattended upgrades script"
900 msgstr "Skript für unbeaufsichtigte Upgrades wird gestartet."
901
902-#: ../unattended-upgrade:517
903+#: ../unattended-upgrade:878
904 #, c-format
905 msgid "Allowed origins are: %s"
906 msgstr "erlaubte Ursprünge sind: %s"
907
908-#: ../unattended-upgrade:528 ../unattended-upgrade:529
909+#: ../unattended-upgrade:891 ../unattended-upgrade:892
910 msgid "Unclean dpkg state detected, trying to correct"
911 msgstr "unsauberer Dpkg-Status entdeckt, es wird versucht dies zu korrigieren"
912
913-#: ../unattended-upgrade:538
914+#: ../unattended-upgrade:901
915 #, c-format
916 msgid ""
917 "dpkg --configure -a output:\n"
918@@ -126,102 +131,109 @@
919 "»dpkg --configure -a«-Ausgabe:\n"
920 "%s"
921
922-#: ../unattended-upgrade:546
923+#: ../unattended-upgrade:910
924 msgid "Lock could not be acquired (another package manager running?)"
925 msgstr ""
926 "Sperrung konnte nicht erreicht werden (läuft eine weitere Paketverwaltung?)"
927
928-#: ../unattended-upgrade:548
929+#: ../unattended-upgrade:912
930 msgid "Cache lock can not be acquired, exiting"
931 msgstr "Zwischenspeicher konnte nicht gesperrt werden, wird beendet"
932
933-#: ../unattended-upgrade:554 ../unattended-upgrade:555
934+#: ../unattended-upgrade:919 ../unattended-upgrade:920
935 msgid "Cache has broken packages, exiting"
936 msgstr "Zwischenspeicher enthält beschädigte Pakete, wird beendet"
937
938-#: ../unattended-upgrade:581
939+#: ../unattended-upgrade:961
940 #, c-format
941 msgid "package '%s' upgradable but fails to be marked for upgrade (%s)"
942 msgstr ""
943 "Von Paket »%s« könnte ein Upgrade durchgeführt werden, es ist jedoch "
944 "fehlgeschlagen, dies für das Upgrade zu markieren (%s)"
945
946-#: ../unattended-upgrade:601
947+#: ../unattended-upgrade:982
948 #, c-format
949 msgid "GetArchives() failed: '%s'"
950 msgstr "GetArchives() fehlgeschlagen: »%s«"
951
952-#: ../unattended-upgrade:610 ../unattended-upgrade:611
953+#: ../unattended-upgrade:992 ../unattended-upgrade:993
954 #, c-format
955-msgid "An error ocured: '%s'"
956+msgid "An error occurred: '%s'"
957 msgstr "Es ist ein Fehler aufgetreten: »%s«"
958
959-#: ../unattended-upgrade:613 ../unattended-upgrade:614
960+#: ../unattended-upgrade:995 ../unattended-upgrade:997
961 #, c-format
962 msgid "The URI '%s' failed to download, aborting"
963 msgstr "Herunterladen von der URI »%s« fehlgeschlagen, wird abgebrochen"
964
965-#: ../unattended-upgrade:617
966+#: ../unattended-upgrade:1001
967 #, c-format
968 msgid "Download finished, but file '%s' not there?!?"
969 msgstr "Herunterladen beendet, aber Datei »%s« ist nicht dort!?"
970
971-#: ../unattended-upgrade:626
972+#: ../unattended-upgrade:1017 ../unattended-upgrade:1021
973 #, c-format
974 msgid "Package '%s' has conffile prompt and needs to be upgraded manually"
975 msgstr ""
976 "Das Paket »%s« hat eine Conffile-Abfrage und muss einem manuellen Upgrade "
977 "unterzogen werden."
978
979-#: ../unattended-upgrade:648
980+#: ../unattended-upgrade:1044
981 #, c-format
982 msgid "package '%s' not upgraded"
983 msgstr "Von Paket »%s« wurde kein Upgrade durchgeführt."
984
985-#: ../unattended-upgrade:662
986+#: ../unattended-upgrade:1059
987 #, c-format
988 msgid "Packages that are auto removed: '%s'"
989 msgstr "Pakete, die automatisch entfernt wurden: »%s«"
990
991-#: ../unattended-upgrade:669
992+#: ../unattended-upgrade:1068
993 msgid "No packages found that can be upgraded unattended"
994 msgstr ""
995 "Es wurden keine Pakete gefunden, von denen ein unbeaufsichtigtes Upgrade "
996 "durchgeführt werden kann."
997
998-#: ../unattended-upgrade:679
999-#, c-format
1000-msgid "Packages that are upgraded: %s"
1001-msgstr "Pakete, von denen ein Upgrade durchgeführt wurde: %s"
1002-
1003-#: ../unattended-upgrade:693
1004-#, c-format
1005-msgid "Writing dpkg log to '%s'"
1006-msgstr "Dpkg-Protokoll wird nach »%s« geschrieben"
1007-
1008-#: ../unattended-upgrade:744
1009+#: ../unattended-upgrade:1088
1010+#, c-format
1011+msgid "Packages that will be upgraded: %s"
1012+msgstr "Pakete, von denen ein Upgrade durchgeführt wird: %s"
1013+
1014+#: ../unattended-upgrade:1125
1015 msgid "print debug messages"
1016 msgstr "Nachrichten zur Fehlersuche ausgeben"
1017
1018-#: ../unattended-upgrade:747
1019+#: ../unattended-upgrade:1128
1020+msgid "make apt/libapt print verbose debug messages"
1021+msgstr "APT/LibAPT detaillierte Nachrichten zur Fehlersuche ausgeben lassen"
1022+
1023+#: ../unattended-upgrade:1131
1024+msgid "print info messages"
1025+msgstr "Informationsnachrichten ausgeben"
1026+
1027+#: ../unattended-upgrade:1134
1028 msgid "Simulation, download but do not install"
1029 msgstr "Simulation, herunterladen, aber nicht installieren"
1030
1031-#: ../unattended-upgrade:750
1032+#: ../unattended-upgrade:1137
1033 msgid "Upgrade in minimal steps (and allow interrupting with SIGINT"
1034 msgstr "Upgrade in minimalen Schritten (Unterbrechung mit SIGINT erlaubt)"
1035
1036-#: ../unattended-upgrade:754
1037+#: ../unattended-upgrade:1142
1038 msgid "You need to be root to run this application"
1039 msgstr "Sie müssen Root sein, um diese Anwendung auszuführen."
1040
1041-#: ../unattended-upgrade-shutdown:95
1042+#: ../unattended-upgrade-shutdown:72
1043 msgid "Unattended-upgrade in progress during shutdown, sleeping for 5s"
1044 msgstr ""
1045 "Unattended-Upgrade läuft während des Herunterfahrens weiter, es wird fünf "
1046 "Sekunden lang gewartet."
1047
1048-#: ../unattended-upgrade-shutdown:106
1049+#: ../unattended-upgrade-shutdown:125
1050+msgid "Running unattended-upgrades in shutdown mode"
1051+msgstr "Unattended-Upgrades im Herunterfahrmodus ausführen"
1052+
1053+#: ../unattended-upgrade-shutdown:153
1054 #, c-format
1055 msgid "Giving up on lockfile after %s delay"
1056 msgstr "Sperrdatei, hier wird nach %s Verzögerung aufgegeben."
1057
1058=== modified file 'setup.py'
1059--- setup.py 2014-04-09 20:22:26 +0000
1060+++ setup.py 2014-10-15 08:16:16 +0000
1061@@ -28,6 +28,6 @@
1062 ["debian/source_unattended-upgrades.py"])
1063 ],
1064 cmdclass={"build": build_extra.build_extra,
1065- "build_i18n": build_i18n.build_i18n},
1066+ "build_i18n": build_i18n.build_i18n},
1067 test_suite="test",
1068 )
1069
1070=== modified file 'test/test_in_chroot.py'
1071--- test/test_in_chroot.py 2014-04-08 13:43:45 +0000
1072+++ test/test_in_chroot.py 2014-10-15 08:16:16 +0000
1073@@ -86,7 +86,8 @@
1074 # run it
1075 target = self._run_upgrade_test_in_real_chroot(options)
1076 # ensure we upgraded the expected packages
1077- self.assertTrue(self._verify_install_log_in_real_chroot(target))
1078+ self.assertTrue(
1079+ self._verify_install_log_in_real_chroot(target, "ca-certificates"))
1080
1081 def test_minimal_steps_upgrade(self):
1082 print("Running minimal steps unattended upgrade in chroot")
1083@@ -95,7 +96,8 @@
1084 # run it
1085 target = self._run_upgrade_test_in_real_chroot(options)
1086 # ensure we upgraded the expected packages
1087- self.assertTrue(self._verify_install_log_in_real_chroot(target))
1088+ self.assertTrue(
1089+ self._verify_install_log_in_real_chroot(target, "ca-certificates"))
1090
1091 def test_upgrade_on_shutdown_upgrade(self):
1092 print("Running unattended upgrade on shutdown (download and install) "
1093@@ -105,7 +107,45 @@
1094 os.environ["UNATTENDED_UPGRADES_FORCE_INSTALL_ON_SHUTDOWN"] = "1"
1095 apt.apt_pkg.config.set("Unattended-Upgrade::InstallOnShutdown", "1")
1096 target = self._run_upgrade_test_in_real_chroot(options)
1097- self.assertTrue(self._verify_install_log_in_real_chroot(target))
1098+ self.assertTrue(
1099+ self._verify_install_log_in_real_chroot(target, "ca-certificates"))
1100+
1101+ def test_whitelist_upgrade(self):
1102+ print("Running unattended upgrade in chroot with whitelisted pkg")
1103+ options = MockOptions()
1104+ apt.apt_pkg.config.set(
1105+ "Unattended-Upgrade::Package-Whitelist::", "^libc6$")
1106+ # run it
1107+ target = self._run_upgrade_test_in_real_chroot(options)
1108+ # libc6 has a strict dependency on libc-bin so both packages
1109+ # will have to get installed. ensure that the relaxed whitelist is ok
1110+ self.assertTrue(
1111+ self._verify_install_log_in_real_chroot(target, "libc6"))
1112+ self.assertFalse(
1113+ self._verify_install_log_in_real_chroot(target, "ca-certificates"))
1114+ apt.apt_pkg.config.clear("Unattended-Upgrade::Package-Whitelist")
1115+
1116+ def test_whitelist_upgrade_strict(self):
1117+ print(
1118+ "Running unattended upgrade in chroot with strict whitelisted pkg")
1119+ options = MockOptions()
1120+ apt.apt_pkg.config.set(
1121+ "Unattended-Upgrade::Package-Whitelist::", "^apt$")
1122+ apt.apt_pkg.config.set(
1123+ "Unattended-Upgrade::Package-Whitelist::", "^libc6$")
1124+ apt.apt_pkg.config.set(
1125+ "Unattended-Upgrade::Package-Whitelist-Strict", "true")
1126+ # run it
1127+ target = self._run_upgrade_test_in_real_chroot(options)
1128+ # we upgraded apt, but not libc6 because libc6 needs libc-bin and
1129+ # its not whitelisted (in strict mode)
1130+ self.assertTrue(
1131+ self._verify_install_log_in_real_chroot(target, "apt"))
1132+ self.assertFalse(
1133+ self._verify_install_log_in_real_chroot(target, "libc6"))
1134+ self.assertFalse(
1135+ self._verify_install_log_in_real_chroot(target, "libc-bin"))
1136+ apt.apt_pkg.config.clear("Unattended-Upgrade::Package-Whitelist")
1137
1138 def _get_lockfile_location(self, target):
1139 return os.path.join(
1140@@ -166,7 +206,7 @@
1141 apt.apt_pkg.config.clear("Unattended-Upgrade::Origins-Pattern")
1142 apt.apt_pkg.config.set(
1143 "Unattended-Upgrade::Origins-Pattern::", ORIGINS_PATTERN)
1144- unattended_upgrade.DISTRO_CODENAME = "lucid"
1145+ unattended_upgrade.DISTRO_CODENAME = DISTRO
1146 unattended_upgrade.main(options)
1147 os._exit(0)
1148 else:
1149@@ -196,16 +236,15 @@
1150 self.assertTrue(len(all_progress) > 5)
1151 return target
1152
1153- def _verify_install_log_in_real_chroot(self, target):
1154+ def _verify_install_log_in_real_chroot(self, target, needle_pkg):
1155 # examine log
1156 log = self._get_lockfile_location(target)
1157 logfile = open(log).read()
1158 #print(logfile)
1159- NEEDLE_PKG = "ca-certificates"
1160- if not re.search("Packages that will be upgraded:.*%s" % NEEDLE_PKG,
1161+ if not re.search("Packages that will be upgraded:.*%s" % needle_pkg,
1162 logfile):
1163 logging.warn(
1164- "Can not find expected %s upgrade in log" % NEEDLE_PKG)
1165+ "Can not find expected %s upgrade in log" % needle_pkg)
1166 return False
1167 if "ERROR Installing the upgrades failed" in logfile:
1168 logging.warn("Got a ERROR in the logfile")
1169@@ -213,9 +252,9 @@
1170 dpkg_log = os.path.join(
1171 target, "var/log/unattended-upgrades/*-dpkg*.log")
1172 dpkg_logfile = open(glob.glob(dpkg_log)[0]).read()
1173- if not "Preparing to replace %s" % NEEDLE_PKG in dpkg_logfile:
1174+ if not "Preparing to replace %s" % needle_pkg in dpkg_logfile:
1175 logging.warn("Did not find %s upgrade in %s" % (
1176- dpkg_log, NEEDLE_PKG))
1177+ dpkg_log, needle_pkg))
1178 return False
1179 #print(dpkg_logfile)
1180 return True
1181
1182=== modified file 'test/test_origin_pattern.py'
1183--- test/test_origin_pattern.py 2013-04-11 04:59:50 +0000
1184+++ test/test_origin_pattern.py 2014-10-15 08:16:16 +0000
1185@@ -26,8 +26,10 @@
1186 pass
1187
1188
1189-class MockCache(list):
1190- pass
1191+class MockCache(dict):
1192+ def __iter__(self):
1193+ for pkgname in self.keys():
1194+ yield self[pkgname]
1195
1196
1197 class MockDepCache():
1198@@ -101,23 +103,42 @@
1199 self.assertTrue(match_whitelist_string(s, None))
1200
1201 def test_blacklist(self):
1202- # mock pkg (yeah, complicated)
1203- pkg = self._get_mock_package()
1204- # mock cache
1205- cache = MockCache()
1206- cache._depcache = MockDepCache()
1207- cache._depcache.broken_count = 0
1208- cache.append(pkg)
1209+ # get the mocks
1210+ pkg = self._get_mock_package("linux-image")
1211+ cache = self._get_mock_cache()
1212+ cache[pkg.name] = pkg
1213 # origins and blacklist
1214 allowed_origins = ["o=Ubuntu"]
1215 blacklist = ["linux-.*"]
1216 # with blacklist pkg
1217 self.assertFalse(
1218- check_changes_for_sanity(cache, allowed_origins, blacklist))
1219+ check_changes_for_sanity(cache, allowed_origins, blacklist, [".*"]))
1220 # with "normal" pkg
1221 pkg.name = "apt"
1222 self.assertTrue(
1223- check_changes_for_sanity(cache, allowed_origins, blacklist))
1224+ check_changes_for_sanity(cache, allowed_origins, blacklist, [".*"]))
1225+
1226+ def test_whitelist_with_strict_whitelisting(self):
1227+ cache = self._get_mock_cache()
1228+ for pkgname in ["not-whitelisted", "whitelisted"]:
1229+ pkg = self._get_mock_package(name=pkgname)
1230+ cache[pkg.name] = pkg
1231+ # origins and blacklist
1232+ allowed_origins = ["o=Ubuntu"]
1233+ whitelist = ["whitelisted"]
1234+ # test with strict whitelist
1235+ apt_pkg.config.set(
1236+ "Unattended-Upgrades::Packages-Whitelist-Strict", "true")
1237+ # ensure that a not-whitelisted pkg will fail
1238+ self.assertTrue(cache["not-whitelisted"].marked_upgrade)
1239+ self.assertFalse(
1240+ check_changes_for_sanity(cache, allowed_origins, [], whitelist))
1241+
1242+ def _get_mock_cache(self):
1243+ cache = MockCache()
1244+ cache._depcache = MockDepCache()
1245+ cache._depcache.broken_count = 0
1246+ return cache
1247
1248 def _get_mock_origin(self, aorigin="", label="", archive="",
1249 site="", component=""):
1250@@ -129,11 +150,11 @@
1251 origin.compoent = component
1252 return origin
1253
1254- def _get_mock_package(self):
1255+ def _get_mock_package(self, name="foo"):
1256 pkg = MockPackage()
1257 pkg._pkg = MockPackage()
1258 pkg._pkg.selected_state = 0
1259- pkg.name = "linux-image"
1260+ pkg.name = name
1261 pkg.marked_install = True
1262 pkg.marked_upgrade = True
1263 pkg.marked_delete = False
1264
1265=== modified file 'test/test_pep8.py' (properties changed: +x to -x)
1266--- test/test_pep8.py 2013-09-12 20:31:54 +0000
1267+++ test/test_pep8.py 2014-10-15 08:16:16 +0000
1268@@ -2,6 +2,8 @@
1269 import subprocess
1270 import unittest
1271
1272+IGNORE = "E265"
1273+
1274
1275 class PackagePep8TestCase(unittest.TestCase):
1276
1277@@ -11,8 +13,9 @@
1278 top_src_dir,
1279 os.path.join(top_src_dir, "unattended-upgrade"),
1280 os.path.join(top_src_dir, "unattended-upgrade-shutdown"),
1281- ]
1282- self.assertEqual(subprocess.call(["pep8", "--repeat", ] + targets), 0)
1283+ ]
1284+ self.assertEqual(subprocess.call(
1285+ ["pep8", "--repeat", "--ignore=%s" % IGNORE] + targets), 0)
1286
1287
1288 if __name__ == "__main__":
1289
1290=== modified file 'test/test_pyflakes.py'
1291--- test/test_pyflakes.py 2013-09-12 20:25:37 +0000
1292+++ test/test_pyflakes.py 2014-10-15 08:16:16 +0000
1293@@ -12,7 +12,7 @@
1294 top_src_dir,
1295 os.path.join(top_src_dir, "unattended-upgrade"),
1296 os.path.join(top_src_dir, "unattended-upgrade-shutdown"),
1297- ]
1298+ ]
1299 self.assertEqual(subprocess.call(["pyflakes", ] + targets), 0)
1300
1301
1302
1303=== modified file 'unattended-upgrade'
1304--- unattended-upgrade 2014-09-11 13:12:05 +0000
1305+++ unattended-upgrade 2014-10-15 08:16:16 +0000
1306@@ -96,7 +96,9 @@
1307 """ Adjust candidate versions to match highest allowed origin
1308
1309 This adjusts the origin even if the candidate has a higher
1310- version
1311+ version. This is needed when e.g. a package is available in
1312+ the security pocket but there is also a package in the
1313+ updates pocket with a higher version number
1314 """
1315 for pkg in self:
1316 # important! this avoids downgrades below
1317@@ -110,9 +112,10 @@
1318 # not the candidate
1319 new_cand = None
1320 for ver in pkg.versions:
1321- # ignore versions that the user marked with priority < 0
1322+ # ignore versions that the user marked with priority < 100
1323 # (and ensure we have a python-apt that supports this)
1324- if hasattr(ver, "policy_priority") and ver.policy_priority < 0:
1325+ if (hasattr(ver, "policy_priority") and
1326+ ver.policy_priority < 100):
1327 logging.debug("ignoring ver '%s' with priority < 0" % ver)
1328 continue
1329 if is_allowed_origin(ver, self.allowed_origins):
1330@@ -364,8 +367,8 @@
1331 raise UnknownMatcherError(
1332 "Unknown whitelist entry for macher '%s' (token '%s')" % (
1333 what, token))
1334- logging.debug("matching '%s'='%s' against '%s'" % (
1335- what, value, origin))
1336+ #logging.debug("matching '%s'='%s' against '%s'" % (
1337+ # what, value, origin))
1338 return res
1339
1340
1341@@ -391,7 +394,7 @@
1342
1343
1344 def upgrade_in_minimal_steps(cache, pkgs_to_upgrade, blacklist,
1345- logfile_dpkg="", verbose=False):
1346+ whitelist, logfile_dpkg="", verbose=False):
1347
1348 install_log = LogInstallProgress(logfile_dpkg, verbose)
1349 install_log.progress_log += ".minimal-steps"
1350@@ -420,7 +423,8 @@
1351 continue
1352 # double check that we are not running into side effects like
1353 # what could have been caused LP: #1020680
1354- if not check_changes_for_sanity(cache, allowed_origins, blacklist):
1355+ if not check_changes_for_sanity(cache, allowed_origins, blacklist,
1356+ whitelist):
1357 logging.info("While building minimal partition: "
1358 "cache has not allowed changes")
1359 cache.clear()
1360@@ -491,8 +495,19 @@
1361 return True
1362 return False
1363
1364-
1365-def check_changes_for_sanity(cache, allowed_origins, blacklist):
1366+def is_pkgname_in_whitelist(pkgname, whitelist):
1367+ # a empty whitelist means the user does not want to use this feature
1368+ if not whitelist:
1369+ return True
1370+ for whitelist_regexp in whitelist:
1371+ if re.match(whitelist_regexp, pkgname):
1372+ logging.debug("only upgrading the following package '%s'" %
1373+ pkgname)
1374+ return True
1375+ return False
1376+
1377+
1378+def check_changes_for_sanity(cache, allowed_origins, blacklist, whitelist):
1379 if cache._depcache.broken_count != 0:
1380 return False
1381 for pkg in cache:
1382@@ -504,6 +519,19 @@
1383 logging.debug("pkg '%s' not in allowed origin" % pkg.name)
1384 return False
1385 if is_pkgname_in_blacklist(pkg.name, blacklist):
1386+ logging.debug("pkg '%s' package has been blacklisted" %
1387+ pkg.name)
1388+ return False
1389+ # a strict whitelist will not allow any changes not in the
1390+ # whitelist, most people will want the relaxed whitelist
1391+ # that whitelists a package but pulls in the package
1392+ # dependencies
1393+ strict_whitelist = apt_pkg.config.find_b(
1394+ "Unattended-Upgrade::Package-Whitelist-Strict", False)
1395+ if (strict_whitelist and
1396+ not is_pkgname_in_whitelist(pkg.name, whitelist)):
1397+ logging.debug("pkg '%s' package is not whitelisted" %
1398+ pkg.name)
1399 return False
1400 if pkg._pkg.selected_state == apt_pkg.SELSTATE_HOLD:
1401 logging.debug("pkg '%s' is on hold" % pkg.name)
1402@@ -595,7 +623,7 @@
1403 # might be a dpkg prompt (LP: #936870)
1404 if md5 == "newconffile":
1405 continue
1406- if not pkg_conffiles or not conf_file in pkg_conffiles.split("\n"):
1407+ if not pkg_conffiles or conf_file not in pkg_conffiles.split("\n"):
1408 logging.debug("'%s' not in package conffiles '%s'" % (
1409 conf_file, pkg_conffiles))
1410 continue
1411@@ -625,7 +653,7 @@
1412 # in the previous version in the dpkg status file
1413 if pkg_conffiles:
1414 for conf_file in pkg_conffiles.split("\n"):
1415- if (not conf_file in dpkg_status_conffiles and
1416+ if (conf_file not in dpkg_status_conffiles and
1417 os.path.exists(prefix + conf_file)):
1418 logging.debug("found conffile '%s' in new pkg but on dpkg "
1419 "status" % conf_file)
1420@@ -637,7 +665,7 @@
1421
1422
1423 def dpkg_conffile_prompt():
1424- if not "DPkg::Options" in apt_pkg.config:
1425+ if "DPkg::Options" not in apt_pkg.config:
1426 return True
1427 options = apt_pkg.config.value_list("DPkg::Options")
1428 for option in options:
1429@@ -693,7 +721,7 @@
1430 # ascii only system like the buildds)
1431 mail = subprocess.Popen(
1432 [MAIL_BINARY, "-s", subject, to_address],
1433- stdin=subprocess.PIPE, universal_newlines=False)
1434+ stdin=subprocess.PIPE, universal_newlines=False)
1435 mail.stdin.write(encoded_body)
1436 mail.stdin.close()
1437 ret = mail.wait()
1438@@ -778,14 +806,20 @@
1439 logging.debug("mail returned: %s" % ret)
1440
1441
1442-def do_install(cache, pkgs_to_upgrade, blacklisted_pkgs, options,
1443- logfile_dpkg):
1444+def do_install(cache, pkgs_to_upgrade, blacklisted_pkgs, whitelisted_pkgs,
1445+ options, logfile_dpkg):
1446 # set debconf to NON_INTERACTIVE, redirect output
1447 os.putenv("DEBIAN_FRONTEND", "noninteractive")
1448 setup_apt_listchanges()
1449
1450 logging.info(_("Writing dpkg log to '%s'") % logfile_dpkg)
1451
1452+ marked_delete = [pkg for pkg in cache.get_changes() if pkg.marked_delete]
1453+ if marked_delete:
1454+ raise AssertionError(
1455+ "Internal error. The following packages are marked for "
1456+ "removal:%s" % "".join([pkg.name for pkg in marked_delete]))
1457+
1458 pkg_install_success = False
1459 try:
1460 if (options.minimal_upgrade_steps or
1461@@ -801,7 +835,7 @@
1462 # try upgrade all "pkgs" in minimal steps
1463 pkg_install_success = upgrade_in_minimal_steps(
1464 cache, [pkg.name for pkg in pkgs_to_upgrade],
1465- blacklisted_pkgs, logfile_dpkg,
1466+ blacklisted_pkgs, whitelisted_pkgs, logfile_dpkg,
1467 options.verbose or options.debug)
1468 else:
1469 pkg_install_success = upgrade_normal(
1470@@ -855,7 +889,6 @@
1471 # COMPAT only
1472 apt_pkg.config.find("APT::UnattendedUpgrades::LogFile",
1473 "unattended-upgrades.log")))
1474-
1475 if not options.dry_run and not os.path.exists(logdir):
1476 os.makedirs(logdir)
1477
1478@@ -886,6 +919,10 @@
1479 return apt_pkg.config.value_list("Unattended-Upgrade::Package-Blacklist")
1480
1481
1482+def get_whitelisted_pkgs():
1483+ return apt_pkg.config.value_list("Unattended-Upgrade::Package-Whitelist")
1484+
1485+
1486 def reboot_if_requested_and_needed(shutdown_lock=0):
1487 # auto-reboot (if required and the config for this is set
1488 if (apt_pkg.config.find_b(
1489@@ -906,43 +943,57 @@
1490 pass
1491
1492
1493+def try_to_upgrade(pkg, pkgs_to_upgrade, pkgs_kept_back, cache, allowed_origins,
1494+ blacklisted_pkgs, whitelisted_pkgs):
1495+
1496+ try:
1497+ pkg.mark_upgrade()
1498+ if check_changes_for_sanity(cache, allowed_origins,
1499+ blacklisted_pkgs, whitelisted_pkgs):
1500+ # add to packages to upgrade
1501+ pkgs_to_upgrade.append(pkg)
1502+ # re-eval pkgs_kept_back as the resolver may fail to
1503+ # directly upgrade a pkg, but that may work during
1504+ # a subsequent operation, see debian bug #639840
1505+ for pkgname in pkgs_kept_back:
1506+ if (cache[pkgname].marked_install or
1507+ cache[pkgname].marked_upgrade):
1508+ pkgs_kept_back.remove(pkgname)
1509+ pkgs_to_upgrade.append(cache[pkgname])
1510+ else:
1511+ logging.debug("sanity check failed")
1512+ rewind_cache(cache, pkgs_to_upgrade)
1513+ pkgs_kept_back.append(pkg.name)
1514+ except SystemError as e:
1515+ # can't upgrade
1516+ logging.warning(
1517+ _("package '%s' upgradable but fails to "
1518+ "be marked for upgrade (%s)") % (pkg.name, e))
1519+ rewind_cache(cache, pkgs_to_upgrade)
1520+ pkgs_kept_back.append(pkg.name)
1521+
1522+
1523 def calculate_upgradable_pkgs(cache, options, allowed_origins,
1524- blacklisted_pkgs):
1525+ blacklisted_pkgs, whitelisted_pkgs):
1526 pkgs_to_upgrade = []
1527 pkgs_kept_back = []
1528+
1529 # now do the actual upgrade
1530 for pkg in cache:
1531 if options.debug and pkg.is_upgradable:
1532 logging.debug("Checking: %s (%s)" % (
1533 pkg.name, getattr(pkg.candidate, "origins", [])))
1534 if (pkg.is_upgradable and
1535- not is_pkgname_in_blacklist(pkg.name, blacklisted_pkgs) and
1536- is_allowed_origin(pkg.candidate, allowed_origins)):
1537- try:
1538- pkg.mark_upgrade()
1539- if check_changes_for_sanity(cache, allowed_origins,
1540- blacklisted_pkgs):
1541- # add to packages to upgrade
1542- pkgs_to_upgrade.append(pkg)
1543- # re-eval pkgs_kept_back as the resolver may fail to
1544- # directly upgrade a pkg, but that may work during
1545- # a subsequent operation, see debian bug #639840
1546- for pkgname in pkgs_kept_back:
1547- if (cache[pkgname].marked_install or
1548- cache[pkgname].marked_upgrade):
1549- pkgs_kept_back.remove(pkgname)
1550- pkgs_to_upgrade.append(cache[pkgname])
1551- else:
1552- logging.debug("sanity check failed")
1553- rewind_cache(cache, pkgs_to_upgrade)
1554- pkgs_kept_back.append(pkg.name)
1555- except SystemError as e:
1556- # can't upgrade
1557- logging.warning(
1558- _("package '%s' upgradable but fails to "
1559- "be marked for upgrade (%s)") % (pkg.name, e))
1560- rewind_cache(cache, pkgs_to_upgrade)
1561- pkgs_kept_back.append(pkg.name)
1562+ not is_pkgname_in_blacklist(pkg.name, blacklisted_pkgs) and
1563+ is_pkgname_in_whitelist(pkg.name, whitelisted_pkgs) and
1564+ is_allowed_origin(pkg.candidate, allowed_origins)):
1565+ try_to_upgrade(pkg,
1566+ pkgs_to_upgrade,
1567+ pkgs_kept_back,
1568+ cache,
1569+ allowed_origins,
1570+ blacklisted_pkgs,
1571+ whitelisted_pkgs)
1572 return pkgs_to_upgrade, pkgs_kept_back
1573
1574
1575@@ -958,10 +1009,16 @@
1576 # format (origin, archive), e.g. ("Ubuntu","dapper-security")
1577 allowed_origins = get_allowed_origins()
1578
1579- # pkgs that are (for some reason) not save to install
1580+ # pkgs that are (for some reason) not safe to install
1581 blacklisted_pkgs = get_blacklisted_pkgs()
1582 logging.info(_("Initial blacklisted packages: %s"),
1583 " ".join(blacklisted_pkgs))
1584+
1585+ # install only these packages regardless of other upgrades available
1586+ whitelisted_pkgs = get_whitelisted_pkgs()
1587+ logging.info(_("Initial whitelisted packages: %s"),
1588+ " ".join(whitelisted_pkgs))
1589+
1590 logging.info(_("Starting unattended upgrades script"))
1591
1592 # display available origin
1593@@ -1025,7 +1082,7 @@
1594 if pkg.is_auto_removable])
1595 # find out about the packages that are upgradable (in a allowed_origin)
1596 pkgs_to_upgrade, pkgs_kept_back = calculate_upgradable_pkgs(
1597- cache, options, allowed_origins, blacklisted_pkgs)
1598+ cache, options, allowed_origins, blacklisted_pkgs, whitelisted_pkgs)
1599 pkgs_to_upgrade.sort(key=lambda p: p.name)
1600 pkgs = "\n".join([pkg.name for pkg in pkgs_to_upgrade])
1601 logging.debug("pkgs that look like they should be upgraded: %s" % pkgs)
1602@@ -1094,16 +1151,19 @@
1603 # redo the selection about the packages to upgrade based on the new
1604 # blacklist
1605 logging.debug("blacklist: %s" % blacklisted_pkgs)
1606+ # whitelist
1607+ logging.debug("whitelist: %s" % whitelisted_pkgs)
1608 # find out about the packages that are upgradable (in a allowed_origin)
1609- if len(blacklisted_pkgs) > 0:
1610+ if len(blacklisted_pkgs) > 0 or len(whitelisted_pkgs) > 0:
1611 cache.clear()
1612 old_pkgs_to_upgrade = pkgs_to_upgrade[:]
1613 pkgs_to_upgrade = []
1614 for pkg in old_pkgs_to_upgrade:
1615- logging.debug("Checking (blacklist): %s" % (pkg.name))
1616+ logging.debug("Checking the black and whitelist: %s" %
1617+ (pkg.name))
1618 pkg.mark_upgrade()
1619 if check_changes_for_sanity(cache, allowed_origins,
1620- blacklisted_pkgs):
1621+ blacklisted_pkgs, whitelisted_pkgs):
1622 pkgs_to_upgrade.append(pkg)
1623 else:
1624 if not (pkg.name in pkgs_kept_back):
1625@@ -1140,7 +1200,7 @@
1626 # check if its configured for install on shutdown, if so, the
1627 # environment UNATTENDED_UPGRADES_FORCE_INSTALL_ON_SHUTDOWN will
1628 # be set by the unatteded-upgrades-shutdown script
1629- if (not "UNATTENDED_UPGRADES_FORCE_INSTALL_ON_SHUTDOWN" in os.environ and
1630+ if ("UNATTENDED_UPGRADES_FORCE_INSTALL_ON_SHUTDOWN" not in os.environ and
1631 apt_pkg.config.find_b(
1632 "Unattended-Upgrade::InstallOnShutdown", False)):
1633 logger = logging.getLogger()
1634@@ -1157,7 +1217,6 @@
1635 logging.info(_("Packages that will be upgraded: %s" % pkgs))
1636
1637 # get log
1638- now = datetime.datetime.now()
1639 logfile_dpkg = os.path.join(_get_logdir(), 'unattended-upgrades-dpkg.log')
1640
1641 # only perform install step if we actually have packages to install
1642@@ -1169,7 +1228,7 @@
1643 shutdown_lock = apt_pkg.get_lock("/var/run/unattended-upgrades.lock")
1644 # do install
1645 pkg_install_success = do_install(
1646- cache, pkgs_to_upgrade, blacklisted_pkgs, options, logfile_dpkg)
1647+ cache, pkgs_to_upgrade, blacklisted_pkgs, whitelisted_pkgs, options, logfile_dpkg)
1648
1649 # send a mail (if needed)
1650 if not options.dry_run:
1651@@ -1193,7 +1252,7 @@
1652
1653 # this ensures the commandline is logged in /var/log/apt/history.log
1654 apt_pkg.config.set("Commandline::AsString", " ".join(sys.argv))
1655-
1656+
1657 # init the options
1658 parser = OptionParser()
1659 parser.add_option("-d", "--debug",
1660
1661=== modified file 'unattended-upgrade-shutdown'
1662--- unattended-upgrade-shutdown 2013-09-12 20:28:39 +0000
1663+++ unattended-upgrade-shutdown 2014-10-15 08:16:16 +0000
1664@@ -149,7 +149,7 @@
1665 # show log
1666 log_progress()
1667 time.sleep(5)
1668- if (time.time() - start_time) > options.delay*60:
1669+ if (time.time() - start_time) > options.delay * 60:
1670 logging.warning(_("Giving up on lockfile after %s delay") %
1671 options.delay)
1672 sys.exit(1)

Subscribers

People subscribed via source and target branches