diff --git a/.gitignore b/.gitignore index e566fb536536dadf8ac21c1b61f0b73ac351113d..cb5de36482fb834aeeaebe401b8ab047ce44f908 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,7 @@ -package/debian/unattended-upgrades -package/debian/unattended-upgrades.debhelper.log -package/debian/unattended-upgrades.substvars -package/debian/unattended-upgrades.*.debhelper package/debian/files package/debian/debhelper-build-stamp -unattended-upgrades_*.tar.xz -unattended-upgrades_*.build -unattended-upgrades_*.dsc -unattended-upgrades_*.changes -unattended-upgrades_*.deb +le-autoupgrade_*.tar.xz +le-autoupgrade_*.build +le-autoupgrade_*.dsc +le-autoupgrade_*.changes +le-autoupgrade_*.deb diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a3a6ab7498cc897222b2c2590d5c3da1d82ccbc6..baff4ee417f88d3b07dde5207be628ad0942830d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,40 +3,39 @@ stages: - build - test - deploy + build: stage: build artifacts: paths: - build/ tags: - - regular - - debian - - build + - debian-packaging script: - - if [ ! -d "package/debian/" ] ; then exit 1; fi - # TODO: find a way to get the dependencies automatically - - apt-get update && apt-get install -y build-essential devscripts dh-make python-support dh-python dh-systemd quilt python python3-distutils-extra python3-setuptools python-dev python3-dev python-coverage pep8 pyflakes python-apt python3-apt python-mock python3-mock lsb-release + - apt-get update && apt-get install -y devscripts - LINE=$(head -n 1 package/debian/changelog) - PACKAGE=$(echo $LINE | cut -d' ' -f1) - VERSION=$(echo $LINE | cut -d' ' -f2 | grep -o -E '[0-9]*\.[0-9]*\.[0-9]*') - tar --exclude=debian -czf ${PACKAGE}_${VERSION}.orig.tar.gz package/* - - cd package ; debuild -us -uc + - cd package + - debuild -us -uc --lintian-opts --suppress-tags package-installs-apt-preferences - cd ../ - mkdir build/ - mv ${PACKAGE}* build/ - echo "Estágio de Build finalizado." + test: stage: test tags: - ubuntu - - debootstrap + - regular script: - # TODO: find a way to get the dependencies automatically. - - apt-get update && apt-get install -y debconf python3 python3-apt apt-utils apt ucf lsb-release lsb-base xz-utils python3-crontab python-crontab cron anacron + - apt-get update && apt-get install -y unattended-upgrades - dpkg -i build/*.deb - echo "Estágio de Teste finalizado" dependencies: - build + deploy: stage: deploy only: diff --git a/package/.bzr-builddeb/default.conf b/package/.bzr-builddeb/default.conf deleted file mode 100644 index 5de9044723de7e060ff0a51c194ee56219bf51c1..0000000000000000000000000000000000000000 --- a/package/.bzr-builddeb/default.conf +++ /dev/null @@ -1,5 +0,0 @@ -[BUILDDEB] -native = True - -[HOOKS] -pre-build = (./pre-build.sh && cd test && make && make clean) diff --git a/package/.travis.yml b/package/.travis.yml deleted file mode 100644 index 05a194e82d48c1f371b0b639c2936b775fefbf5e..0000000000000000000000000000000000000000 --- a/package/.travis.yml +++ /dev/null @@ -1,16 +0,0 @@ -# This provides integration into the travis-ci.org CI system. For a overview -# check http://about.travis-ci.org/docs/user/getting-started/ -# -# Some notes: -# - language is "C" because the travis chroot for python installs a non-repo -# python3.3 from a PPA -sudo: required -dist: trusty -language: c -before_install: -- sudo apt-get update -- sudo apt-get install -y python python3-distutils-extra python3-setuptools python-dev anacron python3-dev python3-crontab python-crontab python-coverage pep8 pyflakes python-apt python3-apt python-mock python3-mock lsb-release dh-systemd -- which python3 -# travis is "funny" it has a non-distro python3 that will not find -# python modules installed via apt-get -script: (cd test ; PATH=/usr/bin:$PATH make) diff --git a/package/99le6-auto-upgrade.conf b/package/99le6-auto-upgrade.conf new file mode 100644 index 0000000000000000000000000000000000000000..13b447df79601448bc9ce76ce182ff4df3636e17 --- /dev/null +++ b/package/99le6-auto-upgrade.conf @@ -0,0 +1,16 @@ +APT::Periodic::Unattended-Upgrade "1"; +APT::Periodic::Update-Package-Lists "1"; +APT::Periodic::Download-Upgradeable-Packages "1"; +APT::Periodic::AutocleanInterval "14"; +APT::Periodic::RandomSleep "3600"; + +Unattended-Upgrade::AutoFixInterruptedDpkg "true"; +Unattended-Upgrade::Remove-Unused-Dependencies "true"; + +Unattended-Upgrade::Allowed-Origins { + "${distro_id}:${distro_codename}"; + "${distro_id}:${distro_codename}-security"; + "${distro_id}:${distro_codename}-updates"; + "C3SL:stable"; + "C3SL:testing"; +}; diff --git a/package/99le6-auto-upgrade.pref b/package/99le6-auto-upgrade.pref new file mode 100644 index 0000000000000000000000000000000000000000..498e751dfbd5dff481be3ec9bfd8a47bbbea744d --- /dev/null +++ b/package/99le6-auto-upgrade.pref @@ -0,0 +1,17 @@ +Package: * +Pin: origin repo.c3sl.ufpr.br +Pin-Priority: 990 + +Package: * +Pin: release n=xenial +Pin-Priority: 100 + +Package: * +Pin: release n=xenial-updates +Pin-Priority: 100 + +# We used to package a version of the unattended-upgrades package, but now +# we want the official one to be installed +Package: unattended-upgrades +Pin: release n=xenial +Pin-Priority: 1000 diff --git a/package/COPYING b/package/COPYING deleted file mode 100644 index d511905c1647a1e311e8b20d5930a37a9c2531cd..0000000000000000000000000000000000000000 --- a/package/COPYING +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - <signature of Ty Coon>, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/package/README.md b/package/README.md deleted file mode 100644 index edcce8cf12ea9bf32eac53a971bc216de288f040..0000000000000000000000000000000000000000 --- a/package/README.md +++ /dev/null @@ -1,13 +0,0 @@ -Unattended upgrades (C3SL ver. le-autoupgrade) -=================== - -This script can upgrade packages automatically and unattended. -However, the original version this is not enabled by default, the C3SL -patch changes this, enabling by default this package and setting -to start the updates at a random time of the day. -This patch is focused on attend the needs of the Linux Educacional 6. - -The package it will not install packages that require -dependencies that can't be fetched from allowed origins and it will -check for conffile prompts before the install and holds back -any package that requires them. diff --git a/package/__pycache__/unattended-upgrade-shutdown.cpython-34.pyc b/package/__pycache__/unattended-upgrade-shutdown.cpython-34.pyc deleted file mode 100644 index 2edb0275b71a13f3c6a8f6b9cd5eedfc79d5b4ea..0000000000000000000000000000000000000000 Binary files a/package/__pycache__/unattended-upgrade-shutdown.cpython-34.pyc and /dev/null differ diff --git a/package/__pycache__/unattended-upgrade-shutdown.cpython-35.pyc b/package/__pycache__/unattended-upgrade-shutdown.cpython-35.pyc deleted file mode 100644 index c9ce7630fb020a36907f3dc9cc482db802fc6253..0000000000000000000000000000000000000000 Binary files a/package/__pycache__/unattended-upgrade-shutdown.cpython-35.pyc and /dev/null differ diff --git a/package/__pycache__/unattended-upgrade.cpython-34.pyc b/package/__pycache__/unattended-upgrade.cpython-34.pyc deleted file mode 100644 index 95a48d89edf41a1a0d7b616673e1ae7f7bd9e293..0000000000000000000000000000000000000000 Binary files a/package/__pycache__/unattended-upgrade.cpython-34.pyc and /dev/null differ diff --git a/package/__pycache__/unattended-upgrade.cpython-35.pyc b/package/__pycache__/unattended-upgrade.cpython-35.pyc deleted file mode 100644 index 7c425374e4e8152689f7b1b73c4e8725b87675db..0000000000000000000000000000000000000000 Binary files a/package/__pycache__/unattended-upgrade.cpython-35.pyc and /dev/null differ diff --git a/package/build/mo/da/LC_MESSAGES/unattended-upgrades.mo b/package/build/mo/da/LC_MESSAGES/unattended-upgrades.mo deleted file mode 100644 index 279a11a5362e9394cc57164c3423ad67b560d9a3..0000000000000000000000000000000000000000 Binary files a/package/build/mo/da/LC_MESSAGES/unattended-upgrades.mo and /dev/null differ diff --git a/package/build/mo/de/LC_MESSAGES/unattended-upgrades.mo b/package/build/mo/de/LC_MESSAGES/unattended-upgrades.mo deleted file mode 100644 index 4680ab8f89d508d7f94d70817e6c9b3712782318..0000000000000000000000000000000000000000 Binary files a/package/build/mo/de/LC_MESSAGES/unattended-upgrades.mo and /dev/null differ diff --git a/package/build/mo/es/LC_MESSAGES/unattended-upgrades.mo b/package/build/mo/es/LC_MESSAGES/unattended-upgrades.mo deleted file mode 100644 index 489b650caffacd0ec818d6f42646c7ca6d70a92d..0000000000000000000000000000000000000000 Binary files a/package/build/mo/es/LC_MESSAGES/unattended-upgrades.mo and /dev/null differ diff --git a/package/build/mo/eu/LC_MESSAGES/unattended-upgrades.mo b/package/build/mo/eu/LC_MESSAGES/unattended-upgrades.mo deleted file mode 100644 index c2aae6304d9c536ac0d24b976f2668f91675534e..0000000000000000000000000000000000000000 Binary files a/package/build/mo/eu/LC_MESSAGES/unattended-upgrades.mo and /dev/null differ diff --git a/package/build/mo/fr/LC_MESSAGES/unattended-upgrades.mo b/package/build/mo/fr/LC_MESSAGES/unattended-upgrades.mo deleted file mode 100644 index ea1540b6c33e95481f96b6dbda7e2d1945df68d2..0000000000000000000000000000000000000000 Binary files a/package/build/mo/fr/LC_MESSAGES/unattended-upgrades.mo and /dev/null differ diff --git a/package/build/mo/gl/LC_MESSAGES/unattended-upgrades.mo b/package/build/mo/gl/LC_MESSAGES/unattended-upgrades.mo deleted file mode 100644 index 9741334e312956ab2228757837594e73d0d97fab..0000000000000000000000000000000000000000 Binary files a/package/build/mo/gl/LC_MESSAGES/unattended-upgrades.mo and /dev/null differ diff --git a/package/build/mo/ja/LC_MESSAGES/unattended-upgrades.mo b/package/build/mo/ja/LC_MESSAGES/unattended-upgrades.mo deleted file mode 100644 index 1b559c6dc6b2f1bca9f70ec30f575b9f0c1a2493..0000000000000000000000000000000000000000 Binary files a/package/build/mo/ja/LC_MESSAGES/unattended-upgrades.mo and /dev/null differ diff --git a/package/build/mo/pt/LC_MESSAGES/unattended-upgrades.mo b/package/build/mo/pt/LC_MESSAGES/unattended-upgrades.mo deleted file mode 100644 index 798857afccff13973163bfa31e74ed2a13ea5e20..0000000000000000000000000000000000000000 Binary files a/package/build/mo/pt/LC_MESSAGES/unattended-upgrades.mo and /dev/null differ diff --git a/package/build/mo/pt_BR/LC_MESSAGES/unattended-upgrades.mo b/package/build/mo/pt_BR/LC_MESSAGES/unattended-upgrades.mo deleted file mode 100644 index c57bf6a5a9684a2ffeff16249747a012bd0d01ad..0000000000000000000000000000000000000000 Binary files a/package/build/mo/pt_BR/LC_MESSAGES/unattended-upgrades.mo and /dev/null differ diff --git a/package/build/mo/ru/LC_MESSAGES/unattended-upgrades.mo b/package/build/mo/ru/LC_MESSAGES/unattended-upgrades.mo deleted file mode 100644 index 5084edfc73fd2052fb955ea321f3f10034657c48..0000000000000000000000000000000000000000 Binary files a/package/build/mo/ru/LC_MESSAGES/unattended-upgrades.mo and /dev/null differ diff --git a/package/build/mo/sk/LC_MESSAGES/unattended-upgrades.mo b/package/build/mo/sk/LC_MESSAGES/unattended-upgrades.mo deleted file mode 100644 index 84f033fcc760dfaa5fb1bf04f5b566ecec008f0f..0000000000000000000000000000000000000000 Binary files a/package/build/mo/sk/LC_MESSAGES/unattended-upgrades.mo and /dev/null differ diff --git a/package/build/scripts-3.4/unattended-upgrade b/package/build/scripts-3.4/unattended-upgrade deleted file mode 100755 index c071d431fd8d4ff5e8eba516c2a7390972069448..0000000000000000000000000000000000000000 --- a/package/build/scripts-3.4/unattended-upgrade +++ /dev/null @@ -1,1468 +0,0 @@ -#!/usr/bin/python3 -# Copyright (c) 2005-2015 Canonical Ltd -# -# AUTHOR: -# Michael Vogt <mvo@ubuntu.com> -# -# This file is part of unattended-upgrades -# -# unattended-upgrades is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as published -# by the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# unattended-upgrades is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with unattended-upgrades; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# - -import copy -import datetime -import errno -import email.charset -import fcntl -import fnmatch -import gettext -import grp -import io -import locale -import logging -import re -import os -import select -import signal -import string -import subprocess -import sys - - -from email.message import Message -from gettext import gettext as _ -from io import StringIO -from optparse import ( - OptionParser, - SUPPRESS_HELP, -) - -from subprocess import ( - Popen, - PIPE, -) -import apt -import apt_inst -import apt_pkg - - -# the reboot required flag file used by packages -REBOOT_REQUIRED_FILE = "/var/run/reboot-required" -MAIL_BINARY = "/usr/bin/mail" -SENDMAIL_BINARY = "/usr/sbin/sendmail" -USERS = "/usr/bin/users" -# no py3 lsb_release in debian :/ -DISTRO_CODENAME = subprocess.check_output( - ["lsb_release", "-c", "-s"], universal_newlines=True).strip() -DISTRO_ID = subprocess.check_output( - ["lsb_release", "-i", "-s"], universal_newlines=True).strip() - -# progress information is written here -PROGRESS_LOG = "/var/run/unattended-upgrades.progress" -PID_FILE = "/var/run/unattended-upgrades.pid" - -# set from the sigint signal handler -SIGNAL_STOP_REQUEST = False - - -class LoggingDateTime: - """The date/time representation for the dpkg log file timestamps""" - LOG_DATE_TIME_FMT = "%Y-%m-%d %H:%M:%S" - - @classmethod - def as_string(cls): - """Return the current date and time as LOG_DATE_TIME_FMT string""" - return datetime.datetime.now().strftime(cls.LOG_DATE_TIME_FMT) - - @classmethod - def from_string(cls, logstr): - """Take a LOG_DATE_TIME_FMT string and return datetime object""" - return datetime.datetime.strptime(logstr, cls.LOG_DATE_TIME_FMT) - - -class UnknownMatcherError(ValueError): - pass - - -class UnattendedUpgradesCache(apt.Cache): - - def __init__(self, rootdir, allowed_origins): - apt.Cache.__init__(self, rootdir=rootdir) - self.allowed_origins = allowed_origins - # ensure we update the candidate versions - self.adjust_candidate_versions() - - def clear(self): - apt.Cache.clear(self) - # ensure we update the candidate versions - self.adjust_candidate_versions() - - def adjust_candidate_versions(self): - """ Adjust candidate versions to match highest allowed origin - - This adjusts the origin even if the candidate has a higher - version. This is needed when e.g. a package is available in - the security pocket but there is also a package in the - updates pocket with a higher version number - """ - for pkg in self: - # important! this avoids downgrades below - if not pkg.is_upgradable: - continue - # check if the candidate is already pointing to a allowed - # origin and if so, do not mess with it - if is_allowed_origin(pkg.candidate, self.allowed_origins): - continue - # check if we have a version in a allowed origin that is - # not the candidate - new_cand = None - for ver in pkg.versions: - # ignore versions that the user marked with priority < 100 - # (and ensure we have a python-apt that supports this) - if (hasattr(ver, "policy_priority") and - ver.policy_priority < 100): - logging.debug("ignoring ver '%s' with priority < 0" % ver) - continue - if is_allowed_origin(ver, self.allowed_origins): - # leave as soon as we have the highest new candidate - new_cand = ver - break - if new_cand and new_cand != pkg.candidate: - logging.debug("adjusting candidate version: '%s'" % new_cand) - pkg.candidate = new_cand - - -class LogInstallProgress(apt.progress.base.InstallProgress): - """ Install progress that writes to self.progress_log - (/var/run/unattended-upgrades.progress by default) - """ - - def __init__(self, logfile_dpkg, verbose=False, - progress_log="var/run/unattended-upgrades.progress"): - apt.progress.base.InstallProgress.__init__(self) - self.logfile_dpkg = logfile_dpkg - self.progress_log = os.path.join(apt_pkg.config.find_dir("Dir"), - progress_log) - self.verbose = verbose - self.output_logfd = None - - def status_change(self, pkg, percent, status): - with open(self.progress_log, "w") as f: - f.write(_("Progress: %s %% (%s)") % (percent, pkg)) - - def _fixup_fds(self): - required_fds = [0, 1, 2, # stdin, stdout, stderr - self.writefd, - self.write_stream.fileno(), - self.statusfd, - self.status_stream.fileno() - ] - # ensure that our required fds close on exec - for fd in required_fds[3:]: - old_flags = fcntl.fcntl(fd, fcntl.F_GETFD) - fcntl.fcntl(fd, fcntl.F_SETFD, old_flags | fcntl.FD_CLOEXEC) - # close all fds - proc_fd = "/proc/self/fd" - if os.path.exists(proc_fd): - error_count = 0 - for fdname in os.listdir(proc_fd): - try: - fd = int(fdname) - except Exception as e: - print("ERROR: can not get fd for '%s'" % fdname) - if fd in required_fds: - continue - try: - os.close(fd) - # print("closed: ", fd) - except OSError as e: - # there will be one fd that can not be closed - # as its the fd from pythons internal diropen() - # so its ok to ignore one close error - error_count += 1 - if error_count > 1: - print("ERROR: os.close(%s): %s" % (fd, e)) - - def _redirect_stdin(self): - REDIRECT_INPUT = os.devnull - fd = os.open(REDIRECT_INPUT, os.O_RDWR) - os.dup2(fd, 0) - - def _redirect_output(self): - # do not create log in dry-run mode, just output to stdout/stderr - if not apt_pkg.config.find_b("Debug::pkgDPkgPM", False): - logfd = self._get_logfile_dpkg_fd() - os.dup2(logfd, 1) - os.dup2(logfd, 2) - - def _get_logfile_dpkg_fd(self): - logfd = os.open( - self.logfile_dpkg, os.O_RDWR | os.O_APPEND | os.O_CREAT, 0o640) - try: - adm_gid = grp.getgrnam("adm").gr_gid - os.fchown(logfd, 0, adm_gid) - except (KeyError, OSError): - pass - return logfd - - def update_interface(self): - # call super class first - apt.progress.base.InstallProgress.update_interface(self) - self._do_verbose_output_if_needed() - - def _do_verbose_output_if_needed(self): - # if we are in debug mode, nothing to be more verbose about - if apt_pkg.config.find_b("Debug::pkgDPkgPM", False): - return - # handle verbose - if self.verbose: - if self.output_logfd is None: - self.output_logfd = os.open(self.logfile_dpkg, os.O_RDONLY) - os.lseek(self.output_logfd, 0, os.SEEK_END) - try: - select.select([self.output_logfd], [], [], 0) - except select.error as e: - if e.errno != errno.EINTR: - logging.exception("select failed") - # output to stdout in verbose mode only - os.write(1, os.read(self.output_logfd, 1024)) - - def _log_in_dpkg_log(self, msg): - logfd = self._get_logfile_dpkg_fd() - os.write(logfd, msg.encode("utf-8")) - os.close(logfd) - - def finish_update(self): - self._log_in_dpkg_log("Log ended: %s\n\n" - % LoggingDateTime.as_string()) - - def fork(self): - self._log_in_dpkg_log("Log started: %s\n" - % LoggingDateTime.as_string()) - pid = os.fork() - if pid == 0: - self._fixup_fds() - self._redirect_stdin() - self._redirect_output() - return pid - - -class Unlocked: - """ - Context manager for unlocking the apt lock while cache.commit() is run - """ - - def __enter__(self): - try: - apt_pkg.pkgsystem_unlock() - except: - pass - - def __exit__(self, exc_type, exc_value, exc_tb): - try: - apt_pkg.pkgsystem_unlock() - except: - pass - - -def is_dpkg_journal_dirty(): - """ - Return True if the dpkg journal is dirty - (similar to debSystem::CheckUpdates) - """ - d = os.path.join( - os.path.dirname(apt_pkg.config.find_file("Dir::State::status")), - "updates") - for f in os.listdir(d): - if re.match("[0-9]+", f): - return True - return False - - -def signal_handler(signal, frame): - logging.warning("SIGUSR1 received, will stop") - global SIGNAL_STOP_REQUEST - SIGNAL_STOP_REQUEST = True - - -def substitute(line): - """ substitude known mappings and return a new string - - Currently supported ${distro-release} - """ - mapping = {"distro_codename": get_distro_codename(), - "distro_id": get_distro_id()} - return string.Template(line).substitute(mapping) - - -def get_distro_codename(): - return DISTRO_CODENAME - - -def get_distro_id(): - return DISTRO_ID - - -def get_allowed_origins_legacy(): - """ legacy support for old Allowed-Origins var """ - allowed_origins = [] - for s in apt_pkg.config.value_list("Unattended-Upgrade::Allowed-Origins"): - # if there is a ":" use that as seperator, else use spaces - if ":" in s: - (distro_id, distro_codename) = s.split(':') - else: - (distro_id, distro_codename) = s.split() - # escape "," (see LP: #824856) - i wonder if there is a simpler way? - distro_id = re.sub(r'([^\\]),', r'\1\\,', distro_id) - distro_codename = re.sub(r'([^\\]),', r'\1\\,', distro_codename) - # convert to new format - allowed_origins.append("o=%s,a=%s" % (substitute(distro_id), - substitute(distro_codename))) - return allowed_origins - - -def get_allowed_origins(): - """ return a list of allowed origins from apt.conf - - This will take substitutions (like distro_id) into account. - """ - allowed_origins = get_allowed_origins_legacy() - for s in apt_pkg.config.value_list("Unattended-Upgrade::Origins-Pattern"): - allowed_origins.append(substitute(s)) - return allowed_origins - - -def match_whitelist_string(whitelist, origin): - """ - take a whitelist string in the form "origin=Debian,label=Debian-Security" - and match against the given python-apt origin. A empty whitelist string - never matches anything. - """ - whitelist = whitelist.strip() - if whitelist == "": - logging.warning("empty match string matches nothing") - return False - res = True - # make "\," the html quote equivalent - whitelist = whitelist.replace("\,", "%2C") - for token in whitelist.split(","): - # strip and unquote the "," back - (what, value) = [s.strip().replace("%2C", ",") - for s in token.split("=")] - # logging.debug("matching '%s'='%s' against '%s'" % ( - # what, value, origin)) - # support substitution here as well - value = substitute(value) - # first char is apt-cache policy output, send is the name - # in the Release file - if what in ("o", "origin"): - res &= fnmatch.fnmatch(origin.origin, value) - elif what in ("l", "label"): - res &= fnmatch.fnmatch(origin.label, value) - elif what in ("a", "suite", "archive"): - res &= fnmatch.fnmatch(origin.archive, value) - elif what in ("c", "component"): - res &= fnmatch.fnmatch(origin.component, value) - elif what in ("site",): - res &= fnmatch.fnmatch(origin.site, value) - elif what in ("n", "codename",): - res &= fnmatch.fnmatch(origin.codename, value) - else: - raise UnknownMatcherError( - "Unknown whitelist entry for macher '%s' (token '%s')" % ( - what, token)) - # logging.debug("matching '%s'='%s' against '%s'" % ( - # what, value, origin)) - return res - - -def cache_commit(cache, logfile_dpkg, verbose, iprogress=None): - """Commit the changes from the given cache to the system""" - # set debconf to NON_INTERACTIVE, redirect output - os.putenv("DEBIAN_FRONTEND", "noninteractive") - - # only act if there is anything to do (important to avoid writing - # empty log stanzas) - if len(cache.get_changes()) == 0: - return True, None - - error = None - res = False - if iprogress is None: - iprogress = LogInstallProgress(logfile_dpkg, verbose) - - try: - with Unlocked(): - res = cache.commit(install_progress=iprogress) - except SystemError as e: - error = e - if verbose: - logging.exception("Exception happened during upgrade.") - return res, error - - -def upgrade_normal(cache, logfile_dpkg, verbose): - res, error = cache_commit(cache, logfile_dpkg, verbose) - if res: - logging.info(_("All upgrades installed")) - else: - logging.error(_("Installing the upgrades failed!")) - logging.error(_("error message: '%s'"), error) - logging.error(_("dpkg returned a error! See '%s' for details"), - logfile_dpkg) - return res - - -def upgrade_in_minimal_steps(cache, pkgs_to_upgrade, blacklist, - whitelist, logfile_dpkg="", verbose=False): - - install_log = LogInstallProgress(logfile_dpkg, verbose) - install_log.progress_log += ".minimal-steps" - - # setup signal handler - signal.signal(signal.SIGUSR1, signal_handler) - - # double check any changes we do - allowed_origins = get_allowed_origins() - - # to upgrade contains the package names - to_upgrade = set(pkgs_to_upgrade) - while True: - # find smallest set - smallest_partition = to_upgrade - for pkgname in to_upgrade: - if SIGNAL_STOP_REQUEST: - logging.warning("SIGNAL received, stopping") - return True - pkg = cache[pkgname] - if pkg.is_upgradable: - pkg.mark_upgrade() - elif not pkg.is_installed: - pkg.mark_install() - else: - continue - # double check that we are not running into side effects like - # what could have been caused LP: #1020680 - if not check_changes_for_sanity(cache, allowed_origins, blacklist, - whitelist): - logging.info("While building minimal partition: " - "cache has not allowed changes") - cache.clear() - continue - changes = [p.name for p in cache.get_changes()] - if not changes: - continue - if len(changes) == 1: - logging.debug("found leaf package %s" % pkg.name) - smallest_partition = changes - break - if len(changes) < len(smallest_partition): - logging.debug("found partition of size %s (%s)" % ( - len(changes), changes)) - smallest_partition = changes - cache.clear() - - # write progress log information - if len(pkgs_to_upgrade) > 0: - percent = ((len(pkgs_to_upgrade) - len(to_upgrade)) / - float(len(pkgs_to_upgrade)) * 100.0) - else: - percent = 100.0 - install_log.status_change(pkg=",".join(smallest_partition), - percent=percent, - status="") - # apply changes - logging.debug("applying set %s" % smallest_partition) - rewind_cache(cache, [cache[name] for name in smallest_partition]) - - res, error = cache_commit(cache, logfile_dpkg, verbose, install_log) - if error: - if verbose: - logging.exception("Exception happened during upgrade.") - logging.error(_("Installing the upgrades failed!")) - logging.error(_("error message: '%s'"), error) - logging.error(_("dpkg returned a error! See '%s' for details"), - logfile_dpkg) - return False - to_upgrade = to_upgrade - set(smallest_partition) - logging.debug("left to upgrade %s" % to_upgrade) - if len(to_upgrade) == 0: - logging.info(_("All upgrades installed")) - break - return True - - -def is_allowed_origin(ver, allowed_origins): - if not ver: - return False - for origin in ver.origins: - for allowed in allowed_origins: - if match_whitelist_string(allowed, origin): - return True - return False - - -def is_pkgname_in_blacklist(pkgname, blacklist): - for blacklist_regexp in blacklist: - if re.match(blacklist_regexp, pkgname): - logging.debug("skipping blacklisted package '%s'" % pkgname) - return True - return False - - -def is_pkgname_in_whitelist(pkgname, whitelist): - # a empty whitelist means the user does not want to use this feature - if not whitelist: - return True - for whitelist_regexp in whitelist: - if re.match(whitelist_regexp, pkgname): - logging.debug("only upgrading the following package '%s'" % - pkgname) - return True - return False - - -def check_changes_for_sanity(cache, allowed_origins, blacklist, whitelist): - if cache._depcache.broken_count != 0: - return False - for pkg in cache: - if pkg.marked_delete: - logging.debug("pkg '%s' now marked delete" % pkg.name) - return False - if pkg.marked_install or pkg.marked_upgrade: - # apt will never fallback from a trusted to a untrusted - # origin so its good enough if we have a single trusted one - if not any([o.trusted for o in pkg.candidate.origins]): - logging.debug("pkg '%s' is untrusted" % pkg.name) - return False - if not is_allowed_origin(pkg.candidate, allowed_origins): - logging.debug("pkg '%s' not in allowed origin" % pkg.name) - return False - if is_pkgname_in_blacklist(pkg.name, blacklist): - logging.debug("pkg '%s' package has been blacklisted" % - pkg.name) - return False - # a strict whitelist will not allow any changes not in the - # whitelist, most people will want the relaxed whitelist - # that whitelists a package but pulls in the package - # dependencies - strict_whitelist = apt_pkg.config.find_b( - "Unattended-Upgrade::Package-Whitelist-Strict", False) - if (strict_whitelist and - not is_pkgname_in_whitelist(pkg.name, whitelist)): - - logging.debug("pkg '%s' package is not whitelisted" % - pkg.name) - return False - if pkg._pkg.selected_state == apt_pkg.SELSTATE_HOLD: - logging.debug("pkg '%s' is on hold" % pkg.name) - return False - # check if the package is unsafe to upgrade unattended - ignore_require_restart = apt_pkg.config.find_b( - "Unattended-Upgrade::IgnoreAppsRequireRestart", False) - upgrade_requires = pkg.candidate.record.get("Upgrade-Requires") - if (pkg.marked_upgrade and ignore_require_restart is False and - upgrade_requires == "app-restart"): - logging.debug("pkg '%s' requires app-restart, not safe to " - "upgrade unattended") - return False - return True - - -def pkgname_from_deb(debfile): - # FIXME: add error checking here - try: - control = apt_inst.DebFile(debfile).control.extractdata("control") - sections = apt_pkg.TagSection(control) - return sections["Package"] - except (IOError, SystemError) as e: - logging.error("failed to read deb file '%s' (%s)" % (debfile, e)) - # dumb fallback - return debfile.split("_")[0] - - -def get_md5sum_for_file_in_deb(deb_file, conf_file): - dpkg_cmd = ["dpkg-deb", "--fsys-tarfile", deb_file] - tar_cmd = ["tar", "-x", "-O", "-f", "-", "." + conf_file] - md5_cmd = ["md5sum"] - dpkg_p = Popen(dpkg_cmd, stdout=PIPE) - tar_p = Popen(tar_cmd, stdin=dpkg_p.stdout, stdout=PIPE, - universal_newlines=True) - md5_p = Popen(md5_cmd, stdin=tar_p.stdout, stdout=PIPE, - universal_newlines=True) - pkg_md5sum = md5_p.communicate()[0].split()[0] - return pkg_md5sum - - -# prefix is *only* needed for the build-in tests -def conffile_prompt(destFile, prefix=""): - logging.debug("check_conffile_prompt('%s')" % destFile) - pkgname = pkgname_from_deb(destFile) - - # get the conffiles for the /var/lib/dpkg/status file - status_file = apt_pkg.config.find("Dir::State::status") - tagfile = apt_pkg.TagFile(open(status_file, "r")) - conffiles = "" - for section in tagfile: - if section.get("Package") == pkgname: - logging.debug("found pkg: %s" % pkgname) - if "Conffiles" in section: - conffiles = section.get("Conffiles") - break - - # get conffile value from pkg, its ok if the new version - # does not have conffiles anymore - pkg_conffiles = "" - deb = apt_inst.DebFile(destFile) - try: - pkg_conffiles = deb.control.extractdata("conffiles").strip().decode( - "utf-8") - except LookupError as e: - logging.debug("No conffiles in deb '%s' (%s)" % (destFile, e)) - - # Conffiles: - # /etc/bash_completion.d/m-a c7780fab6b14d75ca54e11e992a6c11c - dpkg_status_conffiles = {} - for line in conffiles.splitlines(): - # ignore empty lines - line = line.strip() - if not line: - continue - # show what we do - logging.debug("conffile line: '%s'", line) - l = line.split() - conf_file = l[0] - md5 = l[1] - if len(l) > 2: - obs = l[2] - else: - obs = None - # ignore if conffile is obsolete - if obs == "obsolete": - continue - # ignore state "newconffile" until its clearer if there - # might be a dpkg prompt (LP: #936870) - if md5 == "newconffile": - continue - if not pkg_conffiles or conf_file not in pkg_conffiles.split("\n"): - logging.debug("'%s' not in package conffiles '%s'" % ( - conf_file, pkg_conffiles)) - continue - # record for later - dpkg_status_conffiles[conf_file] = md5 - - # test against the installed file, if the local file got deleted - # by the admin thats ok but it may still trigger a conffile prompt - # (see debian #788049) - current_md5 = "" - if os.path.exists(prefix + conf_file): - with open(prefix + conf_file, 'rb') as fb: - current_md5 = apt_pkg.md5sum(fb) - logging.debug("current md5: %s" % current_md5) - - # hashes are the same, no conffile prompt - if current_md5 == md5: - continue - # calculate md5sum from the deb (may take a bit) - pkg_md5sum = get_md5sum_for_file_in_deb(destFile, conf_file) - logging.debug("pkg_md5sum: %s" % pkg_md5sum) - # the md5sum in the deb is unchanged, this will not - # trigger a conffile prompt - if pkg_md5sum == md5: - continue - # if we made it to this point: - # current_md5 != pkg_md5sum != md5 - # and that will trigger a conffile prompt, we can - # stop processing at this point and just return True - return True - - # now check if there are conffiles in the pkg that where not there - # in the previous version in the dpkg status file - if pkg_conffiles: - for conf_file in pkg_conffiles.split("\n"): - if (conf_file not in dpkg_status_conffiles and - os.path.exists(prefix + conf_file)): - logging.debug("found conffile '%s' in new pkg but on dpkg " - "status" % conf_file) - pkg_md5sum = get_md5sum_for_file_in_deb(destFile, conf_file) - with open(prefix + conf_file, 'rb') as fp: - if pkg_md5sum != apt_pkg.md5sum(fp): - return True - return False - - -def dpkg_conffile_prompt(): - if "DPkg::Options" not in apt_pkg.config: - return True - options = apt_pkg.config.value_list("DPkg::Options") - for option in options: - option = option.strip() - if option in ["--force-confold", "--force-confnew"]: - return False - return True - - -def rewind_cache(cache, pkgs_to_upgrade): - """ set the cache back to the state with packages_to_upgrade """ - cache.clear() - for pkg2 in pkgs_to_upgrade: - pkg2.mark_install() - if cache.broken_count > 0: - raise AssertionError("rewind_cache created a broken cache") - - -def host(): - return os.uname()[1] - - -# *sigh* textwrap is nice, but it breaks "linux-image" into two -# seperate lines -def wrap(t, width=70, subsequent_indent=""): - out = "" - for s in t.split(): - if (len(out) - out.rfind("\n")) + len(s) > width: - out += "\n" + subsequent_indent - out += s + " " - return out - - -def setup_apt_listchanges(conf="/etc/apt/listchanges.conf"): - """ deal with apt-listchanges """ - # apt-listchanges will always send a mail if there is a mail address - # set in the config regardless of the frontend used, so set it to - # mail if we have a sendmail and to none if not (as it appears to - # not check if sendmail is there or not), debian bug #579733 - if os.path.exists(SENDMAIL_BINARY): - os.environ["APT_LISTCHANGES_FRONTEND"] = "mail" - else: - os.environ["APT_LISTCHANGES_FRONTEND"] = "none" - - -def _send_mail_using_mailx(from_address, to_address, subject, body): - # ensure that the body is a byte stream and that we do not - # break on encoding errors (the default error mode is "strict") - encoded_body = body.encode( - locale.getpreferredencoding(False), errors="replace") - # we use a binary pipe to stdin to ensure we do not break on - # unicode encoding errors (e.g. because the user is running a - # ascii only system like the buildds) - mail = subprocess.Popen( - [MAIL_BINARY, "-r", from_address, "-s", subject, to_address], - stdin=subprocess.PIPE, universal_newlines=False) - mail.stdin.write(encoded_body) - mail.stdin.close() - ret = mail.wait() - return ret - - -def _send_mail_using_sendmail(from_address, to_address, subject, body): - # format as a proper mail - msg = Message() - msg['Subject'] = subject - msg['From'] = from_address - msg['To'] = to_address - # order is important here, Message() first, then Charset() - # then msg.set_charset() - charset = email.charset.Charset("utf-8") - charset.body_encoding = email.charset.QP - msg.set_payload(body, charset) - # and send it away - sendmail = subprocess.Popen( - [SENDMAIL_BINARY, "-oi", "-t"], - stdin=subprocess.PIPE, universal_newlines=True) - sendmail.stdin.write(msg.as_string()) - sendmail.stdin.close() - ret = sendmail.wait() - return ret - - -def send_summary_mail(pkgs, res, pkgs_kept_back, mem_log, dpkg_log_content): - """ send mail (if configured in Unattended-Upgrade::Mail) """ - to_email = apt_pkg.config.find("Unattended-Upgrade::Mail", "") - if not to_email: - return - if not os.path.exists(MAIL_BINARY) and not os.path.exists(SENDMAIL_BINARY): - logging.error(_("No '/usr/bin/mail' or '/usr/sbin/sendmail'," - "can not send mail. " - "You probably want to install the 'mailx' package.")) - return - # if the operation was successful and the user has requested to get - # mails on on errors, just exit here - if (res and - # see Debian Bug #703621 - not re.search("^WARNING:", mem_log.getvalue(), re.MULTILINE) and - apt_pkg.config.find_b( - "Unattended-Upgrade::MailOnlyOnError", False)): - return - # Check if reboot-required flag is present - reboot_flag_str = _( - "[reboot required]") if os.path.isfile(REBOOT_REQUIRED_FILE) else "" - # Check if packages are kept on hold - hold_flag_str = _("[package on hold]") if pkgs_kept_back else "" - logging.debug("Sending mail to '%s'" % to_email) - subject = _( - "{hold_flag}{reboot_flag} unattended-upgrades result for " - "'{machine}': {result}").format( - hold_flag=hold_flag_str, reboot_flag=reboot_flag_str, - machine=host(), result=res).strip() - body = _("Unattended upgrade returned: %s\n\n") % res - if os.path.isfile(REBOOT_REQUIRED_FILE): - body += _( - "Warning: A reboot is required to complete this upgrade.\n\n") - if res: - body += _("Packages that were upgraded:\n") - else: - body += _("Packages that attempted to upgrade:\n") - body += " " + wrap(pkgs, 70, " ") - body += "\n" - if pkgs_kept_back: - body += _("Packages with upgradable origin but kept back:\n") - body += " " + wrap(" ".join(pkgs_kept_back), 70, " ") - body += "\n" - body += "\n" - if dpkg_log_content: - body += _("Package installation log:") + "\n" - body += dpkg_log_content - body += "\n\n" - body += _("Unattended-upgrades log:\n") - body += mem_log.getvalue() - - from_email = apt_pkg.config.find("Unattended-Upgrade::Sender", "root") - - if os.path.exists(SENDMAIL_BINARY): - ret = _send_mail_using_sendmail(from_email, to_email, subject, body) - elif os.path.exists(MAIL_BINARY): - ret = _send_mail_using_mailx(from_email, to_email, subject, body) - else: - raise AssertionError( - "This should never be reached, if we are here we either " - "have sendmail or mailx. Please report this as a bug.") - logging.debug("mail returned: %s", ret) - - -def do_install(cache, pkgs_to_upgrade, blacklisted_pkgs, whitelisted_pkgs, - options, logfile_dpkg): - # set debconf to NON_INTERACTIVE, redirect output - os.putenv("DEBIAN_FRONTEND", "noninteractive") - setup_apt_listchanges() - - logging.info(_("Writing dpkg log to '%s'"), logfile_dpkg) - - marked_delete = [pkg for pkg in cache.get_changes() if pkg.marked_delete] - if marked_delete: - raise AssertionError( - "Internal error. The following packages are marked for " - "removal:%s" % "".join([pkg.name for pkg in marked_delete])) - - pkg_install_success = False - try: - if (options.minimal_upgrade_steps or - # COMPAT with the mispelling - apt_pkg.config.find_b( - "Unattended-Upgrades::MinimalSteps", False) or - apt_pkg.config.find_b( - "Unattended-Upgrade::MinimalSteps", False)): - pidf = os.path.join(apt_pkg.config.find_dir("Dir"), - "var", "run", "unattended-upgrades.pid") - with open(pidf, "w") as fp: - fp.write("%s" % os.getpid()) - # try upgrade all "pkgs" in minimal steps - pkg_install_success = upgrade_in_minimal_steps( - cache, [pkg.name for pkg in pkgs_to_upgrade], - blacklisted_pkgs, whitelisted_pkgs, logfile_dpkg, - options.verbose or options.debug) - else: - pkg_install_success = upgrade_normal( - cache, logfile_dpkg, options.verbose or options.debug) - except Exception as e: - # print unhandled exceptions here this way, while stderr is redirected - os.write(2, ("Exception: %s\n" % e).encode('utf-8')) - pkg_install_success = False - - return pkg_install_success - - -def _setup_alternative_rootdir(rootdir): - # clear system unattended-upgrade stuff - apt_pkg.config.clear("Unattended-Upgrade") - # read rootdir (taken from apt.Cache, but we need to run it - # here before the cache gets initialized - if os.path.exists(rootdir + "/etc/apt/apt.conf"): - apt_pkg.read_config_file(apt_pkg.config, - rootdir + "/etc/apt/apt.conf") - if os.path.isdir(rootdir + "/etc/apt/apt.conf.d"): - apt_pkg.read_config_dir(apt_pkg.config, - rootdir + "/etc/apt/apt.conf.d") - logdir = os.path.join(rootdir, "var", "log", "unattended-upgrades") - if not os.path.exists(logdir): - os.makedirs(logdir) - apt.apt_pkg.config.set("Unattended-Upgrade::LogDir", logdir) - - -def _get_logdir(): - logdir = apt_pkg.config.find_dir( - "Unattended-Upgrade::LogDir", - # COMPAT only - apt_pkg.config.find_dir("APT::UnattendedUpgrades::LogDir", - "/var/log/unattended-upgrades/")) - return logdir - - -def _setup_logging(options): - # ensure this is run only once - if len(logging.root.handlers) > 0: - return - - # init the logging - logdir = _get_logdir() - logfile = os.path.join( - logdir, - apt_pkg.config.find( - "Unattended-Upgrade::LogFile", - # COMPAT only - apt_pkg.config.find("APT::UnattendedUpgrades::LogFile", - "unattended-upgrades.log"))) - if not options.dry_run and not os.path.exists(logdir): - os.makedirs(logdir) - - logging.basicConfig(level=logging.INFO, - format='%(asctime)s %(levelname)s %(message)s', - filename=logfile) - # additional logging - logger = logging.getLogger() - mem_log = StringIO() - if options.apt_debug: - apt_pkg.config.set("Debug::pkgProblemResolver", "1") - apt_pkg.config.set("Debug::pkgDepCache::AutoInstall", "1") - if options.debug: - logger.setLevel(logging.DEBUG) - stdout_handler = logging.StreamHandler(sys.stdout) - logger.addHandler(stdout_handler) - elif options.verbose: - logger.setLevel(logging.INFO) - stdout_handler = logging.StreamHandler(sys.stdout) - logger.addHandler(stdout_handler) - if apt_pkg.config.find("Unattended-Upgrade::Mail", ""): - mem_log_handler = logging.StreamHandler(mem_log) - logger.addHandler(mem_log_handler) - return mem_log - - -def get_blacklisted_pkgs(): - return apt_pkg.config.value_list("Unattended-Upgrade::Package-Blacklist") - - -def get_whitelisted_pkgs(): - return apt_pkg.config.value_list("Unattended-Upgrade::Package-Whitelist") - - -def logged_in_users(): - """Return a list of logged in users""" - # the "users" command always returns a single line with: - # "user1, user1, user2" - users = subprocess.check_output( - USERS, universal_newlines=True).rstrip('\n') - return set(users.split()) - - -def reboot_if_requested_and_needed(shutdown_lock=0): - """auto-reboot (if required and the config for this is set)""" - if not os.path.exists(REBOOT_REQUIRED_FILE): - return - if not apt_pkg.config.find_b( - "Unattended-Upgrade::Automatic-Reboot", False): - return - # see if we need to check for logged in users - if not apt_pkg.config.find_b( - "Unattended-Upgrade::Automatic-Reboot-WithUsers", True): - users = logged_in_users() - if users: - msg = gettext.ngettext( - "Found %s, but not rebooting because %s is logged in." % ( - REBOOT_REQUIRED_FILE, users), - "Found %s, but not rebooting because %s are logged in." % ( - REBOOT_REQUIRED_FILE, users), - len(users)) - logging.warning(msg) - return - # reboot at the specified time - when = apt_pkg.config.find( - "Unattended-Upgrade::Automatic-Reboot-Time", "now") - if shutdown_lock > 0: - os.close(shutdown_lock) - logging.warning("Found %s, rebooting" % REBOOT_REQUIRED_FILE) - subprocess.call(["/sbin/shutdown", "-r", when]) - - -def write_stamp_file(): - statedir = os.path.join(apt_pkg.config.find_dir("Dir::State"), "periodic") - with open(os.path.join(statedir, "unattended-upgrades-stamp"), "w"): - pass - - -def try_to_upgrade(pkg, pkgs_to_upgrade, pkgs_kept_back, cache, - allowed_origins, blacklisted_pkgs, whitelisted_pkgs): - - try: - pkg.mark_upgrade() - if check_changes_for_sanity(cache, allowed_origins, - blacklisted_pkgs, whitelisted_pkgs): - # add to packages to upgrade - pkgs_to_upgrade.append(pkg) - # re-eval pkgs_kept_back as the resolver may fail to - # directly upgrade a pkg, but that may work during - # a subsequent operation, see debian bug #639840 - for pkgname in pkgs_kept_back: - if (cache[pkgname].marked_install or - cache[pkgname].marked_upgrade): - pkgs_kept_back.remove(pkgname) - pkgs_to_upgrade.append(cache[pkgname]) - else: - logging.debug("sanity check failed") - rewind_cache(cache, pkgs_to_upgrade) - pkgs_kept_back.append(pkg.name) - except SystemError as e: - # can't upgrade - logging.warning( - _("package '%s' upgradable but fails to " - "be marked for upgrade (%s)"), pkg.name, e) - rewind_cache(cache, pkgs_to_upgrade) - pkgs_kept_back.append(pkg.name) - - -def calculate_upgradable_pkgs(cache, options, allowed_origins, - blacklisted_pkgs, whitelisted_pkgs): - pkgs_to_upgrade = [] - pkgs_kept_back = [] - - # now do the actual upgrade - for pkg in cache: - if options.debug and pkg.is_upgradable: - logging.debug("Checking: %s (%s)" % ( - pkg.name, getattr(pkg.candidate, "origins", []))) - if (pkg.is_upgradable and - not is_pkgname_in_blacklist(pkg.name, blacklisted_pkgs) and - is_pkgname_in_whitelist(pkg.name, whitelisted_pkgs) and - is_allowed_origin(pkg.candidate, allowed_origins)): - - try_to_upgrade(pkg, - pkgs_to_upgrade, - pkgs_kept_back, - cache, - allowed_origins, - blacklisted_pkgs, - whitelisted_pkgs) - return pkgs_to_upgrade, pkgs_kept_back - - -def get_dpkg_log_content(logfile_dpkg, install_start_time): - logging.debug("Extracting content from '%s' since '%s'" % ( - logfile_dpkg, install_start_time)) - content = [] - found_start = False - with io.open(logfile_dpkg, encoding='utf-8') as fp: - # read until we find the last "Log started: " - for line in fp.readlines(): - # scan for the first entry we need (minimal-step mode - # creates a new stanza for each individual install) - if not found_start and line.startswith("Log started: "): - stanza_start = LoggingDateTime.from_string( - line[len("Log started: "):-1]) - if stanza_start >= install_start_time: - found_start = True - if found_start: - content.append(line) - return "".join(content) - - -def get_auto_removable(cache): - return set([pkg.name for pkg in cache - if pkg.is_auto_removable]) - - -def do_auto_remove(cache, auto_removable, logfile_dpkg, verbose=False): - if not auto_removable: - return True - - for pkgname in auto_removable: - logging.debug("marking %s for remove" % pkgname) - cache[pkgname].mark_delete() - logging.info(_("Packages that are auto removed: '%s'"), - " ".join(sorted(auto_removable))) - - # do it - res, error = cache_commit(cache, logfile_dpkg, verbose) - if res: - logging.info(_("Packages were successfully auto-removed")) - else: - logging.error(_("Auto-removing the packages failed!")) - logging.error(_("Error message: '%s'"), error) - logging.error(_("dpkg returned an error! See '%s' for details"), - logfile_dpkg) - return res - - -def clean_downloaded_packages(fetcher): - archivedir = os.path.dirname( - apt_pkg.config.find_dir("Dir::Cache::archives")) - for item in fetcher.items: - if os.path.dirname(os.path.abspath(item.destfile)) == archivedir: - try: - os.unlink(item.destfile) - except OSError: - pass - - -def main(options, rootdir=""): - # useful for testing - if rootdir: - _setup_alternative_rootdir(rootdir) - - # setup logging - mem_log = _setup_logging(options) - - # format (origin, archive), e.g. ("Ubuntu","dapper-security") - allowed_origins = get_allowed_origins() - - # pkgs that are (for some reason) not safe to install - blacklisted_pkgs = get_blacklisted_pkgs() - logging.info(_("Initial blacklisted packages: %s"), - " ".join(blacklisted_pkgs)) - - # install only these packages regardless of other upgrades available - whitelisted_pkgs = get_whitelisted_pkgs() - logging.info(_("Initial whitelisted packages: %s"), - " ".join(whitelisted_pkgs)) - - logging.info(_("Starting unattended upgrades script")) - - # display available origin - logging.info(_("Allowed origins are: %s"), allowed_origins) - - # see debian #776752 - install_start_time = datetime.datetime.now().replace(microsecond=0) - - # check if the journal is dirty and if so, take emergceny action - # the alternative is to leave the system potentially unsecure until - # the user comes in and fixes - if (is_dpkg_journal_dirty() and - apt_pkg.config.find_b( - "Unattended-Upgrade::AutoFixInterruptedDpkg", True)): - # ensure the dpkg database is not already locked (LP: #754330) - admindir = os.path.dirname(apt_pkg.config.find("Dir::State::Status")) - lockfd = apt_pkg.get_lock(os.path.join(admindir, "lock"), False) - if lockfd > 0: - logging.warning( - _("Unclean dpkg state detected, trying to correct")) - print(_("Unclean dpkg state detected, trying to correct")) - env = copy.copy(os.environ) - env["DEBIAN_FRONTEND"] = "noninteractive" - try: - os.close(lockfd) - output = subprocess.check_output( - ["dpkg", "--force-confold", "--configure", "-a"], - env=env, - universal_newlines=True) - except subprocess.CalledProcessError as e: - output = e.output - logging.warning(_("dpkg --configure -a output:\n%s"), output) - else: - logging.debug("Unclean dpkg state, but locked, another package " - "manager working?") - - # check and get lock - try: - apt_pkg.pkgsystem_lock() - except SystemError as e: - logging.error(_("Lock could not be acquired (another package " - "manager running?)")) - print(_("Cache lock can not be acquired, exiting")) - sys.exit(1) - - # get a cache - cache = UnattendedUpgradesCache(rootdir=rootdir, - allowed_origins=allowed_origins) - if cache._depcache.broken_count > 0: - print(_("Cache has broken packages, exiting")) - logging.error(_("Cache has broken packages, exiting")) - sys.exit(1) - - # FIXME: make this into a ContextManager - # be nice when calculating the upgrade as its pretty CPU intensive - old_priority = os.nice(0) - try: - # Check that we will be able to restore the priority - os.nice(-1) - os.nice(20) - except OSError as e: - if e.errno in (errno.EPERM, errno.EACCES): - pass - else: - raise - - # speed things up with latest apt - actiongroup = apt_pkg.ActionGroup(cache._depcache) - actiongroup # pyflakes - - # find out about the packages that are upgradable (in a allowed_origin) - pkgs_to_upgrade, pkgs_kept_back = calculate_upgradable_pkgs( - cache, options, allowed_origins, blacklisted_pkgs, whitelisted_pkgs) - pkgs_to_upgrade.sort(key=lambda p: p.name) - pkgs = "\n".join([pkg.name for pkg in pkgs_to_upgrade]) - logging.debug("pkgs that look like they should be upgraded: %s" % pkgs) - - # FIXME: make this into a ContextManager - # stop being nice - os.nice(old_priority - os.nice(0)) - - # download what looks good - if options.debug: - fetcher = apt_pkg.Acquire(apt.progress.text.AcquireProgress()) - else: - fetcher = apt_pkg.Acquire() - list = apt_pkg.SourceList() - list.read_main_list() - recs = cache._records - pm = apt_pkg.PackageManager(cache._depcache) - try: - pm.get_archives(fetcher, list, recs) - except SystemError as e: - logging.error(_("GetArchives() failed: '%s'"), e) - res = fetcher.run() - logging.debug("fetch.run() result: %s", res) - - if dpkg_conffile_prompt(): - # now check the downloaded debs for conffile conflicts and build - # a blacklist - for item in fetcher.items: - logging.debug("%s" % item) - if item.status == item.STAT_ERROR: - print(_("An error occurred: '%s'") % item.error_text) - logging.error(_("An error occurred: '%s'"), item.error_text) - if not item.complete: - print(_("The URI '%s' failed to download, aborting") % - item.desc_uri) - logging.error(_("The URI '%s' failed to download, aborting"), - item.desc_uri) - sys.exit(1) - if not os.path.exists(item.destfile): - print(_("Download finished, but file '%s' not there?!?") % - item.destfile) - logging.error("Download finished, but file '%s' not " - "there?!?", item.destfile) - sys.exit(1) - if not item.is_trusted: - blacklisted_pkgs.append(pkgname_from_deb(item.destfile)) - if conffile_prompt(item.destfile): - # skip package (means to re-run the whole marking again - # and making sure that the package will not be pulled in by - # some other package again!) - # - # print to stdout to ensure that this message is part of - # the cron mail (only if no summary mail is requested) - email = apt_pkg.config.find("Unattended-Upgrade::Mail", "") - if not email: - print(_("Package '%s' has conffile prompt and needs " - "to be upgraded manually") % - pkgname_from_deb(item.destfile)) - # log to the logfile - logging.warning(_("Package '%s' has conffile prompt and " - "needs to be upgraded manually"), - pkgname_from_deb(item.destfile)) - blacklisted_pkgs.append(pkgname_from_deb(item.destfile)) - pkgs_kept_back.append(pkgname_from_deb(item.destfile)) - - # redo the selection about the packages to upgrade based on the new - # blacklist - logging.debug("blacklist: %s" % blacklisted_pkgs) - # whitelist - logging.debug("whitelist: %s" % whitelisted_pkgs) - # find out about the packages that are upgradable (in a allowed_origin) - if len(blacklisted_pkgs) > 0 or len(whitelisted_pkgs) > 0: - cache.clear() - old_pkgs_to_upgrade = pkgs_to_upgrade[:] - pkgs_to_upgrade = [] - for pkg in old_pkgs_to_upgrade: - logging.debug("Checking the black and whitelist: %s" % - (pkg.name)) - pkg.mark_upgrade() - if check_changes_for_sanity(cache, - allowed_origins, - blacklisted_pkgs, - whitelisted_pkgs): - pkgs_to_upgrade.append(pkg) - else: - if not (pkg.name in pkgs_kept_back): - pkgs_kept_back.append(pkg.name) - logging.info(_("package '%s' not upgraded"), pkg.name) - cache.clear() - for pkg2 in pkgs_to_upgrade: - pkg2.mark_upgrade() - else: - logging.debug("dpkg is configured not to cause conffile prompts") - - # auto-removal - previous_autoremovals = get_auto_removable(cache) - if apt_pkg.config.find_b( - "Unattended-Upgrade::Remove-Unused-Dependencies", False): - pending_autoremovals = previous_autoremovals - else: - pending_autoremovals = [] - - # exit if there is nothing to do and nothing to report - if (len(pending_autoremovals) == 0 and - len(pkgs_to_upgrade) == 0 and - len(pkgs_kept_back) == 0): - logging.info(_("No packages found that can be upgraded unattended " - "and no pending auto-removals")) - # FIXME: DRY violation, write_stamp_file() is used below as well - write_stamp_file() - # check if we couldn't reboot on previous run because - # a user was logged-in at this time - reboot_if_requested_and_needed() - return - - # check if its configured for install on shutdown, if so, the - # environment UNATTENDED_UPGRADES_FORCE_INSTALL_ON_SHUTDOWN will - # be set by the unatteded-upgrades-shutdown script - if ("UNATTENDED_UPGRADES_FORCE_INSTALL_ON_SHUTDOWN" not in os.environ and - apt_pkg.config.find_b( - "Unattended-Upgrade::InstallOnShutdown", False)): - logger = logging.getLogger() - logger.debug("Configured to install on shutdown, so exiting now") - return - - # check if we are in dry-run mode - if options.dry_run: - logging.info("Option --dry-run given, *not* performing real actions") - apt_pkg.config.set("Debug::pkgDPkgPM", "1") - - # do the install based on the new list of pkgs - pkgs = " ".join([pkg.name for pkg in pkgs_to_upgrade]) - logging.info(_("Packages that will be upgraded: %s"), pkgs) - - # get log - logfile_dpkg = os.path.join(_get_logdir(), 'unattended-upgrades-dpkg.log') - - # only perform install step if we actually have packages to install - pkg_install_success = True - shutdown_lock = -1 - if len(pkgs_to_upgrade) > 0: - # lock for the shutdown check - its fine if the system - # is shutdown while downloading but not so much while installing - shutdown_lock = apt_pkg.get_lock("/var/run/unattended-upgrades.lock") - # do install - pkg_install_success = do_install(cache, - pkgs_to_upgrade, - blacklisted_pkgs, - whitelisted_pkgs, - options, - logfile_dpkg) - - # now check if any auto-removing needs to be done - cache = UnattendedUpgradesCache( - rootdir=rootdir, allowed_origins=allowed_origins) - if cache._depcache.broken_count > 0: - print(_("Cache has broken packages, exiting")) - logging.error(_("Cache has broken packages, exiting")) - sys.exit(1) - - # the user wants *all* auto-removals to be removed - if apt_pkg.config.find_b( - "Unattended-Upgrade::Remove-Unused-Dependencies", False): - auto_removals = get_auto_removable(cache) - pkg_install_success &= do_auto_remove( - cache, auto_removals, logfile_dpkg, - options.verbose or options.debug) - # the user wants *only new* auto-removals to be removed - elif apt_pkg.config.find_b( - "Unattended-Upgrade::Remove-New-Unused-Dependencies", True): - # calculate the new auto-removals - new_pending_autoremovals = get_auto_removable(cache) - auto_removals = new_pending_autoremovals - previous_autoremovals - pkg_install_success &= do_auto_remove( - cache, auto_removals, logfile_dpkg, - options.verbose or options.debug) - - logging.debug("InstCount=%i DelCount=%i BrokenCount=%i" - % (cache._depcache.inst_count, - cache._depcache.del_count, - cache._depcache.broken_count)) - - # send a mail (if needed) - if not options.dry_run: - log_content = get_dpkg_log_content(logfile_dpkg, install_start_time) - send_summary_mail( - pkgs, pkg_install_success, pkgs_kept_back, mem_log, log_content) - - # clean after success install (if needed) - keep_key = "Unattended-Upgrade::Keep-Debs-After-Install" - if (not apt_pkg.config.find_b(keep_key, False) and - not options.dry_run and - pkg_install_success): - clean_downloaded_packages(fetcher) - - # FIXME: DRY violation, write_stamp_file() is used above as well - # write timestamp file - write_stamp_file() - - # check if the user wants a reboot - if not options.dry_run: - reboot_if_requested_and_needed(shutdown_lock) - - -if __name__ == "__main__": - localesApp = "unattended-upgrades" - localesDir = "/usr/share/locale" - gettext.bindtextdomain(localesApp, localesDir) - gettext.textdomain(localesApp) - - # this ensures the commandline is logged in /var/log/apt/history.log - apt_pkg.config.set("Commandline::AsString", " ".join(sys.argv)) - - # init the options - parser = OptionParser() - parser.add_option("-d", "--debug", - action="store_true", default=False, - help=_("print debug messages")) - parser.add_option("", "--apt-debug", - action="store_true", default=False, - help=_("make apt/libapt print verbose debug messages")) - parser.add_option("-v", "--verbose", - action="store_true", default=False, - help=_("print info messages")) - parser.add_option("", "--dry-run", - action="store_true", default=False, - help=_("Simulation, download but do not install")) - parser.add_option("", "--minimal-upgrade-steps", - action="store_true", default=False, - help=_("Upgrade in minimal steps (and allow " - "interrupting with SIGINT")) - parser.add_option("", "--minimal_upgrade_steps", - action="store_true", - help=SUPPRESS_HELP, - default=False) - (options, args) = parser.parse_args() - - if os.getuid() != 0: - print(_("You need to be root to run this application")) - sys.exit(1) - - # ensure that we are not killed when the terminal goes away e.g. on - # shutdown - signal.signal(signal.SIGHUP, signal.SIG_IGN) - - # run the main code - main(options) diff --git a/package/build/scripts-3.5/unattended-upgrade b/package/build/scripts-3.5/unattended-upgrade deleted file mode 100755 index c071d431fd8d4ff5e8eba516c2a7390972069448..0000000000000000000000000000000000000000 --- a/package/build/scripts-3.5/unattended-upgrade +++ /dev/null @@ -1,1468 +0,0 @@ -#!/usr/bin/python3 -# Copyright (c) 2005-2015 Canonical Ltd -# -# AUTHOR: -# Michael Vogt <mvo@ubuntu.com> -# -# This file is part of unattended-upgrades -# -# unattended-upgrades is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as published -# by the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# unattended-upgrades is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with unattended-upgrades; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# - -import copy -import datetime -import errno -import email.charset -import fcntl -import fnmatch -import gettext -import grp -import io -import locale -import logging -import re -import os -import select -import signal -import string -import subprocess -import sys - - -from email.message import Message -from gettext import gettext as _ -from io import StringIO -from optparse import ( - OptionParser, - SUPPRESS_HELP, -) - -from subprocess import ( - Popen, - PIPE, -) -import apt -import apt_inst -import apt_pkg - - -# the reboot required flag file used by packages -REBOOT_REQUIRED_FILE = "/var/run/reboot-required" -MAIL_BINARY = "/usr/bin/mail" -SENDMAIL_BINARY = "/usr/sbin/sendmail" -USERS = "/usr/bin/users" -# no py3 lsb_release in debian :/ -DISTRO_CODENAME = subprocess.check_output( - ["lsb_release", "-c", "-s"], universal_newlines=True).strip() -DISTRO_ID = subprocess.check_output( - ["lsb_release", "-i", "-s"], universal_newlines=True).strip() - -# progress information is written here -PROGRESS_LOG = "/var/run/unattended-upgrades.progress" -PID_FILE = "/var/run/unattended-upgrades.pid" - -# set from the sigint signal handler -SIGNAL_STOP_REQUEST = False - - -class LoggingDateTime: - """The date/time representation for the dpkg log file timestamps""" - LOG_DATE_TIME_FMT = "%Y-%m-%d %H:%M:%S" - - @classmethod - def as_string(cls): - """Return the current date and time as LOG_DATE_TIME_FMT string""" - return datetime.datetime.now().strftime(cls.LOG_DATE_TIME_FMT) - - @classmethod - def from_string(cls, logstr): - """Take a LOG_DATE_TIME_FMT string and return datetime object""" - return datetime.datetime.strptime(logstr, cls.LOG_DATE_TIME_FMT) - - -class UnknownMatcherError(ValueError): - pass - - -class UnattendedUpgradesCache(apt.Cache): - - def __init__(self, rootdir, allowed_origins): - apt.Cache.__init__(self, rootdir=rootdir) - self.allowed_origins = allowed_origins - # ensure we update the candidate versions - self.adjust_candidate_versions() - - def clear(self): - apt.Cache.clear(self) - # ensure we update the candidate versions - self.adjust_candidate_versions() - - def adjust_candidate_versions(self): - """ Adjust candidate versions to match highest allowed origin - - This adjusts the origin even if the candidate has a higher - version. This is needed when e.g. a package is available in - the security pocket but there is also a package in the - updates pocket with a higher version number - """ - for pkg in self: - # important! this avoids downgrades below - if not pkg.is_upgradable: - continue - # check if the candidate is already pointing to a allowed - # origin and if so, do not mess with it - if is_allowed_origin(pkg.candidate, self.allowed_origins): - continue - # check if we have a version in a allowed origin that is - # not the candidate - new_cand = None - for ver in pkg.versions: - # ignore versions that the user marked with priority < 100 - # (and ensure we have a python-apt that supports this) - if (hasattr(ver, "policy_priority") and - ver.policy_priority < 100): - logging.debug("ignoring ver '%s' with priority < 0" % ver) - continue - if is_allowed_origin(ver, self.allowed_origins): - # leave as soon as we have the highest new candidate - new_cand = ver - break - if new_cand and new_cand != pkg.candidate: - logging.debug("adjusting candidate version: '%s'" % new_cand) - pkg.candidate = new_cand - - -class LogInstallProgress(apt.progress.base.InstallProgress): - """ Install progress that writes to self.progress_log - (/var/run/unattended-upgrades.progress by default) - """ - - def __init__(self, logfile_dpkg, verbose=False, - progress_log="var/run/unattended-upgrades.progress"): - apt.progress.base.InstallProgress.__init__(self) - self.logfile_dpkg = logfile_dpkg - self.progress_log = os.path.join(apt_pkg.config.find_dir("Dir"), - progress_log) - self.verbose = verbose - self.output_logfd = None - - def status_change(self, pkg, percent, status): - with open(self.progress_log, "w") as f: - f.write(_("Progress: %s %% (%s)") % (percent, pkg)) - - def _fixup_fds(self): - required_fds = [0, 1, 2, # stdin, stdout, stderr - self.writefd, - self.write_stream.fileno(), - self.statusfd, - self.status_stream.fileno() - ] - # ensure that our required fds close on exec - for fd in required_fds[3:]: - old_flags = fcntl.fcntl(fd, fcntl.F_GETFD) - fcntl.fcntl(fd, fcntl.F_SETFD, old_flags | fcntl.FD_CLOEXEC) - # close all fds - proc_fd = "/proc/self/fd" - if os.path.exists(proc_fd): - error_count = 0 - for fdname in os.listdir(proc_fd): - try: - fd = int(fdname) - except Exception as e: - print("ERROR: can not get fd for '%s'" % fdname) - if fd in required_fds: - continue - try: - os.close(fd) - # print("closed: ", fd) - except OSError as e: - # there will be one fd that can not be closed - # as its the fd from pythons internal diropen() - # so its ok to ignore one close error - error_count += 1 - if error_count > 1: - print("ERROR: os.close(%s): %s" % (fd, e)) - - def _redirect_stdin(self): - REDIRECT_INPUT = os.devnull - fd = os.open(REDIRECT_INPUT, os.O_RDWR) - os.dup2(fd, 0) - - def _redirect_output(self): - # do not create log in dry-run mode, just output to stdout/stderr - if not apt_pkg.config.find_b("Debug::pkgDPkgPM", False): - logfd = self._get_logfile_dpkg_fd() - os.dup2(logfd, 1) - os.dup2(logfd, 2) - - def _get_logfile_dpkg_fd(self): - logfd = os.open( - self.logfile_dpkg, os.O_RDWR | os.O_APPEND | os.O_CREAT, 0o640) - try: - adm_gid = grp.getgrnam("adm").gr_gid - os.fchown(logfd, 0, adm_gid) - except (KeyError, OSError): - pass - return logfd - - def update_interface(self): - # call super class first - apt.progress.base.InstallProgress.update_interface(self) - self._do_verbose_output_if_needed() - - def _do_verbose_output_if_needed(self): - # if we are in debug mode, nothing to be more verbose about - if apt_pkg.config.find_b("Debug::pkgDPkgPM", False): - return - # handle verbose - if self.verbose: - if self.output_logfd is None: - self.output_logfd = os.open(self.logfile_dpkg, os.O_RDONLY) - os.lseek(self.output_logfd, 0, os.SEEK_END) - try: - select.select([self.output_logfd], [], [], 0) - except select.error as e: - if e.errno != errno.EINTR: - logging.exception("select failed") - # output to stdout in verbose mode only - os.write(1, os.read(self.output_logfd, 1024)) - - def _log_in_dpkg_log(self, msg): - logfd = self._get_logfile_dpkg_fd() - os.write(logfd, msg.encode("utf-8")) - os.close(logfd) - - def finish_update(self): - self._log_in_dpkg_log("Log ended: %s\n\n" - % LoggingDateTime.as_string()) - - def fork(self): - self._log_in_dpkg_log("Log started: %s\n" - % LoggingDateTime.as_string()) - pid = os.fork() - if pid == 0: - self._fixup_fds() - self._redirect_stdin() - self._redirect_output() - return pid - - -class Unlocked: - """ - Context manager for unlocking the apt lock while cache.commit() is run - """ - - def __enter__(self): - try: - apt_pkg.pkgsystem_unlock() - except: - pass - - def __exit__(self, exc_type, exc_value, exc_tb): - try: - apt_pkg.pkgsystem_unlock() - except: - pass - - -def is_dpkg_journal_dirty(): - """ - Return True if the dpkg journal is dirty - (similar to debSystem::CheckUpdates) - """ - d = os.path.join( - os.path.dirname(apt_pkg.config.find_file("Dir::State::status")), - "updates") - for f in os.listdir(d): - if re.match("[0-9]+", f): - return True - return False - - -def signal_handler(signal, frame): - logging.warning("SIGUSR1 received, will stop") - global SIGNAL_STOP_REQUEST - SIGNAL_STOP_REQUEST = True - - -def substitute(line): - """ substitude known mappings and return a new string - - Currently supported ${distro-release} - """ - mapping = {"distro_codename": get_distro_codename(), - "distro_id": get_distro_id()} - return string.Template(line).substitute(mapping) - - -def get_distro_codename(): - return DISTRO_CODENAME - - -def get_distro_id(): - return DISTRO_ID - - -def get_allowed_origins_legacy(): - """ legacy support for old Allowed-Origins var """ - allowed_origins = [] - for s in apt_pkg.config.value_list("Unattended-Upgrade::Allowed-Origins"): - # if there is a ":" use that as seperator, else use spaces - if ":" in s: - (distro_id, distro_codename) = s.split(':') - else: - (distro_id, distro_codename) = s.split() - # escape "," (see LP: #824856) - i wonder if there is a simpler way? - distro_id = re.sub(r'([^\\]),', r'\1\\,', distro_id) - distro_codename = re.sub(r'([^\\]),', r'\1\\,', distro_codename) - # convert to new format - allowed_origins.append("o=%s,a=%s" % (substitute(distro_id), - substitute(distro_codename))) - return allowed_origins - - -def get_allowed_origins(): - """ return a list of allowed origins from apt.conf - - This will take substitutions (like distro_id) into account. - """ - allowed_origins = get_allowed_origins_legacy() - for s in apt_pkg.config.value_list("Unattended-Upgrade::Origins-Pattern"): - allowed_origins.append(substitute(s)) - return allowed_origins - - -def match_whitelist_string(whitelist, origin): - """ - take a whitelist string in the form "origin=Debian,label=Debian-Security" - and match against the given python-apt origin. A empty whitelist string - never matches anything. - """ - whitelist = whitelist.strip() - if whitelist == "": - logging.warning("empty match string matches nothing") - return False - res = True - # make "\," the html quote equivalent - whitelist = whitelist.replace("\,", "%2C") - for token in whitelist.split(","): - # strip and unquote the "," back - (what, value) = [s.strip().replace("%2C", ",") - for s in token.split("=")] - # logging.debug("matching '%s'='%s' against '%s'" % ( - # what, value, origin)) - # support substitution here as well - value = substitute(value) - # first char is apt-cache policy output, send is the name - # in the Release file - if what in ("o", "origin"): - res &= fnmatch.fnmatch(origin.origin, value) - elif what in ("l", "label"): - res &= fnmatch.fnmatch(origin.label, value) - elif what in ("a", "suite", "archive"): - res &= fnmatch.fnmatch(origin.archive, value) - elif what in ("c", "component"): - res &= fnmatch.fnmatch(origin.component, value) - elif what in ("site",): - res &= fnmatch.fnmatch(origin.site, value) - elif what in ("n", "codename",): - res &= fnmatch.fnmatch(origin.codename, value) - else: - raise UnknownMatcherError( - "Unknown whitelist entry for macher '%s' (token '%s')" % ( - what, token)) - # logging.debug("matching '%s'='%s' against '%s'" % ( - # what, value, origin)) - return res - - -def cache_commit(cache, logfile_dpkg, verbose, iprogress=None): - """Commit the changes from the given cache to the system""" - # set debconf to NON_INTERACTIVE, redirect output - os.putenv("DEBIAN_FRONTEND", "noninteractive") - - # only act if there is anything to do (important to avoid writing - # empty log stanzas) - if len(cache.get_changes()) == 0: - return True, None - - error = None - res = False - if iprogress is None: - iprogress = LogInstallProgress(logfile_dpkg, verbose) - - try: - with Unlocked(): - res = cache.commit(install_progress=iprogress) - except SystemError as e: - error = e - if verbose: - logging.exception("Exception happened during upgrade.") - return res, error - - -def upgrade_normal(cache, logfile_dpkg, verbose): - res, error = cache_commit(cache, logfile_dpkg, verbose) - if res: - logging.info(_("All upgrades installed")) - else: - logging.error(_("Installing the upgrades failed!")) - logging.error(_("error message: '%s'"), error) - logging.error(_("dpkg returned a error! See '%s' for details"), - logfile_dpkg) - return res - - -def upgrade_in_minimal_steps(cache, pkgs_to_upgrade, blacklist, - whitelist, logfile_dpkg="", verbose=False): - - install_log = LogInstallProgress(logfile_dpkg, verbose) - install_log.progress_log += ".minimal-steps" - - # setup signal handler - signal.signal(signal.SIGUSR1, signal_handler) - - # double check any changes we do - allowed_origins = get_allowed_origins() - - # to upgrade contains the package names - to_upgrade = set(pkgs_to_upgrade) - while True: - # find smallest set - smallest_partition = to_upgrade - for pkgname in to_upgrade: - if SIGNAL_STOP_REQUEST: - logging.warning("SIGNAL received, stopping") - return True - pkg = cache[pkgname] - if pkg.is_upgradable: - pkg.mark_upgrade() - elif not pkg.is_installed: - pkg.mark_install() - else: - continue - # double check that we are not running into side effects like - # what could have been caused LP: #1020680 - if not check_changes_for_sanity(cache, allowed_origins, blacklist, - whitelist): - logging.info("While building minimal partition: " - "cache has not allowed changes") - cache.clear() - continue - changes = [p.name for p in cache.get_changes()] - if not changes: - continue - if len(changes) == 1: - logging.debug("found leaf package %s" % pkg.name) - smallest_partition = changes - break - if len(changes) < len(smallest_partition): - logging.debug("found partition of size %s (%s)" % ( - len(changes), changes)) - smallest_partition = changes - cache.clear() - - # write progress log information - if len(pkgs_to_upgrade) > 0: - percent = ((len(pkgs_to_upgrade) - len(to_upgrade)) / - float(len(pkgs_to_upgrade)) * 100.0) - else: - percent = 100.0 - install_log.status_change(pkg=",".join(smallest_partition), - percent=percent, - status="") - # apply changes - logging.debug("applying set %s" % smallest_partition) - rewind_cache(cache, [cache[name] for name in smallest_partition]) - - res, error = cache_commit(cache, logfile_dpkg, verbose, install_log) - if error: - if verbose: - logging.exception("Exception happened during upgrade.") - logging.error(_("Installing the upgrades failed!")) - logging.error(_("error message: '%s'"), error) - logging.error(_("dpkg returned a error! See '%s' for details"), - logfile_dpkg) - return False - to_upgrade = to_upgrade - set(smallest_partition) - logging.debug("left to upgrade %s" % to_upgrade) - if len(to_upgrade) == 0: - logging.info(_("All upgrades installed")) - break - return True - - -def is_allowed_origin(ver, allowed_origins): - if not ver: - return False - for origin in ver.origins: - for allowed in allowed_origins: - if match_whitelist_string(allowed, origin): - return True - return False - - -def is_pkgname_in_blacklist(pkgname, blacklist): - for blacklist_regexp in blacklist: - if re.match(blacklist_regexp, pkgname): - logging.debug("skipping blacklisted package '%s'" % pkgname) - return True - return False - - -def is_pkgname_in_whitelist(pkgname, whitelist): - # a empty whitelist means the user does not want to use this feature - if not whitelist: - return True - for whitelist_regexp in whitelist: - if re.match(whitelist_regexp, pkgname): - logging.debug("only upgrading the following package '%s'" % - pkgname) - return True - return False - - -def check_changes_for_sanity(cache, allowed_origins, blacklist, whitelist): - if cache._depcache.broken_count != 0: - return False - for pkg in cache: - if pkg.marked_delete: - logging.debug("pkg '%s' now marked delete" % pkg.name) - return False - if pkg.marked_install or pkg.marked_upgrade: - # apt will never fallback from a trusted to a untrusted - # origin so its good enough if we have a single trusted one - if not any([o.trusted for o in pkg.candidate.origins]): - logging.debug("pkg '%s' is untrusted" % pkg.name) - return False - if not is_allowed_origin(pkg.candidate, allowed_origins): - logging.debug("pkg '%s' not in allowed origin" % pkg.name) - return False - if is_pkgname_in_blacklist(pkg.name, blacklist): - logging.debug("pkg '%s' package has been blacklisted" % - pkg.name) - return False - # a strict whitelist will not allow any changes not in the - # whitelist, most people will want the relaxed whitelist - # that whitelists a package but pulls in the package - # dependencies - strict_whitelist = apt_pkg.config.find_b( - "Unattended-Upgrade::Package-Whitelist-Strict", False) - if (strict_whitelist and - not is_pkgname_in_whitelist(pkg.name, whitelist)): - - logging.debug("pkg '%s' package is not whitelisted" % - pkg.name) - return False - if pkg._pkg.selected_state == apt_pkg.SELSTATE_HOLD: - logging.debug("pkg '%s' is on hold" % pkg.name) - return False - # check if the package is unsafe to upgrade unattended - ignore_require_restart = apt_pkg.config.find_b( - "Unattended-Upgrade::IgnoreAppsRequireRestart", False) - upgrade_requires = pkg.candidate.record.get("Upgrade-Requires") - if (pkg.marked_upgrade and ignore_require_restart is False and - upgrade_requires == "app-restart"): - logging.debug("pkg '%s' requires app-restart, not safe to " - "upgrade unattended") - return False - return True - - -def pkgname_from_deb(debfile): - # FIXME: add error checking here - try: - control = apt_inst.DebFile(debfile).control.extractdata("control") - sections = apt_pkg.TagSection(control) - return sections["Package"] - except (IOError, SystemError) as e: - logging.error("failed to read deb file '%s' (%s)" % (debfile, e)) - # dumb fallback - return debfile.split("_")[0] - - -def get_md5sum_for_file_in_deb(deb_file, conf_file): - dpkg_cmd = ["dpkg-deb", "--fsys-tarfile", deb_file] - tar_cmd = ["tar", "-x", "-O", "-f", "-", "." + conf_file] - md5_cmd = ["md5sum"] - dpkg_p = Popen(dpkg_cmd, stdout=PIPE) - tar_p = Popen(tar_cmd, stdin=dpkg_p.stdout, stdout=PIPE, - universal_newlines=True) - md5_p = Popen(md5_cmd, stdin=tar_p.stdout, stdout=PIPE, - universal_newlines=True) - pkg_md5sum = md5_p.communicate()[0].split()[0] - return pkg_md5sum - - -# prefix is *only* needed for the build-in tests -def conffile_prompt(destFile, prefix=""): - logging.debug("check_conffile_prompt('%s')" % destFile) - pkgname = pkgname_from_deb(destFile) - - # get the conffiles for the /var/lib/dpkg/status file - status_file = apt_pkg.config.find("Dir::State::status") - tagfile = apt_pkg.TagFile(open(status_file, "r")) - conffiles = "" - for section in tagfile: - if section.get("Package") == pkgname: - logging.debug("found pkg: %s" % pkgname) - if "Conffiles" in section: - conffiles = section.get("Conffiles") - break - - # get conffile value from pkg, its ok if the new version - # does not have conffiles anymore - pkg_conffiles = "" - deb = apt_inst.DebFile(destFile) - try: - pkg_conffiles = deb.control.extractdata("conffiles").strip().decode( - "utf-8") - except LookupError as e: - logging.debug("No conffiles in deb '%s' (%s)" % (destFile, e)) - - # Conffiles: - # /etc/bash_completion.d/m-a c7780fab6b14d75ca54e11e992a6c11c - dpkg_status_conffiles = {} - for line in conffiles.splitlines(): - # ignore empty lines - line = line.strip() - if not line: - continue - # show what we do - logging.debug("conffile line: '%s'", line) - l = line.split() - conf_file = l[0] - md5 = l[1] - if len(l) > 2: - obs = l[2] - else: - obs = None - # ignore if conffile is obsolete - if obs == "obsolete": - continue - # ignore state "newconffile" until its clearer if there - # might be a dpkg prompt (LP: #936870) - if md5 == "newconffile": - continue - if not pkg_conffiles or conf_file not in pkg_conffiles.split("\n"): - logging.debug("'%s' not in package conffiles '%s'" % ( - conf_file, pkg_conffiles)) - continue - # record for later - dpkg_status_conffiles[conf_file] = md5 - - # test against the installed file, if the local file got deleted - # by the admin thats ok but it may still trigger a conffile prompt - # (see debian #788049) - current_md5 = "" - if os.path.exists(prefix + conf_file): - with open(prefix + conf_file, 'rb') as fb: - current_md5 = apt_pkg.md5sum(fb) - logging.debug("current md5: %s" % current_md5) - - # hashes are the same, no conffile prompt - if current_md5 == md5: - continue - # calculate md5sum from the deb (may take a bit) - pkg_md5sum = get_md5sum_for_file_in_deb(destFile, conf_file) - logging.debug("pkg_md5sum: %s" % pkg_md5sum) - # the md5sum in the deb is unchanged, this will not - # trigger a conffile prompt - if pkg_md5sum == md5: - continue - # if we made it to this point: - # current_md5 != pkg_md5sum != md5 - # and that will trigger a conffile prompt, we can - # stop processing at this point and just return True - return True - - # now check if there are conffiles in the pkg that where not there - # in the previous version in the dpkg status file - if pkg_conffiles: - for conf_file in pkg_conffiles.split("\n"): - if (conf_file not in dpkg_status_conffiles and - os.path.exists(prefix + conf_file)): - logging.debug("found conffile '%s' in new pkg but on dpkg " - "status" % conf_file) - pkg_md5sum = get_md5sum_for_file_in_deb(destFile, conf_file) - with open(prefix + conf_file, 'rb') as fp: - if pkg_md5sum != apt_pkg.md5sum(fp): - return True - return False - - -def dpkg_conffile_prompt(): - if "DPkg::Options" not in apt_pkg.config: - return True - options = apt_pkg.config.value_list("DPkg::Options") - for option in options: - option = option.strip() - if option in ["--force-confold", "--force-confnew"]: - return False - return True - - -def rewind_cache(cache, pkgs_to_upgrade): - """ set the cache back to the state with packages_to_upgrade """ - cache.clear() - for pkg2 in pkgs_to_upgrade: - pkg2.mark_install() - if cache.broken_count > 0: - raise AssertionError("rewind_cache created a broken cache") - - -def host(): - return os.uname()[1] - - -# *sigh* textwrap is nice, but it breaks "linux-image" into two -# seperate lines -def wrap(t, width=70, subsequent_indent=""): - out = "" - for s in t.split(): - if (len(out) - out.rfind("\n")) + len(s) > width: - out += "\n" + subsequent_indent - out += s + " " - return out - - -def setup_apt_listchanges(conf="/etc/apt/listchanges.conf"): - """ deal with apt-listchanges """ - # apt-listchanges will always send a mail if there is a mail address - # set in the config regardless of the frontend used, so set it to - # mail if we have a sendmail and to none if not (as it appears to - # not check if sendmail is there or not), debian bug #579733 - if os.path.exists(SENDMAIL_BINARY): - os.environ["APT_LISTCHANGES_FRONTEND"] = "mail" - else: - os.environ["APT_LISTCHANGES_FRONTEND"] = "none" - - -def _send_mail_using_mailx(from_address, to_address, subject, body): - # ensure that the body is a byte stream and that we do not - # break on encoding errors (the default error mode is "strict") - encoded_body = body.encode( - locale.getpreferredencoding(False), errors="replace") - # we use a binary pipe to stdin to ensure we do not break on - # unicode encoding errors (e.g. because the user is running a - # ascii only system like the buildds) - mail = subprocess.Popen( - [MAIL_BINARY, "-r", from_address, "-s", subject, to_address], - stdin=subprocess.PIPE, universal_newlines=False) - mail.stdin.write(encoded_body) - mail.stdin.close() - ret = mail.wait() - return ret - - -def _send_mail_using_sendmail(from_address, to_address, subject, body): - # format as a proper mail - msg = Message() - msg['Subject'] = subject - msg['From'] = from_address - msg['To'] = to_address - # order is important here, Message() first, then Charset() - # then msg.set_charset() - charset = email.charset.Charset("utf-8") - charset.body_encoding = email.charset.QP - msg.set_payload(body, charset) - # and send it away - sendmail = subprocess.Popen( - [SENDMAIL_BINARY, "-oi", "-t"], - stdin=subprocess.PIPE, universal_newlines=True) - sendmail.stdin.write(msg.as_string()) - sendmail.stdin.close() - ret = sendmail.wait() - return ret - - -def send_summary_mail(pkgs, res, pkgs_kept_back, mem_log, dpkg_log_content): - """ send mail (if configured in Unattended-Upgrade::Mail) """ - to_email = apt_pkg.config.find("Unattended-Upgrade::Mail", "") - if not to_email: - return - if not os.path.exists(MAIL_BINARY) and not os.path.exists(SENDMAIL_BINARY): - logging.error(_("No '/usr/bin/mail' or '/usr/sbin/sendmail'," - "can not send mail. " - "You probably want to install the 'mailx' package.")) - return - # if the operation was successful and the user has requested to get - # mails on on errors, just exit here - if (res and - # see Debian Bug #703621 - not re.search("^WARNING:", mem_log.getvalue(), re.MULTILINE) and - apt_pkg.config.find_b( - "Unattended-Upgrade::MailOnlyOnError", False)): - return - # Check if reboot-required flag is present - reboot_flag_str = _( - "[reboot required]") if os.path.isfile(REBOOT_REQUIRED_FILE) else "" - # Check if packages are kept on hold - hold_flag_str = _("[package on hold]") if pkgs_kept_back else "" - logging.debug("Sending mail to '%s'" % to_email) - subject = _( - "{hold_flag}{reboot_flag} unattended-upgrades result for " - "'{machine}': {result}").format( - hold_flag=hold_flag_str, reboot_flag=reboot_flag_str, - machine=host(), result=res).strip() - body = _("Unattended upgrade returned: %s\n\n") % res - if os.path.isfile(REBOOT_REQUIRED_FILE): - body += _( - "Warning: A reboot is required to complete this upgrade.\n\n") - if res: - body += _("Packages that were upgraded:\n") - else: - body += _("Packages that attempted to upgrade:\n") - body += " " + wrap(pkgs, 70, " ") - body += "\n" - if pkgs_kept_back: - body += _("Packages with upgradable origin but kept back:\n") - body += " " + wrap(" ".join(pkgs_kept_back), 70, " ") - body += "\n" - body += "\n" - if dpkg_log_content: - body += _("Package installation log:") + "\n" - body += dpkg_log_content - body += "\n\n" - body += _("Unattended-upgrades log:\n") - body += mem_log.getvalue() - - from_email = apt_pkg.config.find("Unattended-Upgrade::Sender", "root") - - if os.path.exists(SENDMAIL_BINARY): - ret = _send_mail_using_sendmail(from_email, to_email, subject, body) - elif os.path.exists(MAIL_BINARY): - ret = _send_mail_using_mailx(from_email, to_email, subject, body) - else: - raise AssertionError( - "This should never be reached, if we are here we either " - "have sendmail or mailx. Please report this as a bug.") - logging.debug("mail returned: %s", ret) - - -def do_install(cache, pkgs_to_upgrade, blacklisted_pkgs, whitelisted_pkgs, - options, logfile_dpkg): - # set debconf to NON_INTERACTIVE, redirect output - os.putenv("DEBIAN_FRONTEND", "noninteractive") - setup_apt_listchanges() - - logging.info(_("Writing dpkg log to '%s'"), logfile_dpkg) - - marked_delete = [pkg for pkg in cache.get_changes() if pkg.marked_delete] - if marked_delete: - raise AssertionError( - "Internal error. The following packages are marked for " - "removal:%s" % "".join([pkg.name for pkg in marked_delete])) - - pkg_install_success = False - try: - if (options.minimal_upgrade_steps or - # COMPAT with the mispelling - apt_pkg.config.find_b( - "Unattended-Upgrades::MinimalSteps", False) or - apt_pkg.config.find_b( - "Unattended-Upgrade::MinimalSteps", False)): - pidf = os.path.join(apt_pkg.config.find_dir("Dir"), - "var", "run", "unattended-upgrades.pid") - with open(pidf, "w") as fp: - fp.write("%s" % os.getpid()) - # try upgrade all "pkgs" in minimal steps - pkg_install_success = upgrade_in_minimal_steps( - cache, [pkg.name for pkg in pkgs_to_upgrade], - blacklisted_pkgs, whitelisted_pkgs, logfile_dpkg, - options.verbose or options.debug) - else: - pkg_install_success = upgrade_normal( - cache, logfile_dpkg, options.verbose or options.debug) - except Exception as e: - # print unhandled exceptions here this way, while stderr is redirected - os.write(2, ("Exception: %s\n" % e).encode('utf-8')) - pkg_install_success = False - - return pkg_install_success - - -def _setup_alternative_rootdir(rootdir): - # clear system unattended-upgrade stuff - apt_pkg.config.clear("Unattended-Upgrade") - # read rootdir (taken from apt.Cache, but we need to run it - # here before the cache gets initialized - if os.path.exists(rootdir + "/etc/apt/apt.conf"): - apt_pkg.read_config_file(apt_pkg.config, - rootdir + "/etc/apt/apt.conf") - if os.path.isdir(rootdir + "/etc/apt/apt.conf.d"): - apt_pkg.read_config_dir(apt_pkg.config, - rootdir + "/etc/apt/apt.conf.d") - logdir = os.path.join(rootdir, "var", "log", "unattended-upgrades") - if not os.path.exists(logdir): - os.makedirs(logdir) - apt.apt_pkg.config.set("Unattended-Upgrade::LogDir", logdir) - - -def _get_logdir(): - logdir = apt_pkg.config.find_dir( - "Unattended-Upgrade::LogDir", - # COMPAT only - apt_pkg.config.find_dir("APT::UnattendedUpgrades::LogDir", - "/var/log/unattended-upgrades/")) - return logdir - - -def _setup_logging(options): - # ensure this is run only once - if len(logging.root.handlers) > 0: - return - - # init the logging - logdir = _get_logdir() - logfile = os.path.join( - logdir, - apt_pkg.config.find( - "Unattended-Upgrade::LogFile", - # COMPAT only - apt_pkg.config.find("APT::UnattendedUpgrades::LogFile", - "unattended-upgrades.log"))) - if not options.dry_run and not os.path.exists(logdir): - os.makedirs(logdir) - - logging.basicConfig(level=logging.INFO, - format='%(asctime)s %(levelname)s %(message)s', - filename=logfile) - # additional logging - logger = logging.getLogger() - mem_log = StringIO() - if options.apt_debug: - apt_pkg.config.set("Debug::pkgProblemResolver", "1") - apt_pkg.config.set("Debug::pkgDepCache::AutoInstall", "1") - if options.debug: - logger.setLevel(logging.DEBUG) - stdout_handler = logging.StreamHandler(sys.stdout) - logger.addHandler(stdout_handler) - elif options.verbose: - logger.setLevel(logging.INFO) - stdout_handler = logging.StreamHandler(sys.stdout) - logger.addHandler(stdout_handler) - if apt_pkg.config.find("Unattended-Upgrade::Mail", ""): - mem_log_handler = logging.StreamHandler(mem_log) - logger.addHandler(mem_log_handler) - return mem_log - - -def get_blacklisted_pkgs(): - return apt_pkg.config.value_list("Unattended-Upgrade::Package-Blacklist") - - -def get_whitelisted_pkgs(): - return apt_pkg.config.value_list("Unattended-Upgrade::Package-Whitelist") - - -def logged_in_users(): - """Return a list of logged in users""" - # the "users" command always returns a single line with: - # "user1, user1, user2" - users = subprocess.check_output( - USERS, universal_newlines=True).rstrip('\n') - return set(users.split()) - - -def reboot_if_requested_and_needed(shutdown_lock=0): - """auto-reboot (if required and the config for this is set)""" - if not os.path.exists(REBOOT_REQUIRED_FILE): - return - if not apt_pkg.config.find_b( - "Unattended-Upgrade::Automatic-Reboot", False): - return - # see if we need to check for logged in users - if not apt_pkg.config.find_b( - "Unattended-Upgrade::Automatic-Reboot-WithUsers", True): - users = logged_in_users() - if users: - msg = gettext.ngettext( - "Found %s, but not rebooting because %s is logged in." % ( - REBOOT_REQUIRED_FILE, users), - "Found %s, but not rebooting because %s are logged in." % ( - REBOOT_REQUIRED_FILE, users), - len(users)) - logging.warning(msg) - return - # reboot at the specified time - when = apt_pkg.config.find( - "Unattended-Upgrade::Automatic-Reboot-Time", "now") - if shutdown_lock > 0: - os.close(shutdown_lock) - logging.warning("Found %s, rebooting" % REBOOT_REQUIRED_FILE) - subprocess.call(["/sbin/shutdown", "-r", when]) - - -def write_stamp_file(): - statedir = os.path.join(apt_pkg.config.find_dir("Dir::State"), "periodic") - with open(os.path.join(statedir, "unattended-upgrades-stamp"), "w"): - pass - - -def try_to_upgrade(pkg, pkgs_to_upgrade, pkgs_kept_back, cache, - allowed_origins, blacklisted_pkgs, whitelisted_pkgs): - - try: - pkg.mark_upgrade() - if check_changes_for_sanity(cache, allowed_origins, - blacklisted_pkgs, whitelisted_pkgs): - # add to packages to upgrade - pkgs_to_upgrade.append(pkg) - # re-eval pkgs_kept_back as the resolver may fail to - # directly upgrade a pkg, but that may work during - # a subsequent operation, see debian bug #639840 - for pkgname in pkgs_kept_back: - if (cache[pkgname].marked_install or - cache[pkgname].marked_upgrade): - pkgs_kept_back.remove(pkgname) - pkgs_to_upgrade.append(cache[pkgname]) - else: - logging.debug("sanity check failed") - rewind_cache(cache, pkgs_to_upgrade) - pkgs_kept_back.append(pkg.name) - except SystemError as e: - # can't upgrade - logging.warning( - _("package '%s' upgradable but fails to " - "be marked for upgrade (%s)"), pkg.name, e) - rewind_cache(cache, pkgs_to_upgrade) - pkgs_kept_back.append(pkg.name) - - -def calculate_upgradable_pkgs(cache, options, allowed_origins, - blacklisted_pkgs, whitelisted_pkgs): - pkgs_to_upgrade = [] - pkgs_kept_back = [] - - # now do the actual upgrade - for pkg in cache: - if options.debug and pkg.is_upgradable: - logging.debug("Checking: %s (%s)" % ( - pkg.name, getattr(pkg.candidate, "origins", []))) - if (pkg.is_upgradable and - not is_pkgname_in_blacklist(pkg.name, blacklisted_pkgs) and - is_pkgname_in_whitelist(pkg.name, whitelisted_pkgs) and - is_allowed_origin(pkg.candidate, allowed_origins)): - - try_to_upgrade(pkg, - pkgs_to_upgrade, - pkgs_kept_back, - cache, - allowed_origins, - blacklisted_pkgs, - whitelisted_pkgs) - return pkgs_to_upgrade, pkgs_kept_back - - -def get_dpkg_log_content(logfile_dpkg, install_start_time): - logging.debug("Extracting content from '%s' since '%s'" % ( - logfile_dpkg, install_start_time)) - content = [] - found_start = False - with io.open(logfile_dpkg, encoding='utf-8') as fp: - # read until we find the last "Log started: " - for line in fp.readlines(): - # scan for the first entry we need (minimal-step mode - # creates a new stanza for each individual install) - if not found_start and line.startswith("Log started: "): - stanza_start = LoggingDateTime.from_string( - line[len("Log started: "):-1]) - if stanza_start >= install_start_time: - found_start = True - if found_start: - content.append(line) - return "".join(content) - - -def get_auto_removable(cache): - return set([pkg.name for pkg in cache - if pkg.is_auto_removable]) - - -def do_auto_remove(cache, auto_removable, logfile_dpkg, verbose=False): - if not auto_removable: - return True - - for pkgname in auto_removable: - logging.debug("marking %s for remove" % pkgname) - cache[pkgname].mark_delete() - logging.info(_("Packages that are auto removed: '%s'"), - " ".join(sorted(auto_removable))) - - # do it - res, error = cache_commit(cache, logfile_dpkg, verbose) - if res: - logging.info(_("Packages were successfully auto-removed")) - else: - logging.error(_("Auto-removing the packages failed!")) - logging.error(_("Error message: '%s'"), error) - logging.error(_("dpkg returned an error! See '%s' for details"), - logfile_dpkg) - return res - - -def clean_downloaded_packages(fetcher): - archivedir = os.path.dirname( - apt_pkg.config.find_dir("Dir::Cache::archives")) - for item in fetcher.items: - if os.path.dirname(os.path.abspath(item.destfile)) == archivedir: - try: - os.unlink(item.destfile) - except OSError: - pass - - -def main(options, rootdir=""): - # useful for testing - if rootdir: - _setup_alternative_rootdir(rootdir) - - # setup logging - mem_log = _setup_logging(options) - - # format (origin, archive), e.g. ("Ubuntu","dapper-security") - allowed_origins = get_allowed_origins() - - # pkgs that are (for some reason) not safe to install - blacklisted_pkgs = get_blacklisted_pkgs() - logging.info(_("Initial blacklisted packages: %s"), - " ".join(blacklisted_pkgs)) - - # install only these packages regardless of other upgrades available - whitelisted_pkgs = get_whitelisted_pkgs() - logging.info(_("Initial whitelisted packages: %s"), - " ".join(whitelisted_pkgs)) - - logging.info(_("Starting unattended upgrades script")) - - # display available origin - logging.info(_("Allowed origins are: %s"), allowed_origins) - - # see debian #776752 - install_start_time = datetime.datetime.now().replace(microsecond=0) - - # check if the journal is dirty and if so, take emergceny action - # the alternative is to leave the system potentially unsecure until - # the user comes in and fixes - if (is_dpkg_journal_dirty() and - apt_pkg.config.find_b( - "Unattended-Upgrade::AutoFixInterruptedDpkg", True)): - # ensure the dpkg database is not already locked (LP: #754330) - admindir = os.path.dirname(apt_pkg.config.find("Dir::State::Status")) - lockfd = apt_pkg.get_lock(os.path.join(admindir, "lock"), False) - if lockfd > 0: - logging.warning( - _("Unclean dpkg state detected, trying to correct")) - print(_("Unclean dpkg state detected, trying to correct")) - env = copy.copy(os.environ) - env["DEBIAN_FRONTEND"] = "noninteractive" - try: - os.close(lockfd) - output = subprocess.check_output( - ["dpkg", "--force-confold", "--configure", "-a"], - env=env, - universal_newlines=True) - except subprocess.CalledProcessError as e: - output = e.output - logging.warning(_("dpkg --configure -a output:\n%s"), output) - else: - logging.debug("Unclean dpkg state, but locked, another package " - "manager working?") - - # check and get lock - try: - apt_pkg.pkgsystem_lock() - except SystemError as e: - logging.error(_("Lock could not be acquired (another package " - "manager running?)")) - print(_("Cache lock can not be acquired, exiting")) - sys.exit(1) - - # get a cache - cache = UnattendedUpgradesCache(rootdir=rootdir, - allowed_origins=allowed_origins) - if cache._depcache.broken_count > 0: - print(_("Cache has broken packages, exiting")) - logging.error(_("Cache has broken packages, exiting")) - sys.exit(1) - - # FIXME: make this into a ContextManager - # be nice when calculating the upgrade as its pretty CPU intensive - old_priority = os.nice(0) - try: - # Check that we will be able to restore the priority - os.nice(-1) - os.nice(20) - except OSError as e: - if e.errno in (errno.EPERM, errno.EACCES): - pass - else: - raise - - # speed things up with latest apt - actiongroup = apt_pkg.ActionGroup(cache._depcache) - actiongroup # pyflakes - - # find out about the packages that are upgradable (in a allowed_origin) - pkgs_to_upgrade, pkgs_kept_back = calculate_upgradable_pkgs( - cache, options, allowed_origins, blacklisted_pkgs, whitelisted_pkgs) - pkgs_to_upgrade.sort(key=lambda p: p.name) - pkgs = "\n".join([pkg.name for pkg in pkgs_to_upgrade]) - logging.debug("pkgs that look like they should be upgraded: %s" % pkgs) - - # FIXME: make this into a ContextManager - # stop being nice - os.nice(old_priority - os.nice(0)) - - # download what looks good - if options.debug: - fetcher = apt_pkg.Acquire(apt.progress.text.AcquireProgress()) - else: - fetcher = apt_pkg.Acquire() - list = apt_pkg.SourceList() - list.read_main_list() - recs = cache._records - pm = apt_pkg.PackageManager(cache._depcache) - try: - pm.get_archives(fetcher, list, recs) - except SystemError as e: - logging.error(_("GetArchives() failed: '%s'"), e) - res = fetcher.run() - logging.debug("fetch.run() result: %s", res) - - if dpkg_conffile_prompt(): - # now check the downloaded debs for conffile conflicts and build - # a blacklist - for item in fetcher.items: - logging.debug("%s" % item) - if item.status == item.STAT_ERROR: - print(_("An error occurred: '%s'") % item.error_text) - logging.error(_("An error occurred: '%s'"), item.error_text) - if not item.complete: - print(_("The URI '%s' failed to download, aborting") % - item.desc_uri) - logging.error(_("The URI '%s' failed to download, aborting"), - item.desc_uri) - sys.exit(1) - if not os.path.exists(item.destfile): - print(_("Download finished, but file '%s' not there?!?") % - item.destfile) - logging.error("Download finished, but file '%s' not " - "there?!?", item.destfile) - sys.exit(1) - if not item.is_trusted: - blacklisted_pkgs.append(pkgname_from_deb(item.destfile)) - if conffile_prompt(item.destfile): - # skip package (means to re-run the whole marking again - # and making sure that the package will not be pulled in by - # some other package again!) - # - # print to stdout to ensure that this message is part of - # the cron mail (only if no summary mail is requested) - email = apt_pkg.config.find("Unattended-Upgrade::Mail", "") - if not email: - print(_("Package '%s' has conffile prompt and needs " - "to be upgraded manually") % - pkgname_from_deb(item.destfile)) - # log to the logfile - logging.warning(_("Package '%s' has conffile prompt and " - "needs to be upgraded manually"), - pkgname_from_deb(item.destfile)) - blacklisted_pkgs.append(pkgname_from_deb(item.destfile)) - pkgs_kept_back.append(pkgname_from_deb(item.destfile)) - - # redo the selection about the packages to upgrade based on the new - # blacklist - logging.debug("blacklist: %s" % blacklisted_pkgs) - # whitelist - logging.debug("whitelist: %s" % whitelisted_pkgs) - # find out about the packages that are upgradable (in a allowed_origin) - if len(blacklisted_pkgs) > 0 or len(whitelisted_pkgs) > 0: - cache.clear() - old_pkgs_to_upgrade = pkgs_to_upgrade[:] - pkgs_to_upgrade = [] - for pkg in old_pkgs_to_upgrade: - logging.debug("Checking the black and whitelist: %s" % - (pkg.name)) - pkg.mark_upgrade() - if check_changes_for_sanity(cache, - allowed_origins, - blacklisted_pkgs, - whitelisted_pkgs): - pkgs_to_upgrade.append(pkg) - else: - if not (pkg.name in pkgs_kept_back): - pkgs_kept_back.append(pkg.name) - logging.info(_("package '%s' not upgraded"), pkg.name) - cache.clear() - for pkg2 in pkgs_to_upgrade: - pkg2.mark_upgrade() - else: - logging.debug("dpkg is configured not to cause conffile prompts") - - # auto-removal - previous_autoremovals = get_auto_removable(cache) - if apt_pkg.config.find_b( - "Unattended-Upgrade::Remove-Unused-Dependencies", False): - pending_autoremovals = previous_autoremovals - else: - pending_autoremovals = [] - - # exit if there is nothing to do and nothing to report - if (len(pending_autoremovals) == 0 and - len(pkgs_to_upgrade) == 0 and - len(pkgs_kept_back) == 0): - logging.info(_("No packages found that can be upgraded unattended " - "and no pending auto-removals")) - # FIXME: DRY violation, write_stamp_file() is used below as well - write_stamp_file() - # check if we couldn't reboot on previous run because - # a user was logged-in at this time - reboot_if_requested_and_needed() - return - - # check if its configured for install on shutdown, if so, the - # environment UNATTENDED_UPGRADES_FORCE_INSTALL_ON_SHUTDOWN will - # be set by the unatteded-upgrades-shutdown script - if ("UNATTENDED_UPGRADES_FORCE_INSTALL_ON_SHUTDOWN" not in os.environ and - apt_pkg.config.find_b( - "Unattended-Upgrade::InstallOnShutdown", False)): - logger = logging.getLogger() - logger.debug("Configured to install on shutdown, so exiting now") - return - - # check if we are in dry-run mode - if options.dry_run: - logging.info("Option --dry-run given, *not* performing real actions") - apt_pkg.config.set("Debug::pkgDPkgPM", "1") - - # do the install based on the new list of pkgs - pkgs = " ".join([pkg.name for pkg in pkgs_to_upgrade]) - logging.info(_("Packages that will be upgraded: %s"), pkgs) - - # get log - logfile_dpkg = os.path.join(_get_logdir(), 'unattended-upgrades-dpkg.log') - - # only perform install step if we actually have packages to install - pkg_install_success = True - shutdown_lock = -1 - if len(pkgs_to_upgrade) > 0: - # lock for the shutdown check - its fine if the system - # is shutdown while downloading but not so much while installing - shutdown_lock = apt_pkg.get_lock("/var/run/unattended-upgrades.lock") - # do install - pkg_install_success = do_install(cache, - pkgs_to_upgrade, - blacklisted_pkgs, - whitelisted_pkgs, - options, - logfile_dpkg) - - # now check if any auto-removing needs to be done - cache = UnattendedUpgradesCache( - rootdir=rootdir, allowed_origins=allowed_origins) - if cache._depcache.broken_count > 0: - print(_("Cache has broken packages, exiting")) - logging.error(_("Cache has broken packages, exiting")) - sys.exit(1) - - # the user wants *all* auto-removals to be removed - if apt_pkg.config.find_b( - "Unattended-Upgrade::Remove-Unused-Dependencies", False): - auto_removals = get_auto_removable(cache) - pkg_install_success &= do_auto_remove( - cache, auto_removals, logfile_dpkg, - options.verbose or options.debug) - # the user wants *only new* auto-removals to be removed - elif apt_pkg.config.find_b( - "Unattended-Upgrade::Remove-New-Unused-Dependencies", True): - # calculate the new auto-removals - new_pending_autoremovals = get_auto_removable(cache) - auto_removals = new_pending_autoremovals - previous_autoremovals - pkg_install_success &= do_auto_remove( - cache, auto_removals, logfile_dpkg, - options.verbose or options.debug) - - logging.debug("InstCount=%i DelCount=%i BrokenCount=%i" - % (cache._depcache.inst_count, - cache._depcache.del_count, - cache._depcache.broken_count)) - - # send a mail (if needed) - if not options.dry_run: - log_content = get_dpkg_log_content(logfile_dpkg, install_start_time) - send_summary_mail( - pkgs, pkg_install_success, pkgs_kept_back, mem_log, log_content) - - # clean after success install (if needed) - keep_key = "Unattended-Upgrade::Keep-Debs-After-Install" - if (not apt_pkg.config.find_b(keep_key, False) and - not options.dry_run and - pkg_install_success): - clean_downloaded_packages(fetcher) - - # FIXME: DRY violation, write_stamp_file() is used above as well - # write timestamp file - write_stamp_file() - - # check if the user wants a reboot - if not options.dry_run: - reboot_if_requested_and_needed(shutdown_lock) - - -if __name__ == "__main__": - localesApp = "unattended-upgrades" - localesDir = "/usr/share/locale" - gettext.bindtextdomain(localesApp, localesDir) - gettext.textdomain(localesApp) - - # this ensures the commandline is logged in /var/log/apt/history.log - apt_pkg.config.set("Commandline::AsString", " ".join(sys.argv)) - - # init the options - parser = OptionParser() - parser.add_option("-d", "--debug", - action="store_true", default=False, - help=_("print debug messages")) - parser.add_option("", "--apt-debug", - action="store_true", default=False, - help=_("make apt/libapt print verbose debug messages")) - parser.add_option("-v", "--verbose", - action="store_true", default=False, - help=_("print info messages")) - parser.add_option("", "--dry-run", - action="store_true", default=False, - help=_("Simulation, download but do not install")) - parser.add_option("", "--minimal-upgrade-steps", - action="store_true", default=False, - help=_("Upgrade in minimal steps (and allow " - "interrupting with SIGINT")) - parser.add_option("", "--minimal_upgrade_steps", - action="store_true", - help=SUPPRESS_HELP, - default=False) - (options, args) = parser.parse_args() - - if os.getuid() != 0: - print(_("You need to be root to run this application")) - sys.exit(1) - - # ensure that we are not killed when the terminal goes away e.g. on - # shutdown - signal.signal(signal.SIGHUP, signal.SIG_IGN) - - # run the main code - main(options) diff --git a/package/data/20auto-upgrades b/package/data/20auto-upgrades deleted file mode 100644 index 8d6d7c82fe3fa66362f868eed98fe5c841594c52..0000000000000000000000000000000000000000 --- a/package/data/20auto-upgrades +++ /dev/null @@ -1,2 +0,0 @@ -APT::Periodic::Update-Package-Lists "1"; -APT::Periodic::Unattended-Upgrade "1"; diff --git a/package/data/20auto-upgrades-disabled b/package/data/20auto-upgrades-disabled deleted file mode 100644 index 42589c7d235a4ddc0c98671896f6ffb67342f572..0000000000000000000000000000000000000000 --- a/package/data/20auto-upgrades-disabled +++ /dev/null @@ -1,2 +0,0 @@ -APT::Periodic::Update-Package-Lists "0"; -APT::Periodic::Unattended-Upgrade "0"; diff --git a/package/data/50unattended-upgrades b/package/data/50unattended-upgrades deleted file mode 100644 index e23f6d4a65648482311f9f2c321ef669bf1ff41c..0000000000000000000000000000000000000000 --- a/package/data/50unattended-upgrades +++ /dev/null @@ -1,92 +0,0 @@ -// Unattended-Upgrade::Origins-Pattern controls which packages are -// upgraded. -// -// Lines below have the format format is "keyword=value,...". A -// package will be upgraded only if the values in its metadata match -// all the supplied keywords in a line. (In other words, omitted -// keywords are wild cards.) The keywords originate from the Release -// file, but several aliases are accepted. The accepted keywords are: -// a,archive,suite (eg, "stable") -// c,component (eg, "main", "contrib", "non-free") -// l,label (eg, "Debian", "Debian-Security") -// o,origin (eg, "Debian", "Unofficial Multimedia Packages") -// n,codename (eg, "jessie", "jessie-updates") -// site (eg, "http.debian.net") -// The available values on the system are printed by the command -// "apt-cache policy", and can be debugged by running -// "unattended-upgrades -d" and looking at the log file. -// -// Within lines unattended-upgrades allows 2 macros whose values are -// derived from /etc/debian_version: -// ${distro_id} Installed origin. -// ${distro_codename} Installed codename (eg, "jessie") -Unattended-Upgrade::Origins-Pattern { - // Codename based matching: - // This will follow the migration of a release through different - // archives (e.g. from testing to stable and later oldstable). -// "o=Debian,n=jessie"; -// "o=Debian,n=jessie-updates"; -// "o=Debian,n=jessie-proposed-updates"; -// "o=Debian,n=jessie,l=Debian-Security"; - - // Archive or Suite based matching: - // Note that this will silently match a different release after - // migration to the specified archive (e.g. testing becomes the - // new stable). - "o=*"; -}; - -// List of packages to not update (regexp are supported) -Unattended-Upgrade::Package-Blacklist { -// "vim"; -// "libc6"; -// "libc6-dev"; -// "libc6-i686"; -}; - -// This option allows you to control if on a unclean dpkg exit -// unattended-upgrades will automatically run -// dpkg --force-confold --configure -a -// The default is true, to ensure updates keep getting installed -//Unattended-Upgrade::AutoFixInterruptedDpkg "false"; - -// Split the upgrade into the smallest possible chunks so that -// they can be interrupted with SIGUSR1. This makes the upgrade -// a bit slower but it has the benefit that shutdown while a upgrade -// is running is possible (with a small delay) -//Unattended-Upgrade::MinimalSteps "true"; - -// Install all unattended-upgrades when the machine is shuting down -// instead of doing it in the background while the machine is running -// This will (obviously) make shutdown slower -//Unattended-Upgrade::InstallOnShutdown "true"; - -// Send email to this address for problems or packages upgrades -// If empty or unset then no email is sent, make sure that you -// have a working mail setup on your system. A package that provides -// 'mailx' must be installed. E.g. "user@example.com" -//Unattended-Upgrade::Mail "root"; - -// Set this value to "true" to get emails only on errors. Default -// is to always send a mail if Unattended-Upgrade::Mail is set -//Unattended-Upgrade::MailOnlyOnError "true"; - -// Do automatic removal of new unused dependencies after the upgrade -// (equivalent to apt-get autoremove) -//Unattended-Upgrade::Remove-Unused-Dependencies "false"; - -// Automatically reboot *WITHOUT CONFIRMATION* if -// the file /var/run/reboot-required is found after the upgrade -//Unattended-Upgrade::Automatic-Reboot "false"; - -// Automatically reboot even if there are users currently logged in. -//Unattended-Upgrade::Automatic-Reboot-WithUsers "true"; - -// If automatic reboot is enabled and needed, reboot at the specific -// time instead of immediately -// Default: "now" -//Unattended-Upgrade::Automatic-Reboot-Time "02:00"; - -// Use apt bandwidth limit feature, this example limits the download -// speed to 70kb/sec -//Acquire::http::Dl-Limit "70"; diff --git a/package/data/50unattended-upgrades.Debian b/package/data/50unattended-upgrades.Debian deleted file mode 100644 index 62f889b1d9df38fb7b0b550b7475cf1f6e74c0dd..0000000000000000000000000000000000000000 --- a/package/data/50unattended-upgrades.Debian +++ /dev/null @@ -1,94 +0,0 @@ -// Unattended-Upgrade::Origins-Pattern controls which packages are -// upgraded. -// -// Lines below have the format format is "keyword=value,...". A -// package will be upgraded only if the values in its metadata match -// all the supplied keywords in a line. (In other words, omitted -// keywords are wild cards.) The keywords originate from the Release -// file, but several aliases are accepted. The accepted keywords are: -// a,archive,suite (eg, "stable") -// c,component (eg, "main", "contrib", "non-free") -// l,label (eg, "Debian", "Debian-Security") -// o,origin (eg, "Debian", "Unofficial Multimedia Packages") -// n,codename (eg, "jessie", "jessie-updates") -// site (eg, "http.debian.net") -// The available values on the system are printed by the command -// "apt-cache policy", and can be debugged by running -// "unattended-upgrades -d" and looking at the log file. -// -// Within lines unattended-upgrades allows 2 macros whose values are -// derived from /etc/debian_version: -// ${distro_id} Installed origin. -// ${distro_codename} Installed codename (eg, "jessie") -Unattended-Upgrade::Origins-Pattern { - // Codename based matching: - // This will follow the migration of a release through different - // archives (e.g. from testing to stable and later oldstable). -// "o=Debian,n=jessie"; -// "o=Debian,n=jessie-updates"; -// "o=Debian,n=jessie-proposed-updates"; -// "o=Debian,n=jessie,l=Debian-Security"; - - // Archive or Suite based matching: - // Note that this will silently match a different release after - // migration to the specified archive (e.g. testing becomes the - // new stable). - - "o=*"; - -}; - -// List of packages to not update (regexp are supported) -Unattended-Upgrade::Package-Blacklist { -// "vim"; -// "libc6"; -// "libc6-dev"; -// "libc6-i686"; -}; - -// This option allows you to control if on a unclean dpkg exit -// unattended-upgrades will automatically run -// dpkg --force-confold --configure -a -// The default is true, to ensure updates keep getting installed -//Unattended-Upgrade::AutoFixInterruptedDpkg "false"; - -// Split the upgrade into the smallest possible chunks so that -// they can be interrupted with SIGUSR1. This makes the upgrade -// a bit slower but it has the benefit that shutdown while a upgrade -// is running is possible (with a small delay) -//Unattended-Upgrade::MinimalSteps "true"; - -// Install all unattended-upgrades when the machine is shuting down -// instead of doing it in the background while the machine is running -// This will (obviously) make shutdown slower -//Unattended-Upgrade::InstallOnShutdown "true"; - -// Send email to this address for problems or packages upgrades -// If empty or unset then no email is sent, make sure that you -// have a working mail setup on your system. A package that provides -// 'mailx' must be installed. E.g. "user@example.com" -//Unattended-Upgrade::Mail "root"; - -// Set this value to "true" to get emails only on errors. Default -// is to always send a mail if Unattended-Upgrade::Mail is set -//Unattended-Upgrade::MailOnlyOnError "true"; - -// Do automatic removal of new unused dependencies after the upgrade -// (equivalent to apt-get autoremove) -//Unattended-Upgrade::Remove-Unused-Dependencies "false"; - -// Automatically reboot *WITHOUT CONFIRMATION* if -// the file /var/run/reboot-required is found after the upgrade -//Unattended-Upgrade::Automatic-Reboot "false"; - -// Automatically reboot even if there are users currently logged in. -//Unattended-Upgrade::Automatic-Reboot-WithUsers "true"; - -// If automatic reboot is enabled and needed, reboot at the specific -// time instead of immediately -// Default: "now" -//Unattended-Upgrade::Automatic-Reboot-Time "02:00"; - -// Use apt bandwidth limit feature, this example limits the download -// speed to 70kb/sec -//Acquire::http::Dl-Limit "70"; diff --git a/package/data/50unattended-upgrades.Raspbian b/package/data/50unattended-upgrades.Raspbian deleted file mode 100644 index 9dd3538cef5cf928cc6516aba6c93f7ff57e4122..0000000000000000000000000000000000000000 --- a/package/data/50unattended-upgrades.Raspbian +++ /dev/null @@ -1,91 +0,0 @@ -// Unattended-Upgrade::Origins-Pattern controls which packages are -// upgraded. -// -// Lines below have the format format is "keyword=value,...". A -// package will be upgraded only if the values in its metadata match -// all the supplied keywords in a line. (In other words, omitted -// keywords are wild cards.) The keywords originate from the Release -// file, but several aliases are accepted. The accepted keywords are: -// a,archive,suite (eg, "stable") -// c,component (eg, "main", "contrib", "non-free") -// l,label (eg, "Rapsbian", "Raspbian-Security") -// o,origin (eg, "Raspbian", "Unofficial Multimedia Packages") -// n,codename (eg, "jessie", "jessie-updates") -// site (eg, "http.debian.net") -// The available values on the system are printed by the command -// "apt-cache policy", and can be debugged by running -// "unattended-upgrades -d" and looking at the log file. -// -// Within lines unattended-upgrades allows 2 macros whose values are -// derived from /etc/debian_version: -// ${distro_id} Installed origin. -// ${distro_codename} Installed codename (eg, "jessie") -Unattended-Upgrade::Origins-Pattern { - // Codename based matching: - // This will follow the migration of a release through different - // archives (e.g. from testing to stable and later oldstable). -// "o=Raspbian,n=jessie"; -// "o=Raspbian,n=jessie-updates"; -// "o=Raspbian,n=jessie-proposed-updates"; -// "o=Raspbian,n=jessie,l=Raspbian-Security"; - - // Archive or Suite based matching: - // Note that this will silently match a different release after - // migration to the specified archive (e.g. testing becomes the - // new stable). -// "o=Raspbian,a=stable"; -// "o=Raspbian,a=testing"; - "origin=Raspbian,archive=${distro_codename},label=Raspbian-Security"; -}; - -// List of packages to not update (regexp are supported) -Unattended-Upgrade::Package-Blacklist { -// "vim"; -// "libc6"; -// "libc6-dev"; -// "libc6-i686"; -}; - -// This option allows you to control if on a unclean dpkg exit -// unattended-upgrades will automatically run -// dpkg --force-confold --configure -a -// The default is true, to ensure updates keep getting installed -//Unattended-Upgrade::AutoFixInterruptedDpkg "false"; - -// Split the upgrade into the smallest possible chunks so that -// they can be interrupted with SIGUSR1. This makes the upgrade -// a bit slower but it has the benefit that shutdown while a upgrade -// is running is possible (with a small delay) -//Unattended-Upgrade::MinimalSteps "true"; - -// Install all unattended-upgrades when the machine is shuting down -// instead of doing it in the background while the machine is running -// This will (obviously) make shutdown slower -//Unattended-Upgrade::InstallOnShutdown "true"; - -// Send email to this address for problems or packages upgrades -// If empty or unset then no email is sent, make sure that you -// have a working mail setup on your system. A package that provides -// 'mailx' must be installed. E.g. "user@example.com" -//Unattended-Upgrade::Mail "root"; - -// Set this value to "true" to get emails only on errors. Default -// is to always send a mail if Unattended-Upgrade::Mail is set -//Unattended-Upgrade::MailOnlyOnError "true"; - -// Do automatic removal of new unused dependencies after the upgrade -// (equivalent to apt-get autoremove) -//Unattended-Upgrade::Remove-Unused-Dependencies "false"; - -// Automatically reboot *WITHOUT CONFIRMATION* if -// the file /var/run/reboot-required is found after the upgrade -//Unattended-Upgrade::Automatic-Reboot "false"; - -// If automatic reboot is enabled and needed, reboot at the specific -// time instead of immediately -// Default: "now" -//Unattended-Upgrade::Automatic-Reboot-Time "02:00"; - -// Use apt bandwidth limit feature, this example limits the download -// speed to 70kb/sec -//Acquire::http::Dl-Limit "70"; diff --git a/package/data/50unattended-upgrades.SteamOS b/package/data/50unattended-upgrades.SteamOS deleted file mode 120000 index 52c9b1db7292534a23980622fa8e1067def911a7..0000000000000000000000000000000000000000 --- a/package/data/50unattended-upgrades.SteamOS +++ /dev/null @@ -1 +0,0 @@ -50unattended-upgrades.Debian \ No newline at end of file diff --git a/package/data/50unattended-upgrades.Ubuntu b/package/data/50unattended-upgrades.Ubuntu deleted file mode 100644 index f55cf6d3576accf91b25bb19125ec91ed7402702..0000000000000000000000000000000000000000 --- a/package/data/50unattended-upgrades.Ubuntu +++ /dev/null @@ -1,63 +0,0 @@ -// Automatically upgrade packages from these (origin:archive) pairs -Unattended-Upgrade::Allowed-Origins { - "${distro_id}:${distro_codename}"; - "${distro_id}:${distro_codename}-security"; - "${distro_id}:${distro_codename}-updates"; - // "${distro_id}:${distro_codename}-proposed"; - // "${distro_id}:${distro_codename}-backports"; - "C3SL:stable"; - "C3SL:testing"; - -}; - -// List of packages to not update (regexp are supported) -Unattended-Upgrade::Package-Blacklist { -// "vim"; -// "libc6"; -// "libc6-dev"; -// "libc6-i686"; -}; - -// This option allows you to control if on a unclean dpkg exit -// unattended-upgrades will automatically run -// dpkg --force-confold --configure -a -// The default is true, to ensure updates keep getting installed -//Unattended-Upgrade::AutoFixInterruptedDpkg "false"; - -// Split the upgrade into the smallest possible chunks so that -// they can be interrupted with SIGUSR1. This makes the upgrade -// a bit slower but it has the benefit that shutdown while a upgrade -// is running is possible (with a small delay) -Unattended-Upgrade::MinimalSteps "true"; - -// Install all unattended-upgrades when the machine is shuting down -// instead of doing it in the background while the machine is running -// This will (obviously) make shutdown slower -//Unattended-Upgrade::InstallOnShutdown "true"; - -// Send email to this address for problems or packages upgrades -// If empty or unset then no email is sent, make sure that you -// have a working mail setup on your system. A package that provides -// 'mailx' must be installed. E.g. "user@example.com" -//Unattended-Upgrade::Mail "root"; - -// Set this value to "true" to get emails only on errors. Default -// is to always send a mail if Unattended-Upgrade::Mail is set -//Unattended-Upgrade::MailOnlyOnError "true"; - -// Do automatic removal of new unused dependencies after the upgrade -// (equivalent to apt-get autoremove) -Unattended-Upgrade::Remove-Unused-Dependencies "True"; - -// Automatically reboot *WITHOUT CONFIRMATION* -// if the file /var/run/reboot-required is found after the upgrade -//Unattended-Upgrade::Automatic-Reboot "false"; - -// If automatic reboot is enabled and needed, reboot at the specific -// time instead of immediately -// Default: "now" -//Unattended-Upgrade::Automatic-Reboot-Time "02:00"; - -// Use apt bandwidth limit feature, this example limits the download -// speed to 70kb/sec -//Acquire::http::Dl-Limit "70"; diff --git a/package/data/cront.py b/package/data/cront.py deleted file mode 100644 index ae1359d41f455faabccf3de0fa6b51108a370940..0000000000000000000000000000000000000000 --- a/package/data/cront.py +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/env python3 -#!/usr/bin/python3 -# -# Copyright (C) 2004-2016 Centro de Computacao Cientifica e Software Livre -# Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR -# -# This file is part of unattended-upgrade (c3sl ver.) -# -# unattended-upgrade (c3sl ver.) is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -# USA. - - -import random -from crontab import CronTab -from uuid import getnode as get_mac -from io import StringIO - -# get the mac adress of the machine so we can calculate a random number -def get_mac_adress(): - mc = get_mac() % 10000 - return mc - - -def get_random_minute(mac): - mi = mac % 59 - return mi - - -def get_random_hour(mac): - two_first = str(mac) - two_first = int(two_first[:2]) - if (two_first > 23): - two_first = random.randrange(0, 23) - return two_first - - -# change the upgrade job to start on a random time -def change_crontabs(): - mac = get_mac_adress() - minute = get_random_minute(mac) - hour = get_random_hour(mac) - cron = CronTab(tabfile='/etc/crontab') - cmd = "root test -x /usr/sbin/anacron ||" \ - "( cd / && run-parts --report /etc/cron.daily )" - # need to change anacron tab to guarante it will run on the right time - anacron = CronTab(tabfile='/etc/cron.d/anacron') - cmd2 = "test -x /etc/init.d/anacron &&" \ - "/usr/sbin/invoke-rc.d anacron start >/dev/null" - # remove old daily update time - cron.remove_all(command='( cd / && run-parts --report /etc/cron.daily )') - anacron.remove_all(command='test -x /etc/init.d/anacron') - # create the new job on crontab - job = cron.new(command=cmd) - job.minute.on(minute) - job.hour.on(hour) - job.enable() - cron.write() - # create the new job on anacron - job2 = anacron.new(cmd2) - job2.minute.on(minute) - if(hour+1 == 24): - job2.hour.on(hour - 1) - else: - job2.hour.on(hour + 1) - job2.enable() - anacron.write() - - -change_crontabs() diff --git a/package/data/logrotate.d/unattended-upgrades b/package/data/logrotate.d/unattended-upgrades deleted file mode 100644 index 83937678f5c01d6730c3ec03088e546bb484710c..0000000000000000000000000000000000000000 --- a/package/data/logrotate.d/unattended-upgrades +++ /dev/null @@ -1,10 +0,0 @@ -/var/log/unattended-upgrades/unattended-upgrades.log -/var/log/unattended-upgrades/unattended-upgrades-dpkg.log -/var/log/unattended-upgrades/unattended-upgrades-shutdown.log -{ - rotate 6 - monthly - compress - missingok - notifempty -} diff --git a/package/data/preferences b/package/data/preferences deleted file mode 100644 index 9b3b99a00c0d828f865e3d9acf615feb7da8afd9..0000000000000000000000000000000000000000 --- a/package/data/preferences +++ /dev/null @@ -1,11 +0,0 @@ -Package: * -Pin: origin repo.c3sl.ufpr.br -Pin-Priority: 1100 - -Package: * -Pin: release n=xenial -Pin-Priority: 100 - -Package: * -Pin: release n=xenial-updates -Pin-Priority: 100 diff --git a/package/debian/NEWS.Debian b/package/debian/NEWS.Debian deleted file mode 100644 index cc6b9c8092af2b9edd15961a509f96f01ff5aeb4..0000000000000000000000000000000000000000 --- a/package/debian/NEWS.Debian +++ /dev/null @@ -1,11 +0,0 @@ -unattended-upgrades (0.50) unstable; urgency=low - - When running with the --debug switch, previous versions of - unattended-upgrades would just print what they do, but not - actually perform any dpkg actions like installing or upgrading. - - This behavior has *changed* in version 0.50 it will now - install/upgrade. There is a new option called "--dry-run" to - get this behavior back. - - -- Michael Vogt <mvo@debian.org> Fri, 03 Jul 2009 09:15:08 +0200 diff --git a/package/debian/changelog b/package/debian/changelog index 9e93e77a402355c4aff001cbb8ddf06f7016cac0..6b13792f23922e97b844d99223fa837493595040 100644 --- a/package/debian/changelog +++ b/package/debian/changelog @@ -1,1620 +1,5 @@ -unattended-upgrades (1.0.4) testing; urgency=medium +le-autoupgrade (0.0.1) testing; urgency=medium - * Fix in configuration to get updates from repository + * Configure apt and unatended-upgrades for automatic update of the system - -- Arianne de Paula Bortolan <apb14@inf.ufpr.br> Wed, 24 May 2017 09:16:13 -0200 - -unattended-upgrades (1.0.3) testing; urgency=medium - - * Change in 50unattended archive - - -- Arianne de Paula Bortolan <apb14@inf.ufpr.br> Thu, 10 May 2017 10:13:13 -0200 - -unattended-upgrades (1.0.2) testing; urgency=medium - - * Fix on cron.py - - -- Arianne de Paula Bortolan <apb14@inf.ufpr.br> Tue, 17 Jan 2017 09:53:40 -0200 - -unattended-upgrades (1.0.1) testing; urgency=medium - - * Change for rebase - - -- Arianne de Paula Bortolan <apb14@inf.ufpr.br> Fri, 13 Jan 2017 11:43:30 -0200 - -unattended-upgrades (1.0.0) testing; urgency=medium - - * Modified package version so guarante to install correct version on LE6. - * Add man page with patch name of this package. - - -- Arianne de Paula Bortolan <apb14@inf.ufpr.br> Fri, 13 Jan 2017 11:43:30 -0200 - -unattended-upgrades (0.9.2) testing; urgency=medium - - * Modified data/50unattended-upgrades.Ubuntu to guarantee - the removal of unused dependency packages and set minimal steps enable. - * Modified config file to auto-enable the package. - * Adition of scripts to set the uptades to happen in random hour. - - -- Arianne de Paula Bortolan <apb14@inf.ufpr.br> Wed, 14 Dec 2016 11:39:42 -0200 - -unattended-upgrades (0.90.1) xenial-proposed; urgency=medium - - * Modify data/50unattended-upgrades.Ubuntu such that the release pocket is - an allowed origin so that security updates with a new dependency will be - upgraded and the new dependency will be installed. (LP: #1624641) - - -- Brian Murray <brian@ubuntu.com> Tue, 11 Oct 2016 10:36:48 -0700 - -unattended-upgrades (0.90) unstable; urgency=medium - - [ Alexandre Detiste ] - * tweak a bit the French translations - - [ Michael Vogt ] - * debian/templates: set unattended-upgrades/enable_auto_updates to - "true" (Closes: #707055) - * debian/config: set debconf questions about origin/enable to low - - -- Michael Vogt <mvo@debian.org> Thu, 18 Feb 2016 14:05:58 -0800 - -unattended-upgrades (0.89.1) unstable; urgency=medium - - * fix FTBFS - - -- Michael Vogt <mvo@debian.org> Wed, 03 Feb 2016 12:37:49 +0100 - -unattended-upgrades (0.89) unstable; urgency=medium - - [ Michael Vogt ] - * Add `Unattended-Upgrade::Remove-New-Unused-Dependencies` that - defaults to "yes". This ensures that older kernel - get automatically cleaned up and /boot will not overflow. - LP: #1267059 - * Remove downloaded deb packages after successful installs. - This can be controlled via the option: - `Unattended-Upgrade::Keep-Debs-After-Install` - (Closes: #809428) - * Only remove debs in the cache dir - - [ Steffen Köhler ] - * Allow to configure sender email via `Unattended-Upgrade::Sender` - - [ Antti Riikonen ] - * Minor typo fix in comment - - [ Cleto Martin ] - * bugfix: non-ascii chars in dpkg log file crashes unattended upgrades - Closes: #812857 - - [ James Valleroy ] - * Set debconf value for auto updates based on current configuration. - - [ Alexandre Detiste ] - * update French transalation - - -- Michael Vogt <mvo@debian.org> Sat, 30 Jan 2016 16:04:52 +0100 - -unattended-upgrades (0.86.5) unstable; urgency=low - - [ Christian Perrier ] - * Debconf templates and debian/control reviewed by the debian-l10n- - english team as part of the Smith review project. Closes: #801166 - * Russian (Yuri Kozlov). Closes: #803950 - * Danish (Joe Hansen). Closes: #804086 - * Basque (Iñaki Larrañaga Murgoitio). Closes: #804136 - * German (Chris Leick). Closes: #804309 - * Czech (Michal Simunek). Closes: #804665 - * Italian (Luca Monducci). Closes: #805138 - * Catalan; (Innocent De Marchi). Closes: #805298 - * Dutch; (Frans Spiesschaert). Closes: #805303 - * French (Steve Petruzzello). Closes: #805468 - * Portuguese (Miguel Figueiredo). Closes: #805735 - - -- Michael Vogt <mvo@debian.org> Mon, 23 Nov 2015 11:47:33 +0100 - -unattended-upgrades (0.86.4) unstable; urgency=medium - - [ Jérôme Lafréchoux ] - * Add [package on hold] to mail subject - - [ James Valleroy ] - * Add debconf question to set default line of Origins-Pattern. - * Ran debconf-updatepo. - - [ Michael Vogt ] - * Revert usage of "lgettext()" (9ec6c4b) - - -- Michael Vogt <mvo@debian.org> Mon, 05 Oct 2015 18:17:26 +0200 - -unattended-upgrades (0.86.3) unstable; urgency=medium - - * Fix new pep8 errors (Closes: 796405) - - -- Michael Vogt <mvo@debian.org> Tue, 25 Aug 2015 10:17:38 +0200 - -unattended-upgrades (0.86.2) unstable; urgency=medium - - [ Antoine Beaupré ] - * display translations in proper locale - * use logging arguments instead of formatting everywhere - (closes: #789277) - - [ Alexandre Detiste ] - * auto-remove: don't print a message with empty list of pkg - - -- Michael Vogt <mvo@debian.org> Sat, 11 Jul 2015 11:18:44 +0200 - -unattended-upgrades (0.86.1) unstable; urgency=medium - - * fix missing package authentication check for apt - configurations that force-{confold,confnew} (CVE-2015-1330) - LP: #1466380 - - -- Michael Vogt <mvo@debian.org> Mon, 29 Jun 2015 19:28:06 +0200 - -unattended-upgrades (0.86) unstable; urgency=medium - - * unattended-upgrade: - - improve log message on successful auto-removal (thanks to a-detiste) - * debian/tests/control: - - fix missing python{,3}-mock dependency to fix autopkgtest failure - * debian/control: - - lower dh-systemd build-dependency to 1.5 (as recommended in the - systemd/Packaging wiki page) to make it backport friendlier - * Also send mails on WARNINGS if in MailOnlyOnError mode - (Closes: #703621) - * Rename NAME/Description to "unattended-upgrades-shutdown" - (Closes: #783810) - * Fix conffile detection for removed conffiles (Closes: #788049) - - -- Michael Vogt <mvo@debian.org> Wed, 17 Jun 2015 10:28:25 +0200 - -unattended-upgrades (0.85) unstable; urgency=medium - - [ Alexandre Detiste ] - * Add new Unattended-Upgrade::Automatic-Reboot-WithUsers option - * add Build-Depends: for python{,3}-mock - - [ Alexander Skiba ] - * Fix Unattended-Upgrade::Remove-Unused-Dependencies and apply to - all automatic dependencies - - [ Michael Vogt ] - * Test fixes - - -- Michael Vogt <mvo@debian.org> Wed, 27 May 2015 14:01:38 +0200 - -unattended-upgrades (0.83.8) unstable; urgency=low - - * fix default configuration to match the jessie security - server configuration (closes: #783690) - - -- Michael Vogt <mvo@debian.org> Fri, 01 May 2015 08:47:07 +0200 - -unattended-upgrades (0.83.7) unstable; urgency=medium - - [ Michael Vogt ] - * fix errno import - - [ Brian Murray ] - * In the apport package hook gather the right log file name. - - -- Michael Vogt <mvo@debian.org> Tue, 31 Mar 2015 11:01:04 -0400 - -unattended-upgrades (0.83.6) unstable; urgency=medium - - [ Brian Murray ] - * Handle the situation where you may not be able to decrease process - niceness e.g. on an lxc container. - - -- Michael Vogt <mvo@debian.org> Thu, 05 Mar 2015 11:32:50 -0500 - -unattended-upgrades (0.83.5) unstable; urgency=medium - - [ Brian Murray ] - * properly restore niceness (LP: #1422345) - - -- Michael Vogt <mvo@debian.org> Thu, 19 Feb 2015 15:06:58 +0100 - -unattended-upgrades (0.83.4) unstable; urgency=medium - - [ Alexandre Detiste ] - * fix sending dpkg log in mails (Closes: #776752) - - [ Michael Vogt ] - * Document how the reboot-required file is generated (Closes: #776769) - * Add recommends to cron|cron-daemon|anacron (Closes: #776550), - thanks to Alexandre Detiste and christophe - * Ship /etc/kernel/postinst.d hook to ensure the - /var/run/reboot-required file is created (avoid the need to have - update-notifier-common installed) (Closes: #776769) - - -- Michael Vogt <mvo@debian.org> Tue, 10 Feb 2015 13:58:26 +0100 - -unattended-upgrades (0.83.3) unstable; urgency=medium - - [ Alexandre Detiste ] - * add Raspbian template - - [ Michael Vogt ] - * Attach all dpkg log to the summary mail on minimal-upgrades-steps mode - (closes: #759693) - - -- Michael Vogt <mvo@debian.org> Wed, 10 Dec 2014 21:36:34 +0100 - -unattended-upgrades (0.83.2) unstable; urgency=medium - - [ Martin-Éric Racine ] - * debian/changelog: - - updated to the DEP-5 format - - [ Alexandre Detiste ] - * Fix spurious newlines - - -- Michael Vogt <mvo@debian.org> Wed, 26 Nov 2014 10:19:48 +0100 - -unattended-upgrades (0.83.1) unstable; urgency=medium - - * unattended-upgrade: - - fix regression and only send out the most recent dpkg log part - when sending the summary mail (closes: #759693) - * README.md: - - improve documentation - * debian/control: - - update Vcs-Bzr location - - -- Michael Vogt <mvo@debian.org> Mon, 24 Nov 2014 11:09:41 +0100 - -unattended-upgrades (0.83) unstable; urgency=medium - - * add Unattended-Upgrade::Package-Whitelist to allow upgrading - only whitelisted regexp packagenames (plus their dependencies) - (thanks to Christopher Warner) - * add Unattended-Upgrade::Package-Whitelist-Strict boolean option - to make Unattended-Upgrade::Package-Whitelist also check if all - dependencies are whitelisted - * unattended-upgrades: - - fix output when "dpkg --configure -a" is run to recover - from a unclean state - - log to a rotated and compressed - /var/log/unattended-upgrades/unattended-upgrades-dpkg.log - logfile instead of to multiple small logs (closes: #759693) - - log u-u commandline via apt logging in /var/log/apt/history.log - * debian/postinst: - - set /var/log/unattended-upgrades/ permissions to 0750 - (closes: #757438). Thanks to Joey Hess - - -- Michael Vogt <mvo@debian.org> Fri, 17 Oct 2014 15:50:29 +0200 - -unattended-upgrades (0.82.10) unstable; urgency=medium - - [ Helge Kreutzmann ] - * Move misplaced German program translation update from debian/po/de.po to - po/de.po and update debconf translation from Chris Leick, closes: #751162 - - -- Michael Vogt <mvo@debian.org> Sun, 21 Sep 2014 21:31:20 +0200 - -unattended-upgrades (0.82.9) unstable; urgency=low - - * po/da.po: - - updated, thanks to Joe Dalton, closes: #754130 - * debian/po/tr.po: - - add Turkish translation, thanks to Mert Dirik - closes: #757500 - * unattended-upgrades: - - improve docstring for adjust_candidate_versions - - ignore versions with pin priority < 100 (instead of < 0), - thanks to Stefano Zacchiroli - - raise error if there are marked removals in the cache - (as a extra precaution) - * README.md: - - add example for matching all upgradable packages - (thanks to Paul van der Vlis for the suggestion) - - -- Michael Vogt <mvo@debian.org> Thu, 21 Aug 2014 09:42:52 +0200 - -unattended-upgrades (0.82.8) unstable; urgency=low - - * really add unattended-upgrades.service file, thanks - to Simon McVittie (closes: #745992) - * pep8 fixes - - -- Michael Vogt <mvo@debian.org> Fri, 04 Jul 2014 16:55:19 +0200 - -unattended-upgrades (0.82.7) unstable; urgency=low - - [ Michael Stapelberg ] - * Add native systemd service file (closes: #745992) - - [ Brian Murray ] - * add in an apport package hook (LP: #1078386) - - -- Michael Vogt <mvo@debian.org> Fri, 16 May 2014 08:33:23 +0200 - -unattended-upgrades (0.82.6) unstable; urgency=medium - - * unattended-upgrades, test/test_rewind.py: - - fix regression in rewind_cache() and add test (closes: 743594) - * unattended-upgrade: - - ensure minimal-upgrades-modes does not truncate dpkg output log - - -- Michael Vogt <mvo@debian.org> Tue, 08 Apr 2014 16:05:23 +0200 - -unattended-upgrades (0.82.5) unstable; urgency=low - - [ Michael Vogt ] - * debian/po/de.po: - - updated, thanks to Chris Leick closes: #741739 - * unattended-upgrades: - - fix pyflakes error with latest pyflakes (thanks to - Barry Warsaw) - - [ Martin Pitt ] - * debian/tests/control: Add missing python-apt test dependency, so that - tests also work with Python 2. - - -- Michael Vogt <mvo@debian.org> Thu, 03 Apr 2014 14:47:16 +0200 - -unattended-upgrades (0.82.4) unstable; urgency=low - - [ Simon McVittie ] - * do not ship generated files (*.pyc) in the source package - (closes: 741467) - - [ Michael Vogt ] - * add debian/source/format - - -- Michael Vogt <mvo@debian.org> Fri, 14 Mar 2014 10:29:22 +0100 - -unattended-upgrades (0.82.3) unstable; urgency=low - - * restore python2-apt compatibility, thanks to Simon McVittie - closes: #740847 - * ensure rewind_cache() does never cause a broken state - - -- Michael Vogt <mvo@debian.org> Wed, 05 Mar 2014 18:23:05 +0100 - -unattended-upgrades (0.82.2) unstable; urgency=low - - * Merged lp:~paniemin/unattended-upgrades/unattended-upgrades: - - show full exception in verbose mode - * ignore minimal paritions that are forbidden (because they - contain e.g. blacklisted packages) - * fix Bug in rewind_cache() that can cause unwanted removals of - packages , thanks to the Pierre-Loup A. Griffais and - Simon McVittie - - -- Michael Vogt <mvo@debian.org> Mon, 03 Mar 2014 23:05:19 +0100 - -unattended-upgrades (0.82.1) unstable; urgency=medium - - [ Brian Murray ] - * Do not reboot if run with --dry-run (LP: #1269177) - * Continue if there are no changes, thanks to Ludovico Cavedon for the - patch. (LP: #1265729) - - -- Michael Vogt <mvo@debian.org> Mon, 17 Feb 2014 14:23:17 +0100 - -unattended-upgrades (0.82) unstable; urgency=low - - [ Brian Murray ] - * unattended-upgrade: specify charset when setting email payload for - python3.4 (LP: #1272381) - * change logging.warn calls to logging.warning - * test/test_email.py: use with to open email in test_mail_quoted_printable - - -- Michael Vogt <mvo@debian.org> Thu, 06 Feb 2014 08:54:25 +0100 - -unattended-upgrades (0.81) unstable; urgency=low - - * add default template for SteamOS (symlink to Debian for now - as the customization is done in their steamos-autoupdate package) - * write /var/lib/apt/periodic/unattended-upgrades-stamp, thanks to - John Vert for the suggestion - * do the upgrade calculation with os.nice(19) - * add --minimal-upgrade-steps commandline option but keep - --minimal_upgrade_steps for compatiblity - * fix reading DISTRO_ID/DISTRO_CODENAME from lsb_release - - -- Michael Vogt <mvo@debian.org> Sun, 29 Dec 2013 09:16:24 +0100 - -unattended-upgrades (0.80) unstable; urgency=low - - [ Michael Vogt ] - * use dpkg-vendor --query Vendor instead of lsb_release -i -s - to avoid build-dependency on lsb-release - * data/50unattended-upgrades.Debian: - - use ${distro_codename} instead of "stable" to avoid issues - on release upgrades, thanks to Evgeny Kapun (closes: #707002) - - document that the pkg blacklist can contain regular expressions, - thanks to Thomas Reusch for the suggestion - * unattended-upgrade: - - make the mail sending more robust when facing unicode encoding - errors - * switch to python3 by default - - [ Loïc Minier ] - * lp:~lool/unattended-upgrades/static-cherckers-fixes: - - run the tests at build time instead of via auto-pkg-test - - -- Michael Vogt <mvo@debian.org> Sat, 14 Dec 2013 10:17:52 +0100 - -unattended-upgrades (0.80~sid2) unstable; urgency=low - - * fix crash when --dry-run --debug is given, thanks to - Sephan Helas - * debian/control: - - update maintainer address - - fix Vcs location - * data/50unattended-upgrades.Debian: - - updated for jessie - * README.md: - - switch to markdown - - -- Michael Vogt <mvo@debian.org> Thu, 16 May 2013 11:07:07 +0200 - -unattended-upgrades (0.80~sid1) unstable; urgency=low - - * merge fixes from the experimental uploads - - -- Michael Vogt <mvo@debian.org> Wed, 08 May 2013 19:12:36 +0200 - -unattended-upgrades (0.80~exp3) UNRELEASEDexperimental; urgency=low - - * merged lp:~mvo/unattended-upgrades/py3 - - this merges the py3 compatibilty from debian - * enable pep8/pyflakes by default - * Add new Unattended-Upgrade::Automatic-Reboot-Time to control - when machines that need reboot are rebooting - * Fix crash when --dry-run and --verbose are used (thanks to - Bernhard Schmidt), closes: #705615 - - -- Michael Vogt <michael.vogt@ubuntu.com> Thu, 11 Apr 2013 06:45:05 +0200 - -unattended-upgrades (0.80~exp2) experimental; urgency=low - - * add codename based matching - * add support for "${distro_id}", "${distro_codename}" in the - Unattended-Upgrade::Origins-Pattern based matching too - * data/50unattended-upgrades.Debian: - - improve documentation, thanks to Russell Stuart - - -- Michael Vogt <mvo@debian.org> Thu, 14 Mar 2013 09:19:22 +0100 - -unattended-upgrades (0.80~exp1) experimental; urgency=low - - [ Michael Vogt ] - * lp:~mvo/unattended-upgrades/verbose: - - add --verbose that shows output and terminal output - * drop --with python2 as its just a single script - * debian/control: - - depend on latest python-apt in experimental for the "codename" - based origin matching - * data/50unattended-upgrades.Debian: - - re-add the codename (n=) based matching example - - [ Brian Murray ] - * unattended-upgrade: - - log that sendmail works as an alternative to mailx - - fix a issue with the tense of packages being upgraded - Richard for the initial patch (LP: #1069809) - - -- Michael Vogt <mvo@debian.org> Thu, 14 Mar 2013 06:34:27 +0100 - -unattended-upgrades (0.79.5) unstable; urgency=low - - * data/50unattended-upgrades.{Debian,Ubuntu}: - - add missing ";" in the example config, thanks to Tomas Pospisek - closes: #684876 - - remove codename based matching example as this needs a newer - python-apt than available in wheezy, thanks to Russell Stuart - * unattended-upgrade, test/test_origin_pattern.py: - - if a unknown matcher token is found, raise a error instead of - silently ignoring it, thanks to Russell Stuart - * unattended-upgrade: - - do not nice/ionice as this wil affect daemon restarts - (closes: #701850) - - -- Michael Vogt <mvo@debian.org> Fri, 01 Mar 2013 10:07:30 +0100 - -unattended-upgrades (0.79.3ubuntu8) saucy; urgency=low - - * Fix two PEP-8 errors to fix autopkgtest. - - -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 09 Sep 2013 11:39:12 -0400 - -unattended-upgrades (0.79.3ubuntu7) raring; urgency=low - - [ Michael Vogt ] - * data/logrotate.d/unattended-upgrades: - - only logrotate - /var/log/unattended-upgrades/unattended-upgrades{,-shutdown}.log - and not the dpkg logs (LP: #1081034) - * tests/*.py: - - updated pep8 tests, make pyflakes test "test" dir too - * test/test_regression.py: - - regression test for crash in normal_upgrade exception handler - - [ Thomas Kluyver ] - * lp:~takluyver/unattended-upgrades/apt-lock-crash: - - fix encoding bug when writing a error to stderr - - -- Michael Vogt <michael.vogt@ubuntu.com> Tue, 11 Dec 2012 18:52:24 +0100 - -unattended-upgrades (0.79.3ubuntu6) raring; urgency=low - - [ Brian Murray ] - * unattended-upgrade: - - fix a issue with the tense of packages being upgraded - - log that sendmail works as an alternative to mailx - - add the result of the upgrade to email subject, thanks to Yann 'Ze' - Richard for the initial patch (LP: #1069809) - - [ Michael Vogt ] - * unattended-upgrade: - - fix debug output for origins checking in py3 - - [ Martin Pitt ] - * Fix PEP-8 errors throughout the code to fix the autopkgtest failure. - - -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 21 Nov 2012 07:48:55 +0100 - -unattended-upgrades (0.79.3ubuntu5) raring; urgency=low - - [ Colin Watson ] - * Add pep8 as a dependency of the DEP-8 test suite. - - [ Martin Pitt ] - * test/Makefile: Redirect unittest stderr to stdout, to avoid failure in - autopkgtest. - * debian/tests/control: Add missing pyflakes dependency. - - -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 09 Nov 2012 14:22:51 +0100 - -unattended-upgrades (0.79.3ubuntu4) quantal; urgency=low - - * lp:~mvo/unattended-upgrades/minimal-step-paranonia-lp1020680: - - ensure the blacklist/origin constrains are never violated for - some corner cases in the minimal-upgrade mode (LP: #1020680) - - -- Michael Vogt <michael.vogt@ubuntu.com> Tue, 09 Oct 2012 10:08:01 +0200 - -unattended-upgrades (0.79.3ubuntu3) quantal; urgency=low - - * lp:~mvo/unattended-upgrades/lp1061498: - - fix crash in dpkg_conffile_prompt() (LP: #1061498) - * lp:~mvo/unattended-upgrades/create-logdir-in-shutdown-helper-lp1013363: - - create logdir in the shutdown helper if needed (LP: #1013363) - - -- Michael Vogt <michael.vogt@ubuntu.com> Fri, 05 Oct 2012 17:57:38 +0200 - -unattended-upgrades (0.79.3ubuntu2) quantal; urgency=low - - [ Marc Tardif ] - * Fixed debug output when a package has no candidates (LP: #1046438) - - [ Michael Vogt ] - * debian/test/: - - add dep8 tests - - -- Michael Vogt <michael.vogt@ubuntu.com> Fri, 14 Sep 2012 10:41:08 +0200 - -unattended-upgrades (0.79.3ubuntu1) quantal; urgency=low - - [ Thomas Kluyver ] - * Port to Python 3 - - [ Brian Murray ] - * unattended-upgrade: fix typo in debugging output - - -- Michael Vogt <michael.vogt@ubuntu.com> Mon, 10 Sep 2012 09:55:19 +0200 - -unattended-upgrades (0.79.4) unstable; urgency=low - - * lp:~mvo/unattended-upgrades/timed-reboot: - - support auto rebooting at specific times instead of "now", thanks - to Thomas Reusch for the suggestion - * lp:~mvo/unattended-upgrades/support-glob-in-matchers: - - support fnmatch style glob in the whitelist origin matching - * data/logrotate.d/unattended-upgrades: - - only logrotate - /var/log/unattended-upgrades/unattended-upgrades{,-shutdown}.log - and not the dpkg logs (LP: #1081034) - * lp:~mvo/unattended-upgrades/lp1061498: - - fix crash in dpkg_conffile_prompt() (LP: #1061498) - * lp:~mvo/unattended-upgrades/xz-support: - - add missing xz-utils dependency, thanks to Bastian Blank - (closes: #698552) - * unattended-upgrade, test/test_mail.py: - - -- Michael Vogt <mvo@debian.org> Mon, 21 Jan 2013 17:27:31 +0100 - -unattended-upgrades (0.79.3) unstable; urgency=low - - * unattended-upgrade: - - fix assert text, thanks to Niels Thykier - * really include the updated es.po, thanks to Niels Thykier - - -- Michael Vogt <mvo@debian.org> Tue, 07 Aug 2012 12:20:05 +0200 - -unattended-upgrades (0.79.2) unstable; urgency=low - - * use "mail -s" again to ensure there is a proper subject line when - using mailx - * do not attach headers when using mailx - * use sendmail instead of mailx when available to get a proper mime - mail with correct encoding etc (closes: #654851, #681442) - Thanks to Bjørn Mork and Teodor MICU - * po/es.po: - - updated, thanks to Omar Campagne, closes: #681334 - * debian/control: - - add suggests for mail-transport-agent - * only use ionice if available (closes: #681467) - * make pyflakes clean and add test - - -- Michael Vogt <mvo@debian.org> Fri, 13 Jul 2012 20:54:05 +0200 - -unattended-upgrades (0.79.1) unstable; urgency=low - - * Set apt-listchanges frontend to "mail" if sendmail is available, - the default behavior of apt-listchanges is to send a mail (if there - is a email_address in apt-listchanges.conf) even with pager/gtk - frontends so this will ensure the same behavior (closes: #579733) - * Do not use "mail -a" as this is not POSIX, instead use the python - email.Message package to construct a proper utf8 message - (closes: #654851) - - -- Michael Vogt <mvo@debian.org> Wed, 11 Jul 2012 22:34:14 +0200 - -unattended-upgrades (0.79) unstable; urgency=low - - [ Translation updates ] - * po/pt_BR.po: - - updated, thanks to David Prévot, closes: #678423 - * po/cs.po: - - removed, was a debconf translation - * po/ru.po: - - updated, thanks to Yuri Kozlov, closes: #678427 - * po/gl.po: - - added, thanks to Jorge Barreiro, closes: #678634 - * po/pt.po: - - added, thanks to Pedro Ribeiro, closes: #678738 - * po/sk.po: - - added, thanks to helix84, closes: #677471 - - [ Teodor MICU ] - * debian/unattended-upgrades.init: - - fixes new style lsb-init output, closes: #678030 - - [ Michael Vogt ] - * correctly detect conffile prompt for new conffiles that were - normal files previously (like /etc/profile in base-files 6.8), - closes: #673237 - * code cleanup in conffile detection and tests - * Set mail header to utf8 for the summary email (closes: #654851) - * use stdout instead of stderr in --debug mode (closes: #674140) - * data/50unattended-upgrades.{Debian,Ubuntu}: - - change default mail recipient to "root" intead of "root@localhost" - to help systems without a real mail setup (closes: #648149) - * ignore packages in the blacklist early to avoid un-upgradable warning - for mixed stable/testing systems (closes: #645382) - - -- Michael Vogt <mvo@debian.org> Fri, 29 Jun 2012 13:22:54 +0200 - -unattended-upgrades (0.78) unstable; urgency=low - - [ Michael Vogt ] - * data/logrotate.d/unattended-upgrades: - - simplify, thanks to Teodor MICU - * refresh po/pot automatically on clean, closes: #670473 - * po/da.po: - - updated, thanks to Joe Dalton, closes: #677804 - * po/de.po: - - updated, thanks to Chris Leick (closes: #678204) - - [ Teodor MICU ] - * debian/unattended-upgrades.init: - - use new style lsb-init output, closes: #678030 - - -- Michael Vogt <mvo@debian.org> Thu, 21 Jun 2012 17:05:22 +0200 - -unattended-upgrades (0.77) unstable; urgency=low - - * unattended-upgrade: - - ignore md5sum "newconffile" (LP: #936870) - - simply ignore SIGHUP instead of the setsid() magic - - redirect ionice stderr output to /dev/null to avoid - showing a error in a OpenVZ env (closes: #675021) - * unattended-upgrade-shutdown: - - be robust about import apt_pkg failures (LP: #808449), e.g. - during upgrades - - log when install finished to help track down LP #434835 - - do not log to syslog anymore as this *might* block and - could cause LP #434835 and was not working in most cases - as syslog was killed before it could log - - log instead to /var/log/unattended-upgrades-shutdown.log - to help track down LP #434835 - * debian/unattended-upgrades.init: - - add Required-{Start,Stop}: $local_fs to help track down LP #434835 - * po/fr.po: - - updated french translation (closes: #675916) - - -- Michael Vogt <mvo@debian.org> Mon, 11 Jun 2012 16:57:33 +0200 - -unattended-upgrades (0.76.3) unstable; urgency=low - - * unattended-upgrades: - - check if "apt.package.Version" has "policy_priority" before - using it (closes: #670131) - - -- Michael Vogt <mvo@debian.org> Tue, 24 Apr 2012 09:07:58 +0200 - -unattended-upgrades (0.76.2) unstable; urgency=low - - * unattended-upgrades: - - its ok if setsid fails (closes: #669583) - - -- Michael Vogt <mvo@debian.org> Fri, 20 Apr 2012 09:21:38 +0200 - -unattended-upgrades (0.76.1) unstable; urgency=low - - * unattended-upgrade: - - honor pin priority of < 0 when selecting new candidates - - use os.setsid() to not get killed when the terminal goes away - - only print to stdout if there is no summary mail configured - - -- Michael Vogt <mvo@debian.org> Thu, 19 Apr 2012 19:06:18 +0200 - -unattended-upgrades (0.76) unstable; urgency=low - - * add basic "Unattended-Upgrades::InstallOnShutdown" option to do - the install step on shutdown (closes: #652982) instead of doing - it in the backgroud while the machine is running - * test improvements - * fix mispelled "Unattended-Upgrade::MinimalSteps" (and add compat - mode) - * unattended-upgrade: - - cleanup FDs to hopefully fix zombies (closes: #646620) - - -- Michael Vogt <mvo@debian.org> Fri, 09 Mar 2012 09:42:33 +0100 - -unattended-upgrades (0.75.1) unstable; urgency=low - - * print conffile hold-backs to stdout to ensure its part of - the cron mail (LP: #773007), thanks to Jean-Baptiste Lallement - * unattended-upgrade: - - fix crash on automatic-reboot, thanks to Teodor (closes: #651822) - * typo fixes, thanks to Lei Zhang - - -- Michael Vogt <mvo@debian.org> Mon, 12 Dec 2011 14:01:41 +0100 - -unattended-upgrades (0.75) unstable; urgency=low - - * add tests for compat mode and spaces in a origin - * escape "," in the Allowed-Origins compat mode (LP: #824856) - * merged lp:~mvo/unattended-upgrades/unshadow-versions, this will - ensure that higher versions in a non-origin branch do not "shadow" - the versions from a desired origin (LP: #891747) - - -- Michael Vogt <mvo@debian.org> Tue, 22 Nov 2011 15:27:56 +0100 - -unattended-upgrades (0.74.4) UNRELEASED; urgency=low - - * add tests for compat mode and spaces in a origin - * escape "," in the Allowed-Origins compat mode (LP: #824856) - * merged lp:~mvo/unattended-upgrades/unshadow-versions, this will - ensure that higher versions in a non-origin branch do not "shadow" - the versions from a desired origin (LP: #891747) - - -- Michael Vogt <michael.vogt@ubuntu.com> Mon, 21 Nov 2011 18:00:57 +0100 - -unattended-upgrades (0.74.3) unstable; urgency=low - - * add missing "." to dh_installinit (closes: #648216) - - -- Michael Vogt <mvo@debian.org> Wed, 09 Nov 2011 20:16:12 +0100 - -unattended-upgrades (0.74.2) unstable; urgency=low - - * add missing "." to dh_installinit (closes: #648216) - - -- Michael Vogt <mvo@debian.org> Wed, 09 Nov 2011 19:27:43 +0100 - -unattended-upgrades (0.74.1) unstable; urgency=low - - * debian/unattended-upgrades.init: - - only run unattended-upgrades-shutdown if its actually installed - (closes: #643607) - * pm/sleep.d/10_unattended-upgrades-hibernate: - - only run shutdown helper when its available - * updated README and defaults based on the work from - Reuben Thomas, many thanks (closes: #632336) - * lintian fixes - * debian/rules, debian/unattended-upgrades.init: - - fix dh_initallinit arguments (closes: #630732) - - -- Michael Vogt <mvo@debian.org> Wed, 09 Nov 2011 09:26:56 +0100 - -unattended-upgrades (0.74) unstable; urgency=low - - * test improvements - * fix crash when no packages are upgraded - * only run dpkg if there are packages to upgrade (closes: #647476) - * include "stable-updates" in the configuration example - * debian/po/de.po: - - updated, thanks to Helge Kreutzmann (closes: #647172) - * debian/rules: - - install initscripts but do not run them on install/upgrade - (closes: #645919), thanks to Teodor MICU - * data/50unattended-upgrades.Debian: - - update default Debian config for squeeze, thanks to - John Feuerstein for the example (closes: #609854) - * debian/prerm: - - ignore failures from versions where the initscript is run - with "stop" even when not in shutdown mode (closes: #645919) - * unattended-upgrade: - - ensure to release shutdown-lock before shutting down - (closes: #645919) - * debian/postinst, data/20auto-upgrades-disabled: - - allow disabling via debconf (closes: #645971) - - -- Michael Vogt <mvo@debian.org> Tue, 08 Nov 2011 17:37:31 +0100 - -unattended-upgrades (0.73.1) unstable; urgency=low - - [ Michael Vogt ] - * unattended-upgrade: - - re-eval pkgs_kept_back after a successful upgrade to ensure - that its in sync with the cache (closes: #639840), thanks to - Iain Nicol - - do not write dpkg terminal log in --dry-run mode instead just - output to stdout (closes: #640329) - * test/test_origin_pattern.py: - - test fixes - - [ Peter Eisentraut ] - * debian/unattended-upgrade.init: - - add support for "status" action - - [ Iain Nicol ] - * unattended-upgrade: - - ensure pkgs_to_upgrade stays sorted and fix crash - - -- Michael Vogt <mvo@debian.org> Wed, 19 Oct 2011 15:16:20 +0200 - -unattended-upgrades (0.73ubuntu1) oneiric; urgency=low - - * debian/po/de.po: - - updated, closes: #631316 (thanks to Helge Kreutzmann) - * merged lp:~brian-murray/unattended-upgrades/init-eol, this - makes the shutdown message nicer, thanks to Brian Murray - * unattended-upgrade: - - write progress information /var/run/unattended-upgrades.progres - so that the progress can be displayed on shutdown - * unattended-upgrade-shutdown: - - show install progress during shutdown - * po/unattended-upgrades.pot: - - refresh - * unattended-upgrade: - - Do not upgrade apps if "XB-Upgrade-Requires: app-restart" - is set in the debian/control file. - This can be override with the option: - Unattended-Upgrade::IgnoreAppsRequireRestart=true - - -- Michael Vogt <michael.vogt@ubuntu.com> Tue, 19 Jul 2011 16:44:51 +0200 - -unattended-upgrades (0.72.3) unstable; urgency=low - - * debian/rules: - - run the original targets after override_dh_ - * test/create_debug_lock.py, unattended-upgrade: - - fix two missing python-apt 0.8 transition issues - (thanks to Reinhard Tartler, closes: #630192) - - -- Michael Vogt <mvo@debian.org> Thu, 16 Jun 2011 09:13:49 +0200 - -unattended-upgrades (0.72.2) unstable; urgency=low - - * po/fr.po: - - updated, thanks to to Steve Petruzzello (closes: #622718) - * debian/po/ca.po: - - added, thanks to Innocent De Marchi (closes: #628368) - * unattended-upgrade: - - fix conffile prompt detection (closes: #624148) - * debian/rules, debian/control: - - move to dh7 - * work with python-apt 0.8 (closes: #630192) - * switch to dh_python2 - - -- Michael Vogt <mvo@debian.org> Wed, 15 Jun 2011 09:50:25 +0200 - -unattended-upgrades (0.72.1ubuntu1) natty; urgency=low - - * unattended-upgrade: - - fix detection of unclean dpkg state if another package manager - is working (LP: #754330) - - -- Michael Vogt <michael.vogt@ubuntu.com> Tue, 12 Apr 2011 10:34:42 +0200 - -unattended-upgrades (0.72ubuntu1) natty; urgency=low - - * unattended-upgrade, data/50unattended-upgrades.{Debian,Ubuntu}: - - automatically fix a interrupted dpkg (e.g. from a powerfailure) - (LP: #584817) - - add Unattended-Upgrade::AutoFixInterruptedDpkg to allow the admin - to configure this option - - -- Michael Vogt <michael.vogt@ubuntu.com> Thu, 07 Apr 2011 11:43:26 +0200 - -unattended-upgrades (0.71ubuntu1) natty; urgency=low - - * debian/po/da.po: - - added, thanks toJoe Dalton (closes: #619320) - * unattended-upgrade, test/test_conffile.py: - - use apt_inst.DebFile.control.extractdata() instead of - apt_inst.debExtractControl() to not hit the limit of the - tag section parser (LP: #724994) - - add regression test - - -- Michael Vogt <michael.vogt@ubuntu.com> Wed, 06 Apr 2011 11:44:48 +0200 - -unattended-upgrades (0.70ubuntu1) natty; urgency=low - - * merged lp:~mvo/unattended-upgrades/minimal-steps-upgrade - - This allows performaing the upgrades in minimal chunks so - that they can be interrupted (relatively) quickly with - SIGUSR1 - - This feature is not enabled by default yet, in order - to use it, uncomment the line in 50unattended-upgrades: - Unattended-Upgrades::MinimalSteps "true"; - LP: #729214 - - -- Michael Vogt <michael.vogt@ubuntu.com> Mon, 14 Mar 2011 11:49:02 +0100 - -unattended-upgrades (0.70) unstable; urgency=low - - * pm/sleep.d/10_unattended-upgrades-hibernate: - - remove some unneeded lines from the script, thanks to - Seth Arnold (LP: #595792) - * test/test_mail.py: - - add tests for apt-listchanges.conf parser - * unattended-upgrade: - - add new Unattended-Upgrade::Origins-Pattern option that is much - more flexible than the previous Allowed-Origins. It supports - match patterns like: - "origin=Debian,label=Debian-Security,component=main" - "site=security.debian.org" - - add support for escaping, so "origin=Google\, Inc,suite=stable" - is possible (thanks to Alexander Reichle-Schmehl), closes: #609876 - - do not send a summary mail in --dry-run mode (closes: #609516) - * make Package-Blacklist a regexp (thanks to Raymond Lee) and add - test - * README: - - fixed outdated ubuntu centric info (closes: #611675) - * po/fr.po: - - updated, thanks to Steve Petruzzello (closes: #597606) - * data/50unattended-upgrades.Debian: - - add oldstable example (closes: #515980) - * test/test_against_real_archive.py, test/aptroot: - - add regression test that talks against the real archive - * unattended-upgrade: - - remove MyCache, apt.Cache has all the features we need - - add rootdir option to better support automatic testing - * unattended-upgrade: - - create logdir based on configuration, thanks to Arno Schuring - (closes: #615486) - - support Unattended-Upgrade::Log{Dir,File} as a config option, but - keep APT::UnattendedUpgrades::Log{Dir,File} for compatiblity - * test/test_logdir.py: - - add test for _setup_logging - - -- Michael Vogt <mvo@debian.org> Fri, 04 Mar 2011 13:17:39 +0100 - -unattended-upgrades (0.65ubuntu2) natty; urgency=low - - * add missing lsb-release build-depends - - -- Michael Vogt <michael.vogt@ubuntu.com> Fri, 07 Jan 2011 19:00:05 +0100 - -unattended-upgrades (0.65ubuntu1) natty; urgency=low - - [ Michael Vogt ] - * debian/po/pt_BR.po: - - updated, thanks to Adriano Rafael Gomes (closes: #607403) - * debian/rules: - - use different template depending on the build host - (ubuntu,debian) - - remove obsolete arch-build target - * data/50unattended-upgrades.Debian: - - add debian specific template - - [ Nobuto MURATA ] - * data/50unattended-upgrades.Ubuntu: - - adapt repository format for Ubuntu, LP: #691886 - - -- Michael Vogt <michael.vogt@ubuntu.com> Fri, 07 Jan 2011 15:57:20 +0100 - -unattended-upgrades (0.64ubuntu1) natty; urgency=low - - * debian/postinst: - - fixup incorrect LSB Default-Start and Stop values - - -- Michael Vogt <michael.vogt@ubuntu.com> Thu, 18 Nov 2010 09:35:39 +0100 - -unattended-upgrades (0.63ubuntu1) natty; urgency=low - - * debian/unattended-upgrades.init: - - fix default stop value, thanks to Petter Reinholdtsen, - closes: #593987 - * unattended-upgrade: - - add new Unattended-Upgrade::MailOnlyOnError option that will - make the script only send a mail when a error occured (thanks - to Steffen Kittel) - * test/test_mail.py: - - add test for Unattended-Upgrade::MailOnlyOnError feature - * README: - - improve description for the Allowed-Origins option - * test/Makefile: - - run test on bzr-buildpackage and fail if one of the tests - fail - - -- Michael Vogt <michael.vogt@ubuntu.com> Wed, 10 Nov 2010 15:18:37 +0100 - -unattended-upgrades (0.62.2) unstable; urgency=low - - * debian/postinst: - - add fixup code for installs with incorrect values from - the stop value (really closes: #593987), thanks to - Peter Reinholdtsen - - -- Michael Vogt <mvo@debian.org> Thu, 18 Nov 2010 09:00:44 +0100 - -unattended-upgrades (0.62.1) unstable; urgency=low - - * debian/unattended-upgrades.init: - - fix default stop value, thanks to Petter Reinholdtsen, - closes: #593987 - - -- Michael Vogt <mvo@debian.org> Wed, 17 Nov 2010 21:26:10 +0100 - -unattended-upgrades (0.62ubuntu1) maverick; urgency=low - - * merged fixes from debian/sid, notably allowing ":" - as seperator for (origin, archive) - - -- Michael Vogt <michael.vogt@ubuntu.com> Thu, 26 Aug 2010 18:45:07 +0200 - -unattended-upgrades (0.62) unstable; urgency=low - - [ Michael Vogt ] - * updated Russian program translation, thanks to - Yuri Kozlov, closes: #592646 - * updated pt_BR translations, thanks to Sergio Cipolla, - closes: #593755 - - [ Alex Owen ] - * allow ":" as seperator in Unattended-Upgrade::Allowed-Origins - (closes: #536754) - - -- Michael Vogt <mvo@debian.org> Thu, 26 Aug 2010 18:41:06 +0200 - -unattended-upgrades (0.61) unstable; urgency=low - - * merged changes from the ubuntu branch - - -- Michael Vogt <mvo@debian.org> Mon, 02 Aug 2010 12:10:00 +0200 - -unattended-upgrades (0.60ubuntu3) maverick; urgency=low - - * merged changes from debian-sid - * fix crash when the old package had a conffile but that - disappears in the new pacakge - - -- Michael Vogt <michael.vogt@ubuntu.com> Mon, 02 Aug 2010 12:08:21 +0200 - -unattended-upgrades (0.60ubuntu2) maverick; urgency=low - - * debian/control: - - add missing lsb-release dependency - * debian/control: - - depend on python-apt (>= 0.7.90) - * unattended-upgrade: - - port to python-apt 0.8 API - - -- Michael Vogt <michael.vogt@ubuntu.com> Mon, 02 Aug 2010 10:29:46 +0200 - -unattended-upgrades (0.60ubuntu1) maverick; urgency=low - - * Include reboot required notification in sent emails (LP: #415202) - and add test for it (thanks to Paul Elliott for the initial patch) - * allow ${distro_id} and ${distro_codename} in - Unattended-Upgrade::Allowed-Origins and update conffile to it - - -- Michael Vogt <michael.vogt@ubuntu.com> Mon, 17 May 2010 15:19:21 +0200 - -unattended-upgrades (0.55ubuntu4) lucid-proposed; urgency=low - - * unattended-upgrade: - - fix rewind_cache if a pkg fails to get marked for upgrade - (LP: #571734) - - -- Michael Vogt <michael.vogt@ubuntu.com> Thu, 29 Apr 2010 16:39:45 +0200 - -unattended-upgrades (0.55ubuntu3) lucid; urgency=low - - [ Michael Vogt ] - * add Vcs-Bzr header - * unattended-upgrade-shutdown: - - add information to plymouth shutdown screen if a - unattended-upgrade is in progress (LP: #506709) - - [ Loïc Minier ] - * Fix typo in README. - - -- Michael Vogt <michael.vogt@ubuntu.com> Wed, 17 Mar 2010 17:47:08 +0100 - -unattended-upgrades (0.55ubuntu2) lucid; urgency=low - - * Suggest bsd-mailx instead of mailx as mailx is a transitional package. - - -- Loïc Minier <loic.minier@ubuntu.com> Thu, 21 Jan 2010 10:25:12 +0100 - -unattended-upgrades (0.55ubuntu1) lucid; urgency=low - - * updated for lucid - * add new "Unattended-Upgrade::Remove-Unused-Dependencies" - option that is off by default to allow removal of new unused - dependencies - * data/50unattended-upgrades: - - add example setting for the apt bandwidth limit option - (closes: #557258) - * fix bug in conffile prompt check (LP: #336558) - * lintian fixes - - -- Michael Vogt <michael.vogt@ubuntu.com> Fri, 15 Jan 2010 13:27:53 +0100 - -unattended-upgrades (0.52ubuntu1) karmic; urgency=low - - * Add new option "Unattended-Upgrade::Automatic-Reboot" that - will automatically reboot without confirmation if the upgrade - requires a reboot (off by default) LP: #400018 - * fix typo in filename (LP: #397810) - - -- Michael Vogt <michael.vogt@ubuntu.com> Mon, 20 Jul 2009 13:36:14 +0200 - -unattended-upgrades (0.51ubuntu1) karmic; urgency=low - - * unattended-upgrade-shutdown: - - deal with syslog not avaiable (LP: #396263) - * pm/sleep.d/10_unatteded-upgrades-hibernate: - - add script to ensure that installing is finished when - hibernating (LP: #191514) - - -- Michael Vogt <michael.vogt@ubuntu.com> Fri, 10 Jul 2009 10:20:47 +0200 - -unattended-upgrades (0.50ubuntu2) karmic; urgency=low - - * Add sanity-check on clean to prevent uploads with Python syntax errors. - * Fix syntax error in unattended-upgrades-shutdown (LP: #396134). - - -- Colin Watson <cjwatson@ubuntu.com> Mon, 06 Jul 2009 17:34:25 +0100 - -unattended-upgrades (0.50ubuntu1) karmic; urgency=low - - * fix crash in ouput, thanks to Joerg Schuetter, closes: #535347 - * when running in --debug mode, also print debug output to stderr - * add --dry-run option to simulate a run, but not actually install - something - * when running with --debug, install packages instead of just - simulating the install, --dry-run is avaialble for simulation - * check for packages on hold and do not upgrade them (closes: #511677) - * deal better with failures in pkgname_from_deb() (LP: #305046) - * improved the README some more (LP: #311052) - * fix locking problem (LP: #359010) - * Contain unattended-upgrades log in the status mail as well - (LP: #245422) - * ensure that unattended-upgrade is finished on shutdown - (LP: #191514) - - -- Michael Vogt <michael.vogt@ubuntu.com> Mon, 06 Jul 2009 09:26:48 +0200 - -unattended-upgrades (0.42ubuntu1) karmic; urgency=low - - * debian/po/sk.po: - - new translation, thanks to helix84, closes: #532959 - * debian/po/ru.po: - - updated, thanks to Yuri Kozlov, closes: #527111 - * debian/po/eu.po: - - updated, thanks to Piarres Beobide, closes: #513436 - * debian/links - - add symlink to make binary name and package name match, - closes: #428965 - - -- Michael Vogt <michael.vogt@ubuntu.com> Tue, 16 Jun 2009 11:52:32 +0200 - -unattended-upgrades (0.42debian2) UNRELEASED; urgency=low - - * apply patch by Julian Andres Klode to move to the new - python-apt 0.8 API (closes: #572088) - - -- Michael Vogt <mvo@debian.org> Wed, 21 Apr 2010 10:19:05 +0200 - -unattended-upgrades (0.42debian1) unstable; urgency=low - - * debian/po/sk.po: - - new translation, thanks to helix84, closes: #532959 - * debian/po/ru.po: - - updated, thanks to Yuri Kozlov, closes: #527111 - * debian/po/eu.po: - - updated, thanks to Piarres Beobide, closes: #513436 - * debian/links - - add symlink to make binary name and package name match, - closes: #428965 - - -- Michael Vogt <mvo@debian.org> Thu, 25 Jun 2009 16:07:29 +0200 - -unattended-upgrades (0.41ubuntu1) karmic; urgency=low - - * fix lintian warnings - * add man-page (closes: #394277) - * debian/po/cs.po: - - updated Czech translation (thanks to VÃtÄ›zslav Kotrla) - closes: #532136 - * add kept back packages to the status email (thanks to - Maximilian Gaukler, closes: #526505) - - -- Michael Vogt <michael.vogt@ubuntu.com> Mon, 15 Jun 2009 10:27:51 +0200 - -unattended-upgrades (0.41debian1) unstable; urgency=low - - * fix lintian warnings - * add man-page (closes: #394277) - * debian/po/cs.po: - - updated Czech translation (thanks to VÃtÄ›zslav Kotrla) - closes: #532136 - * add kept back packages to the status email (thanks to - Maximilian Gaukler, closes: #526505) - - -- Michael Vogt <mvo@debian.org> Wed, 10 Jun 2009 20:36:39 +0200 - -unattended-upgrades (0.40ubuntu1) karmic; urgency=low - - * data/50unattended-upgrades: - - updated for karmic - * unattended-upgrade: - - use the new python-apt API to avoid deprecation - warnings - * debian/control: - - update depends on python-apt to (>= 0.7.9) - - -- Michael Vogt <michael.vogt@ubuntu.com> Wed, 06 May 2009 21:54:16 +0200 - -unattended-upgrades (0.40debian1) unstable; urgency=low - - * unattended-upgrade: - - use the new python-apt apt.Package.Version class when - checking for the candidate origin (closes: #526791) - * data/50unattended-upgrades: - - updated for squeeze - - -- Michael Vogt <mvo@debian.org> Wed, 06 May 2009 08:18:50 +0200 - -unattended-upgrades (0.39debian1) unstable; urgency=low - - * Merging new Ubuntu release - - -- Michael Vogt <mvo@debian.org> Tue, 03 Mar 2009 08:38:08 +0100 - -unattended-upgrades (0.39) jaunty; urgency=low - - * debian/po/fr.po: - - updated french translation (closes: #511373) - * debian/po/es.po: - - added spanish translation (closes: #512213) - * fix crash in rewind_packages (closes: #517510) - * debian/rules: - - add --install-layout=deb to avoid that the binaries and - the locales get installed into /usr/local - - -- Michael Vogt <michael.vogt@ubuntu.com> Mon, 02 Mar 2009 10:51:23 +0100 - -unattended-upgrades (0.38) jaunty; urgency=low - - * debian/po: - - add ru.po debian template (closes: #509032) - - add eu.po debian template (closes: #508983) - - add fr.po debian template (closes: #508389) - - add ja.po debian template (closes: #509343) - - add fi.po debian template (closes: #509370) - * po/eu.po: - - added eu.po translation (closes: #508984) - - added ja.po translation (closes: #509748) - - -- Michael Vogt <michael.vogt@ubuntu.com> Sat, 05 Jan 2009 10:38:34 +0100 - -unattended-upgrades (0.37debian1) unstable; urgency=low - - * debian/po: - - add ru.po debian template (closes: #509032) - - add eu.po debian template (closes: #508983) - - add fr.po debian template (closes: #508389) - - add ja.po debian template (closes: #509343) - - add fi.po debian template (closes: #509370) - * po/eu.po: - - added eu.po translation (closes: #508984) - - added ja.po translation (closes: #509748) - - -- Michael Vogt <mvo@debian.org> Mon, 05 Jan 2009 10:34:14 +0100 - -unattended-upgrades (0.37) jaunty; urgency=low - - * better debconf template and description (thanks to the - debian-l10 team (closes: #508136) - * debian/po/sv.po: - - add sv.po debian template (closes: #508225) - * debian/po/it.po: - - add it.po debian template (closes: #508193) - * debian/po/ja.po: - - add ja.po debian template (closes: #508564) - * debian/po/de.po: - - add de.po debian template (closes: #508481) - * po/fr.po: - - add fr.po translation (closes: #508390) - * po/cs.po: - - add cs.po translation (closes: #508702) - * po/pt.po: - - add pt.po translation (closes: #508705) - * unattended-upgrade: - - better default permissions of the install log - (closes: #507638) - - only disable apt-listchanges if it is not set to - 'mail' (closes: #507639) - - -- Michael Vogt <michael.vogt@ubuntu.com> Mon, 15 Dec 2008 09:46:42 +0100 - -unattended-upgrades (0.36debian1) unstable; urgency=low - - * merge from ubuntu: - * make cache calculations quicker (thanks to Ben Hutchings, - closes #475610) - * add hostname in mail header, thanks to Arthur de Jong - (closes: #502171, LP: #245417) - * better email summary of the performed actions - (closes: #502351) - * be more robust against failures to read the deb (LP: #227448) - * better debconf template and description (thanks to the - debian-l10 team (closes: #508136) - * debian/po/sv.po: - - add sv.po debian template (closes: #508225) - * debian/po/it.po: - - add it.po debian template (closes: #508193) - * debian/po/ja.po: - - add ja.po debian template (closes: #508564) - * debian/po/de.po: - - add de.po debian template (closes: #508481) - * po/fr.po: - - add fr.po translation (closes: #508390) - * po/cs.po: - - add cs.po translation (closes: #508702) - * po/pt.po: - - add pt.po translation (closes: #508705) - * unattended-upgrade: - - better default permissions of the install log - (closes: #507638) - - only disable apt-listchanges if it is not set to - 'mail' (closes: #507639) - - -- Michael Vogt <mvo@debian.org> Tue, 09 Dec 2008 01:45:31 +0100 - -unattended-upgrades (0.36) jaunty; urgency=low - - * make cache calculations quicker (thanks to Ben Hutchings, - closes #475610) - * add hostname in mail header, thanks to Arthur de Jong - (closes: #502171, LP: #245417) - * better email summary of the performed actions - (closes: #502351) - * be more robust against failures to read the deb (LP: #227448) - - -- Michael Vogt <michael.vogt@ubuntu.com> Wed, 26 Nov 2008 21:31:42 +0100 - -unattended-upgrades (0.35debian1) unstable; urgency=low - - * merge from ubuntu (new upstream release) - * add debconf prompt (priority medium) that asks if auto - updates should be enabled - - -- Michael Vogt <mvo@debian.org> Wed, 26 Nov 2008 10:46:08 +0100 - -unattended-upgrades (0.35) jaunty; urgency=low - - * updated for jaunty - * improved README to make it clerer where the values of - (origin, archive) come from (thanks to - - -- Michael Vogt <michael.vogt@ubuntu.com> Wed, 26 Nov 2008 10:44:31 +0100 - -unattended-upgrades (0.32ubuntu2) intrepid; urgency=low - - * Updated for intrepid (and updated gutsy references too!) - - -- Sarah Hobbs <hobbsee@ubuntu.com> Mon, 13 Oct 2008 22:40:21 +1100 - -unattended-upgrades (0.32ubuntu1) intrepid; urgency=low - - * Add debconf question to ask whether automatic updates should be configured - by default: add debconf template, postinst and postrm scripts that uses - ucf to manage /etc/apt/apt.conf.d/20auto-upgrades since we don't want to - enable automatic updates by default. (LP: #84918) - - -- Mathias Gug <mathiaz@ubuntu.com> Wed, 08 Oct 2008 21:01:52 -0400 - -unattended-upgrades (0.31ubuntu1) intrepid; urgency=low - - [ Michael Vogt ] - * fix i18n and add build-dependency to python-distutils-extra - - [ Brian Murray ] - * string fix for "Automatically" in 50unattended-upgrades (LP: #209049) - - -- Michael Vogt <michael.vogt@ubuntu.com> Wed, 23 Jul 2008 19:39:05 +0200 - -unattended-upgrades (0.30ubuntu1) hardy; urgency=low - - [ John Edwards ] - * fix missing spaces in the log file (LP: #136452) - * add better comments and examples to data/50unattended-upgrades - - [ Michael Vogt ] - * README improved based on Johns suggestions (thanks!) - * fix grammer and dated reference to dapper (LP: #140038), - thanks to Christer Edwards for the suggestions - * add "mailx" to suggests (LP: #137994) - * show propper log output if mail is not available (LP: #137994) - * show packages that are held back from the upgrade because of - conffile prompt in the log as a warning (LP: #133551) - * create logdir if it does not exist (LP: #87338) - * fix error when installing from file:// uris (LP: #56832) - - -- Michael Vogt <michael.vogt@ubuntu.com> Mon, 10 Mar 2008 11:57:17 +0100 - -unattended-upgrades (0.26ubuntu1) hardy; urgency=low - - * updated for hardy - - -- Michael Vogt <michael.vogt@ubuntu.com> Tue, 05 Feb 2008 13:36:18 +0100 - -unattended-upgrades (0.25.3ubuntu1) gutsy; urgency=low - - * merged patch from Tuomas Jormola to detect if - dpkg --force-conf(new|old) is set (LP: #135247) - - -- Michael Vogt <michael.vogt@ubuntu.com> Tue, 11 Sep 2007 21:37:13 +0200 - -unattended-upgrades (0.25.2ubuntu1) gutsy; urgency=low - - * do not run with broken cache - * use ubuntu version number to keep auto-sync from coming for us - - -- Michael Vogt <michael.vogt@ubuntu.com> Wed, 11 Jul 2007 11:19:49 +0100 - -unattended-upgrades (0.25.1debian1-0.1) unstable; urgency=low - - * Non-Maintainter Update (BSP) - * Add dependency on apt (>=0.7) - (closes: #475611) - - -- Bas Zoetekouw <bas@debian.org> Sat, 14 Jun 2008 14:55:51 +0200 - -unattended-upgrades (0.25.1debian1) unstable; urgency=low - - * documentation updated - - -- Michael Vogt <mvo@debian.org> Thu, 07 Jun 2007 13:36:47 +0200 - -unattended-upgrades (0.25.1) gutsy; urgency=low - - * documentation updated - - -- Michael Vogt <michael.vogt@ubuntu.com> Fri, 08 Jun 2007 14:50:10 +0200 - -unattended-upgrades (0.25ubuntu1) gutsy; urgency=low - - * updated for gutsy - - -- Michael Vogt <michael.vogt@ubuntu.com> Wed, 16 May 2007 15:21:11 +0200 - -unattended-upgrades (0.24debian1) unstable; urgency=low - - * new upstream version - - -- Michael Vogt <mvo@debian.org> Tue, 24 Apr 2007 23:34:15 +0200 - -unattended-upgrades (0.23ubuntu3) feisty-proposed; urgency=low - - * added missing README (thanks to siretart, LP#109564) - - -- Michael Vogt <michael.vogt@ubuntu.com> Tue, 24 Apr 2007 11:26:48 +0200 - -unattended-upgrades (0.22ubuntu2) feisty; urgency=low - - * fail if not runing as root (LP#72514) - * do not crash if a archive can not be found (LP#72249) - - -- Michael Vogt <michael.vogt@ubuntu.com> Thu, 22 Mar 2007 17:14:47 +0100 - -unattended-upgrades (0.22ubuntu1) feisty; urgency=low - - * be more careful about checking if we actually have a - candidateOrigin (lp: #81055) - - -- Michael Vogt <michael.vogt@ubuntu.com> Tue, 23 Jan 2007 11:38:44 +0100 - -unattended-upgrades (0.22ubuntu0) feisty; urgency=low - - * improved the description - * added "Unattended-Upgrade::Mail" mail notification - - -- Michael Vogt <michael.vogt@ubuntu.com> Fri, 8 Dec 2006 22:40:42 +0100 - -unattended-upgrades (0.21ubuntu0) feisty; urgency=low - - * data/50unattended-upgrades: - - updated for feisty - - -- Michael Vogt <michael.vogt@ubuntu.com> Fri, 3 Nov 2006 22:31:02 +0100 - -unattended-upgrades (0.2) unstable; urgency=low - - * initial debian upload - - -- Michael Vogt <mvo@debian.org> Mon, 2 Oct 2006 11:06:50 +0200 - -unattended-upgrades (0.1ubuntu6) edgy; urgency=low - - * debian/control: - - only depend on python-apt - - -- Michael Vogt <michael.vogt@ubuntu.com> Thu, 27 Jul 2006 15:03:46 +0200 - -unattended-upgrades (0.1ubuntu5) edgy; urgency=low - - * data/apt-check.py: - - fix in the clear() method - * data/50unattended-upgrades: - - updated to include edgy as default - - -- Michael Vogt <michael.vogt@ubuntu.com> Tue, 4 Jul 2006 11:23:09 +0200 - -unattended-upgrades (0.1ubuntu4) edgy; urgency=low - - * added misssing apt-utils dependency - - -- Michael Vogt <michael.vogt@ubuntu.com> Tue, 27 Jun 2006 09:36:43 +0200 - -unattended-upgrades (0.1ubuntu3) dapper; urgency=low - - * debian/dirs: /etc/apt.conf.d -> /etc/apt/apt.conf.d (Ubuntu: #44172) - - -- Michael Vogt <michael.vogt@ubuntu.com> Mon, 29 May 2006 08:34:08 +0200 - -unattended-upgrades (0.1ubuntu2) dapper; urgency=low - - * unattended-upgrade: - - fix log output (ubuntu: #43773) - - fix configuration by providing a example config (ubuntu: #43778) - - -- Michael Vogt <michael.vogt@ubuntu.com> Wed, 10 May 2006 20:20:54 +0200 - -unattended-upgrades (0.1ubuntu1) dapper; urgency=low - - * work with the latest python-apt api (ubuntu: #38958) - - -- Michael Vogt <michael.vogt@ubuntu.com> Mon, 8 May 2006 17:28:38 +0200 - -unattended-upgrades (0.0+bzr20051201) dapper; urgency=low - - * initial version - - -- Michael Vogt <michael.vogt@ubuntu.com> Mon, 28 Nov 2005 17:04:41 +0100 + -- Diego Pasqualin <dpasqualin@c3sl.ufpr.br> Wed, 02 Aug 2017 16:53:01 +0000 diff --git a/package/debian/compat b/package/debian/compat index c7930257dfef505fd996e1d6f22f2f35149990d0..ec635144f60048986bc560c5576355344005e6e7 100644 --- a/package/debian/compat +++ b/package/debian/compat @@ -1 +1 @@ -7 \ No newline at end of file +9 diff --git a/package/debian/config b/package/debian/config deleted file mode 100644 index 32eefa18b04cae151dd98273f900266685ff3ceb..0000000000000000000000000000000000000000 --- a/package/debian/config +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh -e - -AUTO_UPGRADE="/etc/apt/apt.conf.d/20auto-upgrades" - -# Source debconf library. -. /usr/share/debconf/confmodule - -# Load configuration from disk, if it exists. -if [ -e "$AUTO_UPGRADE" ]; then - if grep -q 'APT::Periodic::Unattended-Upgrade "1";' $AUTO_UPGRADE ; then - db_set unattended-upgrades/enable_auto_updates true - elif grep -q 'APT::Periodic::Unattended-Upgrade "0";' $AUTO_UPGRADE ; then - db_set unattended-upgrades/enable_auto_updates true - fi -fi - -db_input low unattended-upgrades/enable_auto_updates || true -db_input low unattended-upgrades/origins_pattern || true -db_go diff --git a/package/debian/control b/package/debian/control index 55993cd94ce8f122522197dc248abb783eae346d..929e4164af71626e836b4349f6f7d556806a48e7 100644 --- a/package/debian/control +++ b/package/debian/control @@ -1,30 +1,15 @@ -Source: unattended-upgrades +Source: le-autoupgrade Section: admin Priority: important -Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> -XSBC-Original-Maintainer: Michael Vogt <mvo@debian.org> -Build-Depends: debhelper (>= 7.0.50~), po-debconf -Build-Depends-Indep: python (>= 2.6.6-3~), python3-distutils-extra, - python3-setuptools, python-dev, python3-dev, python-coverage, - pep8, - pyflakes, python-apt, python3-apt, python-mock, python3-mock, - lsb-release, dh-systemd (>= 1.5) -Standards-Version: 3.9.3 -Vcs-Git: git@gitlab.c3sl.ufpr.br:le6/le-autoupgrade.git +Maintainer: C3SL <contato@c3sl.ufpr.br> +Uploaders: Diego Pasqualin <dpasqualin@c3sl.ufpr.br> +Build-Depends: debhelper (>=9) +Standards-Version: 3.9.8 +Vcs-Git: https://gitlab.c3sl.ufpr.br/le6/le-autoupgrade.git - -Package: unattended-upgrades +Package: le-autoupgrade Architecture: all -Depends: ${shlibs:Depends}, ${misc:Depends}, debconf, python3, - python3-apt, apt-utils, apt, ucf, lsb-release, lsb-base (>= 3.2-14), - xz-utils, python3-crontab, python-crontab, cron, anacron -Recommends: cron-daemon -Suggests: bsd-mailx, mail-transport-agent -Description: automatic installation of security upgrades - This package can download and install security upgrades automatically - and unattended, taking care to only install packages from the - configured APT source, and checking for dpkg prompts about - configuration file changes. - . - This script is the backend for the APT::Periodic::Unattended-Upgrade - option. +Depends: ${misc:Depends}, unattended-upgrades +Description: Set up the system to check for updates daily. + This package will configure unattended-upgrades to verify everyday for new + upgrades in the LE6 repository, as well as Ubuntu 16.04 repository. diff --git a/package/debian/copyright b/package/debian/copyright index 4c6115abd27b699d31f2d62305cbb67e17ff5545..133d3269bb30f0517f8836ca08e151c5460f031b 100644 --- a/package/debian/copyright +++ b/package/debian/copyright @@ -1,9 +1,10 @@ Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Source: http://code.launchpad.net/~ubuntu-core-dev/unattended-upgrades/ubuntu +Source: https://gitlab.c3sl.ufpr.br/le6/le-autoupgrade Files: * -Copyright: © 2005-2014 Michael Vogt <michael.vogt@ubuntu.com>, - © 2005-2009 Canonical Ltd -License: GPL-2+ - On Debian systems, the complete text of the GNU General Public License - can be found in </usr/share/common-licenses/GPL-2>. +Copyright: 2017 C3SL <contato@c3sl.ufpr.br> +License: GPL-3.0+ + +License: GPL-3.0+ + On Debian systems, the complete text of the GNU General Public + License, version 3, can be found in /usr/share/common-licenses/GPL-3. diff --git a/package/debian/dirs b/package/debian/dirs deleted file mode 100644 index ff6cead1a415536f433103211782fe59df875959..0000000000000000000000000000000000000000 --- a/package/debian/dirs +++ /dev/null @@ -1,5 +0,0 @@ -usr/bin -var/log/unattended-upgrades -etc/logrotate.d -etc/apt/apt.conf.d -etc/kernel/postinst.d \ No newline at end of file diff --git a/package/debian/docs b/package/debian/docs deleted file mode 100644 index b43bf86b50fd8d3529a0dc062c30006ed38f309e..0000000000000000000000000000000000000000 --- a/package/debian/docs +++ /dev/null @@ -1 +0,0 @@ -README.md diff --git a/package/debian/gbp.conf b/package/debian/gbp.conf deleted file mode 100644 index 9a1a2398c31139389d019bc9b97b37996ddf317f..0000000000000000000000000000000000000000 --- a/package/debian/gbp.conf +++ /dev/null @@ -1,6 +0,0 @@ -[DEFAULT] -prebuild = ./pre-build.sh && cd test && make && make clean -debian-branch = debian/sid -debian-tag = %(version)s -export-dir = ../build-area -sign-tags = True \ No newline at end of file diff --git a/package/debian/install b/package/debian/install new file mode 100644 index 0000000000000000000000000000000000000000..c1965e5a438454cd84f185b37ee34b83e3b7b62c --- /dev/null +++ b/package/debian/install @@ -0,0 +1,3 @@ +doc/* usr/share/doc/ +99le6-auto-upgrade.conf /etc/apt/apt.conf.d/ +99le6-auto-upgrade.pref /etc/apt/preferences.d/ diff --git a/package/debian/links b/package/debian/links deleted file mode 100644 index 8dfd2fae13dec08853354c602e00041eb5b203fd..0000000000000000000000000000000000000000 --- a/package/debian/links +++ /dev/null @@ -1 +0,0 @@ -usr/bin/unattended-upgrade usr/bin/unattended-upgrades \ No newline at end of file diff --git a/package/debian/po/POTFILES.in b/package/debian/po/POTFILES.in deleted file mode 100644 index cef83a3407df50c2213b6febd8062ee54c13051b..0000000000000000000000000000000000000000 --- a/package/debian/po/POTFILES.in +++ /dev/null @@ -1 +0,0 @@ -[type: gettext/rfc822deb] templates diff --git a/package/debian/po/ca.po b/package/debian/po/ca.po deleted file mode 100644 index 186950573841057439e50a1ce2e7984da02c4ae9..0000000000000000000000000000000000000000 --- a/package/debian/po/ca.po +++ /dev/null @@ -1,68 +0,0 @@ -# unattended-upgrades po-debconf translation to Catalan -# Copyright (C) 2007 Software in the Public Interest, SPI Inc. -# This file is distributed under the same license as the PACKAGE package. -# Traducció: -# Innocent De Marchi <tangram.peces@gmail.com>, 2011-2015. -# -msgid "" -msgstr "" -"Project-Id-Version: unattended-upgrades 0.86.6\n" -"Report-Msgid-Bugs-To: unattended-upgrades@packages.debian.org\n" -"POT-Creation-Date: 2015-11-03 07:12+0100\n" -"PO-Revision-Date: 2015-11-07 18:35+0100\n" -"Last-Translator: Innocent De Marchi <tangram.peces@gmail.com>\n" -"Language-Team: Catalan <<debian-l10n-catalan@lists.debian.org>>\n" -"Language: ca\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.6\n" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "Automatically download and install stable updates?" -msgstr "" -"Desitjau descarregar i instal·lar automà ticament les actualitzacions de la " -"versió estable?" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "" -"Applying updates on a frequent basis is an important part of keeping systems " -"secure. By default, updates need to be applied manually using package " -"management tools. Alternatively, you can choose to have this system " -"automatically download and install important updates." -msgstr "" -"La instal·lació de les actualitzacions amb freqüència és un aspecte " -"important per a mantenir la seguretat del sistema. Per defecte, les " -"actualitzacions s'han de fer manualment utilitzant les eines de gestió de " -"paquets. Si ho preferiu, podeu optar per fer que el sistema descarregui i " -"instal·li automà ticament les actualitzacions de seguretat." - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Origins-Pattern that packages must match to be upgraded:" -msgstr "" -"Patrons de les fonts de paquets («Origins-Pattern») que han de verificar els " -"paquets a actualitzar:" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Please specify a value for the unattended-upgrades Origins-Pattern." -msgstr "" -"Especificau el valor dels patrons de les fonts de paquets («Origins-" -"Pattern») per a les actualitzacions desateses." - -#. Type: string -#. Description -#: ../templates:3001 -msgid "" -"A package will be upgraded only if its metadata values match all the " -"supplied keywords in the origin line." -msgstr "" -"Un paquet s'actualitzarà només si els seus valors de metadades coincideixen " -"amb totes les paraules clau subministrades en la lÃnia d'origen." diff --git a/package/debian/po/cs.po b/package/debian/po/cs.po deleted file mode 100644 index 195af8117a534b6ab4e259e031a22d3b15ab5be0..0000000000000000000000000000000000000000 --- a/package/debian/po/cs.po +++ /dev/null @@ -1,59 +0,0 @@ -# Czech PO debconf template translation of unattended-upgrades. -# Copyright (C) 2009 VÃtÄ›zslav Kotrla <vitezslav.kotrla@gmail.com> -# This file is distributed under the same license as the unattended-upgrades package. -# Michal Simunek <michal.simunek@gmail.com>, 2015. -# -msgid "" -msgstr "" -"Project-Id-Version: unattended-upgrades 0.86.6\n" -"Report-Msgid-Bugs-To: unattended-upgrades@packages.debian.org\n" -"POT-Creation-Date: 2015-11-03 07:12+0100\n" -"PO-Revision-Date: 2015-11-10 09:15+0100\n" -"Last-Translator: Michal Simunek <michal.simunek@gmail.com>\n" -"Language-Team: Czech <debian-l10n-czech@lists.debian.org>\n" -"Language: cs\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "Automatically download and install stable updates?" -msgstr "Automaticky stahovat a instalovat aktualizace ze stabilnà verze?" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "" -"Applying updates on a frequent basis is an important part of keeping systems " -"secure. By default, updates need to be applied manually using package " -"management tools. Alternatively, you can choose to have this system " -"automatically download and install important updates." -msgstr "" -"Pravidelné nasazovánà aktualizacà je důležitou souÄástà udržovánà " -"zabezpeÄenà systému. NormálnÄ› je nutné aktualizace nasazovat ruÄnÄ› za " -"použità pÅ™ÃsluÅ¡ných nástrojů pro správu balÃÄků. Můžete ovÅ¡em zvolit, aby " -"tento systém automaticky sám stahoval a instaloval důležité aktualizace." - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Origins-Pattern that packages must match to be upgraded:" -msgstr "Vzor původu, kterému musà balÃÄky odpovÃdat, aby byly aktualizovány:" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Please specify a value for the unattended-upgrades Origins-Pattern." -msgstr "Zadejte prosÃm hodnotu pro Vzor původu u bezobslužných aktualizacÃ." - -#. Type: string -#. Description -#: ../templates:3001 -msgid "" -"A package will be upgraded only if its metadata values match all the " -"supplied keywords in the origin line." -msgstr "" -"BalÃÄek se bude aktualizovat pouze pokud jeho hodnoty metadat odpovÃdajà " -"vÅ¡em zadaným klÃÄovým slovům na řádku s původem." diff --git a/package/debian/po/da.po b/package/debian/po/da.po deleted file mode 100644 index 44ea5f217ecfc206842d59237ddb69882b98cfcd..0000000000000000000000000000000000000000 --- a/package/debian/po/da.po +++ /dev/null @@ -1,59 +0,0 @@ -# Danish translation unattended-upgrades. -# Copyright (C) 2015 unattended-upgrades og nedenstÃ¥ende oversættere. -# This file is distributed under the same license as the unattended-upgrades package. -# Joe Hansen (joedalton2@yahoo.dk), 2011, 2015. -# -msgid "" -msgstr "" -"Project-Id-Version: unattended-upgrades\n" -"Report-Msgid-Bugs-To: unattended-upgrades@packages.debian.org\n" -"POT-Creation-Date: 2015-11-03 07:12+0100\n" -"PO-Revision-Date: 2015-11-04 19:25+0200\n" -"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n" -"Language-Team: Danish <debian-l10n-danish@lists.debian.org>\n" -"Language: da\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "Automatically download and install stable updates?" -msgstr "Hent og installer automatisk stabile opdateringer?" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "" -"Applying updates on a frequent basis is an important part of keeping systems " -"secure. By default, updates need to be applied manually using package " -"management tools. Alternatively, you can choose to have this system " -"automatically download and install important updates." -msgstr "" -"Løbende installation af opdateringer er en vigtig del af at holde et system " -"sikkert. Som standard skal opdateringer installeres manuelt med " -"pakkehÃ¥ndteringsværktøjer. Alternativt kan du automatisk vælge at lade dette " -"system hente og installere vigtige opdateringer." - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Origins-Pattern that packages must match to be upgraded:" -msgstr "Origins-Pattern som pakker skal matche for at blive opgraderet:" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Please specify a value for the unattended-upgrades Origins-Pattern." -msgstr "Angiv venligst en værdi for unattended-upgrades Origins-Pattern." - -#. Type: string -#. Description -#: ../templates:3001 -msgid "" -"A package will be upgraded only if its metadata values match all the " -"supplied keywords in the origin line." -msgstr "" -"En pakke vil kun blive opgraderet hvis dens metadataværdier matcher alle de " -"angivne nøgleord i origin-linjen." diff --git a/package/debian/po/de.po b/package/debian/po/de.po deleted file mode 100644 index 27ce880528b93e44705dabd3550879b1533c600b..0000000000000000000000000000000000000000 --- a/package/debian/po/de.po +++ /dev/null @@ -1,66 +0,0 @@ -# Translation of unattended-upgrades to German. -# Copyright (C) 2005-2009 Canonical Ltd. -# This file is distributed under the same license as the -# unattended-upgrades package. -# Copyright (C) of this file 2012-2015 Chris Leick. -# -msgid "" -msgstr "" -"Project-Id-Version: unattended-upgrades 0.86.6\n" -"Report-Msgid-Bugs-To: unattended-upgrades@packages.debian.org\n" -"POT-Creation-Date: 2015-11-03 07:12+0100\n" -"PO-Revision-Date: 2015-11-03 21:14+0100\n" -"Last-Translator: Chris Leick <c.leick@vollbio.de>\n" -"Language-Team: German <debian-l10n-german@lists.debian.org>\n" -"Language: de\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "Automatically download and install stable updates?" -msgstr "" -"Aktualisierungen für Stable automatisch herunterladen und installieren?" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "" -"Applying updates on a frequent basis is an important part of keeping systems " -"secure. By default, updates need to be applied manually using package " -"management tools. Alternatively, you can choose to have this system " -"automatically download and install important updates." -msgstr "" -"Häufige Aktualisierungen sind wichtig, um Systeme sicher zu halten. " -"Standardmäßig müssen Aktualisierungen manuell mittels " -"Paketverwaltungswerkzeugen durchgeführt werden. Alternativ können Sie " -"auswählen, dass dieses System wichtige Aktualisierungen automatisch " -"herunterlädt und installiert." - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Origins-Pattern that packages must match to be upgraded:" -msgstr "" -"Ursprungsmuster, zu dem Pakete passen müssen, damit ein Upgrade von ihnen " -"durchgeführt wird:" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Please specify a value for the unattended-upgrades Origins-Pattern." -msgstr "" -"Geben Sie bitte einen Wert für das Unattended-Upgrades-Ursprungsmuster an." - -#. Type: string -#. Description -#: ../templates:3001 -msgid "" -"A package will be upgraded only if its metadata values match all the " -"supplied keywords in the origin line." -msgstr "" -"Es wird nur dann ein Upgrade eines Pakets durchgeführt, falls dessen " -"Metadaten zu allen angegebenen Schlüsselworten in der Urpsrungszeile passen." diff --git a/package/debian/po/es.po b/package/debian/po/es.po deleted file mode 100644 index 81a331f08c025507382e346aba333ca322e16a65..0000000000000000000000000000000000000000 --- a/package/debian/po/es.po +++ /dev/null @@ -1,93 +0,0 @@ -# unattended-upgrades po-debconf translation to Spanish. -# Copyright (C) 2007 Software in the Public Interest, SPI Inc. -# This file is distributed under the same license as the unattended-upgrades package. -# -# Changes: -# - Initial translation -# Fernando González de Requena <fgrequena@gmail.com>, 2009. -# -Reviewers: -# Javier Fernandez-Sanguino <jfs@debian.org> -# -# Traductores, si no conoce el formato PO, merece la pena leer la -# documentación de gettext, especialmente las secciones dedicadas a este -# formato, por ejemplo ejecutando: -# info -n '(gettext)PO Files' -# info -n '(gettext)Header Entry' -# -# Equipo de traducción al español, por favor lean antes de traducir -# los siguientes documentos: -# -# - El proyecto de traducción de Debian al español -# http://www.debian.org/intl/spanish/ -# especialmente las notas y normas de traducción en -# http://www.debian.org/intl/spanish/notas -# -# - La guÃa de traducción de po's de debconf: -# /usr/share/doc/po-debconf/README-trans -# o http://www.debian.org/intl/l10n/po-debconf/README-trans -# -# Si tiene dudas o consultas sobre esta traducción consulte con el último -# traductor (campo Last-Translator) y ponga en copia a la lista de -# traducción de Debian al español (<debian-l10n-spanish@lists.debian.org>) -# -msgid "" -msgstr "" -"Project-Id-Version: unattended-upgrades 0.37debian1\n" -"Report-Msgid-Bugs-To: unattended-upgrades@packages.debian.org\n" -"POT-Creation-Date: 2015-11-03 07:12+0100\n" -"PO-Revision-Date: 2009-01-06 18:08+0200\n" -"Last-Translator: Fernando González de Requena <fgrequena@gmail.com>\n" -"Language-Team: Debian Spanish <debian-l10n-spanish@lists.debian.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "Automatically download and install stable updates?" -msgstr "" -"¿Desea descargar e instalar automáticamente las actualizaciones de la " -"versión estable?" - -#. Type: boolean -#. Description -#: ../templates:2001 -#, fuzzy -#| msgid "" -#| "Applying updates on a frequent basis is an important part of keeping " -#| "systems secure. By default, updates need to be applied manually using " -#| "package management tools. Alternatively, you can choose to have this " -#| "system automatically download and install security updates." -msgid "" -"Applying updates on a frequent basis is an important part of keeping systems " -"secure. By default, updates need to be applied manually using package " -"management tools. Alternatively, you can choose to have this system " -"automatically download and install important updates." -msgstr "" -"Para mantener el sistema seguro es importante instalar las actualizaciones " -"regularmente. Por omisión, para poder realizar una actualización tiene que " -"utilizar una herramienta de gestión de paquetes. Como alternativa, puede " -"elegir que el sistema descargue e instale automáticamente las " -"actualizaciones de seguridad." - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Origins-Pattern that packages must match to be upgraded:" -msgstr "" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Please specify a value for the unattended-upgrades Origins-Pattern." -msgstr "" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "" -"A package will be upgraded only if its metadata values match all the " -"supplied keywords in the origin line." -msgstr "" diff --git a/package/debian/po/eu.po b/package/debian/po/eu.po deleted file mode 100644 index 341c71c3326c4198860e677c60360b03e17fae43..0000000000000000000000000000000000000000 --- a/package/debian/po/eu.po +++ /dev/null @@ -1,64 +0,0 @@ -# Basque translation for unattended-upgrades -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Piarres Beobide <pi@beobide.net>, 2008, 2009, 2015. -# Iñaki Larrañaga Murgoitio <dooteo@zundan.com>, 2015. -msgid "" -msgstr "" -"Project-Id-Version: unattended-upgrades 0.86.6\n" -"Report-Msgid-Bugs-To: unattended-upgrades@packages.debian.org\n" -"POT-Creation-Date: 2015-11-03 07:12+0100\n" -"PO-Revision-Date: 2015-11-05 11:19+0100\n" -"Last-Translator: Iñaki Larrañaga Murgoitio <dooteo@zundan.com>\n" -"Language-Team: Basque <librezale@librezale.org>\n" -"Language: eu\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Lokalize 1.5\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "Automatically download and install stable updates?" -msgstr "Bertsio-berritze egonkorrak automatikoki deskargatu eta instalatu?" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "" -"Applying updates on a frequent basis is an important part of keeping systems " -"secure. By default, updates need to be applied manually using package " -"management tools. Alternatively, you can choose to have this system " -"automatically download and install important updates." -msgstr "" -"Maiztasunean oinarritutako bertsio-berritze ezarpenak sistema seguru " -"mantentzearen zati garrantzitsu bat da. Lehenetsi gisa, eguneraketek " -"paketeak kudeatzeko tresnak eskuz erabiltzea eskatzen dute. Bestela, sistema " -"honek automatikoki eguneraketa garrantzitsuak deskargatzea eta instalatzea " -"aukera dezakezu." - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Origins-Pattern that packages must match to be upgraded:" -msgstr "Jatorriko eredua (bertsio-berrituko diren paketeekin bat etortzeko):" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Please specify a value for the unattended-upgrades Origins-Pattern." -msgstr "" -"Galdetu gabe bertsio-berrituko diren 'Jatorriko eredua'ren balioa zehaztu." - -#. Type: string -#. Description -#: ../templates:3001 -msgid "" -"A package will be upgraded only if its metadata values match all the " -"supplied keywords in the origin line." -msgstr "" -"Pakete bat bertsio-berrituko da baldin eta bere meta-datuen balioak emandako " -"jatorriaren lerroko gako-hitz guztiekin bat etortzen bada." diff --git a/package/debian/po/fi.po b/package/debian/po/fi.po deleted file mode 100644 index a1aba4cf5ef4c72ef8ad0171cc5bb5a224100d97..0000000000000000000000000000000000000000 --- a/package/debian/po/fi.po +++ /dev/null @@ -1,61 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: unattended-upgrades\n" -"Report-Msgid-Bugs-To: unattended-upgrades@packages.debian.org\n" -"POT-Creation-Date: 2015-11-03 07:12+0100\n" -"PO-Revision-Date: \n" -"Last-Translator: Esko Arajärvi <edu@iki.fi>\n" -"Language-Team: Finnish <debian-l10n-finnish@lists.debian.org>\n" -"Language: fi\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Poedit-Language: Finnish\n" -"X-Poedit-Country: FINLAND\n" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "Automatically download and install stable updates?" -msgstr "" -"Ladataanko ja asennetaanko vakaan jakelun päivitykset automaattisesti? " - -#. Type: boolean -#. Description -#: ../templates:2001 -#, fuzzy -#| msgid "" -#| "Applying updates on a frequent basis is an important part of keeping " -#| "systems secure. By default, updates need to be applied manually using " -#| "package management tools. Alternatively, you can choose to have this " -#| "system automatically download and install security updates." -msgid "" -"Applying updates on a frequent basis is an important part of keeping systems " -"secure. By default, updates need to be applied manually using package " -"management tools. Alternatively, you can choose to have this system " -"automatically download and install important updates." -msgstr "" -"Tietoturvan kannalta on tärkeää, että järjestelmää päivitetään " -"säännöllisesti. Oletusarvoisesti päivitykset täytyy asentaa käsin käyttäen " -"pakettienhallintatyökaluja. Tämän ohjelmiston avulla tietoturvapäivitykset " -"voidaan ladata ja asentaa automaattisesti." - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Origins-Pattern that packages must match to be upgraded:" -msgstr "" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Please specify a value for the unattended-upgrades Origins-Pattern." -msgstr "" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "" -"A package will be upgraded only if its metadata values match all the " -"supplied keywords in the origin line." -msgstr "" diff --git a/package/debian/po/fr.po b/package/debian/po/fr.po deleted file mode 100644 index f7beefd9123787041e4717a538c0e81cfbc8867c..0000000000000000000000000000000000000000 --- a/package/debian/po/fr.po +++ /dev/null @@ -1,66 +0,0 @@ -# unattended-upgrades po-debconf file -# Copyright (C) 2008 -# This file is distributed under the same license as the unattended-upgrades package. -# Michael Vogt <mvo@debian.org>, 2008 -# -msgid "" -msgstr "" -"Project-Id-Version: 0.35debian1\n" -"Report-Msgid-Bugs-To: unattended-upgrades@packages.debian.org\n" -"POT-Creation-Date: 2015-11-03 07:12+0100\n" -"PO-Revision-Date: 2015-11-05 09:34+0100\n" -"Last-Translator: Steve Petruzzello <dlist@bluewin.ch>\n" -"Language-Team: French <debian-l10n-french@lists.debian.org>\n" -"Language: fr\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "Automatically download and install stable updates?" -msgstr "" -"Faut-il automatiquement télécharger et installer les mises à jour de la " -"version stable ?" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "" -"Applying updates on a frequent basis is an important part of keeping systems " -"secure. By default, updates need to be applied manually using package " -"management tools. Alternatively, you can choose to have this system " -"automatically download and install important updates." -msgstr "" -"Il est important de mettre régulièrement son système à jour pour maintenir " -"un haut niveau de sécurité. Par défaut, les mises à jour doivent être " -"appliquées manuellement à l'aide d'un outil de gestion de paquets. " -"Autrement, vous pouvez choisir d'automatiser ce processus de téléchargement " -"et d'installation des mises à jour de sécurité." - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Origins-Pattern that packages must match to be upgraded:" -msgstr "" -"Motif « Origin-Pattern » auquel les paquets doivent correspondre pour être " -"mis à jour :" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Please specify a value for the unattended-upgrades Origins-Pattern." -msgstr "" -"Veuillez indiquer une valeur pour le motif de correspondance « Origin-" -"Pattern » pour unattended-upgrades." - -#. Type: string -#. Description -#: ../templates:3001 -msgid "" -"A package will be upgraded only if its metadata values match all the " -"supplied keywords in the origin line." -msgstr "" -"Un paquet sera mis à jour uniquement si ses métadonnées correspondent à tous " -"les mots clés indiqués ici." diff --git a/package/debian/po/it.po b/package/debian/po/it.po deleted file mode 100644 index 02a01be8d43fc07f2cfc507d31cffe4ddaa06856..0000000000000000000000000000000000000000 --- a/package/debian/po/it.po +++ /dev/null @@ -1,60 +0,0 @@ -# Translation of unattended-upgrades debconf templates to Italian -# This file is distributed under the same license as the unattended-upgrades package. -# Luca Monducci <luca.mo@tiscali.it>, 2008, 2015. -# -msgid "" -msgstr "" -"Project-Id-Version: unattended-upgrades 0.35debian2 debconf\n" -"Report-Msgid-Bugs-To: unattended-upgrades@packages.debian.org\n" -"POT-Creation-Date: 2015-11-03 07:12+0100\n" -"PO-Revision-Date: 2015-11-15 09:15+0100\n" -"Last-Translator: Luca Monducci <luca.mo@tiscali.it>\n" -"Language-Team: Italian <debian-l10n-italian@lists.debian.org>\n" -"Language: it\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "Automatically download and install stable updates?" -msgstr "Scaricare e installare automaticamente gli aggiornamenti?" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "" -"Applying updates on a frequent basis is an important part of keeping systems " -"secure. By default, updates need to be applied manually using package " -"management tools. Alternatively, you can choose to have this system " -"automatically download and install important updates." -msgstr "" -"La regolare applicazione degli aggiornamenti è una pratica importante per " -"mantenere in sicurezza il sistema. Normalmente gli aggiornamenti devono " -"essere installati manualmente usando gli strumenti di gestione dei " -"pacchetti; in alternativa è possibile su questo sistema scaricare e " -"installare automaticamente gli aggiornamenti importanti." - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Origins-Pattern that packages must match to be upgraded:" -msgstr "" -"Per essere aggiornati i pacchetti devono corrispondere a Origins-Pattern:" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Please specify a value for the unattended-upgrades Origins-Pattern." -msgstr "Indicare il valore di Origins-Pattern per unattended-upgrades." - -#. Type: string -#. Description -#: ../templates:3001 -msgid "" -"A package will be upgraded only if its metadata values match all the " -"supplied keywords in the origin line." -msgstr "" -"Un pacchetto sarà aggiornato solo se i valori dei suoi metadati " -"corrispondono con tutte le parole chiave nella riga origine." diff --git a/package/debian/po/ja.po b/package/debian/po/ja.po deleted file mode 100644 index 09684ffb7218a4c7e1fcf2555d451dea350d196c..0000000000000000000000000000000000000000 --- a/package/debian/po/ja.po +++ /dev/null @@ -1,62 +0,0 @@ -# Copyright (C) 2008 Michael Vogt <michael.vogt@ubuntu.com> -# This file is distributed under the same license as the unattended-upgrades package. -# Hideki Yamane (Debian-JP) <henrich@debian.or.jp>, 2008. -# -msgid "" -msgstr "" -"Project-Id-Version: unattended-upgrades 0.36debian1\n" -"Report-Msgid-Bugs-To: unattended-upgrades@packages.debian.org\n" -"POT-Creation-Date: 2015-11-03 07:12+0100\n" -"PO-Revision-Date: 2008-12-21 22:32+0900\n" -"Last-Translator: Hideki Yamane (Debian-JP) <henrich@debian.or.jp>\n" -"Language-Team: Japanese <debian-japanese@lists.debian.org>\n" -"Language: ja\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "Automatically download and install stable updates?" -msgstr "自動的ã«å®‰å®šç‰ˆã®æ›´æ–°ã‚’ダウンãƒãƒ¼ãƒ‰ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã‹?" - -#. Type: boolean -#. Description -#: ../templates:2001 -#, fuzzy -#| msgid "" -#| "Applying updates on a frequent basis is an important part of keeping " -#| "systems secure. By default, updates need to be applied manually using " -#| "package management tools. Alternatively, you can choose to have this " -#| "system automatically download and install security updates." -msgid "" -"Applying updates on a frequent basis is an important part of keeping systems " -"secure. By default, updates need to be applied manually using package " -"management tools. Alternatively, you can choose to have this system " -"automatically download and install important updates." -msgstr "" -"æ›´æ–°ã®é©ç”¨ã‚’é »ç¹ã«å®Ÿæ–½ã™ã‚‹ã®ã¯ã€ã‚·ã‚¹ãƒ†ãƒ を安全ã«ä¿ã¤ãŸã‚ã«é‡è¦ãªã“ã¨ã§ã™ã€‚標" -"準ã®çŠ¶æ…‹ã§ã¯ã€æ›´æ–°ã®é©ç”¨ã¯ãƒ‘ッケージ管ç†ãƒ„ールを使ã£ã¦æ‰‹å‹•ã§è¡Œã†å¿…è¦ãŒã‚ã‚Šã¾" -"ã™ã€‚別ã®ã‚„ã‚Šæ–¹ã¨ã—ã¦ã€ã‚»ã‚ュリティ更新を自動的ã«ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" -"ã™ã‚‹ã‚ˆã†ã€ã“ã®ã‚·ã‚¹ãƒ†ãƒ ã‚’è¨å®šã™ã‚‹ã‚ˆã†ã«ã‚‚ã§ãã¾ã™ã€‚" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Origins-Pattern that packages must match to be upgraded:" -msgstr "" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Please specify a value for the unattended-upgrades Origins-Pattern." -msgstr "" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "" -"A package will be upgraded only if its metadata values match all the " -"supplied keywords in the origin line." -msgstr "" diff --git a/package/debian/po/nl.po b/package/debian/po/nl.po deleted file mode 100644 index 3a7e738f0702f06a6aea082ee7fbb7bac910da81..0000000000000000000000000000000000000000 --- a/package/debian/po/nl.po +++ /dev/null @@ -1,65 +0,0 @@ -# Dutch translation of unattended-upgrades debconf templates. -# Copyright (C) 2011 THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the unattended-upgrades package. -# Jeroen Schot <schot@a-eskwadraat.nl>, 2011. -# Frans Spiesschaert <Frans.Spiesschaert@yucom.be>, 2015. -# -msgid "" -msgstr "" -"Project-Id-Version: unattended-upgrades_0.70\n" -"Report-Msgid-Bugs-To: unattended-upgrades@packages.debian.org\n" -"POT-Creation-Date: 2015-11-03 07:12+0100\n" -"PO-Revision-Date: 2015-11-05 15:05+0100\n" -"Last-Translator: Frans Spiesschaert <Frans.Spiesschaert@yucom.be>\n" -"Language-Team: Debian Dutch l10n Team <debian-l10n-dutch@lists.debian.org>\n" -"Language: nl\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Gtranslator 2.91.6\n" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "Automatically download and install stable updates?" -msgstr "Updates uit 'stable' automatisch ophalen en installeren?" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "" -"Applying updates on a frequent basis is an important part of keeping systems " -"secure. By default, updates need to be applied manually using package " -"management tools. Alternatively, you can choose to have this system " -"automatically download and install important updates." -msgstr "" -"Regelmatig updates installeren is een belangrijk onderdeel van de " -"beveiliging van systemen. Standaard moeten updates handmatig worden " -"toegepast met een van de hulpprogramma's voor pakketbeheer. U kunt er ook " -"voor kiezen om op dit systeem belangrijke updates automatisch te laten " -"ophalen en installeren." - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Origins-Pattern that packages must match to be upgraded:" -msgstr "" -"Origins-Pattern (origine-patroon) waaraan pakketten moeten beantwoorden om " -"opgewaardeerd te worden:" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Please specify a value for the unattended-upgrades Origins-Pattern." -msgstr "Geef een waarde op voor Origins-Pattern van unattended-upgrades." - -#. Type: string -#. Description -#: ../templates:3001 -msgid "" -"A package will be upgraded only if its metadata values match all the " -"supplied keywords in the origin line." -msgstr "" -"Een pakket zal enkel opgewaardeerd worden als de waarden van zijn metadata " -"overeenkomen met al de opgegeven trefwoorden in de 'origin'-regel." diff --git a/package/debian/po/pt.po b/package/debian/po/pt.po deleted file mode 100644 index 411be81b841a0322dbe8f72f3cfef921a7881fe3..0000000000000000000000000000000000000000 --- a/package/debian/po/pt.po +++ /dev/null @@ -1,63 +0,0 @@ -# translation of unattended-upgrades debconf to Portuguese -# Copyright (C) 2008 the unattended-upgrades's copyright holder -# This file is distributed under the same license as the unattended-upgrades package. -# -# António Moreira <antoniocostamoreira@gmail.com>, 2008. -# Miguel Figueiredo <elmig@debianpt.org>, 2015. -msgid "" -msgstr "" -"Project-Id-Version: unattended-upgrades 0.35debian2\n" -"Report-Msgid-Bugs-To: unattended-upgrades@packages.debian.org\n" -"POT-Creation-Date: 2015-11-03 07:12+0100\n" -"PO-Revision-Date: 2015-11-21 19:57+0000\n" -"Last-Translator: Miguel Figueiredo <elmig@debianpt.org>\n" -"Language-Team: Portuguese <traduz@debianpt.org>\n" -"Language: pt\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "Automatically download and install stable updates?" -msgstr "Transferir e instalar automaticamente actualizações estáveis?" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "" -"Applying updates on a frequent basis is an important part of keeping systems " -"secure. By default, updates need to be applied manually using package " -"management tools. Alternatively, you can choose to have this system " -"automatically download and install important updates." -msgstr "" -"Aplicar actualizações regularmente é uma parte importante para manter os " -"sistemas seguros. Por regra, as actualizações precisam de ser aplicadas " -"manualmente usando ferramentas de gestão de pacotes. Em alternativa, você " -"pode escolher ter este sistema a descarregar e instalar automaticamente as " -"actualizações importantes." - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Origins-Pattern that packages must match to be upgraded:" -msgstr "" -"Origins-Pattern que os pacotes têm de coincidir para serem actualizados:" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Please specify a value for the unattended-upgrades Origins-Pattern." -msgstr "" -"Por favor especifique um valor para Origin-Pattern do unatteded-upgrades." - -#. Type: string -#. Description -#: ../templates:3001 -msgid "" -"A package will be upgraded only if its metadata values match all the " -"supplied keywords in the origin line." -msgstr "" -"Um pacote será actualizado apenas se o valor dos seus metadados coincidir " -"com todas as palavras-chave fornecidas na linha original." diff --git a/package/debian/po/pt_BR.po b/package/debian/po/pt_BR.po deleted file mode 100644 index c8ddc524df1965eb766eba99d3b7d2f43e984a89..0000000000000000000000000000000000000000 --- a/package/debian/po/pt_BR.po +++ /dev/null @@ -1,66 +0,0 @@ -# Debconf translations for unattended-upgrades. -# Copyright (C) 2009 THE unattended-upgrades'S COPYRIGHT HOLDER -# This file is distributed under the same license as the unattended-upgrades package. -# Adriano Rafael Gomes <adrianorg@gmail.com>, 2009-2010. -# -msgid "" -msgstr "" -"Project-Id-Version: unattended-upgrades\n" -"Report-Msgid-Bugs-To: unattended-upgrades@packages.debian.org\n" -"POT-Creation-Date: 2015-11-03 07:12+0100\n" -"PO-Revision-Date: 2010-12-17 21:58-0200\n" -"Last-Translator: Adriano Rafael Gomes <adrianorg@gmail.com>\n" -"Language-Team: Brazilian Portuguese <debian-l10n-portuguese@lists.debian." -"org>\n" -"Language: pt_BR\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"pt_BR utf-8\n" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "Automatically download and install stable updates?" -msgstr "Baixar e instalar atualizações estáveis automaticamente?" - -#. Type: boolean -#. Description -#: ../templates:2001 -#, fuzzy -#| msgid "" -#| "Applying updates on a frequent basis is an important part of keeping " -#| "systems secure. By default, updates need to be applied manually using " -#| "package management tools. Alternatively, you can choose to have this " -#| "system automatically download and install security updates." -msgid "" -"Applying updates on a frequent basis is an important part of keeping systems " -"secure. By default, updates need to be applied manually using package " -"management tools. Alternatively, you can choose to have this system " -"automatically download and install important updates." -msgstr "" -"Aplicar atualizações com frequência é uma parte importante de manter os " -"sistemas seguros. Por padrão, as atualizações precisam ser aplicadas " -"manualmente usando ferramentas de gerenciamento de pacotes. " -"Alternativamente, você pode escolher que esse sistema baixe e instale " -"automaticamente as atualizações de segurança." - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Origins-Pattern that packages must match to be upgraded:" -msgstr "" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Please specify a value for the unattended-upgrades Origins-Pattern." -msgstr "" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "" -"A package will be upgraded only if its metadata values match all the " -"supplied keywords in the origin line." -msgstr "" diff --git a/package/debian/po/ru.po b/package/debian/po/ru.po deleted file mode 100644 index f1c8400c64f0f83d8373f257014abb300dbb6a3a..0000000000000000000000000000000000000000 --- a/package/debian/po/ru.po +++ /dev/null @@ -1,64 +0,0 @@ -# translation of ru.po to Russian -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the unattended-upgrades package. -# -# Yuri Kozlov <kozlov.y@gmail.com>, 2008. -# Yuri Kozlov <yuray@komyakino.ru>, 2009, 2015. -msgid "" -msgstr "" -"Project-Id-Version: unattended-upgrades 0.86.6\n" -"Report-Msgid-Bugs-To: unattended-upgrades@packages.debian.org\n" -"POT-Creation-Date: 2015-11-03 07:12+0100\n" -"PO-Revision-Date: 2015-11-03 18:13+0300\n" -"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n" -"Language-Team: Russian <debian-l10n-russian@lists.debian.org>\n" -"Language: ru\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Lokalize 1.5\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "Automatically download and install stable updates?" -msgstr "" -"Скачивать и уÑтанавливать Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñтабильного выпуÑка автоматичеÑки?" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "" -"Applying updates on a frequent basis is an important part of keeping systems " -"secure. By default, updates need to be applied manually using package " -"management tools. Alternatively, you can choose to have this system " -"automatically download and install important updates." -msgstr "" -"РегулÑÑ€Ð½Ð°Ñ ÑƒÑтановка обновлений ÑвлÑетÑÑ Ð²Ð°Ð¶Ð½Ð¾Ð¹ чаÑтью обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ " -"безопаÑноÑти ÑиÑтемы. По умолчанию, Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð½ÑƒÐ¶Ð½Ð¾ уÑтанавливать вручную Ñ " -"помощью инÑтрументов ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚Ð°Ð¼Ð¸. Ðо ÑÐµÐ¹Ñ‡Ð°Ñ Ð¼Ð¾Ð¶Ð½Ð¾ указать, чтобы " -"ÑиÑтема Ñкачивала и уÑтанавливала важные Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки." - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Origins-Pattern that packages must match to be upgraded:" -msgstr "Origins-Pattern пакетов, которые нужно обновлÑÑ‚ÑŒ:" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Please specify a value for the unattended-upgrades Origins-Pattern." -msgstr "Укажите значение параметра Origins-Pattern Ð´Ð»Ñ unattended-upgrades." - -#. Type: string -#. Description -#: ../templates:3001 -msgid "" -"A package will be upgraded only if its metadata values match all the " -"supplied keywords in the origin line." -msgstr "" -"Пакет будет обновлÑÑ‚ÑŒÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ еÑли его Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¼ÐµÑ‚Ð°Ð´Ð°Ð½Ð½Ñ‹Ñ… Ñовпадут Ñо " -"вÑеми указанными ключевыми Ñловами в Ñтроке иÑточника (origin line)." diff --git a/package/debian/po/sk.po b/package/debian/po/sk.po deleted file mode 100644 index 1358087c8d0e07cef4ab6dbac565c3b885640201..0000000000000000000000000000000000000000 --- a/package/debian/po/sk.po +++ /dev/null @@ -1,63 +0,0 @@ -# Slovak translation of unattended-upgrades debconf template. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the udev package. -# Ivan Masár <helix84@centrum.sk>, 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: unattended-upgrades\n" -"Report-Msgid-Bugs-To: unattended-upgrades@packages.debian.org\n" -"POT-Creation-Date: 2015-11-03 07:12+0100\n" -"PO-Revision-Date: 2009-06-13 10:28+0100\n" -"Last-Translator: Ivan Masár <helix84@centrum.sk>\n" -"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n" -"Language: sk\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "Automatically download and install stable updates?" -msgstr "Automaticky sÅ¥ahovaÅ¥ a inÅ¡talovaÅ¥ stabilné aktualizácie?" - -#. Type: boolean -#. Description -#: ../templates:2001 -#, fuzzy -#| msgid "" -#| "Applying updates on a frequent basis is an important part of keeping " -#| "systems secure. By default, updates need to be applied manually using " -#| "package management tools. Alternatively, you can choose to have this " -#| "system automatically download and install security updates." -msgid "" -"Applying updates on a frequent basis is an important part of keeping systems " -"secure. By default, updates need to be applied manually using package " -"management tools. Alternatively, you can choose to have this system " -"automatically download and install important updates." -msgstr "" -"ÄŒastá aktualizácia je dôležitou súÄasÅ¥ou udrživania zabezpeÄeného systému. " -"Å tandardne je nutné aktualizácie spúšťaÅ¥ ruÄne pomocou nástrojov na správu " -"balÃkov. Namiesto toho môžete nechaÅ¥ tento systém aby za vás autoamticky " -"sÅ¥ahoval a inÅ¡taloval bezpeÄnostné aktualizácie." - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Origins-Pattern that packages must match to be upgraded:" -msgstr "" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Please specify a value for the unattended-upgrades Origins-Pattern." -msgstr "" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "" -"A package will be upgraded only if its metadata values match all the " -"supplied keywords in the origin line." -msgstr "" diff --git a/package/debian/po/sv.po b/package/debian/po/sv.po deleted file mode 100644 index 9bbb3b2eff2e88ab1dedd5a5203b7f5062b4c30a..0000000000000000000000000000000000000000 --- a/package/debian/po/sv.po +++ /dev/null @@ -1,64 +0,0 @@ -# translation of unattended-upgrades.po to swedish -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Martin Bagge <brother@bsnet.se>, 2008. -msgid "" -msgstr "" -"Project-Id-Version: unattended-upgrades\n" -"Report-Msgid-Bugs-To: unattended-upgrades@packages.debian.org\n" -"POT-Creation-Date: 2015-11-03 07:12+0100\n" -"PO-Revision-Date: 2008-12-09 16:27+0100\n" -"Last-Translator: Martin Bagge <brother@bsnet.se>\n" -"Language-Team: swedish <debian-l10n-swedish@lists.debian.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: KBabel 1.11.4\n" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "Automatically download and install stable updates?" -msgstr "Ska stabila uppdateringar laddas hem och installeras automatiskt?" - -#. Type: boolean -#. Description -#: ../templates:2001 -#, fuzzy -#| msgid "" -#| "Applying updates on a frequent basis is an important part of keeping " -#| "systems secure. By default, updates need to be applied manually using " -#| "package management tools. Alternatively, you can choose to have this " -#| "system automatically download and install security updates." -msgid "" -"Applying updates on a frequent basis is an important part of keeping systems " -"secure. By default, updates need to be applied manually using package " -"management tools. Alternatively, you can choose to have this system " -"automatically download and install important updates." -msgstr "" -"Att installera uppdateringar är en viktig del i att hÃ¥lla systemet säkert. " -"Standardinställningen är att uppdateringar mÃ¥ste installeras manuellt via en " -"pakethanterare. Alternativet är att du kan lÃ¥ta systemet automatiskt ladda " -"hem och installera säkerhetsuppdateringar." - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Origins-Pattern that packages must match to be upgraded:" -msgstr "" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Please specify a value for the unattended-upgrades Origins-Pattern." -msgstr "" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "" -"A package will be upgraded only if its metadata values match all the " -"supplied keywords in the origin line." -msgstr "" diff --git a/package/debian/po/templates.pot b/package/debian/po/templates.pot deleted file mode 100644 index f5cda807dc5d22d4cb8e58552f9fba98db4f5ea4..0000000000000000000000000000000000000000 --- a/package/debian/po/templates.pot +++ /dev/null @@ -1,54 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the unattended-upgrades package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: unattended-upgrades\n" -"Report-Msgid-Bugs-To: unattended-upgrades@packages.debian.org\n" -"POT-Creation-Date: 2015-11-03 07:12+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" -"Content-Transfer-Encoding: 8bit\n" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "Automatically download and install stable updates?" -msgstr "" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "" -"Applying updates on a frequent basis is an important part of keeping systems " -"secure. By default, updates need to be applied manually using package " -"management tools. Alternatively, you can choose to have this system " -"automatically download and install important updates." -msgstr "" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Origins-Pattern that packages must match to be upgraded:" -msgstr "" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Please specify a value for the unattended-upgrades Origins-Pattern." -msgstr "" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "" -"A package will be upgraded only if its metadata values match all the " -"supplied keywords in the origin line." -msgstr "" diff --git a/package/debian/po/tr.po b/package/debian/po/tr.po deleted file mode 100644 index 6106dcca94f5e6c23b6c3717a428b85ebf7ac623..0000000000000000000000000000000000000000 --- a/package/debian/po/tr.po +++ /dev/null @@ -1,66 +0,0 @@ -# Turkish translation of unattended-upgrades package -# Copyright (C) 2014 Mert Dirik -# This file is distributed under the same license as the unattended-upgrades package. -# Mert Dirik <mertdirik@gmail.com>, 2014. -# -msgid "" -msgstr "" -"Project-Id-Version: unattended-upgrades 0.82.8\n" -"Report-Msgid-Bugs-To: unattended-upgrades@packages.debian.org\n" -"POT-Creation-Date: 2015-11-03 07:12+0100\n" -"PO-Revision-Date: 2014-08-03 17:03+0200\n" -"Last-Translator: Mert Dirik <mertdirik@gmail.com>\n" -"Language-Team: Debian L10n Turkish <debian-l10n-turkish@lists.debian.org>\n" -"Language: tr\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.5.4\n" - -#. Type: boolean -#. Description -#: ../templates:2001 -msgid "Automatically download and install stable updates?" -msgstr "" -"Kararlı sürüm güncellemeleri otomatik olarak indirilsin ve kurulsun mu?" - -#. Type: boolean -#. Description -#: ../templates:2001 -#, fuzzy -#| msgid "" -#| "Applying updates on a frequent basis is an important part of keeping " -#| "systems secure. By default, updates need to be applied manually using " -#| "package management tools. Alternatively, you can choose to have this " -#| "system automatically download and install security updates." -msgid "" -"Applying updates on a frequent basis is an important part of keeping systems " -"secure. By default, updates need to be applied manually using package " -"management tools. Alternatively, you can choose to have this system " -"automatically download and install important updates." -msgstr "" -"Sisteminiz için yayımlanan güncellemeleri sık sık uygulamak sisteminizi " -"güvenli tutmanın önemli bir parçasıdır. Öntanımlı durumda güncellemeleri " -"paket yönetim araçlarını kullanarak elle uygulamanız gerekir. Bunun yerine, " -"bu sistemi güvenlik güncellemelerini otomatik olarak indirecek ve kuracak " -"ÅŸekilde ayarlayabilirsiniz." - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Origins-Pattern that packages must match to be upgraded:" -msgstr "" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "Please specify a value for the unattended-upgrades Origins-Pattern." -msgstr "" - -#. Type: string -#. Description -#: ../templates:3001 -msgid "" -"A package will be upgraded only if its metadata values match all the " -"supplied keywords in the origin line." -msgstr "" diff --git a/package/debian/postinst b/package/debian/postinst deleted file mode 100644 index 00abfee9af97575f99e6c846d867898a35aa1543..0000000000000000000000000000000000000000 --- a/package/debian/postinst +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/sh -# see: dh_installdeb(1) - -set -e - -# Do debconf stuff here -. /usr/share/debconf/confmodule - -# summary of how this script can be called: -# * <postinst> `configure' <most-recently-configured-version> -# * <old-postinst> `abort-upgrade' <new version> -# * <conflictor's-postinst> `abort-remove' `in-favour' <package> -# <new-version> -# * <postinst> `abort-remove' -# * <deconfigured's-postinst> `abort-deconfigure' `in-favour' -# <failed-install-package> <version> `removing' -# <conflicting-package> <version> -# for details, see http://www.debian.org/doc/debian-policy/ or -# the debian-policy package - - -# ensure the right permissions for the logdir (#757438) -if [ -d /var/log/unattended-upgrades ]; then - chown root:adm /var/log/unattended-upgrades || true - chmod 0750 /var/log/unattended-upgrades -fi - -case "$1" in - configure) - # *sigh* typo in filename in version 0.51ubuntu1 - if [ -e /etc/pm/sleep.d/10_unatteded-upgrades-hibernate ]; then - rm -f /etc/pm/sleep.d/10_unatteded-upgrades-hibernate - fi - - db_get unattended-upgrades/enable_auto_updates || true - CONFIG="/etc/apt/apt.conf.d/20auto-upgrades" - if [ "${RET}" = "true" ]; then - NEWFILE="/usr/share/unattended-upgrades/20auto-upgrades" - ucf --three-way --debconf-ok "$NEWFILE" "$CONFIG" - ucfr unattended-upgrades "$CONFIG" - elif [ "${RET}" = "false" ] && [ -e "$CONFIG" ]; then - # disable again - NEWFILE="/usr/share/unattended-upgrades/20auto-upgrades-disabled" - ucf --three-way --debconf-ok "$NEWFILE" "$CONFIG" - ucfr unattended-upgrades "$CONFIG" - fi - - CONFIG="/etc/apt/apt.conf.d/50unattended-upgrades" - NEWFILE="$CONFIG.ucftmp" - TEMPLATE="/usr/share/unattended-upgrades/50unattended-upgrades" - cp -a -f "$TEMPLATE" "$NEWFILE" - db_get unattended-upgrades/origins_pattern || true - sed -i 's/"origin=Debian,codename=${distro_codename},label=Debian-Security";/'"${RET}"'/' "$NEWFILE" - ucf --three-way --debconf-ok "$NEWFILE" "$CONFIG" - ucfr unattended-upgrades "$CONFIG" - rm -f "$NEWFILE" - - # Recover from incorrect init.d script header in versions < 0.64 - if dpkg --compare-versions "$2" lt "0.64" \ - && [ -f /etc/rc0.d/S[0-9][0-9]unattended-upgrades ] \ - && [ -f /etc/rc6.d/S[0-9][0-9]unattended-upgrades ] ; then - update-rc.d -f unattended-upgrades remove - fi - ;; - - abort-upgrade|abort-remove|abort-deconfigure) - ;; - - *) - echo "postinst called with unknown argument \`$1'" >&2 - exit 1 - ;; -esac - -# dh_installdeb will replace this with shell code automatically -# generated by other debhelper scripts. - -#DEBHELPER# - -# run the change of crontabs -SCRIPT="/usr/share/unattended-upgrades/cront.py" -python3 $SCRIPT - -exit 0 diff --git a/package/debian/postrm b/package/debian/postrm deleted file mode 100644 index 182e3e39ecce44c01d3b92b745f38cb9ca67d4b8..0000000000000000000000000000000000000000 --- a/package/debian/postrm +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/sh -# -# see: dh_installdeb(1) - -set -e - -# summary of how this script can be called: -# * <postrm> `remove' -# * <postrm> `purge' -# * <old-postrm> `upgrade' <new-version> -# * <new-postrm> `failed-upgrade' <old-version> -# * <new-postrm> `abort-install' -# * <new-postrm> `abort-install' <old-version> -# * <new-postrm> `abort-upgrade' <old-version> -# * <disappearer's-postrm> `disappear' <overwriter> -# <overwriter-version> -# for details, see http://www.debian.org/doc/debian-policy/ or -# the debian-policy package - - -case "$1" in - purge) - if [ -x "`which ucf 2>/dev/null`" ]; then - ucf --purge /etc/apt/apt.conf.d/20auto-upgrades - ucf --purge /etc/apt/apt.conf.d/50unattended-upgrades - fi - rm -f /etc/apt/apt.conf.d/20auto-upgrades - rm -f /etc/apt/apt.conf.d/50unattended-upgrades - ;; - - remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) - ;; - - *) - echo "postrm called with unknown argument \`$1'" >&2 - exit 1 - ;; -esac - -# dh_installdeb will replace this with shell code automatically -# generated by other debhelper scripts. - -#DEBHELPER# - -exit 0 - - diff --git a/package/debian/prerm b/package/debian/prerm deleted file mode 100644 index 4fcbff2dcd1b1016502c2027e56058954ff59cd2..0000000000000000000000000000000000000000 --- a/package/debian/prerm +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/sh -# prerm script for unattended-upgrades -# -# see: dh_installdeb(1) - -set -e - -# summary of how this script can be called: -# * <prerm> `remove' -# * <old-prerm> `upgrade' <new-version> -# * <new-prerm> `failed-upgrade' <old-version> -# * <conflictor's-prerm> `remove' `in-favour' <package> <new-version> -# * <deconfigured's-prerm> `deconfigure' `in-favour' -# <package-being-installed> <version> `removing' -# <conflicting-package> <version> -# for details, see http://www.debian.org/doc/debian-policy/ or -# the debian-policy package - - -case "$1" in - remove|upgrade|deconfigure) - ;; - - failed-upgrade) - if dpkg --compare-versions "$2" lt 0.73.3; then - cat >&2 <<EOF -NOTE: Ignoring prerm failure caused by failure to "stop" unattended-upgrades. -NOTE: See Debian bug #645919 for details. -EOF - exit 0 - fi - ;; - - *) - echo "prerm called with unknown argument \`$1'" >&2 - exit 1 - ;; -esac - -# dh_installdeb will replace this with shell code automatically -# generated by other debhelper scripts. - -#DEBHELPER# - -exit 0 diff --git a/package/debian/pycompat b/package/debian/pycompat deleted file mode 100644 index d8263ee9860594d2806b0dfd1bfd17528b0ba2a4..0000000000000000000000000000000000000000 --- a/package/debian/pycompat +++ /dev/null @@ -1 +0,0 @@ -2 \ No newline at end of file diff --git a/package/debian/rules b/package/debian/rules index c34db3eedc5145ab5a20a7245f0b387c8afd6042..2f54c4710f17e7a8b2c92b8f988979df6da6c2fa 100755 --- a/package/debian/rules +++ b/package/debian/rules @@ -1,35 +1,25 @@ #!/usr/bin/make -f +# See debhelper(7) (uncomment to enable) +# output every command that modifies files on the build system. +#export DH_VERBOSE = 1 + + +# see FEATURE AREAS in dpkg-buildflags(1) +#export DEB_BUILD_MAINT_OPTIONS = hardening=+all + +# see ENVIRONMENT in dpkg-buildflags(1) +# package maintainers to append CFLAGS +#export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic +# package maintainers to append LDFLAGS +#export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed -PYTHON=python3 -DIST=$(shell dpkg-vendor --query Vendor) %: - dh $@ --with=systemd - -override_dh_auto_build: - # copy the right template into place - cp data/50unattended-upgrades.$(DIST) data/50unattended-upgrades - $(PYTHON) setup.py build - -override_dh_auto_test: - $(MAKE) -C test - -override_dh_auto_install: - $(PYTHON) setup.py install \ - --root=$(CURDIR)/debian/unattended-upgrades \ - --install-layout=deb - -override_dh_auto_clean: - # Sanity-check before upload. - set -e; for f in unattended-upgrade unattended-upgrade-shutdown; do \ - ln -nsf $$f $$f.py; \ - py3compile $$f.py; \ - pycompile $$f.py; \ - rm -f $$f.py; \ - done - $(PYTHON) setup.py clean -a - -override_dh_installinit: - # we do not want to run the init script in the postinst/prerm, its - # really only useful on shutdown, see Debian bug #645919 - dh_installinit $@ --no-start -- stop 10 0 6 . + dh $@ + + +# dh_make generated override targets +# This is example for Cmake (See https://bugs.debian.org/641051 ) +#override_dh_auto_configure: +# dh_auto_configure -- # -DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH) + diff --git a/package/debian/source/format b/package/debian/source/format index 9f6742789cd14191dbf0065f875340a67a042086..89ae9db8f88b823b6a7eabf55e203658739da122 100644 --- a/package/debian/source/format +++ b/package/debian/source/format @@ -1 +1 @@ -3.0 (native) \ No newline at end of file +3.0 (native) diff --git a/package/debian/source/options b/package/debian/source/options deleted file mode 100644 index 59a6b9ed1f59333a3fc555aea1989d65c01c6369..0000000000000000000000000000000000000000 --- a/package/debian/source/options +++ /dev/null @@ -1,2 +0,0 @@ -tar-ignore = *.pyc -tar-ignore = __pycache__ diff --git a/package/debian/source_unattended-upgrades.py b/package/debian/source_unattended-upgrades.py deleted file mode 100644 index 69d46c220707e16747474e4ce647f484638e5124..0000000000000000000000000000000000000000 --- a/package/debian/source_unattended-upgrades.py +++ /dev/null @@ -1,21 +0,0 @@ -""" -unattended-upgrades apport hook - -Collects the following log file: - - /var/log/unattended-upgrades/unattended-upgrades.log -Check to see if either of these conffiles has been modified: - - /etc/apt/apt.conf.d/50unattended-upgrades - - /etc/apt/apt.conf.d/10periodic -""" - -from apport.hookutils import ( - attach_conffiles, - attach_file_if_exists) - - -def add_info(report, ui): - # always attach these files - attach_conffiles(report, 'unattended-upgrades', ui=ui) - attach_conffiles(report, 'update-notifier-common', ui=ui) - attach_file_if_exists( - report, '/var/log/unattended-upgrades/unattended-upgrades.log') diff --git a/package/debian/templates b/package/debian/templates deleted file mode 100644 index 6d28b50bb316ab112b6f97aa112fdc6f14653d4c..0000000000000000000000000000000000000000 --- a/package/debian/templates +++ /dev/null @@ -1,26 +0,0 @@ -# These templates have been reviewed by the debian-l10n-english -# team -# -# If modifications/additions/rewording are needed, please ask -# debian-l10n-english@lists.debian.org for advice. -# -# Even minor modifications require translation updates and such -# changes should be coordinated with translators and reviewers. - -Template: unattended-upgrades/enable_auto_updates -Type: boolean -Default: true -_Description: Automatically download and install stable updates? - Applying updates on a frequent basis is an important part of keeping - systems secure. By default, updates need to be applied manually using package - management tools. Alternatively, you can choose to have this system - automatically download and install important updates. - -Template: unattended-upgrades/origins_pattern -Type: string -Default: "origin=Debian,codename=${distro_codename},label=Debian-Security"; -_Description: Origins-Pattern that packages must match to be upgraded: - Please specify a value for the unattended-upgrades Origins-Pattern. - . - A package will be upgraded only if its metadata values match all the supplied - keywords in the origin line. diff --git a/package/debian/tests/control b/package/debian/tests/control deleted file mode 100644 index a3f866d061dca0739f340de59c90d8eec7f30dee..0000000000000000000000000000000000000000 --- a/package/debian/tests/control +++ /dev/null @@ -1,2 +0,0 @@ -Tests: run-tests -Depends: @, @builddeps@ diff --git a/package/debian/tests/run-tests b/package/debian/tests/run-tests deleted file mode 100755 index 6cd27eb9d69b323f5bcd9e223401147354b67f58..0000000000000000000000000000000000000000 --- a/package/debian/tests/run-tests +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -cd test -make diff --git a/package/debian/unattended-upgrades.init b/package/debian/unattended-upgrades.init deleted file mode 100755 index e7da0e1981b041ffa2540dfb5da16b7e4be86a53..0000000000000000000000000000000000000000 --- a/package/debian/unattended-upgrades.init +++ /dev/null @@ -1,51 +0,0 @@ -#! /bin/sh -# -### BEGIN INIT INFO -# Required-Start: $local_fs $remote_fs -# Required-Stop: $local_fs $remote_fs -# Provides: unattended-upgrade-shutdown-check -# Default-Start: -# Default-Stop: 0 6 -# Short-Description: Check if unattended upgrades are being applied -# Description: Check if unattended upgrades are being applied -# and wait for them to finish -### END INIT INFO -set -e - -PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin - -NAME="unattended-upgrades-shutdown" -DESC="unattended package upgrades shutdown" -SCRIPTNAME="/etc/init.d/$NAME" -SHUTDOWN_HELPER="/usr/share/unattended-upgrades/unattended-upgrade-shutdown" - -if [ -x /usr/bin/python3 ]; then - PYTHON=python3 -else - PYTHON=python -fi - -# Load the VERBOSE setting and other rcS variables -. /lib/init/vars.sh - -# Define LSB log_* functions. -# Depend on lsb-base (>= 3.2-14) to ensure that this file is present -. /lib/lsb/init-functions - -case "$1" in -start|restart|force-reload|status) - # nothing, just to keep update-rc.d happy (see debian #630732) - ;; -stop) - if [ -e $SHUTDOWN_HELPER ]; then - [ "$VERBOSE" != "no" ] && log_action_begin_msg "Checking for running $DESC" - $PYTHON $SHUTDOWN_HELPER - [ "$VERBOSE" != "no" ] && log_action_end_msg $? "$NAME" - fi - ;; -*) - echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 - exit 3 - ;; -esac -: diff --git a/package/debian/unattended-upgrades.service b/package/debian/unattended-upgrades.service deleted file mode 100644 index 28d6a8bcd7d54f579a4e31de07f74129dc0b8218..0000000000000000000000000000000000000000 --- a/package/debian/unattended-upgrades.service +++ /dev/null @@ -1,12 +0,0 @@ -[Unit] -Description=Unattended Upgrades Shutdown -DefaultDependencies=no -Before=shutdown.target reboot.target halt.target -Documentation=man:unattended-upgrade(8) - -[Service] -Type=oneshot -ExecStart=/usr/share/unattended-upgrades/unattended-upgrade-shutdown - -[Install] -WantedBy=shutdown.target diff --git a/package/doc/le-autoupgrade/AUTHORS b/package/doc/le-autoupgrade/AUTHORS new file mode 100644 index 0000000000000000000000000000000000000000..e313b9b82172eeeeec465995811fe325e23354a2 --- /dev/null +++ b/package/doc/le-autoupgrade/AUTHORS @@ -0,0 +1 @@ +Arianne P. Bortolan diff --git a/package/kernel/postinst.d/unattended-upgrades b/package/kernel/postinst.d/unattended-upgrades deleted file mode 100755 index 7a995b486e4246418c8b2251b008d260c99d64b3..0000000000000000000000000000000000000000 --- a/package/kernel/postinst.d/unattended-upgrades +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -if [ -d /var/run ]; then - touch /var/run/reboot-required -fi diff --git a/package/man/le-autoupgrade.8 b/package/man/le-autoupgrade.8 deleted file mode 100644 index 3bb6bd3354ec77c15b98c6fbbead85e1deb5cfc4..0000000000000000000000000000000000000000 --- a/package/man/le-autoupgrade.8 +++ /dev/null @@ -1,49 +0,0 @@ -.TH "LE\-AUTOUPGRADE" "8" "Jan 13, 2017" "Version 1.0" "System Manager Manual" -.SH NAME -.PP -\f[B]le\-autoupgrade\f[], \f[B]unattended\-upgrade(8)\f[] \[em] -automatic installation of security (and other) upgrades in Educacional -Linux. -.SH SYNOPSIS -.PP -\f[B]unattended\-upgrade\f[] [options] -.SH DESCRIPTION -.PP -This program can download and install security upgrades automatically -and unattended, taking care to only install packages from the configured -APT source, and checking for dpkg prompts about configuration file -changes. -All output is logged to /var/log/unattended\-upgrades.log. -.PP -This script is the backend for the APT::Periodic::Unattended\-Upgrade -option and designed to be run from cron (e.g. -via /etc/cron.daily/apt). -.PP -This package version is a modified version of unattended\-upgrades, the -changes set the package to enable the updates automatically and to this -updates happen on random times of the day. -.SS Options -.TP -.B \-h, \-\-help -help output -.RS -.RE -.TP -.B \-d, \-\-debug -extra debug output into /var/log/unattended\-upgrades.log -.RS -.RE -.TP -.B \-\-dry\-run -just simulate installing updates, do not actually do it -.RS -.RE -.SH AUTHORS -.PP -unattended\-upgrades is written by Michael Vogt <mvo@ubuntu.com> -.PP -This modified version patched as le\-autoupgrade was done by Arianne -Bortolan <apb14@inf.ufpr.br> -.SH SEE ALSO -.PP -\f[B]unattended\-upgrade(8)\f[] diff --git a/package/man/unattended-upgrade.8 b/package/man/unattended-upgrade.8 deleted file mode 100644 index 8e63a0b84c5d303cd415bc3164057780c9a5a59d..0000000000000000000000000000000000000000 --- a/package/man/unattended-upgrade.8 +++ /dev/null @@ -1,57 +0,0 @@ -.\" Hey, EMACS: -*- nroff -*- -.\" First parameter, NAME, should be all caps -.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection -.\" other parameters are allowed: see man(7), man(1) -.TH unattended-upgrade 8 "May 4, 2009" -.\" Please adjust this date whenever revising the manpage. -.\" -.\" Some roff macros, for reference: -.\" .nh disable hyphenation -.\" .hy enable hyphenation -.\" .ad l left justify -.\" .ad b justify to both left and right margins -.\" .nf disable filling -.\" .fi enable filling -.\" .br insert line break -.\" .sp <n> insert n+1 empty lines -.\" for manpage-specific macros, see man(7) -.SH NAME -unattended-upgrade \- automatic installation of security (and other) upgrades -.SH SYNOPSIS -\fBunattended-upgrade\fP [options] -.br -.SH DESCRIPTION -This program can download and install security upgrades automatically -and unattended, taking care to only install packages from the -configured APT source, and checking for dpkg prompts about -configuration file changes. All output is logged to -/var/log/unattended-upgrades.log. -.sp -This script is the backend for the APT::Periodic::Unattended-Upgrade -option and designed to be run from cron (e.g. via /etc/cron.daily/apt). -.SH OPTIONS -unattended-upgrade accepts the following options: -.TP -\fB-h\fR, \fB\-\-help\fR -help output -.TP -\fB-d\fR, \fB\-\-debug\fR -extra debug output into /var/log/unattended-upgrades.log -.TP -\fB--dry-run\fR -Just simulate installing updates, do not actually do it -.SH CONFIGURATION -The configuration is done via the apt configuration mechanism. The -default configuration file can be found at -/etc/apt/apt.conf.d/50unattended-upgrades -.SH AUTHORS -unattended-upgrade is written by Michael Vogt <mvo@ubuntu.com> -.PP -This manual page was originally written by Michael Vogt <mvo@ubuntu.com> -.SH COPYRIGHT -Copyright (C) 2005-2009 Canonical -.PP -There is NO warranty. -You may redistribute this software under the terms of the GNU -General Public License. For more information about these matters, see -the files named COPYING. diff --git a/package/pm/sleep.d/10_unattended-upgrades-hibernate b/package/pm/sleep.d/10_unattended-upgrades-hibernate deleted file mode 100755 index 382b578384712217b0b4b254a741e9fbef625d91..0000000000000000000000000000000000000000 --- a/package/pm/sleep.d/10_unattended-upgrades-hibernate +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/sh - -# Action script ensure that unattended-upgrades is finished -# before a hibernate -# -# Copyright: Copyright (c) 2009 Michael Vogt -# License: GPL-2 -# - -PATH=/sbin:/usr/sbin:/bin:/usr/bin -SHUTDOWN_HELPER=/usr/share/unattended-upgrades/unattended-upgrade-shutdown - -if [ -x /usr/bin/python3 ]; then - PYTHON=python3 -else - PYTHON=python -fi - -if [ ! -x /usr/share/unattended-upgrades/unattended-upgrade-shutdown ]; then - exit 0 -fi - -case "${1}" in - hibernate) - if [ -e $SHUTDOWN_HELPER ]; then - $PYTHON $SHUTDOWN_HELPER - fi - ;; - resume|thaw) - # nothing - ;; -esac - diff --git a/package/po/POTFILES.in b/package/po/POTFILES.in deleted file mode 100644 index a17393ebe4e8da940bbfea0b293d46d34b301099..0000000000000000000000000000000000000000 --- a/package/po/POTFILES.in +++ /dev/null @@ -1,3 +0,0 @@ -[encoding: UTF-8] -unattended-upgrade -unattended-upgrade-shutdown \ No newline at end of file diff --git a/package/po/da.po b/package/po/da.po deleted file mode 100644 index 89aea1abe5b3a573953003c5d9f5c7eafc6a593b..0000000000000000000000000000000000000000 --- a/package/po/da.po +++ /dev/null @@ -1,270 +0,0 @@ -# Danish translation unattended-upgrades. -# Copyright (C) 2014 unattended-upgrades & nedenstÃ¥ende oversættere. -# This file is distributed under the same license as the unattended-upgrades package. -# Joe Hansen <joedalton2@yahoo.dk>, 2012, 2014. -# -msgid "" -msgstr "" -"Project-Id-Version: unattended-upgrades\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-02 12:27+0200\n" -"PO-Revision-Date: 2014-07-07 23:51+0200\n" -"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n" -"Language-Team: Danish <debian-l10n-danish@lists.debian.org>\n" -"Language: da\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../unattended-upgrade:162 -#, python-format -msgid "Progress: %s %% (%s)" -msgstr "Status: %s %% (%s)" - -#: ../unattended-upgrade:418 ../unattended-upgrade:501 -#: ../unattended-upgrade-shutdown:161 -msgid "All upgrades installed" -msgstr "Alle opgraderinger er installeret" - -#: ../unattended-upgrade:420 ../unattended-upgrade:493 -msgid "Installing the upgrades failed!" -msgstr "Installation af opgraderingerne mislykkedes!" - -#: ../unattended-upgrade:421 ../unattended-upgrade:494 -#, python-format -msgid "error message: '%s'" -msgstr "fejlbesked: »%s«" - -#: ../unattended-upgrade:422 ../unattended-upgrade:495 -#, python-format -msgid "dpkg returned a error! See '%s' for details" -msgstr "dpkg returnerede en fejl! Se »%s« for detaljer" - -#: ../unattended-upgrade:795 -msgid "" -"No '/usr/bin/mail' or '/usr/sbin/sendmail',can not send mail. You probably " -"want to install the 'mailx' package." -msgstr "" -"Ingen »/usr/bin/mail« eller »/usr/sbin/sendmail« kan sende post. Du skal " -"sikkert installere pakken »mailx«." - -#: ../unattended-upgrade:811 -#, python-format -msgid "[reboot required] unattended-upgrades result for '%s': %s" -msgstr "[genstart krævet] unattended-upgrades resultat for »%s: %s«" - -#: ../unattended-upgrade:814 -#, python-format -msgid "unattended-upgrades result for '%s': '%s'" -msgstr "unattended-upgrades resultat for »%s«: »%s«" - -#: ../unattended-upgrade:816 -#, python-format -msgid "" -"Unattended upgrade returned: %s\n" -"\n" -msgstr "" -"Unattended upgrade returnerede: %s\n" -"\n" - -#: ../unattended-upgrade:819 -msgid "" -"Warning: A reboot is required to complete this upgrade.\n" -"\n" -msgstr "" -"Advarsel: En genstart er krævet for at færdiggøre denne opgradering.\n" -"\n" - -#: ../unattended-upgrade:821 -msgid "Packages that were upgraded:\n" -msgstr "Pakker som blev opgraderet:\n" - -#: ../unattended-upgrade:823 -msgid "Packages that attempted to upgrade:\n" -msgstr "Pakker som forsøgte at opgradere:\n" - -#: ../unattended-upgrade:827 -msgid "Packages with upgradable origin but kept back:\n" -msgstr "Pakker med opgraderbar oprindelse men holdt tilbage:\n" - -#: ../unattended-upgrade:832 -msgid "Package installation log:" -msgstr "Log for pakkeinstallation:" - -#: ../unattended-upgrade:835 -msgid "Unattended-upgrades log:\n" -msgstr "Log for unattended-upgrades:\n" - -#: ../unattended-upgrade:855 -#, python-format -msgid "Writing dpkg log to '%s'" -msgstr "Skriver dpkg-log til »%s«" - -#: ../unattended-upgrade:987 -#, python-format -msgid "Found %s, but not rebooting because %s is logged in." -msgid_plural "Found %s, but not rebooting because %s are logged in." -msgstr[0] "" -msgstr[1] "" - -#: ../unattended-upgrade:1033 -#, python-format -msgid "package '%s' upgradable but fails to be marked for upgrade (%s)" -msgstr "pakke »%s« kan opgraderes men fejler i markering for opgradering (%s)" - -#: ../unattended-upgrade:1097 -#, python-format -msgid "Packages that are auto removed: '%s'" -msgstr "Pakker som automatisk fjernes: »%s«" - -#: ../unattended-upgrade:1103 -#, fuzzy -#| msgid "Packages that are auto removed: '%s'" -msgid "Packages were successfully auto-removed" -msgstr "Pakker som automatisk fjernes: »%s«" - -#: ../unattended-upgrade:1105 -#, fuzzy -#| msgid "Installing the upgrades failed!" -msgid "Auto-removing the packages failed!" -msgstr "Installation af opgraderingerne mislykkedes!" - -#: ../unattended-upgrade:1106 -#, fuzzy, python-format -#| msgid "error message: '%s'" -msgid "Error message: '%s'" -msgstr "fejlbesked: »%s«" - -#: ../unattended-upgrade:1107 -#, fuzzy, python-format -#| msgid "dpkg returned a error! See '%s' for details" -msgid "dpkg returned an error! See '%s' for details" -msgstr "dpkg returnerede en fejl! Se »%s« for detaljer" - -#: ../unattended-upgrade:1125 -#, python-format -msgid "Initial blacklisted packages: %s" -msgstr "Oprindelig sortlistede pakker: %s" - -#: ../unattended-upgrade:1130 -#, fuzzy, python-format -#| msgid "Initial blacklisted packages: %s" -msgid "Initial whitelisted packages: %s" -msgstr "Oprindelig sortlistede pakker: %s" - -#: ../unattended-upgrade:1133 -msgid "Starting unattended upgrades script" -msgstr "Starter skript for unattended upgrades" - -#: ../unattended-upgrade:1136 -#, python-format -msgid "Allowed origins are: %s" -msgstr "Tilladte oprindelser er: %s" - -#: ../unattended-upgrade:1152 ../unattended-upgrade:1153 -msgid "Unclean dpkg state detected, trying to correct" -msgstr "Uklar dpkg-tilstand detekteret, forsøger at rette" - -#: ../unattended-upgrade:1164 -#, python-format -msgid "" -"dpkg --configure -a output:\n" -"%s" -msgstr "" -"dpkg --configure -a output:\n" -"%s" - -#: ../unattended-upgrade:1173 -msgid "Lock could not be acquired (another package manager running?)" -msgstr "LÃ¥s kunne ikke indhentes (kører en anden pakkehÃ¥ndtering?)" - -#: ../unattended-upgrade:1175 -msgid "Cache lock can not be acquired, exiting" -msgstr "LÃ¥s for mellemlager kan ikke indhentes, afslutter" - -#: ../unattended-upgrade:1182 ../unattended-upgrade:1183 -#: ../unattended-upgrade:1363 ../unattended-upgrade:1364 -msgid "Cache has broken packages, exiting" -msgstr "Mellemlager har ødelagte pakker, afslutter" - -#: ../unattended-upgrade:1226 -#, python-format -msgid "GetArchives() failed: '%s'" -msgstr "GetArchives() mislykkedes: »%s«" - -#: ../unattended-upgrade:1236 ../unattended-upgrade:1237 -#, python-format -msgid "An error occurred: '%s'" -msgstr "Der opstod en fejl: »%s«" - -#: ../unattended-upgrade:1239 ../unattended-upgrade:1241 -#, python-format -msgid "The URI '%s' failed to download, aborting" -msgstr "Der kunne ikke hentes fra adressen »%s«, afbryder" - -#: ../unattended-upgrade:1245 -#, python-format -msgid "Download finished, but file '%s' not there?!?" -msgstr "Hentning færdig, men filen »%s« var der ikke?!?" - -#: ../unattended-upgrade:1261 ../unattended-upgrade:1265 -#, python-format -msgid "Package '%s' has conffile prompt and needs to be upgraded manually" -msgstr "" -"Pakke »%s« bliver spurgt om oplysninger fra konfigurationsfilen og skal " -"opgraderes manuelt" - -#: ../unattended-upgrade:1293 -#, python-format -msgid "package '%s' not upgraded" -msgstr "pakke »%s« blev ikke opgraderet" - -#: ../unattended-upgrade:1311 -#, fuzzy -#| msgid "No packages found that can be upgraded unattended" -msgid "" -"No packages found that can be upgraded unattended and no pending auto-" -"removals" -msgstr "Ingen pakker fundet som kan opgraderes uden ledsager" - -#: ../unattended-upgrade:1337 -#, python-format -msgid "Packages that will be upgraded: %s" -msgstr "Pakker som vil blive opgraderet: %s" - -#: ../unattended-upgrade:1406 -msgid "print debug messages" -msgstr "vis fejlsøgningsbeskeder" - -#: ../unattended-upgrade:1409 -msgid "make apt/libapt print verbose debug messages" -msgstr "lad apt/libapt vise uddybende fejlsøgningsbeskeder" - -#: ../unattended-upgrade:1412 -msgid "print info messages" -msgstr "vis informationsbeskeder" - -#: ../unattended-upgrade:1415 -msgid "Simulation, download but do not install" -msgstr "Simulation, hent men installer ikke" - -#: ../unattended-upgrade:1418 -msgid "Upgrade in minimal steps (and allow interrupting with SIGINT" -msgstr "Opgrader i smÃ¥ trin (og tillad afbrydelse med SIGINT)" - -#: ../unattended-upgrade:1427 -msgid "You need to be root to run this application" -msgstr "Du skal være administrator (root) for at køre dette program" - -#: ../unattended-upgrade-shutdown:72 -msgid "Unattended-upgrade in progress during shutdown, sleeping for 5s" -msgstr "Unattended-upgrade i gang under nedlukning, sover for 5 sekunder" - -#: ../unattended-upgrade-shutdown:125 -msgid "Running unattended-upgrades in shutdown mode" -msgstr "Kører unattended-upgrades i nedlukningstilstand" - -#: ../unattended-upgrade-shutdown:153 -#, python-format -msgid "Giving up on lockfile after %s delay" -msgstr "Opgiver lÃ¥sefilen efter %s forsinkelse" diff --git a/package/po/de.po b/package/po/de.po deleted file mode 100644 index 61a0e88605f6d098270a055a04cba6d819892adf..0000000000000000000000000000000000000000 --- a/package/po/de.po +++ /dev/null @@ -1,281 +0,0 @@ -# Translation of unattended-upgrades to German. -# Copyright (C) 2005-2009 Canonical Ltd. -# This file is distributed under the same license as the -# unattended-upgrades package. -# Copyright (C) of this file 2012-2014 Chris Leick. -# -msgid "" -msgstr "" -"Project-Id-Version: unattended-upgrades 0.82.3\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-02 12:27+0200\n" -"PO-Revision-Date: 2014-03-16 13:16+0100\n" -"Last-Translator: Chris Leick <c.leick@vollbio.de>\n" -"Language-Team: German <debian-l10n-german@lists.debian.org>\n" -"Language: de\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: ../unattended-upgrade:162 -#, python-format -msgid "Progress: %s %% (%s)" -msgstr "Fortschritt: %s %% (%s)" - -#: ../unattended-upgrade:418 ../unattended-upgrade:501 -#: ../unattended-upgrade-shutdown:161 -msgid "All upgrades installed" -msgstr "alle Upgrades installiert" - -#: ../unattended-upgrade:420 ../unattended-upgrade:493 -msgid "Installing the upgrades failed!" -msgstr "Installation der Upgrades fehlgeschlagen!" - -#: ../unattended-upgrade:421 ../unattended-upgrade:494 -#, python-format -msgid "error message: '%s'" -msgstr "Fehlermeldung: »%s«" - -#: ../unattended-upgrade:422 ../unattended-upgrade:495 -#, python-format -msgid "dpkg returned a error! See '%s' for details" -msgstr "Dpkg gab einen Fehler zurück. Siehe »%s« für Einzelheiten" - -#: ../unattended-upgrade:795 -msgid "" -"No '/usr/bin/mail' or '/usr/sbin/sendmail',can not send mail. You probably " -"want to install the 'mailx' package." -msgstr "" -"kein »/usr/bin/mail« oder »/usr/sbin/sendmail«, Mail kann nicht gesandt " -"werden. Möglicherweise möchten Sie das Paket »mailx« installieren." - -#: ../unattended-upgrade:811 -#, python-format -msgid "[reboot required] unattended-upgrades result for '%s': %s" -msgstr "[Neustart erforderlich] Unattended-Upgrades-Ergebnis für »%s«: %s" - -#: ../unattended-upgrade:814 -#, python-format -msgid "unattended-upgrades result for '%s': '%s'" -msgstr "Unattended-Upgrades-Ergebnis für »%s«: %s" - -#: ../unattended-upgrade:816 -#, python-format -msgid "" -"Unattended upgrade returned: %s\n" -"\n" -msgstr "" -"Das unbeaufsichtigte Upgrade gab %s zurück.\n" -"\n" - -#: ../unattended-upgrade:819 -msgid "" -"Warning: A reboot is required to complete this upgrade.\n" -"\n" -msgstr "" -"Warnung: Um dieses Upgrade zu komplettieren, ist ein Neustart erforderlich.\n" -"\n" - -#: ../unattended-upgrade:821 -msgid "Packages that were upgraded:\n" -msgstr "Pakete, von denen ein Upgrade durchgeführt wurde:\n" - -#: ../unattended-upgrade:823 -msgid "Packages that attempted to upgrade:\n" -msgstr "Pakete, bei denen versucht wurde, ein Upgrade durchzuführen:\n" - -#: ../unattended-upgrade:827 -msgid "Packages with upgradable origin but kept back:\n" -msgstr "" -"Pakete, von deren Ursprung ein Upgrade durchgeführt werden kann, die aber\n" -"zurückgehalten werden.\n" - -#: ../unattended-upgrade:832 -msgid "Package installation log:" -msgstr "Paketinstallationsprotokoll:" - -#: ../unattended-upgrade:835 -msgid "Unattended-upgrades log:\n" -msgstr "Unattended-Upgrades-Protokoll:\n" - -#: ../unattended-upgrade:855 -#, python-format -msgid "Writing dpkg log to '%s'" -msgstr "Dpkg-Protokoll wird nach »%s« geschrieben" - -#: ../unattended-upgrade:987 -#, python-format -msgid "Found %s, but not rebooting because %s is logged in." -msgid_plural "Found %s, but not rebooting because %s are logged in." -msgstr[0] "" -msgstr[1] "" - -#: ../unattended-upgrade:1033 -#, python-format -msgid "package '%s' upgradable but fails to be marked for upgrade (%s)" -msgstr "" -"Von Paket »%s« könnte ein Upgrade durchgeführt werden, es ist jedoch " -"fehlgeschlagen, dies für das Upgrade zu markieren (%s)" - -#: ../unattended-upgrade:1097 -#, python-format -msgid "Packages that are auto removed: '%s'" -msgstr "Pakete, die automatisch entfernt wurden: »%s«" - -#: ../unattended-upgrade:1103 -#, fuzzy -#| msgid "Packages that are auto removed: '%s'" -msgid "Packages were successfully auto-removed" -msgstr "Pakete, die automatisch entfernt wurden: »%s«" - -#: ../unattended-upgrade:1105 -#, fuzzy -#| msgid "Installing the upgrades failed!" -msgid "Auto-removing the packages failed!" -msgstr "Installation der Upgrades fehlgeschlagen!" - -#: ../unattended-upgrade:1106 -#, fuzzy, python-format -#| msgid "error message: '%s'" -msgid "Error message: '%s'" -msgstr "Fehlermeldung: »%s«" - -#: ../unattended-upgrade:1107 -#, fuzzy, python-format -#| msgid "dpkg returned a error! See '%s' for details" -msgid "dpkg returned an error! See '%s' for details" -msgstr "Dpkg gab einen Fehler zurück. Siehe »%s« für Einzelheiten" - -#: ../unattended-upgrade:1125 -#, python-format -msgid "Initial blacklisted packages: %s" -msgstr "Pakete, die anfangs auf die schwarzen Liste standen: %s" - -#: ../unattended-upgrade:1130 -#, fuzzy, python-format -#| msgid "Initial blacklisted packages: %s" -msgid "Initial whitelisted packages: %s" -msgstr "Pakete, die anfangs auf die schwarzen Liste standen: %s" - -#: ../unattended-upgrade:1133 -msgid "Starting unattended upgrades script" -msgstr "Skript für unbeaufsichtigte Upgrades wird gestartet." - -#: ../unattended-upgrade:1136 -#, python-format -msgid "Allowed origins are: %s" -msgstr "erlaubte Ursprünge sind: %s" - -#: ../unattended-upgrade:1152 ../unattended-upgrade:1153 -msgid "Unclean dpkg state detected, trying to correct" -msgstr "unsauberer Dpkg-Status entdeckt, es wird versucht dies zu korrigieren" - -#: ../unattended-upgrade:1164 -#, python-format -msgid "" -"dpkg --configure -a output:\n" -"%s" -msgstr "" -"»dpkg --configure -a«-Ausgabe:\n" -"%s" - -#: ../unattended-upgrade:1173 -msgid "Lock could not be acquired (another package manager running?)" -msgstr "" -"Sperrung konnte nicht erreicht werden (läuft eine weitere Paketverwaltung?)" - -#: ../unattended-upgrade:1175 -msgid "Cache lock can not be acquired, exiting" -msgstr "Zwischenspeicher konnte nicht gesperrt werden, wird beendet" - -#: ../unattended-upgrade:1182 ../unattended-upgrade:1183 -#: ../unattended-upgrade:1363 ../unattended-upgrade:1364 -msgid "Cache has broken packages, exiting" -msgstr "Zwischenspeicher enthält beschädigte Pakete, wird beendet" - -#: ../unattended-upgrade:1226 -#, python-format -msgid "GetArchives() failed: '%s'" -msgstr "GetArchives() fehlgeschlagen: »%s«" - -#: ../unattended-upgrade:1236 ../unattended-upgrade:1237 -#, python-format -msgid "An error occurred: '%s'" -msgstr "Es ist ein Fehler aufgetreten: »%s«" - -#: ../unattended-upgrade:1239 ../unattended-upgrade:1241 -#, python-format -msgid "The URI '%s' failed to download, aborting" -msgstr "Herunterladen von der URI »%s« fehlgeschlagen, wird abgebrochen" - -#: ../unattended-upgrade:1245 -#, python-format -msgid "Download finished, but file '%s' not there?!?" -msgstr "Herunterladen beendet, aber Datei »%s« ist nicht dort!?" - -#: ../unattended-upgrade:1261 ../unattended-upgrade:1265 -#, python-format -msgid "Package '%s' has conffile prompt and needs to be upgraded manually" -msgstr "" -"Das Paket »%s« hat eine Conffile-Abfrage und muss einem manuellen Upgrade " -"unterzogen werden." - -#: ../unattended-upgrade:1293 -#, python-format -msgid "package '%s' not upgraded" -msgstr "Von Paket »%s« wurde kein Upgrade durchgeführt." - -#: ../unattended-upgrade:1311 -#, fuzzy -#| msgid "No packages found that can be upgraded unattended" -msgid "" -"No packages found that can be upgraded unattended and no pending auto-" -"removals" -msgstr "" -"Es wurden keine Pakete gefunden, von denen ein unbeaufsichtigtes Upgrade " -"durchgeführt werden kann." - -#: ../unattended-upgrade:1337 -#, python-format -msgid "Packages that will be upgraded: %s" -msgstr "Pakete, von denen ein Upgrade durchgeführt wird: %s" - -#: ../unattended-upgrade:1406 -msgid "print debug messages" -msgstr "Nachrichten zur Fehlersuche ausgeben" - -#: ../unattended-upgrade:1409 -msgid "make apt/libapt print verbose debug messages" -msgstr "APT/LibAPT detaillierte Nachrichten zur Fehlersuche ausgeben lassen" - -#: ../unattended-upgrade:1412 -msgid "print info messages" -msgstr "Informationsnachrichten ausgeben" - -#: ../unattended-upgrade:1415 -msgid "Simulation, download but do not install" -msgstr "Simulation, herunterladen, aber nicht installieren" - -#: ../unattended-upgrade:1418 -msgid "Upgrade in minimal steps (and allow interrupting with SIGINT" -msgstr "Upgrade in minimalen Schritten (Unterbrechung mit SIGINT erlaubt)" - -#: ../unattended-upgrade:1427 -msgid "You need to be root to run this application" -msgstr "Sie müssen Root sein, um diese Anwendung auszuführen." - -#: ../unattended-upgrade-shutdown:72 -msgid "Unattended-upgrade in progress during shutdown, sleeping for 5s" -msgstr "" -"Unattended-Upgrade läuft während des Herunterfahrens weiter, es wird fünf " -"Sekunden lang gewartet." - -#: ../unattended-upgrade-shutdown:125 -msgid "Running unattended-upgrades in shutdown mode" -msgstr "Unattended-Upgrades im Herunterfahrmodus ausführen" - -#: ../unattended-upgrade-shutdown:153 -#, python-format -msgid "Giving up on lockfile after %s delay" -msgstr "Sperrdatei, hier wird nach %s Verzögerung aufgegeben." diff --git a/package/po/es.po b/package/po/es.po deleted file mode 100644 index ee234149a75689567bf2621635b14721eb8393f6..0000000000000000000000000000000000000000 --- a/package/po/es.po +++ /dev/null @@ -1,323 +0,0 @@ -# unattended-upgrades po translation to Spanish -# Copyright (C) 2012 Software in the Public Interest -# This file is distributed under the same license as the unattended-upgrades package. -# -# Changes: -# - Initial translation -# Omar Campagne <ocampagne@gmail.com>, 2012 -# -# - Updates -# TRANSLATOR -# -# Traductores, si no conocen el formato PO, merece la pena leer la -# documentación de gettext, especialmente las secciones dedicadas a este -# formato, por ejemplo ejecutando: -# info -n '(gettext)PO Files' -# info -n '(gettext)Header Entry' -# -# Equipo de traducción al español, por favor lean antes de traducir -# los siguientes documentos: -# -# - El proyecto de traducción de Debian al español -# http://www.debian.org/intl/spanish/ -# especialmente las notas y normas de traducción en -# http://www.debian.org/intl/spanish/notas -# -# - La guÃa de traducción de po's de debconf: -# /usr/share/doc/po-debconf/README-trans -# o http://www.debian.org/intl/l10n/po-debconf/README-trans -# -msgid "" -msgstr "" -"Project-Id-Version: unattended-upgrades 0.79\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-02 12:27+0200\n" -"PO-Revision-Date: 2012-07-12 14:04+0200\n" -"Last-Translator: Omar Campagne <ocampagne@gmail.com>\n" -"Language-Team: Debian l10n Spanish <debian-l10n-spanish@lists.debian.org>\n" -"Language: es\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Virtaal 0.7.1\n" - -#: ../unattended-upgrade:162 -#, python-format -msgid "Progress: %s %% (%s)" -msgstr "Progreso: %s %% (%s)" - -#: ../unattended-upgrade:418 ../unattended-upgrade:501 -#: ../unattended-upgrade-shutdown:161 -msgid "All upgrades installed" -msgstr "Se han instalado todas las actualizaciones" - -#: ../unattended-upgrade:420 ../unattended-upgrade:493 -msgid "Installing the upgrades failed!" -msgstr "Fallo al instalar actualizaciones" - -#: ../unattended-upgrade:421 ../unattended-upgrade:494 -#, python-format -msgid "error message: '%s'" -msgstr "Mensaje de fallo: «%s»" - -#: ../unattended-upgrade:422 ../unattended-upgrade:495 -#, python-format -msgid "dpkg returned a error! See '%s' for details" -msgstr "Se ha detectado un fallo de dpkg. Para más detalles, consulte «%s»" - -#: ../unattended-upgrade:795 -#, fuzzy -#| msgid "" -#| "No '/usr/bin/mail', can not send mail. You probably want to install the " -#| "'mailx' package." -msgid "" -"No '/usr/bin/mail' or '/usr/sbin/sendmail',can not send mail. You probably " -"want to install the 'mailx' package." -msgstr "" -"No se ha detectado «/usr/bin/mail», no se puede enviar correo. Considere " -"instalar el paquete «mailx»." - -#: ../unattended-upgrade:811 -#, fuzzy, python-format -#| msgid "[reboot required] unattended-upgrades result for '%s'" -msgid "[reboot required] unattended-upgrades result for '%s': %s" -msgstr "[Se requiere un reinicio] Resultado de unattended-upgrades para «%s»" - -#: ../unattended-upgrade:814 -#, fuzzy, python-format -#| msgid "unattended-upgrades result for '%s'" -msgid "unattended-upgrades result for '%s': '%s'" -msgstr "Resultado de unattended-upgrades para «%s»" - -#: ../unattended-upgrade:816 -#, python-format -msgid "" -"Unattended upgrade returned: %s\n" -"\n" -msgstr "" -"Valor devuelto por unattended-upgrade: %s\n" -"\n" - -#: ../unattended-upgrade:819 -msgid "" -"Warning: A reboot is required to complete this upgrade.\n" -"\n" -msgstr "" -"Advertencia: Se requiere reinciar para completar la actualización.\n" -"\n" - -#: ../unattended-upgrade:821 -#, fuzzy -#| msgid "Packages that are upgraded:\n" -msgid "Packages that were upgraded:\n" -msgstr "Paquetes que actualizar:\n" - -#: ../unattended-upgrade:823 -#, fuzzy -#| msgid "Packages that are upgraded:\n" -msgid "Packages that attempted to upgrade:\n" -msgstr "Paquetes que actualizar:\n" - -#: ../unattended-upgrade:827 -msgid "Packages with upgradable origin but kept back:\n" -msgstr "" -"Paquetes con una actualización disponible en la fuente pero que no se " -"actualizarán:\n" - -#: ../unattended-upgrade:832 -msgid "Package installation log:" -msgstr "Registro de instalación de paquete:" - -#: ../unattended-upgrade:835 -msgid "Unattended-upgrades log:\n" -msgstr "Registro de unattended-upgrades:\n" - -#: ../unattended-upgrade:855 -#, python-format -msgid "Writing dpkg log to '%s'" -msgstr "Escribiendo el registro de dpkg en «%s»" - -#: ../unattended-upgrade:987 -#, python-format -msgid "Found %s, but not rebooting because %s is logged in." -msgid_plural "Found %s, but not rebooting because %s are logged in." -msgstr[0] "" -msgstr[1] "" - -#: ../unattended-upgrade:1033 -#, python-format -msgid "package '%s' upgradable but fails to be marked for upgrade (%s)" -msgstr "" -"El paquete «%s» es actualizable, pero no se puede marcar para la " -"actualización (%s)" - -#: ../unattended-upgrade:1097 -#, python-format -msgid "Packages that are auto removed: '%s'" -msgstr "Paquetes eliminados de forma automática: «%s»" - -#: ../unattended-upgrade:1103 -#, fuzzy -#| msgid "Packages that are auto removed: '%s'" -msgid "Packages were successfully auto-removed" -msgstr "Paquetes eliminados de forma automática: «%s»" - -#: ../unattended-upgrade:1105 -#, fuzzy -#| msgid "Installing the upgrades failed!" -msgid "Auto-removing the packages failed!" -msgstr "Fallo al instalar actualizaciones" - -#: ../unattended-upgrade:1106 -#, fuzzy, python-format -#| msgid "error message: '%s'" -msgid "Error message: '%s'" -msgstr "Mensaje de fallo: «%s»" - -#: ../unattended-upgrade:1107 -#, fuzzy, python-format -#| msgid "dpkg returned a error! See '%s' for details" -msgid "dpkg returned an error! See '%s' for details" -msgstr "Se ha detectado un fallo de dpkg. Para más detalles, consulte «%s»" - -#: ../unattended-upgrade:1125 -#, python-format -msgid "Initial blacklisted packages: %s" -msgstr "Paquetes inicialmente bloqueados: %s" - -#: ../unattended-upgrade:1130 -#, fuzzy, python-format -#| msgid "Initial blacklisted packages: %s" -msgid "Initial whitelisted packages: %s" -msgstr "Paquetes inicialmente bloqueados: %s" - -#: ../unattended-upgrade:1133 -msgid "Starting unattended upgrades script" -msgstr "Iniciando script de unattended-upgrades" - -#: ../unattended-upgrade:1136 -#, python-format -msgid "Allowed origins are: %s" -msgstr "Fuentes permitidas: %s" - -#: ../unattended-upgrade:1152 ../unattended-upgrade:1153 -msgid "Unclean dpkg state detected, trying to correct" -msgstr "Se ha detectado un estado no limpio de dpkg, intentando corregir" - -#: ../unattended-upgrade:1164 -#, python-format -msgid "" -"dpkg --configure -a output:\n" -"%s" -msgstr "" -"dpkg --configure -a output:\n" -"%s" - -#: ../unattended-upgrade:1173 -msgid "Lock could not be acquired (another package manager running?)" -msgstr "" -"No se puede establecer el bloqueo (¿otro gestor de paquetes ejecutándose?)" - -#: ../unattended-upgrade:1175 -msgid "Cache lock can not be acquired, exiting" -msgstr "No se puede establecer el bloqueo de la caché, saliendo" - -#: ../unattended-upgrade:1182 ../unattended-upgrade:1183 -#: ../unattended-upgrade:1363 ../unattended-upgrade:1364 -msgid "Cache has broken packages, exiting" -msgstr "La caché tiene paquetes rotos, saliendo" - -#: ../unattended-upgrade:1226 -#, python-format -msgid "GetArchives() failed: '%s'" -msgstr "Fallo de GetArchives(): «%s»" - -#: ../unattended-upgrade:1236 ../unattended-upgrade:1237 -#, fuzzy, python-format -#| msgid "An error ocured: '%s'" -msgid "An error occurred: '%s'" -msgstr "Se ha detectado un fallo: «%s»" - -#: ../unattended-upgrade:1239 ../unattended-upgrade:1241 -#, python-format -msgid "The URI '%s' failed to download, aborting" -msgstr "Fallo al descargar desde el URI «%s», interrumpiendo" - -#: ../unattended-upgrade:1245 -#, python-format -msgid "Download finished, but file '%s' not there?!?" -msgstr "La descarga ha finalizado, pero no se encuentra el fichero «%s»" - -#: ../unattended-upgrade:1261 ../unattended-upgrade:1265 -#, python-format -msgid "Package '%s' has conffile prompt and needs to be upgraded manually" -msgstr "" -"El paquete «%s» solicita confirmación a través de un conffile, y se debe " -"actualizar de forma manual" - -#: ../unattended-upgrade:1293 -#, python-format -msgid "package '%s' not upgraded" -msgstr "No se ha actualizado el paquete «%s»" - -#: ../unattended-upgrade:1311 -#, fuzzy -#| msgid "No packages found that can be upgraded unattended" -msgid "" -"No packages found that can be upgraded unattended and no pending auto-" -"removals" -msgstr "No se han encontrado paquetes actualizables sin supervisión" - -#: ../unattended-upgrade:1337 -#, fuzzy, python-format -#| msgid "Packages that are upgraded: %s" -msgid "Packages that will be upgraded: %s" -msgstr "Paquetes que se han actualizado: %s" - -#: ../unattended-upgrade:1406 -msgid "print debug messages" -msgstr "Mostrar mensajes de depuración de fallos" - -#: ../unattended-upgrade:1409 -#, fuzzy -#| msgid "print debug messages" -msgid "make apt/libapt print verbose debug messages" -msgstr "Mostrar mensajes de depuración de fallos" - -#: ../unattended-upgrade:1412 -#, fuzzy -#| msgid "print debug messages" -msgid "print info messages" -msgstr "Mostrar mensajes de depuración de fallos" - -#: ../unattended-upgrade:1415 -msgid "Simulation, download but do not install" -msgstr "Simulacro, descarga pero no instala" - -#: ../unattended-upgrade:1418 -msgid "Upgrade in minimal steps (and allow interrupting with SIGINT" -msgstr "Actualizar en pequeños pasos (y permitir la interrupción con SIGINT)" - -#: ../unattended-upgrade:1427 -msgid "You need to be root to run this application" -msgstr "" -"Necesita tener privilegios de administrador para ejecutar esta aplicación" - -#: ../unattended-upgrade-shutdown:72 -msgid "Unattended-upgrade in progress during shutdown, sleeping for 5s" -msgstr "Unattended-upgrade en proceso durante el apagado, esperando 5s" - -#: ../unattended-upgrade-shutdown:125 -#, fuzzy -#| msgid "unattended-upgrades result for '%s'" -msgid "Running unattended-upgrades in shutdown mode" -msgstr "Resultado de unattended-upgrades para «%s»" - -#: ../unattended-upgrade-shutdown:153 -#, python-format -msgid "Giving up on lockfile after %s delay" -msgstr "Finalizando el bloqueo del fichero después de un retraso de %s" - -#~ msgid "Progress: %s %%: (%s)" -#~ msgstr "Progreso: %s %%: (%s)" diff --git a/package/po/eu.po b/package/po/eu.po deleted file mode 100644 index a5471906a2848207fdfa87ddc2ee99de1f89ef2c..0000000000000000000000000000000000000000 --- a/package/po/eu.po +++ /dev/null @@ -1,289 +0,0 @@ -# translation of eu.po to Euskara -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Piarres Beobide <pi@beobide.net>, 2008. -msgid "" -msgstr "" -"Project-Id-Version: eu\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-02 12:27+0200\n" -"PO-Revision-Date: 2008-12-17 09:28+0100\n" -"Last-Translator: Piarres Beobide <pi@beobide.net>\n" -"Language-Team: Euskara <debian-l10n-basque@lists.debian.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: KBabel 1.11.4\n" - -#: ../unattended-upgrade:162 -#, python-format -msgid "Progress: %s %% (%s)" -msgstr "" - -#: ../unattended-upgrade:418 ../unattended-upgrade:501 -#: ../unattended-upgrade-shutdown:161 -msgid "All upgrades installed" -msgstr "Bertsio-berritze guztiak instalatu dira" - -#: ../unattended-upgrade:420 ../unattended-upgrade:493 -msgid "Installing the upgrades failed!" -msgstr "Huts bertsio-berritzeak instalatzean!" - -#: ../unattended-upgrade:421 ../unattended-upgrade:494 -#, python-format -msgid "error message: '%s'" -msgstr "errore mezua: '%s'" - -#: ../unattended-upgrade:422 ../unattended-upgrade:495 -#, python-format -msgid "dpkg returned a error! See '%s' for details" -msgstr "dpkg-ek errore bat itzuli du! '%s' begiratu xehetasunetarako" - -#: ../unattended-upgrade:795 -msgid "" -"No '/usr/bin/mail' or '/usr/sbin/sendmail',can not send mail. You probably " -"want to install the 'mailx' package." -msgstr "" - -#: ../unattended-upgrade:811 -#, fuzzy, python-format -msgid "[reboot required] unattended-upgrades result for '%s': %s" -msgstr "" -"Zaindugabeko bertsio-berritze erantzuna: %s\n" -"\n" - -#: ../unattended-upgrade:814 -#, fuzzy, python-format -msgid "unattended-upgrades result for '%s': '%s'" -msgstr "" -"Zaindugabeko bertsio-berritze erantzuna: %s\n" -"\n" - -#: ../unattended-upgrade:816 -#, python-format -msgid "" -"Unattended upgrade returned: %s\n" -"\n" -msgstr "" -"Zaindugabeko bertsio-berritze erantzuna: %s\n" -"\n" - -#: ../unattended-upgrade:819 -msgid "" -"Warning: A reboot is required to complete this upgrade.\n" -"\n" -msgstr "" - -#: ../unattended-upgrade:821 -#, fuzzy -msgid "Packages that were upgraded:\n" -msgstr "Bertsio-berritu diren paketeak: %s" - -#: ../unattended-upgrade:823 -#, fuzzy -msgid "Packages that attempted to upgrade:\n" -msgstr "Bertsio-berritu diren paketeak: %s" - -#: ../unattended-upgrade:827 -msgid "Packages with upgradable origin but kept back:\n" -msgstr "" - -#: ../unattended-upgrade:832 -msgid "Package installation log:" -msgstr "" - -#: ../unattended-upgrade:835 -#, fuzzy -msgid "Unattended-upgrades log:\n" -msgstr "" -"Zaindugabeko bertsio-berritze erantzuna: %s\n" -"\n" - -#: ../unattended-upgrade:855 -#, python-format -msgid "Writing dpkg log to '%s'" -msgstr "Dpkg erregistroa '%s'-en idazten" - -#: ../unattended-upgrade:987 -#, python-format -msgid "Found %s, but not rebooting because %s is logged in." -msgid_plural "Found %s, but not rebooting because %s are logged in." -msgstr[0] "" -msgstr[1] "" - -#: ../unattended-upgrade:1033 -#, python-format -msgid "package '%s' upgradable but fails to be marked for upgrade (%s)" -msgstr "" - -#: ../unattended-upgrade:1097 -#, fuzzy, python-format -#| msgid "Packages that are upgraded: %s" -msgid "Packages that are auto removed: '%s'" -msgstr "Bertsio-berritu diren paketeak: %s" - -#: ../unattended-upgrade:1103 -#, fuzzy -#| msgid "Packages that are upgraded: %s" -msgid "Packages were successfully auto-removed" -msgstr "Bertsio-berritu diren paketeak: %s" - -#: ../unattended-upgrade:1105 -#, fuzzy -#| msgid "Installing the upgrades failed!" -msgid "Auto-removing the packages failed!" -msgstr "Huts bertsio-berritzeak instalatzean!" - -#: ../unattended-upgrade:1106 -#, fuzzy, python-format -#| msgid "error message: '%s'" -msgid "Error message: '%s'" -msgstr "errore mezua: '%s'" - -#: ../unattended-upgrade:1107 -#, fuzzy, python-format -#| msgid "dpkg returned a error! See '%s' for details" -msgid "dpkg returned an error! See '%s' for details" -msgstr "dpkg-ek errore bat itzuli du! '%s' begiratu xehetasunetarako" - -#: ../unattended-upgrade:1125 -#, python-format -msgid "Initial blacklisted packages: %s" -msgstr "Hasierako zerrenda-beltz paketeak: %s" - -#: ../unattended-upgrade:1130 -#, fuzzy, python-format -#| msgid "Initial blacklisted packages: %s" -msgid "Initial whitelisted packages: %s" -msgstr "Hasierako zerrenda-beltz paketeak: %s" - -#: ../unattended-upgrade:1133 -msgid "Starting unattended upgrades script" -msgstr "Zaindugabeko bertsio-berritze script-a abiarazten" - -#: ../unattended-upgrade:1136 -#, python-format -msgid "Allowed origins are: %s" -msgstr "Onartzen diren jatorriak: %s" - -#: ../unattended-upgrade:1152 ../unattended-upgrade:1153 -msgid "Unclean dpkg state detected, trying to correct" -msgstr "" - -#: ../unattended-upgrade:1164 -#, python-format -msgid "" -"dpkg --configure -a output:\n" -"%s" -msgstr "" - -#: ../unattended-upgrade:1173 -msgid "Lock could not be acquired (another package manager running?)" -msgstr "" - -#: ../unattended-upgrade:1175 -#, fuzzy -#| msgid "Cache has broken packages, exiting" -msgid "Cache lock can not be acquired, exiting" -msgstr "Katxeak hondaturiko paketeak ditu, uzten" - -#: ../unattended-upgrade:1182 ../unattended-upgrade:1183 -#: ../unattended-upgrade:1363 ../unattended-upgrade:1364 -msgid "Cache has broken packages, exiting" -msgstr "Katxeak hondaturiko paketeak ditu, uzten" - -#: ../unattended-upgrade:1226 -#, python-format -msgid "GetArchives() failed: '%s'" -msgstr "GetArchives()-ek huts egin du: '%s'" - -#: ../unattended-upgrade:1236 ../unattended-upgrade:1237 -#, fuzzy, python-format -#| msgid "An error ocured: '%s'" -msgid "An error occurred: '%s'" -msgstr "Errore bat gertatu da: '%s'" - -#: ../unattended-upgrade:1239 ../unattended-upgrade:1241 -#, python-format -msgid "The URI '%s' failed to download, aborting" -msgstr "Huts '%s' URIa deskargatzerakoan, uzten" - -#: ../unattended-upgrade:1245 -#, python-format -msgid "Download finished, but file '%s' not there?!?" -msgstr "" - -#: ../unattended-upgrade:1261 ../unattended-upgrade:1265 -#, python-format -msgid "Package '%s' has conffile prompt and needs to be upgraded manually" -msgstr "" -"'%s' paketeak konfigurazio galderaren bat du eta eskuz bertsio-berritu behar " -"da" - -#: ../unattended-upgrade:1293 -#, python-format -msgid "package '%s' not upgraded" -msgstr "'%s' paketea ez da bertsio-berritu" - -#: ../unattended-upgrade:1311 -#, fuzzy -#| msgid "No packages found that can be upgraded unattended" -msgid "" -"No packages found that can be upgraded unattended and no pending auto-" -"removals" -msgstr "Ez da zaindugabe instalatu daitekeen paketerik aurkitu" - -#: ../unattended-upgrade:1337 -#, fuzzy, python-format -#| msgid "Packages that are upgraded: %s" -msgid "Packages that will be upgraded: %s" -msgstr "Bertsio-berritu diren paketeak: %s" - -#: ../unattended-upgrade:1406 -msgid "print debug messages" -msgstr "inprimatu arazpen mezuak" - -#: ../unattended-upgrade:1409 -#, fuzzy -#| msgid "print debug messages" -msgid "make apt/libapt print verbose debug messages" -msgstr "inprimatu arazpen mezuak" - -#: ../unattended-upgrade:1412 -#, fuzzy -#| msgid "print debug messages" -msgid "print info messages" -msgstr "inprimatu arazpen mezuak" - -#: ../unattended-upgrade:1415 -msgid "Simulation, download but do not install" -msgstr "" - -#: ../unattended-upgrade:1418 -msgid "Upgrade in minimal steps (and allow interrupting with SIGINT" -msgstr "" - -#: ../unattended-upgrade:1427 -msgid "You need to be root to run this application" -msgstr "Root izan behar zara aplikazioa hau exekutatu ahal izateko" - -#: ../unattended-upgrade-shutdown:72 -msgid "Unattended-upgrade in progress during shutdown, sleeping for 5s" -msgstr "" - -#: ../unattended-upgrade-shutdown:125 -#, fuzzy -msgid "Running unattended-upgrades in shutdown mode" -msgstr "" -"Zaindugabeko bertsio-berritze erantzuna: %s\n" -"\n" - -#: ../unattended-upgrade-shutdown:153 -#, python-format -msgid "Giving up on lockfile after %s delay" -msgstr "" - -#~ msgid "pm.GetArchives() failed" -#~ msgstr "pm.GetArchives()-ek huts egin du" diff --git a/package/po/fr.po b/package/po/fr.po deleted file mode 100644 index 8919ee0e587a125710c749005f632ad5110f1cfd..0000000000000000000000000000000000000000 --- a/package/po/fr.po +++ /dev/null @@ -1,284 +0,0 @@ -# Paquet unattended-upgrades -# Copyright (C) 2008 -# This file is distributed under the same license as the unattended-upgrades package. -# Michael Vogt <mvo@debian.org>, 2008. -# -msgid "" -msgstr "" -"Project-Id-Version: 0.35\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-02 12:27+0200\n" -"PO-Revision-Date: 2015-07-02 12:30+0200\n" -"Last-Translator: Alexandre Detiste <alexandre@detiste.be>\n" -"Language-Team: French <debian-l10n-french@lists.debian.org>\n" -"Language: fr\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../unattended-upgrade:162 -#, python-format -msgid "Progress: %s %% (%s)" -msgstr "Progression : %s %% (%s)" - -#: ../unattended-upgrade:418 ../unattended-upgrade:501 -#: ../unattended-upgrade-shutdown:161 -msgid "All upgrades installed" -msgstr "Toutes les mises à niveau ont été installées" - -#: ../unattended-upgrade:420 ../unattended-upgrade:493 -msgid "Installing the upgrades failed!" -msgstr "Échec de l'installation des mises à niveau" - -#: ../unattended-upgrade:421 ../unattended-upgrade:494 -#, python-format -msgid "error message: '%s'" -msgstr "Message d'erreur : %s" - -#: ../unattended-upgrade:422 ../unattended-upgrade:495 -#, python-format -msgid "dpkg returned a error! See '%s' for details" -msgstr "dpkg a renvoyé une erreur. Voir « %s » pour les détails" - -#: ../unattended-upgrade:795 -#, -msgid "" -"No '/usr/bin/mail' or '/usr/sbin/sendmail',can not send mail. You probably " -"want to install the 'mailx' package." -msgstr "" -"L'exécutable '/usr/bin/mail' ou '/usr/sbin/sendmail' est introuvable, " -" impossible d'envoyer un courrier électronique. Veuillez installer le " -"paquet « mailx »." - -#: ../unattended-upgrade:811 -#, python-format -msgid "[reboot required] unattended-upgrades result for '%s': %s" -msgstr "[Redémarrage requis] résultat de unattended-upgrades pour '%s': %s" - -#: ../unattended-upgrade:814 -#, python-format -msgid "unattended-upgrades result for '%s': '%s'" -msgstr "résultat de unattended-upgrades pour '%s' : '%s'" - -#: ../unattended-upgrade:816 -#, python-format -msgid "" -"Unattended upgrade returned: %s\n" -"\n" -msgstr "" -"La mise à niveau automatique a renvoyé : %s\n" -"\n" - -#: ../unattended-upgrade:819 -msgid "" -"Warning: A reboot is required to complete this upgrade.\n" -"\n" -msgstr "" -"Avertissement : un redémarrage est requis afin de compléter cette mise à " -"niveau.\n" - -#: ../unattended-upgrade:821 -#, -msgid "Packages that were upgraded:\n" -msgstr "Paquets mis à niveau:\n" - -#: ../unattended-upgrade:823 -#, -msgid "Packages that attempted to upgrade:\n" -msgstr "Essai de mise à niveau des paquets:\n" - -#: ../unattended-upgrade:827 -msgid "Packages with upgradable origin but kept back:\n" -msgstr "" -"Paquets susceptibles d'une mise à niveau mais maintenus dans leur état " -"actuel :\n" - -#: ../unattended-upgrade:832 -msgid "Package installation log:" -msgstr "Journal d'installation des paquets:" - -#: ../unattended-upgrade:835 -msgid "Unattended-upgrades log:\n" -msgstr "Journal de unattended-upgrades:\n" - -#: ../unattended-upgrade:855 -#, python-format -msgid "Writing dpkg log to '%s'" -msgstr "Écriture du journal de dpkg dans « %s »" - -#: ../unattended-upgrade:987 -#, python-format -msgid "Found %s, but not rebooting because %s is logged in." -msgid_plural "Found %s, but not rebooting because %s are logged in." -msgstr[0] "Trouvé %s, mais ne redémarre pas car %s est connecté." -msgstr[1] "Trouvé %s, mais ne redémarre pas car %s sont connectés." - -#: ../unattended-upgrade:1033 -#, python-format -msgid "package '%s' upgradable but fails to be marked for upgrade (%s)" -msgstr "" -"Le paquet « %s » peut être mis à niveau mais échoue à être marqué comme tel " -"(%s)" - -#: ../unattended-upgrade:1097 -#, python-format -msgid "Packages that are auto removed: '%s'" -msgstr "Suppression automatique des paquets: %s" - -#: ../unattended-upgrade:1103 -#, -msgid "Packages were successfully auto-removed" -msgstr "Ces packets ont été correctement supprimés" - -#: ../unattended-upgrade:1105 -#, -msgid "Auto-removing the packages failed!" -msgstr "Auto-remove de ces paquets a échoué!" - -#: ../unattended-upgrade:1106 -#, python-format -msgid "Error message: '%s'" -msgstr "Message d'erreur: %s" - -#: ../unattended-upgrade:1107 -#, python-format -msgid "dpkg returned an error! See '%s' for details" -msgstr "dpkg a renvoyé une erreur! Voir '%s' pour les détails" - -#: ../unattended-upgrade:1125 -#, python-format -msgid "Initial blacklisted packages: %s" -msgstr "Paquets initialement sur la liste noire: %s" - -#: ../unattended-upgrade:1130 -#, python-format -msgid "Initial whitelisted packages: %s" -msgstr "Paquets initialement sur la liste blanche: %s" - -#: ../unattended-upgrade:1133 -msgid "Starting unattended upgrades script" -msgstr "Démarrage du script de mise à niveau automatique" - -#: ../unattended-upgrade:1136 -#, python-format -msgid "Allowed origins are: %s" -msgstr "Les origines permises sont: %s" - -#: ../unattended-upgrade:1152 ../unattended-upgrade:1153 -msgid "Unclean dpkg state detected, trying to correct" -msgstr "détection d'un état de dpkg impropre, tentative de correction" - -#: ../unattended-upgrade:1164 -#, python-format -msgid "" -"dpkg --configure -a output:\n" -"%s" -msgstr "" -"sortie de « dpkg --configure -a »:\n" -"%s" - -#: ../unattended-upgrade:1173 -msgid "Lock could not be acquired (another package manager running?)" -msgstr "" -"Verrouillage impossible (y a-t-il un autre gestionnaire de paquets en cours " -"d'exécution ?)" - -#: ../unattended-upgrade:1175 -msgid "Cache lock can not be acquired, exiting" -msgstr "Le verrouillage du cache est impossible, abandon" - -#: ../unattended-upgrade:1182 ../unattended-upgrade:1183 -#: ../unattended-upgrade:1363 ../unattended-upgrade:1364 -msgid "Cache has broken packages, exiting" -msgstr "Le cache contient des paquets cassés, abandon" - -#: ../unattended-upgrade:1226 -#, python-format -msgid "GetArchives() failed: '%s'" -msgstr "Échec de GetArchives(): %s" - -#: ../unattended-upgrade:1236 ../unattended-upgrade:1237 -#, python-format -msgid "An error occurred: '%s'" -msgstr "Une erreur s'est produite: %s" - -#: ../unattended-upgrade:1239 ../unattended-upgrade:1241 -#, python-format -msgid "The URI '%s' failed to download, aborting" -msgstr "Échec du téléchargement à l'URI « %s », abandon" - -#: ../unattended-upgrade:1245 -#, python-format -msgid "Download finished, but file '%s' not there?!?" -msgstr "Téléchargement terminé mais le fichier « %s » est absent !" - -#: ../unattended-upgrade:1261 ../unattended-upgrade:1265 -#, python-format -msgid "Package '%s' has conffile prompt and needs to be upgraded manually" -msgstr "" -"Le paquet « %s » provoque un conflit de fichiers de configuration et " -"nécessite une mise à niveau manuelle" - -#: ../unattended-upgrade:1293 -#, python-format -msgid "package '%s' not upgraded" -msgstr "Le paquet « %s » n'a pas été mis à niveau" - -#: ../unattended-upgrade:1311 -#, -msgid "" -"No packages found that can be upgraded unattended and no pending auto-" -"removals" -msgstr "Aucun paquet à mettre à niveau automatiquement ni à " -" supprimer automatiquement" - -#: ../unattended-upgrade:1337 -#, python-format -msgid "Packages that will be upgraded: %s" -msgstr "Paquets mis à niveau: %s" - -#: ../unattended-upgrade:1406 -msgid "print debug messages" -msgstr "Afficher les messages de débogage" - -#: ../unattended-upgrade:1409 -#, -msgid "make apt/libapt print verbose debug messages" -msgstr "Afficher les messages de débogage de apt/libapt" - -#: ../unattended-upgrade:1412 -#, -msgid "print info messages" -msgstr "Afficher les messages d'information" - -#: ../unattended-upgrade:1415 -msgid "Simulation, download but do not install" -msgstr "Simulation, télécharge mais n'installe pas" - -#: ../unattended-upgrade:1418 -msgid "Upgrade in minimal steps (and allow interrupting with SIGINT" -msgstr "" -"Mise à niveau par étapes minimales (et autoriser l'interruption avec SIGINT)" - -#: ../unattended-upgrade:1427 -msgid "You need to be root to run this application" -msgstr "" -"Vous devez posséder les privilèges du superutilisateur pour exécuter cette " -"application" - -#: ../unattended-upgrade-shutdown:72 -msgid "Unattended-upgrade in progress during shutdown, sleeping for 5s" -msgstr "Unattended-upgrade en cours durant l'extinction, en pause pour 5 s" - -#: ../unattended-upgrade-shutdown:125 -#, -msgid "Running unattended-upgrades in shutdown mode" -msgstr "Exécuter unattended-upgrades lors de l'extinction" - -#: ../unattended-upgrade-shutdown:153 -#, python-format -msgid "Giving up on lockfile after %s delay" -msgstr "Renonciation sur un fichier verrou après un délai de %s." - -#~ msgid "Progress: %s %%: (%s)" -#~ msgstr "Progression : %s %% : (%s)" diff --git a/package/po/gl.po b/package/po/gl.po deleted file mode 100644 index 03b4246c67a3ee0d543391f8f9e940245977e421..0000000000000000000000000000000000000000 --- a/package/po/gl.po +++ /dev/null @@ -1,297 +0,0 @@ -# Galician translations for PACKAGE package. -# Copyright (C) 2012 THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Jorge Barreiro Gonzalez <yortx.barry@gmail.com>, 2012. -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-02 12:27+0200\n" -"PO-Revision-Date: 2012-06-23 12:55+0200\n" -"Last-Translator: Jorge Barreiro <yortx.barry@gmail.com>\n" -"Language-Team: Galician <proxecto@trasno.net>\n" -"Language: gl\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Lokalize 1.0\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" - -#: ../unattended-upgrade:162 -#, python-format -msgid "Progress: %s %% (%s)" -msgstr "Progreso: %s %% (%s)" - -#: ../unattended-upgrade:418 ../unattended-upgrade:501 -#: ../unattended-upgrade-shutdown:161 -msgid "All upgrades installed" -msgstr "Todas as actualizacións foron instaladas" - -#: ../unattended-upgrade:420 ../unattended-upgrade:493 -msgid "Installing the upgrades failed!" -msgstr "Produciuse un erro ao instalar as actualizacións." - -#: ../unattended-upgrade:421 ../unattended-upgrade:494 -#, python-format -msgid "error message: '%s'" -msgstr "mensaxe de erro: «%s»" - -#: ../unattended-upgrade:422 ../unattended-upgrade:495 -#, python-format -msgid "dpkg returned a error! See '%s' for details" -msgstr "«dpkg» devolveu un erro! Consulte «%s» para obter máis detalles." - -#: ../unattended-upgrade:795 -#, fuzzy -#| msgid "" -#| "No '/usr/bin/mail', can not send mail. You probably want to install the " -#| "'mailx' package." -msgid "" -"No '/usr/bin/mail' or '/usr/sbin/sendmail',can not send mail. You probably " -"want to install the 'mailx' package." -msgstr "" -"Non existe «/usr/bin/mail», non pode enviar correos. Probablemente queira " -"instalar o paquete «mailx»." - -#: ../unattended-upgrade:811 -#, fuzzy, python-format -#| msgid "[reboot required] unattended-upgrades result for '%s'" -msgid "[reboot required] unattended-upgrades result for '%s': %s" -msgstr "[precÃsase reiniciar] resultado da actualización desatendida para «%s»" - -#: ../unattended-upgrade:814 -#, fuzzy, python-format -#| msgid "unattended-upgrades result for '%s'" -msgid "unattended-upgrades result for '%s': '%s'" -msgstr "resultado da actualización desatendida para «%s»" - -#: ../unattended-upgrade:816 -#, python-format -msgid "" -"Unattended upgrade returned: %s\n" -"\n" -msgstr "" -"A actualización desatendida devolveu: %s\n" -"\n" - -#: ../unattended-upgrade:819 -msgid "" -"Warning: A reboot is required to complete this upgrade.\n" -"\n" -msgstr "" -"Aviso: PrecÃsase reiniciar para completar esta actualización.\n" -"\n" - -#: ../unattended-upgrade:821 -#, fuzzy -#| msgid "Packages that are upgraded:\n" -msgid "Packages that were upgraded:\n" -msgstr "Paquetes que se actualizan:\n" - -#: ../unattended-upgrade:823 -#, fuzzy -#| msgid "Packages that are upgraded:\n" -msgid "Packages that attempted to upgrade:\n" -msgstr "Paquetes que se actualizan:\n" - -#: ../unattended-upgrade:827 -msgid "Packages with upgradable origin but kept back:\n" -msgstr "Paquetes co un orixe actualizábel, pero que se manteñen:\n" - -#: ../unattended-upgrade:832 -msgid "Package installation log:" -msgstr "Rexistro de instalación de paquetes:" - -#: ../unattended-upgrade:835 -msgid "Unattended-upgrades log:\n" -msgstr "Rexistro de «unattended-upgrades»:\n" - -#: ../unattended-upgrade:855 -#, python-format -msgid "Writing dpkg log to '%s'" -msgstr "Escribindo o rexistro «dpkg» a «%s»" - -#: ../unattended-upgrade:987 -#, python-format -msgid "Found %s, but not rebooting because %s is logged in." -msgid_plural "Found %s, but not rebooting because %s are logged in." -msgstr[0] "" -msgstr[1] "" - -#: ../unattended-upgrade:1033 -#, python-format -msgid "package '%s' upgradable but fails to be marked for upgrade (%s)" -msgstr "" -"O paquete «%s» é actualizábel, pero non foi posÃbel marcalo para actualizar " -"(%s)" - -#: ../unattended-upgrade:1097 -#, python-format -msgid "Packages that are auto removed: '%s'" -msgstr "Paquetes que se eliminan automaticamente: «%s»" - -#: ../unattended-upgrade:1103 -#, fuzzy -#| msgid "Packages that are auto removed: '%s'" -msgid "Packages were successfully auto-removed" -msgstr "Paquetes que se eliminan automaticamente: «%s»" - -#: ../unattended-upgrade:1105 -#, fuzzy -#| msgid "Installing the upgrades failed!" -msgid "Auto-removing the packages failed!" -msgstr "Produciuse un erro ao instalar as actualizacións." - -#: ../unattended-upgrade:1106 -#, fuzzy, python-format -#| msgid "error message: '%s'" -msgid "Error message: '%s'" -msgstr "mensaxe de erro: «%s»" - -#: ../unattended-upgrade:1107 -#, fuzzy, python-format -#| msgid "dpkg returned a error! See '%s' for details" -msgid "dpkg returned an error! See '%s' for details" -msgstr "«dpkg» devolveu un erro! Consulte «%s» para obter máis detalles." - -#: ../unattended-upgrade:1125 -#, python-format -msgid "Initial blacklisted packages: %s" -msgstr "Lista negra de paquetes inicial: %s" - -#: ../unattended-upgrade:1130 -#, fuzzy, python-format -#| msgid "Initial blacklisted packages: %s" -msgid "Initial whitelisted packages: %s" -msgstr "Lista negra de paquetes inicial: %s" - -#: ../unattended-upgrade:1133 -msgid "Starting unattended upgrades script" -msgstr "Estase a comezar o script de actualizacións desatendidas" - -#: ../unattended-upgrade:1136 -#, python-format -msgid "Allowed origins are: %s" -msgstr "Os orixes permitidos son: %s" - -#: ../unattended-upgrade:1152 ../unattended-upgrade:1153 -msgid "Unclean dpkg state detected, trying to correct" -msgstr "Detectouse un estado «dpkg» sucio, estase a tratar de corrixir" - -#: ../unattended-upgrade:1164 -#, python-format -msgid "" -"dpkg --configure -a output:\n" -"%s" -msgstr "" -"SaÃda de «dpkg --configure -a»:\n" -"%s" - -#: ../unattended-upgrade:1173 -msgid "Lock could not be acquired (another package manager running?)" -msgstr "Non se puido bloquear (estase a executar outro xestor de paquetes?)" - -#: ../unattended-upgrade:1175 -msgid "Cache lock can not be acquired, exiting" -msgstr "Non se puido bloquear a caché, sáese" - -#: ../unattended-upgrade:1182 ../unattended-upgrade:1183 -#: ../unattended-upgrade:1363 ../unattended-upgrade:1364 -msgid "Cache has broken packages, exiting" -msgstr "A caché contén paquetes rotos, sáese" - -#: ../unattended-upgrade:1226 -#, python-format -msgid "GetArchives() failed: '%s'" -msgstr "Produciuse un erro en GetArchives(): «%s»" - -#: ../unattended-upgrade:1236 ../unattended-upgrade:1237 -#, fuzzy, python-format -#| msgid "An error ocured: '%s'" -msgid "An error occurred: '%s'" -msgstr "Produciuse un erro: «%s»" - -#: ../unattended-upgrade:1239 ../unattended-upgrade:1241 -#, python-format -msgid "The URI '%s' failed to download, aborting" -msgstr "Produciuse un erro ao descargar a URI «%s», interrómpese" - -#: ../unattended-upgrade:1245 -#, python-format -msgid "Download finished, but file '%s' not there?!?" -msgstr "A descarga finalizou, pero o ficheiro «%s» non está aÃ." - -#: ../unattended-upgrade:1261 ../unattended-upgrade:1265 -#, python-format -msgid "Package '%s' has conffile prompt and needs to be upgraded manually" -msgstr "" -"O paquete «%s» ten unha petición acerca dos ficheiros de configuración e " -"precisa ser actualizado manualmente" - -#: ../unattended-upgrade:1293 -#, python-format -msgid "package '%s' not upgraded" -msgstr "O paquete «%s» non foi actualizado" - -#: ../unattended-upgrade:1311 -#, fuzzy -#| msgid "No packages found that can be upgraded unattended" -msgid "" -"No packages found that can be upgraded unattended and no pending auto-" -"removals" -msgstr "Non se atoparon paquetes que se poidan actualizar de forma desatendida" - -#: ../unattended-upgrade:1337 -#, fuzzy, python-format -#| msgid "Packages that are upgraded: %s" -msgid "Packages that will be upgraded: %s" -msgstr "Paquetes que se actualizan: %s" - -#: ../unattended-upgrade:1406 -msgid "print debug messages" -msgstr "escribir as menxases de depuración" - -#: ../unattended-upgrade:1409 -#, fuzzy -#| msgid "print debug messages" -msgid "make apt/libapt print verbose debug messages" -msgstr "escribir as menxases de depuración" - -#: ../unattended-upgrade:1412 -#, fuzzy -#| msgid "print debug messages" -msgid "print info messages" -msgstr "escribir as menxases de depuración" - -#: ../unattended-upgrade:1415 -msgid "Simulation, download but do not install" -msgstr "Simulación, descargar pero non instalar" - -#: ../unattended-upgrade:1418 -msgid "Upgrade in minimal steps (and allow interrupting with SIGINT" -msgstr "Actualización en pasos mÃnimos (e permitir interromper con SIGINT)" - -#: ../unattended-upgrade:1427 -msgid "You need to be root to run this application" -msgstr "Precisa reiniciar para executar este aplicativo" - -#: ../unattended-upgrade-shutdown:72 -msgid "Unattended-upgrade in progress during shutdown, sleeping for 5s" -msgstr "" -"A actualización desatendida está en progreso durante o apagado, durmindo " -"durante 5s" - -#: ../unattended-upgrade-shutdown:125 -#, fuzzy -#| msgid "unattended-upgrades result for '%s'" -msgid "Running unattended-upgrades in shutdown mode" -msgstr "resultado da actualización desatendida para «%s»" - -#: ../unattended-upgrade-shutdown:153 -#, python-format -msgid "Giving up on lockfile after %s delay" -msgstr "Renunciase ao ficheiro de bloqueo tras un retardo de %s" - -#~ msgid "Progress: %s %%: (%s)" -#~ msgstr "Progreso: %s %%: (%s)" diff --git a/package/po/ja.po b/package/po/ja.po deleted file mode 100644 index 2ccc4368c6551a9761517fae784726692c2bf093..0000000000000000000000000000000000000000 --- a/package/po/ja.po +++ /dev/null @@ -1,286 +0,0 @@ -# Copyright (C) 2008 Michael Vogt <michael.vogt@ubuntu.com> -# This file is distributed under the same license as the unattended-upgrades package. -# Hideki Yamane (Debian-JP) <henrich@debian.or.jp>, 2008. -# -msgid "" -msgstr "" -"Project-Id-Version: unattended-upgrades 0.36debian1\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-02 12:27+0200\n" -"PO-Revision-Date: 2008-12-21 22:32+0900\n" -"Last-Translator: Hideki Yamane (Debian-JP) <henrich@debian.or.jp>\n" -"Language-Team: Japanese <debian-japanese@lists.debian.org>\n" -"Language: ja\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../unattended-upgrade:162 -#, python-format -msgid "Progress: %s %% (%s)" -msgstr "" - -#: ../unattended-upgrade:418 ../unattended-upgrade:501 -#: ../unattended-upgrade-shutdown:161 -msgid "All upgrades installed" -msgstr "å…¨ã¦ã®ã‚¢ãƒƒãƒ—グレードãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¾ã—ãŸ" - -#: ../unattended-upgrade:420 ../unattended-upgrade:493 -msgid "Installing the upgrades failed!" -msgstr "アップグレードã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãŒå¤±æ•—ã—ã¾ã—ãŸ!" - -#: ../unattended-upgrade:421 ../unattended-upgrade:494 -#, python-format -msgid "error message: '%s'" -msgstr "エラーメッセージ: '%s'" - -#: ../unattended-upgrade:422 ../unattended-upgrade:495 -#, python-format -msgid "dpkg returned a error! See '%s' for details" -msgstr "dpkg ãŒã‚¨ãƒ©ãƒ¼ã‚’è¿”ã—ã¾ã—ãŸ! 詳細㯠'%s' ã‚’å‚ç…§ã—ã¦ãã ã•ã„" - -#: ../unattended-upgrade:795 -msgid "" -"No '/usr/bin/mail' or '/usr/sbin/sendmail',can not send mail. You probably " -"want to install the 'mailx' package." -msgstr "" - -#: ../unattended-upgrade:811 -#, fuzzy, python-format -msgid "[reboot required] unattended-upgrades result for '%s': %s" -msgstr "" -"自動アップグレードã¯ä»¥ä¸‹ã‚’è¿”ã—ã¾ã—ãŸ: %s\n" -"\n" - -#: ../unattended-upgrade:814 -#, fuzzy, python-format -msgid "unattended-upgrades result for '%s': '%s'" -msgstr "" -"自動アップグレードã¯ä»¥ä¸‹ã‚’è¿”ã—ã¾ã—ãŸ: %s\n" -"\n" - -#: ../unattended-upgrade:816 -#, python-format -msgid "" -"Unattended upgrade returned: %s\n" -"\n" -msgstr "" -"自動アップグレードã¯ä»¥ä¸‹ã‚’è¿”ã—ã¾ã—ãŸ: %s\n" -"\n" - -#: ../unattended-upgrade:819 -msgid "" -"Warning: A reboot is required to complete this upgrade.\n" -"\n" -msgstr "" - -#: ../unattended-upgrade:821 -#, fuzzy -msgid "Packages that were upgraded:\n" -msgstr "アップグレードã•ã‚ŒãŸãƒ‘ッケージ: %s" - -#: ../unattended-upgrade:823 -#, fuzzy -msgid "Packages that attempted to upgrade:\n" -msgstr "アップグレードã•ã‚ŒãŸãƒ‘ッケージ: %s" - -#: ../unattended-upgrade:827 -msgid "Packages with upgradable origin but kept back:\n" -msgstr "" - -#: ../unattended-upgrade:832 -msgid "Package installation log:" -msgstr "" - -#: ../unattended-upgrade:835 -#, fuzzy -msgid "Unattended-upgrades log:\n" -msgstr "" -"自動アップグレードã¯ä»¥ä¸‹ã‚’è¿”ã—ã¾ã—ãŸ: %s\n" -"\n" - -#: ../unattended-upgrade:855 -#, python-format -msgid "Writing dpkg log to '%s'" -msgstr "dpkg ã®ãƒã‚°ã‚’ '%s' ã«æ›¸ãè¾¼ã¿ä¸" - -#: ../unattended-upgrade:987 -#, python-format -msgid "Found %s, but not rebooting because %s is logged in." -msgid_plural "Found %s, but not rebooting because %s are logged in." -msgstr[0] "" -msgstr[1] "" - -#: ../unattended-upgrade:1033 -#, python-format -msgid "package '%s' upgradable but fails to be marked for upgrade (%s)" -msgstr "" - -#: ../unattended-upgrade:1097 -#, fuzzy, python-format -#| msgid "Packages that are upgraded: %s" -msgid "Packages that are auto removed: '%s'" -msgstr "アップグレードã•ã‚ŒãŸãƒ‘ッケージ: %s" - -#: ../unattended-upgrade:1103 -#, fuzzy -#| msgid "Packages that are upgraded: %s" -msgid "Packages were successfully auto-removed" -msgstr "アップグレードã•ã‚ŒãŸãƒ‘ッケージ: %s" - -#: ../unattended-upgrade:1105 -#, fuzzy -#| msgid "Installing the upgrades failed!" -msgid "Auto-removing the packages failed!" -msgstr "アップグレードã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãŒå¤±æ•—ã—ã¾ã—ãŸ!" - -#: ../unattended-upgrade:1106 -#, fuzzy, python-format -#| msgid "error message: '%s'" -msgid "Error message: '%s'" -msgstr "エラーメッセージ: '%s'" - -#: ../unattended-upgrade:1107 -#, fuzzy, python-format -#| msgid "dpkg returned a error! See '%s' for details" -msgid "dpkg returned an error! See '%s' for details" -msgstr "dpkg ãŒã‚¨ãƒ©ãƒ¼ã‚’è¿”ã—ã¾ã—ãŸ! 詳細㯠'%s' ã‚’å‚ç…§ã—ã¦ãã ã•ã„" - -#: ../unattended-upgrade:1125 -#, python-format -msgid "Initial blacklisted packages: %s" -msgstr "åˆæœŸçŠ¶æ…‹ã§ãƒ–ラックリストã«ã‚るパッケージ: %s" - -#: ../unattended-upgrade:1130 -#, fuzzy, python-format -#| msgid "Initial blacklisted packages: %s" -msgid "Initial whitelisted packages: %s" -msgstr "åˆæœŸçŠ¶æ…‹ã§ãƒ–ラックリストã«ã‚るパッケージ: %s" - -#: ../unattended-upgrade:1133 -msgid "Starting unattended upgrades script" -msgstr "自動アップグレードスクリプトを開始" - -#: ../unattended-upgrade:1136 -#, python-format -msgid "Allowed origins are: %s" -msgstr "許å¯ã•ã‚Œã¦ã„るパッケージ導入元: %s" - -#: ../unattended-upgrade:1152 ../unattended-upgrade:1153 -msgid "Unclean dpkg state detected, trying to correct" -msgstr "" - -#: ../unattended-upgrade:1164 -#, python-format -msgid "" -"dpkg --configure -a output:\n" -"%s" -msgstr "" - -#: ../unattended-upgrade:1173 -msgid "Lock could not be acquired (another package manager running?)" -msgstr "" - -#: ../unattended-upgrade:1175 -#, fuzzy -#| msgid "Cache has broken packages, exiting" -msgid "Cache lock can not be acquired, exiting" -msgstr "ã‚ャッシュã«å£Šã‚ŒãŸãƒ‘ッケージãŒã‚ã‚‹ã®ã§çµ‚了ã—ã¾ã™" - -#: ../unattended-upgrade:1182 ../unattended-upgrade:1183 -#: ../unattended-upgrade:1363 ../unattended-upgrade:1364 -msgid "Cache has broken packages, exiting" -msgstr "ã‚ャッシュã«å£Šã‚ŒãŸãƒ‘ッケージãŒã‚ã‚‹ã®ã§çµ‚了ã—ã¾ã™" - -#: ../unattended-upgrade:1226 -#, python-format -msgid "GetArchives() failed: '%s'" -msgstr "GetArchives() ãŒå¤±æ•—ã—ã¾ã—ãŸ: '%s'" - -#: ../unattended-upgrade:1236 ../unattended-upgrade:1237 -#, fuzzy, python-format -#| msgid "An error ocured: '%s'" -msgid "An error occurred: '%s'" -msgstr "エラー発生: '%s'" - -#: ../unattended-upgrade:1239 ../unattended-upgrade:1241 -#, python-format -msgid "The URI '%s' failed to download, aborting" -msgstr "URI '%s' ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰å‡ºæ¥ãªã„ã®ã§ä¸æ–ã—ã¾ã™" - -#: ../unattended-upgrade:1245 -#, python-format -msgid "Download finished, but file '%s' not there?!?" -msgstr "" - -#: ../unattended-upgrade:1261 ../unattended-upgrade:1265 -#, python-format -msgid "Package '%s' has conffile prompt and needs to be upgraded manually" -msgstr "" -"パッケージ '%s' ã«ã¯æ‰‹å‹•ã§ç¢ºèªã¨ã‚¢ãƒƒãƒ—グレードãŒå¿…è¦ãªè¨å®šãƒ•ã‚¡ã‚¤ãƒ«ãŒã‚ã‚Šã¾ã™" - -#: ../unattended-upgrade:1293 -#, python-format -msgid "package '%s' not upgraded" -msgstr "パッケージ '%s' ã¯ã‚¢ãƒƒãƒ—グレードã•ã‚Œã¾ã›ã‚“ã§ã—ãŸ" - -#: ../unattended-upgrade:1311 -#, fuzzy -#| msgid "No packages found that can be upgraded unattended" -msgid "" -"No packages found that can be upgraded unattended and no pending auto-" -"removals" -msgstr "æ›´æ–°ã•ã‚Œã¦ã„ãªã„パッケージã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" - -#: ../unattended-upgrade:1337 -#, fuzzy, python-format -#| msgid "Packages that are upgraded: %s" -msgid "Packages that will be upgraded: %s" -msgstr "アップグレードã•ã‚ŒãŸãƒ‘ッケージ: %s" - -#: ../unattended-upgrade:1406 -msgid "print debug messages" -msgstr "デãƒãƒƒã‚°ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’出力" - -#: ../unattended-upgrade:1409 -#, fuzzy -#| msgid "print debug messages" -msgid "make apt/libapt print verbose debug messages" -msgstr "デãƒãƒƒã‚°ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’出力" - -#: ../unattended-upgrade:1412 -#, fuzzy -#| msgid "print debug messages" -msgid "print info messages" -msgstr "デãƒãƒƒã‚°ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’出力" - -#: ../unattended-upgrade:1415 -msgid "Simulation, download but do not install" -msgstr "" - -#: ../unattended-upgrade:1418 -msgid "Upgrade in minimal steps (and allow interrupting with SIGINT" -msgstr "" - -#: ../unattended-upgrade:1427 -msgid "You need to be root to run this application" -msgstr "ã“ã®ã‚¢ãƒ—リケーションã¯ç®¡ç†è€…権é™ã§å®Ÿè¡Œã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™" - -#: ../unattended-upgrade-shutdown:72 -msgid "Unattended-upgrade in progress during shutdown, sleeping for 5s" -msgstr "" - -#: ../unattended-upgrade-shutdown:125 -#, fuzzy -msgid "Running unattended-upgrades in shutdown mode" -msgstr "" -"自動アップグレードã¯ä»¥ä¸‹ã‚’è¿”ã—ã¾ã—ãŸ: %s\n" -"\n" - -#: ../unattended-upgrade-shutdown:153 -#, python-format -msgid "Giving up on lockfile after %s delay" -msgstr "" - -#~ msgid "pm.GetArchives() failed" -#~ msgstr "pm.GetArchives() ãŒå¤±æ•—ã—ã¾ã—ãŸ" diff --git a/package/po/pt.po b/package/po/pt.po deleted file mode 100644 index c0c16b475e9d5c8e070e56786e9ac45ab5e1f322..0000000000000000000000000000000000000000 --- a/package/po/pt.po +++ /dev/null @@ -1,293 +0,0 @@ -# unattended-upgrades portuguese debconf messages -# Copyright (C) 2012 THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the unattended-upgrades package. -# Pedro Ribeiro <p.m42.ribeiro@gmail.com>, 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: unattended-upgrades\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-02 12:27+0200\n" -"PO-Revision-Date: 2012-06-24 09:04+0100\n" -"Last-Translator: Pedro Ribeiro <p.m42.ribeiro@gmail.com>\n" -"Language-Team: Portuguese <traduz@debianpt.org>\n" -"Language: pt\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../unattended-upgrade:162 -#, python-format -msgid "Progress: %s %% (%s)" -msgstr "Progresso: %s %% (%s)" - -#: ../unattended-upgrade:418 ../unattended-upgrade:501 -#: ../unattended-upgrade-shutdown:161 -msgid "All upgrades installed" -msgstr "Todas as atualizações instaladas" - -#: ../unattended-upgrade:420 ../unattended-upgrade:493 -msgid "Installing the upgrades failed!" -msgstr "Falhou a instalação das atualizações!" - -#: ../unattended-upgrade:421 ../unattended-upgrade:494 -#, python-format -msgid "error message: '%s'" -msgstr "mensagem de erro: '%s'" - -#: ../unattended-upgrade:422 ../unattended-upgrade:495 -#, python-format -msgid "dpkg returned a error! See '%s' for details" -msgstr "dpkg retornou um erro! Veja '%s' para mais informação" - -#: ../unattended-upgrade:795 -#, fuzzy -#| msgid "" -#| "No '/usr/bin/mail', can not send mail. You probably want to install the " -#| "'mailx' package." -msgid "" -"No '/usr/bin/mail' or '/usr/sbin/sendmail',can not send mail. You probably " -"want to install the 'mailx' package." -msgstr "" -"Não existe '/usr/bin/mail', impossÃvel enviar mail. Provavelmente quer " -"instalar o pacote 'mailx'." - -#: ../unattended-upgrade:811 -#, fuzzy, python-format -#| msgid "[reboot required] unattended-upgrades result for '%s'" -msgid "[reboot required] unattended-upgrades result for '%s': %s" -msgstr "[reinÃcio necessário] resultado do unattended-upgrades para '%s'" - -#: ../unattended-upgrade:814 -#, fuzzy, python-format -#| msgid "unattended-upgrades result for '%s'" -msgid "unattended-upgrades result for '%s': '%s'" -msgstr "resultado do unattended-upgrades para '%s'" - -#: ../unattended-upgrade:816 -#, python-format -msgid "" -"Unattended upgrade returned: %s\n" -"\n" -msgstr "" -"Actualização automática retornou: %s\n" -"\n" - -#: ../unattended-upgrade:819 -msgid "" -"Warning: A reboot is required to complete this upgrade.\n" -"\n" -msgstr "" -"Atenção: É necessário reiniciar o computador para completar esta " -"atualização.\n" -"\n" - -#: ../unattended-upgrade:821 -#, fuzzy -#| msgid "Packages that are upgraded:\n" -msgid "Packages that were upgraded:\n" -msgstr "Pacotes atualizados:\n" - -#: ../unattended-upgrade:823 -#, fuzzy -#| msgid "Packages that are upgraded:\n" -msgid "Packages that attempted to upgrade:\n" -msgstr "Pacotes atualizados:\n" - -#: ../unattended-upgrade:827 -msgid "Packages with upgradable origin but kept back:\n" -msgstr "Pacotes com possibilidade de actualização mas mantidos:\n" - -#: ../unattended-upgrade:832 -msgid "Package installation log:" -msgstr "Registo de instalação de pacotes:" - -#: ../unattended-upgrade:835 -msgid "Unattended-upgrades log:\n" -msgstr "Registo do Unattended-upgrades:\n" - -#: ../unattended-upgrade:855 -#, python-format -msgid "Writing dpkg log to '%s'" -msgstr "A escrever registo do dpkg para '%s'" - -#: ../unattended-upgrade:987 -#, python-format -msgid "Found %s, but not rebooting because %s is logged in." -msgid_plural "Found %s, but not rebooting because %s are logged in." -msgstr[0] "" -msgstr[1] "" - -#: ../unattended-upgrade:1033 -#, python-format -msgid "package '%s' upgradable but fails to be marked for upgrade (%s)" -msgstr "o pacote '%s' é atualizável mas não está marcado para atualização (%s)" - -#: ../unattended-upgrade:1097 -#, python-format -msgid "Packages that are auto removed: '%s'" -msgstr "Pacotes automaticamente removidos: '%s'" - -#: ../unattended-upgrade:1103 -#, fuzzy -#| msgid "Packages that are auto removed: '%s'" -msgid "Packages were successfully auto-removed" -msgstr "Pacotes automaticamente removidos: '%s'" - -#: ../unattended-upgrade:1105 -#, fuzzy -#| msgid "Installing the upgrades failed!" -msgid "Auto-removing the packages failed!" -msgstr "Falhou a instalação das atualizações!" - -#: ../unattended-upgrade:1106 -#, fuzzy, python-format -#| msgid "error message: '%s'" -msgid "Error message: '%s'" -msgstr "mensagem de erro: '%s'" - -#: ../unattended-upgrade:1107 -#, fuzzy, python-format -#| msgid "dpkg returned a error! See '%s' for details" -msgid "dpkg returned an error! See '%s' for details" -msgstr "dpkg retornou um erro! Veja '%s' para mais informação" - -#: ../unattended-upgrade:1125 -#, python-format -msgid "Initial blacklisted packages: %s" -msgstr "Lista negra inicial de pacotes: %s" - -#: ../unattended-upgrade:1130 -#, fuzzy, python-format -#| msgid "Initial blacklisted packages: %s" -msgid "Initial whitelisted packages: %s" -msgstr "Lista negra inicial de pacotes: %s" - -#: ../unattended-upgrade:1133 -msgid "Starting unattended upgrades script" -msgstr "A iniciar o script de atualização automática" - -#: ../unattended-upgrade:1136 -#, python-format -msgid "Allowed origins are: %s" -msgstr "Origens permitidas: %s" - -#: ../unattended-upgrade:1152 ../unattended-upgrade:1153 -msgid "Unclean dpkg state detected, trying to correct" -msgstr "Detetado estado \"unclean\" de dpkg, a tentar correção" - -#: ../unattended-upgrade:1164 -#, python-format -msgid "" -"dpkg --configure -a output:\n" -"%s" -msgstr "" -"dpkg --configure -a output:\n" -"%s" - -#: ../unattended-upgrade:1173 -msgid "Lock could not be acquired (another package manager running?)" -msgstr "Não foi possÃvel bloquear (outro gestor de pacotes ativo?)" - -#: ../unattended-upgrade:1175 -msgid "Cache lock can not be acquired, exiting" -msgstr "Não foi possÃvel bloquear cache, a sair" - -#: ../unattended-upgrade:1182 ../unattended-upgrade:1183 -#: ../unattended-upgrade:1363 ../unattended-upgrade:1364 -msgid "Cache has broken packages, exiting" -msgstr "A cache tem pacotes corrompidos, a sair" - -#: ../unattended-upgrade:1226 -#, python-format -msgid "GetArchives() failed: '%s'" -msgstr "Falhou GetArchives(): '%s'" - -#: ../unattended-upgrade:1236 ../unattended-upgrade:1237 -#, fuzzy, python-format -#| msgid "An error ocured: '%s'" -msgid "An error occurred: '%s'" -msgstr "Ocorreu um erro: '%s'" - -#: ../unattended-upgrade:1239 ../unattended-upgrade:1241 -#, python-format -msgid "The URI '%s' failed to download, aborting" -msgstr "Falhou o download do URI '%s', a terminar" - -#: ../unattended-upgrade:1245 -#, python-format -msgid "Download finished, but file '%s' not there?!?" -msgstr "Acabou o download, mas o ficheiro '%s' não existe?!?" - -#: ../unattended-upgrade:1261 ../unattended-upgrade:1265 -#, python-format -msgid "Package '%s' has conffile prompt and needs to be upgraded manually" -msgstr "" -"O pacote '%s' tem uma questão de ficheiro de configuração e necessita de ser " -"atualizado manualmente" - -#: ../unattended-upgrade:1293 -#, python-format -msgid "package '%s' not upgraded" -msgstr "o pacote '%s' não foi atualizado" - -#: ../unattended-upgrade:1311 -#, fuzzy -#| msgid "No packages found that can be upgraded unattended" -msgid "" -"No packages found that can be upgraded unattended and no pending auto-" -"removals" -msgstr "" -"Não foram encontrados pacotes com possibilidade de atualização automatica" - -#: ../unattended-upgrade:1337 -#, fuzzy, python-format -#| msgid "Packages that are upgraded: %s" -msgid "Packages that will be upgraded: %s" -msgstr "Pacotes atualizados: %s" - -#: ../unattended-upgrade:1406 -msgid "print debug messages" -msgstr "mostrar mensagens de debug" - -#: ../unattended-upgrade:1409 -#, fuzzy -#| msgid "print debug messages" -msgid "make apt/libapt print verbose debug messages" -msgstr "mostrar mensagens de debug" - -#: ../unattended-upgrade:1412 -#, fuzzy -#| msgid "print debug messages" -msgid "print info messages" -msgstr "mostrar mensagens de debug" - -#: ../unattended-upgrade:1415 -msgid "Simulation, download but do not install" -msgstr "Simulação, fazer o download mas não instalar" - -#: ../unattended-upgrade:1418 -msgid "Upgrade in minimal steps (and allow interrupting with SIGINT" -msgstr "Atualizar em pequenos passos (e permitir interrupções com o SIGINT" - -#: ../unattended-upgrade:1427 -msgid "You need to be root to run this application" -msgstr "Necessita de acesso de root para executar esta aplicação" - -#: ../unattended-upgrade-shutdown:72 -msgid "Unattended-upgrade in progress during shutdown, sleeping for 5s" -msgstr "Unattended-upgrade em progresso durante o fecho, a dormir por 5s" - -#: ../unattended-upgrade-shutdown:125 -#, fuzzy -#| msgid "unattended-upgrades result for '%s'" -msgid "Running unattended-upgrades in shutdown mode" -msgstr "resultado do unattended-upgrades para '%s'" - -#: ../unattended-upgrade-shutdown:153 -#, python-format -msgid "Giving up on lockfile after %s delay" -msgstr "A desistir do ficheiro de lock após um atraso de %s" - -#~ msgid "Progress: %s %%: (%s)" -#~ msgstr "Progresso: %s %%: (%s)" diff --git a/package/po/pt_BR.po b/package/po/pt_BR.po deleted file mode 100644 index 8278679bb08efeee3f466f60c49b7a6dac87d712..0000000000000000000000000000000000000000 --- a/package/po/pt_BR.po +++ /dev/null @@ -1,299 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: unattended-upgrades-0.61\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-02 12:27+0200\n" -"PO-Revision-Date: 2012-06-14 08:25-0300\n" -"Last-Translator: Sérgio Cipolla <secipolla@gmail.com>\n" -"Language-Team: \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Poedit-Language: Portuguese\n" -"X-Poedit-Country: BRAZIL\n" - -#: ../unattended-upgrade:162 -#, python-format -msgid "Progress: %s %% (%s)" -msgstr "Progresso: %s %% (%s)" - -#: ../unattended-upgrade:418 ../unattended-upgrade:501 -#: ../unattended-upgrade-shutdown:161 -msgid "All upgrades installed" -msgstr "Todas as atualizações instaladas" - -#: ../unattended-upgrade:420 ../unattended-upgrade:493 -msgid "Installing the upgrades failed!" -msgstr "A instalação das atualizações falhou!" - -#: ../unattended-upgrade:421 ../unattended-upgrade:494 -#, python-format -msgid "error message: '%s'" -msgstr "mensagem de erro: '%s'" - -#: ../unattended-upgrade:422 ../unattended-upgrade:495 -#, python-format -msgid "dpkg returned a error! See '%s' for details" -msgstr "O dpkg retornou um erro! Veja '%s' para mais detalhes" - -#: ../unattended-upgrade:795 -#, fuzzy -#| msgid "" -#| "No '/usr/bin/mail', can not send mail. You probably want to install the " -#| "'mailx' package." -msgid "" -"No '/usr/bin/mail' or '/usr/sbin/sendmail',can not send mail. You probably " -"want to install the 'mailx' package." -msgstr "" -"'/usr/bin/mail' não encontrado. Incapaz de enviar email. Você provavelmente " -"gostaria de instalar o pacote 'mailx'." - -#: ../unattended-upgrade:811 -#, fuzzy, python-format -#| msgid "[reboot required] unattended-upgrades result for '%s'" -msgid "[reboot required] unattended-upgrades result for '%s': %s" -msgstr "" -"[É necessário reiniciar o computador] Resultado da atualização " -"desacompanhada para '%s'" - -#: ../unattended-upgrade:814 -#, fuzzy, python-format -#| msgid "unattended-upgrades result for '%s'" -msgid "unattended-upgrades result for '%s': '%s'" -msgstr "Resultado da atualização desacompanhada para '%s'" - -#: ../unattended-upgrade:816 -#, python-format -msgid "" -"Unattended upgrade returned: %s\n" -"\n" -msgstr "" -"A atualização desacompanhada retornou: %s\n" -"\n" - -#: ../unattended-upgrade:819 -msgid "" -"Warning: A reboot is required to complete this upgrade.\n" -"\n" -msgstr "" -"Atenção: é necessário reiniciar o computador para completar esta " -"atualização.\n" -"\n" - -#: ../unattended-upgrade:821 -#, fuzzy -#| msgid "Packages that are upgraded:\n" -msgid "Packages that were upgraded:\n" -msgstr "Pacotes atualizados:\n" - -#: ../unattended-upgrade:823 -#, fuzzy -#| msgid "Packages that are upgraded:\n" -msgid "Packages that attempted to upgrade:\n" -msgstr "Pacotes atualizados:\n" - -#: ../unattended-upgrade:827 -msgid "Packages with upgradable origin but kept back:\n" -msgstr "Pacotes atualizáveis na origem mas mantidos na versão atual:\n" - -#: ../unattended-upgrade:832 -msgid "Package installation log:" -msgstr "Relatório de instalação de pacotes:" - -#: ../unattended-upgrade:835 -msgid "Unattended-upgrades log:\n" -msgstr "Relatório da atualização desacompanhada:\n" - -#: ../unattended-upgrade:855 -#, python-format -msgid "Writing dpkg log to '%s'" -msgstr "Escrevendo o relatório do dpkg em '%s'" - -#: ../unattended-upgrade:987 -#, python-format -msgid "Found %s, but not rebooting because %s is logged in." -msgid_plural "Found %s, but not rebooting because %s are logged in." -msgstr[0] "" -msgstr[1] "" - -#: ../unattended-upgrade:1033 -#, python-format -msgid "package '%s' upgradable but fails to be marked for upgrade (%s)" -msgstr "" -"o pacote '%s' é atualizável mas não é possÃvel marcá-lo para atualização (%s)" - -#: ../unattended-upgrade:1097 -#, python-format -msgid "Packages that are auto removed: '%s'" -msgstr "Pacotes autorremovidos: '%s'" - -#: ../unattended-upgrade:1103 -#, fuzzy -#| msgid "Packages that are auto removed: '%s'" -msgid "Packages were successfully auto-removed" -msgstr "Pacotes autorremovidos: '%s'" - -#: ../unattended-upgrade:1105 -#, fuzzy -#| msgid "Installing the upgrades failed!" -msgid "Auto-removing the packages failed!" -msgstr "A instalação das atualizações falhou!" - -#: ../unattended-upgrade:1106 -#, fuzzy, python-format -#| msgid "error message: '%s'" -msgid "Error message: '%s'" -msgstr "mensagem de erro: '%s'" - -#: ../unattended-upgrade:1107 -#, fuzzy, python-format -#| msgid "dpkg returned a error! See '%s' for details" -msgid "dpkg returned an error! See '%s' for details" -msgstr "O dpkg retornou um erro! Veja '%s' para mais detalhes" - -#: ../unattended-upgrade:1125 -#, python-format -msgid "Initial blacklisted packages: %s" -msgstr "Pacotes inicialmente na lista negra: %s" - -#: ../unattended-upgrade:1130 -#, fuzzy, python-format -#| msgid "Initial blacklisted packages: %s" -msgid "Initial whitelisted packages: %s" -msgstr "Pacotes inicialmente na lista negra: %s" - -#: ../unattended-upgrade:1133 -msgid "Starting unattended upgrades script" -msgstr "Iniciando o script da atualização desacompanhada" - -#: ../unattended-upgrade:1136 -#, python-format -msgid "Allowed origins are: %s" -msgstr "São origens permitidas: %s" - -#: ../unattended-upgrade:1152 ../unattended-upgrade:1153 -msgid "Unclean dpkg state detected, trying to correct" -msgstr "Tentando corrigir estado não-Ãntegro no dpkg" - -#: ../unattended-upgrade:1164 -#, python-format -msgid "" -"dpkg --configure -a output:\n" -"%s" -msgstr "" -"SaÃda de dpkg --configure -a:\n" -"%s" - -#: ../unattended-upgrade:1173 -msgid "Lock could not be acquired (another package manager running?)" -msgstr "" -"O lock não pôde ser obtido (outro gerenciador de pacotes em funcionamento?)" - -#: ../unattended-upgrade:1175 -msgid "Cache lock can not be acquired, exiting" -msgstr "O lock do cache não pode ser obtido, encerrando" - -#: ../unattended-upgrade:1182 ../unattended-upgrade:1183 -#: ../unattended-upgrade:1363 ../unattended-upgrade:1364 -msgid "Cache has broken packages, exiting" -msgstr "O cache tem pacotes quebrados, encerrando" - -#: ../unattended-upgrade:1226 -#, python-format -msgid "GetArchives() failed: '%s'" -msgstr "GetArchives() falhou: '%s'" - -#: ../unattended-upgrade:1236 ../unattended-upgrade:1237 -#, fuzzy, python-format -#| msgid "An error ocured: '%s'" -msgid "An error occurred: '%s'" -msgstr "Ocorreu um erro; '%s'" - -#: ../unattended-upgrade:1239 ../unattended-upgrade:1241 -#, python-format -msgid "The URI '%s' failed to download, aborting" -msgstr "O URI '%s' falhou no download, abortando" - -#: ../unattended-upgrade:1245 -#, python-format -msgid "Download finished, but file '%s' not there?!?" -msgstr "Download terminado, mas o arquivo '%s' não está lá?!?" - -#: ../unattended-upgrade:1261 ../unattended-upgrade:1265 -#, python-format -msgid "Package '%s' has conffile prompt and needs to be upgraded manually" -msgstr "" -"O pacote '%s' possui um diálogo conffile e necessita ser atualizado " -"manualmente" - -#: ../unattended-upgrade:1293 -#, python-format -msgid "package '%s' not upgraded" -msgstr "o pacote '%s' não foi atualizado" - -#: ../unattended-upgrade:1311 -#, fuzzy -#| msgid "No packages found that can be upgraded unattended" -msgid "" -"No packages found that can be upgraded unattended and no pending auto-" -"removals" -msgstr "" -"Não foi encontrado nenhum pacote que possa ser atualizado desacompanhadamente" - -#: ../unattended-upgrade:1337 -#, fuzzy, python-format -#| msgid "Packages that are upgraded: %s" -msgid "Packages that will be upgraded: %s" -msgstr "Pacotes atualizados: %s" - -#: ../unattended-upgrade:1406 -msgid "print debug messages" -msgstr "imprimir mensagens de depuração" - -#: ../unattended-upgrade:1409 -#, fuzzy -#| msgid "print debug messages" -msgid "make apt/libapt print verbose debug messages" -msgstr "imprimir mensagens de depuração" - -#: ../unattended-upgrade:1412 -#, fuzzy -#| msgid "print debug messages" -msgid "print info messages" -msgstr "imprimir mensagens de depuração" - -#: ../unattended-upgrade:1415 -msgid "Simulation, download but do not install" -msgstr "Simulação, baixar mas não instalar" - -#: ../unattended-upgrade:1418 -msgid "Upgrade in minimal steps (and allow interrupting with SIGINT" -msgstr "Atualizar em passos mÃnimos (e permitir interrupção com SIGINT)" - -#: ../unattended-upgrade:1427 -msgid "You need to be root to run this application" -msgstr "Você precisa ser root para executar este aplicativo" - -#: ../unattended-upgrade-shutdown:72 -msgid "Unattended-upgrade in progress during shutdown, sleeping for 5s" -msgstr "" -"Atualização desacompanhada em execução durante o encerramento do sistema, " -"atrasando 5s" - -#: ../unattended-upgrade-shutdown:125 -#, fuzzy -#| msgid "unattended-upgrades result for '%s'" -msgid "Running unattended-upgrades in shutdown mode" -msgstr "Resultado da atualização desacompanhada para '%s'" - -#: ../unattended-upgrade-shutdown:153 -#, python-format -msgid "Giving up on lockfile after %s delay" -msgstr "Desistindo do arquivo de lock após %s" - -#~ msgid "Progress: %s %%: (%s)" -#~ msgstr "Progresso: %s %%: (%s)" - -#~ msgid "pm.GetArchives() failed" -#~ msgstr "pm.GetArchives() falhou" diff --git a/package/po/ru.po b/package/po/ru.po deleted file mode 100644 index e77a4256d290a4054c933421b5661f5f65ba7a8c..0000000000000000000000000000000000000000 --- a/package/po/ru.po +++ /dev/null @@ -1,300 +0,0 @@ -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the unattended-upgrades package. -# -# Yuri Kozlov <yuray@komyakino.ru>, 2010, 2012. -msgid "" -msgstr "" -"Project-Id-Version: unattended-upgrades 0.77\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-02 12:27+0200\n" -"PO-Revision-Date: 2012-06-21 20:53+0400\n" -"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n" -"Language-Team: Russian <debian-l10n-russian@lists.debian.org>\n" -"Language: ru\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Lokalize 1.2\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -#: ../unattended-upgrade:162 -#, python-format -msgid "Progress: %s %% (%s)" -msgstr "Ход выполнениÑ: %s %% (%s)" - -#: ../unattended-upgrade:418 ../unattended-upgrade:501 -#: ../unattended-upgrade-shutdown:161 -msgid "All upgrades installed" -msgstr "Ð’Ñе Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑƒÑтановлены" - -#: ../unattended-upgrade:420 ../unattended-upgrade:493 -msgid "Installing the upgrades failed!" -msgstr "УÑтановка обновлений завершилаÑÑŒ Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹!" - -#: ../unattended-upgrade:421 ../unattended-upgrade:494 -#, python-format -msgid "error message: '%s'" -msgstr "Ñообщение об ошибке: %s" - -#: ../unattended-upgrade:422 ../unattended-upgrade:495 -#, python-format -msgid "dpkg returned a error! See '%s' for details" -msgstr "dpkg завершилаÑÑŒ Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹! ПодробноÑти Ñмотрите в %s" - -#: ../unattended-upgrade:795 -#, fuzzy -#| msgid "" -#| "No '/usr/bin/mail', can not send mail. You probably want to install the " -#| "'mailx' package." -msgid "" -"No '/usr/bin/mail' or '/usr/sbin/sendmail',can not send mail. You probably " -"want to install the 'mailx' package." -msgstr "" -"Ðет программы /usr/bin/mail, невозможно поÑлать почту. ВероÑтно, лучше " -"уÑтановить пакет mailx." - -#: ../unattended-upgrade:811 -#, fuzzy, python-format -#| msgid "[reboot required] unattended-upgrades result for '%s'" -msgid "[reboot required] unattended-upgrades result for '%s': %s" -msgstr "[требуетÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ°] Результат unattended-upgrades Ð´Ð»Ñ Â«%s»" - -#: ../unattended-upgrade:814 -#, fuzzy, python-format -#| msgid "unattended-upgrades result for '%s'" -msgid "unattended-upgrades result for '%s': '%s'" -msgstr "Результат unattended-upgrades Ð´Ð»Ñ Â«%s»" - -#: ../unattended-upgrade:816 -#, python-format -msgid "" -"Unattended upgrade returned: %s\n" -"\n" -msgstr "" -"Результат необÑлуживаемой уÑтановки: %s\n" -"\n" - -#: ../unattended-upgrade:819 -msgid "" -"Warning: A reboot is required to complete this upgrade.\n" -"\n" -msgstr "" -"Предупреждение: Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚ÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ°.\n" -"\n" - -#: ../unattended-upgrade:821 -#, fuzzy -#| msgid "Packages that are upgraded:\n" -msgid "Packages that were upgraded:\n" -msgstr "Обновлённые пакеты:\n" - -#: ../unattended-upgrade:823 -#, fuzzy -#| msgid "Packages that are upgraded:\n" -msgid "Packages that attempted to upgrade:\n" -msgstr "Обновлённые пакеты:\n" - -#: ../unattended-upgrade:827 -msgid "Packages with upgradable origin but kept back:\n" -msgstr "Пакеты, обновлённые в иÑточнике, но оÑтавленные теми же в ÑиÑтеме:\n" - -#: ../unattended-upgrade:832 -msgid "Package installation log:" -msgstr "Журнал уÑтановки пакетов:" - -#: ../unattended-upgrade:835 -msgid "Unattended-upgrades log:\n" -msgstr "Журнал unattended-upgrades:\n" - -#: ../unattended-upgrade:855 -#, python-format -msgid "Writing dpkg log to '%s'" -msgstr "Журнал dpkg запиÑываетÑÑ Ð² %s" - -#: ../unattended-upgrade:987 -#, python-format -msgid "Found %s, but not rebooting because %s is logged in." -msgid_plural "Found %s, but not rebooting because %s are logged in." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: ../unattended-upgrade:1033 -#, python-format -msgid "package '%s' upgradable but fails to be marked for upgrade (%s)" -msgstr "" -"пакет %s можно обновить, но его не удалоÑÑŒ пометить как обновлÑемый (%s)" - -#: ../unattended-upgrade:1097 -#, python-format -msgid "Packages that are auto removed: '%s'" -msgstr "ÐвтоматичеÑки удалÑемые пакеты: «%s»" - -#: ../unattended-upgrade:1103 -#, fuzzy -#| msgid "Packages that are auto removed: '%s'" -msgid "Packages were successfully auto-removed" -msgstr "ÐвтоматичеÑки удалÑемые пакеты: «%s»" - -#: ../unattended-upgrade:1105 -#, fuzzy -#| msgid "Installing the upgrades failed!" -msgid "Auto-removing the packages failed!" -msgstr "УÑтановка обновлений завершилаÑÑŒ Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹!" - -#: ../unattended-upgrade:1106 -#, fuzzy, python-format -#| msgid "error message: '%s'" -msgid "Error message: '%s'" -msgstr "Ñообщение об ошибке: %s" - -#: ../unattended-upgrade:1107 -#, fuzzy, python-format -#| msgid "dpkg returned a error! See '%s' for details" -msgid "dpkg returned an error! See '%s' for details" -msgstr "dpkg завершилаÑÑŒ Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹! ПодробноÑти Ñмотрите в %s" - -#: ../unattended-upgrade:1125 -#, python-format -msgid "Initial blacklisted packages: %s" -msgstr "Пакеты в чёрном ÑпиÑке изначально: %s" - -#: ../unattended-upgrade:1130 -#, fuzzy, python-format -#| msgid "Initial blacklisted packages: %s" -msgid "Initial whitelisted packages: %s" -msgstr "Пакеты в чёрном ÑпиÑке изначально: %s" - -#: ../unattended-upgrade:1133 -msgid "Starting unattended upgrades script" -msgstr "ЗапуÑкаютÑÑ Ñценарии необÑлуживаемой уÑтановки" - -#: ../unattended-upgrade:1136 -#, python-format -msgid "Allowed origins are: %s" -msgstr "Разрешённые иÑточники: %s" - -#: ../unattended-upgrade:1152 ../unattended-upgrade:1153 -msgid "Unclean dpkg state detected, trying to correct" -msgstr "Обнаружено ÑоÑтоÑние незавершённоÑти работы dpkg, попытаемÑÑ Ð¸Ñправить" - -#: ../unattended-upgrade:1164 -#, python-format -msgid "" -"dpkg --configure -a output:\n" -"%s" -msgstr "" -"Результат dpkg --configure -a:\n" -"%s" - -#: ../unattended-upgrade:1173 -msgid "Lock could not be acquired (another package manager running?)" -msgstr "Ðе удалоÑÑŒ выполнить блокировку (запущен ещё один менеджер пакетов?)" - -#: ../unattended-upgrade:1175 -msgid "Cache lock can not be acquired, exiting" -msgstr "Ðе удалоÑÑŒ выполнить блокировку кÑша, завершение работы" - -#: ../unattended-upgrade:1182 ../unattended-upgrade:1183 -#: ../unattended-upgrade:1363 ../unattended-upgrade:1364 -msgid "Cache has broken packages, exiting" -msgstr "Ð’ кÑше Ñломанные пакеты, завершение работы" - -#: ../unattended-upgrade:1226 -#, python-format -msgid "GetArchives() failed: '%s'" -msgstr "GetArchives() завершилаÑÑŒ Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹: '%s'" - -#: ../unattended-upgrade:1236 ../unattended-upgrade:1237 -#, fuzzy, python-format -#| msgid "An error ocured: '%s'" -msgid "An error occurred: '%s'" -msgstr "Произошла ошибка: %s" - -#: ../unattended-upgrade:1239 ../unattended-upgrade:1241 -#, python-format -msgid "The URI '%s' failed to download, aborting" -msgstr "Ðевозможно Ñкачать URI '%s', оÑтанов" - -#: ../unattended-upgrade:1245 -#, python-format -msgid "Download finished, but file '%s' not there?!?" -msgstr "Скачивание завершено, но файла %s нет?!?" - -#: ../unattended-upgrade:1261 ../unattended-upgrade:1265 -#, python-format -msgid "Package '%s' has conffile prompt and needs to be upgraded manually" -msgstr "" -"Ð’ пакете %s еÑÑ‚ÑŒ conffile Ñ Ð²Ð²Ð¾Ð´Ð¾Ð¼ от Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸ его нужно обновлÑÑ‚ÑŒ " -"вручную" - -#: ../unattended-upgrade:1293 -#, python-format -msgid "package '%s' not upgraded" -msgstr "пакет %s не обновлён" - -#: ../unattended-upgrade:1311 -#, fuzzy -#| msgid "No packages found that can be upgraded unattended" -msgid "" -"No packages found that can be upgraded unattended and no pending auto-" -"removals" -msgstr "" -"Пакеты, Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… можно выполнить необÑлуживаемое обновление, не найдены" - -#: ../unattended-upgrade:1337 -#, fuzzy, python-format -#| msgid "Packages that are upgraded: %s" -msgid "Packages that will be upgraded: %s" -msgstr "Обновлённые пакеты: %s" - -#: ../unattended-upgrade:1406 -msgid "print debug messages" -msgstr "выводить отладочные ÑообщениÑ" - -#: ../unattended-upgrade:1409 -#, fuzzy -#| msgid "print debug messages" -msgid "make apt/libapt print verbose debug messages" -msgstr "выводить отладочные ÑообщениÑ" - -#: ../unattended-upgrade:1412 -#, fuzzy -#| msgid "print debug messages" -msgid "print info messages" -msgstr "выводить отладочные ÑообщениÑ" - -#: ../unattended-upgrade:1415 -msgid "Simulation, download but do not install" -msgstr "ИмитациÑ, Ñкачивать но не уÑтанавливать" - -#: ../unattended-upgrade:1418 -msgid "Upgrade in minimal steps (and allow interrupting with SIGINT" -msgstr "" -"Обновление Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ñ‹Ð¼ количеÑтвом Ñтапов (можно прервать Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ SIGINT" - -#: ../unattended-upgrade:1427 -msgid "You need to be root to run this application" -msgstr "Ð’Ñ‹ должны быть root Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑка Ñтого приложениÑ" - -#: ../unattended-upgrade-shutdown:72 -msgid "Unattended-upgrade in progress during shutdown, sleeping for 5s" -msgstr "Выполнение unattended-upgrade во Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ, пауза на 5Ñ" - -#: ../unattended-upgrade-shutdown:125 -#, fuzzy -#| msgid "unattended-upgrades result for '%s'" -msgid "Running unattended-upgrades in shutdown mode" -msgstr "Результат unattended-upgrades Ð´Ð»Ñ Â«%s»" - -#: ../unattended-upgrade-shutdown:153 -#, python-format -msgid "Giving up on lockfile after %s delay" -msgstr "Отказ по lockfile поÑле %s задержки" - -#~ msgid "Progress: %s %%: (%s)" -#~ msgstr "Ход выполнениÑ: %s %%: (%s)" - -#~ msgid "pm.GetArchives() failed" -#~ msgstr "pm.GetArchives() завершилаÑÑŒ Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹" diff --git a/package/po/sk.po b/package/po/sk.po deleted file mode 100644 index a62fe1e381e9d004086f88b4a22bb79b1ea1e520..0000000000000000000000000000000000000000 --- a/package/po/sk.po +++ /dev/null @@ -1,294 +0,0 @@ -# Slovak translation for unattended-upgrades -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the unattended-upgrades package. -# Ivan Masár <helix84@centrum.sk>, 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: unattended-upgrades\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-02 12:27+0200\n" -"PO-Revision-Date: 2012-06-14 10:05+0100\n" -"Last-Translator: Ivan Masár <helix84@centrum.sk>\n" -"Language-Team: Slovak <debian-l10n-slovak@lists.debian.org>\n" -"Language: sk\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural= (n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -#: ../unattended-upgrade:162 -#, python-format -msgid "Progress: %s %% (%s)" -msgstr "Priebeh: %s %% (%s)" - -#: ../unattended-upgrade:418 ../unattended-upgrade:501 -#: ../unattended-upgrade-shutdown:161 -msgid "All upgrades installed" -msgstr "VÅ¡etky aktualizácie sú nainÅ¡talované" - -#: ../unattended-upgrade:420 ../unattended-upgrade:493 -msgid "Installing the upgrades failed!" -msgstr "InÅ¡talácia aktualizácià zlyhala!" - -#: ../unattended-upgrade:421 ../unattended-upgrade:494 -#, python-format -msgid "error message: '%s'" -msgstr "chybová správa: „%s“" - -#: ../unattended-upgrade:422 ../unattended-upgrade:495 -#, python-format -msgid "dpkg returned a error! See '%s' for details" -msgstr "dpkg vrátil chybu! Podrobnosti nájdete v „%s“" - -#: ../unattended-upgrade:795 -#, fuzzy -#| msgid "" -#| "No '/usr/bin/mail', can not send mail. You probably want to install the " -#| "'mailx' package." -msgid "" -"No '/usr/bin/mail' or '/usr/sbin/sendmail',can not send mail. You probably " -"want to install the 'mailx' package." -msgstr "" -"Chýba „/usr/bin/mail“ nie je možné poslaÅ¥ poÅ¡tu. Pravdepodobne chcete " -"nainÅ¡talovaÅ¥ balÃk „mailx“." - -#: ../unattended-upgrade:811 -#, fuzzy, python-format -#| msgid "[reboot required] unattended-upgrades result for '%s'" -msgid "[reboot required] unattended-upgrades result for '%s': %s" -msgstr "[vyžaduje reÅ¡tart] výsledok unattended-upgrades pre „%s“" - -#: ../unattended-upgrade:814 -#, fuzzy, python-format -#| msgid "unattended-upgrades result for '%s'" -msgid "unattended-upgrades result for '%s': '%s'" -msgstr "výsledok unattended-upgrades pre „%s“" - -#: ../unattended-upgrade:816 -#, python-format -msgid "" -"Unattended upgrade returned: %s\n" -"\n" -msgstr "" -"Bezobslužná aktualizácia vrátila: %s\n" -"\n" - -#: ../unattended-upgrade:819 -msgid "" -"Warning: A reboot is required to complete this upgrade.\n" -"\n" -msgstr "" -"Upozornenie: Na dokonÄenie tejto aktualizácie sa vyžaduje reÅ¡tart.\n" -"\n" - -#: ../unattended-upgrade:821 -#, fuzzy -#| msgid "Packages that are upgraded:\n" -msgid "Packages that were upgraded:\n" -msgstr "Aktualizavané balÃky:\n" - -#: ../unattended-upgrade:823 -#, fuzzy -#| msgid "Packages that are upgraded:\n" -msgid "Packages that attempted to upgrade:\n" -msgstr "Aktualizavané balÃky:\n" - -#: ../unattended-upgrade:827 -msgid "Packages with upgradable origin but kept back:\n" -msgstr "Aktualizovateľné, ale podržané balÃky:\n" - -#: ../unattended-upgrade:832 -msgid "Package installation log:" -msgstr "Záznam inÅ¡talácià balÃkov:" - -#: ../unattended-upgrade:835 -msgid "Unattended-upgrades log:\n" -msgstr "Záznam bezobslužných aktualizáciÃ:\n" - -#: ../unattended-upgrade:855 -#, python-format -msgid "Writing dpkg log to '%s'" -msgstr "Zapisuje sa záznam dpkg do „%s“" - -#: ../unattended-upgrade:987 -#, python-format -msgid "Found %s, but not rebooting because %s is logged in." -msgid_plural "Found %s, but not rebooting because %s are logged in." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: ../unattended-upgrade:1033 -#, python-format -msgid "package '%s' upgradable but fails to be marked for upgrade (%s)" -msgstr "" -"balÃk „%s“ je aktualizovateľný, ale nedarà sa oznaÄiÅ¥ na aktualizáciu (%s)" - -#: ../unattended-upgrade:1097 -#, python-format -msgid "Packages that are auto removed: '%s'" -msgstr "Automaticky odstránené balÃky: „%s“" - -#: ../unattended-upgrade:1103 -#, fuzzy -#| msgid "Packages that are auto removed: '%s'" -msgid "Packages were successfully auto-removed" -msgstr "Automaticky odstránené balÃky: „%s“" - -#: ../unattended-upgrade:1105 -#, fuzzy -#| msgid "Installing the upgrades failed!" -msgid "Auto-removing the packages failed!" -msgstr "InÅ¡talácia aktualizácià zlyhala!" - -#: ../unattended-upgrade:1106 -#, fuzzy, python-format -#| msgid "error message: '%s'" -msgid "Error message: '%s'" -msgstr "chybová správa: „%s“" - -#: ../unattended-upgrade:1107 -#, fuzzy, python-format -#| msgid "dpkg returned a error! See '%s' for details" -msgid "dpkg returned an error! See '%s' for details" -msgstr "dpkg vrátil chybu! Podrobnosti nájdete v „%s“" - -#: ../unattended-upgrade:1125 -#, python-format -msgid "Initial blacklisted packages: %s" -msgstr "Prvotná Äierna listina balÃkov: %s" - -#: ../unattended-upgrade:1130 -#, fuzzy, python-format -#| msgid "Initial blacklisted packages: %s" -msgid "Initial whitelisted packages: %s" -msgstr "Prvotná Äierna listina balÃkov: %s" - -#: ../unattended-upgrade:1133 -msgid "Starting unattended upgrades script" -msgstr "Spúšťa sa skript bezobslužných aktualizáciÃ" - -#: ../unattended-upgrade:1136 -#, python-format -msgid "Allowed origins are: %s" -msgstr "Povolené pôvody sú: %s" - -#: ../unattended-upgrade:1152 ../unattended-upgrade:1153 -msgid "Unclean dpkg state detected, trying to correct" -msgstr "Bol zistený neÄistý stav dpkg, prebieha pokus o nápravu" - -#: ../unattended-upgrade:1164 -#, python-format -msgid "" -"dpkg --configure -a output:\n" -"%s" -msgstr "" -"výstup dpkg --configure -a:\n" -"%s" - -#: ../unattended-upgrade:1173 -msgid "Lock could not be acquired (another package manager running?)" -msgstr "Zámok sa nepodarilo zÃskaÅ¥ (bežà iný správca balÃkov?)" - -#: ../unattended-upgrade:1175 -msgid "Cache lock can not be acquired, exiting" -msgstr "Nepodarilo sa zÃskaÅ¥ zámok vyrovnávacej pamäte, program konÄÃ" - -#: ../unattended-upgrade:1182 ../unattended-upgrade:1183 -#: ../unattended-upgrade:1363 ../unattended-upgrade:1364 -msgid "Cache has broken packages, exiting" -msgstr "Vyrovnávacia pamäť obsahuje poÅ¡kodené balÃky, program konÄÃ" - -#: ../unattended-upgrade:1226 -#, python-format -msgid "GetArchives() failed: '%s'" -msgstr "GetArchives() zlyhalo: „%s“" - -#: ../unattended-upgrade:1236 ../unattended-upgrade:1237 -#, fuzzy, python-format -#| msgid "An error ocured: '%s'" -msgid "An error occurred: '%s'" -msgstr "Vyskytla sa chyba: „%s“" - -#: ../unattended-upgrade:1239 ../unattended-upgrade:1241 -#, python-format -msgid "The URI '%s' failed to download, aborting" -msgstr "URI „%s“ sa nepodarilo stiahnuÅ¥, program konÄÃ" - -#: ../unattended-upgrade:1245 -#, python-format -msgid "Download finished, but file '%s' not there?!?" -msgstr "SÅ¥ahovanie dokonÄené, ale súbor „%s“ nie je na mieste?!?" - -#: ../unattended-upgrade:1261 ../unattended-upgrade:1265 -#, python-format -msgid "Package '%s' has conffile prompt and needs to be upgraded manually" -msgstr "" -"BalÃk „%s“ obsahuje výzvu konfiguraÄného súboru a musà sa aktualizovaÅ¥ ruÄne" - -#: ../unattended-upgrade:1293 -#, python-format -msgid "package '%s' not upgraded" -msgstr "balÃk „%s“ nebol aktualizovaný" - -#: ../unattended-upgrade:1311 -#, fuzzy -#| msgid "No packages found that can be upgraded unattended" -msgid "" -"No packages found that can be upgraded unattended and no pending auto-" -"removals" -msgstr "Neboli nájdené žiadne balÃky, ktoré možno aktualizovaÅ¥ bezobslužne" - -#: ../unattended-upgrade:1337 -#, fuzzy, python-format -#| msgid "Packages that are upgraded: %s" -msgid "Packages that will be upgraded: %s" -msgstr "Aktualizované balÃky: %s" - -#: ../unattended-upgrade:1406 -msgid "print debug messages" -msgstr "vypisovaÅ¥ ladiace správy" - -#: ../unattended-upgrade:1409 -#, fuzzy -#| msgid "print debug messages" -msgid "make apt/libapt print verbose debug messages" -msgstr "vypisovaÅ¥ ladiace správy" - -#: ../unattended-upgrade:1412 -#, fuzzy -#| msgid "print debug messages" -msgid "print info messages" -msgstr "vypisovaÅ¥ ladiace správy" - -#: ../unattended-upgrade:1415 -msgid "Simulation, download but do not install" -msgstr "Simulácia - sÅ¥ahovaÅ¥, ale neinÅ¡talovaÅ¥" - -#: ../unattended-upgrade:1418 -msgid "Upgrade in minimal steps (and allow interrupting with SIGINT" -msgstr "" -"AktualizovaÅ¥ po minimálnych krokoch (a umožniÅ¥ preruÅ¡enie pomocou SIGINT" - -#: ../unattended-upgrade:1427 -msgid "You need to be root to run this application" -msgstr "Aby ste mohli spustiÅ¥ túto aplikáciu, musÃte byÅ¥ root" - -#: ../unattended-upgrade-shutdown:72 -msgid "Unattended-upgrade in progress during shutdown, sleeping for 5s" -msgstr "Unattended-upgrade prebieha poÄas vypÃnania, Äaká sa 5 sekúnd" - -#: ../unattended-upgrade-shutdown:125 -#, fuzzy -#| msgid "unattended-upgrades result for '%s'" -msgid "Running unattended-upgrades in shutdown mode" -msgstr "výsledok unattended-upgrades pre „%s“" - -#: ../unattended-upgrade-shutdown:153 -#, python-format -msgid "Giving up on lockfile after %s delay" -msgstr "Vzdáva sa pokus o zÃskanie zámku po %s" - -#~ msgid "Progress: %s %%: (%s)" -#~ msgstr "Priebeh: %s %%: (%s)" diff --git a/package/po/unattended-upgrades.pot b/package/po/unattended-upgrades.pot deleted file mode 100644 index 8a1f81c0c757b5bc6ff23672a5375c340bd6bf78..0000000000000000000000000000000000000000 --- a/package/po/unattended-upgrades.pot +++ /dev/null @@ -1,256 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-12-15 10:27-0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" - -#: ../unattended-upgrade:163 -#, c-format -msgid "Progress: %s %% (%s)" -msgstr "" - -#: ../unattended-upgrade:419 ../unattended-upgrade:502 -#: ../unattended-upgrade-shutdown:161 -msgid "All upgrades installed" -msgstr "" - -#: ../unattended-upgrade:421 ../unattended-upgrade:494 -msgid "Installing the upgrades failed!" -msgstr "" - -#: ../unattended-upgrade:422 ../unattended-upgrade:495 -#, c-format -msgid "error message: '%s'" -msgstr "" - -#: ../unattended-upgrade:423 ../unattended-upgrade:496 -#, c-format -msgid "dpkg returned a error! See '%s' for details" -msgstr "" - -#: ../unattended-upgrade:797 -msgid "" -"No '/usr/bin/mail' or '/usr/sbin/sendmail',can not send mail. You probably " -"want to install the 'mailx' package." -msgstr "" - -#: ../unattended-upgrade:811 -msgid "[reboot required]" -msgstr "" - -#: ../unattended-upgrade:813 -msgid "[package on hold]" -msgstr "" - -#: ../unattended-upgrade:816 -msgid "" -"{hold_flag}{reboot_flag} unattended-upgrades result for '{machine}': {result}" -msgstr "" - -#: ../unattended-upgrade:820 -#, c-format -msgid "" -"Unattended upgrade returned: %s\n" -"\n" -msgstr "" - -#: ../unattended-upgrade:823 -msgid "" -"Warning: A reboot is required to complete this upgrade.\n" -"\n" -msgstr "" - -#: ../unattended-upgrade:825 -msgid "Packages that were upgraded:\n" -msgstr "" - -#: ../unattended-upgrade:827 -msgid "Packages that attempted to upgrade:\n" -msgstr "" - -#: ../unattended-upgrade:831 -msgid "Packages with upgradable origin but kept back:\n" -msgstr "" - -#: ../unattended-upgrade:836 -msgid "Package installation log:" -msgstr "" - -#: ../unattended-upgrade:839 -msgid "Unattended-upgrades log:\n" -msgstr "" - -#: ../unattended-upgrade:861 -#, c-format -msgid "Writing dpkg log to '%s'" -msgstr "" - -#: ../unattended-upgrade:993 -#, c-format -msgid "Found %s, but not rebooting because %s is logged in." -msgid_plural "Found %s, but not rebooting because %s are logged in." -msgstr[0] "" -msgstr[1] "" - -#: ../unattended-upgrade:1039 -#, c-format -msgid "package '%s' upgradable but fails to be marked for upgrade (%s)" -msgstr "" - -#: ../unattended-upgrade:1102 -#, c-format -msgid "Packages that are auto removed: '%s'" -msgstr "" - -#: ../unattended-upgrade:1108 -msgid "Packages were successfully auto-removed" -msgstr "" - -#: ../unattended-upgrade:1110 -msgid "Auto-removing the packages failed!" -msgstr "" - -#: ../unattended-upgrade:1111 -#, c-format -msgid "Error message: '%s'" -msgstr "" - -#: ../unattended-upgrade:1112 -#, c-format -msgid "dpkg returned an error! See '%s' for details" -msgstr "" - -#: ../unattended-upgrade:1141 -#, c-format -msgid "Initial blacklisted packages: %s" -msgstr "" - -#: ../unattended-upgrade:1146 -#, c-format -msgid "Initial whitelisted packages: %s" -msgstr "" - -#: ../unattended-upgrade:1149 -msgid "Starting unattended upgrades script" -msgstr "" - -#: ../unattended-upgrade:1152 -#, c-format -msgid "Allowed origins are: %s" -msgstr "" - -#: ../unattended-upgrade:1168 ../unattended-upgrade:1169 -msgid "Unclean dpkg state detected, trying to correct" -msgstr "" - -#: ../unattended-upgrade:1180 -#, c-format -msgid "" -"dpkg --configure -a output:\n" -"%s" -msgstr "" - -#: ../unattended-upgrade:1189 -msgid "Lock could not be acquired (another package manager running?)" -msgstr "" - -#: ../unattended-upgrade:1191 -msgid "Cache lock can not be acquired, exiting" -msgstr "" - -#: ../unattended-upgrade:1198 ../unattended-upgrade:1199 -#: ../unattended-upgrade:1378 ../unattended-upgrade:1379 -msgid "Cache has broken packages, exiting" -msgstr "" - -#: ../unattended-upgrade:1242 -#, c-format -msgid "GetArchives() failed: '%s'" -msgstr "" - -#: ../unattended-upgrade:1252 ../unattended-upgrade:1253 -#, c-format -msgid "An error occurred: '%s'" -msgstr "" - -#: ../unattended-upgrade:1255 ../unattended-upgrade:1257 -#, c-format -msgid "The URI '%s' failed to download, aborting" -msgstr "" - -#: ../unattended-upgrade:1261 -#, c-format -msgid "Download finished, but file '%s' not there?!?" -msgstr "" - -#: ../unattended-upgrade:1277 ../unattended-upgrade:1281 -#, c-format -msgid "Package '%s' has conffile prompt and needs to be upgraded manually" -msgstr "" - -#: ../unattended-upgrade:1309 -#, c-format -msgid "package '%s' not upgraded" -msgstr "" - -#: ../unattended-upgrade:1328 -msgid "" -"No packages found that can be upgraded unattended and no pending auto-" -"removals" -msgstr "" - -#: ../unattended-upgrade:1354 -#, c-format -msgid "Packages that will be upgraded: %s" -msgstr "" - -#: ../unattended-upgrade:1439 -msgid "print debug messages" -msgstr "" - -#: ../unattended-upgrade:1442 -msgid "make apt/libapt print verbose debug messages" -msgstr "" - -#: ../unattended-upgrade:1445 -msgid "print info messages" -msgstr "" - -#: ../unattended-upgrade:1448 -msgid "Simulation, download but do not install" -msgstr "" - -#: ../unattended-upgrade:1451 -msgid "Upgrade in minimal steps (and allow interrupting with SIGINT" -msgstr "" - -#: ../unattended-upgrade:1460 -msgid "You need to be root to run this application" -msgstr "" - -#: ../unattended-upgrade-shutdown:72 -msgid "Unattended-upgrade in progress during shutdown, sleeping for 5s" -msgstr "" - -#: ../unattended-upgrade-shutdown:125 -msgid "Running unattended-upgrades in shutdown mode" -msgstr "" - -#: ../unattended-upgrade-shutdown:153 -#, c-format -msgid "Giving up on lockfile after %s delay" -msgstr "" diff --git a/package/pre-build.sh b/package/pre-build.sh deleted file mode 100755 index efdce70e806eb101e5e5e0d3df97d66d083fb1d6..0000000000000000000000000000000000000000 --- a/package/pre-build.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -# update po files -for i in po/*.po; do - msgmerge --previous --update $i po/*.pot; -done diff --git a/package/setup.cfg b/package/setup.cfg deleted file mode 100644 index 78e6d7e9f9ed39b9d4ffc69bcdb97ddbfa3ff54a..0000000000000000000000000000000000000000 --- a/package/setup.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[build] -i18n=True \ No newline at end of file diff --git a/package/setup.py b/package/setup.py deleted file mode 100755 index 56b580f5a614169101e7dc46992172cef201c954..0000000000000000000000000000000000000000 --- a/package/setup.py +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env python3 - -import glob -from setuptools import setup -from DistUtilsExtra.command import ( - build_extra, - build_i18n, -) - -if __name__ == "__main__": - setup( - name='unattended-upgrades', - version='0.1', - scripts=['unattended-upgrade'], - data_files=[ - ('../etc/logrotate.d/', - ["data/logrotate.d/unattended-upgrades"]), - ('../etc/apt/', - ["data/preferences"]), - ('../usr/share/unattended-upgrades/', - ["data/20auto-upgrades", - "data/20auto-upgrades-disabled", - "data/50unattended-upgrades", - "data/cront.py", - "unattended-upgrade-shutdown"]), - ('../usr/share/man/man8/', - ["man/unattended-upgrade.8", - "man/le-autoupgrade.8"]), - ('../etc/pm/sleep.d/', - ["pm/sleep.d/10_unattended-upgrades-hibernate"]), - ('../etc/kernel/postinst.d/', - glob.glob("kernel/postinst.d/*")), - ('../usr/share/apport/package-hooks/', - ["debian/source_unattended-upgrades.py"]) - ], - cmdclass={"build": build_extra.build_extra, - "build_i18n": build_i18n.build_i18n}, - test_suite="test", - ) diff --git a/package/test/.coverage b/package/test/.coverage deleted file mode 100644 index 32c894715aa6d55e039ad1da1d0cd74e52e6cd12..0000000000000000000000000000000000000000 Binary files a/package/test/.coverage and /dev/null differ diff --git a/package/test/Makefile b/package/test/Makefile deleted file mode 100644 index b0e6e41f4d074c21120444a13ff65f87a7ac59b7..0000000000000000000000000000000000000000 --- a/package/test/Makefile +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/make - -all: check - -check: - # test with both py2 and py3 for now and also use coverage for the py2 - set -e; \ - find . -name 'test_*.py' | \ - while read file; do \ - if [ -x $$file ]; then \ - echo "Running $$file with python3"; \ - python3 $$file 2>&1; \ - echo "Running $$file with python"; \ - python-coverage run -a $$file 2>&1; \ - fi \ - done - -clean: - rm -rf ./aptroot/var/cache/ - rm -rf ./aptroot/var/lib/apt - rm -rf ./aptroot/var/run - find .. -type d -name __pycache__ | xargs rm -rf - -coverage-html: - echo "output in htmlcov/ - python-coverage html diff --git a/package/test/__init__.py b/package/test/__init__.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/package/test/__pycache__/unattended_upgrade.cpython-34.pyc b/package/test/__pycache__/unattended_upgrade.cpython-34.pyc deleted file mode 100644 index 25d7e8bd7be5eb28872530e2861ae9ba7ef1aa5b..0000000000000000000000000000000000000000 Binary files a/package/test/__pycache__/unattended_upgrade.cpython-34.pyc and /dev/null differ diff --git a/package/test/__pycache__/unattended_upgrade.cpython-35.pyc b/package/test/__pycache__/unattended_upgrade.cpython-35.pyc deleted file mode 100644 index a7304d5618b226e43a21fd8fc15e290dd8ee4196..0000000000000000000000000000000000000000 Binary files a/package/test/__pycache__/unattended_upgrade.cpython-35.pyc and /dev/null differ diff --git a/package/test/aptroot/etc/apt/apt.conf.d/50unattended-upgrades b/package/test/aptroot/etc/apt/apt.conf.d/50unattended-upgrades deleted file mode 100644 index 340daa21cca799196f71559a2070e560eb13d1b7..0000000000000000000000000000000000000000 --- a/package/test/aptroot/etc/apt/apt.conf.d/50unattended-upgrades +++ /dev/null @@ -1,36 +0,0 @@ -// Automatically upgrade packages from these (origin, archive) pairs -Unattended-Upgrade::Allowed-Origins { - "Ubuntu lucid-security"; -}; - -// List of packages to not update -Unattended-Upgrade::Package-Blacklist { -// "vim"; -// "libc6"; -// "libc6-dev"; -// "libc6-i686"; - "ant-doc"; -}; - -// Send email to this address for problems or packages upgrades -// If empty or unset then no email is sent, make sure that you -// have a working mail setup on your system. The package 'mailx' -// must be installed or anything that provides /usr/bin/mail. -//Unattended-Upgrade::Mail "root@localhost"; - -// Set this value to "true" to get emails only on errors. Default -// is to always send a mail if Unattended-Upgrade::Mail is set -//Unattended-Upgrade::MailOnlyOnError "true"; - -// Do automatic removal of new unused dependencies after the upgrade -// (equivalent to apt-get autoremove) -//Unattended-Upgrade::Remove-Unused-Dependencies "false"; - -// Automatically reboot *WITHOUT CONFIRMATION* if a -// the file /var/run/reboot-required is found after the upgrade -//Unattended-Upgrade::Automatic-Reboot "false"; - - -// Use apt bandwidth limit feature, this example limits the download -// speed to 70kb/sec -//Acquire::http::Dl-Limit "70"; diff --git a/package/test/aptroot/etc/apt/sources.list b/package/test/aptroot/etc/apt/sources.list deleted file mode 100644 index f7887d5ee734d2ccc3075e21c2f3f3f13b298cba..0000000000000000000000000000000000000000 --- a/package/test/aptroot/etc/apt/sources.list +++ /dev/null @@ -1,4 +0,0 @@ -# updates -deb http://archive.ubuntu.com/ubuntu/ lucid-updates main restricted -# security -deb http://security.ubuntu.com/ubuntu lucid-security main restricted diff --git a/package/test/aptroot/etc/apt/trusted.gpg b/package/test/aptroot/etc/apt/trusted.gpg deleted file mode 100644 index eac2524abd9932c6e5fbe85f789a6b2fa78ce0be..0000000000000000000000000000000000000000 Binary files a/package/test/aptroot/etc/apt/trusted.gpg and /dev/null differ diff --git a/package/test/aptroot/usr/bin/dpkg b/package/test/aptroot/usr/bin/dpkg deleted file mode 100755 index 3452312ad4cd4f81aeb5a09e8d7bc4e481eb32e6..0000000000000000000000000000000000000000 --- a/package/test/aptroot/usr/bin/dpkg +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -# needed for apt to figure out the multiarch state -if [ "$1" = "--print-foreign-architectures" ]; then - exec dpkg $@ - -fi - -# we are just pretending -echo "fake-dpkg: $@" - -# this should probably split into a seperate part -read -p "FAKE PROMPT TO ENSURE WE DO NOT BLOCK ON READS - if its handing here, the stdin close did not work" INPUT -echo "READ: $INPUT" diff --git a/package/test/aptroot/var/lib/dpkg/status b/package/test/aptroot/var/lib/dpkg/status deleted file mode 100644 index 3ee35b9511da8f3b8eaccd766164afae78d2ec14..0000000000000000000000000000000000000000 --- a/package/test/aptroot/var/lib/dpkg/status +++ /dev/null @@ -1,52 +0,0 @@ -Package: awstats -Status: install ok installed -Priority: extra -Section: admin -Installed-Size: 1260 -Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com> -Architecture: all -Version: 6.9~dfsg-1ubuntu3 -Description: dummy - -Package: perl -Status: install ok installed -Priority: standard -Section: perl -Installed-Size: 18556 -Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> -Architecture: amd64 -Version: 5.10.1-17ubuntu1 -Description: Larry Wall's Practical Extraction and Report Language - An interpreted scripting language, known among some as "Unix's Swiss - Army Chainsaw". - . - Perl is optimised for scanning arbitrary text files and system - administration. It has built-in extended regular expression matching - and replacement, a data-flow mechanism to improve security with - setuid scripts and is extensible via modules that can interface to C - libraries. - -Package: ant-doc -Status: install ok installed -Priority: optional -Section: doc -Installed-Size: 35776 -Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com> -Architecture: all -Version: 1.0 -Description: Java based build tool like make - API documentation and manual - A system independent (i.e. not shell based) build tool that uses XML files - as "Makefiles". This package contains the manual of ant as well as the - Javadoc API documentation. - -Package: apt-doc -Status: install ok installed -Priority: optional -Section: doc -Installed-Size: 388 -Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> -Architecture: all -Version: 0.7.25.3ubuntu9 -Description-en_GB: Documentation for APT - This package contains the user guide and offline guide, for APT, an - Advanced Package Tool. diff --git a/package/test/create_debug_lock.py b/package/test/create_debug_lock.py deleted file mode 100644 index 6168abcba4b189d7788f50ed66d70144adb58860..0000000000000000000000000000000000000000 --- a/package/test/create_debug_lock.py +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/python3 -# -# create a lock file so that unattended-upgrades-shutdown pauses -# on shutdown -- useful for testing - -import apt_pkg -import os -import time - - -pid = os.fork() -if pid == 0: - os.setsid() - lock = apt_pkg.get_lock("/var/run/unattended-upgrades.lock") - time.sleep(500) diff --git a/package/test/data/50unattended-upgrades.Test b/package/test/data/50unattended-upgrades.Test deleted file mode 100644 index 258a9bf7deb7d35e0b1063f35111a0d52b74bd24..0000000000000000000000000000000000000000 --- a/package/test/data/50unattended-upgrades.Test +++ /dev/null @@ -1,6 +0,0 @@ -// Automatically upgrade packages from these (origin, archive) pairs -Unattended-Upgrade::Origins-Pattern { - "o=aOrigin,a=aArchive"; - "s=aSite,l=aLabel"; - "o=Google\, Inc.,suite=stable"; -}; diff --git a/package/test/data/50unattended-upgrades.compat b/package/test/data/50unattended-upgrades.compat deleted file mode 100644 index 4201c27d3be256dfa015139a840575942434028d..0000000000000000000000000000000000000000 --- a/package/test/data/50unattended-upgrades.compat +++ /dev/null @@ -1,6 +0,0 @@ -// Automatically upgrade packages from these (origin:archive) pairs -Unattended-Upgrade::Allowed-Origins { - "Google, Inc.:stable"; - "MoreCorp\, eink:stable"; - "${distro_id}:${distro_codename}-security"; -}; diff --git a/package/test/data/cron.py b/package/test/data/cron.py deleted file mode 100644 index 28f8ff5ad46bfa74ba88a2b0a10f1be88f28fc4b..0000000000000000000000000000000000000000 --- a/package/test/data/cron.py +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env python -#!/usr/bin/python -import random # new lybrary for c3sl ver. -from crontab import CronTab # new lybrary for c3sl ver. -from uuid import getnode as get_mac # new library for c3sl ver. -from io import StringIO - -# get the mac adress of the machine so we can calculate a random number -def get_mac_adress(): - mc = get_mac() % 10000 - return mc - - -def get_random_minute(mac): - mi = mac % 100 - if (mi >= 60): - return random.randrange(0, 60, 1) - else: - return mi - - -def get_random_hour(mac): - two_first = str(mac) - two_first = int(two_first[:2]) - if (two_first >= 24): - return random.randrange(0, (24), 1) - else: - return two_first - - -# change the upgrade job to start on a random time -def change_crontabs(): - mac = get_mac_adress() - minute = get_random_minute(mac) - hour = get_random_hour(mac) - cron = CronTab(tabfile='/etc/crontab') - cmd = "root test -x /usr/sbin/anacron ||" \ - "( cd / && run-parts --report /etc/cron.daily )" - # need to change anacron tab to guarante it will run on the right time - anacron = CronTab(tabfile='/etc/cron.d/anacron') - cmd2 = "test -x /etc/init.d/anacron &&" \ - "/usr/sbin/invoke-rc.d anacron start >/dev/null" - # remove old daily update time - cron.remove_all(command='( cd / && run-parts --report /etc/cron.daily )') - anacron.remove_all(command='test -x /etc/init.d/anacron') - # create the new job on crontab - job = cron.new(command=cmd) - job.minute.on(minute) - job.hour.on(hour) - job.enable() - cron.write() - # create the new job on anacron - job2 = anacron.new(cmd2) - job2.minute.on(minute) - job2.hour.on(hour + 1) - job2.enable() - anacron.write() - - -change_crontabs() diff --git a/package/test/data/listchanges.conf.mail b/package/test/data/listchanges.conf.mail deleted file mode 100644 index 8b598c0a3780e05a05adab894ec14c393ce35c09..0000000000000000000000000000000000000000 --- a/package/test/data/listchanges.conf.mail +++ /dev/null @@ -1,6 +0,0 @@ -[apt] -frontend=mail -email_address=root -confirm=0 -save_seen=/var/lib/apt/listchanges.db -which=both diff --git a/package/test/data/listchanges.conf.pager b/package/test/data/listchanges.conf.pager deleted file mode 100644 index df97c6b177384a40e95616f7e88f84d5f9872e24..0000000000000000000000000000000000000000 --- a/package/test/data/listchanges.conf.pager +++ /dev/null @@ -1,6 +0,0 @@ -[apt] -frontend=pager -email_address=root -confirm=0 -save_seen=/var/lib/apt/listchanges.db -which=both diff --git a/package/test/mock-mail b/package/test/mock-mail deleted file mode 100755 index 09eac3bb63760e8e26d412490d76587b61b1b57c..0000000000000000000000000000000000000000 --- a/package/test/mock-mail +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -echo "From: $2" > mail.txt -echo "Subject: $4" >> mail.txt -cat - -- >> mail.txt diff --git a/package/test/mock-sendmail b/package/test/mock-sendmail deleted file mode 100755 index 1d5d6a4dff0bebec09d39df83f402e4bee2a5f47..0000000000000000000000000000000000000000 --- a/package/test/mock-sendmail +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -cat - -- > mail.txt diff --git a/package/test/packages/conf-test-package-257-conffiles_1.deb b/package/test/packages/conf-test-package-257-conffiles_1.deb deleted file mode 100644 index 011197a430acc7693d0db9fbdafd57dfd55934b5..0000000000000000000000000000000000000000 Binary files a/package/test/packages/conf-test-package-257-conffiles_1.deb and /dev/null differ diff --git a/package/test/packages/conf-test-package-new-conffile_1.deb b/package/test/packages/conf-test-package-new-conffile_1.deb deleted file mode 100644 index 651655be020b858a02605e4775cd32d65915b7f7..0000000000000000000000000000000000000000 Binary files a/package/test/packages/conf-test-package-new-conffile_1.deb and /dev/null differ diff --git a/package/test/packages/conf-test-package-no-conffiles-anymore_2.deb b/package/test/packages/conf-test-package-no-conffiles-anymore_2.deb deleted file mode 100644 index c1fc018ff1b43be18c5c0418afb68b9d67761fa5..0000000000000000000000000000000000000000 Binary files a/package/test/packages/conf-test-package-no-conffiles-anymore_2.deb and /dev/null differ diff --git a/package/test/packages/conf-test-package_1.0.deb b/package/test/packages/conf-test-package_1.0.deb deleted file mode 100644 index 53bf73bf33c27a1bb4727495fb5325eb4659825b..0000000000000000000000000000000000000000 Binary files a/package/test/packages/conf-test-package_1.0.deb and /dev/null differ diff --git a/package/test/packages/conf-test-package_1.1.deb b/package/test/packages/conf-test-package_1.1.deb deleted file mode 100644 index 6d0d8a51602221f75563a9d78c928ac0db86e5b1..0000000000000000000000000000000000000000 Binary files a/package/test/packages/conf-test-package_1.1.deb and /dev/null differ diff --git a/package/test/packages/conf-test-xz_1.0_all.deb b/package/test/packages/conf-test-xz_1.0_all.deb deleted file mode 100644 index 67f637b6f1f2c642c03ab291e373be618d1855ec..0000000000000000000000000000000000000000 Binary files a/package/test/packages/conf-test-xz_1.0_all.deb and /dev/null differ diff --git a/package/test/packages/multiple-conffiles_1_all.deb b/package/test/packages/multiple-conffiles_1_all.deb deleted file mode 100644 index 76d2b2032ef67ee127fbeb02eb47eaa1872ddab1..0000000000000000000000000000000000000000 Binary files a/package/test/packages/multiple-conffiles_1_all.deb and /dev/null differ diff --git a/package/test/packages/multiple-conffiles_2_all.deb b/package/test/packages/multiple-conffiles_2_all.deb deleted file mode 100644 index 932f298fe2a224db0014525f6fd73d1a3c235f26..0000000000000000000000000000000000000000 Binary files a/package/test/packages/multiple-conffiles_2_all.deb and /dev/null differ diff --git a/package/test/root.conffile/etc/configuration-file b/package/test/root.conffile/etc/configuration-file deleted file mode 100644 index e880f30578bb9549c4e65cc08868adfa6ed241ed..0000000000000000000000000000000000000000 --- a/package/test/root.conffile/etc/configuration-file +++ /dev/null @@ -1,3 +0,0 @@ -This is a configuration file, -dfasddfasdff -No really. diff --git a/package/test/root.conffile/etc/configuration-file1 b/package/test/root.conffile/etc/configuration-file1 deleted file mode 100644 index 95d30c6ce8a3ff0df1fb3b26ba09f3f3fc435c43..0000000000000000000000000000000000000000 --- a/package/test/root.conffile/etc/configuration-file1 +++ /dev/null @@ -1,3 +0,0 @@ -This is a first configuration file, - -No really. diff --git a/package/test/root.conffile/etc/configuration-file2 b/package/test/root.conffile/etc/configuration-file2 deleted file mode 100644 index 6546a41be1cb175df131158c415af4bbff469259..0000000000000000000000000000000000000000 --- a/package/test/root.conffile/etc/configuration-file2 +++ /dev/null @@ -1,3 +0,0 @@ -This is a second configuration file, - -It is modified by the user. by the user. diff --git a/package/test/root.conffile/etc/configuration-file5 b/package/test/root.conffile/etc/configuration-file5 deleted file mode 100644 index 224fd2305f3d10a5a2eab21008f85607d16275a7..0000000000000000000000000000000000000000 --- a/package/test/root.conffile/etc/configuration-file5 +++ /dev/null @@ -1 +0,0 @@ -lala diff --git a/package/test/root.conffile/var/lib/dpkg/status b/package/test/root.conffile/var/lib/dpkg/status deleted file mode 100644 index fb547abc462eca210e05555e079bcbb581a2037d..0000000000000000000000000000000000000000 --- a/package/test/root.conffile/var/lib/dpkg/status +++ /dev/null @@ -1,20 +0,0 @@ -Package: test-package -Status: install ok installed -Architecture: all -Version: 0.9 -Conffiles: - /etc/configuration-file 26b99d59ac8f5ecd3375107755ee8527 - /etc/configuration-file2 404d877bbd67dc2412ba80d7c92d6bc7 - -Package: multiple-conffiles -Status: install ok installed -Architecture: all -Version: 1.0 -Conffiles: - /etc/configuration-file1 cb9a458f0fdc96e10b4d23923f16e3a0 - /etc/configuration-file2 8bf10a884dcfe6a8c3e57039e14d2b92 - -Package: test-package-new-conffile -Status: install ok installed -Architecture: all -Version: 0.9 diff --git a/package/test/root.rewind/etc/apt/sources.list b/package/test/root.rewind/etc/apt/sources.list deleted file mode 100644 index 2329a7646c9da9631cdeee986fa43e01c3f8e7af..0000000000000000000000000000000000000000 --- a/package/test/root.rewind/etc/apt/sources.list +++ /dev/null @@ -1,2 +0,0 @@ -deb http://archive.ubuntu.com/ubuntu/ lucid-updates main -deb http://archive.ubuntu.com/ubuntu/ lucid-security main diff --git a/package/test/root.rewind/var/cache/apt/pkgcache.bin b/package/test/root.rewind/var/cache/apt/pkgcache.bin deleted file mode 100644 index ce9b3adbafd66db087d577c435bcf148f39ad3ff..0000000000000000000000000000000000000000 Binary files a/package/test/root.rewind/var/cache/apt/pkgcache.bin and /dev/null differ diff --git a/package/test/root.rewind/var/cache/apt/srcpkgcache.bin b/package/test/root.rewind/var/cache/apt/srcpkgcache.bin deleted file mode 100644 index aa2e17a60c992b58b349052e8c2604f8802923b1..0000000000000000000000000000000000000000 Binary files a/package/test/root.rewind/var/cache/apt/srcpkgcache.bin and /dev/null differ diff --git a/package/test/root.rewind/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-security_Release b/package/test/root.rewind/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-security_Release deleted file mode 100644 index 98a75a229ef351eb0c4d06f9527832a00b9f7591..0000000000000000000000000000000000000000 --- a/package/test/root.rewind/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-security_Release +++ /dev/null @@ -1,13 +0,0 @@ -Origin: Ubuntu -Label: Ubuntu -Suite: lucid-security -Version: 10.04 -Codename: lucid -Date: Tue, 08 Apr 2014 6:19:06 UTC -Architectures: amd64 arm64 armhf i386 powerpc ppc64el -Components: main restricted universe multiverse -Description: Ubuntu Lucid 12.04 -MD5Sum: - 3a6b95734cc916b62d6d50e654bda9c3 8341434 main/binary-amd64/Packages -SHA1: - 33cf496dc33f5c22c16e007f60a5b1be9481be48 116140 main/binary-amd64/Packages diff --git a/package/test/root.rewind/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-security_Release.gpg b/package/test/root.rewind/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-security_Release.gpg deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/package/test/root.rewind/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-security_main_binary-amd64_Packages b/package/test/root.rewind/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-security_main_binary-amd64_Packages deleted file mode 100644 index 641a001fffb1489e63aab126efb286e405f49884..0000000000000000000000000000000000000000 --- a/package/test/root.rewind/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-security_main_binary-amd64_Packages +++ /dev/null @@ -1,19 +0,0 @@ -Package: test-package -Architecture: all -Version: 2.0 -Depends: test-package-dependency -Description-en: test package -Filename: ./test-package_2.0_all.deb - -Package: test-package-dependency -Architecture: all -Version: 1.0 -Description-en: test package 2 -Filename: ./test-package-dependency_1.0_all.deb - -Package: z-package -Architecture: all -Version: 1.0 -Depends: forbidden-dependency -Description-en: test package with a forbidden dependency -Filename: ./z-package_1.0_all.deb \ No newline at end of file diff --git a/package/test/root.rewind/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-updates_Release b/package/test/root.rewind/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-updates_Release deleted file mode 100644 index 3e1983b8315169c1c2e748d9f53c8f33060fbc29..0000000000000000000000000000000000000000 --- a/package/test/root.rewind/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-updates_Release +++ /dev/null @@ -1,13 +0,0 @@ -Origin: Ubuntu -Label: Ubuntu -Suite: lucid-updates -Version: 10.04 -Codename: lucid -Date: Tue, 08 Apr 2014 6:19:06 UTC -Architectures: amd64 arm64 armhf i386 powerpc ppc64el -Components: main restricted universe multiverse -Description: Ubuntu Lucid 12.04 -MD5Sum: - 3a6b95734cc916b62d6d50e654bda9c3 8341434 main/binary-amd64/Packages -SHA1: - 33cf496dc33f5c22c16e007f60a5b1be9481be48 116140 main/binary-amd64/Packages diff --git a/package/test/root.rewind/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-updates_Release.gpg b/package/test/root.rewind/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-updates_Release.gpg deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/package/test/root.rewind/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-updates_main_binary-amd64_Packages b/package/test/root.rewind/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-updates_main_binary-amd64_Packages deleted file mode 100644 index 1475c1339a8c2019279838b729bc83dbd47ee453..0000000000000000000000000000000000000000 --- a/package/test/root.rewind/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-updates_main_binary-amd64_Packages +++ /dev/null @@ -1,4 +0,0 @@ -Package: forbidden-dependency -Architecture: all -Version: 2.0 -Description-en: forbidden dependency package diff --git a/package/test/root.rewind/var/lib/apt/periodic/unattended-upgrades-stamp b/package/test/root.rewind/var/lib/apt/periodic/unattended-upgrades-stamp deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/package/test/root.rewind/var/lib/dpkg/status b/package/test/root.rewind/var/lib/dpkg/status deleted file mode 100644 index f4253cd9bc8af0ebaf390ac73ebb6cd1b62b8ac2..0000000000000000000000000000000000000000 --- a/package/test/root.rewind/var/lib/dpkg/status +++ /dev/null @@ -1,9 +0,0 @@ -Package: test-package -Status: install ok installed -Architecture: all -Version: 1.0 - -Package: z-package -Status: install ok installed -Architecture: all -Version: 1.0 diff --git a/package/test/root.untrusted/etc/apt/apt.conf b/package/test/root.untrusted/etc/apt/apt.conf deleted file mode 100644 index c6b56aef3163ba0b2447eb1415277933534dd747..0000000000000000000000000000000000000000 --- a/package/test/root.untrusted/etc/apt/apt.conf +++ /dev/null @@ -1,3 +0,0 @@ -Unattended-Upgrade::Allowed-Origins { - "Ubuntu:lucid-security"; -}; diff --git a/package/test/root.untrusted/etc/apt/sources.list b/package/test/root.untrusted/etc/apt/sources.list deleted file mode 100644 index 2329a7646c9da9631cdeee986fa43e01c3f8e7af..0000000000000000000000000000000000000000 --- a/package/test/root.untrusted/etc/apt/sources.list +++ /dev/null @@ -1,2 +0,0 @@ -deb http://archive.ubuntu.com/ubuntu/ lucid-updates main -deb http://archive.ubuntu.com/ubuntu/ lucid-security main diff --git a/package/test/root.untrusted/var/cache/apt/archives/test-package_2.0_all.deb b/package/test/root.untrusted/var/cache/apt/archives/test-package_2.0_all.deb deleted file mode 100644 index 53bf73bf33c27a1bb4727495fb5325eb4659825b..0000000000000000000000000000000000000000 Binary files a/package/test/root.untrusted/var/cache/apt/archives/test-package_2.0_all.deb and /dev/null differ diff --git a/package/test/root.untrusted/var/cache/apt/pkgcache.bin b/package/test/root.untrusted/var/cache/apt/pkgcache.bin deleted file mode 100644 index 01e592f748738436fcbc289e97299203b46ccfbd..0000000000000000000000000000000000000000 Binary files a/package/test/root.untrusted/var/cache/apt/pkgcache.bin and /dev/null differ diff --git a/package/test/root.untrusted/var/cache/apt/srcpkgcache.bin b/package/test/root.untrusted/var/cache/apt/srcpkgcache.bin deleted file mode 100644 index a8f07b889862b61a5f8c54286a05d60716fa1099..0000000000000000000000000000000000000000 Binary files a/package/test/root.untrusted/var/cache/apt/srcpkgcache.bin and /dev/null differ diff --git a/package/test/root.untrusted/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-security_Release b/package/test/root.untrusted/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-security_Release deleted file mode 100644 index 98a75a229ef351eb0c4d06f9527832a00b9f7591..0000000000000000000000000000000000000000 --- a/package/test/root.untrusted/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-security_Release +++ /dev/null @@ -1,13 +0,0 @@ -Origin: Ubuntu -Label: Ubuntu -Suite: lucid-security -Version: 10.04 -Codename: lucid -Date: Tue, 08 Apr 2014 6:19:06 UTC -Architectures: amd64 arm64 armhf i386 powerpc ppc64el -Components: main restricted universe multiverse -Description: Ubuntu Lucid 12.04 -MD5Sum: - 3a6b95734cc916b62d6d50e654bda9c3 8341434 main/binary-amd64/Packages -SHA1: - 33cf496dc33f5c22c16e007f60a5b1be9481be48 116140 main/binary-amd64/Packages diff --git a/package/test/root.untrusted/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-security_main_binary-amd64_Packages b/package/test/root.untrusted/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-security_main_binary-amd64_Packages deleted file mode 100644 index 1f6341a46082ba13b160f65b196badcf7bed20b5..0000000000000000000000000000000000000000 --- a/package/test/root.untrusted/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-security_main_binary-amd64_Packages +++ /dev/null @@ -1,8 +0,0 @@ -Package: test-package -Architecture: all -Version: 2.0 -Description-en: test package -Filename: test-package_2.0_all.deb -SHA256: 01704da7de63ca12109abff5c2c480ad9c757e669c4428424de23ec97bf24248 -Size: 624 - diff --git a/package/test/root.untrusted/var/lib/apt/periodic/unattended-upgrades-stamp b/package/test/root.untrusted/var/lib/apt/periodic/unattended-upgrades-stamp deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/package/test/root.untrusted/var/lib/dpkg/lock b/package/test/root.untrusted/var/lib/dpkg/lock deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/package/test/root.untrusted/var/lib/dpkg/status b/package/test/root.untrusted/var/lib/dpkg/status deleted file mode 100644 index 9ce6a56c32445649bbe4b32dc976aa9ce8f65264..0000000000000000000000000000000000000000 --- a/package/test/root.untrusted/var/lib/dpkg/status +++ /dev/null @@ -1,14 +0,0 @@ -Package: test-package -Status: install ok installed -Architecture: all -Version: 1.0 - -Package: test-package-dependency -Status: install ok installed -Architecture: all -Version: 1.0 - -Package: z-package -Status: install ok installed -Architecture: all -Version: 1.0 diff --git a/package/test/root.untrusted/var/lib/dpkg/updates/.placeholder b/package/test/root.untrusted/var/lib/dpkg/updates/.placeholder deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/package/test/root.unused-deps/etc/apt/apt.conf b/package/test/root.unused-deps/etc/apt/apt.conf deleted file mode 100644 index 1248c03f370527202b9f3475bb8677b374142d98..0000000000000000000000000000000000000000 --- a/package/test/root.unused-deps/etc/apt/apt.conf +++ /dev/null @@ -1,6 +0,0 @@ - -Unattended-Upgrade::Keep-Debs-After-Install "true"; -Unattended-Upgrade::Allowed-Origins { - "Ubuntu:lucid-security"; -}; -Unattended-Upgrade::Remove-New-Unused-Dependencies "true"; diff --git a/package/test/root.unused-deps/etc/apt/sources.list b/package/test/root.unused-deps/etc/apt/sources.list deleted file mode 100644 index 2329a7646c9da9631cdeee986fa43e01c3f8e7af..0000000000000000000000000000000000000000 --- a/package/test/root.unused-deps/etc/apt/sources.list +++ /dev/null @@ -1,2 +0,0 @@ -deb http://archive.ubuntu.com/ubuntu/ lucid-updates main -deb http://archive.ubuntu.com/ubuntu/ lucid-security main diff --git a/package/test/root.unused-deps/usr/bin/dpkg b/package/test/root.unused-deps/usr/bin/dpkg deleted file mode 100755 index f233e3372e3b5928e2976482c1baac1272b7fa5c..0000000000000000000000000000000000000000 --- a/package/test/root.unused-deps/usr/bin/dpkg +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/python - -import os -import sys -import subprocess - -if __name__ == "__main__": - if "--unpack" in sys.argv: - dpkg_status = os.path.join( - os.path.dirname(sys.argv[0]), "..", "..", - "var", "lib", "dpkg", "status") - # pretend a new version without the previous dependency got installed - subprocess.check_call( - ["sed", "-i", "/Depends:\ test-package-dependency/d", dpkg_status]) - subprocess.check_call( - ["sed", "-i", "s/1.0.test.pkg/2.0.test.pkg/", dpkg_status]) diff --git a/package/test/root.unused-deps/var/cache/apt/archives/lock b/package/test/root.unused-deps/var/cache/apt/archives/lock deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/package/test/root.unused-deps/var/cache/apt/archives/test-package-dependency_1.0_all.deb b/package/test/root.unused-deps/var/cache/apt/archives/test-package-dependency_1.0_all.deb deleted file mode 100644 index 53bf73bf33c27a1bb4727495fb5325eb4659825b..0000000000000000000000000000000000000000 Binary files a/package/test/root.unused-deps/var/cache/apt/archives/test-package-dependency_1.0_all.deb and /dev/null differ diff --git a/package/test/root.unused-deps/var/cache/apt/archives/test-package_2.0_all.deb b/package/test/root.unused-deps/var/cache/apt/archives/test-package_2.0_all.deb deleted file mode 100644 index 53bf73bf33c27a1bb4727495fb5325eb4659825b..0000000000000000000000000000000000000000 Binary files a/package/test/root.unused-deps/var/cache/apt/archives/test-package_2.0_all.deb and /dev/null differ diff --git a/package/test/root.unused-deps/var/cache/apt/pkgcache.bin b/package/test/root.unused-deps/var/cache/apt/pkgcache.bin deleted file mode 100644 index a2374918248ec632cbba712cf159a8ea53e80c2e..0000000000000000000000000000000000000000 Binary files a/package/test/root.unused-deps/var/cache/apt/pkgcache.bin and /dev/null differ diff --git a/package/test/root.unused-deps/var/cache/apt/srcpkgcache.bin b/package/test/root.unused-deps/var/cache/apt/srcpkgcache.bin deleted file mode 100644 index 1b1befdbdf5aa8103e933974049fd9f4c5021bde..0000000000000000000000000000000000000000 Binary files a/package/test/root.unused-deps/var/cache/apt/srcpkgcache.bin and /dev/null differ diff --git a/package/test/root.unused-deps/var/lib/apt/extended_states b/package/test/root.unused-deps/var/lib/apt/extended_states deleted file mode 100644 index 244990bddb0415764bf6c7dc5d70f1d30ce69d60..0000000000000000000000000000000000000000 --- a/package/test/root.unused-deps/var/lib/apt/extended_states +++ /dev/null @@ -1,8 +0,0 @@ - -Package: old-unused-dependency -Architecture: all -Auto-Installed: 1 - -Package: test-package-dependency -Architecture: all -Auto-Installed: 1 diff --git a/package/test/root.unused-deps/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-security_Release b/package/test/root.unused-deps/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-security_Release deleted file mode 100644 index 98a75a229ef351eb0c4d06f9527832a00b9f7591..0000000000000000000000000000000000000000 --- a/package/test/root.unused-deps/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-security_Release +++ /dev/null @@ -1,13 +0,0 @@ -Origin: Ubuntu -Label: Ubuntu -Suite: lucid-security -Version: 10.04 -Codename: lucid -Date: Tue, 08 Apr 2014 6:19:06 UTC -Architectures: amd64 arm64 armhf i386 powerpc ppc64el -Components: main restricted universe multiverse -Description: Ubuntu Lucid 12.04 -MD5Sum: - 3a6b95734cc916b62d6d50e654bda9c3 8341434 main/binary-amd64/Packages -SHA1: - 33cf496dc33f5c22c16e007f60a5b1be9481be48 116140 main/binary-amd64/Packages diff --git a/package/test/root.unused-deps/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-security_Release.gpg b/package/test/root.unused-deps/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-security_Release.gpg deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/package/test/root.unused-deps/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-security_main_binary-amd64_Packages b/package/test/root.unused-deps/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-security_main_binary-amd64_Packages deleted file mode 100644 index e4b6475e6cf884e707fa179e4741edc8f3c6555b..0000000000000000000000000000000000000000 --- a/package/test/root.unused-deps/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-security_main_binary-amd64_Packages +++ /dev/null @@ -1,15 +0,0 @@ -Package: test-package -Architecture: all -Version: 2.0.test.pkg -Description-en: test package -Filename: test-package_2.0_all.deb -SHA256: 01704da7de63ca12109abff5c2c480ad9c757e669c4428424de23ec97bf24248 -Size: 624 - -Package: test-package-dependency -Architecture: all -Version: 1.0 -Description-en: test package 2 -Filename: test-package-dependency_1.0_all.deb -SHA256: 01704da7de63ca12109abff5c2c480ad9c757e669c4428424de23ec97bf24248 -Size: 624 diff --git a/package/test/root.unused-deps/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-updates_Release b/package/test/root.unused-deps/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-updates_Release deleted file mode 100644 index 3e1983b8315169c1c2e748d9f53c8f33060fbc29..0000000000000000000000000000000000000000 --- a/package/test/root.unused-deps/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-updates_Release +++ /dev/null @@ -1,13 +0,0 @@ -Origin: Ubuntu -Label: Ubuntu -Suite: lucid-updates -Version: 10.04 -Codename: lucid -Date: Tue, 08 Apr 2014 6:19:06 UTC -Architectures: amd64 arm64 armhf i386 powerpc ppc64el -Components: main restricted universe multiverse -Description: Ubuntu Lucid 12.04 -MD5Sum: - 3a6b95734cc916b62d6d50e654bda9c3 8341434 main/binary-amd64/Packages -SHA1: - 33cf496dc33f5c22c16e007f60a5b1be9481be48 116140 main/binary-amd64/Packages diff --git a/package/test/root.unused-deps/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-updates_Release.gpg b/package/test/root.unused-deps/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-updates_Release.gpg deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/package/test/root.unused-deps/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-updates_main_binary-amd64_Packages b/package/test/root.unused-deps/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-updates_main_binary-amd64_Packages deleted file mode 100644 index 1475c1339a8c2019279838b729bc83dbd47ee453..0000000000000000000000000000000000000000 --- a/package/test/root.unused-deps/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-updates_main_binary-amd64_Packages +++ /dev/null @@ -1,4 +0,0 @@ -Package: forbidden-dependency -Architecture: all -Version: 2.0 -Description-en: forbidden dependency package diff --git a/package/test/root.unused-deps/var/lib/apt/periodic/unattended-upgrades-stamp b/package/test/root.unused-deps/var/lib/apt/periodic/unattended-upgrades-stamp deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/package/test/root.unused-deps/var/lib/dpkg/lock b/package/test/root.unused-deps/var/lib/dpkg/lock deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/package/test/root.unused-deps/var/lib/dpkg/status b/package/test/root.unused-deps/var/lib/dpkg/status deleted file mode 100644 index 777527bf5347a613ecd1989c2e33df6aa0a5a558..0000000000000000000000000000000000000000 --- a/package/test/root.unused-deps/var/lib/dpkg/status +++ /dev/null @@ -1,20 +0,0 @@ -Package: test-package -Status: install ok installed -Architecture: all -Version: 1.0.test.pkg -Depends: test-package-dependency - -Package: test-package-dependency -Status: install ok installed -Architecture: all -Version: 1.0 - -Package: z-package -Status: install ok installed -Architecture: all -Version: 1.0 - -Package: old-unused-dependency -Status: install ok installed -Architecture: all -Version: 1.0 diff --git a/package/test/root.unused-deps/var/lib/dpkg/updates/.placeholder b/package/test/root.unused-deps/var/lib/dpkg/updates/.placeholder deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/package/test/root.unused-deps/var/log/apt/history.log b/package/test/root.unused-deps/var/log/apt/history.log deleted file mode 100644 index 9d35e9f7063da9f70a201554d531cf86bd1f6a1c..0000000000000000000000000000000000000000 --- a/package/test/root.unused-deps/var/log/apt/history.log +++ /dev/null @@ -1,384 +0,0 @@ - -Start-Date: 2016-02-18 14:20:07 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-02-18 14:20:07 - -Start-Date: 2016-02-18 14:20:08 -Remove: old-unused-dependency:amd64 (1.0), test-package-dependency:amd64 (1.0) -End-Date: 2016-02-18 14:20:08 - -Start-Date: 2016-02-18 14:20:11 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-02-18 14:20:11 - -Start-Date: 2016-02-18 14:20:11 -Remove: test-package-dependency:amd64 (1.0) -End-Date: 2016-02-18 14:20:11 - -Start-Date: 2016-02-18 14:20:15 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-02-18 14:20:15 - -Start-Date: 2016-02-18 14:20:15 -Remove: old-unused-dependency:amd64 (1.0), test-package-dependency:amd64 (1.0) -End-Date: 2016-02-18 14:20:15 - -Start-Date: 2016-02-18 14:20:18 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-02-18 14:20:19 - -Start-Date: 2016-02-18 14:20:19 -Remove: test-package-dependency:amd64 (1.0) -End-Date: 2016-02-18 14:20:19 - -Start-Date: 2016-11-07 11:00:28 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:00:28 - -Start-Date: 2016-11-07 11:00:28 -Remove: test-package-dependency:amd64 (1.0), old-unused-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:00:28 - -Start-Date: 2016-11-07 11:00:29 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:00:29 - -Start-Date: 2016-11-07 11:00:29 -Remove: test-package-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:00:29 - -Start-Date: 2016-11-07 11:00:30 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:00:30 - -Start-Date: 2016-11-07 11:00:30 -Remove: test-package-dependency:amd64 (1.0), old-unused-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:00:30 - -Start-Date: 2016-11-07 11:00:30 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:00:30 - -Start-Date: 2016-11-07 11:00:31 -Remove: test-package-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:00:31 - -Start-Date: 2016-11-07 11:07:01 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:07:01 - -Start-Date: 2016-11-07 11:07:01 -Remove: test-package-dependency:amd64 (1.0), old-unused-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:07:01 - -Start-Date: 2016-11-07 11:07:02 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:07:02 - -Start-Date: 2016-11-07 11:07:02 -Remove: test-package-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:07:02 - -Start-Date: 2016-11-07 11:07:03 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:07:03 - -Start-Date: 2016-11-07 11:07:03 -Remove: test-package-dependency:amd64 (1.0), old-unused-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:07:03 - -Start-Date: 2016-11-07 11:07:03 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:07:03 - -Start-Date: 2016-11-07 11:07:04 -Remove: test-package-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:07:04 - -Start-Date: 2016-11-07 11:07:52 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:07:52 - -Start-Date: 2016-11-07 11:07:52 -Remove: test-package-dependency:amd64 (1.0), old-unused-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:07:52 - -Start-Date: 2016-11-07 11:07:52 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:07:52 - -Start-Date: 2016-11-07 11:07:53 -Remove: test-package-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:07:53 - -Start-Date: 2016-11-07 11:07:53 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:07:53 - -Start-Date: 2016-11-07 11:07:54 -Remove: test-package-dependency:amd64 (1.0), old-unused-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:07:54 - -Start-Date: 2016-11-07 11:07:54 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:07:54 - -Start-Date: 2016-11-07 11:07:54 -Remove: test-package-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:07:54 - -Start-Date: 2016-11-07 11:11:36 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:11:36 - -Start-Date: 2016-11-07 11:11:36 -Remove: test-package-dependency:amd64 (1.0), old-unused-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:11:36 - -Start-Date: 2016-11-07 11:11:36 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:11:36 - -Start-Date: 2016-11-07 11:11:37 -Remove: test-package-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:11:37 - -Start-Date: 2016-11-07 11:11:37 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:11:37 - -Start-Date: 2016-11-07 11:11:38 -Remove: test-package-dependency:amd64 (1.0), old-unused-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:11:38 - -Start-Date: 2016-11-07 11:11:38 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:11:38 - -Start-Date: 2016-11-07 11:11:38 -Remove: test-package-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:11:38 - -Start-Date: 2016-11-07 11:12:12 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:12:12 - -Start-Date: 2016-11-07 11:12:12 -Remove: test-package-dependency:amd64 (1.0), old-unused-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:12:12 - -Start-Date: 2016-11-07 11:12:13 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:12:13 - -Start-Date: 2016-11-07 11:12:13 -Remove: test-package-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:12:13 - -Start-Date: 2016-11-07 11:12:14 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:12:14 - -Start-Date: 2016-11-07 11:12:14 -Remove: test-package-dependency:amd64 (1.0), old-unused-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:12:14 - -Start-Date: 2016-11-07 11:12:14 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:12:15 - -Start-Date: 2016-11-07 11:12:15 -Remove: test-package-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:12:15 - -Start-Date: 2016-11-07 11:13:27 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:13:27 - -Start-Date: 2016-11-07 11:13:28 -Remove: test-package-dependency:amd64 (1.0), old-unused-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:13:28 - -Start-Date: 2016-11-07 11:13:28 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:13:28 - -Start-Date: 2016-11-07 11:13:28 -Remove: test-package-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:13:28 - -Start-Date: 2016-11-07 11:13:29 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:13:29 - -Start-Date: 2016-11-07 11:13:29 -Remove: test-package-dependency:amd64 (1.0), old-unused-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:13:29 - -Start-Date: 2016-11-07 11:13:30 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:13:30 - -Start-Date: 2016-11-07 11:13:30 -Remove: test-package-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:13:30 - -Start-Date: 2016-11-07 11:17:46 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:17:46 - -Start-Date: 2016-11-07 11:17:46 -Remove: test-package-dependency:amd64 (1.0), old-unused-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:17:46 - -Start-Date: 2016-11-07 11:17:47 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:17:47 - -Start-Date: 2016-11-07 11:17:47 -Remove: test-package-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:17:47 - -Start-Date: 2016-11-07 11:17:48 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:17:48 - -Start-Date: 2016-11-07 11:17:48 -Remove: test-package-dependency:amd64 (1.0), old-unused-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:17:48 - -Start-Date: 2016-11-07 11:17:48 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:17:49 - -Start-Date: 2016-11-07 11:17:49 -Remove: test-package-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:17:49 - -Start-Date: 2016-11-07 11:18:24 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:18:24 - -Start-Date: 2016-11-07 11:18:24 -Remove: test-package-dependency:amd64 (1.0), old-unused-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:18:25 - -Start-Date: 2016-11-07 11:18:25 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:18:25 - -Start-Date: 2016-11-07 11:18:25 -Remove: test-package-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:18:25 - -Start-Date: 2016-11-07 11:18:26 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:18:26 - -Start-Date: 2016-11-07 11:18:26 -Remove: test-package-dependency:amd64 (1.0), old-unused-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:18:26 - -Start-Date: 2016-11-07 11:18:27 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:18:27 - -Start-Date: 2016-11-07 11:18:27 -Remove: test-package-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:18:27 - -Start-Date: 2016-11-07 11:19:10 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:19:10 - -Start-Date: 2016-11-07 11:19:10 -Remove: test-package-dependency:amd64 (1.0), old-unused-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:19:10 - -Start-Date: 2016-11-07 11:19:10 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:19:10 - -Start-Date: 2016-11-07 11:19:11 -Remove: test-package-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:19:11 - -Start-Date: 2016-11-07 11:19:11 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:19:12 - -Start-Date: 2016-11-07 11:19:12 -Remove: test-package-dependency:amd64 (1.0), old-unused-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:19:12 - -Start-Date: 2016-11-07 11:19:12 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:19:12 - -Start-Date: 2016-11-07 11:19:12 -Remove: test-package-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:19:12 - -Start-Date: 2016-11-07 11:22:56 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:22:56 - -Start-Date: 2016-11-07 11:22:56 -Remove: test-package-dependency:amd64 (1.0), old-unused-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:22:56 - -Start-Date: 2016-11-07 11:22:57 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:22:57 - -Start-Date: 2016-11-07 11:22:57 -Remove: test-package-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:22:57 - -Start-Date: 2016-11-07 11:22:58 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:22:58 - -Start-Date: 2016-11-07 11:22:58 -Remove: test-package-dependency:amd64 (1.0), old-unused-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:22:58 - -Start-Date: 2016-11-07 11:22:58 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:22:58 - -Start-Date: 2016-11-07 11:22:59 -Remove: test-package-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:22:59 - -Start-Date: 2016-11-07 11:26:37 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:26:38 - -Start-Date: 2016-11-07 11:26:38 -Remove: test-package-dependency:amd64 (1.0), old-unused-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:26:38 - -Start-Date: 2016-11-07 11:26:38 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:26:38 - -Start-Date: 2016-11-07 11:26:39 -Remove: test-package-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:26:39 - -Start-Date: 2016-11-07 11:26:39 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:26:39 - -Start-Date: 2016-11-07 11:26:40 -Remove: test-package-dependency:amd64 (1.0), old-unused-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:26:40 - -Start-Date: 2016-11-07 11:26:40 -Upgrade: test-package:amd64 (1.0.test.pkg, 2.0.test.pkg) -End-Date: 2016-11-07 11:26:40 - -Start-Date: 2016-11-07 11:26:40 -Remove: test-package-dependency:amd64 (1.0) -End-Date: 2016-11-07 11:26:40 diff --git a/package/test/root.unused-deps/var/log/apt/term.log b/package/test/root.unused-deps/var/log/apt/term.log deleted file mode 100644 index 0c77de3918025772f6d1b4a1fab05d465d8cda7f..0000000000000000000000000000000000000000 --- a/package/test/root.unused-deps/var/log/apt/term.log +++ /dev/null @@ -1,288 +0,0 @@ - -Log started: 2016-02-18 14:20:07 -Log ended: 2016-02-18 14:20:07 - -Log started: 2016-02-18 14:20:08 -Log ended: 2016-02-18 14:20:08 - -Log started: 2016-02-18 14:20:11 -Log ended: 2016-02-18 14:20:11 - -Log started: 2016-02-18 14:20:11 -Log ended: 2016-02-18 14:20:11 - -Log started: 2016-02-18 14:20:15 -Log ended: 2016-02-18 14:20:15 - -Log started: 2016-02-18 14:20:15 -Log ended: 2016-02-18 14:20:15 - -Log started: 2016-02-18 14:20:18 -Log ended: 2016-02-18 14:20:19 - -Log started: 2016-02-18 14:20:19 -Log ended: 2016-02-18 14:20:19 - -Log started: 2016-11-07 11:00:28 -Log ended: 2016-11-07 11:00:28 - -Log started: 2016-11-07 11:00:28 -Log ended: 2016-11-07 11:00:28 - -Log started: 2016-11-07 11:00:29 -Log ended: 2016-11-07 11:00:29 - -Log started: 2016-11-07 11:00:29 -Log ended: 2016-11-07 11:00:29 - -Log started: 2016-11-07 11:00:30 -Log ended: 2016-11-07 11:00:30 - -Log started: 2016-11-07 11:00:30 -Log ended: 2016-11-07 11:00:30 - -Log started: 2016-11-07 11:00:30 -Log ended: 2016-11-07 11:00:30 - -Log started: 2016-11-07 11:00:31 -Log ended: 2016-11-07 11:00:31 - -Log started: 2016-11-07 11:07:01 -Log ended: 2016-11-07 11:07:01 - -Log started: 2016-11-07 11:07:01 -Log ended: 2016-11-07 11:07:01 - -Log started: 2016-11-07 11:07:02 -Log ended: 2016-11-07 11:07:02 - -Log started: 2016-11-07 11:07:02 -Log ended: 2016-11-07 11:07:02 - -Log started: 2016-11-07 11:07:03 -Log ended: 2016-11-07 11:07:03 - -Log started: 2016-11-07 11:07:03 -Log ended: 2016-11-07 11:07:03 - -Log started: 2016-11-07 11:07:03 -Log ended: 2016-11-07 11:07:03 - -Log started: 2016-11-07 11:07:04 -Log ended: 2016-11-07 11:07:04 - -Log started: 2016-11-07 11:07:52 -Log ended: 2016-11-07 11:07:52 - -Log started: 2016-11-07 11:07:52 -Log ended: 2016-11-07 11:07:52 - -Log started: 2016-11-07 11:07:52 -Log ended: 2016-11-07 11:07:52 - -Log started: 2016-11-07 11:07:53 -Log ended: 2016-11-07 11:07:53 - -Log started: 2016-11-07 11:07:53 -Log ended: 2016-11-07 11:07:53 - -Log started: 2016-11-07 11:07:54 -Log ended: 2016-11-07 11:07:54 - -Log started: 2016-11-07 11:07:54 -Log ended: 2016-11-07 11:07:54 - -Log started: 2016-11-07 11:07:54 -Log ended: 2016-11-07 11:07:54 - -Log started: 2016-11-07 11:11:36 -Log ended: 2016-11-07 11:11:36 - -Log started: 2016-11-07 11:11:36 -Log ended: 2016-11-07 11:11:36 - -Log started: 2016-11-07 11:11:36 -Log ended: 2016-11-07 11:11:36 - -Log started: 2016-11-07 11:11:37 -Log ended: 2016-11-07 11:11:37 - -Log started: 2016-11-07 11:11:37 -Log ended: 2016-11-07 11:11:37 - -Log started: 2016-11-07 11:11:38 -Log ended: 2016-11-07 11:11:38 - -Log started: 2016-11-07 11:11:38 -Log ended: 2016-11-07 11:11:38 - -Log started: 2016-11-07 11:11:38 -Log ended: 2016-11-07 11:11:38 - -Log started: 2016-11-07 11:12:12 -Log ended: 2016-11-07 11:12:12 - -Log started: 2016-11-07 11:12:12 -Log ended: 2016-11-07 11:12:12 - -Log started: 2016-11-07 11:12:13 -Log ended: 2016-11-07 11:12:13 - -Log started: 2016-11-07 11:12:13 -Log ended: 2016-11-07 11:12:13 - -Log started: 2016-11-07 11:12:14 -Log ended: 2016-11-07 11:12:14 - -Log started: 2016-11-07 11:12:14 -Log ended: 2016-11-07 11:12:14 - -Log started: 2016-11-07 11:12:14 -Log ended: 2016-11-07 11:12:15 - -Log started: 2016-11-07 11:12:15 -Log ended: 2016-11-07 11:12:15 - -Log started: 2016-11-07 11:13:27 -Log ended: 2016-11-07 11:13:27 - -Log started: 2016-11-07 11:13:28 -Log ended: 2016-11-07 11:13:28 - -Log started: 2016-11-07 11:13:28 -Log ended: 2016-11-07 11:13:28 - -Log started: 2016-11-07 11:13:28 -Log ended: 2016-11-07 11:13:28 - -Log started: 2016-11-07 11:13:29 -Log ended: 2016-11-07 11:13:29 - -Log started: 2016-11-07 11:13:29 -Log ended: 2016-11-07 11:13:29 - -Log started: 2016-11-07 11:13:30 -Log ended: 2016-11-07 11:13:30 - -Log started: 2016-11-07 11:13:30 -Log ended: 2016-11-07 11:13:30 - -Log started: 2016-11-07 11:17:46 -Log ended: 2016-11-07 11:17:46 - -Log started: 2016-11-07 11:17:46 -Log ended: 2016-11-07 11:17:46 - -Log started: 2016-11-07 11:17:47 -Log ended: 2016-11-07 11:17:47 - -Log started: 2016-11-07 11:17:47 -Log ended: 2016-11-07 11:17:47 - -Log started: 2016-11-07 11:17:48 -Log ended: 2016-11-07 11:17:48 - -Log started: 2016-11-07 11:17:48 -Log ended: 2016-11-07 11:17:48 - -Log started: 2016-11-07 11:17:48 -Log ended: 2016-11-07 11:17:49 - -Log started: 2016-11-07 11:17:49 -Log ended: 2016-11-07 11:17:49 - -Log started: 2016-11-07 11:18:24 -Log ended: 2016-11-07 11:18:24 - -Log started: 2016-11-07 11:18:24 -Log ended: 2016-11-07 11:18:25 - -Log started: 2016-11-07 11:18:25 -Log ended: 2016-11-07 11:18:25 - -Log started: 2016-11-07 11:18:25 -Log ended: 2016-11-07 11:18:25 - -Log started: 2016-11-07 11:18:26 -Log ended: 2016-11-07 11:18:26 - -Log started: 2016-11-07 11:18:26 -Log ended: 2016-11-07 11:18:26 - -Log started: 2016-11-07 11:18:27 -Log ended: 2016-11-07 11:18:27 - -Log started: 2016-11-07 11:18:27 -Log ended: 2016-11-07 11:18:27 - -Log started: 2016-11-07 11:19:10 -Log ended: 2016-11-07 11:19:10 - -Log started: 2016-11-07 11:19:10 -Log ended: 2016-11-07 11:19:10 - -Log started: 2016-11-07 11:19:10 -Log ended: 2016-11-07 11:19:10 - -Log started: 2016-11-07 11:19:11 -Log ended: 2016-11-07 11:19:11 - -Log started: 2016-11-07 11:19:11 -Log ended: 2016-11-07 11:19:12 - -Log started: 2016-11-07 11:19:12 -Log ended: 2016-11-07 11:19:12 - -Log started: 2016-11-07 11:19:12 -Log ended: 2016-11-07 11:19:12 - -Log started: 2016-11-07 11:19:12 -Log ended: 2016-11-07 11:19:12 - -Log started: 2016-11-07 11:22:56 -Log ended: 2016-11-07 11:22:56 - -Log started: 2016-11-07 11:22:56 -Log ended: 2016-11-07 11:22:56 - -Log started: 2016-11-07 11:22:57 -Log ended: 2016-11-07 11:22:57 - -Log started: 2016-11-07 11:22:57 -Log ended: 2016-11-07 11:22:57 - -Log started: 2016-11-07 11:22:58 -Log ended: 2016-11-07 11:22:58 - -Log started: 2016-11-07 11:22:58 -Log ended: 2016-11-07 11:22:58 - -Log started: 2016-11-07 11:22:58 -Log ended: 2016-11-07 11:22:58 - -Log started: 2016-11-07 11:22:59 -Log ended: 2016-11-07 11:22:59 - -Log started: 2016-11-07 11:26:37 -Log ended: 2016-11-07 11:26:38 - -Log started: 2016-11-07 11:26:38 -Log ended: 2016-11-07 11:26:38 - -Log started: 2016-11-07 11:26:38 -Log ended: 2016-11-07 11:26:38 - -Log started: 2016-11-07 11:26:39 -Log ended: 2016-11-07 11:26:39 - -Log started: 2016-11-07 11:26:39 -Log ended: 2016-11-07 11:26:39 - -Log started: 2016-11-07 11:26:40 -Log ended: 2016-11-07 11:26:40 - -Log started: 2016-11-07 11:26:40 -Log ended: 2016-11-07 11:26:40 - -Log started: 2016-11-07 11:26:40 -Log ended: 2016-11-07 11:26:40 diff --git a/package/test/root.unused-deps/var/log/unattended-upgrades/unattended-upgrades-dpkg.log b/package/test/root.unused-deps/var/log/unattended-upgrades/unattended-upgrades-dpkg.log deleted file mode 100644 index 74d858c3c7f8d108c082446f22836a34071364c6..0000000000000000000000000000000000000000 --- a/package/test/root.unused-deps/var/log/unattended-upgrades/unattended-upgrades-dpkg.log +++ /dev/null @@ -1,345 +0,0 @@ -Log started: 2016-02-18 14:20:04 -debconf: DbDriver "passwords" warning: could not open /var/cache/debconf/passwords.dat: Permission denied -N: Ignoring file '50unattended-upgrades.ucf-dist' in directory '/etc/apt/apt.conf.d/' as it has an invalid filename extension -Log ended: 2016-02-18 14:20:08 - -Log started: 2016-02-18 14:20:08 -debconf: DbDriver "passwords" warning: could not open /var/cache/debconf/passwords.dat: Permission denied -Log ended: 2016-02-18 14:20:08 - -Log started: 2016-02-18 14:20:08 -debconf: DbDriver "passwords" warning: could not open /var/cache/debconf/passwords.dat: Permission denied -N: Ignoring file '50unattended-upgrades.ucf-dist' in directory '/etc/apt/apt.conf.d/' as it has an invalid filename extension -Log ended: 2016-02-18 14:20:11 - -Log started: 2016-02-18 14:20:11 -debconf: DbDriver "passwords" warning: could not open /var/cache/debconf/passwords.dat: Permission denied -Log ended: 2016-02-18 14:20:12 - -Log started: 2016-02-18 14:20:12 -debconf: DbDriver "passwords" warning: could not open /var/cache/debconf/passwords.dat: Permission denied -N: Ignoring file '50unattended-upgrades.ucf-dist' in directory '/etc/apt/apt.conf.d/' as it has an invalid filename extension -Log ended: 2016-02-18 14:20:15 - -Log started: 2016-02-18 14:20:15 -debconf: DbDriver "passwords" warning: could not open /var/cache/debconf/passwords.dat: Permission denied -Log ended: 2016-02-18 14:20:16 - -Log started: 2016-02-18 14:20:16 -debconf: DbDriver "passwords" warning: could not open /var/cache/debconf/passwords.dat: Permission denied -N: Ignoring file '50unattended-upgrades.ucf-dist' in directory '/etc/apt/apt.conf.d/' as it has an invalid filename extension -Log ended: 2016-02-18 14:20:19 - -Log started: 2016-02-18 14:20:19 -debconf: DbDriver "passwords" warning: could not open /var/cache/debconf/passwords.dat: Permission denied -Log ended: 2016-02-18 14:20:19 - -Log started: 2016-11-07 11:00:28 -Log ended: 2016-11-07 11:00:28 - -Log started: 2016-11-07 11:00:28 -Log ended: 2016-11-07 11:00:28 - -Log started: 2016-11-07 11:00:28 -Log ended: 2016-11-07 11:00:29 - -Log started: 2016-11-07 11:00:29 -Log ended: 2016-11-07 11:00:29 - -Log started: 2016-11-07 11:00:30 -Log ended: 2016-11-07 11:00:30 - -Log started: 2016-11-07 11:00:30 -Log ended: 2016-11-07 11:00:30 - -Log started: 2016-11-07 11:00:30 -Log ended: 2016-11-07 11:00:31 - -Log started: 2016-11-07 11:00:31 -Log ended: 2016-11-07 11:00:31 - -Log started: 2016-11-07 11:07:01 -Log ended: 2016-11-07 11:07:01 - -Log started: 2016-11-07 11:07:01 -Log ended: 2016-11-07 11:07:01 - -Log started: 2016-11-07 11:07:01 -Log ended: 2016-11-07 11:07:02 - -Log started: 2016-11-07 11:07:02 -Log ended: 2016-11-07 11:07:02 - -Log started: 2016-11-07 11:07:02 -Log ended: 2016-11-07 11:07:03 - -Log started: 2016-11-07 11:07:03 -Log ended: 2016-11-07 11:07:03 - -Log started: 2016-11-07 11:07:03 -Log ended: 2016-11-07 11:07:03 - -Log started: 2016-11-07 11:07:03 -Log ended: 2016-11-07 11:07:04 - -Log started: 2016-11-07 11:07:51 -Log ended: 2016-11-07 11:07:52 - -Log started: 2016-11-07 11:07:52 -Log ended: 2016-11-07 11:07:52 - -Log started: 2016-11-07 11:07:52 -Log ended: 2016-11-07 11:07:52 - -Log started: 2016-11-07 11:07:52 -Log ended: 2016-11-07 11:07:53 - -Log started: 2016-11-07 11:07:53 -Log ended: 2016-11-07 11:07:53 - -Log started: 2016-11-07 11:07:53 -Log ended: 2016-11-07 11:07:54 - -Log started: 2016-11-07 11:07:54 -Log ended: 2016-11-07 11:07:54 - -Log started: 2016-11-07 11:07:54 -Log ended: 2016-11-07 11:07:54 - -Log started: 2016-11-07 11:11:35 -Log ended: 2016-11-07 11:11:36 - -Log started: 2016-11-07 11:11:36 -Log ended: 2016-11-07 11:11:36 - -Log started: 2016-11-07 11:11:36 -Log ended: 2016-11-07 11:11:36 - -Log started: 2016-11-07 11:11:36 -Log ended: 2016-11-07 11:11:37 - -Log started: 2016-11-07 11:11:37 -Log ended: 2016-11-07 11:11:37 - -Log started: 2016-11-07 11:11:38 -Log ended: 2016-11-07 11:11:38 - -Log started: 2016-11-07 11:11:38 -Log ended: 2016-11-07 11:11:38 - -Log started: 2016-11-07 11:11:38 -Log ended: 2016-11-07 11:11:38 - -Log started: 2016-11-07 11:12:12 -Log ended: 2016-11-07 11:12:12 - -Log started: 2016-11-07 11:12:12 -Log ended: 2016-11-07 11:12:12 - -Log started: 2016-11-07 11:12:12 -Log ended: 2016-11-07 11:12:13 - -Log started: 2016-11-07 11:12:13 -Log ended: 2016-11-07 11:12:13 - -Log started: 2016-11-07 11:12:13 -Log ended: 2016-11-07 11:12:14 - -Log started: 2016-11-07 11:12:14 -Log ended: 2016-11-07 11:12:14 - -Log started: 2016-11-07 11:12:14 -Log ended: 2016-11-07 11:12:15 - -Log started: 2016-11-07 11:12:15 -Log ended: 2016-11-07 11:12:15 - -Log started: 2016-11-07 11:13:27 -Log ended: 2016-11-07 11:13:27 - -Log started: 2016-11-07 11:13:27 -Log ended: 2016-11-07 11:13:28 - -Log started: 2016-11-07 11:13:28 -Log ended: 2016-11-07 11:13:28 - -Log started: 2016-11-07 11:13:28 -Log ended: 2016-11-07 11:13:28 - -Log started: 2016-11-07 11:13:29 -Log ended: 2016-11-07 11:13:29 - -Log started: 2016-11-07 11:13:29 -Log ended: 2016-11-07 11:13:29 - -Log started: 2016-11-07 11:13:30 -Log ended: 2016-11-07 11:13:30 - -Log started: 2016-11-07 11:13:30 -Log ended: 2016-11-07 11:13:30 - -Log started: 2016-11-07 11:17:45 -Log ended: 2016-11-07 11:17:46 - -Log started: 2016-11-07 11:17:46 -Log ended: 2016-11-07 11:17:46 - -Log started: 2016-11-07 11:17:47 -Log ended: 2016-11-07 11:17:47 - -Log started: 2016-11-07 11:17:47 -Log ended: 2016-11-07 11:17:47 - -Log started: 2016-11-07 11:17:48 -Log ended: 2016-11-07 11:17:48 - -Log started: 2016-11-07 11:17:48 -Log ended: 2016-11-07 11:17:48 - -Log started: 2016-11-07 11:17:48 -Log ended: 2016-11-07 11:17:49 - -Log started: 2016-11-07 11:17:49 -Log ended: 2016-11-07 11:17:49 - -Log started: 2016-11-07 11:18:24 -Log ended: 2016-11-07 11:18:24 - -Log started: 2016-11-07 11:18:24 -Log ended: 2016-11-07 11:18:25 - -Log started: 2016-11-07 11:18:25 -Log ended: 2016-11-07 11:18:25 - -Log started: 2016-11-07 11:18:25 -Log ended: 2016-11-07 11:18:25 - -Log started: 2016-11-07 11:18:26 -Log ended: 2016-11-07 11:18:26 - -Log started: 2016-11-07 11:18:26 -Log ended: 2016-11-07 11:18:26 - -Log started: 2016-11-07 11:18:27 -Log ended: 2016-11-07 11:18:27 - -Log started: 2016-11-07 11:18:27 -Log ended: 2016-11-07 11:18:27 - -Log started: 2016-11-07 11:19:09 -Log ended: 2016-11-07 11:19:10 - -Log started: 2016-11-07 11:19:10 -Log ended: 2016-11-07 11:19:10 - -Log started: 2016-11-07 11:19:10 -Log ended: 2016-11-07 11:19:11 - -Log started: 2016-11-07 11:19:11 -Log ended: 2016-11-07 11:19:11 - -Log started: 2016-11-07 11:19:11 -Log ended: 2016-11-07 11:19:12 - -Log started: 2016-11-07 11:19:12 -Log ended: 2016-11-07 11:19:12 - -Log started: 2016-11-07 11:19:12 -Log ended: 2016-11-07 11:19:12 - -Log started: 2016-11-07 11:19:12 -Log ended: 2016-11-07 11:19:13 - -Log started: 2016-11-07 11:22:55 -Log ended: 2016-11-07 11:22:56 - -Log started: 2016-11-07 11:22:56 -Log ended: 2016-11-07 11:22:56 - -Log started: 2016-11-07 11:22:56 -Log ended: 2016-11-07 11:22:57 - -Log started: 2016-11-07 11:22:57 -Log ended: 2016-11-07 11:22:57 - -Log started: 2016-11-07 11:22:57 -Log ended: 2016-11-07 11:22:58 - -Log started: 2016-11-07 11:22:58 -Log ended: 2016-11-07 11:22:58 - -Log started: 2016-11-07 11:22:58 -Log ended: 2016-11-07 11:22:59 - -Log started: 2016-11-07 11:22:59 -Log ended: 2016-11-07 11:22:59 - -Log started: 2016-11-07 11:26:37 -Log ended: 2016-11-07 11:26:38 - -Log started: 2016-11-07 11:26:38 -Log ended: 2016-11-07 11:26:38 - -Log started: 2016-11-07 11:26:38 -Log ended: 2016-11-07 11:26:38 - -Log started: 2016-11-07 11:26:38 -Log ended: 2016-11-07 11:26:39 - -Log started: 2016-11-07 11:26:39 -Log ended: 2016-11-07 11:26:39 - -Log started: 2016-11-07 11:26:39 -Log ended: 2016-11-07 11:26:40 - -Log started: 2016-11-07 11:26:40 -Log ended: 2016-11-07 11:26:40 - -Log started: 2016-11-07 11:26:40 -Log ended: 2016-11-07 11:26:40 - -Log started: 2016-12-14 11:19:23 -/var/lib/adequate/pending: Permissão negada at /usr/bin/adequate line 71. -Error in function: -Log ended: 2016-12-14 11:19:23 - -Log started: 2016-12-14 11:19:23 -/var/lib/adequate/pending: Permissão negada at /usr/bin/adequate line 71. -Error in function: -Log ended: 2016-12-14 11:19:24 - -Log started: 2016-12-14 11:19:24 -/var/lib/adequate/pending: Permissão negada at /usr/bin/adequate line 71. -Error in function: -Log ended: 2016-12-14 11:19:24 - -Log started: 2016-12-15 09:52:04 -/var/lib/adequate/pending: Permissão negada at /usr/bin/adequate line 71. -Error in function: -Log ended: 2016-12-15 09:52:05 - -Log started: 2016-12-15 09:52:05 -/var/lib/adequate/pending: Permissão negada at /usr/bin/adequate line 71. -Error in function: -Log ended: 2016-12-15 09:52:05 - -Log started: 2016-12-15 09:52:05 -/var/lib/adequate/pending: Permissão negada at /usr/bin/adequate line 71. -Error in function: -Log ended: 2016-12-15 09:52:05 - -Log started: 2016-12-15 09:53:32 -/var/lib/adequate/pending: Permissão negada at /usr/bin/adequate line 71. -Error in function: -Log ended: 2016-12-15 09:53:32 - -Log started: 2016-12-15 09:53:33 -/var/lib/adequate/pending: Permissão negada at /usr/bin/adequate line 71. -Error in function: -Log ended: 2016-12-15 09:53:33 - -Log started: 2016-12-15 09:53:33 -/var/lib/adequate/pending: Permissão negada at /usr/bin/adequate line 71. -Error in function: -Log ended: 2016-12-15 09:53:33 - diff --git a/package/test/root.unused-deps/var/log/unattended-upgrades/unattended-upgrades.log b/package/test/root.unused-deps/var/log/unattended-upgrades/unattended-upgrades.log deleted file mode 100644 index b8ef2a07b17a54937eb91fddf8ff6dc0c2eaad5c..0000000000000000000000000000000000000000 --- a/package/test/root.unused-deps/var/log/unattended-upgrades/unattended-upgrades.log +++ /dev/null @@ -1,9 +0,0 @@ -2016-12-15 09:53:33,269 INFO Initial blacklisted packages: -2016-12-15 09:53:33,270 INFO Initial whitelisted packages: -2016-12-15 09:53:33,270 INFO Starting unattended upgrades script -2016-12-15 09:53:33,271 INFO Allowed origins are: ['o=Ubuntu,a=lucid-security'] -2016-12-15 09:53:33,527 INFO Packages that will be upgraded: test-package -2016-12-15 09:53:33,528 INFO Writing dpkg log to './root.unused-deps/var/log/unattended-upgrades/unattended-upgrades-dpkg.log' -2016-12-15 09:53:33,731 ERROR Installing the upgrades failed! -2016-12-15 09:53:33,731 ERROR error message: 'installArchives() failed' -2016-12-15 09:53:33,732 ERROR dpkg returned a error! See './root.unused-deps/var/log/unattended-upgrades/unattended-upgrades-dpkg.log' for details diff --git a/package/test/root.unused-deps/var/run/.silly-git b/package/test/root.unused-deps/var/run/.silly-git deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/package/test/root.unused-deps/var/run/unattended-upgrades.progress b/package/test/root.unused-deps/var/run/unattended-upgrades.progress deleted file mode 100644 index e86b8e94a97be92b0a75d30e55cb7d2af07c99d0..0000000000000000000000000000000000000000 --- a/package/test/root.unused-deps/var/run/unattended-upgrades.progress +++ /dev/null @@ -1 +0,0 @@ -Progress: 0.0 % (dpkg-exec) \ No newline at end of file diff --git a/package/test/test_against_real_archive.py b/package/test/test_against_real_archive.py deleted file mode 100644 index 5d278b236e0c2ec0b583c6f9e816dcca293911fd..0000000000000000000000000000000000000000 --- a/package/test/test_against_real_archive.py +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/python3 -"""Test unattended_upgrades against the real archive in a chroot. - -Note that this test is not run by the makefile in this folder, as it requires -network access, and it fails in some situations (unclear which). -""" - -import apt -import apt_pkg -import glob -import logging -import os -import re -import unittest - -import unattended_upgrade - - -apt_pkg.config.set("APT::Architecture", "amd64") - - -class MockOptions(): - def __init__(self, debug=True, dry_run=False): - self.debug = debug - self.dry_run = dry_run - self.apt_debug = False - self.minimal_upgrade_steps = False - self.verbose = False - - -class TestAgainstRealArchive(unittest.TestCase): - - def setUp(self): - for g in ["./aptroot/var/log/apt/*", - "./aptroot/var/log/*"]: - for f in glob.glob(g): - if os.path.isfile(f): - os.remove(f) - # get a lucid based cache (test good until 04/2015) - cache = apt.Cache(rootdir="./aptroot") - cache.update() - del cache - # ensure apt does not do any post-invoke stuff that fails - # (because we are not root) - apt_pkg.config.clear("DPkg::Post-Invoke") - apt_pkg.config.clear("DPkg::Pre-Invoke") - unattended_upgrade.DISTRO_CODENAME = "lucid" - - def test_against_real_archive(self): - # create mock options - options = MockOptions(dry_run=False, debug=True) - # run unattended-upgrades against fake system - logdir = os.path.abspath("./aptroot/var/log/") - logfile = os.path.join(logdir, "unattended-upgrades.log") - apt_pkg.config.set("APT::UnattendedUpgrades::LogDir", logdir) - - # main - res = unattended_upgrade.main(options, os.path.abspath("./aptroot")) - logging.debug(res) - # check if the log file exists - self.assertTrue(os.path.exists(logfile)) - with open(logfile) as fp: - log = fp.read() - # check that stuff worked - self.assertFalse(" ERROR " in log, log) - # check if we actually have the expected ugprade in it - self.assertTrue( - re.search("INFO Packages that will be upgraded:.*awstats", log)) - # apt-doc has a higher version in -updates than in -security - # and no other dependencies so its a perfect test - self.assertTrue( - re.search("INFO Packages that will be upgraded:.*apt-doc", log)) - self.assertFalse( - re.search("INFO Packages that will be upgraded:.*ant-doc", log)) - self.assertTrue( - re.search("DEBUG skipping blacklisted package 'ant-doc'", log)) - # test dpkg install log - #term_log = open("aptroot/var/log/apt/term.log").read() - # FIXME: when we redirect STDIN the below test will break - however - # we need to redirect it as otherwise we may hang forever - # - this is actually a bug in apt that uses "tcgetattr(0, &tt)" - # on FD=0 instead of FD=1 - #print term_log - #self.assertTrue( - # re.search( - # "fake-dpkg: --status-fd .* --configure.*awstats", term_log)) - - -if __name__ == "__main__": - import locale - locale.setlocale(locale.LC_ALL, "C") - unittest.main() diff --git a/package/test/test_clean.py b/package/test/test_clean.py deleted file mode 100644 index ae22a1e170ba21f6bd3f4d5562c0ff83ce6b8550..0000000000000000000000000000000000000000 --- a/package/test/test_clean.py +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/python - - -import os -import shutil -import tempfile -import unittest - -import apt -import unattended_upgrade - - -class MockFetcher: - items = [] - - -class MockAcquireItem: - def __init__(self, destfile): - self.destfile = destfile - - -class TestClean(unittest.TestCase): - - def setUp(self): - self.tempdir = tempfile.mkdtemp() - self.addCleanup(shutil.rmtree, self.tempdir) - os.chdir(self.tempdir) - - def test_clean(self): - apt.apt_pkg.config.set("dir::cache::archives", self.tempdir) - os.makedirs("dir") - with open("file1", "w"): - pass - with open("file2", "w"): - pass - with open("lock", "w"): - pass - fetcher = MockFetcher() - fetcher.items = [MockAcquireItem("file1"), MockAcquireItem("file2")] - unattended_upgrade.clean_downloaded_packages(fetcher) - # files get removed - self.assertEqual(os.path.exists("file1"), False) - self.assertEqual(os.path.exists("file2"), False) - # exluces are honored - self.assertEqual(os.path.exists("lock"), True) - # dirs are untouched - self.assertEqual(os.path.exists("dir"), True) - - -if __name__ == "__main__": - import logging - logging.basicConfig(level=logging.DEBUG) - unittest.main() diff --git a/package/test/test_conffile.py b/package/test/test_conffile.py deleted file mode 100755 index a69adde45224080efe0575c517ed5113e280d800..0000000000000000000000000000000000000000 --- a/package/test/test_conffile.py +++ /dev/null @@ -1,104 +0,0 @@ -#!/usr/bin/python3 - -import os -import logging -import unittest - -import apt_pkg - -from unattended_upgrade import ( - conffile_prompt, - dpkg_conffile_prompt, -) - - -class ConffilePromptTestCase(unittest.TestCase): - - def setUp(self): - apt_pkg.config.set("Dir::State::status", - "./root.conffile/var/lib/dpkg/status") - with open("./root.conffile/etc/configuration-file", "w") as fp: - fp.write("""This is a configuration file, -dfasddfasdff -No really. -""") - - def test_will_prompt(self): - # conf-test 0.9 is installed, 1.1 gets installed - # they both have different config files - test_pkg = "./packages/conf-test-package_1.1.deb" - self.assertTrue(conffile_prompt(test_pkg, prefix="./root.conffile"), - "conffile prompt detection incorrect") - - def test_prompt_on_deleted_modified_conffile(self): - # conf-test 0.9 is installed, 1.1 gets installed - # they both have different config files, this triggers a prompt - os.remove("./root.conffile/etc/configuration-file") - test_pkg = "./packages/conf-test-package_1.1.deb" - self.assertTrue(conffile_prompt(test_pkg, prefix="./root.conffile"), - "conffile prompt detection incorrect") - - def test_will_not_prompt(self): - # conf-test 0.9 is installed, 1.0 gets installed - # they both have the same config files - test_pkg = "./packages/conf-test-package_1.0.deb" - self.assertFalse(conffile_prompt(test_pkg, prefix="./root.conffile"), - "conffile prompt detection incorrect") - - def test_with_many_entries(self): - # ensure we don't crash when encountering a conffile with overly - # many entries - test_pkg = "./packages/conf-test-package-257-conffiles_1.deb" - self.assertFalse(conffile_prompt(test_pkg, prefix="./root.conffile"), - "conffile prompt detection incorrect") - - def test_will_not_prompt_because_of_conffile_removal(self): - # no conffiles anymore in the pkg - test_pkg = "./packages/conf-test-package-no-conffiles-anymore_2.deb" - self.assertFalse(conffile_prompt(test_pkg, prefix="./root.conffile"), - "conffile prompt detection incorrect") - - def test_will_prompt_multiple(self): - # multiple conffiles - test_pkg = "./packages/multiple-conffiles_2_all.deb" - self.assertTrue(conffile_prompt(test_pkg, prefix="./root.conffile"), - "conffile prompt detection incorrect") - - def test_will_prompt_for_new_conffile(self): - # debian bug #673237, a package that was not a conffile now - # becomes a conffile - test_pkg = "./packages/conf-test-package-new-conffile_1.deb" - self.assertTrue(conffile_prompt(test_pkg, prefix="./root.conffile"), - "conffile prompt detection incorrect") - - def test_xz_compression(self): - test_pkg = "./packages/conf-test-xz_1.0_all.deb" - self.assertFalse( - conffile_prompt(test_pkg, prefix="./root.conffile"), - "conffile prompt detection incorrect") - - -class DpkgConffileTestCase(unittest.TestCase): - """ - This tests that the detection if dpkg will prompt at all works, - i.e. if the user has decided to use a --force-conf{old,new} option - """ - - def setUp(self): - apt_pkg.config.clear("DPkg::Options") - - def test_no_dpkg_prompt_option(self): - self.assertTrue(dpkg_conffile_prompt()) - - def test_regression_lp1061498(self): - apt_pkg.config.set("DPkg::Options::", "muup") - self.assertTrue(dpkg_conffile_prompt()) - - def test_dpkg_will_never_prompt(self): - apt_pkg.config.set("DPkg::Options::", "--force-confold") - self.assertFalse(dpkg_conffile_prompt()) - - -if __name__ == "__main__": - logging.basicConfig(level=logging.DEBUG) - unittest.main() diff --git a/package/test/test_in_chroot.py b/package/test/test_in_chroot.py deleted file mode 100644 index 785123d9bc7cb2c2a3e3f3ade74b942d4a335637..0000000000000000000000000000000000000000 --- a/package/test/test_in_chroot.py +++ /dev/null @@ -1,265 +0,0 @@ -#!/usr/bin/python3 - -import apt -import logging -import glob -import os -import re -import shutil -import subprocess -import sys -import time -import unittest - -# debian -#SOURCES_LIST=""" -#deb http://ftp.de.debian.org/debian squeeze main contrib non-free -#deb http://ftp.de.debian.org/debian squeeze-updates main contrib non-free -#deb http://ftp.de.debian.org/debian squeeze-proposed-updates main contrib \ -# non-free -#deb http://security.debian.org squeeze/updates main contrib non-free -#""" -#DISTRO="squeeze" -#ARCH="i386" -#TARBALL="%s-%s.tgz" % (DISTRO, ARCH) -#MIRROR="http://ftp.de.debian.org/debian" -#APT_CONF="""APT::Architecture "%s";""" % ARCH -#ORIGINS_PATTERN="origin=Debian,archive=stable,label=Debian-Security" - - -# ubuntu -SOURCES_LIST = """ -deb http://archive.ubuntu.com/ubuntu/ lucid main restricted -deb-src http://archive.ubuntu.com/ubuntu/ lucid main restricted - -deb http://archive.ubuntu.com/ubuntu/ lucid-updates main restricted -deb-src http://archive.ubuntu.com/ubuntu/ lucid-updates main restricted - -deb http://security.ubuntu.com/ubuntu/ lucid-security main restricted -deb-src http://security.ubuntu.com/ubuntu/ lucid-security main restricted -""" -DISTRO = "lucid" -ARCH = "i386" -TARBALL = "%s-%s.tgz" % (DISTRO, ARCH) -MIRROR = "http://archive.ubuntu.com/ubuntu" -APT_CONF = """APT::Architecture "%s";""" % ARCH -ORIGINS_PATTERN = "origin=Ubuntu,archive=lucid-security" - -apt.apt_pkg.config.set("APT::Architecture", ARCH) -sys.path.insert(0, "..") -import unattended_upgrade - - -class MockOptions(object): - debug = False - verbose = True - apt_debug = False - dry_run = False - minimal_upgrade_steps = False - - -class TestUnattendedUpgrade(unittest.TestCase): - - def _create_new_debootstrap_tarball(self, tarball, target): - print("creating initial test tarball, this is needed only once") - # force i386 - subprocess.call( - ["debootstrap", - "--arch=%s" % ARCH, - # smaller version of the minimal system - "--variant=minbase", - "--include=python-apt,apt-utils,gpgv,ubuntu-keyring," - "ca-certificates", - DISTRO, - target, - MIRROR]) - subprocess.call(["chroot", target, "apt-get", "clean"]) - subprocess.call(["tar", "czf", tarball, target]) - - def _unpack_debootstrap_tarball(self, tarball, target): - subprocess.call(["tar", "xzf", tarball]) - - def test_normal_upgrade(self): - print("Running normal unattended upgrade in chroot") - options = MockOptions() - options.minimal_upgrade_steps = False - # run it - target = self._run_upgrade_test_in_real_chroot(options) - # ensure we upgraded the expected packages - self.assertTrue( - self._verify_install_log_in_real_chroot(target, "ca-certificates")) - - def test_minimal_steps_upgrade(self): - print("Running minimal steps unattended upgrade in chroot") - options = MockOptions() - options.minimal_upgrade_steps = True - # run it - target = self._run_upgrade_test_in_real_chroot(options) - # ensure we upgraded the expected packages - self.assertTrue( - self._verify_install_log_in_real_chroot(target, "ca-certificates")) - - def test_upgrade_on_shutdown_upgrade(self): - print("Running unattended upgrade on shutdown (download and install) " - "in chroot") - # ensure that it actually installs in shutdown env mode - options = MockOptions() - os.environ["UNATTENDED_UPGRADES_FORCE_INSTALL_ON_SHUTDOWN"] = "1" - apt.apt_pkg.config.set("Unattended-Upgrade::InstallOnShutdown", "1") - target = self._run_upgrade_test_in_real_chroot(options) - self.assertTrue( - self._verify_install_log_in_real_chroot(target, "ca-certificates")) - - def test_whitelist_upgrade(self): - print("Running unattended upgrade in chroot with whitelisted pkg") - options = MockOptions() - apt.apt_pkg.config.set( - "Unattended-Upgrade::Package-Whitelist::", "^libc6$") - # run it - target = self._run_upgrade_test_in_real_chroot(options) - # libc6 has a strict dependency on libc-bin so both packages - # will have to get installed. ensure that the relaxed whitelist is ok - self.assertTrue( - self._verify_install_log_in_real_chroot(target, "libc6")) - self.assertFalse( - self._verify_install_log_in_real_chroot(target, "ca-certificates")) - apt.apt_pkg.config.clear("Unattended-Upgrade::Package-Whitelist") - - def test_whitelist_upgrade_strict(self): - print( - "Running unattended upgrade in chroot with strict whitelisted pkg") - options = MockOptions() - apt.apt_pkg.config.set( - "Unattended-Upgrade::Package-Whitelist::", "^apt$") - apt.apt_pkg.config.set( - "Unattended-Upgrade::Package-Whitelist::", "^libc6$") - apt.apt_pkg.config.set( - "Unattended-Upgrade::Package-Whitelist-Strict", "true") - # run it - target = self._run_upgrade_test_in_real_chroot(options) - # we upgraded apt, but not libc6 because libc6 needs libc-bin and - # its not whitelisted (in strict mode) - self.assertTrue( - self._verify_install_log_in_real_chroot(target, "apt")) - self.assertFalse( - self._verify_install_log_in_real_chroot(target, "libc6")) - self.assertFalse( - self._verify_install_log_in_real_chroot(target, "libc-bin")) - apt.apt_pkg.config.clear("Unattended-Upgrade::Package-Whitelist") - - def _get_lockfile_location(self, target): - return os.path.join( - target, "var/log/unattended-upgrades/unattended-upgrades.log") - - def _setup_chroot(self, target): - """ helper that setups a clean chroot """ - if os.path.exists(target): - subprocess.call(["umount", os.path.join(target, "dev", "pts")]) - shutil.rmtree(target) - if not os.path.exists(TARBALL): - self._create_new_debootstrap_tarball(TARBALL, target) - # create new - self._unpack_debootstrap_tarball(TARBALL, target) - open(os.path.join(target, "etc/apt/apt.conf"), "w").write(APT_CONF) - open(os.path.join(target, "etc/apt/sources.list"), "w").write( - SOURCES_LIST) - - def _run_upgrade_test_in_real_chroot(self, options, clean_chroot=True): - """ helper that runs the unattended-upgrade in a chroot - and does some basic verifications - """ - if os.getuid() != 0: - print("Skipping because uid != 0") - return - - # clear to avoid pollution in the chroot - apt.apt_pkg.config.clear("Acquire::http::ProxyAutoDetect") - - # create chroot - target = "./test-chroot.%s" % DISTRO - - # setup chroot if needed - if clean_chroot: - self._setup_chroot(target) - - # ensure we have /dev/pts in the chroot - ret = subprocess.call(["mount", "-t", "devpts", "devptsfs", - os.path.join(target, "dev", "pts")]) - if ret != 0: - raise Exception("Failed to mount %s/proc" % target) - self.addCleanup( - lambda: subprocess.call( - ["umount", os.path.join(target, "dev", "pts")])) - - # and run the upgrade test - pid = os.fork() - if pid == 0: - # chroot - os.chroot(target) - os.chdir("/") - if not os.path.exists("/var/log/unattended-upgrades/"): - os.makedirs("/var/log/unattended-upgrades/") - # make sure we are up-to-date - subprocess.call(["apt-get", "update", "-q", "-q"]) - # run it - apt.apt_pkg.config.clear("Unattended-Upgrade::Allowed-Origins") - apt.apt_pkg.config.clear("Unattended-Upgrade::Origins-Pattern") - apt.apt_pkg.config.set( - "Unattended-Upgrade::Origins-Pattern::", ORIGINS_PATTERN) - unattended_upgrade.DISTRO_CODENAME = DISTRO - unattended_upgrade.main(options) - os._exit(0) - else: - has_progress = False - all_progress = "" - last_progress = "" - progress_log = os.path.join( - target, "var/run/unattended-upgrades.progress") - while True: - time.sleep(0.01) - if os.path.exists(progress_log): - progress = open(progress_log).read() - if progress and progress != last_progress: - has_progress = progress.startswith("Progress") - last_progress = progress - all_progress += progress - # check exit status - (apid, status) = os.waitpid(pid, os.WNOHANG) - if pid == apid: - ret = os.WEXITSTATUS(status) - break - #print("*******************", all_progress) - self.assertEqual(ret, 0) - # this number is a bit random, we just want to be sure we have - # progress data - self.assertTrue(has_progress, True) - self.assertTrue(len(all_progress) > 5) - return target - - def _verify_install_log_in_real_chroot(self, target, needle_pkg): - # examine log - log = self._get_lockfile_location(target) - logfile = open(log).read() - #print(logfile) - if not re.search("Packages that will be upgraded:.*%s" % needle_pkg, - logfile): - logging.warn( - "Can not find expected %s upgrade in log" % needle_pkg) - return False - if "ERROR Installing the upgrades failed" in logfile: - logging.warn("Got a ERROR in the logfile") - return False - dpkg_log = os.path.join( - target, "var/log/unattended-upgrades/*-dpkg*.log") - dpkg_logfile = open(glob.glob(dpkg_log)[0]).read() - if not "Preparing to replace %s" % needle_pkg in dpkg_logfile: - logging.warn("Did not find %s upgrade in %s" % ( - dpkg_log, needle_pkg)) - return False - #print(dpkg_logfile) - return True - - -if __name__ == "__main__": - #logging.basicConfig(level=logging.DEBUG) - unittest.main() diff --git a/package/test/test_log_install_progress.py b/package/test/test_log_install_progress.py deleted file mode 100755 index 94d637b03cde6960cb1ea60edda9e91cd7b97019..0000000000000000000000000000000000000000 --- a/package/test/test_log_install_progress.py +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/python - -import apt_pkg -import logging -import os -import sys -import tempfile -import unittest - -sys.path.insert(0, "..") - -from unattended_upgrade import _setup_logging - - -class MockOptions: - dry_run = False - debug = False - verbose = False - apt_debug = False - - -class TestLogInstallProgress(unittest.TestCase): - - def setUp(self): - self.tempdir = tempfile.mkdtemp() - apt_pkg.init() - self.mock_options = MockOptions() - - def test_log_installprogress(self): - logdir = os.path.join(self.tempdir, "mylog") - apt_pkg.config.set("Unattended-Upgrade::LogDir", logdir) - logging.root.handlers = [] - _setup_logging(self.mock_options) - self.assertTrue(os.path.exists(logdir)) - - -if __name__ == "__main__": - logging.basicConfig(level=logging.DEBUG) - unittest.main() diff --git a/package/test/test_logdir.py b/package/test/test_logdir.py deleted file mode 100755 index 972bc4b0860b6b84d90d92452ee8ca765af4ef0f..0000000000000000000000000000000000000000 --- a/package/test/test_logdir.py +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/python3 - -import apt_pkg -import logging -import os -import sys -import tempfile -import unittest - -sys.path.insert(0, "..") -from unattended_upgrade import _setup_logging - - -class MockOptions: - dry_run = False - debug = False - verbose = False - apt_debug = False - - -class TestLogdir(unittest.TestCase): - - def setUp(self): - self.tempdir = tempfile.mkdtemp() - apt_pkg.init() - self.mock_options = MockOptions() - - def test_logdir(self): - # test log - logdir = os.path.join(self.tempdir, "mylog") - apt_pkg.config.set("Unattended-Upgrade::LogDir", logdir) - logging.root.handlers = [] - _setup_logging(self.mock_options) - self.assertTrue(os.path.exists(logdir)) - - def test_logdir_depreated(self): - # test if the deprecated APT::UnattendedUpgrades dir is not used - # if the new UnaUnattendedUpgrades::LogDir is given - logdir = os.path.join(self.tempdir, "mylog-use") - logdir2 = os.path.join(self.tempdir, "mylog-dontuse") - apt_pkg.config.set("Unattended-Upgrade::LogDir", logdir) - apt_pkg.config.set("APT::UnattendedUpgrades::LogDir", logdir2) - logging.root.handlers = [] - _setup_logging(self.mock_options) - self.assertTrue(os.path.exists(logdir)) - self.assertFalse(os.path.exists(logdir2)) - - -if __name__ == "__main__": - logging.basicConfig(level=logging.DEBUG) - unittest.main() diff --git a/package/test/test_mail.py b/package/test/test_mail.py deleted file mode 100755 index 1f624705add6a434203c56b8532c8d400dd5ca29..0000000000000000000000000000000000000000 --- a/package/test/test_mail.py +++ /dev/null @@ -1,233 +0,0 @@ -#!/usr/bin/python3 -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from email.parser import Parser -from io import StringIO -import os -import sys -from textwrap import dedent -import unittest - - -import apt_pkg - -import unattended_upgrade -from unattended_upgrade import ( - get_dpkg_log_content, - LoggingDateTime, - send_summary_mail, - setup_apt_listchanges, -) - - -class ExtractDpkgLogTestCase(unittest.TestCase): - - def test_get_dpkg_log_content(self): - logfile_dpkg = "./apt-term.log" - # note that we intentionally not have a "Log ended:" here - # because this may happen if something crashes power goes - # down etc - OLD_LOG = dedent("""\ - Log started: 2013-01-01 12:00:00 - old logfile text - """) - NEW_LOG = dedent("""\ - Log started: 2014-10-28 10:00:00 - random logfile_dpkg text - Log ended: 2013-01-01 12:20:00 - - Log started: 2014-10-28 12:21:00 - more random logfile_dpkg text - Log ended: 2013-01-01 12:30:00 - """) - with open("./apt-term.log", "w") as fp: - fp.write(OLD_LOG) - fp.write("\n") - fp.write(NEW_LOG) - start_time = LoggingDateTime.from_string("2014-10-28 10:00:00") - dpkg_log_content = get_dpkg_log_content(logfile_dpkg, start_time) - self.assertEqual(dpkg_log_content, NEW_LOG) - - -# note this is not a unittest.TestCase as it needs to be parameterized -class CommonTestsForMailxAndSendmail(object): - - EXPECTED_MAIL_CONTENT_STRINGS = [ - "random logfile_dpkg text", - "mem_log text", - ] - NOT_EXPECTED_MAIL_CONTENT_STRINGS = [ - "old logfile text", - ] - - def common_setup(self): - # monkey patch to make it testable - unattended_upgrade.REBOOT_REQUIRED_FILE = "./reboot-required" - unattended_upgrade.MAIL_BINARY = "./no-mailx-binary-here" - unattended_upgrade.SENDMAIL_BINARY = "./no-sendmail-binary-here" - # setup mail - apt_pkg.config.set("Unattended-Upgrade::Mail", "root") - apt_pkg.config.set("Unattended-Upgrade::MailOnlyOnError", "false") - - def tearDown(self): - for f in ["mail.txt", "reboot-required", "apt-term.log"]: - if os.path.exists(f): - os.unlink(f) - - def _return_mock_data(self, successful=True): - """ return input tuple for send_summary_mail """ - pkgs = "\n".join(["2vcard"]) - res = successful - pkgs_kept_back = [] - # include some unicode chars here for good measure - mem_log = StringIO("""mem_log text üöä -Allowed origins are: ['o=Debian,n=wheezy', 'o=Debian,n=wheezy-updates',\ - 'o=Debian,n=wheezy,l=Debian-Security', 'origin=Debian,archive=stable,label=\ -Debian-Security'] -""") - dpkg_log_content = dedent("""\ - Log started: 2014-10-28 12:21:00 - random logfile_dpkg text - Log ended: 2013-01-01 12:30:00 - """) - return (pkgs, res, pkgs_kept_back, mem_log, dpkg_log_content) - - def _verify_common_mail_content(self, mail_txt): - for expected_string in self.EXPECTED_MAIL_CONTENT_STRINGS: - self.assertTrue(expected_string in mail_txt) - for not_expected_string in self.NOT_EXPECTED_MAIL_CONTENT_STRINGS: - self.assertFalse(not_expected_string in mail_txt) - self.assertEqual(mail_txt.count("Log started: "), 1) - - def test_summary_mail_reboot(self): - with open("./reboot-required", "w") as fp: - fp.write("") - send_summary_mail(*self._return_mock_data()) - os.unlink("./reboot-required") - # this is used for py2 compat for py3 only we can do - # remove the "rb" and the subsequent '.decode("utf-8")' - with open("mail.txt", "rb") as fp: - mail_txt = fp.read().decode("utf-8") - self.assertTrue("[reboot required]" in mail_txt) - self._verify_common_mail_content(mail_txt) - self.assertTrue("Packages that were upgraded:\n 2vcard" in mail_txt) - - def test_summary_mail_no_reboot(self): - send_summary_mail(*self._return_mock_data()) - with open("mail.txt", "rb") as fp: - mail_txt = fp.read().decode("utf-8") - self.assertFalse("[reboot required]" in mail_txt) - self._verify_common_mail_content(mail_txt) - self.assertTrue("Packages that were upgraded:\n 2vcard" in mail_txt) - - def test_summary_mail_only_on_error(self): - # default is to always send mail, ensure this is correct - # for both success and failure - apt_pkg.config.set("Unattended-Upgrade::MailOnlyOnError", "false") - send_summary_mail(*self._return_mock_data(successful=True)) - with open("mail.txt", "rb") as fp: - self._verify_common_mail_content(fp.read().decode("utf-8")) - os.remove("mail.txt") - # now with a simulated failure - send_summary_mail(*self._return_mock_data(successful=False)) - with open("mail.txt", "rb") as fp: - self._verify_common_mail_content(fp.read().decode("utf-8")) - os.remove("mail.txt") - # now test with "MailOnlyOnError" - apt_pkg.config.set("Unattended-Upgrade::MailOnlyOnError", "true") - send_summary_mail(*self._return_mock_data(successful=True)) - self.assertFalse(os.path.exists("mail.txt")) - send_summary_mail(*self._return_mock_data(successful=False)) - with open("mail.txt", "rb") as fp: - mail_txt = fp.read().decode("utf-8") - self._verify_common_mail_content(mail_txt) - self.assertTrue("Unattended upgrade returned: False" in mail_txt) - self.assertTrue(os.path.exists("mail.txt")) - self.assertTrue( - "Packages that attempted to upgrade:\n 2vcard" in mail_txt) - - def test_mail_on_error_with_warning_in_log(self): - apt_pkg.config.set("Unattended-Upgrade::MailOnlyOnError", "true") - pkgs, res, pkgs_kept_back, mem_log, logf_dpkg = self._return_mock_data( - successful=True) - mem_log.write("\nWARNING: some warning\n") - send_summary_mail(pkgs, res, pkgs_kept_back, mem_log, logf_dpkg) - self.assertTrue(os.path.exists("mail.txt")) - - def test_apt_listchanges(self): - # test with sendmail available - unattended_upgrade.SENDMAIL_BINARY = "/bin/true" - setup_apt_listchanges("./data/listchanges.conf.mail") - self.assertEqual(os.environ["APT_LISTCHANGES_FRONTEND"], "mail") - # test without sendmail - unattended_upgrade.SENDMAIL_BINARY = "/bin/not-here-xxxxxxxxx" - setup_apt_listchanges("./data/listchanges.conf.pager") - self.assertEqual(os.environ["APT_LISTCHANGES_FRONTEND"], "none") - - def test_summary_mail_from_address(self): - apt_pkg.config.set("Unattended-Upgrade::Sender", "rootolv") - self.addCleanup(apt_pkg.config.set, "Unattended-Upgrade::Sender", "") - send_summary_mail(*self._return_mock_data()) - with open("mail.txt", "rb") as fp: - mail_txt = fp.read().decode("utf-8") - self.assertTrue( - "From: rootolv" in mail_txt, "missing From: in %s" % mail_txt) - - -class MailxTestCase(CommonTestsForMailxAndSendmail, unittest.TestCase): - - def setUp(self): - self.common_setup() - unattended_upgrade.MAIL_BINARY = "./mock-mail" - - def _verify_common_mail_content(self, mail_txt): - CommonTestsForMailxAndSendmail._verify_common_mail_content( - self, mail_txt) - # setting this header with mailx is not possible so ensure - # we don't accidently try - self.assertFalse('text/plain; charset="utf-8"' in mail_txt) - - -class SendmailTestCase(CommonTestsForMailxAndSendmail, unittest.TestCase): - - def setUp(self): - self.common_setup() - unattended_upgrade.SENDMAIL_BINARY = "./mock-sendmail" - - def _verify_common_mail_content(self, mail_txt): - CommonTestsForMailxAndSendmail._verify_common_mail_content( - self, mail_txt) - - # python2 needs this as utf8 encoded string (not unicode) - if sys.version < '3': - mail_txt = mail_txt.encode("utf-8") - - msg = Parser().parsestr(mail_txt) - content_type = msg["Content-Type"] - self.assertEqual(content_type, 'text/plain; charset="utf-8"') - - def test_mail_quoted_printable(self): - """Regression test for debian bug #700178""" - send_summary_mail(*self._return_mock_data()) - with open("mail.txt", "rb") as fp: - log_data = fp.read().decode("utf-8") - needle = "Allowed origins are: ['o=3DDebian,n=3Dwheezy', "\ - "'o=3DDebian,n=3Dwheezy-updat=\n"\ - "es', 'o=3DDebian,n=3Dwheezy,l=3DDebian-Security', "\ - "'origin=3DDebian,archive=\n"\ - "=3Dstable,label=3DDebian-Security']" - self.assertTrue(needle in log_data) - - -class SendmailAndMailxTestCase(SendmailTestCase): - - def setUp(self): - self.common_setup() - unattended_upgrade.MAIL_BINARY = "./mock-mail" - unattended_upgrade.SENDMAIL_BINARY = "./mock-sendmail" - - -if __name__ == "__main__": - #logging.basicConfig(level=logging.DEBUG) - unittest.main() diff --git a/package/test/test_origin_pattern.py b/package/test/test_origin_pattern.py deleted file mode 100755 index d71e5a61964709d18cfc07576ddff549b96e8900..0000000000000000000000000000000000000000 --- a/package/test/test_origin_pattern.py +++ /dev/null @@ -1,190 +0,0 @@ -#!/usr/bin/python3 - -import apt_pkg -import logging -import unittest - -import unattended_upgrade -from unattended_upgrade import ( - check_changes_for_sanity, - is_allowed_origin, - get_distro_codename, - match_whitelist_string, - UnknownMatcherError, -) - - -class MockOrigin(): - trusted = True - - -class MockCandidate(): - pass - - -class MockPackage(): - pass - - -class MockCache(dict): - def __iter__(self): - for pkgname in self.keys(): - yield self[pkgname] - - -class MockDepCache(): - pass - - -class TestOriginPatern(unittest.TestCase): - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_match_whitelist_string(self): - origin = self._get_mock_origin( - "OriginUbuntu", "LabelUbuntu", "ArchiveUbuntu", - "archive.ubuntu.com", "main") - # good - s = "o=OriginUbuntu" - self.assertTrue(match_whitelist_string(s, origin)) - s = "o=OriginUbuntu,l=LabelUbuntu,a=ArchiveUbuntu," \ - "site=archive.ubuntu.com" - self.assertTrue(match_whitelist_string(s, origin)) - # bad - s = "" - self.assertFalse(match_whitelist_string(s, origin)) - s = "o=something" - self.assertFalse(match_whitelist_string(s, origin)) - s = "o=LabelUbuntu,a=no-match" - self.assertFalse(match_whitelist_string(s, origin)) - # with escaping - origin = self._get_mock_origin("Google, Inc.", archive="stable") - # good - s = "o=Google\, Inc.,a=stable" - self.assertTrue(match_whitelist_string(s, origin)) - - def test_match_whitelist_from_conffile(self): - # read some - apt_pkg.config.clear("Unattended-Upgrade") - apt_pkg.read_config_file( - apt_pkg.config, "./data/50unattended-upgrades.Test") - allowed_origins = unattended_upgrade.get_allowed_origins() - #print allowed_origins - self.assertTrue("o=aOrigin,a=aArchive" in allowed_origins) - self.assertTrue("s=aSite,l=aLabel" in allowed_origins) - self.assertTrue("o=Google\, Inc.,suite=stable" in allowed_origins) - - def test_macro(self): - codename = get_distro_codename() - s = "a=${distro_codename}" - origin = self._get_mock_origin("Foo", archive=codename) - self.assertTrue(match_whitelist_string(s, origin)) - - def test_compatiblity(self): - apt_pkg.config.clear("Unattended-Upgrade") - apt_pkg.read_config_file( - apt_pkg.config, "./data/50unattended-upgrades.compat") - allowed_origins = unattended_upgrade.get_allowed_origins() - #print allowed_origins - self.assertTrue("o=Google\, Inc.,a=stable" in allowed_origins) - self.assertTrue("o=MoreCorp\, eink,a=stable" in allowed_origins) - # test whitelist - pkg = self._get_mock_package() - self.assertTrue(is_allowed_origin(pkg.candidate, allowed_origins)) - - def test_unkown_matcher(self): - apt_pkg.config.clear("Unattended-Upgrade") - s = "xxx=OriginUbuntu" - with self.assertRaises(UnknownMatcherError): - self.assertTrue(match_whitelist_string(s, None)) - - def test_blacklist(self): - # get the mocks - pkg = self._get_mock_package("linux-image") - cache = self._get_mock_cache() - cache[pkg.name] = pkg - # origins and blacklist - allowed_origins = ["o=Ubuntu"] - blacklist = ["linux-.*"] - # with blacklist pkg - self.assertFalse( - check_changes_for_sanity( - cache, allowed_origins, blacklist, [".*"])) - # with "normal" pkg - pkg.name = "apt" - self.assertTrue( - check_changes_for_sanity( - cache, allowed_origins, blacklist, [".*"])) - - def test_whitelist_with_strict_whitelisting(self): - cache = self._get_mock_cache() - for pkgname in ["not-whitelisted", "whitelisted"]: - pkg = self._get_mock_package(name=pkgname) - cache[pkg.name] = pkg - # origins and blacklist - allowed_origins = ["o=Ubuntu"] - whitelist = ["whitelisted"] - # test with strict whitelist - apt_pkg.config.set( - "Unattended-Upgrade::Package-Whitelist-Strict", "true") - # ensure that a not-whitelisted pkg will fail - self.assertTrue(cache["not-whitelisted"].marked_upgrade) - self.assertFalse( - check_changes_for_sanity(cache, allowed_origins, [], whitelist)) - - def _get_mock_cache(self): - cache = MockCache() - cache._depcache = MockDepCache() - cache._depcache.broken_count = 0 - return cache - - def _get_mock_origin(self, aorigin="", label="", archive="", - site="", component=""): - origin = MockOrigin() - origin.origin = aorigin - origin.label = label - origin.archive = archive - origin.site = site - origin.compoent = component - return origin - - def _get_mock_package(self, name="foo"): - pkg = MockPackage() - pkg._pkg = MockPackage() - pkg._pkg.selected_state = 0 - pkg.name = name - pkg.marked_install = True - pkg.marked_upgrade = True - pkg.marked_delete = False - pkg.candidate = MockCandidate() - pkg.candidate.origins = [self._get_mock_origin("Ubuntu"), - self._get_mock_origin(aorigin="Google, Inc.", - archive="stable")] - pkg.candidate.record = {} - return pkg - - def test_match_whitelist_wildcard(self): - origin = self._get_mock_origin( - "OriginUbuntu", "LabelUbuntu", "ArchiveUbuntu", - "archive.ubuntu.com", "main") - # good - s = "o=OriginU*" - self.assertTrue(match_whitelist_string(s, origin)) - # bad - s = "o=X*" - self.assertFalse(match_whitelist_string(s, origin)) - # good - s = "o=?riginUbunt?" - self.assertTrue(match_whitelist_string(s, origin)) - # good - s = "o=*Ubunt?" - self.assertTrue(match_whitelist_string(s, origin)) - - -if __name__ == "__main__": - logging.basicConfig(level=logging.DEBUG) - unittest.main() diff --git a/package/test/test_pep8.py b/package/test/test_pep8.py deleted file mode 100755 index ac17a6de44794073ea47648ceca72fa3988fb054..0000000000000000000000000000000000000000 --- a/package/test/test_pep8.py +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/python - -import os -import subprocess -import unittest - -# E126: I don't even know what its supposed to tell me :( -IGNORE = "E126,E265,E402" - - -class PackagePep8TestCase(unittest.TestCase): - - def test_pep8_clean(self): - top_src_dir = os.path.join(os.path.dirname(__file__), "..") - targets = [ - top_src_dir, - os.path.join(top_src_dir, "unattended-upgrade"), - os.path.join(top_src_dir, "unattended-upgrade-shutdown"), - ] - #self.assertEqual(subprocess.call( - #["pep8", "--repeat", "--ignore=%s" % IGNORE] + targets), 0) - - -if __name__ == "__main__": - unittest.main() diff --git a/package/test/test_pyflakes.py b/package/test/test_pyflakes.py deleted file mode 100755 index c28aa8f3838bafcd035cb3464382f09df35a2652..0000000000000000000000000000000000000000 --- a/package/test/test_pyflakes.py +++ /dev/null @@ -1,20 +0,0 @@ -import os -import subprocess -import unittest - - -class TestPyflakesClean(unittest.TestCase): - """ ensure that the tree is pyflakes clean """ - - def test_pyflakes_clean(self): - top_src_dir = os.path.join(os.path.dirname(__file__), "..") - targets = [ - top_src_dir, - os.path.join(top_src_dir, "unattended-upgrade"), - os.path.join(top_src_dir, "unattended-upgrade-shutdown"), - ] - #self.assertEqual(subprocess.call(["pyflakes", ] + targets), 0) - - -if __name__ == "__main__": - unittest.main() diff --git a/package/test/test_reboot.py b/package/test/test_reboot.py deleted file mode 100755 index 2a0b3f3243e36265ddfedd296cd4bd048b578d28..0000000000000000000000000000000000000000 --- a/package/test/test_reboot.py +++ /dev/null @@ -1,91 +0,0 @@ -#!/usr/bin/python - -import datetime -import logging -import os -import unittest - -import apt_pkg - -from mock import ( - patch, -) - -import unattended_upgrade - - -class RebootTestCase(unittest.TestCase): - - def setUp(self): - # create reboot required file - REBOOT_REQUIRED_FILE = "./reboot-required" - with open(REBOOT_REQUIRED_FILE, "w"): - pass - self.addCleanup(lambda: os.remove(REBOOT_REQUIRED_FILE)) - unattended_upgrade.REBOOT_REQUIRED_FILE = REBOOT_REQUIRED_FILE - # enable automatic-reboot - apt_pkg.config.set("Unattended-Upgrade::Automatic-Reboot", "1") - apt_pkg.config.set( - "Unattended-Upgrade::Automatic-Reboot-WithUsers", "1") - - @patch("subprocess.call") - def test_no_reboot_done_because_no_stamp(self, mock_call): - unattended_upgrade.REBOOT_REQUIRED_FILE = "/no/such/file/or/directory" - unattended_upgrade.reboot_if_requested_and_needed() - self.assertEqual(mock_call.called, False) - - @patch("subprocess.call") - def test_no_reboot_done_because_no_option(self, mock_call): - apt_pkg.config.set("Unattended-Upgrade::Automatic-Reboot", "0") - unattended_upgrade.reboot_if_requested_and_needed() - self.assertEqual(mock_call.called, False) - - @patch("subprocess.call") - def test_reboot_now(self, mock_call): - unattended_upgrade.reboot_if_requested_and_needed() - mock_call.assert_called_with(["/sbin/shutdown", "-r", "now"]) - - @patch("subprocess.call") - def test_reboot_time(self, mock_call): - apt_pkg.config.set( - "Unattended-Upgrade::Automatic-Reboot-Time", "03:00") - unattended_upgrade.reboot_if_requested_and_needed() - mock_call.assert_called_with(["/sbin/shutdown", "-r", "03:00"]) - - @patch("subprocess.call") - def test_reboot_withoutusers(self, mock_call): - """Ensure that a reboot happens when no users are logged in""" - apt_pkg.config.set( - "Unattended-Upgrade::Automatic-Reboot-WithUsers", "0") - apt_pkg.config.set( - "Unattended-Upgrade::Automatic-Reboot-Time", "04:00") - # some pgm that allways output nothing - unattended_upgrade.USERS = "/bin/true" - unattended_upgrade.reboot_if_requested_and_needed() - mock_call.assert_called_with(["/sbin/shutdown", "-r", "04:00"]) - - @patch("subprocess.call") - def test_reboot_withusers(self, mock_call): - """Ensure that a reboot does not happen if a user is logged in""" - apt_pkg.config.set( - "Unattended-Upgrade::Automatic-Reboot-WithUsers", "0") - # some pgm that allways output a word - unattended_upgrade.USERS = "/bin/uname" - unattended_upgrade.reboot_if_requested_and_needed() - self.assertEqual( - mock_call.called, False, - "Called '%s' when nothing should have " - "happen" % mock_call.call_args_list) - - @patch("subprocess.call") - def test_logged_in_users(self, mock_call): - # some pgm that allways output a word - unattended_upgrade.USERS = ["/bin/date", "+%Y %Y %Y"] - users = unattended_upgrade.logged_in_users() - today = datetime.date.today() - self.assertEqual(users, set([today.strftime("%Y")])) - - -if __name__ == "__main__": - logging.basicConfig(level=logging.DEBUG) - unittest.main() diff --git a/package/test/test_regression.py b/package/test/test_regression.py deleted file mode 100755 index 7799a421ae1f78f5201427376099acff03c0c341..0000000000000000000000000000000000000000 --- a/package/test/test_regression.py +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/python3 -# -*- coding: utf-8 -*- - -import io -import os -import sys -import tempfile -import unittest - -from mock import ( - Mock, - patch, -) - -from unattended_upgrade import do_install - - -class MockCache: - def __iter__(self): - raise StopIteration - - def get_changes(self): - return [] - - -class TestRegression(unittest.TestCase): - - @unittest.skipIf(sys.version_info[0] != 3, "only works on py3") - @patch("unattended_upgrade.upgrade_normal") - def test_do_install_fail_unicode_write(self, mock_upgrade_normal): - """ test if the substitute function works """ - def _raise(*args): - raise Exception("meepä") - tmp = tempfile.TemporaryFile() - old_stderr = os.dup(2) - # comment this line if you need to debug stuff - os.dup2(tmp.fileno(), 2) - - mock_upgrade_normal.side_effect = _raise - logfile_dpkg = io.StringIO() - # mock pkg - pkg = Mock() - pkg.name = "meep" - # mock options - options = Mock() - options.minimal_upgrade_steps = False - do_install(cache=MockCache(), pkgs_to_upgrade=[pkg], - blacklisted_pkgs=[], - whitelisted_pkgs=[], options=options, - logfile_dpkg=logfile_dpkg) - # if there is no exception here, we are good - os.dup2(old_stderr, 2) - tmp.seek(0) - content = tmp.read().decode("utf-8").splitlines() - tmp.close() - #self.assertEqual(content[-1], "Exception: meepä") - - -if __name__ == "__main__": - import logging - logging.basicConfig(level=logging.DEBUG) - unittest.main() diff --git a/package/test/test_rewind.py b/package/test/test_rewind.py deleted file mode 100755 index 28f6a8e9f71fc30539544a1c951c2bacdf936922..0000000000000000000000000000000000000000 --- a/package/test/test_rewind.py +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/python - -import os -import unittest - -import apt - -import unattended_upgrade - -apt.apt_pkg.config.set("APT::Architecture", "amd64") - - -class MockOptions(object): - debug = False - verbose = False - dry_run = True - apt_debug = False - minimal_upgrade_steps = False - - -class TestRewindCache(unittest.TestCase): - - def setUp(self): - rootdir = os.path.abspath("./root.rewind") - dpkg_status = os.path.abspath( - os.path.join(rootdir, "var", "lib", "dpkg", "status")) - apt.apt_pkg.config.set("Dir::State::status", dpkg_status) - self.allowed_origins = ["origin=Ubuntu,archive=lucid-security"] - self.cache = unattended_upgrade.UnattendedUpgradesCache( - rootdir=rootdir, allowed_origins=self.allowed_origins) - - def test_rewind_cache(self): - """ Test that rewinding the cache works correctly, debian #743594 """ - options = MockOptions() - blacklisted_pkgs = [] - whitelisted_pkgs = [] - to_upgrade, kept_back = unattended_upgrade.calculate_upgradable_pkgs( - self.cache, options, self.allowed_origins, blacklisted_pkgs, - whitelisted_pkgs) - self.assertEqual(to_upgrade, [self.cache["test-package"]]) - self.assertEqual(kept_back, ["z-package"]) - - -if __name__ == "__main__": - import logging - logging.basicConfig(level=logging.DEBUG) - unittest.main() diff --git a/package/test/test_substitute.py b/package/test/test_substitute.py deleted file mode 100755 index 061a68885c7e7164ea1b41d4ccfc9cd7fc8f4e05..0000000000000000000000000000000000000000 --- a/package/test/test_substitute.py +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/python3 - -import apt_pkg -import logging -import unittest - -import unattended_upgrade -from unattended_upgrade import substitute, get_allowed_origins - - -class TestSubstitude(unittest.TestCase): - - def setUp(self): - # monkey patch DISTRO_{CODENAME, ID} - unattended_upgrade.DISTRO_CODENAME = "nacked" - unattended_upgrade.DISTRO_ID = "MyDistroID" - - def testSubstitute(self): - """ test if the substitute function works """ - self.assertTrue(substitute("${distro_codename}-updates"), - "nacked-updates") - self.assertTrue(substitute("${distro_id}"), "MyDistroID") - - def test_get_allowed_origins_with_substitute(self): - """ test if substitute for get_allowed_origins works """ - apt_pkg.config.clear("Unattended-Upgrade::Allowed-Origins") - apt_pkg.config.set("Unattended-Upgrade::Allowed-Origins::", - "${distro_id} ${distro_codename}-security") - l = get_allowed_origins() - self.assertTrue(("o=MyDistroID,a=nacked-security") in l) - - -if __name__ == "__main__": - logging.basicConfig(level=logging.DEBUG) - unittest.main() diff --git a/package/test/test_untrusted.py b/package/test/test_untrusted.py deleted file mode 100755 index 07a913215291ee0ed5b85e8a1653e32ad7c6fb1e..0000000000000000000000000000000000000000 --- a/package/test/test_untrusted.py +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/python - -import os -import unittest - -import apt - -import unattended_upgrade - -apt.apt_pkg.config.set("APT::Architecture", "amd64") - - -class MockOptions(object): - debug = True - verbose = False - dry_run = True - apt_debug = False - minimal_upgrade_steps = False - - -class TestUntrusted(unittest.TestCase): - - def setUp(self): - self.rootdir = os.path.abspath("./root.untrusted") - dpkg_status = os.path.abspath( - os.path.join(self.rootdir, "var", "lib", "dpkg", "status")) - apt.apt_pkg.config.set("Dir::State::status", dpkg_status) - apt.apt_pkg.config.clear("DPkg::Pre-Invoke") - apt.apt_pkg.config.clear("DPkg::Post-Invoke") - self.log = os.path.join( - self.rootdir, "var", "log", "unattended-upgrades", - "unattended-upgrades.log") - - def tearDown(self): - os.remove(self.log) - - def test_untrusted_check_without_conffile_check(self): - # ensure there is no conffile_prompt check - apt.apt_pkg.config.set("DPkg::Options::", "--force-confold") - - # run it - options = MockOptions() - unattended_upgrade.main(options, rootdir=self.rootdir) - # read the log to see what happend - with open(self.log) as f: - needle = "DEBUG InstCount=0 DelCount=0 BrokenCount=0" - haystack = f.read() - self.assertTrue(needle in haystack, - "Can not find '%s' in '%s'" % (needle, haystack)) - self.assertTrue("pkg 'test-package' is untrusted" in haystack) - -if __name__ == "__main__": - # do not setup logging in here or the test will break - unittest.main() diff --git a/package/test/unattended_upgrade.py b/package/test/unattended_upgrade.py deleted file mode 120000 index 6d123e708bdbec951bee562662f4f9ee129aec8d..0000000000000000000000000000000000000000 --- a/package/test/unattended_upgrade.py +++ /dev/null @@ -1 +0,0 @@ -../unattended-upgrade \ No newline at end of file diff --git a/package/test/unattended_upgrade.pyc b/package/test/unattended_upgrade.pyc deleted file mode 100644 index ab4fac49df9fab857470524038424e448ee0af79..0000000000000000000000000000000000000000 Binary files a/package/test/unattended_upgrade.pyc and /dev/null differ diff --git a/package/unattended-upgrade b/package/unattended-upgrade deleted file mode 100755 index c071d431fd8d4ff5e8eba516c2a7390972069448..0000000000000000000000000000000000000000 --- a/package/unattended-upgrade +++ /dev/null @@ -1,1468 +0,0 @@ -#!/usr/bin/python3 -# Copyright (c) 2005-2015 Canonical Ltd -# -# AUTHOR: -# Michael Vogt <mvo@ubuntu.com> -# -# This file is part of unattended-upgrades -# -# unattended-upgrades is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as published -# by the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# unattended-upgrades is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with unattended-upgrades; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# - -import copy -import datetime -import errno -import email.charset -import fcntl -import fnmatch -import gettext -import grp -import io -import locale -import logging -import re -import os -import select -import signal -import string -import subprocess -import sys - - -from email.message import Message -from gettext import gettext as _ -from io import StringIO -from optparse import ( - OptionParser, - SUPPRESS_HELP, -) - -from subprocess import ( - Popen, - PIPE, -) -import apt -import apt_inst -import apt_pkg - - -# the reboot required flag file used by packages -REBOOT_REQUIRED_FILE = "/var/run/reboot-required" -MAIL_BINARY = "/usr/bin/mail" -SENDMAIL_BINARY = "/usr/sbin/sendmail" -USERS = "/usr/bin/users" -# no py3 lsb_release in debian :/ -DISTRO_CODENAME = subprocess.check_output( - ["lsb_release", "-c", "-s"], universal_newlines=True).strip() -DISTRO_ID = subprocess.check_output( - ["lsb_release", "-i", "-s"], universal_newlines=True).strip() - -# progress information is written here -PROGRESS_LOG = "/var/run/unattended-upgrades.progress" -PID_FILE = "/var/run/unattended-upgrades.pid" - -# set from the sigint signal handler -SIGNAL_STOP_REQUEST = False - - -class LoggingDateTime: - """The date/time representation for the dpkg log file timestamps""" - LOG_DATE_TIME_FMT = "%Y-%m-%d %H:%M:%S" - - @classmethod - def as_string(cls): - """Return the current date and time as LOG_DATE_TIME_FMT string""" - return datetime.datetime.now().strftime(cls.LOG_DATE_TIME_FMT) - - @classmethod - def from_string(cls, logstr): - """Take a LOG_DATE_TIME_FMT string and return datetime object""" - return datetime.datetime.strptime(logstr, cls.LOG_DATE_TIME_FMT) - - -class UnknownMatcherError(ValueError): - pass - - -class UnattendedUpgradesCache(apt.Cache): - - def __init__(self, rootdir, allowed_origins): - apt.Cache.__init__(self, rootdir=rootdir) - self.allowed_origins = allowed_origins - # ensure we update the candidate versions - self.adjust_candidate_versions() - - def clear(self): - apt.Cache.clear(self) - # ensure we update the candidate versions - self.adjust_candidate_versions() - - def adjust_candidate_versions(self): - """ Adjust candidate versions to match highest allowed origin - - This adjusts the origin even if the candidate has a higher - version. This is needed when e.g. a package is available in - the security pocket but there is also a package in the - updates pocket with a higher version number - """ - for pkg in self: - # important! this avoids downgrades below - if not pkg.is_upgradable: - continue - # check if the candidate is already pointing to a allowed - # origin and if so, do not mess with it - if is_allowed_origin(pkg.candidate, self.allowed_origins): - continue - # check if we have a version in a allowed origin that is - # not the candidate - new_cand = None - for ver in pkg.versions: - # ignore versions that the user marked with priority < 100 - # (and ensure we have a python-apt that supports this) - if (hasattr(ver, "policy_priority") and - ver.policy_priority < 100): - logging.debug("ignoring ver '%s' with priority < 0" % ver) - continue - if is_allowed_origin(ver, self.allowed_origins): - # leave as soon as we have the highest new candidate - new_cand = ver - break - if new_cand and new_cand != pkg.candidate: - logging.debug("adjusting candidate version: '%s'" % new_cand) - pkg.candidate = new_cand - - -class LogInstallProgress(apt.progress.base.InstallProgress): - """ Install progress that writes to self.progress_log - (/var/run/unattended-upgrades.progress by default) - """ - - def __init__(self, logfile_dpkg, verbose=False, - progress_log="var/run/unattended-upgrades.progress"): - apt.progress.base.InstallProgress.__init__(self) - self.logfile_dpkg = logfile_dpkg - self.progress_log = os.path.join(apt_pkg.config.find_dir("Dir"), - progress_log) - self.verbose = verbose - self.output_logfd = None - - def status_change(self, pkg, percent, status): - with open(self.progress_log, "w") as f: - f.write(_("Progress: %s %% (%s)") % (percent, pkg)) - - def _fixup_fds(self): - required_fds = [0, 1, 2, # stdin, stdout, stderr - self.writefd, - self.write_stream.fileno(), - self.statusfd, - self.status_stream.fileno() - ] - # ensure that our required fds close on exec - for fd in required_fds[3:]: - old_flags = fcntl.fcntl(fd, fcntl.F_GETFD) - fcntl.fcntl(fd, fcntl.F_SETFD, old_flags | fcntl.FD_CLOEXEC) - # close all fds - proc_fd = "/proc/self/fd" - if os.path.exists(proc_fd): - error_count = 0 - for fdname in os.listdir(proc_fd): - try: - fd = int(fdname) - except Exception as e: - print("ERROR: can not get fd for '%s'" % fdname) - if fd in required_fds: - continue - try: - os.close(fd) - # print("closed: ", fd) - except OSError as e: - # there will be one fd that can not be closed - # as its the fd from pythons internal diropen() - # so its ok to ignore one close error - error_count += 1 - if error_count > 1: - print("ERROR: os.close(%s): %s" % (fd, e)) - - def _redirect_stdin(self): - REDIRECT_INPUT = os.devnull - fd = os.open(REDIRECT_INPUT, os.O_RDWR) - os.dup2(fd, 0) - - def _redirect_output(self): - # do not create log in dry-run mode, just output to stdout/stderr - if not apt_pkg.config.find_b("Debug::pkgDPkgPM", False): - logfd = self._get_logfile_dpkg_fd() - os.dup2(logfd, 1) - os.dup2(logfd, 2) - - def _get_logfile_dpkg_fd(self): - logfd = os.open( - self.logfile_dpkg, os.O_RDWR | os.O_APPEND | os.O_CREAT, 0o640) - try: - adm_gid = grp.getgrnam("adm").gr_gid - os.fchown(logfd, 0, adm_gid) - except (KeyError, OSError): - pass - return logfd - - def update_interface(self): - # call super class first - apt.progress.base.InstallProgress.update_interface(self) - self._do_verbose_output_if_needed() - - def _do_verbose_output_if_needed(self): - # if we are in debug mode, nothing to be more verbose about - if apt_pkg.config.find_b("Debug::pkgDPkgPM", False): - return - # handle verbose - if self.verbose: - if self.output_logfd is None: - self.output_logfd = os.open(self.logfile_dpkg, os.O_RDONLY) - os.lseek(self.output_logfd, 0, os.SEEK_END) - try: - select.select([self.output_logfd], [], [], 0) - except select.error as e: - if e.errno != errno.EINTR: - logging.exception("select failed") - # output to stdout in verbose mode only - os.write(1, os.read(self.output_logfd, 1024)) - - def _log_in_dpkg_log(self, msg): - logfd = self._get_logfile_dpkg_fd() - os.write(logfd, msg.encode("utf-8")) - os.close(logfd) - - def finish_update(self): - self._log_in_dpkg_log("Log ended: %s\n\n" - % LoggingDateTime.as_string()) - - def fork(self): - self._log_in_dpkg_log("Log started: %s\n" - % LoggingDateTime.as_string()) - pid = os.fork() - if pid == 0: - self._fixup_fds() - self._redirect_stdin() - self._redirect_output() - return pid - - -class Unlocked: - """ - Context manager for unlocking the apt lock while cache.commit() is run - """ - - def __enter__(self): - try: - apt_pkg.pkgsystem_unlock() - except: - pass - - def __exit__(self, exc_type, exc_value, exc_tb): - try: - apt_pkg.pkgsystem_unlock() - except: - pass - - -def is_dpkg_journal_dirty(): - """ - Return True if the dpkg journal is dirty - (similar to debSystem::CheckUpdates) - """ - d = os.path.join( - os.path.dirname(apt_pkg.config.find_file("Dir::State::status")), - "updates") - for f in os.listdir(d): - if re.match("[0-9]+", f): - return True - return False - - -def signal_handler(signal, frame): - logging.warning("SIGUSR1 received, will stop") - global SIGNAL_STOP_REQUEST - SIGNAL_STOP_REQUEST = True - - -def substitute(line): - """ substitude known mappings and return a new string - - Currently supported ${distro-release} - """ - mapping = {"distro_codename": get_distro_codename(), - "distro_id": get_distro_id()} - return string.Template(line).substitute(mapping) - - -def get_distro_codename(): - return DISTRO_CODENAME - - -def get_distro_id(): - return DISTRO_ID - - -def get_allowed_origins_legacy(): - """ legacy support for old Allowed-Origins var """ - allowed_origins = [] - for s in apt_pkg.config.value_list("Unattended-Upgrade::Allowed-Origins"): - # if there is a ":" use that as seperator, else use spaces - if ":" in s: - (distro_id, distro_codename) = s.split(':') - else: - (distro_id, distro_codename) = s.split() - # escape "," (see LP: #824856) - i wonder if there is a simpler way? - distro_id = re.sub(r'([^\\]),', r'\1\\,', distro_id) - distro_codename = re.sub(r'([^\\]),', r'\1\\,', distro_codename) - # convert to new format - allowed_origins.append("o=%s,a=%s" % (substitute(distro_id), - substitute(distro_codename))) - return allowed_origins - - -def get_allowed_origins(): - """ return a list of allowed origins from apt.conf - - This will take substitutions (like distro_id) into account. - """ - allowed_origins = get_allowed_origins_legacy() - for s in apt_pkg.config.value_list("Unattended-Upgrade::Origins-Pattern"): - allowed_origins.append(substitute(s)) - return allowed_origins - - -def match_whitelist_string(whitelist, origin): - """ - take a whitelist string in the form "origin=Debian,label=Debian-Security" - and match against the given python-apt origin. A empty whitelist string - never matches anything. - """ - whitelist = whitelist.strip() - if whitelist == "": - logging.warning("empty match string matches nothing") - return False - res = True - # make "\," the html quote equivalent - whitelist = whitelist.replace("\,", "%2C") - for token in whitelist.split(","): - # strip and unquote the "," back - (what, value) = [s.strip().replace("%2C", ",") - for s in token.split("=")] - # logging.debug("matching '%s'='%s' against '%s'" % ( - # what, value, origin)) - # support substitution here as well - value = substitute(value) - # first char is apt-cache policy output, send is the name - # in the Release file - if what in ("o", "origin"): - res &= fnmatch.fnmatch(origin.origin, value) - elif what in ("l", "label"): - res &= fnmatch.fnmatch(origin.label, value) - elif what in ("a", "suite", "archive"): - res &= fnmatch.fnmatch(origin.archive, value) - elif what in ("c", "component"): - res &= fnmatch.fnmatch(origin.component, value) - elif what in ("site",): - res &= fnmatch.fnmatch(origin.site, value) - elif what in ("n", "codename",): - res &= fnmatch.fnmatch(origin.codename, value) - else: - raise UnknownMatcherError( - "Unknown whitelist entry for macher '%s' (token '%s')" % ( - what, token)) - # logging.debug("matching '%s'='%s' against '%s'" % ( - # what, value, origin)) - return res - - -def cache_commit(cache, logfile_dpkg, verbose, iprogress=None): - """Commit the changes from the given cache to the system""" - # set debconf to NON_INTERACTIVE, redirect output - os.putenv("DEBIAN_FRONTEND", "noninteractive") - - # only act if there is anything to do (important to avoid writing - # empty log stanzas) - if len(cache.get_changes()) == 0: - return True, None - - error = None - res = False - if iprogress is None: - iprogress = LogInstallProgress(logfile_dpkg, verbose) - - try: - with Unlocked(): - res = cache.commit(install_progress=iprogress) - except SystemError as e: - error = e - if verbose: - logging.exception("Exception happened during upgrade.") - return res, error - - -def upgrade_normal(cache, logfile_dpkg, verbose): - res, error = cache_commit(cache, logfile_dpkg, verbose) - if res: - logging.info(_("All upgrades installed")) - else: - logging.error(_("Installing the upgrades failed!")) - logging.error(_("error message: '%s'"), error) - logging.error(_("dpkg returned a error! See '%s' for details"), - logfile_dpkg) - return res - - -def upgrade_in_minimal_steps(cache, pkgs_to_upgrade, blacklist, - whitelist, logfile_dpkg="", verbose=False): - - install_log = LogInstallProgress(logfile_dpkg, verbose) - install_log.progress_log += ".minimal-steps" - - # setup signal handler - signal.signal(signal.SIGUSR1, signal_handler) - - # double check any changes we do - allowed_origins = get_allowed_origins() - - # to upgrade contains the package names - to_upgrade = set(pkgs_to_upgrade) - while True: - # find smallest set - smallest_partition = to_upgrade - for pkgname in to_upgrade: - if SIGNAL_STOP_REQUEST: - logging.warning("SIGNAL received, stopping") - return True - pkg = cache[pkgname] - if pkg.is_upgradable: - pkg.mark_upgrade() - elif not pkg.is_installed: - pkg.mark_install() - else: - continue - # double check that we are not running into side effects like - # what could have been caused LP: #1020680 - if not check_changes_for_sanity(cache, allowed_origins, blacklist, - whitelist): - logging.info("While building minimal partition: " - "cache has not allowed changes") - cache.clear() - continue - changes = [p.name for p in cache.get_changes()] - if not changes: - continue - if len(changes) == 1: - logging.debug("found leaf package %s" % pkg.name) - smallest_partition = changes - break - if len(changes) < len(smallest_partition): - logging.debug("found partition of size %s (%s)" % ( - len(changes), changes)) - smallest_partition = changes - cache.clear() - - # write progress log information - if len(pkgs_to_upgrade) > 0: - percent = ((len(pkgs_to_upgrade) - len(to_upgrade)) / - float(len(pkgs_to_upgrade)) * 100.0) - else: - percent = 100.0 - install_log.status_change(pkg=",".join(smallest_partition), - percent=percent, - status="") - # apply changes - logging.debug("applying set %s" % smallest_partition) - rewind_cache(cache, [cache[name] for name in smallest_partition]) - - res, error = cache_commit(cache, logfile_dpkg, verbose, install_log) - if error: - if verbose: - logging.exception("Exception happened during upgrade.") - logging.error(_("Installing the upgrades failed!")) - logging.error(_("error message: '%s'"), error) - logging.error(_("dpkg returned a error! See '%s' for details"), - logfile_dpkg) - return False - to_upgrade = to_upgrade - set(smallest_partition) - logging.debug("left to upgrade %s" % to_upgrade) - if len(to_upgrade) == 0: - logging.info(_("All upgrades installed")) - break - return True - - -def is_allowed_origin(ver, allowed_origins): - if not ver: - return False - for origin in ver.origins: - for allowed in allowed_origins: - if match_whitelist_string(allowed, origin): - return True - return False - - -def is_pkgname_in_blacklist(pkgname, blacklist): - for blacklist_regexp in blacklist: - if re.match(blacklist_regexp, pkgname): - logging.debug("skipping blacklisted package '%s'" % pkgname) - return True - return False - - -def is_pkgname_in_whitelist(pkgname, whitelist): - # a empty whitelist means the user does not want to use this feature - if not whitelist: - return True - for whitelist_regexp in whitelist: - if re.match(whitelist_regexp, pkgname): - logging.debug("only upgrading the following package '%s'" % - pkgname) - return True - return False - - -def check_changes_for_sanity(cache, allowed_origins, blacklist, whitelist): - if cache._depcache.broken_count != 0: - return False - for pkg in cache: - if pkg.marked_delete: - logging.debug("pkg '%s' now marked delete" % pkg.name) - return False - if pkg.marked_install or pkg.marked_upgrade: - # apt will never fallback from a trusted to a untrusted - # origin so its good enough if we have a single trusted one - if not any([o.trusted for o in pkg.candidate.origins]): - logging.debug("pkg '%s' is untrusted" % pkg.name) - return False - if not is_allowed_origin(pkg.candidate, allowed_origins): - logging.debug("pkg '%s' not in allowed origin" % pkg.name) - return False - if is_pkgname_in_blacklist(pkg.name, blacklist): - logging.debug("pkg '%s' package has been blacklisted" % - pkg.name) - return False - # a strict whitelist will not allow any changes not in the - # whitelist, most people will want the relaxed whitelist - # that whitelists a package but pulls in the package - # dependencies - strict_whitelist = apt_pkg.config.find_b( - "Unattended-Upgrade::Package-Whitelist-Strict", False) - if (strict_whitelist and - not is_pkgname_in_whitelist(pkg.name, whitelist)): - - logging.debug("pkg '%s' package is not whitelisted" % - pkg.name) - return False - if pkg._pkg.selected_state == apt_pkg.SELSTATE_HOLD: - logging.debug("pkg '%s' is on hold" % pkg.name) - return False - # check if the package is unsafe to upgrade unattended - ignore_require_restart = apt_pkg.config.find_b( - "Unattended-Upgrade::IgnoreAppsRequireRestart", False) - upgrade_requires = pkg.candidate.record.get("Upgrade-Requires") - if (pkg.marked_upgrade and ignore_require_restart is False and - upgrade_requires == "app-restart"): - logging.debug("pkg '%s' requires app-restart, not safe to " - "upgrade unattended") - return False - return True - - -def pkgname_from_deb(debfile): - # FIXME: add error checking here - try: - control = apt_inst.DebFile(debfile).control.extractdata("control") - sections = apt_pkg.TagSection(control) - return sections["Package"] - except (IOError, SystemError) as e: - logging.error("failed to read deb file '%s' (%s)" % (debfile, e)) - # dumb fallback - return debfile.split("_")[0] - - -def get_md5sum_for_file_in_deb(deb_file, conf_file): - dpkg_cmd = ["dpkg-deb", "--fsys-tarfile", deb_file] - tar_cmd = ["tar", "-x", "-O", "-f", "-", "." + conf_file] - md5_cmd = ["md5sum"] - dpkg_p = Popen(dpkg_cmd, stdout=PIPE) - tar_p = Popen(tar_cmd, stdin=dpkg_p.stdout, stdout=PIPE, - universal_newlines=True) - md5_p = Popen(md5_cmd, stdin=tar_p.stdout, stdout=PIPE, - universal_newlines=True) - pkg_md5sum = md5_p.communicate()[0].split()[0] - return pkg_md5sum - - -# prefix is *only* needed for the build-in tests -def conffile_prompt(destFile, prefix=""): - logging.debug("check_conffile_prompt('%s')" % destFile) - pkgname = pkgname_from_deb(destFile) - - # get the conffiles for the /var/lib/dpkg/status file - status_file = apt_pkg.config.find("Dir::State::status") - tagfile = apt_pkg.TagFile(open(status_file, "r")) - conffiles = "" - for section in tagfile: - if section.get("Package") == pkgname: - logging.debug("found pkg: %s" % pkgname) - if "Conffiles" in section: - conffiles = section.get("Conffiles") - break - - # get conffile value from pkg, its ok if the new version - # does not have conffiles anymore - pkg_conffiles = "" - deb = apt_inst.DebFile(destFile) - try: - pkg_conffiles = deb.control.extractdata("conffiles").strip().decode( - "utf-8") - except LookupError as e: - logging.debug("No conffiles in deb '%s' (%s)" % (destFile, e)) - - # Conffiles: - # /etc/bash_completion.d/m-a c7780fab6b14d75ca54e11e992a6c11c - dpkg_status_conffiles = {} - for line in conffiles.splitlines(): - # ignore empty lines - line = line.strip() - if not line: - continue - # show what we do - logging.debug("conffile line: '%s'", line) - l = line.split() - conf_file = l[0] - md5 = l[1] - if len(l) > 2: - obs = l[2] - else: - obs = None - # ignore if conffile is obsolete - if obs == "obsolete": - continue - # ignore state "newconffile" until its clearer if there - # might be a dpkg prompt (LP: #936870) - if md5 == "newconffile": - continue - if not pkg_conffiles or conf_file not in pkg_conffiles.split("\n"): - logging.debug("'%s' not in package conffiles '%s'" % ( - conf_file, pkg_conffiles)) - continue - # record for later - dpkg_status_conffiles[conf_file] = md5 - - # test against the installed file, if the local file got deleted - # by the admin thats ok but it may still trigger a conffile prompt - # (see debian #788049) - current_md5 = "" - if os.path.exists(prefix + conf_file): - with open(prefix + conf_file, 'rb') as fb: - current_md5 = apt_pkg.md5sum(fb) - logging.debug("current md5: %s" % current_md5) - - # hashes are the same, no conffile prompt - if current_md5 == md5: - continue - # calculate md5sum from the deb (may take a bit) - pkg_md5sum = get_md5sum_for_file_in_deb(destFile, conf_file) - logging.debug("pkg_md5sum: %s" % pkg_md5sum) - # the md5sum in the deb is unchanged, this will not - # trigger a conffile prompt - if pkg_md5sum == md5: - continue - # if we made it to this point: - # current_md5 != pkg_md5sum != md5 - # and that will trigger a conffile prompt, we can - # stop processing at this point and just return True - return True - - # now check if there are conffiles in the pkg that where not there - # in the previous version in the dpkg status file - if pkg_conffiles: - for conf_file in pkg_conffiles.split("\n"): - if (conf_file not in dpkg_status_conffiles and - os.path.exists(prefix + conf_file)): - logging.debug("found conffile '%s' in new pkg but on dpkg " - "status" % conf_file) - pkg_md5sum = get_md5sum_for_file_in_deb(destFile, conf_file) - with open(prefix + conf_file, 'rb') as fp: - if pkg_md5sum != apt_pkg.md5sum(fp): - return True - return False - - -def dpkg_conffile_prompt(): - if "DPkg::Options" not in apt_pkg.config: - return True - options = apt_pkg.config.value_list("DPkg::Options") - for option in options: - option = option.strip() - if option in ["--force-confold", "--force-confnew"]: - return False - return True - - -def rewind_cache(cache, pkgs_to_upgrade): - """ set the cache back to the state with packages_to_upgrade """ - cache.clear() - for pkg2 in pkgs_to_upgrade: - pkg2.mark_install() - if cache.broken_count > 0: - raise AssertionError("rewind_cache created a broken cache") - - -def host(): - return os.uname()[1] - - -# *sigh* textwrap is nice, but it breaks "linux-image" into two -# seperate lines -def wrap(t, width=70, subsequent_indent=""): - out = "" - for s in t.split(): - if (len(out) - out.rfind("\n")) + len(s) > width: - out += "\n" + subsequent_indent - out += s + " " - return out - - -def setup_apt_listchanges(conf="/etc/apt/listchanges.conf"): - """ deal with apt-listchanges """ - # apt-listchanges will always send a mail if there is a mail address - # set in the config regardless of the frontend used, so set it to - # mail if we have a sendmail and to none if not (as it appears to - # not check if sendmail is there or not), debian bug #579733 - if os.path.exists(SENDMAIL_BINARY): - os.environ["APT_LISTCHANGES_FRONTEND"] = "mail" - else: - os.environ["APT_LISTCHANGES_FRONTEND"] = "none" - - -def _send_mail_using_mailx(from_address, to_address, subject, body): - # ensure that the body is a byte stream and that we do not - # break on encoding errors (the default error mode is "strict") - encoded_body = body.encode( - locale.getpreferredencoding(False), errors="replace") - # we use a binary pipe to stdin to ensure we do not break on - # unicode encoding errors (e.g. because the user is running a - # ascii only system like the buildds) - mail = subprocess.Popen( - [MAIL_BINARY, "-r", from_address, "-s", subject, to_address], - stdin=subprocess.PIPE, universal_newlines=False) - mail.stdin.write(encoded_body) - mail.stdin.close() - ret = mail.wait() - return ret - - -def _send_mail_using_sendmail(from_address, to_address, subject, body): - # format as a proper mail - msg = Message() - msg['Subject'] = subject - msg['From'] = from_address - msg['To'] = to_address - # order is important here, Message() first, then Charset() - # then msg.set_charset() - charset = email.charset.Charset("utf-8") - charset.body_encoding = email.charset.QP - msg.set_payload(body, charset) - # and send it away - sendmail = subprocess.Popen( - [SENDMAIL_BINARY, "-oi", "-t"], - stdin=subprocess.PIPE, universal_newlines=True) - sendmail.stdin.write(msg.as_string()) - sendmail.stdin.close() - ret = sendmail.wait() - return ret - - -def send_summary_mail(pkgs, res, pkgs_kept_back, mem_log, dpkg_log_content): - """ send mail (if configured in Unattended-Upgrade::Mail) """ - to_email = apt_pkg.config.find("Unattended-Upgrade::Mail", "") - if not to_email: - return - if not os.path.exists(MAIL_BINARY) and not os.path.exists(SENDMAIL_BINARY): - logging.error(_("No '/usr/bin/mail' or '/usr/sbin/sendmail'," - "can not send mail. " - "You probably want to install the 'mailx' package.")) - return - # if the operation was successful and the user has requested to get - # mails on on errors, just exit here - if (res and - # see Debian Bug #703621 - not re.search("^WARNING:", mem_log.getvalue(), re.MULTILINE) and - apt_pkg.config.find_b( - "Unattended-Upgrade::MailOnlyOnError", False)): - return - # Check if reboot-required flag is present - reboot_flag_str = _( - "[reboot required]") if os.path.isfile(REBOOT_REQUIRED_FILE) else "" - # Check if packages are kept on hold - hold_flag_str = _("[package on hold]") if pkgs_kept_back else "" - logging.debug("Sending mail to '%s'" % to_email) - subject = _( - "{hold_flag}{reboot_flag} unattended-upgrades result for " - "'{machine}': {result}").format( - hold_flag=hold_flag_str, reboot_flag=reboot_flag_str, - machine=host(), result=res).strip() - body = _("Unattended upgrade returned: %s\n\n") % res - if os.path.isfile(REBOOT_REQUIRED_FILE): - body += _( - "Warning: A reboot is required to complete this upgrade.\n\n") - if res: - body += _("Packages that were upgraded:\n") - else: - body += _("Packages that attempted to upgrade:\n") - body += " " + wrap(pkgs, 70, " ") - body += "\n" - if pkgs_kept_back: - body += _("Packages with upgradable origin but kept back:\n") - body += " " + wrap(" ".join(pkgs_kept_back), 70, " ") - body += "\n" - body += "\n" - if dpkg_log_content: - body += _("Package installation log:") + "\n" - body += dpkg_log_content - body += "\n\n" - body += _("Unattended-upgrades log:\n") - body += mem_log.getvalue() - - from_email = apt_pkg.config.find("Unattended-Upgrade::Sender", "root") - - if os.path.exists(SENDMAIL_BINARY): - ret = _send_mail_using_sendmail(from_email, to_email, subject, body) - elif os.path.exists(MAIL_BINARY): - ret = _send_mail_using_mailx(from_email, to_email, subject, body) - else: - raise AssertionError( - "This should never be reached, if we are here we either " - "have sendmail or mailx. Please report this as a bug.") - logging.debug("mail returned: %s", ret) - - -def do_install(cache, pkgs_to_upgrade, blacklisted_pkgs, whitelisted_pkgs, - options, logfile_dpkg): - # set debconf to NON_INTERACTIVE, redirect output - os.putenv("DEBIAN_FRONTEND", "noninteractive") - setup_apt_listchanges() - - logging.info(_("Writing dpkg log to '%s'"), logfile_dpkg) - - marked_delete = [pkg for pkg in cache.get_changes() if pkg.marked_delete] - if marked_delete: - raise AssertionError( - "Internal error. The following packages are marked for " - "removal:%s" % "".join([pkg.name for pkg in marked_delete])) - - pkg_install_success = False - try: - if (options.minimal_upgrade_steps or - # COMPAT with the mispelling - apt_pkg.config.find_b( - "Unattended-Upgrades::MinimalSteps", False) or - apt_pkg.config.find_b( - "Unattended-Upgrade::MinimalSteps", False)): - pidf = os.path.join(apt_pkg.config.find_dir("Dir"), - "var", "run", "unattended-upgrades.pid") - with open(pidf, "w") as fp: - fp.write("%s" % os.getpid()) - # try upgrade all "pkgs" in minimal steps - pkg_install_success = upgrade_in_minimal_steps( - cache, [pkg.name for pkg in pkgs_to_upgrade], - blacklisted_pkgs, whitelisted_pkgs, logfile_dpkg, - options.verbose or options.debug) - else: - pkg_install_success = upgrade_normal( - cache, logfile_dpkg, options.verbose or options.debug) - except Exception as e: - # print unhandled exceptions here this way, while stderr is redirected - os.write(2, ("Exception: %s\n" % e).encode('utf-8')) - pkg_install_success = False - - return pkg_install_success - - -def _setup_alternative_rootdir(rootdir): - # clear system unattended-upgrade stuff - apt_pkg.config.clear("Unattended-Upgrade") - # read rootdir (taken from apt.Cache, but we need to run it - # here before the cache gets initialized - if os.path.exists(rootdir + "/etc/apt/apt.conf"): - apt_pkg.read_config_file(apt_pkg.config, - rootdir + "/etc/apt/apt.conf") - if os.path.isdir(rootdir + "/etc/apt/apt.conf.d"): - apt_pkg.read_config_dir(apt_pkg.config, - rootdir + "/etc/apt/apt.conf.d") - logdir = os.path.join(rootdir, "var", "log", "unattended-upgrades") - if not os.path.exists(logdir): - os.makedirs(logdir) - apt.apt_pkg.config.set("Unattended-Upgrade::LogDir", logdir) - - -def _get_logdir(): - logdir = apt_pkg.config.find_dir( - "Unattended-Upgrade::LogDir", - # COMPAT only - apt_pkg.config.find_dir("APT::UnattendedUpgrades::LogDir", - "/var/log/unattended-upgrades/")) - return logdir - - -def _setup_logging(options): - # ensure this is run only once - if len(logging.root.handlers) > 0: - return - - # init the logging - logdir = _get_logdir() - logfile = os.path.join( - logdir, - apt_pkg.config.find( - "Unattended-Upgrade::LogFile", - # COMPAT only - apt_pkg.config.find("APT::UnattendedUpgrades::LogFile", - "unattended-upgrades.log"))) - if not options.dry_run and not os.path.exists(logdir): - os.makedirs(logdir) - - logging.basicConfig(level=logging.INFO, - format='%(asctime)s %(levelname)s %(message)s', - filename=logfile) - # additional logging - logger = logging.getLogger() - mem_log = StringIO() - if options.apt_debug: - apt_pkg.config.set("Debug::pkgProblemResolver", "1") - apt_pkg.config.set("Debug::pkgDepCache::AutoInstall", "1") - if options.debug: - logger.setLevel(logging.DEBUG) - stdout_handler = logging.StreamHandler(sys.stdout) - logger.addHandler(stdout_handler) - elif options.verbose: - logger.setLevel(logging.INFO) - stdout_handler = logging.StreamHandler(sys.stdout) - logger.addHandler(stdout_handler) - if apt_pkg.config.find("Unattended-Upgrade::Mail", ""): - mem_log_handler = logging.StreamHandler(mem_log) - logger.addHandler(mem_log_handler) - return mem_log - - -def get_blacklisted_pkgs(): - return apt_pkg.config.value_list("Unattended-Upgrade::Package-Blacklist") - - -def get_whitelisted_pkgs(): - return apt_pkg.config.value_list("Unattended-Upgrade::Package-Whitelist") - - -def logged_in_users(): - """Return a list of logged in users""" - # the "users" command always returns a single line with: - # "user1, user1, user2" - users = subprocess.check_output( - USERS, universal_newlines=True).rstrip('\n') - return set(users.split()) - - -def reboot_if_requested_and_needed(shutdown_lock=0): - """auto-reboot (if required and the config for this is set)""" - if not os.path.exists(REBOOT_REQUIRED_FILE): - return - if not apt_pkg.config.find_b( - "Unattended-Upgrade::Automatic-Reboot", False): - return - # see if we need to check for logged in users - if not apt_pkg.config.find_b( - "Unattended-Upgrade::Automatic-Reboot-WithUsers", True): - users = logged_in_users() - if users: - msg = gettext.ngettext( - "Found %s, but not rebooting because %s is logged in." % ( - REBOOT_REQUIRED_FILE, users), - "Found %s, but not rebooting because %s are logged in." % ( - REBOOT_REQUIRED_FILE, users), - len(users)) - logging.warning(msg) - return - # reboot at the specified time - when = apt_pkg.config.find( - "Unattended-Upgrade::Automatic-Reboot-Time", "now") - if shutdown_lock > 0: - os.close(shutdown_lock) - logging.warning("Found %s, rebooting" % REBOOT_REQUIRED_FILE) - subprocess.call(["/sbin/shutdown", "-r", when]) - - -def write_stamp_file(): - statedir = os.path.join(apt_pkg.config.find_dir("Dir::State"), "periodic") - with open(os.path.join(statedir, "unattended-upgrades-stamp"), "w"): - pass - - -def try_to_upgrade(pkg, pkgs_to_upgrade, pkgs_kept_back, cache, - allowed_origins, blacklisted_pkgs, whitelisted_pkgs): - - try: - pkg.mark_upgrade() - if check_changes_for_sanity(cache, allowed_origins, - blacklisted_pkgs, whitelisted_pkgs): - # add to packages to upgrade - pkgs_to_upgrade.append(pkg) - # re-eval pkgs_kept_back as the resolver may fail to - # directly upgrade a pkg, but that may work during - # a subsequent operation, see debian bug #639840 - for pkgname in pkgs_kept_back: - if (cache[pkgname].marked_install or - cache[pkgname].marked_upgrade): - pkgs_kept_back.remove(pkgname) - pkgs_to_upgrade.append(cache[pkgname]) - else: - logging.debug("sanity check failed") - rewind_cache(cache, pkgs_to_upgrade) - pkgs_kept_back.append(pkg.name) - except SystemError as e: - # can't upgrade - logging.warning( - _("package '%s' upgradable but fails to " - "be marked for upgrade (%s)"), pkg.name, e) - rewind_cache(cache, pkgs_to_upgrade) - pkgs_kept_back.append(pkg.name) - - -def calculate_upgradable_pkgs(cache, options, allowed_origins, - blacklisted_pkgs, whitelisted_pkgs): - pkgs_to_upgrade = [] - pkgs_kept_back = [] - - # now do the actual upgrade - for pkg in cache: - if options.debug and pkg.is_upgradable: - logging.debug("Checking: %s (%s)" % ( - pkg.name, getattr(pkg.candidate, "origins", []))) - if (pkg.is_upgradable and - not is_pkgname_in_blacklist(pkg.name, blacklisted_pkgs) and - is_pkgname_in_whitelist(pkg.name, whitelisted_pkgs) and - is_allowed_origin(pkg.candidate, allowed_origins)): - - try_to_upgrade(pkg, - pkgs_to_upgrade, - pkgs_kept_back, - cache, - allowed_origins, - blacklisted_pkgs, - whitelisted_pkgs) - return pkgs_to_upgrade, pkgs_kept_back - - -def get_dpkg_log_content(logfile_dpkg, install_start_time): - logging.debug("Extracting content from '%s' since '%s'" % ( - logfile_dpkg, install_start_time)) - content = [] - found_start = False - with io.open(logfile_dpkg, encoding='utf-8') as fp: - # read until we find the last "Log started: " - for line in fp.readlines(): - # scan for the first entry we need (minimal-step mode - # creates a new stanza for each individual install) - if not found_start and line.startswith("Log started: "): - stanza_start = LoggingDateTime.from_string( - line[len("Log started: "):-1]) - if stanza_start >= install_start_time: - found_start = True - if found_start: - content.append(line) - return "".join(content) - - -def get_auto_removable(cache): - return set([pkg.name for pkg in cache - if pkg.is_auto_removable]) - - -def do_auto_remove(cache, auto_removable, logfile_dpkg, verbose=False): - if not auto_removable: - return True - - for pkgname in auto_removable: - logging.debug("marking %s for remove" % pkgname) - cache[pkgname].mark_delete() - logging.info(_("Packages that are auto removed: '%s'"), - " ".join(sorted(auto_removable))) - - # do it - res, error = cache_commit(cache, logfile_dpkg, verbose) - if res: - logging.info(_("Packages were successfully auto-removed")) - else: - logging.error(_("Auto-removing the packages failed!")) - logging.error(_("Error message: '%s'"), error) - logging.error(_("dpkg returned an error! See '%s' for details"), - logfile_dpkg) - return res - - -def clean_downloaded_packages(fetcher): - archivedir = os.path.dirname( - apt_pkg.config.find_dir("Dir::Cache::archives")) - for item in fetcher.items: - if os.path.dirname(os.path.abspath(item.destfile)) == archivedir: - try: - os.unlink(item.destfile) - except OSError: - pass - - -def main(options, rootdir=""): - # useful for testing - if rootdir: - _setup_alternative_rootdir(rootdir) - - # setup logging - mem_log = _setup_logging(options) - - # format (origin, archive), e.g. ("Ubuntu","dapper-security") - allowed_origins = get_allowed_origins() - - # pkgs that are (for some reason) not safe to install - blacklisted_pkgs = get_blacklisted_pkgs() - logging.info(_("Initial blacklisted packages: %s"), - " ".join(blacklisted_pkgs)) - - # install only these packages regardless of other upgrades available - whitelisted_pkgs = get_whitelisted_pkgs() - logging.info(_("Initial whitelisted packages: %s"), - " ".join(whitelisted_pkgs)) - - logging.info(_("Starting unattended upgrades script")) - - # display available origin - logging.info(_("Allowed origins are: %s"), allowed_origins) - - # see debian #776752 - install_start_time = datetime.datetime.now().replace(microsecond=0) - - # check if the journal is dirty and if so, take emergceny action - # the alternative is to leave the system potentially unsecure until - # the user comes in and fixes - if (is_dpkg_journal_dirty() and - apt_pkg.config.find_b( - "Unattended-Upgrade::AutoFixInterruptedDpkg", True)): - # ensure the dpkg database is not already locked (LP: #754330) - admindir = os.path.dirname(apt_pkg.config.find("Dir::State::Status")) - lockfd = apt_pkg.get_lock(os.path.join(admindir, "lock"), False) - if lockfd > 0: - logging.warning( - _("Unclean dpkg state detected, trying to correct")) - print(_("Unclean dpkg state detected, trying to correct")) - env = copy.copy(os.environ) - env["DEBIAN_FRONTEND"] = "noninteractive" - try: - os.close(lockfd) - output = subprocess.check_output( - ["dpkg", "--force-confold", "--configure", "-a"], - env=env, - universal_newlines=True) - except subprocess.CalledProcessError as e: - output = e.output - logging.warning(_("dpkg --configure -a output:\n%s"), output) - else: - logging.debug("Unclean dpkg state, but locked, another package " - "manager working?") - - # check and get lock - try: - apt_pkg.pkgsystem_lock() - except SystemError as e: - logging.error(_("Lock could not be acquired (another package " - "manager running?)")) - print(_("Cache lock can not be acquired, exiting")) - sys.exit(1) - - # get a cache - cache = UnattendedUpgradesCache(rootdir=rootdir, - allowed_origins=allowed_origins) - if cache._depcache.broken_count > 0: - print(_("Cache has broken packages, exiting")) - logging.error(_("Cache has broken packages, exiting")) - sys.exit(1) - - # FIXME: make this into a ContextManager - # be nice when calculating the upgrade as its pretty CPU intensive - old_priority = os.nice(0) - try: - # Check that we will be able to restore the priority - os.nice(-1) - os.nice(20) - except OSError as e: - if e.errno in (errno.EPERM, errno.EACCES): - pass - else: - raise - - # speed things up with latest apt - actiongroup = apt_pkg.ActionGroup(cache._depcache) - actiongroup # pyflakes - - # find out about the packages that are upgradable (in a allowed_origin) - pkgs_to_upgrade, pkgs_kept_back = calculate_upgradable_pkgs( - cache, options, allowed_origins, blacklisted_pkgs, whitelisted_pkgs) - pkgs_to_upgrade.sort(key=lambda p: p.name) - pkgs = "\n".join([pkg.name for pkg in pkgs_to_upgrade]) - logging.debug("pkgs that look like they should be upgraded: %s" % pkgs) - - # FIXME: make this into a ContextManager - # stop being nice - os.nice(old_priority - os.nice(0)) - - # download what looks good - if options.debug: - fetcher = apt_pkg.Acquire(apt.progress.text.AcquireProgress()) - else: - fetcher = apt_pkg.Acquire() - list = apt_pkg.SourceList() - list.read_main_list() - recs = cache._records - pm = apt_pkg.PackageManager(cache._depcache) - try: - pm.get_archives(fetcher, list, recs) - except SystemError as e: - logging.error(_("GetArchives() failed: '%s'"), e) - res = fetcher.run() - logging.debug("fetch.run() result: %s", res) - - if dpkg_conffile_prompt(): - # now check the downloaded debs for conffile conflicts and build - # a blacklist - for item in fetcher.items: - logging.debug("%s" % item) - if item.status == item.STAT_ERROR: - print(_("An error occurred: '%s'") % item.error_text) - logging.error(_("An error occurred: '%s'"), item.error_text) - if not item.complete: - print(_("The URI '%s' failed to download, aborting") % - item.desc_uri) - logging.error(_("The URI '%s' failed to download, aborting"), - item.desc_uri) - sys.exit(1) - if not os.path.exists(item.destfile): - print(_("Download finished, but file '%s' not there?!?") % - item.destfile) - logging.error("Download finished, but file '%s' not " - "there?!?", item.destfile) - sys.exit(1) - if not item.is_trusted: - blacklisted_pkgs.append(pkgname_from_deb(item.destfile)) - if conffile_prompt(item.destfile): - # skip package (means to re-run the whole marking again - # and making sure that the package will not be pulled in by - # some other package again!) - # - # print to stdout to ensure that this message is part of - # the cron mail (only if no summary mail is requested) - email = apt_pkg.config.find("Unattended-Upgrade::Mail", "") - if not email: - print(_("Package '%s' has conffile prompt and needs " - "to be upgraded manually") % - pkgname_from_deb(item.destfile)) - # log to the logfile - logging.warning(_("Package '%s' has conffile prompt and " - "needs to be upgraded manually"), - pkgname_from_deb(item.destfile)) - blacklisted_pkgs.append(pkgname_from_deb(item.destfile)) - pkgs_kept_back.append(pkgname_from_deb(item.destfile)) - - # redo the selection about the packages to upgrade based on the new - # blacklist - logging.debug("blacklist: %s" % blacklisted_pkgs) - # whitelist - logging.debug("whitelist: %s" % whitelisted_pkgs) - # find out about the packages that are upgradable (in a allowed_origin) - if len(blacklisted_pkgs) > 0 or len(whitelisted_pkgs) > 0: - cache.clear() - old_pkgs_to_upgrade = pkgs_to_upgrade[:] - pkgs_to_upgrade = [] - for pkg in old_pkgs_to_upgrade: - logging.debug("Checking the black and whitelist: %s" % - (pkg.name)) - pkg.mark_upgrade() - if check_changes_for_sanity(cache, - allowed_origins, - blacklisted_pkgs, - whitelisted_pkgs): - pkgs_to_upgrade.append(pkg) - else: - if not (pkg.name in pkgs_kept_back): - pkgs_kept_back.append(pkg.name) - logging.info(_("package '%s' not upgraded"), pkg.name) - cache.clear() - for pkg2 in pkgs_to_upgrade: - pkg2.mark_upgrade() - else: - logging.debug("dpkg is configured not to cause conffile prompts") - - # auto-removal - previous_autoremovals = get_auto_removable(cache) - if apt_pkg.config.find_b( - "Unattended-Upgrade::Remove-Unused-Dependencies", False): - pending_autoremovals = previous_autoremovals - else: - pending_autoremovals = [] - - # exit if there is nothing to do and nothing to report - if (len(pending_autoremovals) == 0 and - len(pkgs_to_upgrade) == 0 and - len(pkgs_kept_back) == 0): - logging.info(_("No packages found that can be upgraded unattended " - "and no pending auto-removals")) - # FIXME: DRY violation, write_stamp_file() is used below as well - write_stamp_file() - # check if we couldn't reboot on previous run because - # a user was logged-in at this time - reboot_if_requested_and_needed() - return - - # check if its configured for install on shutdown, if so, the - # environment UNATTENDED_UPGRADES_FORCE_INSTALL_ON_SHUTDOWN will - # be set by the unatteded-upgrades-shutdown script - if ("UNATTENDED_UPGRADES_FORCE_INSTALL_ON_SHUTDOWN" not in os.environ and - apt_pkg.config.find_b( - "Unattended-Upgrade::InstallOnShutdown", False)): - logger = logging.getLogger() - logger.debug("Configured to install on shutdown, so exiting now") - return - - # check if we are in dry-run mode - if options.dry_run: - logging.info("Option --dry-run given, *not* performing real actions") - apt_pkg.config.set("Debug::pkgDPkgPM", "1") - - # do the install based on the new list of pkgs - pkgs = " ".join([pkg.name for pkg in pkgs_to_upgrade]) - logging.info(_("Packages that will be upgraded: %s"), pkgs) - - # get log - logfile_dpkg = os.path.join(_get_logdir(), 'unattended-upgrades-dpkg.log') - - # only perform install step if we actually have packages to install - pkg_install_success = True - shutdown_lock = -1 - if len(pkgs_to_upgrade) > 0: - # lock for the shutdown check - its fine if the system - # is shutdown while downloading but not so much while installing - shutdown_lock = apt_pkg.get_lock("/var/run/unattended-upgrades.lock") - # do install - pkg_install_success = do_install(cache, - pkgs_to_upgrade, - blacklisted_pkgs, - whitelisted_pkgs, - options, - logfile_dpkg) - - # now check if any auto-removing needs to be done - cache = UnattendedUpgradesCache( - rootdir=rootdir, allowed_origins=allowed_origins) - if cache._depcache.broken_count > 0: - print(_("Cache has broken packages, exiting")) - logging.error(_("Cache has broken packages, exiting")) - sys.exit(1) - - # the user wants *all* auto-removals to be removed - if apt_pkg.config.find_b( - "Unattended-Upgrade::Remove-Unused-Dependencies", False): - auto_removals = get_auto_removable(cache) - pkg_install_success &= do_auto_remove( - cache, auto_removals, logfile_dpkg, - options.verbose or options.debug) - # the user wants *only new* auto-removals to be removed - elif apt_pkg.config.find_b( - "Unattended-Upgrade::Remove-New-Unused-Dependencies", True): - # calculate the new auto-removals - new_pending_autoremovals = get_auto_removable(cache) - auto_removals = new_pending_autoremovals - previous_autoremovals - pkg_install_success &= do_auto_remove( - cache, auto_removals, logfile_dpkg, - options.verbose or options.debug) - - logging.debug("InstCount=%i DelCount=%i BrokenCount=%i" - % (cache._depcache.inst_count, - cache._depcache.del_count, - cache._depcache.broken_count)) - - # send a mail (if needed) - if not options.dry_run: - log_content = get_dpkg_log_content(logfile_dpkg, install_start_time) - send_summary_mail( - pkgs, pkg_install_success, pkgs_kept_back, mem_log, log_content) - - # clean after success install (if needed) - keep_key = "Unattended-Upgrade::Keep-Debs-After-Install" - if (not apt_pkg.config.find_b(keep_key, False) and - not options.dry_run and - pkg_install_success): - clean_downloaded_packages(fetcher) - - # FIXME: DRY violation, write_stamp_file() is used above as well - # write timestamp file - write_stamp_file() - - # check if the user wants a reboot - if not options.dry_run: - reboot_if_requested_and_needed(shutdown_lock) - - -if __name__ == "__main__": - localesApp = "unattended-upgrades" - localesDir = "/usr/share/locale" - gettext.bindtextdomain(localesApp, localesDir) - gettext.textdomain(localesApp) - - # this ensures the commandline is logged in /var/log/apt/history.log - apt_pkg.config.set("Commandline::AsString", " ".join(sys.argv)) - - # init the options - parser = OptionParser() - parser.add_option("-d", "--debug", - action="store_true", default=False, - help=_("print debug messages")) - parser.add_option("", "--apt-debug", - action="store_true", default=False, - help=_("make apt/libapt print verbose debug messages")) - parser.add_option("-v", "--verbose", - action="store_true", default=False, - help=_("print info messages")) - parser.add_option("", "--dry-run", - action="store_true", default=False, - help=_("Simulation, download but do not install")) - parser.add_option("", "--minimal-upgrade-steps", - action="store_true", default=False, - help=_("Upgrade in minimal steps (and allow " - "interrupting with SIGINT")) - parser.add_option("", "--minimal_upgrade_steps", - action="store_true", - help=SUPPRESS_HELP, - default=False) - (options, args) = parser.parse_args() - - if os.getuid() != 0: - print(_("You need to be root to run this application")) - sys.exit(1) - - # ensure that we are not killed when the terminal goes away e.g. on - # shutdown - signal.signal(signal.SIGHUP, signal.SIG_IGN) - - # run the main code - main(options) diff --git a/package/unattended-upgrade-shutdown b/package/unattended-upgrade-shutdown deleted file mode 100755 index ae3f78ddc20158bc0a76548b9d0e1fe12800843e..0000000000000000000000000000000000000000 --- a/package/unattended-upgrade-shutdown +++ /dev/null @@ -1,162 +0,0 @@ -#!/usr/bin/python3 -# Copyright (c) 2009 Canonical Ltd -# -# AUTHOR: -# Michael Vogt <mvo@ubuntu.com> -# -# unattended-upgrade-shutdown - helper that checks if a -# unattended-upgrade is in progress and waits until it exists -# -# This file is part of unattended-upgrades -# -# unattended-upgrades is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as published -# by the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# unattended-upgrades is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with unattended-upgrades; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# - -import copy -import signal -import sys -import time -import logging -import logging.handlers -import gettext -import subprocess -import os.path - -from optparse import OptionParser -from gettext import gettext as _ - -try: - import apt_pkg -except: - # if there is no python-apt no unattended-upgrades can run so not - # need to stop the shutdown - logging.exception("importing of apt_pkg failed, exiting") - sys.exit(0) - - -def do_usplash(msg): - if os.path.exists("/sbin/usplash_write"): - logging.debug("Running usplash_write") - subprocess.call(["/sbin/usplash_write", "TEXT", msg]) - subprocess.call(["/sbin/usplash_write", "PULSATE"]) - - -def do_plymouth(msg): - if os.path.exists("/bin/plymouth"): - logging.debug("Running plymouth --text") - subprocess.call(["/bin/plymouth", "message", "--text", msg]) - - -def log_msg(msg, level=logging.WARN): - """ helper that will print msg to usplash, plymouth, console """ - logging.log(level, msg) - do_plymouth(msg) - do_usplash(msg) - - -def log_progress(): - """ helper to log the install progress (if any) """ - # wait a some seconds and try again - msg = _("Unattended-upgrade in progress during shutdown, " - "sleeping for 5s") - # progress info - progress = "/var/run/unattended-upgrades.progress" - if os.path.exists(progress): - msg += "\n" + open(progress).read() - # log it - log_msg(msg) - - -if __name__ == "__main__": - # setup gettext - localesApp = "unattended-upgrades" - localesDir = "/usr/share/locale" - gettext.bindtextdomain(localesApp, localesDir) - gettext.textdomain(localesApp) - - parser = OptionParser() - parser.add_option("", "--debug", - action="store_true", dest="debug", default=False, - help="print debug messages") - parser.add_option("", "--delay", default=10, - help="delay in minutes to wait for unattended-upgrades") - parser.add_option("", "--lock-file", - default="/var/run/unattended-upgrades.lock", - help="lock file location") - (options, args) = parser.parse_args() - - # setup logging - level = logging.INFO - if options.debug: - level = logging.DEBUG - - # use a normal logfile instead of syslog too as on shutdown its too - # easy to get syslog killed - logdir = apt_pkg.config.find_dir( - "Unattended-Upgrade::LogDir", "/var/log/unattended-upgrades/") - if not os.path.exists(logdir): - os.makedirs(logdir) - logfile = os.path.join(logdir, "unattended-upgrades-shutdown.log") - logging.basicConfig(filename=logfile, - level=level, - format="%(asctime)s %(levelname)s - %(message)s") - - # check if we need to run unattended-upgrades on shutdown and if so, - # run it - p = None - apt_pkg.init_config() - if apt_pkg.config.find_b("Unattended-Upgrade::InstallOnShutdown", False): - env = copy.copy(os.environ) - env["UNATTENDED_UPGRADES_FORCE_INSTALL_ON_SHUTDOWN"] = "1" - logging.debug("starting unattended-upgrades in shutdown mode") - p = subprocess.Popen(["unattended-upgrade"], env=env) - log_msg(_("Running unattended-upgrades in shutdown mode")) - while True: - log_progress() - if p.poll() is not None: - break - time.sleep(5) - - # run the monitoring loop and keep the "UI" updated - start_time = time.time() - lock_was_taken = False - while True: - res = apt_pkg.get_lock(options.lock_file) - logging.debug("get_lock returned %i" % res) - # exit here if there is no lock - if res > 0: - logging.debug("lock not taken") - break - lock_was_taken = True - # signal unattended-upgrades to stop - p = "/var/run/unattended-upgrades.pid" - if os.path.exists(p): - pid = int(open(p).read()) - logging.debug("found running unattended-upgrades pid %s" % pid) - os.kill(pid, signal.SIGUSR1) - # show log - log_progress() - time.sleep(5) - if (time.time() - start_time) > options.delay * 60: - logging.warning(_("Giving up on lockfile after %s delay"), - options.delay) - sys.exit(1) - - # add finished info to the log/terminal to help tracking down - # LP: #434835 - if lock_was_taken: - # re-use existing string - log_msg(_("All upgrades installed"), logging.INFO) - sys.exit(0) diff --git a/package/unattended-upgrade-shutdown.pyc b/package/unattended-upgrade-shutdown.pyc deleted file mode 100644 index a3fc5c6777cd756f746cd5cff833fad2c10d5e08..0000000000000000000000000000000000000000 Binary files a/package/unattended-upgrade-shutdown.pyc and /dev/null differ diff --git a/package/unattended-upgrade.pyc b/package/unattended-upgrade.pyc deleted file mode 100644 index ca287c1cb18760f5af87fac140fb5a08fdaba9cb..0000000000000000000000000000000000000000 Binary files a/package/unattended-upgrade.pyc and /dev/null differ diff --git a/package/unattended_upgrades.egg-info/PKG-INFO b/package/unattended_upgrades.egg-info/PKG-INFO deleted file mode 100644 index b4fe6de30c2c39aa746e34a890457e8c142b1c95..0000000000000000000000000000000000000000 --- a/package/unattended_upgrades.egg-info/PKG-INFO +++ /dev/null @@ -1,10 +0,0 @@ -Metadata-Version: 1.0 -Name: unattended-upgrades -Version: 0.1 -Summary: UNKNOWN -Home-page: UNKNOWN -Author: UNKNOWN -Author-email: UNKNOWN -License: UNKNOWN -Description: UNKNOWN -Platform: UNKNOWN diff --git a/package/unattended_upgrades.egg-info/SOURCES.txt b/package/unattended_upgrades.egg-info/SOURCES.txt deleted file mode 100644 index b19e171694e995bf50eb46e0648f1fbaf2a6cc24..0000000000000000000000000000000000000000 --- a/package/unattended_upgrades.egg-info/SOURCES.txt +++ /dev/null @@ -1,22 +0,0 @@ -setup.cfg -setup.py -unattended-upgrade -test/test_against_real_archive.py -test/test_clean.py -test/test_conffile.py -test/test_in_chroot.py -test/test_log_install_progress.py -test/test_logdir.py -test/test_mail.py -test/test_origin_pattern.py -test/test_pep8.py -test/test_pyflakes.py -test/test_reboot.py -test/test_regression.py -test/test_rewind.py -test/test_substitute.py -test/test_untrusted.py -unattended_upgrades.egg-info/PKG-INFO -unattended_upgrades.egg-info/SOURCES.txt -unattended_upgrades.egg-info/dependency_links.txt -unattended_upgrades.egg-info/top_level.txt \ No newline at end of file diff --git a/package/unattended_upgrades.egg-info/dependency_links.txt b/package/unattended_upgrades.egg-info/dependency_links.txt deleted file mode 100644 index 8b137891791fe96927ad78e64b0aad7bded08bdc..0000000000000000000000000000000000000000 --- a/package/unattended_upgrades.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/package/unattended_upgrades.egg-info/top_level.txt b/package/unattended_upgrades.egg-info/top_level.txt deleted file mode 100644 index 8b137891791fe96927ad78e64b0aad7bded08bdc..0000000000000000000000000000000000000000 --- a/package/unattended_upgrades.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -