Imported 2.624

No reason for CPC update specified.
impish
CloudBuilder 5 years ago
parent a38c93708d
commit 2e7eb0d4bc

@ -0,0 +1,63 @@
#!/usr/bin/python3
"""List the packages which could be automatically installed without becoming autoremovable
Finds all manually installed meta packages, and prints their dependencies
which could be marked as automatically installed.
"""
import sys
import apt
def is_root(pkg):
"""Check if the package is a root package (manually inst. meta)"""
section = pkg.candidate.section if pkg.candidate else ""
return (pkg.is_installed and
not pkg.is_auto_installed and
(section == "metapackages" or
section.endswith("/metapackages")))
def main():
"""Main function"""
cache = apt.Cache(rootdir=sys.argv[1] if len(sys.argv) > 1 else None)
roots = set(pkg for pkg in cache if is_root(pkg))
workset = set(roots)
seen = set()
ubiquity_depends = set()
with cache.actiongroup():
while True:
print("Iteration", file=sys.stderr)
to_proc = workset - seen
if not to_proc:
break
for pkg in sorted(to_proc):
print(" Visiting", pkg, file=sys.stderr)
if pkg not in roots and pkg not in ubiquity_depends:
if not pkg.is_auto_installed:
print(pkg.name)
for dep in (pkg.installed.dependencies +
pkg.installed.recommends):
for bdep in dep.or_dependencies:
for ver in bdep.target_versions:
if ver.package.is_installed:
if pkg.name == "ubiquity":
ubiquity_depends.add(ver.package)
if pkg.name != "ubiquity":
# Reprocess this package again, as we did not mark it when we visited it from ubiquity
try:
ubiquity_depends.remove(ver.package)
# This will raise the KeyError here if ubiquity did not depend on it
seen.remove(ver.package)
except KeyError:
pass
workset.add(ver.package)
seen.add(pkg)
if __name__ == '__main__':
main()

8
debian/changelog vendored

@ -1,3 +1,11 @@
livecd-rootfs (2.624) focal; urgency=medium
* Mark packages as autoinstalled using apt-mark in the chroot
instead of using python-apt that potentially starts talking to the build
system's dbus causing various problems. (LP: #1835406)
-- Balint Reczey <rbalint@ubuntu.com> Wed, 13 Nov 2019 21:01:51 +0100
livecd-rootfs (2.623) focal; urgency=medium livecd-rootfs (2.623) focal; urgency=medium
* Add new buildd based bootable image for snapcraft builds. * Add new buildd based bootable image for snapcraft builds.

1
debian/install vendored

@ -1,3 +1,4 @@
auto-markable-pkgs usr/share/livecd-rootfs
live-build usr/share/livecd-rootfs live-build usr/share/livecd-rootfs
get-ppa-fingerprint usr/share/livecd-rootfs get-ppa-fingerprint usr/share/livecd-rootfs
minimize-manual usr/share/livecd-rootfs minimize-manual usr/share/livecd-rootfs

@ -1,64 +1,16 @@
#!/usr/bin/python3 #!/bin/sh
"""Minimize the number of manually installed packages in the image.
Finds all manually installed meta packages, and marks their dependencies # Minimize the number of manually installed packages in the image
as automatically installed.
"""
import sys
import apt # Finds all packages which could be marked as automatically installed and marks
# them as such
set -e
def is_root(pkg): chroot=$1
"""Check if the package is a root package (manually inst. meta)"""
section = pkg.candidate.section if pkg.candidate else ""
return (pkg.is_installed and
not pkg.is_auto_installed and
(section == "metapackages" or
section.endswith("/metapackages")))
auto_packages=$(/usr/share/livecd-rootfs/auto-markable-pkgs $chroot)
def main(): if [ -n "$auto_packages" ]; then
"""Main function""" chroot chroot apt-mark auto $auto_packages
cache = apt.Cache(rootdir=sys.argv[1] if len(sys.argv) > 1 else None) fi
roots = set(pkg for pkg in cache if is_root(pkg)) [ -z "$(/usr/share/livecd-rootfs/auto-markable-pkgs $chroot 2> /dev/null)" ]
workset = set(roots)
seen = set()
ubiquity_depends = set()
with cache.actiongroup():
while True:
print("Iteration", file=sys.stderr)
to_proc = workset - seen
if not to_proc:
break
for pkg in sorted(to_proc):
print(" Visiting", pkg, file=sys.stderr)
if pkg not in roots and pkg not in ubiquity_depends:
pkg.mark_auto()
for dep in (pkg.installed.dependencies +
pkg.installed.recommends):
for bdep in dep.or_dependencies:
for ver in bdep.target_versions:
if ver.package.is_installed:
if pkg.name == "ubiquity":
ubiquity_depends.add(ver.package)
if pkg.name != "ubiquity":
# Reprocess this package again, as we did not mark it when we visited it from ubiquity
try:
ubiquity_depends.remove(ver.package)
# This will raise the KeyError here if ubiquity did not depend on it
seen.remove(ver.package)
except KeyError:
pass
workset.add(ver.package)
seen.add(pkg)
cache.commit()
if __name__ == '__main__':
main()

Loading…
Cancel
Save