[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#732746: apt: Empty /etc/apt/preferences file is not allowed



Package: apt Version: 0.9.7.9+deb7u1 Severity: normal

Dear Maintainer, * Please consider answering these questions, where appropriate *

* What led up to the situation?

I was configuring Puppet to manage a number of nodes. Puppetlabs has an ‘apt’ module, and they use code fragments in /etc/apt/preferences.d to control pins. However, my organization was using entries in /etc/apt/preferences, so I had to migrate. I decided to put a comment in /etc/apt/preferences saying “# This file is managed by Puppet” (similar to what the puppetlabs/apt module does for /etc/apt/sources.list), and discovered this caused ‘apt-get upgrade’ to fail.

* What exactly did you do (or not do) that was effective (or
  ineffective)?

This topic has been covered by a previous bug, but the resolution is poor/unclear. That bug is 641245, archived, and it seems the resolution is “comments should be entered in /etc/apt/preferences in the form 'Explanation: <comment>'” and the bug was archived. This does not work, however, and does not seem to be a good solution. The “#” as a comment is so ubiquitous across Linux programs, and files containing only comments are acceptable almost everywhere. apt-get should be updated to current expectations.

The bug can be reproduced quite simply by putting a single comment in /etc/apt/preferences. For example: # This file is maintained by Puppet. Contents will be overwritten.

When running apt-get, the output will be: “E: Unable to parse package file /etc/apt/preferences (1)”

In the discussion of bug 641245, it is mentioned that apt_preferences (5) says comments should be indicated with “Explanation:” <comment>. If the only line in /etc/apt/preferences is like so:

Explanation: This file is maintained by Puppet. Contents will be overwritten.

the output is as follows:

“E: Invalid record in the preferences file /etc/apt/preferences, no Package header”

A workaround is actually quite simple. As long as “Package: <some text>” is included, ‘apt-get upgrade’ works without complaint. Quite literally, the following is acceptable:

# This file is maintained by Puppet. Contents will be overwritten. Package: arbitrary_non_existent_package_used_to_demonstrate_the_point

It's clear that apt-get isn't checking the validity of the text following the “Package:” line, so why is it a requirement that the “Package:” line be present at all?

— Package-specific info:

— apt-config dump —

APT ""; APT::Architecture “amd64”; APT::Build-Essential ""; APT::Build-Essential:: “build-essential”; APT::Install-Recommends “1”; APT::Install-Suggests “0”; APT::Authentication ""; APT::Authentication::TrustCDROM “true”; APT::NeverAutoRemove ""; APT::NeverAutoRemove:: “^firmware-linux.*”; APT::NeverAutoRemove:: “^linux-firmware$”; APT::NeverAutoRemove:: “^linux-image.*”; APT::NeverAutoRemove:: “^kfreebsd-image.*”; APT::NeverAutoRemove:: “^linux-restricted-modules.*”; APT::NeverAutoRemove:: “^linux-ubuntu-modules-.*”; APT::NeverAutoRemove:: “^gnumach$”; APT::NeverAutoRemove:: “^gnumach-image.*”; APT::Never-MarkAuto-Sections ""; APT::Never-MarkAuto-Sections:: “metapackages”; APT::Never-MarkAuto-Sections:: “restricted/metapackages”; APT::Never-MarkAuto-Sect ions:: “universe/metapackages”; APT::Never-MarkAuto-Sections:: “multiverse/metapackages”; APT::Never-MarkAuto-Sections:: “oldlibs”; APT::Never-MarkAuto-Sections:: “restricted/oldlibs”; APT::Never-MarkAuto-Sections:: “universe/oldlibs”; APT::Never-MarkAuto-Sections:: “multiverse/oldlibs”; APT::Architectures ""; APT::Architectures:: “amd64”; APT::Compressor ""; APT::Compressor::. ""; APT::Compressor::.::Name “.”; APT::Compressor::.::Extension ""; APT::Compressor::.::Binary ""; APT::Compressor::.::Cost “1”; APT::Compressor::gzip ""; APT::Compressor::gzip::Name “gzip”; APT::Compressor::gzip::Extension “.gz”; APT::Compressor::gzip::Binary “gzip”; APT::Compressor::gzip::Cost “2”; APT::Compressor::gzip::CompressArg ""; APT::Compressor::gzip::CompressArg:: “-9n&r dquo;; APT::Compressor::gzip::UncompressArg ""; APT::Compressor::gzip::UncompressArg:: “-d”; APT::Compressor::bzip2 ""; APT::Compressor::bzip2::Name “bzip2”; APT::Compressor::bzip2::Extension “.bz2”; APT::Compressor::bzip2::Binary “bzip2”; APT::Compressor::bzip2::Cost “3”; APT::Compressor::bzip2::CompressArg ""; APT::Compressor::bzip2::CompressArg:: “-9”; APT::Compressor::bzip2::UncompressArg ""; APT::Compressor::bzip2::UncompressArg:: “-d”; APT::Compressor::xz ""; APT::Compressor::xz::Name “xz”; APT::Compressor::xz::Extension “.xz”; APT::Compressor::xz::Binary “xz”; APT::Compressor::xz::Cost “4”; APT::Compressor::xz::CompressArg ""; APT::Compressor::xz::CompressArg:: “-6”; APT::Compressor::xz::UncompressArg ""; APT::Compressor::xz::UncompressArg:: “-d”; APT::C ompressor::lzma ""; APT::Compressor::lzma::Name “lzma”; APT::Compressor::lzma::Extension “.lzma”; APT::Compressor::lzma::Binary “xz”; APT::Compressor::lzma::Cost “5”; APT::Compressor::lzma::CompressArg ""; APT::Compressor::lzma::CompressArg:: “--format=lzma”; APT::Compressor::lzma::CompressArg:: “-9”; APT::Compressor::lzma::UncompressArg ""; APT::Compressor::lzma::UncompressArg:: “--format=lzma”; APT::Compressor::lzma::UncompressArg:: “-d”; APT::Compressor::::Name ""; APT::Compressor::::Extension “.”; APT::Compressor::::Binary ""; APT::Compressor::::Cost “100”; APT::Compressor::::CompressArg ""; APT::Compressor::::CompressArg:: “-9”; APT::Compressor::::UncompressArg ""; APT::Compressor::::UncompressArg:: “-d”; Dir “/”; Dir::State “var/lib/apt/”; Dir ::State::lists “lists/”; Dir::State::cdroms “cdroms.list”; Dir::State::mirrors “mirrors/”; Dir::State::extended_states “extended_states”; Dir::State::status “/var/lib/dpkg/status”; Dir::Cache “var/cache/apt/”; Dir::Cache::archives “archives/”; Dir::Cache::srcpkgcache “srcpkgcache.bin”; Dir::Cache::pkgcache “pkgcache.bin”; Dir::Etc “etc/apt/”; Dir::Etc::sourcelist “sources.list”; Dir::Etc::sourceparts “sources.list.d”; Dir::Etc::vendorlist “vendors.list”; Dir::Etc::vendorparts “vendors.list.d”; Dir::Etc::main “apt.conf”; Dir::Etc::netrc “auth.conf”; Dir::Etc::parts “apt.conf.d”; Dir::Etc::preferences “preferences”; Dir::Etc::preferencesparts “preferences.d”; Dir::Etc::trusted “trusted.gpg”; Dir::Etc::trustedparts “trusted.gpg.d”; Dir::B in ""; Dir::Bin::methods “/usr/lib/apt/methods”; Dir::Bin::solvers ""; Dir::Bin::solvers:: “/usr/lib/apt/solvers”; Dir::Bin::dpkg “/usr/bin/dpkg”; Dir::Bin::bzip2 “/bin/bzip2”; Dir::Bin::xz “/usr/bin/xz”; Dir::Media ""; Dir::Media::MountPath “/media/cdrom”; Dir::Log “var/log/apt”; Dir::Log::Terminal “term.log”; Dir::Log::History “history.log”; Dir::Ignore-Files-Silently ""; Dir::Ignore-Files-Silently:: “~$”; Dir::Ignore-Files-Silently:: “\.disabled$”; Dir::Ignore-Files-Silently:: “\.bak$”; Dir::Ignore-Files-Silently:: “\.dpkg-[a-z]+$”; Dir::Ignore-Files-Silently:: “\.save$”; Dir::Ignore-Files-Silently:: “\.orig$”; Acquire ""; Acquire::cdrom ""; Acquire::cdrom::mount “/media/cdrom”; Acquire::Languages ""; Acquire::Languages:: “none”; DPkg ""; DPkg::Pre-Install-Pkgs ""; DPkg::Pre-Install-Pkgs:: “/usr/bin/apt-listchanges --apt || test $? -ne 10”; DPkg::Pre-Install-Pkgs:: “/usr/sbin/dpkg-preconfigure --apt || true”; DPkg::Tools ""; DPkg::Tools::Options ""; DPkg::Tools::Options::/usr/bin/apt-listchanges ""; DPkg::Tools::Options::/usr/bin/apt-listchanges::Version “2”; CommandLine ""; CommandLine::AsString “apt-config dump”;

— /etc/apt/preferences —

#This file is maintained by puppet. Local changes will be overwritten. Changes #must be made via the git repo only.

#Pin for the 3.2.7-3 version of gluster #At one point “unstable” went to 3.2.7-5. According to the #package maintainers there is no problem reverting to 3.2.7-3 #from 3.2.7-5, and there are no plans to put 3.2.7-5 in wheezy. Package: glusterfs-client glusterfs-server glusterfs-common Pin: release n=wheezy Pin-Priority: 2001

Package: * Pin: release n=wheezy Pin-Priority: 1001

Package: * Pin: release a=testing Pin-Priority: 60

Package: * Pin: release a=unstable Pin-Priority: 50

— /etc/apt/sources.list —

#This file is maintained by puppet. Local changes will be overwritten. Changes #must be made via the git repo only.

deb http://mirror.qualvu.dev/debian/ wheezy main non-free contrib deb-src http://ftp.us.debian.org/debian/ wheezy main non-free contrib

deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free

# wheezy-updates, previously known as ‘volatile’ deb http://ftp.us.debian.org/debian/ wheezy-updates main contrib non-free deb-src http://ftp.us.debian.org/debian/ wheezy-updates main contrib non-free

# Wheezy for glusterfs 3.2+; Jessie is now at 3.4 deb http://ftp.us.debian.org/debian/ wheezy main non-free deb-src http://ftp.us.debian.org/debian/ wheezy main non-free

— System Information: Debian Release: 7.3

APT prefers stable
APT policy: (1001, 'stable'), (500, 'stable-updates')

Architecture: amd64 (x86_64)

Kernel: Linux 3.2.0-4-amd64 (SMP w/4 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash

Versions of packages apt depends on: ii debian-archive-keyring 2012.4 ii gnupg 1.4.12-7+deb7u3 ii libapt-pkg4.12 0.9.7.9+deb7u1 ii libc6 2.13-38 ii libgcc1 1:4.7.2-5 ii libstdc++6 4.7.2-5

apt recommends no packages.

Versions of packages apt suggests: pn apt-doc <none> ii aptitude 0.6.8.2-1 ii dpkg-dev 1.16.12 ii python-apt 0.8.8.2 ii xz-utils 5.1.1alpha+20120614-2

— no debconf information

If you'd like to unsubscribe and stop receiving these emails click here.


Reply to: