From 05a4d37740266a7df0023e17d1bc49c5325d449e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Minier?= Date: Fri, 26 Sep 2025 14:08:45 +0000 Subject: [PATCH 1/2] feat(scripts): Add get-debian-linux-config MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Downloads a linux-image package and extracts the config file from /boot. Signed-off-by: Loïc Minier --- scripts/get-debian-linux-config.py | 215 +++++++++++++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100755 scripts/get-debian-linux-config.py diff --git a/scripts/get-debian-linux-config.py b/scripts/get-debian-linux-config.py new file mode 100755 index 00000000..a1897edc --- /dev/null +++ b/scripts/get-debian-linux-config.py @@ -0,0 +1,215 @@ +#!/usr/bin/env python3 + +import argparse +import re +import subprocess +import sys +import tempfile +from pathlib import Path + +ARCH = "arm64" + + +def run(cmd, **kwargs): + """Run command with verbose logging""" + if isinstance(cmd, str): + print(f"+ {cmd}", file=sys.stderr) + else: + print("+", " ".join(cmd), file=sys.stderr) + return subprocess.run(cmd, check=True, **kwargs) + + +def ensure_dirs(*paths): + for path in paths: + Path(path).mkdir(parents=True, exist_ok=True) + + +def write_file(path: Path, content: str): + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(content, encoding="utf-8") + + +def setup_isolated_apt_root(root: Path, sources_content: str, arch: str): + etc_apt_sources_list_d = root / "etc" / "apt" / "sources.list.d" + var_lib_apt_lists = root / "var" / "lib" / "apt" / "lists" + + ensure_dirs( + etc_apt_sources_list_d, + var_lib_apt_lists / "partial", + ) + + write_file(etc_apt_sources_list_d / "sources.sources", sources_content) + + +def apt_env_options(root: Path, arch: str): + options = [ + f"Dir={root}", + f"APT::Architecture={arch}", + "Acquire::Languages=none", + "Debug::NoLocking=false", + ] + result = [] + for option in options: + result.extend(["-o", option]) + return result + + +def apt_update(root: Path, arch: str): + opts = apt_env_options(root, arch) + run(["apt-get", *opts, "update"]) + + +def resolve_versioned_kernel_pkg( + root: Path, arch: str, package_name: str +) -> str: + opts = apt_env_options(root, arch) + res = run( + ["apt-cache", *opts, "depends", package_name], + capture_output=True, + text=True, + ) + + depends_pattern = re.compile(r"^\s*Depends:\s+(linux-image-\S+)") + candidates = [ + match.group(1) + for line in res.stdout.splitlines() + if (match := depends_pattern.match(line)) + ] + + # If no candidates found, assume the provided package is already specific + if not candidates: + return package_name + + # Prefer non-unsigned packages + for pkg in candidates: + if "-unsigned-" not in pkg: + return pkg + + # Fall back to first candidate if all are unsigned + return candidates[0] + + +def apt_download_pkg( + root: Path, arch: str, pkg: str, download_dir: Path +) -> Path: + opts = apt_env_options(root, arch) + ensure_dirs(download_dir) + run(["apt-get", *opts, "download", pkg], cwd=str(download_dir)) + + debs = sorted(download_dir.glob(f"{pkg}_*.deb")) + if not debs: + debs = sorted(download_dir.glob(f"{pkg}*.deb")) + if not debs: + raise SystemExit( + f"Download succeeded but .deb not found for {pkg} in {download_dir}" + ) + return debs[-1] + + +def extract_kernel_config_from_deb(deb_path: Path, output: Path): + # List content to find the exact config path using subprocess pipeline + with subprocess.Popen( + ["dpkg-deb", "--fsys-tarfile", str(deb_path)], stdout=subprocess.PIPE + ) as dpkg_proc: + tar_result = subprocess.run( + ["tar", "-t"], + stdin=dpkg_proc.stdout, + capture_output=True, + text=True, + check=True, + ) + + paths = [line.strip() for line in tar_result.stdout.splitlines()] + # Look for './boot/config-*' (tar usually prefixes './') + cfg_candidates = [ + path for path in paths if path.startswith("./boot/config-") + ] + if not cfg_candidates: + raise SystemExit(f"No ./boot/config-* found in {deb_path}") + cfg_path = cfg_candidates[0] + print(f"# Found config path in deb: {cfg_path}", file=sys.stderr) + + # Stream-extract the config using subprocess pipeline + with subprocess.Popen( + ["dpkg-deb", "--fsys-tarfile", str(deb_path)], stdout=subprocess.PIPE + ) as dpkg_proc: + tar_result = subprocess.run( + ["tar", "-xO", cfg_path], + stdin=dpkg_proc.stdout, + capture_output=True, + check=True, + ) + + # Write the extracted config to output file + output.write_bytes(tar_result.stdout) + + +def main(): + parser = argparse.ArgumentParser( + description="Download a linux-image package and extract its config" + ) + parser.add_argument( + "--sources", required=True, help="path to deb822 style sources file" + ) + parser.add_argument( + "--output", + default=None, + help="output file (default: .config)", + ) + parser.add_argument( + "--debug", + action="store_true", + help="keep working temporary directory", + ) + parser.add_argument( + "--package", + default=f"linux-image-{ARCH}", + help=f"package or metapackage name (default: linux-image-{ARCH})", + ) + args = parser.parse_args() + + sources_path = Path(args.sources) + if not sources_path.exists(): + sys.exit(f"Error: sources file '{args.sources}' not found") + + try: + sources_content = sources_path.read_text(encoding="utf-8") + except Exception as e: + sys.exit(f"Error reading sources file '{args.sources}': {e}") + + top_tmp = tempfile.TemporaryDirectory( + prefix="get-debian-linux-config-", delete=not (args.debug) + ) + work_root = Path(top_tmp.name) + apt_root = work_root / "aptroot" + dl_dir = work_root / "downloads" + + print( + f"==> Setting up isolated APT environment in {work_root}...", + file=sys.stderr, + ) + setup_isolated_apt_root(apt_root, sources_content, ARCH) + + print("\n==> Updating package lists...", file=sys.stderr) + apt_update(apt_root, ARCH) + + print("\n==> Resolving kernel package...", file=sys.stderr) + image_pkg = resolve_versioned_kernel_pkg(apt_root, ARCH, args.package) + print(f"==> Resolved kernel package: {image_pkg}", file=sys.stderr) + + print(f"\n==> Downloading package: {image_pkg}", file=sys.stderr) + deb_path = apt_download_pkg(apt_root, ARCH, image_pkg, dl_dir) + + print(f"\n==> Extracting config from {deb_path.name}", file=sys.stderr) + output_path = ( + Path(args.output) + if args.output + else Path.cwd() / f"{image_pkg}.config" + ) + extract_kernel_config_from_deb(deb_path, output_path) + + print(f"\nWrote: {output_path}") + + +if __name__ == "__main__": + main() From e93a2c37bd7b7e8d89beaf6f644086aa8b69ae13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Minier?= Date: Fri, 26 Sep 2025 16:42:45 +0000 Subject: [PATCH 2/2] feat: Add some reference apt-sources MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These are useful e.g. for scripts/get-debian-linux-config.py. Signed-off-by: Loïc Minier --- apt-sources/forky.sources | 383 +++++++++++++++++++++++++++ apt-sources/sid-experimental.sources | 191 +++++++++++++ apt-sources/trixie.sources | 383 +++++++++++++++++++++++++++ scripts/get-debian-linux-config.py | 167 +++++++----- 4 files changed, 1059 insertions(+), 65 deletions(-) create mode 100644 apt-sources/forky.sources create mode 100644 apt-sources/sid-experimental.sources create mode 100644 apt-sources/trixie.sources diff --git a/apt-sources/forky.sources b/apt-sources/forky.sources new file mode 100644 index 00000000..636f6618 --- /dev/null +++ b/apt-sources/forky.sources @@ -0,0 +1,383 @@ +Types: deb deb-src +URIs: http://deb.debian.org/debian/ +Suites: forky forky-updates +Components: main contrib non-free-firmware +Signed-By: + -----BEGIN PGP PUBLIC KEY BLOCK----- + . + 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 + JTBXMe98MDmvUA== + =OEKh + -----END PGP PUBLIC KEY BLOCK----- + +Types: deb deb-src +URIs: http://deb.debian.org/debian-security/ +Suites: forky-security +Components: main contrib non-free-firmware +Signed-By: + -----BEGIN PGP PUBLIC KEY BLOCK----- + . + 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 + ugNdPbTx5TQVD48tsKiSIOPP1g== + =UqDn + -----END PGP PUBLIC KEY BLOCK----- diff --git a/apt-sources/sid-experimental.sources b/apt-sources/sid-experimental.sources new file mode 100644 index 00000000..dee73f91 --- /dev/null +++ b/apt-sources/sid-experimental.sources @@ -0,0 +1,191 @@ +Types: deb deb-src +URIs: http://deb.debian.org/debian/ +Suites: sid experimental +Components: main contrib non-free-firmware +Signed-By: + -----BEGIN PGP PUBLIC KEY BLOCK----- + . + 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 + JTBXMe98MDmvUA== + =OEKh + -----END PGP PUBLIC KEY BLOCK----- diff --git a/apt-sources/trixie.sources b/apt-sources/trixie.sources new file mode 100644 index 00000000..b826f8a9 --- /dev/null +++ b/apt-sources/trixie.sources @@ -0,0 +1,383 @@ +Types: deb deb-src +URIs: http://deb.debian.org/debian/ +Suites: trixie trixie-updates +Components: main contrib non-free-firmware +Signed-By: + -----BEGIN PGP PUBLIC KEY BLOCK----- + . + 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 + JTBXMe98MDmvUA== + =OEKh + -----END PGP PUBLIC KEY BLOCK----- + +Types: deb deb-src +URIs: http://deb.debian.org/debian-security/ +Suites: trixie-security +Components: main contrib non-free-firmware +Signed-By: + -----BEGIN PGP PUBLIC KEY BLOCK----- + . + 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 + ugNdPbTx5TQVD48tsKiSIOPP1g== + =UqDn + -----END PGP PUBLIC KEY BLOCK----- diff --git a/scripts/get-debian-linux-config.py b/scripts/get-debian-linux-config.py index a1897edc..6bfb840a 100755 --- a/scripts/get-debian-linux-config.py +++ b/scripts/get-debian-linux-config.py @@ -1,4 +1,13 @@ #!/usr/bin/env python3 +# Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. +# SPDX-License-Identifier: BSD-3-Clause + +""" +Download a Debian linux-image package and extract its kernel configuration. + +This script sets up an isolated APT environment, downloads a specified +linux-image package, and extracts the kernel configuration file from it. +""" import argparse import re @@ -10,61 +19,73 @@ ARCH = "arm64" -def run(cmd, **kwargs): - """Run command with verbose logging""" - if isinstance(cmd, str): - print(f"+ {cmd}", file=sys.stderr) - else: - print("+", " ".join(cmd), file=sys.stderr) +def run(cmd: list, **kwargs): + """Run command with verbose logging.""" + print("+", " ".join(cmd), file=sys.stderr) return subprocess.run(cmd, check=True, **kwargs) +def run_apt_cmd(root: Path, cmd: list, **kwargs): + """Run APT command with isolated configuration.""" + apt_conf = str(root / "etc" / "apt" / "apt.conf") + full_cmd = [cmd[0], "-c", apt_conf] + cmd[1:] + return run(full_cmd, **kwargs) + + def ensure_dirs(*paths): + """Create directories if they don't exist.""" for path in paths: Path(path).mkdir(parents=True, exist_ok=True) def write_file(path: Path, content: str): + """Write content to a file, creating parent directories if needed.""" path.parent.mkdir(parents=True, exist_ok=True) path.write_text(content, encoding="utf-8") -def setup_isolated_apt_root(root: Path, sources_content: str, arch: str): - etc_apt_sources_list_d = root / "etc" / "apt" / "sources.list.d" +def setup_isolated_apt( + root: Path, sources_content: str, arch: str, default_release: str = None +): + """Set up an isolated APT environment with configuration.""" + etc_apt = root / "etc" / "apt" + etc_apt_preferences_d = etc_apt / "preferences.d" + etc_apt_sources_list_d = etc_apt / "sources.list.d" var_lib_apt_lists = root / "var" / "lib" / "apt" / "lists" ensure_dirs( + etc_apt_preferences_d, etc_apt_sources_list_d, var_lib_apt_lists / "partial", ) write_file(etc_apt_sources_list_d / "sources.sources", sources_content) - -def apt_env_options(root: Path, arch: str): - options = [ - f"Dir={root}", - f"APT::Architecture={arch}", - "Acquire::Languages=none", - "Debug::NoLocking=false", + # Create apt.conf with all APT options + apt_conf_lines = [ + f'Dir "{root}";', + f'APT::Architecture "{arch}";', + 'Acquire::Languages "none";', + 'Debug::NoLocking "false";', ] - result = [] - for option in options: - result.extend(["-o", option]) - return result + if default_release: + apt_conf_lines.append(f'APT::Default-Release "{default_release}";') + + apt_conf_content = "\n".join(apt_conf_lines) + "\n" + write_file(etc_apt / "apt.conf", apt_conf_content) -def apt_update(root: Path, arch: str): - opts = apt_env_options(root, arch) - run(["apt-get", *opts, "update"]) +def apt_update(root: Path): + """Update APT package lists in the isolated environment.""" + run_apt_cmd(root, ["apt-get", "update"]) -def resolve_versioned_kernel_pkg( - root: Path, arch: str, package_name: str -) -> str: - opts = apt_env_options(root, arch) - res = run( - ["apt-cache", *opts, "depends", package_name], + +def resolve_versioned_kernel_pkg(root: Path, package_name: str) -> str: + """Resolve a kernel package name to its specific versioned package.""" + res = run_apt_cmd( + root, + ["apt-cache", "depends", package_name], capture_output=True, text=True, ) @@ -89,25 +110,25 @@ def resolve_versioned_kernel_pkg( return candidates[0] -def apt_download_pkg( - root: Path, arch: str, pkg: str, download_dir: Path -) -> Path: - opts = apt_env_options(root, arch) +def apt_download_pkg(root: Path, pkg: str, download_dir: Path) -> Path: + """Download a package using APT and return the path to the .deb file.""" ensure_dirs(download_dir) - run(["apt-get", *opts, "download", pkg], cwd=str(download_dir)) + run_apt_cmd(root, ["apt-get", "download", pkg], cwd=str(download_dir)) debs = sorted(download_dir.glob(f"{pkg}_*.deb")) if not debs: debs = sorted(download_dir.glob(f"{pkg}*.deb")) if not debs: raise SystemExit( - f"Download succeeded but .deb not found for {pkg} in {download_dir}" + f"Download succeeded but deb not found for {pkg} in {download_dir}" ) return debs[-1] def extract_kernel_config_from_deb(deb_path: Path, output: Path): + """Extract kernel configuration from a .deb file.""" # List content to find the exact config path using subprocess pipeline + print(f"+ dpkg-deb --fsys-tarfile {deb_path} | tar -t", file=sys.stderr) with subprocess.Popen( ["dpkg-deb", "--fsys-tarfile", str(deb_path)], stdout=subprocess.PIPE ) as dpkg_proc: @@ -130,6 +151,10 @@ def extract_kernel_config_from_deb(deb_path: Path, output: Path): print(f"# Found config path in deb: {cfg_path}", file=sys.stderr) # Stream-extract the config using subprocess pipeline + print( + f"+ dpkg-deb --fsys-tarfile {deb_path} | tar -xO {cfg_path}", + file=sys.stderr, + ) with subprocess.Popen( ["dpkg-deb", "--fsys-tarfile", str(deb_path)], stdout=subprocess.PIPE ) as dpkg_proc: @@ -145,6 +170,7 @@ def extract_kernel_config_from_deb(deb_path: Path, output: Path): def main(): + """Main entry point for the script.""" parser = argparse.ArgumentParser( description="Download a linux-image package and extract its config" ) @@ -156,16 +182,21 @@ def main(): default=None, help="output file (default: .config)", ) - parser.add_argument( - "--debug", - action="store_true", - help="keep working temporary directory", - ) parser.add_argument( "--package", default=f"linux-image-{ARCH}", help=f"package or metapackage name (default: linux-image-{ARCH})", ) + parser.add_argument( + "--default-release", + default=None, + help="set APT::Default-Release (e.g., 'trixie', 'testing')", + ) + parser.add_argument( + "--debug", + action="store_true", + help="keep working temporary directory and show config", + ) args = parser.parse_args() sources_path = Path(args.sources) @@ -174,41 +205,47 @@ def main(): try: sources_content = sources_path.read_text(encoding="utf-8") - except Exception as e: + except (OSError, UnicodeDecodeError) as e: sys.exit(f"Error reading sources file '{args.sources}': {e}") - top_tmp = tempfile.TemporaryDirectory( + with tempfile.TemporaryDirectory( prefix="get-debian-linux-config-", delete=not (args.debug) - ) - work_root = Path(top_tmp.name) - apt_root = work_root / "aptroot" - dl_dir = work_root / "downloads" + ) as temp_dir: + work_root = Path(temp_dir) + apt_root = work_root / "aptroot" + dl_dir = work_root / "downloads" + + print( + f"==> Setting up isolated APT environment in {work_root}...", + file=sys.stderr, + ) + setup_isolated_apt( + apt_root, sources_content, ARCH, args.default_release + ) - print( - f"==> Setting up isolated APT environment in {work_root}...", - file=sys.stderr, - ) - setup_isolated_apt_root(apt_root, sources_content, ARCH) + if args.debug: + print("\n==> APT configuration dump:", file=sys.stderr) + run_apt_cmd(apt_root, ["apt-config", "dump"]) - print("\n==> Updating package lists...", file=sys.stderr) - apt_update(apt_root, ARCH) + print("\n==> Updating package lists...", file=sys.stderr) + apt_update(apt_root) - print("\n==> Resolving kernel package...", file=sys.stderr) - image_pkg = resolve_versioned_kernel_pkg(apt_root, ARCH, args.package) - print(f"==> Resolved kernel package: {image_pkg}", file=sys.stderr) + print("\n==> Resolving kernel package...", file=sys.stderr) + image_pkg = resolve_versioned_kernel_pkg(apt_root, args.package) + print(f"==> Resolved kernel package: {image_pkg}", file=sys.stderr) - print(f"\n==> Downloading package: {image_pkg}", file=sys.stderr) - deb_path = apt_download_pkg(apt_root, ARCH, image_pkg, dl_dir) + print(f"\n==> Downloading package: {image_pkg}", file=sys.stderr) + deb_path = apt_download_pkg(apt_root, image_pkg, dl_dir) - print(f"\n==> Extracting config from {deb_path.name}", file=sys.stderr) - output_path = ( - Path(args.output) - if args.output - else Path.cwd() / f"{image_pkg}.config" - ) - extract_kernel_config_from_deb(deb_path, output_path) + print(f"\n==> Extracting config from {deb_path.name}", file=sys.stderr) + output_path = ( + Path(args.output) + if args.output + else Path.cwd() / f"{image_pkg}.config" + ) + extract_kernel_config_from_deb(deb_path, output_path) - print(f"\nWrote: {output_path}") + print(f"\nWrote: {output_path}") if __name__ == "__main__":