diff --git a/README.md b/README.md index 303e64b5..8f153569 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,9 @@ The [examples](/examples) demonstrate how to accomplish typical tasks such as - [apt-get install](/examples/debian_snapshot) from Debian repositories. - [apt-get install](/examples/ubuntu_snapshot) from Ubuntu repositories. +You can create sysroots for toolchains_llvm on the fly using rules_distroless. +See [examples/sysroot/README.md](examples/sysroot/README.md) for more details. + We also have `distroless`-specific rules that could be useful: - [flatten](/examples/flatten): flatten multiple `tar` archives. diff --git a/apt/BUILD.bazel b/apt/BUILD.bazel index 8d7350c8..4e19b397 100644 --- a/apt/BUILD.bazel +++ b/apt/BUILD.bazel @@ -24,6 +24,7 @@ bzl_library( "//apt/private:deb_filemap", "//apt/private:deb_import", "//apt/private:lockfile", + "//apt/private:sysroot_repository", "//apt/private:translate_dependency_set", "//apt/private:util", "//apt/private:version_constraint", diff --git a/apt/extensions.bzl b/apt/extensions.bzl index 5969d271..7d1ed8be 100644 --- a/apt/extensions.bzl +++ b/apt/extensions.bzl @@ -6,6 +6,7 @@ load("//apt/private:apt_dep_resolver.bzl", "dependency_resolver") load("//apt/private:deb_filemap.bzl", "deb_filemap") load("//apt/private:deb_import.bzl", "deb_import") load("//apt/private:lockfile.bzl", "lockfile") +load("//apt/private:sysroot_repository.bzl", "sysroot_repository") load("//apt/private:translate_dependency_set.bzl", "translate_dependency_set") load("//apt/private:util.bzl", "util") load("//apt/private:version_constraint.bzl", "version_constraint") @@ -329,6 +330,15 @@ def _distroless_extension(mctx): False: {}, True: {}, } + sysroot_repos = [] + + for mod in mctx.modules: + for sysroot_tag in mod.tags.sysroot: + sysroot_repos.append(( + sysroot_tag.name, + sysroot_tag.dependency_set, + sysroot_tag.architecture, + )) for mod in mctx.modules: for install in mod.tags.install: @@ -484,6 +494,17 @@ def _distroless_extension(mctx): mergedusr = depset_mergedusr, ) + # Generate separate sysroot repositories for each architecture + for (sysroot_name, depset_name, arch) in sysroot_repos: + if depset_name not in dependency_sets: + fail("apt.sysroot refers to unknown dependency_set '{}'. Add apt.install with the same dependency_set first.".format(depset_name)) + sysroot_repository( + name = sysroot_name, + depset_name = depset_name, + lock_content = lock_content, + architecture = arch, + ) + # Generate a repo per package which will be aliased by hub repo. for (package_key, package) in glock.packages().items(): (suite, name, arch, version) = lockfile.parse_package_key(package_key) @@ -593,6 +614,38 @@ You can use the package like so: `@///:`. E.g. for the previous example, you could use `@bullseye//perl/amd64:data`. +## Creating Unpacked Sysroots + +To create unpacked sysroot repositories for use with toolchains like `toolchains_llvm`, +use `apt.sysroot`. This creates a separate repository for the specified architecture: + +```starlark +apt.install( + dependency_set = "my_sysroot", + packages = ["libc6", "libstdc++6"], + suites = ["noble"], +) + +apt.sysroot( + dependency_set = "my_sysroot", + architecture = "amd64", + name = "my_sysroot_amd64", +) +apt.sysroot( + dependency_set = "my_sysroot", + architecture = "arm64", + name = "my_sysroot_arm64", +) +``` + +This creates separate unpacked sysroot repositories: +- `@my_sysroot_amd64` with unpacked content at `//sysroot` +- `@my_sysroot_arm64` with unpacked content at `//sysroot` + +Each sysroot repository is independent and contains only the unpacked files for +that specific architecture. The unpacking happens at repository fetch time, making +the sysroots available to toolchains immediately. + ### Lockfiles As mentioned, the macro can be used without a lock because the lock will be @@ -660,6 +713,23 @@ install = tag_class( }, ) +sysroot = tag_class( + attrs = { + "name": attr.string( + mandatory = True, + doc = "The name of the sysroot repository.", + ), + "dependency_set": attr.string( + mandatory = True, + doc = "The dependency set to create a sysroot for.", + ), + "architecture": attr.string( + mandatory = True, + doc = "The architecture to unpack the sysroot for.", + ), + }, +) + lock = tag_class( attrs = { "into": attr.label( @@ -674,6 +744,7 @@ apt = module_extension( tag_classes = { "install": install, "sources_list": sources_list, + "sysroot": sysroot, "lock": lock, }, ) diff --git a/apt/private/BUILD.bazel b/apt/private/BUILD.bazel index bea14893..a5992620 100644 --- a/apt/private/BUILD.bazel +++ b/apt/private/BUILD.bazel @@ -142,3 +142,15 @@ bzl_library( srcs = ["util.bzl"], visibility = ["//apt:__subpackages__"], ) + +bzl_library( + name = "sysroot_repository", + srcs = ["sysroot_repository.bzl"], + visibility = ["//apt:__subpackages__"], + deps = [ + ":lockfile", + ":translate_dependency_set", + ":util", + "@bazel_lib//lib:repo_utils", + ], +) diff --git a/apt/private/lockfile.bzl b/apt/private/lockfile.bzl index bdb2af8e..d95d810f 100644 --- a/apt/private/lockfile.bzl +++ b/apt/private/lockfile.bzl @@ -58,6 +58,8 @@ def _add_package_dependency(lock, package, dependency, arch = None): if k not in lock.packages: fail("illegal state: %s is not in the lockfile." % package["Package"]) sk = _package_key(dependency, arch) + if sk not in lock.packages: + fail("illegal state: %s is not in the lockfile." % dependency["Package"]) if sk in lock.packages[k]["depends_on"]: return lock.packages[k]["depends_on"].append(sk) diff --git a/apt/private/sysroot_repository.bzl b/apt/private/sysroot_repository.bzl new file mode 100644 index 00000000..cbf27680 --- /dev/null +++ b/apt/private/sysroot_repository.bzl @@ -0,0 +1,95 @@ +"repository rule for generating unpacked sysroot repositories from a lockfile." + +load(":lockfile.bzl", "lockfile") +load(":translate_dependency_set.bzl", "dependency_set_transitive_package_keys") +load(":util.bzl", "util") + +_SYSROOT_BUILD_TMPL = """\ +"Generated by rules_distroless. DO NOT EDIT." + +filegroup( + name = "sysroot", + srcs = ["."], + visibility = ["//visibility:public"], +) +""" + +def _materialize_deb_data_into_root(rctx, deb_path, ar_dir, unpack_dir): + """Unpacks the data.tar.* payload of a .deb archive into unpack_dir. + + This relies exclusively on Bazel's built-in support for extracting + the `ar` container format used by .deb files, and the nested `tar.*` + payload, via repository_ctx.extract(). + """ + + # .deb files are `ar` archives containing debian-binary, control.tar.* + # and data.tar.* members. Extracting unpacks those members as plain, + # uncompressed files (the ".deb" extension is auto-detected as ar). + rctx.extract(archive = deb_path, output = ar_dir) + + data_member = None + for entry in rctx.path(ar_dir).readdir(): + if entry.basename.startswith("data.tar"): + data_member = entry + break + + if data_member == None: + fail("No data archive found in {}".format(deb_path)) + + # The archive type (tar.gz/tar.xz/tar.zst/...) is auto-detected from + # the data_member's file extension. + rctx.extract(archive = data_member, output = unpack_dir) + +def _unpack(rctx, packages, dependency_set, sources, architecture): + if architecture not in dependency_set["sets"]: + fail("architecture '{}' is not present in dependency set '{}'".format(architecture, rctx.attr.depset_name)) + + unpack_dir = "sysroot" + work_dir = ".unpack_work_%s" % architecture + + package_keys = dependency_set_transitive_package_keys(packages, dependency_set, [architecture, "all"]) + for package_key in package_keys: + package = packages[package_key] + sanitized_key = util.sanitize(package_key) + deb_path = "{}/{}.deb".format(work_dir, sanitized_key) + ar_dir = "{}/{}.ar".format(work_dir, sanitized_key) + + rctx.download( + output = deb_path, + sha256 = package["sha256"], + url = [ + uri + "/" + package["filename"] + for uri in sources[package["suite"]]["uris"] + ], + ) + + _materialize_deb_data_into_root(rctx, deb_path, ar_dir, unpack_dir) + + rctx.delete(work_dir) + +def _sysroot_repository_impl(rctx): + lockf = lockfile.from_json(rctx, rctx.attr.lock_content) + + sources = lockf.sources() + packages = lockf.packages() + dependency_sets = lockf.dependency_sets() + dependency_set = dependency_sets[rctx.attr.depset_name] + + _unpack( + rctx, + packages, + dependency_set, + sources, + rctx.attr.architecture, + ) + + rctx.file("sysroot/BUILD.bazel", _SYSROOT_BUILD_TMPL) + +sysroot_repository = repository_rule( + implementation = _sysroot_repository_impl, + attrs = { + "depset_name": attr.string(doc = "INTERNAL: DO NOT USE"), + "lock_content": attr.string(doc = "INTERNAL: DO NOT USE"), + "architecture": attr.string(doc = "INTERNAL: Architecture to unpack and expose as //sysroot:sysroot."), + }, +) diff --git a/apt/private/translate_dependency_set.bzl b/apt/private/translate_dependency_set.bzl index d0147bf4..a5caed73 100644 --- a/apt/private/translate_dependency_set.bzl +++ b/apt/private/translate_dependency_set.bzl @@ -133,21 +133,93 @@ alias( ) """ -# Computes the `@repo//:data` labels a package's per-architecture BUILD.bazel -# should depend on for the given architecture. +# Builds the fully-qualified package key (`=`) used to +# index into the lockfile's `packages` map from a dependency_set's per- +# architecture `{short_key: version}` entries. +def _package_key(short_key, version): + return short_key + "=" + version + +# Returns the `depends_on` keys of `package` whose architecture is present in +# `allowed_architectures` (a set-like dict of architecture -> True). # # Avoids mixing architectures: a dependency is only included if it was built -# for this exact architecture, or is architecture-independent ("all"). Without +# for an allowed architecture, or is architecture-independent ("all"). Without # this scoping, a package's `depends_on` (which spans every architecture the # lockfile knows about) would leak foreign-architecture deps into a single -# architecture's target, causing file duplication that confuses `flatten`. -def package_deps_for_architecture(packages, package, architecture, mergedusr = False): +# architecture's target/closure, causing file duplication that confuses +# `flatten`. +def _package_dep_keys_for_architectures(packages, package, allowed_architectures): return [ - "@" + util.package_repo_name(dep_key, mergedusr = mergedusr) + "//:data" + dep_key for dep_key in package["depends_on"] - if packages[dep_key]["architecture"] in [architecture, "all"] + if packages[dep_key]["architecture"] in allowed_architectures + ] + +# Computes the `@repo//:data` labels a package's per-architecture BUILD.bazel +# should depend on for the given architecture. +def _package_deps_for_architecture(packages, package, architecture, mergedusr = False): + allowed_architectures = {architecture: True, "all": True} + return [ + "@" + util.package_repo_name(dep_key, mergedusr = mergedusr) + "//:data" + for dep_key in _package_dep_keys_for_architectures(packages, package, allowed_architectures) ] +# Validates a dependency_set against the lockfile's `packages` map. +def verify_dependency_set(packages, dependency_set): + package_coords_to_versions = {} + + for (architecture, entries) in dependency_set["sets"].items(): + for (short_key, version) in entries.items(): + package_key = _package_key(short_key, version) + if package_key not in packages: + fail("illegal state: package %s is not in lockfile" % package_key) + + package_name = packages[package_key]["name"] + package_coords = (package_name, architecture) + recorded_version = package_coords_to_versions.setdefault(package_coords, version) + if recorded_version != version: + fail("""Two different source versions detected for package `{name}:{arch}` : {v1} and {v2}. +This usually means that a distribution ships different versions of this dependency for different architectures. + +Please unify the versions manually, or use separate `apt.install` calls (with distinct `dependency_set` names) for each version of the dependency. +""".format(name = package_name, arch = architecture, v1 = recorded_version, v2 = version)) + +def dependency_set_transitive_package_keys(packages, dependency_set, architectures): + keys = {} + pending = [] + allowed_architectures = { + architecture: True + for architecture in architectures + } + + verify_dependency_set(packages, dependency_set) + + for architecture in architectures: + entries = dependency_set["sets"].get(architecture, {}) + for (short_key, version) in entries.items(): + pending.append(_package_key(short_key, version)) + + for _ in range(len(packages)): + if not pending: + break + + current = pending + pending = [] + for package_key in current: + if package_key in keys: + continue + + keys[package_key] = True + + # Keep closure architecture-scoped even when traversing from + # architecture = all packages with mixed-arch dependency metadata. + pending.extend(_package_dep_keys_for_architectures(packages, packages[package_key], allowed_architectures)) + + if pending: + fail("dependency traversal for package keys did not converge") + + return sorted(keys.keys()) + def _translate_dependency_set_impl(rctx): package_template = rctx.read(rctx.attr.package_template) lockf = lockfile.from_json(rctx, rctx.attr.lock_content) @@ -163,33 +235,19 @@ def _translate_dependency_set_impl(rctx): # Used to populate the root repo's _PACKAGES table. architectures_to_package_names = {} - # Maps a package coordinates key (e.g. `(, )` to its version. - # - # It is possible to specify multiple versions of a single dependency for a single architecture in a dependency set. - # In those cases, we want to hard-error. - package_coords_to_versions = {} + verify_dependency_set(packages, dependency_set) for architecture in dependency_set["sets"].keys(): architectures_to_package_names[architecture] = [] for (short_key, version) in dependency_set["sets"][architecture].items(): - package_key = short_key + "=" + version + package_key = _package_key(short_key, version) repo_name = util.package_repo_name(package_key, mergedusr = rctx.attr.mergedusr) package = packages[package_key] package_name = package["name"] architectures_to_package_names[architecture].append(package_name) - source_version = version - package_coords = (package_name, architecture) - recorded_version = package_coords_to_versions.setdefault(package_coords, source_version) - if recorded_version != source_version: - fail("""Two different source versions detected for package `{name}:{arch}` : {v1} and {v2}. -This usually means that a distribution ships different versions of this dependency for different architectures. - -Please unify the versions manually, or use separate `apt.install` calls (with distinct `dependency_set` names) for each version of the dependency. -""".format(name = package_name, arch = architecture, v1 = recorded_version, v2 = source_version)) - # Keyed by package name (not name+version): a package rebuilt with a # different binNMU per architecture is a single target whose data, # control and deps are selected per architecture. @@ -208,7 +266,7 @@ Please unify the versions manually, or use separate `apt.install` calls (with di data_targets = '"@%s//:data"' % repo_name, control_targets = '"@%s//:control"' % repo_name, src = '"@%s//:data"' % repo_name, - deps = package_deps_for_architecture(packages, package, architecture, mergedusr = rctx.attr.mergedusr), + deps = _package_deps_for_architecture(packages, package, architecture, mergedusr = rctx.attr.mergedusr), urls = [ uri + "/" + package["filename"] for uri in sources[package["suite"]]["uris"] diff --git a/apt/tests/translate_dependency_set_test.bzl b/apt/tests/translate_dependency_set_test.bzl index 6e480ccc..f2734a91 100644 --- a/apt/tests/translate_dependency_set_test.bzl +++ b/apt/tests/translate_dependency_set_test.bzl @@ -1,7 +1,7 @@ "unit tests for dependency set translation" load("@bazel_skylib//lib:unittest.bzl", "asserts", "unittest") -load("//apt/private:translate_dependency_set.bzl", "package_deps_for_architecture") +load("//apt/private:translate_dependency_set.bzl", "dependency_set_transitive_package_keys") load("//apt/private:util.bzl", "util") _TEST_SUITE_PREFIX = "translate_dependency_set/" @@ -12,38 +12,89 @@ _TEST_SUITE_PREFIX = "translate_dependency_set/" # package's `depends_on` (computed from the whole, possibly multi-arch, # lockfile) must only contribute deps that match the architecture being # built (or are architecture-independent). -def _no_mixed_architectures_test(ctx): +def _no_mixed_architectures_deps_test(ctx): env = unittest.begin(ctx) packages = { + "/repo/root:amd64=1.0": { + "name": "root", + "architecture": "amd64", + "depends_on": [ + "/repo/libfoo:amd64=1.0", + "/repo/libfoo:arm64=1.0", + "/repo/libbar:all=1.0", + ], + }, "/repo/libfoo:amd64=1.0": { + "name": "libfoo", "architecture": "amd64", + "depends_on": [], }, "/repo/libfoo:arm64=1.0": { + "name": "libfoo", "architecture": "arm64", + "depends_on": [], }, "/repo/libbar:all=1.0": { + "name": "libbar", "architecture": "all", + "depends_on": [], + }, + } + dependency_set = { + "sets": { + "amd64": {"/repo/root:amd64": "1.0"}, }, } - package = { - "depends_on": [ - "/repo/libfoo:amd64=1.0", - "/repo/libfoo:arm64=1.0", - "/repo/libbar:all=1.0", - ], + + keys = dependency_set_transitive_package_keys(packages, dependency_set, ["amd64", "all"]) + + asserts.true(env, "/repo/libfoo:amd64=1.0" in keys) + asserts.true(env, "/repo/libbar:all=1.0" in keys) + asserts.false(env, "/repo/libfoo:arm64=1.0" in keys) + asserts.equals(env, 3, len(keys)) # root, libfoo:amd64, libbar:all + + return unittest.end(env) + +no_mixed_architectures_deps_test = unittest.make(_no_mixed_architectures_deps_test) + +# A package depended on from an "all"-architecture entry point must not pull +# in transitive dependencies that only exist for a foreign architecture, even +# though the lockfile itself carries mixed-architecture dependency metadata. +def _no_mixed_architectures_unpack_test(ctx): + env = unittest.begin(ctx) + + packages = { + "/repo/root:all=1.0": { + "name": "root", + "architecture": "all", + "depends_on": ["/repo/libfoo:amd64=1.0", "/repo/libfoo:arm64=1.0"], + }, + "/repo/libfoo:amd64=1.0": { + "name": "libfoo", + "architecture": "amd64", + "depends_on": [], + }, + "/repo/libfoo:arm64=1.0": { + "name": "libfoo", + "architecture": "arm64", + "depends_on": [], + }, + } + dependency_set = { + "sets": { + "all": {"/repo/root:all": "1.0"}, + }, } - deps = package_deps_for_architecture(packages, package, "amd64") + keys = dependency_set_transitive_package_keys(packages, dependency_set, ["amd64", "all"]) - asserts.true(env, "@repo_libfoo-amd64_1.0//:data" in deps) - asserts.true(env, "@repo_libbar-all_1.0//:data" in deps) - asserts.false(env, "@repo_libfoo-arm64_1.0//:data" in deps) - asserts.equals(env, 2, len(deps)) + asserts.true(env, "/repo/libfoo:amd64=1.0" in keys) + asserts.false(env, "/repo/libfoo:arm64=1.0" in keys) return unittest.end(env) -no_mixed_architectures_test = unittest.make(_no_mixed_architectures_test) +no_mixed_architectures_unpack_test = unittest.make(_no_mixed_architectures_unpack_test) # Regression test for commit "Add mergedusr support to apt.install()": package # repo names must be distinguishable per mergedusr mode so that the same @@ -62,5 +113,6 @@ def _package_repo_name_modes_test(ctx): package_repo_name_modes_test = unittest.make(_package_repo_name_modes_test) def translate_dependency_set_tests(): - no_mixed_architectures_test(name = _TEST_SUITE_PREFIX + "no_mixed_architectures") + no_mixed_architectures_deps_test(name = _TEST_SUITE_PREFIX + "no_mixed_architectures_deps") + no_mixed_architectures_unpack_test(name = _TEST_SUITE_PREFIX + "no_mixed_architectures_unpack") package_repo_name_modes_test(name = _TEST_SUITE_PREFIX + "package_repo_name_modes") diff --git a/e2e/smoke/BUILD b/e2e/smoke/BUILD index c97b224a..7fada7f7 100644 --- a/e2e/smoke/BUILD +++ b/e2e/smoke/BUILD @@ -1,5 +1,6 @@ load("@bazel_lib//lib:transitions.bzl", "platform_transition_filegroup") load("@container_structure_test//:defs.bzl", "container_structure_test") +load("@rules_cc//cc:defs.bzl", "cc_test") load("@rules_distroless//distroless:defs.bzl", "cacerts", "group", "passwd") load("@rules_oci//oci:defs.bzl", "oci_image", "oci_load") load("@tar.bzl", "tar") @@ -130,3 +131,9 @@ container_structure_test( image = ":image_platform", target_compatible_with = COMPATIBLE_WITH, ) + +cc_test( + name = "test_sysroot", + srcs = ["hello_world.cpp"], + visibility = ["//visibility:public"], +) diff --git a/e2e/smoke/MODULE.bazel b/e2e/smoke/MODULE.bazel index 1117f3dc..c9262a91 100644 --- a/e2e/smoke/MODULE.bazel +++ b/e2e/smoke/MODULE.bazel @@ -13,6 +13,7 @@ local_path_override( ) apt = use_extension("@rules_distroless//apt:extensions.bzl", "apt") +apt.lock(into = ":rules_distroless.lock.json") apt.sources_list( architectures = [ "amd64", @@ -83,5 +84,78 @@ apt.install( "cloud-sdk", ], ) -apt.lock(into = ":bullseye.lock.json") -use_repo(apt, "bullseye") + +apt.sources_list( + # You may select multiple architectures for different sysroots + architectures = [ + "amd64", + "arm64", + ], + components = ["main"], + suites = [ + "noble", + "noble-security", + "noble-updates", + ], + types = ["deb"], + uris = ["https://snapshot.ubuntu.com/ubuntu/20260401T000000Z"], +) + +# Specify what packages should be installed in your sysroot +apt.install( + dependency_set = "ubuntu24_04_sysroot", + packages = [ + "base-files", # provides /bin, /lib, etc. symlinks required by linker + "libc6", # Core C/POSIX + "libc6-dev", # Core C/POSIX + "linux-libc-dev", # Core C/POSIX + "libstdc++6", # C++ standard library runtime + "libstdc++-13-dev", # C++ standard library headers + "libgcc-s1", # Exception unwinding + "libatomic1", # Non-lock-free atomics support + ], + suites = [ + "noble", + "noble-security", + "noble-updates", + ], +) +apt.sysroot( + name = "ubuntu24_04_sysroot_amd64", + dependency_set = "ubuntu24_04_sysroot", + architecture = "amd64", +) +apt.sysroot( + name = "ubuntu24_04_sysroot_arm64", + dependency_set = "ubuntu24_04_sysroot", + architecture = "arm64", +) +use_repo(apt, "bullseye", "ubuntu24_04_sysroot_amd64", "ubuntu24_04_sysroot_arm64") + +bazel_dep(name = "rules_cc", version = "0.1.5") +bazel_dep(name = "toolchains_llvm", version = "1.7.0", dev_dependency = True) + +llvm = use_extension( + "@toolchains_llvm//toolchain/extensions:llvm.bzl", + "llvm", + dev_dependency = True, +) +llvm.toolchain( + llvm_version = "19.1.7", + # You can now specify the C++ stdlib that is contained in the sysroot above + stdlib = {"": "stdc++"}, +) + +# Specify the sysroot for the matching target +llvm.sysroot( + name = "llvm_toolchain", + label = "@ubuntu24_04_sysroot_amd64//sysroot", + targets = ["linux-x86_64"], +) +llvm.sysroot( + name = "llvm_toolchain", + label = "@ubuntu24_04_sysroot_arm64//sysroot", + targets = ["linux-aarch64"], +) +use_repo(llvm, "llvm_toolchain") +register_toolchains("@llvm_toolchain//:cc-toolchain-x86_64-linux", dev_dependency=True) diff --git a/e2e/smoke/hello_world.cpp b/e2e/smoke/hello_world.cpp new file mode 100644 index 00000000..9735ebf1 --- /dev/null +++ b/e2e/smoke/hello_world.cpp @@ -0,0 +1,5 @@ +#include + +int main() { + std::cout << "Hello World!" << std::endl; +} diff --git a/e2e/smoke/bullseye.lock.json b/e2e/smoke/rules_distroless.lock.json similarity index 88% rename from e2e/smoke/bullseye.lock.json rename to e2e/smoke/rules_distroless.lock.json index dd7e3b9a..5a98634c 100644 --- a/e2e/smoke/bullseye.lock.json +++ b/e2e/smoke/rules_distroless.lock.json @@ -33,6 +33,30 @@ "/cloud-sdk/google-cloud-cli:arm64": "579.0.0-0" } } + }, + "ubuntu24_04_sysroot": { + "sets": { + "amd64": { + "/noble-updates/base-files:amd64": "13ubuntu10.4", + "/noble-updates/libatomic1:amd64": "14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libc6-dev:amd64": "2.39-0ubuntu8.7", + "/noble-updates/libc6:amd64": "2.39-0ubuntu8.7", + "/noble-updates/libgcc-s1:amd64": "14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libstdc++-13-dev:amd64": "13.3.0-6ubuntu2~24.04.1", + "/noble-updates/libstdc++6:amd64": "14.2.0-4ubuntu2~24.04.1", + "/noble-updates/linux-libc-dev:amd64": "6.8.0-106.106" + }, + "arm64": { + "/noble-updates/base-files:arm64": "13ubuntu10.4", + "/noble-updates/libatomic1:arm64": "14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libc6-dev:arm64": "2.39-0ubuntu8.7", + "/noble-updates/libc6:arm64": "2.39-0ubuntu8.7", + "/noble-updates/libgcc-s1:arm64": "14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libstdc++-13-dev:arm64": "13.3.0-6ubuntu2~24.04.1", + "/noble-updates/libstdc++6:arm64": "14.2.0-4ubuntu2~24.04.1", + "/noble-updates/linux-libc-dev:arm64": "6.8.0-106.106" + } + } } }, "facts": { @@ -51,7 +75,13 @@ "bullseye/main/amd64/Contents/https://snapshot-cloudflare.debian.org/archive/debian/20240210T223313Z|https://snapshot.debian.org/archive/debian/20240210T223313Z": "sha256-uHfMyqJT5WxsC2c36i5S7JEEDhxVDwQwYO3X4TfTK40=", "bullseye/main/amd64/Packages/https://snapshot-cloudflare.debian.org/archive/debian/20240210T223313Z|https://snapshot.debian.org/archive/debian/20240210T223313Z": "sha256-o4vEc84jW+VAJFGqhfEA/hUm4EhmRQ1Kau1qsUwQsog=", "bullseye/main/arm64/Contents/https://snapshot-cloudflare.debian.org/archive/debian/20240210T223313Z|https://snapshot.debian.org/archive/debian/20240210T223313Z": "sha256-sqvKgAs+yVxr7muZsdewE7e4FtzrxUwOA8kJX30U6mU=", - "bullseye/main/arm64/Packages/https://snapshot-cloudflare.debian.org/archive/debian/20240210T223313Z|https://snapshot.debian.org/archive/debian/20240210T223313Z": "sha256-3uchXKk+8kzZQ4xFl/pB0VyWp+7lMMUKfDmaSV1ZgUE=" + "bullseye/main/arm64/Packages/https://snapshot-cloudflare.debian.org/archive/debian/20240210T223313Z|https://snapshot.debian.org/archive/debian/20240210T223313Z": "sha256-3uchXKk+8kzZQ4xFl/pB0VyWp+7lMMUKfDmaSV1ZgUE=", + "noble-security/main/amd64/Packages/https://snapshot.ubuntu.com/ubuntu/20260401T000000Z": "sha256-OxZCuK+H23ehn64l48YaHq1U3tGmb6kx6elAcjBhzl4=", + "noble-security/main/arm64/Packages/https://snapshot.ubuntu.com/ubuntu/20260401T000000Z": "sha256-HjlN3sGNO/w22bnPGd4Ev7KEbUl2FTvhDlWxsVqQldA=", + "noble-updates/main/amd64/Packages/https://snapshot.ubuntu.com/ubuntu/20260401T000000Z": "sha256-2AE5TIdmI7YX74FdIKMjg7nV4+CC3JShKanAT9sshh0=", + "noble-updates/main/arm64/Packages/https://snapshot.ubuntu.com/ubuntu/20260401T000000Z": "sha256-iflHMYRcSyIjxiN6xJzg5JEBbTwc8gwdyyleuif5Cn0=", + "noble/main/amd64/Packages/https://snapshot.ubuntu.com/ubuntu/20260401T000000Z": "sha256-KmoZnhAxpcJ5yzRmRtWUmT81scA91KgqqgMjmA3ZJFE=", + "noble/main/arm64/Packages/https://snapshot.ubuntu.com/ubuntu/20260401T000000Z": "sha256-ShkB5hJPsKER9d/8j1wUR09Eni7Ppx8urwspkX7bU/k=" }, "packages": { "/bullseye-security/gpgv:amd64=2.2.27-2+deb11u2": { @@ -2075,7 +2105,7 @@ "/bullseye/base-files:amd64=11.1+deb11u9": { "architecture": "amd64", "depends_on": [ - "/bullseye/mawk:amd64=1.3.4.20200120-2", + "/bullseye/original-awk:amd64=2018-08-27-1", "/bullseye/libc6:amd64=2.31-13+deb11u8", "/bullseye/libcrypt1:amd64=1:4.4.18-4", "/bullseye/libgcc-s1:amd64=10.2.1-6", @@ -2092,7 +2122,7 @@ "/bullseye/base-files:arm64=11.1+deb11u9": { "architecture": "arm64", "depends_on": [ - "/bullseye/mawk:arm64=1.3.4.20200120-2", + "/bullseye/original-awk:arm64=2018-08-27-1", "/bullseye/libc6:arm64=2.31-13+deb11u8", "/bullseye/libcrypt1:arm64=1:4.4.18-4", "/bullseye/libgcc-s1:arm64=10.2.1-6", @@ -2115,7 +2145,7 @@ "/bullseye/libgcc-s1:amd64=10.2.1-6", "/bullseye/gcc-10-base:amd64=10.2.1-6", "/bullseye/base-files:amd64=11.1+deb11u9", - "/bullseye/mawk:amd64=1.3.4.20200120-2", + "/bullseye/original-awk:amd64=2018-08-27-1", "/bullseye/libtinfo6:amd64=6.2+20201114-2+deb11u2" ], "filename": "pool/main/b/bash/bash_5.1-2+deb11u1_amd64.deb", @@ -2135,7 +2165,7 @@ "/bullseye/libgcc-s1:arm64=10.2.1-6", "/bullseye/gcc-10-base:arm64=10.2.1-6", "/bullseye/base-files:arm64=11.1+deb11u9", - "/bullseye/mawk:arm64=1.3.4.20200120-2", + "/bullseye/original-awk:arm64=2018-08-27-1", "/bullseye/libtinfo6:arm64=6.2+20201114-2+deb11u2" ], "filename": "pool/main/b/bash/bash_5.1-2+deb11u1_arm64.deb", @@ -5556,38 +5586,6 @@ "suite": "bullseye", "version": "11.1.0" }, - "/bullseye/mawk:amd64=1.3.4.20200120-2": { - "architecture": "amd64", - "depends_on": [ - "/bullseye/libc6:amd64=2.31-13+deb11u8", - "/bullseye/libcrypt1:amd64=1:4.4.18-4", - "/bullseye/libgcc-s1:amd64=10.2.1-6", - "/bullseye/gcc-10-base:amd64=10.2.1-6" - ], - "filename": "pool/main/m/mawk/mawk_1.3.4.20200120-2_amd64.deb", - "name": "mawk", - "section": "interpreters", - "sha256": "0bc92b1b1851fbdf3343c527fefca7296a7b82ea36b8597924991140b541fc34", - "size": 112156, - "suite": "bullseye", - "version": "1.3.4.20200120-2" - }, - "/bullseye/mawk:arm64=1.3.4.20200120-2": { - "architecture": "arm64", - "depends_on": [ - "/bullseye/libc6:arm64=2.31-13+deb11u8", - "/bullseye/libcrypt1:arm64=1:4.4.18-4", - "/bullseye/libgcc-s1:arm64=10.2.1-6", - "/bullseye/gcc-10-base:arm64=10.2.1-6" - ], - "filename": "pool/main/m/mawk/mawk_1.3.4.20200120-2_arm64.deb", - "name": "mawk", - "section": "interpreters", - "sha256": "df21357f10fedf3ab162f06834498c9d2b284e5e6eb9211f1b5b71f8a2733278", - "size": 106196, - "suite": "bullseye", - "version": "1.3.4.20200120-2" - }, "/bullseye/media-types:arm64=4.0.0": { "architecture": "all", "depends_on": [], @@ -5697,6 +5695,38 @@ "suite": "bullseye", "version": "1.1.1w-0+deb11u1" }, + "/bullseye/original-awk:amd64=2018-08-27-1": { + "architecture": "amd64", + "depends_on": [ + "/bullseye/libc6:amd64=2.31-13+deb11u8", + "/bullseye/libcrypt1:amd64=1:4.4.18-4", + "/bullseye/libgcc-s1:amd64=10.2.1-6", + "/bullseye/gcc-10-base:amd64=10.2.1-6" + ], + "filename": "pool/main/o/original-awk/original-awk_2018-08-27-1_amd64.deb", + "name": "original-awk", + "section": "interpreters", + "sha256": "b74238e82785020c28377368cf11a706c1e9487977e76427e51acfd362448fc3", + "size": 77120, + "suite": "bullseye", + "version": "2018-08-27-1" + }, + "/bullseye/original-awk:arm64=2018-08-27-1": { + "architecture": "arm64", + "depends_on": [ + "/bullseye/libc6:arm64=2.31-13+deb11u8", + "/bullseye/libcrypt1:arm64=1:4.4.18-4", + "/bullseye/libgcc-s1:arm64=10.2.1-6", + "/bullseye/gcc-10-base:arm64=10.2.1-6" + ], + "filename": "pool/main/o/original-awk/original-awk_2018-08-27-1_arm64.deb", + "name": "original-awk", + "section": "interpreters", + "sha256": "b4f08e7f10c93b578043f78821035a79a90e47fccebf359aac0671b4b7b73e83", + "size": 74368, + "suite": "bullseye", + "version": "2018-08-27-1" + }, "/bullseye/passwd:amd64=1:4.8.1-1": { "architecture": "amd64", "depends_on": [ @@ -6375,6 +6405,757 @@ "size": 61296360, "suite": "cloud-sdk", "version": "579.0.0-0" + }, + "/noble-updates/base-files:amd64=13ubuntu10.4": { + "architecture": "amd64", + "depends_on": [ + "/noble/libcrypt1:amd64=1:4.4.36-4build1", + "/noble-updates/libc6:amd64=2.39-0ubuntu8.7", + "/noble-updates/libgcc-s1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-14-base:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble/mawk:amd64=1.3.4.20240123-1build1" + ], + "filename": "pool/main/b/base-files/base-files_13ubuntu10.4_amd64.deb", + "name": "base-files", + "section": "admin", + "sha256": "94daf9ede91f6263d676611623d4c9edab695c728a584ab2fb1d11cabb8479e8", + "size": 73276, + "suite": "noble-updates", + "version": "13ubuntu10.4" + }, + "/noble-updates/base-files:arm64=13ubuntu10.4": { + "architecture": "arm64", + "depends_on": [ + "/noble/libcrypt1:arm64=1:4.4.36-4build1", + "/noble-updates/libc6:arm64=2.39-0ubuntu8.7", + "/noble-updates/libgcc-s1:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-14-base:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble/mawk:arm64=1.3.4.20240123-1build1" + ], + "filename": "pool/main/b/base-files/base-files_13ubuntu10.4_arm64.deb", + "name": "base-files", + "section": "admin", + "sha256": "1b22f149ae67c1995615be284899e7b6bb1eed32884944905ab8414f44bbcf0a", + "size": 73410, + "suite": "noble-updates", + "version": "13ubuntu10.4" + }, + "/noble-updates/gcc-13-base:amd64=13.3.0-6ubuntu2~24.04.1": { + "architecture": "amd64", + "depends_on": [], + "filename": "pool/main/g/gcc-13/gcc-13-base_13.3.0-6ubuntu2~24.04.1_amd64.deb", + "name": "gcc-13-base", + "section": "libs", + "sha256": "e859aca26585bb91113a451f1e66bc0e5283cb08797d679aacc1d936ae6dff8e", + "size": 51616, + "suite": "noble-updates", + "version": "13.3.0-6ubuntu2~24.04.1" + }, + "/noble-updates/gcc-13-base:arm64=13.3.0-6ubuntu2~24.04.1": { + "architecture": "arm64", + "depends_on": [], + "filename": "pool/main/g/gcc-13/gcc-13-base_13.3.0-6ubuntu2~24.04.1_arm64.deb", + "name": "gcc-13-base", + "section": "libs", + "sha256": "1c1ca489da0d48237036318189a9b6525abe7703b75495f257f68bccae8c45a7", + "size": 51632, + "suite": "noble-updates", + "version": "13.3.0-6ubuntu2~24.04.1" + }, + "/noble-updates/gcc-14-base:amd64=14.2.0-4ubuntu2~24.04.1": { + "architecture": "amd64", + "depends_on": [], + "filename": "pool/main/g/gcc-14/gcc-14-base_14.2.0-4ubuntu2~24.04.1_amd64.deb", + "name": "gcc-14-base", + "section": "libs", + "sha256": "b95c172411a7fdae70307cf33a9f5320ba5e056b556454543dd5b679d5ce1c4f", + "size": 51014, + "suite": "noble-updates", + "version": "14.2.0-4ubuntu2~24.04.1" + }, + "/noble-updates/gcc-14-base:arm64=14.2.0-4ubuntu2~24.04.1": { + "architecture": "arm64", + "depends_on": [], + "filename": "pool/main/g/gcc-14/gcc-14-base_14.2.0-4ubuntu2~24.04.1_arm64.deb", + "name": "gcc-14-base", + "section": "libs", + "sha256": "bddbe21061fdc73a23e7de79ece91693bf61aa22d634d1c69c5048385c114968", + "size": 50984, + "suite": "noble-updates", + "version": "14.2.0-4ubuntu2~24.04.1" + }, + "/noble-updates/libasan8:amd64=14.2.0-4ubuntu2~24.04.1": { + "architecture": "amd64", + "depends_on": [ + "/noble-updates/libgcc-s1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libc6:amd64=2.39-0ubuntu8.7", + "/noble-updates/gcc-14-base:amd64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/g/gcc-14/libasan8_14.2.0-4ubuntu2~24.04.1_amd64.deb", + "name": "libasan8", + "section": "libs", + "sha256": "8321aac6230fa1da320e76eb6288b7436164624aec449ed3933ea6c4cc86daac", + "size": 3026656, + "suite": "noble-updates", + "version": "14.2.0-4ubuntu2~24.04.1" + }, + "/noble-updates/libasan8:arm64=14.2.0-4ubuntu2~24.04.1": { + "architecture": "arm64", + "depends_on": [ + "/noble-updates/libgcc-s1:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libc6:arm64=2.39-0ubuntu8.7", + "/noble-updates/gcc-14-base:arm64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/g/gcc-14/libasan8_14.2.0-4ubuntu2~24.04.1_arm64.deb", + "name": "libasan8", + "section": "libs", + "sha256": "0b7957bc5bbc5d30eabe8b71bab06e624ac530be7b1b1315d2bd54629cf2559f", + "size": 2927874, + "suite": "noble-updates", + "version": "14.2.0-4ubuntu2~24.04.1" + }, + "/noble-updates/libatomic1:amd64=14.2.0-4ubuntu2~24.04.1": { + "architecture": "amd64", + "depends_on": [ + "/noble-updates/libc6:amd64=2.39-0ubuntu8.7", + "/noble-updates/libgcc-s1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-14-base:amd64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/g/gcc-14/libatomic1_14.2.0-4ubuntu2~24.04.1_amd64.deb", + "name": "libatomic1", + "section": "libs", + "sha256": "fe49cbbc7be753528380c724a8eef5f1e31dffa9221f692c5069048d81c7449d", + "size": 10466, + "suite": "noble-updates", + "version": "14.2.0-4ubuntu2~24.04.1" + }, + "/noble-updates/libatomic1:arm64=14.2.0-4ubuntu2~24.04.1": { + "architecture": "arm64", + "depends_on": [ + "/noble-updates/libc6:arm64=2.39-0ubuntu8.7", + "/noble-updates/libgcc-s1:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-14-base:arm64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/g/gcc-14/libatomic1_14.2.0-4ubuntu2~24.04.1_arm64.deb", + "name": "libatomic1", + "section": "libs", + "sha256": "fdeab74e7ad8572cf69c7024e8040c7ac851f6e667d35f0d429e7a0352840f73", + "size": 11604, + "suite": "noble-updates", + "version": "14.2.0-4ubuntu2~24.04.1" + }, + "/noble-updates/libc-dev-bin:amd64=2.39-0ubuntu8.7": { + "architecture": "amd64", + "depends_on": [ + "/noble-updates/libc6:amd64=2.39-0ubuntu8.7", + "/noble-updates/libgcc-s1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-14-base:amd64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/g/glibc/libc-dev-bin_2.39-0ubuntu8.7_amd64.deb", + "name": "libc-dev-bin", + "section": "libdevel", + "sha256": "83291a1d9b26262ac8f44a3bb188ce2cb796a0543134aae00e19db066c84dfdd", + "size": 20418, + "suite": "noble-updates", + "version": "2.39-0ubuntu8.7" + }, + "/noble-updates/libc-dev-bin:arm64=2.39-0ubuntu8.7": { + "architecture": "arm64", + "depends_on": [ + "/noble-updates/libc6:arm64=2.39-0ubuntu8.7", + "/noble-updates/libgcc-s1:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-14-base:arm64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/g/glibc/libc-dev-bin_2.39-0ubuntu8.7_arm64.deb", + "name": "libc-dev-bin", + "section": "libdevel", + "sha256": "d76ef96feaf47f698661236af9f45d2eabd9805398f49b6c79f34145d636c337", + "size": 19680, + "suite": "noble-updates", + "version": "2.39-0ubuntu8.7" + }, + "/noble-updates/libc6-dev:amd64=2.39-0ubuntu8.7": { + "architecture": "amd64", + "depends_on": [ + "/noble/rpcsvc-proto:amd64=1.4.2-0ubuntu7", + "/noble-updates/libc6:amd64=2.39-0ubuntu8.7", + "/noble-updates/libgcc-s1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-14-base:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble/libcrypt-dev:amd64=1:4.4.36-4build1", + "/noble/libcrypt1:amd64=1:4.4.36-4build1", + "/noble-updates/linux-libc-dev:amd64=6.8.0-106.106", + "/noble-updates/libc-dev-bin:amd64=2.39-0ubuntu8.7" + ], + "filename": "pool/main/g/glibc/libc6-dev_2.39-0ubuntu8.7_amd64.deb", + "name": "libc6-dev", + "section": "libdevel", + "sha256": "bbf5a155039042634961a61276650631ee47b9e721f91f8dbb731b0bbe046df3", + "size": 2124026, + "suite": "noble-updates", + "version": "2.39-0ubuntu8.7" + }, + "/noble-updates/libc6-dev:arm64=2.39-0ubuntu8.7": { + "architecture": "arm64", + "depends_on": [ + "/noble/rpcsvc-proto:arm64=1.4.2-0ubuntu7", + "/noble-updates/libc6:arm64=2.39-0ubuntu8.7", + "/noble-updates/libgcc-s1:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-14-base:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble/libcrypt-dev:arm64=1:4.4.36-4build1", + "/noble/libcrypt1:arm64=1:4.4.36-4build1", + "/noble-updates/linux-libc-dev:arm64=6.8.0-106.106", + "/noble-updates/libc-dev-bin:arm64=2.39-0ubuntu8.7" + ], + "filename": "pool/main/g/glibc/libc6-dev_2.39-0ubuntu8.7_arm64.deb", + "name": "libc6-dev", + "section": "libdevel", + "sha256": "d00158c84302fa21231a4cca4131de60134c2359ea8e5641b12e476bd5585aff", + "size": 1596158, + "suite": "noble-updates", + "version": "2.39-0ubuntu8.7" + }, + "/noble-updates/libc6:amd64=2.39-0ubuntu8.7": { + "architecture": "amd64", + "depends_on": [ + "/noble-updates/libgcc-s1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-14-base:amd64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/g/glibc/libc6_2.39-0ubuntu8.7_amd64.deb", + "name": "libc6", + "section": "libs", + "sha256": "955644e8bc2930a9bf8eea5e4c2237c8a118c1e2ac2845b993b6f7f35eefd293", + "size": 3262920, + "suite": "noble-updates", + "version": "2.39-0ubuntu8.7" + }, + "/noble-updates/libc6:arm64=2.39-0ubuntu8.7": { + "architecture": "arm64", + "depends_on": [ + "/noble-updates/libgcc-s1:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-14-base:arm64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/g/glibc/libc6_2.39-0ubuntu8.7_arm64.deb", + "name": "libc6", + "section": "libs", + "sha256": "7d25b6ffc4df6deefd1a48efff5792d6a6bd89ac064a2a8b88e796d3d533e095", + "size": 2776586, + "suite": "noble-updates", + "version": "2.39-0ubuntu8.7" + }, + "/noble-updates/libgcc-13-dev:amd64=13.3.0-6ubuntu2~24.04.1": { + "architecture": "amd64", + "depends_on": [ + "/noble-updates/libquadmath0:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libc6:amd64=2.39-0ubuntu8.7", + "/noble-updates/libgcc-s1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-14-base:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libhwasan0:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libubsan1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libstdc++6:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libtsan2:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/liblsan0:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libasan8:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libatomic1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libitm1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libgomp1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-13-base:amd64=13.3.0-6ubuntu2~24.04.1" + ], + "filename": "pool/main/g/gcc-13/libgcc-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb", + "name": "libgcc-13-dev", + "section": "libdevel", + "sha256": "cd689db2691edaa10f37329307292796bb599e722e0505c79e14caaa1fe9a93a", + "size": 2680642, + "suite": "noble-updates", + "version": "13.3.0-6ubuntu2~24.04.1" + }, + "/noble-updates/libgcc-13-dev:arm64=13.3.0-6ubuntu2~24.04.1": { + "architecture": "arm64", + "depends_on": [ + "/noble-updates/libhwasan0:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libgcc-s1:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libc6:arm64=2.39-0ubuntu8.7", + "/noble-updates/gcc-14-base:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libubsan1:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libstdc++6:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libtsan2:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/liblsan0:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libasan8:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libatomic1:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libitm1:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libgomp1:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-13-base:arm64=13.3.0-6ubuntu2~24.04.1" + ], + "filename": "pool/main/g/gcc-13/libgcc-13-dev_13.3.0-6ubuntu2~24.04.1_arm64.deb", + "name": "libgcc-13-dev", + "section": "libdevel", + "sha256": "609a9410d9a1f25a1cb7847de92ee9f438336a0a3a82d282c3686f52ddd61526", + "size": 2473368, + "suite": "noble-updates", + "version": "13.3.0-6ubuntu2~24.04.1" + }, + "/noble-updates/libgcc-s1:amd64=14.2.0-4ubuntu2~24.04.1": { + "architecture": "amd64", + "depends_on": [ + "/noble-updates/libc6:amd64=2.39-0ubuntu8.7", + "/noble-updates/gcc-14-base:amd64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/g/gcc-14/libgcc-s1_14.2.0-4ubuntu2~24.04.1_amd64.deb", + "name": "libgcc-s1", + "section": "libs", + "sha256": "aa7fadbe33b78bcf99885318040601c550c208929565b179891d9a3cc2aa68cd", + "size": 78392, + "suite": "noble-updates", + "version": "14.2.0-4ubuntu2~24.04.1" + }, + "/noble-updates/libgcc-s1:arm64=14.2.0-4ubuntu2~24.04.1": { + "architecture": "arm64", + "depends_on": [ + "/noble-updates/libc6:arm64=2.39-0ubuntu8.7", + "/noble-updates/gcc-14-base:arm64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/g/gcc-14/libgcc-s1_14.2.0-4ubuntu2~24.04.1_arm64.deb", + "name": "libgcc-s1", + "section": "libs", + "sha256": "5b191f79ad985a9a653dbba45214619f729f9178a9bdf92f7c68db06c50d070b", + "size": 61884, + "suite": "noble-updates", + "version": "14.2.0-4ubuntu2~24.04.1" + }, + "/noble-updates/libgomp1:amd64=14.2.0-4ubuntu2~24.04.1": { + "architecture": "amd64", + "depends_on": [ + "/noble-updates/libc6:amd64=2.39-0ubuntu8.7", + "/noble-updates/libgcc-s1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-14-base:amd64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/g/gcc-14/libgomp1_14.2.0-4ubuntu2~24.04.1_amd64.deb", + "name": "libgomp1", + "section": "libs", + "sha256": "e8a95ec58125b4933597f30ff56c2ae10edf90f287262e366d4b6edea3019144", + "size": 148062, + "suite": "noble-updates", + "version": "14.2.0-4ubuntu2~24.04.1" + }, + "/noble-updates/libgomp1:arm64=14.2.0-4ubuntu2~24.04.1": { + "architecture": "arm64", + "depends_on": [ + "/noble-updates/libc6:arm64=2.39-0ubuntu8.7", + "/noble-updates/libgcc-s1:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-14-base:arm64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/g/gcc-14/libgomp1_14.2.0-4ubuntu2~24.04.1_arm64.deb", + "name": "libgomp1", + "section": "libs", + "sha256": "cd49d2e8834d41a6618f097b678980defeebc47271bc7c5aa8ea2c2f1a53b7a6", + "size": 144962, + "suite": "noble-updates", + "version": "14.2.0-4ubuntu2~24.04.1" + }, + "/noble-updates/libhwasan0:amd64=14.2.0-4ubuntu2~24.04.1": { + "architecture": "amd64", + "depends_on": [ + "/noble-updates/libgcc-s1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libc6:amd64=2.39-0ubuntu8.7", + "/noble-updates/gcc-14-base:amd64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/g/gcc-14/libhwasan0_14.2.0-4ubuntu2~24.04.1_amd64.deb", + "name": "libhwasan0", + "section": "libs", + "sha256": "2195318cfe68fe16b601913ef7b33c9a900372f57861643fdc9ae6fef84534cd", + "size": 1640706, + "suite": "noble-updates", + "version": "14.2.0-4ubuntu2~24.04.1" + }, + "/noble-updates/libhwasan0:arm64=14.2.0-4ubuntu2~24.04.1": { + "architecture": "arm64", + "depends_on": [ + "/noble-updates/libgcc-s1:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libc6:arm64=2.39-0ubuntu8.7", + "/noble-updates/gcc-14-base:arm64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/g/gcc-14/libhwasan0_14.2.0-4ubuntu2~24.04.1_arm64.deb", + "name": "libhwasan0", + "section": "libs", + "sha256": "44851293eede488ad89fd12db1bd8bfcb2b732f68ad4c13b83d6e0ce5d7b4bfa", + "size": 1604938, + "suite": "noble-updates", + "version": "14.2.0-4ubuntu2~24.04.1" + }, + "/noble-updates/libitm1:amd64=14.2.0-4ubuntu2~24.04.1": { + "architecture": "amd64", + "depends_on": [ + "/noble-updates/libc6:amd64=2.39-0ubuntu8.7", + "/noble-updates/libgcc-s1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-14-base:amd64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/g/gcc-14/libitm1_14.2.0-4ubuntu2~24.04.1_amd64.deb", + "name": "libitm1", + "section": "libs", + "sha256": "1fca498129dd3510294809d77ee754f72a9de281111200e9b7b9a5adf37faa9f", + "size": 29702, + "suite": "noble-updates", + "version": "14.2.0-4ubuntu2~24.04.1" + }, + "/noble-updates/libitm1:arm64=14.2.0-4ubuntu2~24.04.1": { + "architecture": "arm64", + "depends_on": [ + "/noble-updates/libc6:arm64=2.39-0ubuntu8.7", + "/noble-updates/libgcc-s1:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-14-base:arm64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/g/gcc-14/libitm1_14.2.0-4ubuntu2~24.04.1_arm64.deb", + "name": "libitm1", + "section": "libs", + "sha256": "7f7d7c5a26888e5e34eb62a193762eb6a8d5805c5d6f22248f638193d1804993", + "size": 28154, + "suite": "noble-updates", + "version": "14.2.0-4ubuntu2~24.04.1" + }, + "/noble-updates/liblsan0:amd64=14.2.0-4ubuntu2~24.04.1": { + "architecture": "amd64", + "depends_on": [ + "/noble-updates/libgcc-s1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libc6:amd64=2.39-0ubuntu8.7", + "/noble-updates/gcc-14-base:amd64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/g/gcc-14/liblsan0_14.2.0-4ubuntu2~24.04.1_amd64.deb", + "name": "liblsan0", + "section": "libs", + "sha256": "dc0c2a1a053e833ba4d71e1ec2ba4244fe301761ad4a91d6725f927a52d86a14", + "size": 1321652, + "suite": "noble-updates", + "version": "14.2.0-4ubuntu2~24.04.1" + }, + "/noble-updates/liblsan0:arm64=14.2.0-4ubuntu2~24.04.1": { + "architecture": "arm64", + "depends_on": [ + "/noble-updates/libgcc-s1:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libc6:arm64=2.39-0ubuntu8.7", + "/noble-updates/gcc-14-base:arm64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/g/gcc-14/liblsan0_14.2.0-4ubuntu2~24.04.1_arm64.deb", + "name": "liblsan0", + "section": "libs", + "sha256": "21bb80325192b0cce6ccd041a8d823609c5e656bdda43368db6cdfe501593188", + "size": 1289238, + "suite": "noble-updates", + "version": "14.2.0-4ubuntu2~24.04.1" + }, + "/noble-updates/libquadmath0:amd64=14.2.0-4ubuntu2~24.04.1": { + "architecture": "amd64", + "depends_on": [ + "/noble-updates/libc6:amd64=2.39-0ubuntu8.7", + "/noble-updates/libgcc-s1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-14-base:amd64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/g/gcc-14/libquadmath0_14.2.0-4ubuntu2~24.04.1_amd64.deb", + "name": "libquadmath0", + "section": "libs", + "sha256": "dc8f0ca542e09d662f29370c8393c016440dd4bc5c996c5fcc19f632b63ce3b0", + "size": 153316, + "suite": "noble-updates", + "version": "14.2.0-4ubuntu2~24.04.1" + }, + "/noble-updates/libstdc++-13-dev:amd64=13.3.0-6ubuntu2~24.04.1": { + "architecture": "amd64", + "depends_on": [ + "/noble-updates/libc6-dev:amd64=2.39-0ubuntu8.7", + "/noble/rpcsvc-proto:amd64=1.4.2-0ubuntu7", + "/noble-updates/libc6:amd64=2.39-0ubuntu8.7", + "/noble-updates/libgcc-s1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-14-base:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble/libcrypt-dev:amd64=1:4.4.36-4build1", + "/noble/libcrypt1:amd64=1:4.4.36-4build1", + "/noble-updates/linux-libc-dev:amd64=6.8.0-106.106", + "/noble-updates/libc-dev-bin:amd64=2.39-0ubuntu8.7", + "/noble-updates/libstdc++6:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libgcc-13-dev:amd64=13.3.0-6ubuntu2~24.04.1", + "/noble-updates/libquadmath0:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libhwasan0:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libubsan1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libtsan2:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/liblsan0:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libasan8:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libatomic1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libitm1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libgomp1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-13-base:amd64=13.3.0-6ubuntu2~24.04.1" + ], + "filename": "pool/main/g/gcc-13/libstdc++-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb", + "name": "libstdc++-13-dev", + "section": "libdevel", + "sha256": "ee5633e863e19c3381ed97842ce35ed32ede96a3d1ae4e94c051d3036fe21347", + "size": 2419834, + "suite": "noble-updates", + "version": "13.3.0-6ubuntu2~24.04.1" + }, + "/noble-updates/libstdc++-13-dev:arm64=13.3.0-6ubuntu2~24.04.1": { + "architecture": "arm64", + "depends_on": [ + "/noble-updates/libc6-dev:arm64=2.39-0ubuntu8.7", + "/noble/rpcsvc-proto:arm64=1.4.2-0ubuntu7", + "/noble-updates/libc6:arm64=2.39-0ubuntu8.7", + "/noble-updates/libgcc-s1:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-14-base:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble/libcrypt-dev:arm64=1:4.4.36-4build1", + "/noble/libcrypt1:arm64=1:4.4.36-4build1", + "/noble-updates/linux-libc-dev:arm64=6.8.0-106.106", + "/noble-updates/libc-dev-bin:arm64=2.39-0ubuntu8.7", + "/noble-updates/libstdc++6:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libgcc-13-dev:arm64=13.3.0-6ubuntu2~24.04.1", + "/noble-updates/libhwasan0:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libubsan1:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libtsan2:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/liblsan0:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libasan8:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libatomic1:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libitm1:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libgomp1:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-13-base:arm64=13.3.0-6ubuntu2~24.04.1" + ], + "filename": "pool/main/g/gcc-13/libstdc++-13-dev_13.3.0-6ubuntu2~24.04.1_arm64.deb", + "name": "libstdc++-13-dev", + "section": "libdevel", + "sha256": "e4911c9281d73b318ca47cb7976011a7dc13e299a91a06bc6d3e2d174cc2ce51", + "size": 2397276, + "suite": "noble-updates", + "version": "13.3.0-6ubuntu2~24.04.1" + }, + "/noble-updates/libstdc++6:amd64=14.2.0-4ubuntu2~24.04.1": { + "architecture": "amd64", + "depends_on": [ + "/noble-updates/libgcc-s1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libc6:amd64=2.39-0ubuntu8.7", + "/noble-updates/gcc-14-base:amd64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/g/gcc-14/libstdc++6_14.2.0-4ubuntu2~24.04.1_amd64.deb", + "name": "libstdc++6", + "section": "libs", + "sha256": "a51f8de7829211db961a31f02158058ad1a95f92ac6d0a5dff6350e2821c54c0", + "size": 792064, + "suite": "noble-updates", + "version": "14.2.0-4ubuntu2~24.04.1" + }, + "/noble-updates/libstdc++6:arm64=14.2.0-4ubuntu2~24.04.1": { + "architecture": "arm64", + "depends_on": [ + "/noble-updates/libgcc-s1:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libc6:arm64=2.39-0ubuntu8.7", + "/noble-updates/gcc-14-base:arm64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/g/gcc-14/libstdc++6_14.2.0-4ubuntu2~24.04.1_arm64.deb", + "name": "libstdc++6", + "section": "libs", + "sha256": "f84a05ac45a6884109b6527e911081a38263b89e042fc94a338cf975f61a330c", + "size": 750976, + "suite": "noble-updates", + "version": "14.2.0-4ubuntu2~24.04.1" + }, + "/noble-updates/libtsan2:amd64=14.2.0-4ubuntu2~24.04.1": { + "architecture": "amd64", + "depends_on": [ + "/noble-updates/libgcc-s1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libc6:amd64=2.39-0ubuntu8.7", + "/noble-updates/gcc-14-base:amd64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/g/gcc-14/libtsan2_14.2.0-4ubuntu2~24.04.1_amd64.deb", + "name": "libtsan2", + "section": "libs", + "sha256": "8cbcc9b3ae5ef23b449383d47a9035b27596e307d7dce7df9b83d47a7acd1d91", + "size": 2771910, + "suite": "noble-updates", + "version": "14.2.0-4ubuntu2~24.04.1" + }, + "/noble-updates/libtsan2:arm64=14.2.0-4ubuntu2~24.04.1": { + "architecture": "arm64", + "depends_on": [ + "/noble-updates/libgcc-s1:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libc6:arm64=2.39-0ubuntu8.7", + "/noble-updates/gcc-14-base:arm64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/g/gcc-14/libtsan2_14.2.0-4ubuntu2~24.04.1_arm64.deb", + "name": "libtsan2", + "section": "libs", + "sha256": "00beb501f4979c7fd3a978b52a489ea7dbfc1203e5c56936e4c0ea5c2032fb3d", + "size": 2696830, + "suite": "noble-updates", + "version": "14.2.0-4ubuntu2~24.04.1" + }, + "/noble-updates/libubsan1:amd64=14.2.0-4ubuntu2~24.04.1": { + "architecture": "amd64", + "depends_on": [ + "/noble-updates/libstdc++6:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libgcc-s1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libc6:amd64=2.39-0ubuntu8.7", + "/noble-updates/gcc-14-base:amd64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/g/gcc-14/libubsan1_14.2.0-4ubuntu2~24.04.1_amd64.deb", + "name": "libubsan1", + "section": "libs", + "sha256": "a16dea3abe2dcac99bcfae27e7e5672fde64573c3c170dcb0cd55631238f9814", + "size": 1183812, + "suite": "noble-updates", + "version": "14.2.0-4ubuntu2~24.04.1" + }, + "/noble-updates/libubsan1:arm64=14.2.0-4ubuntu2~24.04.1": { + "architecture": "arm64", + "depends_on": [ + "/noble-updates/libstdc++6:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libgcc-s1:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/libc6:arm64=2.39-0ubuntu8.7", + "/noble-updates/gcc-14-base:arm64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/g/gcc-14/libubsan1_14.2.0-4ubuntu2~24.04.1_arm64.deb", + "name": "libubsan1", + "section": "libs", + "sha256": "a5b4383f70f41cd949315c89e99e6416a0ee48037f7c5ea6b33f88f3c733757a", + "size": 1157016, + "suite": "noble-updates", + "version": "14.2.0-4ubuntu2~24.04.1" + }, + "/noble-updates/linux-libc-dev:amd64=6.8.0-106.106": { + "architecture": "amd64", + "depends_on": [], + "filename": "pool/main/l/linux/linux-libc-dev_6.8.0-106.106_amd64.deb", + "name": "linux-libc-dev", + "section": "devel", + "sha256": "dbef5eaae5d6497ccf30c6a082bbba5a294ab3f8e210ae6ff936caf942b8ed2d", + "size": 2094960, + "suite": "noble-updates", + "version": "6.8.0-106.106" + }, + "/noble-updates/linux-libc-dev:arm64=6.8.0-106.106": { + "architecture": "arm64", + "depends_on": [], + "filename": "pool/main/l/linux/linux-libc-dev_6.8.0-106.106_arm64.deb", + "name": "linux-libc-dev", + "section": "devel", + "sha256": "55b43c3791fec36a0a217fb2fa1572d599370d38674cfeae8cbc9d102b87ebfd", + "size": 2068572, + "suite": "noble-updates", + "version": "6.8.0-106.106" + }, + "/noble/libcrypt-dev:amd64=1:4.4.36-4build1": { + "architecture": "amd64", + "depends_on": [ + "/noble/libcrypt1:amd64=1:4.4.36-4build1", + "/noble-updates/libc6:amd64=2.39-0ubuntu8.7", + "/noble-updates/libgcc-s1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-14-base:amd64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/libx/libxcrypt/libcrypt-dev_4.4.36-4build1_amd64.deb", + "name": "libcrypt-dev", + "section": "libdevel", + "sha256": "2edff420ef80b4a3f3751e65c33423ef30e563122a58b759e4854ea8d84ba1b1", + "size": 111780, + "suite": "noble", + "version": "1:4.4.36-4build1" + }, + "/noble/libcrypt-dev:arm64=1:4.4.36-4build1": { + "architecture": "arm64", + "depends_on": [ + "/noble/libcrypt1:arm64=1:4.4.36-4build1", + "/noble-updates/libc6:arm64=2.39-0ubuntu8.7", + "/noble-updates/libgcc-s1:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-14-base:arm64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/libx/libxcrypt/libcrypt-dev_4.4.36-4build1_arm64.deb", + "name": "libcrypt-dev", + "section": "libdevel", + "sha256": "cadcc00021aa1082a8cb5cd1c2686b25b7a4d396f2029eaa1b12159ca46f1766", + "size": 118238, + "suite": "noble", + "version": "1:4.4.36-4build1" + }, + "/noble/libcrypt1:amd64=1:4.4.36-4build1": { + "architecture": "amd64", + "depends_on": [ + "/noble-updates/libc6:amd64=2.39-0ubuntu8.7", + "/noble-updates/libgcc-s1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-14-base:amd64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/libx/libxcrypt/libcrypt1_4.4.36-4build1_amd64.deb", + "name": "libcrypt1", + "section": "libs", + "sha256": "9474785cd6f398512bf8c305c3901dbb111569dccb6f5832002373c0a8ac5832", + "size": 82302, + "suite": "noble", + "version": "1:4.4.36-4build1" + }, + "/noble/libcrypt1:arm64=1:4.4.36-4build1": { + "architecture": "arm64", + "depends_on": [ + "/noble-updates/libc6:arm64=2.39-0ubuntu8.7", + "/noble-updates/libgcc-s1:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-14-base:arm64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/libx/libxcrypt/libcrypt1_4.4.36-4build1_arm64.deb", + "name": "libcrypt1", + "section": "libs", + "sha256": "5cd73ba112507dabd8e43b528ca9f530719a370e014b8e3e797770e6e940cccf", + "size": 85888, + "suite": "noble", + "version": "1:4.4.36-4build1" + }, + "/noble/mawk:amd64=1.3.4.20240123-1build1": { + "architecture": "amd64", + "depends_on": [ + "/noble-updates/libc6:amd64=2.39-0ubuntu8.7", + "/noble-updates/libgcc-s1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-14-base:amd64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/m/mawk/mawk_1.3.4.20240123-1build1_amd64.deb", + "name": "mawk", + "section": "utils", + "sha256": "dc7f7f4dad4b48f6012ea65de3198d8376604afef39f06d65ec6167740e203c9", + "size": 127222, + "suite": "noble", + "version": "1.3.4.20240123-1build1" + }, + "/noble/mawk:arm64=1.3.4.20240123-1build1": { + "architecture": "arm64", + "depends_on": [ + "/noble-updates/libc6:arm64=2.39-0ubuntu8.7", + "/noble-updates/libgcc-s1:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-14-base:arm64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/m/mawk/mawk_1.3.4.20240123-1build1_arm64.deb", + "name": "mawk", + "section": "utils", + "sha256": "a6fa75e49de6327ccdbf664e905cde229df77116a966c310e81c778eba756dca", + "size": 123594, + "suite": "noble", + "version": "1.3.4.20240123-1build1" + }, + "/noble/rpcsvc-proto:amd64=1.4.2-0ubuntu7": { + "architecture": "amd64", + "depends_on": [ + "/noble-updates/libc6:amd64=2.39-0ubuntu8.7", + "/noble-updates/libgcc-s1:amd64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-14-base:amd64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/r/rpcsvc-proto/rpcsvc-proto_1.4.2-0ubuntu7_amd64.deb", + "name": "rpcsvc-proto", + "section": "libs", + "sha256": "7eb710fe148d224c159ddec1ceb0ba53ead52a80a6793dcdae1474acf20d8f71", + "size": 67446, + "suite": "noble", + "version": "1.4.2-0ubuntu7" + }, + "/noble/rpcsvc-proto:arm64=1.4.2-0ubuntu7": { + "architecture": "arm64", + "depends_on": [ + "/noble-updates/libc6:arm64=2.39-0ubuntu8.7", + "/noble-updates/libgcc-s1:arm64=14.2.0-4ubuntu2~24.04.1", + "/noble-updates/gcc-14-base:arm64=14.2.0-4ubuntu2~24.04.1" + ], + "filename": "pool/main/r/rpcsvc-proto/rpcsvc-proto_1.4.2-0ubuntu7_arm64.deb", + "name": "rpcsvc-proto", + "section": "libs", + "sha256": "ae527152fc2bf9c1a645c2620d802b0849db32c8aa48328b4ae94c59cc57bcc9", + "size": 64816, + "suite": "noble", + "version": "1.4.2-0ubuntu7" } }, "sources": { @@ -6439,6 +7220,51 @@ "uris": [ "https://packages.cloud.google.com/apt" ] + }, + "noble": { + "architectures": [ + "amd64", + "arm64" + ], + "components": [ + "main" + ], + "types": [ + "deb" + ], + "uris": [ + "https://snapshot.ubuntu.com/ubuntu/20260401T000000Z" + ] + }, + "noble-security": { + "architectures": [ + "amd64", + "arm64" + ], + "components": [ + "main" + ], + "types": [ + "deb" + ], + "uris": [ + "https://snapshot.ubuntu.com/ubuntu/20260401T000000Z" + ] + }, + "noble-updates": { + "architectures": [ + "amd64", + "arm64" + ], + "components": [ + "main" + ], + "types": [ + "deb" + ], + "uris": [ + "https://snapshot.ubuntu.com/ubuntu/20260401T000000Z" + ] } }, "version": 2 diff --git a/examples/MODULE.bazel b/examples/MODULE.bazel index 1732b2bf..3e8f99ba 100644 --- a/examples/MODULE.bazel +++ b/examples/MODULE.bazel @@ -140,4 +140,83 @@ apt.install( # ], # ) -use_repo(apt, "bullseye") +################################################################ +# Example for LLVM Toolchain with hermetic sysroot and libstdc++ +################################################################ + +# Define the sources for the packages that make up the sysroot +apt.sources_list( + # You may select multiple architectures for different sysroots + architectures = [ + "amd64", + "arm64", + ], + components = ["main"], + suites = [ + "noble", + "noble-security", + "noble-updates", + ], + types = ["deb"], + uris = ["https://snapshot.ubuntu.com/ubuntu/20260401T000000Z"], +) + +# Specify what packages should be installed in your sysroot +apt.install( + dependency_set = "ubuntu24_04_sysroot", + packages = [ + "base-files", # provides /bin, /lib, etc. symlinks required by linker + "libc6", # Core C/POSIX + "libc6-dev", # Core C/POSIX + "linux-libc-dev", # Core C/POSIX + "libstdc++6", # C++ standard library runtime + "libstdc++-13-dev", # C++ standard library headers + "libgcc-s1", # Exception unwinding + "libatomic1", # Non-lock-free atomics support + ], + suites = [ + "noble", + "noble-security", + "noble-updates", + ], +) + +apt.sysroot( + name = "ubuntu24_04_sysroot_amd64", + dependency_set = "ubuntu24_04_sysroot", + architecture = "amd64", +) +apt.sysroot( + name = "ubuntu24_04_sysroot_arm64", + dependency_set = "ubuntu24_04_sysroot", + architecture = "arm64", +) +use_repo(apt, "bullseye", "ubuntu24_04_sysroot_amd64", "ubuntu24_04_sysroot_arm64") + +bazel_dep(name = "rules_cc", version = "0.1.5") +bazel_dep(name = "toolchains_llvm", version = "1.7.0", dev_dependency = True) + +llvm = use_extension( + "@toolchains_llvm//toolchain/extensions:llvm.bzl", + "llvm", + dev_dependency = True, +) +llvm.toolchain( + llvm_version = "19.1.7", + # You can now specify the C++ stdlib that is contained in the sysroot above + stdlib = {"": "stdc++"}, +) + +# Specify the sysroot for the matching target +llvm.sysroot( + name = "llvm_toolchain", + label = "@ubuntu24_04_sysroot_amd64//sysroot", + targets = ["linux-x86_64"], +) +llvm.sysroot( + name = "llvm_toolchain", + label = "@ubuntu24_04_sysroot_arm64//sysroot", + targets = ["linux-aarch64"], +) +use_repo(llvm, "llvm_toolchain") +register_toolchains("@llvm_toolchain//:cc-toolchain-x86_64-linux", dev_dependency=True) diff --git a/examples/sysroot/BUILD.bazel b/examples/sysroot/BUILD.bazel new file mode 100644 index 00000000..f3e6b77d --- /dev/null +++ b/examples/sysroot/BUILD.bazel @@ -0,0 +1,7 @@ +load("@rules_cc//cc:defs.bzl", "cc_test") + +cc_test( + name = "hello_world", + srcs = ["hello_world.cpp"], + visibility = ["//visibility:public"], +) diff --git a/examples/sysroot/README.md b/examples/sysroot/README.md new file mode 100644 index 00000000..8a5f0051 --- /dev/null +++ b/examples/sysroot/README.md @@ -0,0 +1,23 @@ +# Using rules_distroless to generate a sysroot for toolchains_llvm + +It is possible to create sysroots for toolchains_llvm on the fly using rules_distroless. +This allows a low-effort hermetic C++ toolchain setup, without having to keep track of the sysroot +outside of Bazel. + +# Prerequisites + +Sysroots are unpacked directories, so we require dependency checking of directories in Bazel. +This was enabled by default with Bazel 8.5.1 (https://github.com/bazelbuild/bazel/pull/25870). + +If you are using an older version of Bazel, you can enable this by adding the following line in your `.bazelrc`: + +``` +startup --host_jvm_args=-DBAZEL_TRACK_SOURCE_DIRECTORIES=1 +``` + +If you are missing this configuration on an older Bazel version, you will see many warnings about directory inputs. + +# Example Usage + +The sysroot example is configured in the [MODULE.bazel](/examples/MODULE.bazel) file. +Search for sysroot in this file. diff --git a/examples/sysroot/hello_world.cpp b/examples/sysroot/hello_world.cpp new file mode 100644 index 00000000..9735ebf1 --- /dev/null +++ b/examples/sysroot/hello_world.cpp @@ -0,0 +1,5 @@ +#include + +int main() { + std::cout << "Hello World!" << std::endl; +}