apt: retrieve list of index targets using apt_pkg
Signed-off-by: Olivier Gayot <olivier.gayot@canonical.com>
This commit is contained in:
parent
ab3d9be4c7
commit
082e5d9f18
|
@ -24,7 +24,9 @@ import random
|
||||||
import re
|
import re
|
||||||
import shutil
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
from typing import Optional
|
from typing import List, Optional
|
||||||
|
|
||||||
|
import apt_pkg
|
||||||
|
|
||||||
from curtin.config import merge_config
|
from curtin.config import merge_config
|
||||||
|
|
||||||
|
@ -49,6 +51,23 @@ class AptConfigCheckError(Exception):
|
||||||
configuration. """
|
configuration. """
|
||||||
|
|
||||||
|
|
||||||
|
def get_index_targets() -> List[str]:
|
||||||
|
""" Return the identifier of the data files that would be downloaded during
|
||||||
|
apt-get update.
|
||||||
|
NOTE: this uses the default configuration files from the host so this might
|
||||||
|
slightly differ from what we would have in the overlay.
|
||||||
|
Maybe we should run the following command in the overlay instead:
|
||||||
|
$ apt-get indextargets --format '$(IDENTIFIER)' | sort -u
|
||||||
|
"""
|
||||||
|
if "APT" not in apt_pkg.config:
|
||||||
|
apt_pkg.init_config()
|
||||||
|
targets = apt_pkg.config.keys("Acquire::IndexTargets")
|
||||||
|
# Only return "top-level" identifiers such as:
|
||||||
|
# Acquire::IndexTargets::deb::Contents-deb
|
||||||
|
# Acquire::IndexTargets::deb-src::Sources
|
||||||
|
return [key for key in targets if key.count("::") == 3]
|
||||||
|
|
||||||
|
|
||||||
class AptConfigurer:
|
class AptConfigurer:
|
||||||
# We configure apt during installation so that installs from the pool on
|
# We configure apt during installation so that installs from the pool on
|
||||||
# the cdrom are preferred during installation but remove this again in the
|
# the cdrom are preferred during installation but remove this again in the
|
||||||
|
@ -144,28 +163,15 @@ class AptConfigurer:
|
||||||
except (PermissionError, LookupError) as exc:
|
except (PermissionError, LookupError) as exc:
|
||||||
log.warning("could to set owner of file %s: %r", partial_dir, exc)
|
log.warning("could to set owner of file %s: %r", partial_dir, exc)
|
||||||
|
|
||||||
disabled_downloads = [
|
|
||||||
"deb::Packages",
|
|
||||||
"deb::Translations",
|
|
||||||
"deb::DEP-11",
|
|
||||||
"deb::Contents-deb",
|
|
||||||
"deb::Contents-udeb",
|
|
||||||
"deb::Contents-deb-legacy",
|
|
||||||
"deb::DEP-11-icons",
|
|
||||||
"deb::DEP-11-icons-small",
|
|
||||||
"deb::DEP-11-icons-large",
|
|
||||||
"deb::DEP-11-icons-large-hidpi",
|
|
||||||
]
|
|
||||||
|
|
||||||
apt_cmd = ["apt-get", "update", "-oAPT::Update::Error-Mode=any"]
|
apt_cmd = ["apt-get", "update", "-oAPT::Update::Error-Mode=any"]
|
||||||
|
|
||||||
for key, path in apt_dirs.items():
|
for key, path in apt_dirs.items():
|
||||||
value = "" if path is None else str(path)
|
value = "" if path is None else str(path)
|
||||||
apt_cmd.append(f"-oDir::{key}={str(value)}")
|
apt_cmd.append(f"-oDir::{key}={str(value)}")
|
||||||
|
|
||||||
for target in disabled_downloads:
|
for target in get_index_targets():
|
||||||
apt_cmd.append(
|
apt_cmd.append(
|
||||||
f"-oAcquire::IndexTargets::{target}::DefaultEnabled=false")
|
f"-o{target}::DefaultEnabled=false")
|
||||||
|
|
||||||
proc = await astart_command(apt_cmd, stderr=subprocess.STDOUT)
|
proc = await astart_command(apt_cmd, stderr=subprocess.STDOUT)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue