From 4796c758964d017f408d5e408260e1bf2f88e42f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emil=20Gardstr=C3=B6m?= Date: Wed, 4 Feb 2026 09:11:55 +0100 Subject: [PATCH 01/17] Updated Docker image to Ubuntu-24.04 and Cargo dependencies Co-authored-by: itpetey <3638076+itpetey@users.noreply.github.com> Co-authored-by: JanDiederich <29060204+JanDiederich@users.noreply.github.com> --- .github/workflows/ci.yml | 17 +- Cargo.lock | 210 ++---------------- Cargo.toml | 36 +-- README.md | 8 +- docker/Dockerfile.aarch64-linux-android | 4 +- docker/Dockerfile.aarch64-unknown-freebsd | 4 +- docker/Dockerfile.aarch64-unknown-linux-gnu | 4 +- ...ockerfile.aarch64-unknown-linux-gnu.centos | 4 +- docker/Dockerfile.aarch64-unknown-linux-musl | 4 +- docker/Dockerfile.arm-linux-androideabi | 2 +- docker/Dockerfile.arm-unknown-linux-gnueabi | 2 +- docker/Dockerfile.arm-unknown-linux-gnueabihf | 2 +- docker/Dockerfile.arm-unknown-linux-musleabi | 2 +- .../Dockerfile.arm-unknown-linux-musleabihf | 2 +- .../Dockerfile.armv5te-unknown-linux-gnueabi | 2 +- .../Dockerfile.armv5te-unknown-linux-musleabi | 2 +- docker/Dockerfile.armv7-linux-androideabi | 2 +- docker/Dockerfile.armv7-unknown-linux-gnueabi | 2 +- .../Dockerfile.armv7-unknown-linux-gnueabihf | 2 +- .../Dockerfile.armv7-unknown-linux-musleabi | 2 +- .../Dockerfile.armv7-unknown-linux-musleabihf | 2 +- docker/Dockerfile.cross | 4 +- docker/Dockerfile.i586-unknown-linux-gnu | 2 +- docker/Dockerfile.i586-unknown-linux-musl | 2 +- docker/Dockerfile.i686-linux-android | 2 +- docker/Dockerfile.i686-pc-windows-gnu | 4 +- docker/Dockerfile.i686-unknown-freebsd | 2 +- docker/Dockerfile.i686-unknown-linux-gnu | 2 +- docker/Dockerfile.i686-unknown-linux-musl | 2 +- .../Dockerfile.loongarch64-unknown-linux-gnu | 2 +- .../Dockerfile.loongarch64-unknown-linux-musl | 2 +- docker/Dockerfile.mips-unknown-linux-gnu | 2 +- docker/Dockerfile.mips-unknown-linux-musl | 2 +- .../Dockerfile.mips64-unknown-linux-gnuabi64 | 2 +- .../Dockerfile.mips64-unknown-linux-muslabi64 | 2 +- ...Dockerfile.mips64el-unknown-linux-gnuabi64 | 2 +- ...ockerfile.mips64el-unknown-linux-muslabi64 | 2 +- docker/Dockerfile.mipsel-unknown-linux-gnu | 2 +- docker/Dockerfile.mipsel-unknown-linux-musl | 2 +- docker/Dockerfile.native | 2 +- docker/Dockerfile.native.centos | 2 +- docker/Dockerfile.powerpc-unknown-linux-gnu | 2 +- docker/Dockerfile.powerpc64-unknown-linux-gnu | 2 +- .../Dockerfile.powerpc64le-unknown-linux-gnu | 2 +- docker/Dockerfile.riscv64gc-unknown-linux-gnu | 2 +- docker/Dockerfile.s390x-unknown-linux-gnu | 2 +- docker/Dockerfile.sparc64-unknown-linux-gnu | 2 +- docker/Dockerfile.sparcv9-sun-solaris | 2 +- docker/Dockerfile.thumbv6m-none-eabi | 2 +- docker/Dockerfile.thumbv7em-none-eabi | 2 +- docker/Dockerfile.thumbv7em-none-eabihf | 2 +- docker/Dockerfile.thumbv7m-none-eabi | 2 +- .../Dockerfile.thumbv7neon-linux-androideabi | 2 +- ...erfile.thumbv7neon-unknown-linux-gnueabihf | 2 +- docker/Dockerfile.thumbv8m.base-none-eabi | 2 +- docker/Dockerfile.thumbv8m.main-none-eabi | 2 +- docker/Dockerfile.thumbv8m.main-none-eabihf | 2 +- docker/Dockerfile.x86_64-linux-android | 2 +- docker/Dockerfile.x86_64-pc-solaris | 2 +- docker/Dockerfile.x86_64-pc-windows-gnu | 4 +- docker/Dockerfile.x86_64-unknown-dragonfly | 2 +- docker/Dockerfile.x86_64-unknown-freebsd | 2 +- docker/Dockerfile.x86_64-unknown-illumos | 2 +- docker/Dockerfile.x86_64-unknown-linux-gnu | 2 +- ...Dockerfile.x86_64-unknown-linux-gnu.centos | 2 +- docker/Dockerfile.x86_64-unknown-linux-musl | 2 +- docker/Dockerfile.x86_64-unknown-netbsd | 2 +- docker/Dockerfile.zig | 2 +- docker/android-ndk.sh | 2 +- docker/common.sh | 2 + docker/cross-toolchains | 2 +- .../arm-unknown-linux-gnueabihf.config | 23 +- docker/linux-image.sh | 28 +-- docker/qemu.sh | 14 +- docker/ubuntu.sources | 20 ++ docker/wine.sh | 8 +- src/bin/commands/images.rs | 8 +- src/bin/commands/run.rs | 4 +- src/bin/cross-util.rs | 4 +- src/bin/cross.rs | 3 +- src/build.rs | 2 + src/cli.rs | 4 +- src/cross_toml.rs | 4 +- src/docker/custom.rs | 21 +- src/docker/engine.rs | 22 +- src/docker/image.rs | 4 +- src/docker/local.rs | 1 + src/docker/remote.rs | 48 ++-- src/docker/shared.rs | 82 ++++--- src/errors.rs | 21 +- src/interpreter.rs | 2 +- src/lib.rs | 6 +- src/rustc.rs | 10 +- src/rustup.rs | 2 +- src/temp.rs | 47 +++- src/tests.rs | 4 +- xtask/Cargo.toml | 24 +- 97 files changed, 396 insertions(+), 441 deletions(-) create mode 100644 docker/ubuntu.sources diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index adce0713b..e5fed03b3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -404,7 +404,22 @@ jobs: github-token: ${{ secrets.GITHUB_TOKEN }} conclusion: - needs: [shellcheck, fmt, clippy, test, generate-matrix, build, publish, check, remote, bisect, docker-in-docker, foreign, podman] + needs: + [ + shellcheck, + fmt, + clippy, + test, + generate-matrix, + build, + publish, + check, + remote, + bisect, + docker-in-docker, + foreign, + podman, + ] if: always() runs-on: ubuntu-latest steps: diff --git a/Cargo.lock b/Cargo.lock index c9ceb66f7..4d26d4a08 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" @@ -71,7 +71,7 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -82,7 +82,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -250,7 +250,7 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cross" -version = "0.2.5" +version = "0.2.6" dependencies = [ "clap", "color-eyre", @@ -277,9 +277,9 @@ dependencies = [ "signal-hook", "tempfile", "thiserror", - "toml 0.9.10+spec-1.1.0", + "toml", "walkdir", - "which 8.0.0", + "which", "winapi", ] @@ -326,7 +326,7 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -335,12 +335,6 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" -[[package]] -name = "either" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" - [[package]] name = "env_home" version = "0.1.0" @@ -360,7 +354,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -451,7 +445,7 @@ version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" dependencies = [ - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -518,7 +512,7 @@ checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" dependencies = [ "hermit-abi", "libc", - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -571,12 +565,6 @@ dependencies = [ "libc", ] -[[package]] -name = "linux-raw-sys" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" - [[package]] name = "linux-raw-sys" version = "0.11.0" @@ -654,9 +642,9 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "owo-colors" -version = "4.2.3" +version = "4.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c6901729fa79e91a0913333229e9ca5dc725089d1c363b2f4b4760709dc4a52" +checksum = "48dd4f4a2c8405440fd0462561f0e5806bd0f77e86f51c761481bdd4018b545e" dependencies = [ "supports-color 2.1.0", "supports-color 3.0.2", @@ -747,19 +735,6 @@ dependencies = [ "semver", ] -[[package]] -name = "rustix" -version = "0.38.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" -dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys 0.4.15", - "windows-sys 0.59.0", -] - [[package]] name = "rustix" version = "1.1.3" @@ -769,8 +744,8 @@ dependencies = [ "bitflags", "errno", "libc", - "linux-raw-sys 0.11.0", - "windows-sys 0.61.2", + "linux-raw-sys", + "windows-sys", ] [[package]] @@ -847,15 +822,6 @@ dependencies = [ "zmij", ] -[[package]] -name = "serde_spanned" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" -dependencies = [ - "serde", -] - [[package]] name = "serde_spanned" version = "1.0.4" @@ -957,8 +923,8 @@ dependencies = [ "fastrand", "getrandom 0.3.4", "once_cell", - "rustix 1.1.3", - "windows-sys 0.61.2", + "rustix", + "windows-sys", ] [[package]] @@ -990,18 +956,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "toml" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" -dependencies = [ - "serde", - "serde_spanned 0.6.9", - "toml_datetime 0.6.11", - "toml_edit", -] - [[package]] name = "toml" version = "0.9.10+spec-1.1.0" @@ -1010,20 +964,11 @@ checksum = "0825052159284a1a8b4d6c0c86cbc801f2da5afd2b225fa548c72f2e74002f48" dependencies = [ "indexmap", "serde_core", - "serde_spanned 1.0.4", - "toml_datetime 0.7.5+spec-1.1.0", + "serde_spanned", + "toml_datetime", "toml_parser", "toml_writer", - "winnow 0.7.14", -] - -[[package]] -name = "toml_datetime" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" -dependencies = [ - "serde", + "winnow", ] [[package]] @@ -1035,26 +980,13 @@ dependencies = [ "serde_core", ] -[[package]] -name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap", - "serde", - "serde_spanned 0.6.9", - "toml_datetime 0.6.11", - "winnow 0.5.40", -] - [[package]] name = "toml_parser" version = "1.0.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" dependencies = [ - "winnow 0.7.14", + "winnow", ] [[package]] @@ -1192,18 +1124,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "which" -version = "4.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" -dependencies = [ - "either", - "home", - "once_cell", - "rustix 0.38.44", -] - [[package]] name = "which" version = "8.0.0" @@ -1211,7 +1131,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3fabb953106c3c8eea8306e4393700d7657561cb43122571b172bbfb7c7ba1d" dependencies = [ "env_home", - "rustix 1.1.3", + "rustix", "winsafe", ] @@ -1243,7 +1163,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -1311,15 +1231,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets", -] - [[package]] name = "windows-sys" version = "0.61.2" @@ -1329,79 +1240,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "winnow" -version = "0.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - [[package]] name = "winnow" version = "0.7.14" @@ -1434,9 +1272,9 @@ dependencies = [ "serde", "serde_json", "shell-words", - "toml 0.7.8", + "toml", "walkdir", - "which 4.4.2", + "which", "wildmatch", ] diff --git a/Cargo.toml b/Cargo.toml index 25f4ca335..ff39b16ec 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,8 +6,8 @@ keywords = ["cross", "compilation", "testing", "tool"] license = "MIT OR Apache-2.0" name = "cross" repository = "https://github.com/cross-rs/cross" -version = "0.2.5" -edition = "2021" +version = "0.2.6" +edition = "2024" include = [ "src/**/*", "docs/*.md", @@ -28,43 +28,43 @@ members = ["xtask"] [dependencies] is-terminal = "0.4.2" -clap = { version = "4.1.4", features = ["derive"] } +clap = { version = "4.5.45", features = ["derive"] } color-eyre = { version = "0.6.5", default-features = false, features = ["track-caller"] } -eyre = "0.6.8" +eyre = "0.6.12" thiserror = "2.0" -home = "0.5.4" +home = "0.5.11" rustc_version = "0.4.0" toml = "0.9" which = "8.0" shell-escape = "0.1.5" -serde = { version = "1.0.152", features = ["derive"] } -serde_json = { version = "1.0.91", features = ["raw_value"] } -serde_ignored = "0.1.7" +serde = { version = "1.0.219", features = ["derive"] } +serde_json = { version = "1.0.143", features = ["raw_value"] } +serde_ignored = "0.1.12" shell-words = "1.1.0" const-sha1 = "0.3" signal-hook = { version = "0.4" } directories = "6.0" walkdir = { version = "2.3.2", optional = true } -tempfile = "3.3.0" -owo-colors = { version = "4.0", features = ["supports-colors"] } -semver = "1.0.16" -is_ci = "1.1.1" +tempfile = "3.21" +owo-colors = { version = "4.2.2", features = ["supports-colors"] } +semver = "1.0.26" +is_ci = "1.2.0" [target.'cfg(not(windows))'.dependencies] -nix = { version = "0.30", default-features = false, features = ["user"] } -libc = "0.2.139" +nix = { version = "0.30.1", default-features = false, features = ["user"] } +libc = "0.2.175" [target.'cfg(windows)'.dependencies] winapi = { version = "0.3.9", features = ["winbase"] } -dunce = "1.0.3" +dunce = "1.0.5" [profile.release] lto = true [dev-dependencies] -regex = "1.7.1" -once_cell = "1.17.0" -ignore = "0.4.20" +regex = "1.11.2" +once_cell = "1.21.3" +ignore = "0.4.23" [package.metadata.release] push = false diff --git a/README.md b/README.md index 707cc2a12..0e9286506 100644 --- a/README.md +++ b/README.md @@ -324,8 +324,12 @@ $ QEMU_STRACE=1 cross run --target aarch64-unknown-linux-gnu This crate is guaranteed to compile on stable Rust 1.92.0 and up. It *might* compile with older versions but that may change in any new patch release. -Some cross-compilation targets require a later Rust version, and using Xargo -requires a nightly Rust toolchain. +Some cross-compilation targets require a later Rust version. + +### Xargo + +"Xargo" is no longer supported since its maintenance was stopped a long time ago, +most of the functionality is available when using `build-std`. ## License diff --git a/docker/Dockerfile.aarch64-linux-android b/docker/Dockerfile.aarch64-linux-android index 1372b35bc..ca8b6c5ab 100644 --- a/docker/Dockerfile.aarch64-linux-android +++ b/docker/Dockerfile.aarch64-linux-android @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / @@ -71,3 +71,5 @@ ENV CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \ CROSS_CMAKE_SYSTEM_PROCESSOR=aarch64 \ CROSS_CMAKE_CRT=android \ CROSS_CMAKE_OBJECT_FLAGS="-DANDROID -ffunction-sections -fdata-sections -fPIC" + +COPY ubuntu.sources /etc/apt/sources.list.d/ diff --git a/docker/Dockerfile.aarch64-unknown-freebsd b/docker/Dockerfile.aarch64-unknown-freebsd index 951b7f165..fdb4c800f 100644 --- a/docker/Dockerfile.aarch64-unknown-freebsd +++ b/docker/Dockerfile.aarch64-unknown-freebsd @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / @@ -39,3 +39,5 @@ ENV CARGO_TARGET_AARCH64_UNKNOWN_FREEBSD_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.sh CROSS_CMAKE_SYSTEM_PROCESSOR=amd64 \ CROSS_CMAKE_CRT=freebsd \ CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC -m64" + +COPY ubuntu.sources /etc/apt/sources.list.d/ diff --git a/docker/Dockerfile.aarch64-unknown-linux-gnu b/docker/Dockerfile.aarch64-unknown-linux-gnu index a8f32936d..eb86a7978 100644 --- a/docker/Dockerfile.aarch64-unknown-linux-gnu +++ b/docker/Dockerfile.aarch64-unknown-linux-gnu @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / @@ -51,3 +51,5 @@ ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \ CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC" RUN sed -e "s#@DEFAULT_QEMU_LD_PREFIX@#$QEMU_LD_PREFIX#g" -i /linux-runner + +COPY ubuntu.sources /etc/apt/sources.list.d/ diff --git a/docker/Dockerfile.aarch64-unknown-linux-gnu.centos b/docker/Dockerfile.aarch64-unknown-linux-gnu.centos index a4f77be5e..1e9e1faf8 100644 --- a/docker/Dockerfile.aarch64-unknown-linux-gnu.centos +++ b/docker/Dockerfile.aarch64-unknown-linux-gnu.centos @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS base +FROM ubuntu:24.04 AS base COPY lib.sh / COPY linux-image.sh / @@ -51,3 +51,5 @@ ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \ CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC" RUN sed -e "s#@DEFAULT_QEMU_LD_PREFIX@#$QEMU_LD_PREFIX#g" -i /linux-runner + +COPY ubuntu.sources /etc/apt/sources.list.d/ diff --git a/docker/Dockerfile.aarch64-unknown-linux-musl b/docker/Dockerfile.aarch64-unknown-linux-musl index 3be79a939..f22c48631 100644 --- a/docker/Dockerfile.aarch64-unknown-linux-musl +++ b/docker/Dockerfile.aarch64-unknown-linux-musl @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / @@ -48,3 +48,5 @@ ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc. CROSS_BUILTINS_PATCHED_MINOR_VERSION=48 RUN sed -e "s#@DEFAULT_QEMU_LD_PREFIX@#$QEMU_LD_PREFIX#g" -i /qemu-runner + +COPY ubuntu.sources /etc/apt/sources.list.d/ diff --git a/docker/Dockerfile.arm-linux-androideabi b/docker/Dockerfile.arm-linux-androideabi index d60d192e4..1a9e37a00 100644 --- a/docker/Dockerfile.arm-linux-androideabi +++ b/docker/Dockerfile.arm-linux-androideabi @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.arm-unknown-linux-gnueabi b/docker/Dockerfile.arm-unknown-linux-gnueabi index 2d7f272bc..57e8a6d20 100644 --- a/docker/Dockerfile.arm-unknown-linux-gnueabi +++ b/docker/Dockerfile.arm-unknown-linux-gnueabi @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.arm-unknown-linux-gnueabihf b/docker/Dockerfile.arm-unknown-linux-gnueabihf index c10ac3419..bdea14baa 100644 --- a/docker/Dockerfile.arm-unknown-linux-gnueabihf +++ b/docker/Dockerfile.arm-unknown-linux-gnueabihf @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.arm-unknown-linux-musleabi b/docker/Dockerfile.arm-unknown-linux-musleabi index 1be893c24..de7d77f29 100644 --- a/docker/Dockerfile.arm-unknown-linux-musleabi +++ b/docker/Dockerfile.arm-unknown-linux-musleabi @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.arm-unknown-linux-musleabihf b/docker/Dockerfile.arm-unknown-linux-musleabihf index a9ed9a184..b77c1d644 100644 --- a/docker/Dockerfile.arm-unknown-linux-musleabihf +++ b/docker/Dockerfile.arm-unknown-linux-musleabihf @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.armv5te-unknown-linux-gnueabi b/docker/Dockerfile.armv5te-unknown-linux-gnueabi index a9e606344..a2a1e17c7 100644 --- a/docker/Dockerfile.armv5te-unknown-linux-gnueabi +++ b/docker/Dockerfile.armv5te-unknown-linux-gnueabi @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.armv5te-unknown-linux-musleabi b/docker/Dockerfile.armv5te-unknown-linux-musleabi index 5e4b659ae..360de4f83 100644 --- a/docker/Dockerfile.armv5te-unknown-linux-musleabi +++ b/docker/Dockerfile.armv5te-unknown-linux-musleabi @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.armv7-linux-androideabi b/docker/Dockerfile.armv7-linux-androideabi index a49c451e9..b3537bca1 100644 --- a/docker/Dockerfile.armv7-linux-androideabi +++ b/docker/Dockerfile.armv7-linux-androideabi @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.armv7-unknown-linux-gnueabi b/docker/Dockerfile.armv7-unknown-linux-gnueabi index 2e74ebcef..5f7dff2a4 100644 --- a/docker/Dockerfile.armv7-unknown-linux-gnueabi +++ b/docker/Dockerfile.armv7-unknown-linux-gnueabi @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.armv7-unknown-linux-gnueabihf b/docker/Dockerfile.armv7-unknown-linux-gnueabihf index 87de3bffc..c62df712f 100644 --- a/docker/Dockerfile.armv7-unknown-linux-gnueabihf +++ b/docker/Dockerfile.armv7-unknown-linux-gnueabihf @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.armv7-unknown-linux-musleabi b/docker/Dockerfile.armv7-unknown-linux-musleabi index 909aaff80..2996384c5 100644 --- a/docker/Dockerfile.armv7-unknown-linux-musleabi +++ b/docker/Dockerfile.armv7-unknown-linux-musleabi @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.armv7-unknown-linux-musleabihf b/docker/Dockerfile.armv7-unknown-linux-musleabihf index f88498098..3fbbd64b0 100644 --- a/docker/Dockerfile.armv7-unknown-linux-musleabihf +++ b/docker/Dockerfile.armv7-unknown-linux-musleabihf @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.cross b/docker/Dockerfile.cross index c836cabf6..5a286976e 100644 --- a/docker/Dockerfile.cross +++ b/docker/Dockerfile.cross @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS rust +FROM ubuntu:24.04 AS rust ENV DEBIAN_FRONTEND=noninteractive COPY docker/lib.sh docker/cross.sh / COPY ./ /project @@ -6,7 +6,7 @@ RUN /cross.sh /project # we build our images in 2 steps, to ensure we have a compact # image, since we want to add our current subdirectory -FROM ubuntu:20.04 AS base +FROM ubuntu:24.04 AS base COPY --from=rust /root/.cargo /root/.cargo COPY --from=rust /root/.rustup /root/.rustup diff --git a/docker/Dockerfile.i586-unknown-linux-gnu b/docker/Dockerfile.i586-unknown-linux-gnu index 026c82f91..e1adc6ad0 100644 --- a/docker/Dockerfile.i586-unknown-linux-gnu +++ b/docker/Dockerfile.i586-unknown-linux-gnu @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.i586-unknown-linux-musl b/docker/Dockerfile.i586-unknown-linux-musl index 0d7895fa5..8c84502b0 100644 --- a/docker/Dockerfile.i586-unknown-linux-musl +++ b/docker/Dockerfile.i586-unknown-linux-musl @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.i686-linux-android b/docker/Dockerfile.i686-linux-android index bee3520d9..aa87f3048 100644 --- a/docker/Dockerfile.i686-linux-android +++ b/docker/Dockerfile.i686-linux-android @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.i686-pc-windows-gnu b/docker/Dockerfile.i686-pc-windows-gnu index 1572b9d63..09c96f858 100644 --- a/docker/Dockerfile.i686-pc-windows-gnu +++ b/docker/Dockerfile.i686-pc-windows-gnu @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / @@ -40,7 +40,7 @@ COPY toolchain.cmake /opt/toolchain.cmake ENV CROSS_TOOLCHAIN_PREFIX=i686-w64-mingw32- ENV CROSS_TOOLCHAIN_SUFFIX=-posix ENV CROSS_SYSROOT=/usr/i686-w64-mingw32 -ENV CROSS_TARGET_RUNNER="env -u CARGO_TARGET_I686_PC_WINDOWS_GNU_RUNNER wine" +ENV CROSS_TARGET_RUNNER="env -u CARGO_TARGET_I686_PC_WINDOWS_GNU_RUNNER wineconsole --backend=curses" ENV CARGO_TARGET_I686_PC_WINDOWS_GNU_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc"$CROSS_TOOLCHAIN_SUFFIX" \ CARGO_TARGET_I686_PC_WINDOWS_GNU_RUNNER="$CROSS_TARGET_RUNNER" \ AR_i686_pc_windows_gnu="$CROSS_TOOLCHAIN_PREFIX"ar \ diff --git a/docker/Dockerfile.i686-unknown-freebsd b/docker/Dockerfile.i686-unknown-freebsd index 881644041..5b6e27d2e 100644 --- a/docker/Dockerfile.i686-unknown-freebsd +++ b/docker/Dockerfile.i686-unknown-freebsd @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.i686-unknown-linux-gnu b/docker/Dockerfile.i686-unknown-linux-gnu index 28fd9ce2b..bdcd74899 100644 --- a/docker/Dockerfile.i686-unknown-linux-gnu +++ b/docker/Dockerfile.i686-unknown-linux-gnu @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.i686-unknown-linux-musl b/docker/Dockerfile.i686-unknown-linux-musl index 3e4408843..436c982ee 100644 --- a/docker/Dockerfile.i686-unknown-linux-musl +++ b/docker/Dockerfile.i686-unknown-linux-musl @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.loongarch64-unknown-linux-gnu b/docker/Dockerfile.loongarch64-unknown-linux-gnu index fa7139188..e73a8d1af 100644 --- a/docker/Dockerfile.loongarch64-unknown-linux-gnu +++ b/docker/Dockerfile.loongarch64-unknown-linux-gnu @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.loongarch64-unknown-linux-musl b/docker/Dockerfile.loongarch64-unknown-linux-musl index a7981e295..bac09003f 100644 --- a/docker/Dockerfile.loongarch64-unknown-linux-musl +++ b/docker/Dockerfile.loongarch64-unknown-linux-musl @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.mips-unknown-linux-gnu b/docker/Dockerfile.mips-unknown-linux-gnu index 26507486b..77771da86 100644 --- a/docker/Dockerfile.mips-unknown-linux-gnu +++ b/docker/Dockerfile.mips-unknown-linux-gnu @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.mips-unknown-linux-musl b/docker/Dockerfile.mips-unknown-linux-musl index 6b0406bc5..5da4e3fdb 100644 --- a/docker/Dockerfile.mips-unknown-linux-musl +++ b/docker/Dockerfile.mips-unknown-linux-musl @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.mips64-unknown-linux-gnuabi64 b/docker/Dockerfile.mips64-unknown-linux-gnuabi64 index 649bcba04..66524384b 100644 --- a/docker/Dockerfile.mips64-unknown-linux-gnuabi64 +++ b/docker/Dockerfile.mips64-unknown-linux-gnuabi64 @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.mips64-unknown-linux-muslabi64 b/docker/Dockerfile.mips64-unknown-linux-muslabi64 index 0722f313b..72419861c 100644 --- a/docker/Dockerfile.mips64-unknown-linux-muslabi64 +++ b/docker/Dockerfile.mips64-unknown-linux-muslabi64 @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.mips64el-unknown-linux-gnuabi64 b/docker/Dockerfile.mips64el-unknown-linux-gnuabi64 index b7d0e7350..fd16a5b7c 100644 --- a/docker/Dockerfile.mips64el-unknown-linux-gnuabi64 +++ b/docker/Dockerfile.mips64el-unknown-linux-gnuabi64 @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.mips64el-unknown-linux-muslabi64 b/docker/Dockerfile.mips64el-unknown-linux-muslabi64 index 79b1bfba8..a0cf9dc92 100644 --- a/docker/Dockerfile.mips64el-unknown-linux-muslabi64 +++ b/docker/Dockerfile.mips64el-unknown-linux-muslabi64 @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.mipsel-unknown-linux-gnu b/docker/Dockerfile.mipsel-unknown-linux-gnu index ae44a3930..698c17c43 100644 --- a/docker/Dockerfile.mipsel-unknown-linux-gnu +++ b/docker/Dockerfile.mipsel-unknown-linux-gnu @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.mipsel-unknown-linux-musl b/docker/Dockerfile.mipsel-unknown-linux-musl index 63247cd30..88b4f8648 100644 --- a/docker/Dockerfile.mipsel-unknown-linux-musl +++ b/docker/Dockerfile.mipsel-unknown-linux-musl @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.native b/docker/Dockerfile.native index 09feb6b91..fc693e534 100644 --- a/docker/Dockerfile.native +++ b/docker/Dockerfile.native @@ -1,5 +1,5 @@ # This dockerfile is used when the target matches the images platform in `build-docker-image` -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.native.centos b/docker/Dockerfile.native.centos index a1958587a..fa39f7373 100644 --- a/docker/Dockerfile.native.centos +++ b/docker/Dockerfile.native.centos @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS base +FROM ubuntu:24.04 AS base ENV DEBIAN_FRONTEND=noninteractive ARG TARGETARCH diff --git a/docker/Dockerfile.powerpc-unknown-linux-gnu b/docker/Dockerfile.powerpc-unknown-linux-gnu index 38b0a90d8..ce1834fb8 100644 --- a/docker/Dockerfile.powerpc-unknown-linux-gnu +++ b/docker/Dockerfile.powerpc-unknown-linux-gnu @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.powerpc64-unknown-linux-gnu b/docker/Dockerfile.powerpc64-unknown-linux-gnu index a0f072207..85f076162 100644 --- a/docker/Dockerfile.powerpc64-unknown-linux-gnu +++ b/docker/Dockerfile.powerpc64-unknown-linux-gnu @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.powerpc64le-unknown-linux-gnu b/docker/Dockerfile.powerpc64le-unknown-linux-gnu index 4b6b9c092..405ecda6f 100644 --- a/docker/Dockerfile.powerpc64le-unknown-linux-gnu +++ b/docker/Dockerfile.powerpc64le-unknown-linux-gnu @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.riscv64gc-unknown-linux-gnu b/docker/Dockerfile.riscv64gc-unknown-linux-gnu index a10cdd5ee..6721a553a 100644 --- a/docker/Dockerfile.riscv64gc-unknown-linux-gnu +++ b/docker/Dockerfile.riscv64gc-unknown-linux-gnu @@ -1,4 +1,4 @@ -FROM ubuntu:22.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.s390x-unknown-linux-gnu b/docker/Dockerfile.s390x-unknown-linux-gnu index b64f0240d..7fc86f2bb 100644 --- a/docker/Dockerfile.s390x-unknown-linux-gnu +++ b/docker/Dockerfile.s390x-unknown-linux-gnu @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.sparc64-unknown-linux-gnu b/docker/Dockerfile.sparc64-unknown-linux-gnu index d3686b4b5..1146b8ed0 100644 --- a/docker/Dockerfile.sparc64-unknown-linux-gnu +++ b/docker/Dockerfile.sparc64-unknown-linux-gnu @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.sparcv9-sun-solaris b/docker/Dockerfile.sparcv9-sun-solaris index a8e4fd50f..1d45728c0 100644 --- a/docker/Dockerfile.sparcv9-sun-solaris +++ b/docker/Dockerfile.sparcv9-sun-solaris @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.thumbv6m-none-eabi b/docker/Dockerfile.thumbv6m-none-eabi index bde147930..727c16a47 100644 --- a/docker/Dockerfile.thumbv6m-none-eabi +++ b/docker/Dockerfile.thumbv6m-none-eabi @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.thumbv7em-none-eabi b/docker/Dockerfile.thumbv7em-none-eabi index 7fea780f2..37e155a94 100644 --- a/docker/Dockerfile.thumbv7em-none-eabi +++ b/docker/Dockerfile.thumbv7em-none-eabi @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.thumbv7em-none-eabihf b/docker/Dockerfile.thumbv7em-none-eabihf index 44becf3f4..cab5475c4 100644 --- a/docker/Dockerfile.thumbv7em-none-eabihf +++ b/docker/Dockerfile.thumbv7em-none-eabihf @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.thumbv7m-none-eabi b/docker/Dockerfile.thumbv7m-none-eabi index 90d6bc3ab..7c44e3a3d 100644 --- a/docker/Dockerfile.thumbv7m-none-eabi +++ b/docker/Dockerfile.thumbv7m-none-eabi @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.thumbv7neon-linux-androideabi b/docker/Dockerfile.thumbv7neon-linux-androideabi index c2f0fe815..8b7a0c92b 100644 --- a/docker/Dockerfile.thumbv7neon-linux-androideabi +++ b/docker/Dockerfile.thumbv7neon-linux-androideabi @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.thumbv7neon-unknown-linux-gnueabihf b/docker/Dockerfile.thumbv7neon-unknown-linux-gnueabihf index 1973b94ff..e455739ee 100644 --- a/docker/Dockerfile.thumbv7neon-unknown-linux-gnueabihf +++ b/docker/Dockerfile.thumbv7neon-unknown-linux-gnueabihf @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.thumbv8m.base-none-eabi b/docker/Dockerfile.thumbv8m.base-none-eabi index 6928d7a2c..19d69c046 100644 --- a/docker/Dockerfile.thumbv8m.base-none-eabi +++ b/docker/Dockerfile.thumbv8m.base-none-eabi @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.thumbv8m.main-none-eabi b/docker/Dockerfile.thumbv8m.main-none-eabi index 91bd3d510..c77aee49b 100644 --- a/docker/Dockerfile.thumbv8m.main-none-eabi +++ b/docker/Dockerfile.thumbv8m.main-none-eabi @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.thumbv8m.main-none-eabihf b/docker/Dockerfile.thumbv8m.main-none-eabihf index 8882b9009..2201c7c3f 100644 --- a/docker/Dockerfile.thumbv8m.main-none-eabihf +++ b/docker/Dockerfile.thumbv8m.main-none-eabihf @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.x86_64-linux-android b/docker/Dockerfile.x86_64-linux-android index 5d78c993c..d7829d048 100644 --- a/docker/Dockerfile.x86_64-linux-android +++ b/docker/Dockerfile.x86_64-linux-android @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.x86_64-pc-solaris b/docker/Dockerfile.x86_64-pc-solaris index 1af310287..c76575752 100644 --- a/docker/Dockerfile.x86_64-pc-solaris +++ b/docker/Dockerfile.x86_64-pc-solaris @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.x86_64-pc-windows-gnu b/docker/Dockerfile.x86_64-pc-windows-gnu index 0bea92329..70b7914d9 100644 --- a/docker/Dockerfile.x86_64-pc-windows-gnu +++ b/docker/Dockerfile.x86_64-pc-windows-gnu @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / @@ -38,7 +38,7 @@ COPY toolchain.cmake /opt/toolchain.cmake ENV CROSS_TOOLCHAIN_PREFIX=x86_64-w64-mingw32- ENV CROSS_TOOLCHAIN_SUFFIX=-posix ENV CROSS_SYSROOT=/usr/x86_64-w64-mingw32 -ENV CROSS_TARGET_RUNNER="env -u CARGO_TARGET_X86_64_PC_WINDOWS_GNU_RUNNER wine" +ENV CROSS_TARGET_RUNNER="env -u CARGO_TARGET_X86_64_PC_WINDOWS_GNU_RUNNER wineconsole --backend=curses" ENV CARGO_TARGET_X86_64_PC_WINDOWS_GNU_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc"$CROSS_TOOLCHAIN_SUFFIX" \ CARGO_TARGET_X86_64_PC_WINDOWS_GNU_RUNNER="$CROSS_TARGET_RUNNER" \ AR_x86_64_pc_windows_gnu="$CROSS_TOOLCHAIN_PREFIX"ar \ diff --git a/docker/Dockerfile.x86_64-unknown-dragonfly b/docker/Dockerfile.x86_64-unknown-dragonfly index b38585571..513ede268 100644 --- a/docker/Dockerfile.x86_64-unknown-dragonfly +++ b/docker/Dockerfile.x86_64-unknown-dragonfly @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.x86_64-unknown-freebsd b/docker/Dockerfile.x86_64-unknown-freebsd index 9629a4363..4f0b13d51 100644 --- a/docker/Dockerfile.x86_64-unknown-freebsd +++ b/docker/Dockerfile.x86_64-unknown-freebsd @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.x86_64-unknown-illumos b/docker/Dockerfile.x86_64-unknown-illumos index 2dd5545f5..ae165035c 100644 --- a/docker/Dockerfile.x86_64-unknown-illumos +++ b/docker/Dockerfile.x86_64-unknown-illumos @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.x86_64-unknown-linux-gnu b/docker/Dockerfile.x86_64-unknown-linux-gnu index 0f9503f8d..c54ac4a5d 100644 --- a/docker/Dockerfile.x86_64-unknown-linux-gnu +++ b/docker/Dockerfile.x86_64-unknown-linux-gnu @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.x86_64-unknown-linux-gnu.centos b/docker/Dockerfile.x86_64-unknown-linux-gnu.centos index 54f159c86..324021841 100644 --- a/docker/Dockerfile.x86_64-unknown-linux-gnu.centos +++ b/docker/Dockerfile.x86_64-unknown-linux-gnu.centos @@ -1,3 +1,3 @@ # HACK: this file is currently never used and only exists for usage with `Dockerfile.native.centos` # it will be supported for aarch64 hosts, see #751 and #975 -FROM ubuntu:20.04 AS base +FROM ubuntu:24.04 AS base diff --git a/docker/Dockerfile.x86_64-unknown-linux-musl b/docker/Dockerfile.x86_64-unknown-linux-musl index b25b39b07..85f74cab7 100644 --- a/docker/Dockerfile.x86_64-unknown-linux-musl +++ b/docker/Dockerfile.x86_64-unknown-linux-musl @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.x86_64-unknown-netbsd b/docker/Dockerfile.x86_64-unknown-netbsd index ca06a8161..c7c71420c 100644 --- a/docker/Dockerfile.x86_64-unknown-netbsd +++ b/docker/Dockerfile.x86_64-unknown-netbsd @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/Dockerfile.zig b/docker/Dockerfile.zig index b7dbd3673..209b9c390 100644 --- a/docker/Dockerfile.zig +++ b/docker/Dockerfile.zig @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 AS cross-base +FROM ubuntu:24.04 AS cross-base ENV DEBIAN_FRONTEND=noninteractive COPY common.sh lib.sh / diff --git a/docker/android-ndk.sh b/docker/android-ndk.sh index 6f4852236..b7e1e9275 100755 --- a/docker/android-ndk.sh +++ b/docker/android-ndk.sh @@ -11,7 +11,7 @@ main() { # python3 is still needed for newer NDK versions, just since it # simplifies making symlinks even though the toolchain is prebuilt - install_packages curl python python3 + install_packages curl python3 get_ndk_info if [[ "${NDK_VERSION}" -le 9 ]]; then install_packages bzip2 diff --git a/docker/common.sh b/docker/common.sh index 283949418..61160f85a 100755 --- a/docker/common.sh +++ b/docker/common.sh @@ -42,6 +42,8 @@ if_centos install_packages \ pkgconfig if_ubuntu install_packages \ + bzip2 \ + adduser \ g++ \ gfortran \ libc6-dev \ diff --git a/docker/cross-toolchains b/docker/cross-toolchains index 5fab6426c..7e3343bfc 160000 --- a/docker/cross-toolchains +++ b/docker/cross-toolchains @@ -1 +1 @@ -Subproject commit 5fab6426c5cb1c532fdd4eee50ee2e36b23c1860 +Subproject commit 7e3343bfccde2b35963e23d3c66661b0dc87ba99 diff --git a/docker/crosstool-config/arm-unknown-linux-gnueabihf.config b/docker/crosstool-config/arm-unknown-linux-gnueabihf.config index e68a4ba8f..51db89332 100644 --- a/docker/crosstool-config/arm-unknown-linux-gnueabihf.config +++ b/docker/crosstool-config/arm-unknown-linux-gnueabihf.config @@ -8,7 +8,7 @@ CT_ARCH_FLOAT_HW=y CT_KERNEL_LINUX=y CT_LINUX_V_4_19=y # CT_LINUX_NO_VERSIONS is not set -CT_LINUX_VERSION="4.19.287" +CT_LINUX_VERSION="4.19.21" CT_LINUX_later_than_4_8=y CT_LINUX_4_8_or_later=y CT_LINUX_later_than_3_7=y @@ -16,15 +16,30 @@ CT_LINUX_3_7_or_later=y CT_LINUX_later_than_3_2=y CT_LINUX_3_2_or_later=y CT_BINUTILS_V_2_32=y -CT_GLIBC_V_2_31=y +CT_GLIBC_V_2_17=y # CT_GLIBC_NO_VERSIONS is not set -CT_GLIBC_VERSION="2.31" +CT_GLIBC_VERSION="2.17" +CT_GLIBC_2_29_or_older=y +CT_GLIBC_older_than_2_29=y +CT_GLIBC_2_27_or_older=y +CT_GLIBC_older_than_2_27=y +CT_GLIBC_2_26_or_older=y +CT_GLIBC_older_than_2_26=y +CT_GLIBC_2_25_or_older=y +CT_GLIBC_older_than_2_25=y +CT_GLIBC_2_24_or_older=y +CT_GLIBC_older_than_2_24=y +CT_GLIBC_2_23_or_older=y +CT_GLIBC_older_than_2_23=y +CT_GLIBC_2_20_or_older=y +CT_GLIBC_older_than_2_20=y CT_GLIBC_2_17_or_later=y +CT_GLIBC_2_17_or_older=y CT_GLIBC_later_than_2_14=y CT_GLIBC_2_14_or_later=y CT_GCC_V_8=y # CT_GCC_NO_VERSIONS is not set -CT_GCC_VERSION="8.5.0" +CT_GCC_VERSION="8.3.0" CT_GCC_later_than_7=y CT_GCC_7_or_later=y CT_GCC_later_than_6=y diff --git a/docker/linux-image.sh b/docker/linux-image.sh index 86b5d012f..f739553bc 100755 --- a/docker/linux-image.sh +++ b/docker/linux-image.sh @@ -57,17 +57,17 @@ max_kernel_version() { main() { # arch in the rust target local arch="${1}" \ - kversion=5.10.0-34 + kversion=6.12.41+deb13 - local debsource="deb http://http.debian.net/debian/ bullseye main" - debsource="${debsource}\ndeb http://security.debian.org/ bullseye-security main" + local debsource="deb http://http.debian.net/debian/ trixie main" + debsource="${debsource}\ndeb http://security.debian.org/ trixie-security main" local dropbear="dropbear-bin" local -a deps local kernel= local libgcc="libgcc-s1" - local ncurses= + # local ncurses= # select debian arch and kernel version case "${arch}" in @@ -78,7 +78,7 @@ main() { ;; armv7) arch=armhf - kernel='5.*-armmp' + kernel='6.*-armmp' deps=(libcrypt1:"${arch}") ;; i686) @@ -92,14 +92,14 @@ main() { debsource="deb http://http.debian.net/debian/ buster main" debsource="${debsource}\ndeb http://security.debian.org/ buster/updates main" kernel='4.*-4kc-malta' - ncurses="=6.1*" + # ncurses="=6.1*" ;; mipsel) - kernel='5.*-4kc-malta' + kernel='6.*-4kc-malta' deps=(libcrypt1:"${arch}") ;; mips64el) - kernel='5.*-5kc-malta' + kernel='6.*-5kc-malta' deps=(libcrypt1:"${arch}") ;; powerpc) @@ -132,7 +132,7 @@ main() { ;; powerpc64le) arch=ppc64el - kernel='5.*-powerpc64le' + kernel='6.*-powerpc64le' deps=(libcrypt1:"${arch}") ;; riscv64) @@ -142,7 +142,7 @@ main() { ;; s390x) arch=s390x - kernel='5.*-s390x' + kernel='6.*-s390x' deps=(libcrypt1:"${arch}") ;; sparc64) @@ -198,9 +198,9 @@ main() { dpkg --add-architecture "${arch}" || echo "foreign-architecture ${arch}" >/etc/dpkg/dpkg.cfg.d/multiarch # Add Debian keys. - curl --retry 3 -sSfL 'https://ftp-master.debian.org/keys/archive-key-{7.0,8,9,10,11,12}.asc' -O - curl --retry 3 -sSfL 'https://ftp-master.debian.org/keys/archive-key-{8,9,10,11,12}-security.asc' -O - curl --retry 3 -sSfL 'https://ftp-master.debian.org/keys/release-{7,8,9,10,11,12}.asc' -O + curl --retry 3 -sSfL 'https://ftp-master.debian.org/keys/archive-key-{7.0,8,9,10,11,12,13}.asc' -O + curl --retry 3 -sSfL 'https://ftp-master.debian.org/keys/archive-key-{8,9,10,11,12,13}-security.asc' -O + curl --retry 3 -sSfL 'https://ftp-master.debian.org/keys/release-{7,8,9,10,11,12,13}.asc' -O curl --retry 3 -sSfL 'https://www.ports.debian.org/archive_{2020,2021,2022,2023,2024,2025}.key' -O for key in *.asc *.key; do @@ -240,8 +240,8 @@ main() { "libgmp10:${arch}" \ "libc6:${arch}" \ "linux-image-${kernel}:${arch}" \ - ncurses-base"${ncurses}" \ "zlib1g:${arch}" + # "ncurses-base:all" \ if [[ "${arch}" != "${dpkg_arch}" ]]; then apt-get -d --no-install-recommends download "${libgcc_packages[@]}" diff --git a/docker/qemu.sh b/docker/qemu.sh index 9c15c5b7e..991154f2d 100755 --- a/docker/qemu.sh +++ b/docker/qemu.sh @@ -19,7 +19,7 @@ build_static_libffi () { tar --strip-components=1 -xzf "v${version}.tar.gz" ./configure --prefix="$td"/lib --disable-builddir --disable-shared --enable-static make "-j$(nproc)" - install -m 644 ./.libs/libffi.a /usr/local/lib/ + install -m 644 ./.libs/libffi.a /usr/lib/ popd @@ -42,7 +42,7 @@ build_static_libmount () { tar --strip-components=1 -xJf "util-linux-${version_spec}.tar.xz" ./configure --disable-shared --enable-static --without-ncurses make "-j$(nproc)" mount blkid - install -m 644 ./.libs/*.a /usr/local/lib/ + install -m 644 ./.libs/*.a /usr/lib/ popd @@ -67,7 +67,7 @@ build_static_libattr() { ./configure make "-j$(nproc)" - install -m 644 ./libattr/.libs/libattr.a /usr/local/lib/ + install -m 644 ./libattr/.libs/libattr.a /usr/lib/ yum remove -y gettext @@ -87,7 +87,7 @@ build_static_libcap() { curl --retry 3 -sSfL "https://www.kernel.org/pub/linux/libs/security/linux-privs/libcap2/libcap-${version}.tar.xz" -O tar --strip-components=1 -xJf "libcap-${version}.tar.xz" make "-j$(nproc)" - install -m 644 libcap/libcap.a /usr/local/lib/ + install -m 644 libcap/libcap.a /usr/lib/ popd @@ -106,7 +106,7 @@ build_static_pixman() { tar --strip-components=1 -xzf "pixman-${version}.tar.gz" ./configure make "-j$(nproc)" - install -m 644 ./pixman/.libs/libpixman-1.a /usr/local/lib/ + install -m 644 ./pixman/.libs/libpixman-1.a /usr/lib/ popd @@ -125,7 +125,7 @@ build_static_slirp() { tar -xzf "libslirp-v${version}.tar.gz" meson setup -Ddefault_library=static libslirp-v${version} build ninja -C build - install -m 644 ./build/libslirp.a /usr/local/lib/ + install -m 644 ./build/libslirp.a /usr/lib/ popd @@ -133,7 +133,7 @@ build_static_slirp() { } main() { - local version=5.1.0 + local version=10.1.0 if_centos version=4.2.1 diff --git a/docker/ubuntu.sources b/docker/ubuntu.sources new file mode 100644 index 000000000..84002220a --- /dev/null +++ b/docker/ubuntu.sources @@ -0,0 +1,20 @@ +Types: deb deb-src +URIs: http://security.ubuntu.com/ubuntu +Suites: noble-security +Architectures: amd64 i386 +Components: main restricted universe multiverse +Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg + +Types: deb deb-src +URIs: http://ports.ubuntu.com/ubuntu-ports +Suites: noble noble-updates noble-backports noble-security +Architectures: arm64 armhf +Components: main restricted universe multiverse +Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg + +Types: deb deb-src +URIs: http://archive.ubuntu.com/ubuntu +Suites: noble +Architectures: amd64 i386 +Components: universe main multiverse restricted +Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg diff --git a/docker/wine.sh b/docker/wine.sh index b449e82ea..af8d947df 100755 --- a/docker/wine.sh +++ b/docker/wine.sh @@ -7,7 +7,7 @@ set -euo pipefail . lib.sh main() { - local version="9.0.0.0~focal-1" + local version="10.*~noble-1" install_packages wget dpkg --add-architecture i386 @@ -23,9 +23,9 @@ main() { mkdir -p /etc/apt/keyrings mv winehq.key /etc/apt/keyrings/winehq-archive.key - wget -nc https://dl.winehq.org/wine-builds/ubuntu/dists/focal/winehq-focal.sources - mv winehq-focal.sources /etc/apt/sources.list.d/ - sed -i s@/usr/share/keyrings/@/etc/apt/keyrings/@ /etc/apt/sources.list.d/winehq-focal.sources || true + wget -nc https://dl.winehq.org/wine-builds/ubuntu/dists/noble/winehq-noble.sources + mv winehq-noble.sources /etc/apt/sources.list.d/ + sed -i s@/usr/share/keyrings/@/etc/apt/keyrings/@ /etc/apt/sources.list.d/winehq-noble.sources || true # winehq requires all the dependencies to be manually specified # if we're not using the latest version of a given major version. diff --git a/src/bin/commands/images.rs b/src/bin/commands/images.rs index 490af4bb9..8b96f3e61 100644 --- a/src/bin/commands/images.rs +++ b/src/bin/commands/images.rs @@ -215,15 +215,13 @@ fn get_image_target( } else if image .repository .starts_with(CROSS_CUSTOM_DOCKERFILE_IMAGE_PREFIX) - { - if let Some(target) = target_list + && let Some(target) = target_list .triples .iter() .find(|target| image.tag.starts_with(target.as_str())) .cloned() - { - return Ok(target); - } + { + return Ok(target); } let mut command = engine.subcommand("inspect"); command.args([ diff --git a/src/bin/commands/run.rs b/src/bin/commands/run.rs index 836a90bd0..9bc3e03ad 100644 --- a/src/bin/commands/run.rs +++ b/src/bin/commands/run.rs @@ -2,8 +2,8 @@ use clap::Args as ClapArgs; use cross::config::Config; use cross::shell::{MessageInfo, Verbosity}; use cross::{ - cargo_metadata_with_args, cli::Args, docker, rustc, setup, toml, CommandVariant, CrossSetup, - Target, + CommandVariant, CrossSetup, Target, cargo_metadata_with_args, cli::Args, docker, rustc, setup, + toml, }; use eyre::Context; diff --git a/src/bin/cross-util.rs b/src/bin/cross-util.rs index a90c6f92a..628413cd0 100644 --- a/src/bin/cross-util.rs +++ b/src/bin/cross-util.rs @@ -79,9 +79,7 @@ fn get_container_engine( } macro_rules! get_engine { - ($args:ident, $docker_in_docker:expr, $msg_info: ident) => {{ - get_container_engine($args.engine(), $docker_in_docker, &mut $msg_info) - }}; + ($args:ident, $docker_in_docker:expr, $msg_info: ident) => {{ get_container_engine($args.engine(), $docker_in_docker, &mut $msg_info) }}; } pub fn main() -> cross::Result<()> { diff --git a/src/bin/cross.rs b/src/bin/cross.rs index ba66146fb..4502868d4 100644 --- a/src/bin/cross.rs +++ b/src/bin/cross.rs @@ -6,9 +6,8 @@ use std::{ }; use cross::{ - cargo, cli, rustc, + OutputExt, Subcommand, cargo, cli, rustc, shell::{self, Verbosity}, - OutputExt, Subcommand, }; pub fn main() -> cross::Result<()> { diff --git a/src/build.rs b/src/build.rs index 60f73a505..dcf998963 100644 --- a/src/build.rs +++ b/src/build.rs @@ -24,7 +24,9 @@ fn main() { .write_all(commit_info().as_bytes()) .unwrap(); + // Add "cross_sandboxed" to list of approved cfgs println!("cargo::rustc-check-cfg=cfg(cross_sandboxed)"); + if env::var("CROSS_SANDBOXED").is_ok() { println!("cargo:rustc-cfg=cross_sandboxed"); } diff --git a/src/cli.rs b/src/cli.rs index 982ebde66..936447eb1 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -1,12 +1,12 @@ use std::env; use std::path::{Path, PathBuf}; +use crate::Target; use crate::cargo::Subcommand; use crate::errors::Result; -use crate::file::{absolute_path, PathExt}; +use crate::file::{PathExt, absolute_path}; use crate::rustc::TargetList; use crate::shell::{self, MessageInfo}; -use crate::Target; #[derive(Debug)] pub struct Args { diff --git a/src/cross_toml.rs b/src/cross_toml.rs index d0ef58897..0648fde5e 100644 --- a/src/cross_toml.rs +++ b/src/cross_toml.rs @@ -6,11 +6,11 @@ //! [1]: https://github.com/cross-rs/cross/blob/main/docs/config_file.md use crate::config::ConfVal; -use crate::docker::custom::PreBuild; use crate::docker::PossibleImage; +use crate::docker::custom::PreBuild; use crate::shell::MessageInfo; -use crate::{config, errors::*}; use crate::{Target, TargetList}; +use crate::{config, errors::*}; use serde::de::DeserializeOwned; use serde::{Deserialize, Deserializer, Serialize}; use std::collections::{BTreeSet, HashMap}; diff --git a/src/docker/custom.rs b/src/docker/custom.rs index 380eb4b25..3a149732d 100644 --- a/src/docker/custom.rs +++ b/src/docker/custom.rs @@ -4,12 +4,12 @@ use std::str::FromStr; use crate::docker::{self, DockerOptions, DockerPaths}; use crate::shell::MessageInfo; -use crate::{errors::*, file, CommandExt, ToUtf8}; use crate::{CargoMetadata, TargetTriple}; +use crate::{CommandExt, ToUtf8, errors::*, file}; use super::{ - create_target_dir, get_image_name, path_hash, BuildCommandExt, BuildResultExt, Engine, - ImagePlatform, + BuildCommandExt, BuildResultExt, Engine, ImagePlatform, create_target_dir, get_image_name, + path_hash, }; pub const CROSS_CUSTOM_DOCKERFILE_IMAGE_PREFIX: &str = "localhost/cross-rs/cross-custom-"; @@ -138,15 +138,14 @@ impl<'a> Dockerfile<'a> { } }; - if matches!(self, Dockerfile::File { .. }) { - if let Ok(cross_base_image) = + if matches!(self, Dockerfile::File { .. }) + && let Ok(cross_base_image) = self::get_image_name(&options.config, &options.target, uses_zig) - { - docker_build.args([ - "--build-arg", - &format!("CROSS_BASE_IMAGE={cross_base_image}"), - ]); - } + { + docker_build.args([ + "--build-arg", + &format!("CROSS_BASE_IMAGE={cross_base_image}"), + ]); } docker_build.args(["--file".into(), path]); diff --git a/src/docker/engine.rs b/src/docker/engine.rs index 0e42cb3f1..12e161b1d 100644 --- a/src/docker/engine.rs +++ b/src/docker/engine.rs @@ -5,7 +5,7 @@ use std::process::Command; use crate::config::bool_from_envvar; use crate::extensions::CommandExt; use crate::shell::MessageInfo; -use crate::{errors::*, OutputExt}; +use crate::{OutputExt, errors::*}; use super::{Architecture, ContainerOs}; @@ -175,7 +175,9 @@ fn is_docker_rootless(ce: &Path, msg_info: &mut MessageInfo) -> bool { fn various_is_rootless_configs() { let var = "CROSS_ROOTLESS_CONTAINER_ENGINE"; let old = env::var(var); - env::remove_var(var); + unsafe { + env::remove_var(var); + } assert!(!is_rootless(EngineType::Docker).unwrap_or(false)); assert!(is_rootless(EngineType::Docker).unwrap_or(true)); @@ -185,27 +187,33 @@ fn various_is_rootless_configs() { assert_eq!(is_rootless(EngineType::PodmanRemote), Some(true)); assert_eq!(is_rootless(EngineType::Other), Some(true)); - env::set_var(var, "0"); + unsafe { + env::set_var(var, "0"); + } assert_eq!(is_rootless(EngineType::Docker), Some(false)); assert_eq!(is_rootless(EngineType::Podman), Some(false)); assert_eq!(is_rootless(EngineType::PodmanRemote), Some(false)); assert_eq!(is_rootless(EngineType::Other), Some(false)); - env::set_var(var, "1"); + unsafe { + env::set_var(var, "1"); + } assert_eq!(is_rootless(EngineType::Docker), Some(true)); assert_eq!(is_rootless(EngineType::Podman), Some(true)); assert_eq!(is_rootless(EngineType::PodmanRemote), Some(true)); assert_eq!(is_rootless(EngineType::Other), Some(true)); - env::set_var(var, "auto"); + unsafe { + env::set_var(var, "auto"); + } assert_eq!(is_rootless(EngineType::Docker), None); assert_eq!(is_rootless(EngineType::Podman), Some(true)); assert_eq!(is_rootless(EngineType::PodmanRemote), Some(true)); assert_eq!(is_rootless(EngineType::Other), Some(true)); match old { - Ok(v) => env::set_var(var, v), - Err(_) => env::remove_var(var), + Ok(v) => unsafe { env::set_var(var, v) }, + Err(_) => unsafe { env::remove_var(var) }, } } diff --git a/src/docker/image.rs b/src/docker/image.rs index 6749fe86d..3e6224b74 100644 --- a/src/docker/image.rs +++ b/src/docker/image.rs @@ -3,10 +3,10 @@ use std::str::FromStr; use serde::{Deserialize, Serialize}; use crate::{ + TargetTriple, docker::{CROSS_IMAGE, DEFAULT_IMAGE_VERSION}, errors::*, shell::MessageInfo, - TargetTriple, }; use super::Engine; @@ -229,8 +229,8 @@ impl std::str::FromStr for ImagePlatform { // [os/arch[/variant]=]toolchain fn from_str(s: &str) -> Result { use serde::de::{ - value::{Error as SerdeError, StrDeserializer}, IntoDeserializer, + value::{Error as SerdeError, StrDeserializer}, }; // Try to match the docker platform string first diff --git a/src/docker/local.rs b/src/docker/local.rs index 80a707db2..572025397 100644 --- a/src/docker/local.rs +++ b/src/docker/local.rs @@ -158,6 +158,7 @@ pub(crate) fn run( // terminate or it may be a known interrupt return status (130, 137, 143). // simpler: just test if the program termination handler was called. // SAFETY: an atomic load. + #[allow(static_mut_refs)] let is_terminated = crate::errors::TERMINATED.load(Ordering::SeqCst); if !is_terminated { ChildContainer::exit_static(); diff --git a/src/docker/remote.rs b/src/docker/remote.rs index 373abfc49..c0acb791e 100644 --- a/src/docker/remote.rs +++ b/src/docker/remote.rs @@ -9,6 +9,7 @@ use is_terminal::IsTerminal; use super::engine::Engine; use super::shared::*; +use crate::TargetTriple; use crate::config::bool_from_envvar; use crate::errors::Result; use crate::extensions::CommandExt; @@ -16,7 +17,6 @@ use crate::file::{self, PathExt, ToUtf8}; use crate::rustc::{self, QualifiedToolchain, VersionMetaExt}; use crate::shell::MessageInfo; use crate::temp; -use crate::TargetTriple; // prevent further commands from running if we handled // a signal earlier, and the volume is exited. @@ -74,22 +74,21 @@ impl<'a, 'b, 'c> ContainerDataVolume<'a, 'b, 'c> { mount_prefix: &str, msg_info: &mut MessageInfo, ) -> Result { - if let Some((_, rel)) = reldst.rsplit_once('/') { - if msg_info.cross_debug - && src.is_dir() - && !src.to_string_lossy().ends_with("/.") - && rel - == src - .file_name() - .expect("filename should be defined as we are a directory") - { - msg_info.warn(format_args!( - "source is pointing to a directory instead of its contents: {} -> {}\nThis might be a bug. {}", - src.as_posix_relative()?, - reldst, - std::panic::Location::caller() - ))?; - } + if let Some((_, rel)) = reldst.rsplit_once('/') + && msg_info.cross_debug + && src.is_dir() + && !src.to_string_lossy().ends_with("/.") + && rel + == src + .file_name() + .expect("filename should be defined as we are a directory") + { + msg_info.warn(format_args!( + "source is pointing to a directory instead of its contents: {} -> {}\nThis might be a bug. {}", + src.as_posix_relative()?, + reldst, + std::panic::Location::caller() + ))?; } subcommand_or_exit(self.engine, "cp")? .arg("-a") @@ -218,8 +217,7 @@ impl<'a, 'b, 'c> ContainerDataVolume<'a, 'b, 'c> { let dirs = &self.toolchain_dirs; let reldst = dirs.cargo_mount_path_relative()?; let copy_registry = env::var("CROSS_REMOTE_COPY_REGISTRY") - .map(|s| bool_from_envvar(&s)) - .unwrap_or(copy_registry); + .map_or(copy_registry, |s| bool_from_envvar(&s)); self.create_dir(&reldst, mount_prefix, msg_info)?; if copy_registry { @@ -307,7 +305,7 @@ impl<'a, 'b, 'c> ContainerDataVolume<'a, 'b, 'c> { &temppath.join(rustlib), true, 0, - |e, d| d != 0 || e.file_type().map(|t| !t.is_file()).unwrap_or(true), + |e, d| d != 0 || e.file_type().map_or(true, |t| !t.is_file()), )?; self.copy_files(&temppath.join("lib"), &reldst, mount_prefix, msg_info)?; @@ -365,10 +363,10 @@ impl<'a, 'b, 'c> ContainerDataVolume<'a, 'b, 'c> { self.copy_rust_base(mount_prefix, msg_info)?; self.copy_rust_manifest(mount_prefix, msg_info)?; self.copy_rust_triple(dirs.host_target(), mount_prefix, false, msg_info)?; - if let Some(target_triple) = target_triple { - if target_triple.triple() != dirs.host_target().triple() { - self.copy_rust_triple(target_triple, mount_prefix, false, msg_info)?; - } + if let Some(target_triple) = target_triple + && target_triple.triple() != dirs.host_target().triple() + { + self.copy_rust_triple(target_triple, mount_prefix, false, msg_info)?; } Ok(()) @@ -442,7 +440,7 @@ fn is_cachedir_tag(path: &Path) -> Result { fn is_cachedir(entry: &fs::DirEntry) -> bool { // avoid any cached directories when copying // see https://bford.info/cachedir/ - if entry.file_type().map(|t| t.is_dir()).unwrap_or(false) { + if entry.file_type().is_ok_and(|t| t.is_dir()) { let path = entry.path().join("CACHEDIR.TAG"); path.exists() && is_cachedir_tag(&path).unwrap_or(false) } else { diff --git a/src/docker/shared.rs b/src/docker/shared.rs index abad682a1..6298fdfa8 100644 --- a/src/docker/shared.rs +++ b/src/docker/shared.rs @@ -1,15 +1,15 @@ #![allow(static_mut_refs)] // FIXME: Use correct types for CHILD_CONTAINER -use super::custom::{Dockerfile, PreBuild}; -use super::image::PossibleImage; use super::Image; use super::PROVIDED_IMAGES; -use super::{engine::*, ProvidedImage}; +use super::custom::{Dockerfile, PreBuild}; +use super::image::PossibleImage; +use super::{ProvidedImage, engine::*}; use crate::cargo::CargoMetadata; use crate::config::Config; use crate::errors::*; use crate::extensions::{CommandExt, SafeCommand}; -use crate::file::{self, write_file, PathExt, ToUtf8}; +use crate::file::{self, PathExt, ToUtf8, write_file}; use crate::id; use crate::rustc::QualifiedToolchain; use crate::shell::{ColorChoice, MessageInfo, Verbosity}; @@ -32,7 +32,7 @@ pub const CROSS_IMAGE: &str = { }; // note: this is the most common base image for our images -pub const UBUNTU_BASE: &str = "ubuntu:20.04"; +pub const UBUNTU_BASE: &str = "ubuntu:24.04"; pub const DEFAULT_IMAGE_VERSION: &str = if crate::commit_info().is_empty() { env!("CARGO_PKG_VERSION") } else { @@ -547,6 +547,7 @@ impl ChildContainer { pub fn create(engine: Engine, name: String) -> Result<()> { // SAFETY: guarded by an atomic swap unsafe { + #[allow(static_mut_refs)] if !CHILD_CONTAINER.exists.swap(true, Ordering::SeqCst) { CHILD_CONTAINER.info = Some(ChildContainerInfo { engine, @@ -571,7 +572,10 @@ impl ChildContainer { pub fn exists_static() -> bool { // SAFETY: an atomic load. - unsafe { CHILD_CONTAINER.exists() } + #[allow(static_mut_refs)] + unsafe { + CHILD_CONTAINER.exists() + } } // when the `docker run` command finished. @@ -582,6 +586,7 @@ impl ChildContainer { pub fn exit_static() { // SAFETY: an atomic store. + #[allow(static_mut_refs)] unsafe { CHILD_CONTAINER.exit(); } @@ -608,6 +613,7 @@ impl ChildContainer { pub fn finish_static(is_tty: bool, msg_info: &mut MessageInfo) { // SAFETY: internally guarded by an atomic load. + #[allow(static_mut_refs)] unsafe { CHILD_CONTAINER.finish(is_tty, msg_info); } @@ -667,7 +673,7 @@ pub enum VolumeId { impl VolumeId { pub fn mount(&self, mount_prefix: &str) -> String { match self { - VolumeId::Keep(ref id) => format!("{id}:{mount_prefix}"), + VolumeId::Keep(id) => format!("{id}:{mount_prefix}"), VolumeId::Discard => mount_prefix.to_owned(), } } @@ -1215,11 +1221,7 @@ pub enum GetImageError { } fn get_target_name(target: &Target, uses_zig: bool) -> &str { - if uses_zig { - "zig" - } else { - target.triple() - } + if uses_zig { "zig" } else { target.triple() } } fn get_user_image( @@ -1372,14 +1374,14 @@ fn docker_inspect_self(engine: &Engine, msg_info: &mut MessageInfo) -> Result(&out.stdout); - if let Ok(val) = val { - if let Some(array) = val.as_array() { - // `docker inspect` completed but returned an empty array, most - // likely indicating that the hostname isn't a valid container ID. - if array.is_empty() { - msg_info.debug("docker inspect found no containers matching HOSTNAME, retrying using mountinfo")?; - return docker_inspect_self_mountinfo(engine, msg_info); - } + if let Ok(val) = val + && let Some(array) = val.as_array() + { + // `docker inspect` completed but returned an empty array, most + // likely indicating that the hostname isn't a valid container ID. + if array.is_empty() { + msg_info.debug("docker inspect found no containers matching HOSTNAME, retrying using mountinfo")?; + return docker_inspect_self_mountinfo(engine, msg_info); } } @@ -1556,7 +1558,9 @@ mod tests { fn test_docker_userns() { let var = "CROSS_CONTAINER_USER_NAMESPACE"; let old = env::var(var); - env::remove_var(var); + unsafe { + env::remove_var(var); + } let host = "\"engine\" \"--userns\" \"host\"".to_owned(); let custom = "\"engine\" \"--userns\" \"custom\"".to_owned(); @@ -1569,21 +1573,31 @@ mod tests { }; test(&host); - env::set_var(var, "auto"); + unsafe { + env::set_var(var, "auto"); + } test(&host); - env::set_var(var, "none"); + unsafe { + env::set_var(var, "none"); + } test(&none); - env::set_var(var, "host"); + unsafe { + env::set_var(var, "host"); + } test(&host); - env::set_var(var, "custom"); + unsafe { + env::set_var(var, "custom"); + } test(&custom); - match old { - Ok(v) => env::set_var(var, v), - Err(_) => env::remove_var(var), + unsafe { + match old { + Ok(v) => env::set_var(var, v), + Err(_) => env::remove_var(var), + } } } @@ -1642,7 +1656,9 @@ mod tests { let envvars = ["CARGO_HOME", "NIX_STORE"]; for var in envvars { result.push((var, env::var(var).ok())); - env::remove_var(var); + unsafe { + env::remove_var(var); + } } result @@ -1651,7 +1667,9 @@ mod tests { fn reset_env(vars: Vec<(&'static str, Option)>) { for (var, value) in vars { if let Some(value) = value { - env::set_var(var, value); + unsafe { + env::set_var(var, value); + } } } } @@ -1865,7 +1883,9 @@ mod tests { }, }])).unwrap(); let want = MountDetail { - source: PathBuf::from("/var/lib/docker/overlay2/f107af83b37bc0a182d3d2661f3d84684f0fffa1a243566b338a388d5e54bef4/merged"), + source: PathBuf::from( + "/var/lib/docker/overlay2/f107af83b37bc0a182d3d2661f3d84684f0fffa1a243566b338a388d5e54bef4/merged", + ), destination: PathBuf::from("/"), }; assert_eq!(want, actual); diff --git a/src/errors.rs b/src/errors.rs index 0dad33bbb..4fdab33d2 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -19,13 +19,16 @@ pub fn install_panic_hook() -> Result<()> { /// # Safety /// Safe as long as we have single-threaded execution. -unsafe fn termination_handler() { +fn termination_handler() { // we can't warn the user here, since locks aren't signal-safe. // we can delete files, since fdopendir is thread-safe, and // `openat`, `unlinkat`, and `lstat` are signal-safe. // https://man7.org/linux/man-pages/man7/signal-safety.7.html - if !TERMINATED.swap(true, Ordering::SeqCst) && temp::has_tempfiles() { - temp::clean(); + #[allow(static_mut_refs)] + unsafe { + if !TERMINATED.swap(true, Ordering::SeqCst) && temp::has_tempfiles() { + temp::clean(); + } } // tl;dr this is a long explanation to say this is thread-safe. @@ -103,7 +106,9 @@ unsafe fn termination_handler() { // a global CString and `Vec`, respectively. this atomic guard // makes this safe regardless. #[allow(static_mut_refs)] // FIXME: Use correct types for CHILD_CONTAINER - docker::CHILD_CONTAINER.terminate(); + unsafe { + docker::CHILD_CONTAINER.terminate(); + } // all termination exit codes are 128 + signal code. the exit code is // 130 for Ctrl+C or SIGINT (signal code 2) for linux, macos, and windows. @@ -112,11 +117,9 @@ unsafe fn termination_handler() { pub fn install_termination_hook() -> Result<()> { // SAFETY: safe since single-threaded execution. - unsafe { - signal_hook::low_level::register(signal_hook::consts::SIGINT, || termination_handler()) - } - .map_err(Into::into) - .map(|_| ()) + unsafe { signal_hook::low_level::register(signal_hook::consts::SIGINT, termination_handler) } + .map_err(Into::into) + .map(|_| ()) } #[derive(Debug, thiserror::Error)] diff --git a/src/interpreter.rs b/src/interpreter.rs index 0968093c0..12cc9ddf4 100644 --- a/src/interpreter.rs +++ b/src/interpreter.rs @@ -1,8 +1,8 @@ use std::path::Path; +use crate::Target; use crate::errors::*; use crate::file; -use crate::Target; /// Checks if the interpreters have been registered in the host system pub fn is_registered(target: &Target) -> Result { diff --git a/src/lib.rs b/src/lib.rs index 26f0ad164..951508787 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -58,14 +58,14 @@ use rustc::{QualifiedToolchain, Toolchain}; use rustc_version::Channel; use serde::{Deserialize, Serialize, Serializer}; -pub use self::cargo::{cargo_command, cargo_metadata_with_args, CargoMetadata, Subcommand}; +pub use self::cargo::{CargoMetadata, Subcommand, cargo_command, cargo_metadata_with_args}; use self::cross_toml::CrossToml; use self::errors::Context; use self::shell::{MessageInfo, Verbosity}; -pub use self::errors::{install_panic_hook, install_termination_hook, Result}; +pub use self::errors::{Result, install_panic_hook, install_termination_hook}; pub use self::extensions::{CommandExt, OutputExt, SafeCommand}; -pub use self::file::{pretty_path, ToUtf8}; +pub use self::file::{ToUtf8, pretty_path}; pub use self::rustc::{TargetList, VersionMetaExt}; pub const CROSS_LABEL_DOMAIN: &str = "org.cross-rs"; diff --git a/src/rustc.rs b/src/rustc.rs index 14247b986..623f8a98b 100644 --- a/src/rustc.rs +++ b/src/rustc.rs @@ -4,11 +4,11 @@ use std::process::Command; use rustc_version::{Version, VersionMeta}; use serde::Deserialize; +use crate::TargetTriple; use crate::docker::ImagePlatform; use crate::errors::*; -use crate::extensions::{env_program, CommandExt}; +use crate::extensions::{CommandExt, env_program}; use crate::shell::MessageInfo; -use crate::TargetTriple; #[derive(Debug)] pub struct TargetList { @@ -70,10 +70,10 @@ pub fn hash_from_version_string(version: &str, index: usize) -> String { .and_then(|meta| meta.strip_prefix('(')) .and_then(|meta| meta.strip_suffix(')')) .and_then(|meta| meta.split_once(' ')) + && is_hash(commit) + && is_date(date) { - if is_hash(commit) && is_date(date) { - return short_commit_hash(commit); - } + return short_commit_hash(commit); } // fallback: can't extract the hash. just create a hash of the version string. diff --git a/src/rustup.rs b/src/rustup.rs index 8d5d7f755..13c475615 100644 --- a/src/rustup.rs +++ b/src/rustup.rs @@ -3,11 +3,11 @@ use std::process::Command; use rustc_version::{Channel, Version}; +use crate::Target; use crate::errors::*; pub use crate::extensions::{CommandExt, OutputExt}; use crate::rustc::QualifiedToolchain; use crate::shell::{MessageInfo, Verbosity}; -use crate::Target; #[derive(Debug)] pub struct AvailableTargets { diff --git a/src/temp.rs b/src/temp.rs index 39ea74d1a..64f05166c 100644 --- a/src/temp.rs +++ b/src/temp.rs @@ -21,7 +21,10 @@ pub fn dir() -> Result { pub(crate) fn has_tempfiles() -> bool { // SAFETY: safe, since we only check if the stack is empty. - unsafe { !FILES.is_empty() || !DIRS.is_empty() } + #[allow(static_mut_refs)] + unsafe { + !FILES.is_empty() || !DIRS.is_empty() + } } /// # Safety @@ -30,8 +33,14 @@ pub(crate) unsafe fn clean() { // don't expose FILES or DIRS outside this module, // so we can only add or remove from the stack using // our wrappers, guaranteeing add/remove in order. - FILES.clear(); - DIRS.clear(); + #[allow(static_mut_refs)] + unsafe { + FILES.clear(); + } + #[allow(static_mut_refs)] + unsafe { + DIRS.clear(); + } } /// # Safety @@ -40,14 +49,23 @@ unsafe fn push_tempfile() -> Result<&'static mut tempfile::NamedTempFile> { let parent = dir()?; fs::create_dir_all(&parent).ok(); let file = tempfile::NamedTempFile::new_in(&parent)?; - FILES.push(file); - Ok(FILES.last_mut().expect("file list should not be empty")) + #[allow(static_mut_refs)] + unsafe { + FILES.push(file); + } + #[allow(static_mut_refs)] + unsafe { + Ok(FILES.last_mut().expect("file list should not be empty")) + } } /// # Safety /// Safe as long as we have single-threaded execution. unsafe fn pop_tempfile() -> Option { - FILES.pop() + #[allow(static_mut_refs)] + unsafe { + FILES.pop() + } } #[derive(Debug)] @@ -60,7 +78,7 @@ impl TempFile { /// Safe as long as we have single-threaded execution. pub unsafe fn new() -> Result { Ok(Self { - file: push_tempfile()?, + file: unsafe { push_tempfile()? }, }) } @@ -89,14 +107,21 @@ unsafe fn push_tempdir() -> Result<&'static Path> { let parent = dir()?; fs::create_dir_all(&parent).ok(); let dir = tempfile::TempDir::new_in(&parent)?; - DIRS.push(dir); - Ok(DIRS.last().expect("should not be empty").path()) + #[allow(static_mut_refs)] + unsafe { + DIRS.push(dir); + } + #[allow(static_mut_refs)] + Ok(unsafe { DIRS.last().expect("should not be empty").path() }) } /// # Safety /// Safe as long as we have single-threaded execution. unsafe fn pop_tempdir() -> Option { - DIRS.pop() + #[allow(static_mut_refs)] + unsafe { + DIRS.pop() + } } #[derive(Debug)] @@ -109,7 +134,7 @@ impl TempDir { /// Safe as long as we have single-threaded execution. pub unsafe fn new() -> Result { Ok(Self { - path: push_tempdir()?, + path: unsafe { push_tempdir()? }, }) } diff --git a/src/tests.rs b/src/tests.rs index d7184bd53..d5251f996 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -9,7 +9,7 @@ use std::{ use once_cell::sync::OnceCell; use rustc_version::VersionMeta; -use crate::{docker::ImagePlatform, rustc::QualifiedToolchain, TargetTriple, ToUtf8}; +use crate::{TargetTriple, ToUtf8, docker::ImagePlatform, rustc::QualifiedToolchain}; static WORKSPACE: OnceCell = OnceCell::new(); @@ -49,7 +49,7 @@ pub fn walk_dir<'a>( #[test] pub fn target_mismatch() { - use crate::{warn_host_version_mismatch, VersionMatch}; + use crate::{VersionMatch, warn_host_version_mismatch}; fn make_meta(input: &str) -> VersionMeta { let mut split = input.split(' '); diff --git a/xtask/Cargo.toml b/xtask/Cargo.toml index e0386c05c..aa2452d75 100644 --- a/xtask/Cargo.toml +++ b/xtask/Cargo.toml @@ -10,16 +10,16 @@ publish = false [dependencies] cross = { path = "..", features = ["dev"] } -walkdir = "2.3.3" -color-eyre = "0.6.2" -eyre = "0.6.8" -clap = { version = "4.1", features = ["derive", "env"] } -which = { version = "4.2", default-features = false } -serde = { version = "1", features = ["derive"] } -serde_json = "1.0" +walkdir = "2.5.0" +color-eyre = "0.6.5" +eyre = "0.6.12" +clap = { version = "4.5.47", features = ["derive", "env"] } +which = { version = "8.0.0", default-features = false } +serde = { version = "1.0.219", features = ["derive"] } +serde_json = "1.0.143" shell-words = "1.1.0" -toml = "0.7" -once_cell = "1.17" -semver = "1" -chrono = "0.4" -wildmatch = "2.1.1" +toml = "0.9.5" +once_cell = "1.21.3" +semver = "1.0.26" +chrono = "0.4.41" +wildmatch = "2.4.0" From 67a13774b64d9298c6652aa242e9b34bc3190e9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emil=20Gardstr=C3=B6m?= Date: Wed, 4 Feb 2026 09:13:40 +0100 Subject: [PATCH 02/17] force remove protected packages --- docker/linux-image.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/linux-image.sh b/docker/linux-image.sh index f739553bc..aaa138396 100755 --- a/docker/linux-image.sh +++ b/docker/linux-image.sh @@ -271,7 +271,7 @@ main() { # will prefer the system packages, which it can't find later. # removing these packages needs to occur after download via apt, # since apt-get relies on libgcc_s1 and libstdc++6. - dpkg -r --force-depends "${libgcc_packages[@]}" + dpkg -r --force-depends --force-remove-protected "${libgcc_packages[@]}" fi cd /qemu From dae26fad283667041e598788d06d4e1d0a45eada Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emil=20Gardstr=C3=B6m?= Date: Wed, 4 Feb 2026 09:15:55 +0100 Subject: [PATCH 03/17] fmt --- src/bin/commands/containers.rs | 2 +- src/docker/remote.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/bin/commands/containers.rs b/src/bin/commands/containers.rs index efc2d7a46..ea7ecd5be 100644 --- a/src/bin/commands/containers.rs +++ b/src/bin/commands/containers.rs @@ -4,7 +4,7 @@ use clap::{Args, Subcommand}; use cross::docker::ImagePlatform; use cross::rustc::{QualifiedToolchain, Toolchain}; use cross::shell::MessageInfo; -use cross::{docker, CommandExt, TargetTriple}; +use cross::{CommandExt, TargetTriple, docker}; use is_terminal::IsTerminal; #[derive(Args, Debug)] diff --git a/src/docker/remote.rs b/src/docker/remote.rs index c0acb791e..07e5cb790 100644 --- a/src/docker/remote.rs +++ b/src/docker/remote.rs @@ -216,8 +216,8 @@ impl<'a, 'b, 'c> ContainerDataVolume<'a, 'b, 'c> { ) -> Result<()> { let dirs = &self.toolchain_dirs; let reldst = dirs.cargo_mount_path_relative()?; - let copy_registry = env::var("CROSS_REMOTE_COPY_REGISTRY") - .map_or(copy_registry, |s| bool_from_envvar(&s)); + let copy_registry = + env::var("CROSS_REMOTE_COPY_REGISTRY").map_or(copy_registry, |s| bool_from_envvar(&s)); self.create_dir(&reldst, mount_prefix, msg_info)?; if copy_registry { From bb01441136786448d2359f1679431a32b57464c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emil=20Gardstr=C3=B6m?= Date: Fri, 6 Feb 2026 22:41:13 +0100 Subject: [PATCH 04/17] make /{bin,sbin,lib,lib64}/ symbolic links to /usr/{bin,sbin,lib,lib64}/ Co-authored-by: Michalng <28480705+Michalng@users.noreply.github.com> --- docker/linux-image.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docker/linux-image.sh b/docker/linux-image.sh index aaa138396..2666ec6ab 100755 --- a/docker/linux-image.sh +++ b/docker/linux-image.sh @@ -277,10 +277,15 @@ main() { # Install packages root="root-${arch}" + mkdir -p "${root}"/{bin,etc/dropbear,root,sys,dev,proc,sbin,tmp,usr/{bin,sbin},var/log} for deb in "${arch}"/*deb; do dpkg -x "${deb}" "${root}"/ done + # make libraries and binaries available as usrmerge + for d in lib lib64 bin sbin; do + ln -ns "usr/${d}" "${root}/${d}" + done cp "${root}/boot/vmlinu"* kernel From 33af4b0d4d2323a3b6178a89ccd853ce56b87f7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emil=20Gardstr=C3=B6m?= Date: Fri, 6 Feb 2026 23:25:52 +0100 Subject: [PATCH 05/17] reorder linking Co-authored-by: Michalng <28480705+Michalng@users.noreply.github.com> --- docker/linux-image.sh | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docker/linux-image.sh b/docker/linux-image.sh index 2666ec6ab..853d5a44e 100755 --- a/docker/linux-image.sh +++ b/docker/linux-image.sh @@ -278,13 +278,14 @@ main() { # Install packages root="root-${arch}" - mkdir -p "${root}"/{bin,etc/dropbear,root,sys,dev,proc,sbin,tmp,usr/{bin,sbin},var/log} - for deb in "${arch}"/*deb; do - dpkg -x "${deb}" "${root}"/ - done # make libraries and binaries available as usrmerge for d in lib lib64 bin sbin; do - ln -ns "usr/${d}" "${root}/${d}" + ln -nsd "usr/${d}" "${root}/${d}" + done + mkdir -p "${root}"/{etc/dropbear,root,sys,dev,proc,tmp,usr/{bin,sbin},var/log} + # install + for deb in "${arch}"/*deb; do + dpkg -x "${deb}" "${root}"/ done cp "${root}/boot/vmlinu"* kernel From 40dcc26db4637a1a17ee98e5287eac0c37813b81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emil=20Gardstr=C3=B6m?= Date: Sat, 7 Feb 2026 10:28:41 +0100 Subject: [PATCH 06/17] wip: attempt to fix android, not complete --- docker/android-system.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docker/android-system.sh b/docker/android-system.sh index 412758fdb..4dd5e361c 100755 --- a/docker/android-system.sh +++ b/docker/android-system.sh @@ -73,12 +73,14 @@ main() { gcc-multilib \ git \ g++-multilib \ - libncurses5 \ - libtinfo5 \ + libncurses6 \ + libtinfo6 \ make \ openssh-client \ - python \ + python-is-python3 \ python3 \ + pybind11-dev \ + libre2-dev \ xz-utils curl --retry 3 -sSfL https://storage.googleapis.com/git-repo-downloads/repo -O From 9bd30a4b5ca611f621d68cafa8281e0e998205c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emil=20Gardstr=C3=B6m?= Date: Sat, 7 Feb 2026 10:34:13 +0100 Subject: [PATCH 07/17] don't remove lists prematurely --- docker/cmake.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/docker/cmake.sh b/docker/cmake.sh index 288a9005f..f527ee019 100755 --- a/docker/cmake.sh +++ b/docker/cmake.sh @@ -48,7 +48,6 @@ main() { purge_packages rm -rf "${td}" - rm -rf /var/lib/apt/lists/* rm "${0}" } From a783824688774a1ddf601c9f35f63e60c214c022 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emil=20Gardstr=C3=B6m?= Date: Sat, 7 Feb 2026 10:44:23 +0100 Subject: [PATCH 08/17] do not set ulimit explicitly, newer buildkit inherits ulimit values --- docker/aarch64-linux-gnu-glibc.sh | 1 - docker/lib.sh | 7 ------- docker/qemu.sh | 1 - 3 files changed, 9 deletions(-) diff --git a/docker/aarch64-linux-gnu-glibc.sh b/docker/aarch64-linux-gnu-glibc.sh index 9de3a1ca1..ad8a0e07f 100755 --- a/docker/aarch64-linux-gnu-glibc.sh +++ b/docker/aarch64-linux-gnu-glibc.sh @@ -38,7 +38,6 @@ cp_gcc_archive() { } main() { - set_centos_ulimit yum install -y epel-release yum install -y gcc-aarch64-linux-gnu gcc-c++-aarch64-linux-gnu gfortran-c++-aarch64-linux-gnu binutils-aarch64-linux-gnu binutils gcc-c++ glibc-devel yum clean all diff --git a/docker/lib.sh b/docker/lib.sh index 4cb2e5ea3..4a404474c 100644 --- a/docker/lib.sh +++ b/docker/lib.sh @@ -3,12 +3,6 @@ purge_list=() -set_centos_ulimit() { - # this is a bug affecting buildkit with yum when ulimit is unlimited - # https://github.com/docker/buildx/issues/379#issuecomment-1196517905 - ulimit -n 1024000 -} - install_packages() { if grep -i ubuntu /etc/os-release; then apt-get update @@ -21,7 +15,6 @@ install_packages() { fi done else - set_centos_ulimit for pkg in "${@}"; do if ! yum list installed "${pkg}" >/dev/null 2>/dev/null; then yum install -y "${pkg}" diff --git a/docker/qemu.sh b/docker/qemu.sh index 991154f2d..afe42372e 100755 --- a/docker/qemu.sh +++ b/docker/qemu.sh @@ -58,7 +58,6 @@ build_static_libattr() { pushd "${td}" - set_centos_ulimit yum install -y gettext curl --retry 3 -sSfL "https://download.savannah.nongnu.org/releases/attr/attr-${version}.src.tar.gz" -O From 370bc16daa97b800f2e6f1bca75c80c58dd31fd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emil=20Gardstr=C3=B6m?= Date: Sat, 7 Feb 2026 22:48:19 +0100 Subject: [PATCH 09/17] fix mips and non-trixie sources --- docker/linux-image.sh | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/docker/linux-image.sh b/docker/linux-image.sh index 853d5a44e..89372e3c3 100755 --- a/docker/linux-image.sh +++ b/docker/linux-image.sh @@ -95,12 +95,16 @@ main() { # ncurses="=6.1*" ;; mipsel) + # mipsel was discontinued in trixie, so we have to use bookworm. kernel='6.*-4kc-malta' deps=(libcrypt1:"${arch}") + debsource="deb http://http.debian.net/debian/ bookworm main" ;; mips64el) + # mipsel was discontinued in trixie, so we have to use bookworm. kernel='6.*-5kc-malta' deps=(libcrypt1:"${arch}") + debsource="deb http://http.debian.net/debian/ bookworm main" ;; powerpc) # there is no buster powerpc port, so we use jessie @@ -108,9 +112,6 @@ main() { kversion='4.9.0-0.bpo.6' kernel="${kversion}-powerpc" debsource="deb http://archive.debian.org/debian jessie main" - debsource="${debsource}\ndeb http://archive.debian.org/debian jessie-backports main" - debsource="${debsource}\ndeb http://ftp.ports.debian.org/debian-ports unstable main" - debsource="${debsource}\ndeb http://ftp.ports.debian.org/debian-ports unreleased main" # archive.debian.org Release files are expired. echo "Acquire::Check-Valid-Until false;" | tee -a /etc/apt/apt.conf.d/10-nocheckvalid @@ -280,7 +281,11 @@ main() { # make libraries and binaries available as usrmerge for d in lib lib64 bin sbin; do - ln -nsd "usr/${d}" "${root}/${d}" + if [ -d "usr/${d}" ]; then + ln -nsd "usr/${d}" "${root}/${d}" + else + mkdir -p "${root}/${d}" + fi done mkdir -p "${root}"/{etc/dropbear,root,sys,dev,proc,tmp,usr/{bin,sbin},var/log} # install From ded29db7fe65e6e824629ac8e3a4c47a5bd5c4fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emil=20Gardstr=C3=B6m?= Date: Sat, 7 Feb 2026 23:11:15 +0100 Subject: [PATCH 10/17] try to fix i686 --- docker/Dockerfile.i686-unknown-linux-gnu | 8 +------- targets.toml | 2 +- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/docker/Dockerfile.i686-unknown-linux-gnu b/docker/Dockerfile.i686-unknown-linux-gnu index bdcd74899..e251bd8ce 100644 --- a/docker/Dockerfile.i686-unknown-linux-gnu +++ b/docker/Dockerfile.i686-unknown-linux-gnu @@ -22,13 +22,7 @@ RUN TARGET_ARCH=i386 /deny-debian-packages.sh \ COPY qemu.sh / RUN /qemu.sh i386 softmmu -COPY dropbear.sh / -RUN /dropbear.sh - -COPY linux-image.sh / -RUN /linux-image.sh i686 - -COPY linux-runner base-runner.sh / +COPY qemu-runner base-runner.sh / COPY toolchain.cmake /opt/toolchain.cmake ENV CROSS_TOOLCHAIN_PREFIX=i686-linux-gnu- diff --git a/targets.toml b/targets.toml index 902985038..c474c9a12 100644 --- a/targets.toml +++ b/targets.toml @@ -122,7 +122,7 @@ cpp = true dylib = true std = true run = true -runners = "native qemu-user qemu-system" +runners = "qemu-user qemu-system" [[target]] target = "loongarch64-unknown-linux-gnu" From ef1e7bdf58bc69d56b322a163e7d4cae01052608 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emil=20Gardstr=C3=B6m?= Date: Sat, 7 Feb 2026 23:33:18 +0100 Subject: [PATCH 11/17] only test compiler_builtins --- ci/test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/test.sh b/ci/test.sh index 147c6b06f..c95082242 100755 --- a/ci/test.sh +++ b/ci/test.sh @@ -72,7 +72,7 @@ main() { retry cargo fetch # don't use xargo: should have native support just from rustc rustup toolchain add nightly - cross_build --lib --target "${TARGET}" + cross_build -p compiler_builtins --lib --target "${TARGET}" popd rm -rf "${td}" From 7057dbf732634a02ee1b25205e55e0d49376d32c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emil=20Gardstr=C3=B6m?= Date: Sat, 7 Feb 2026 23:33:34 +0100 Subject: [PATCH 12/17] fetch for target only --- ci/test.sh | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/ci/test.sh b/ci/test.sh index c95082242..362e60bd7 100755 --- a/ci/test.sh +++ b/ci/test.sh @@ -22,7 +22,7 @@ workspace_test() { main() { local td= - retry cargo fetch + retry cargo fetch --target "${TARGET}" cargo build # Unset RUSTFLAGS @@ -69,7 +69,8 @@ main() { https://github.com/rust-lang-nursery/compiler-builtins "${td}" pushd "${td}" - retry cargo fetch + # FIXME: this cargo fetch will pull more than needed, need a `cargo fetch -p` + retry cargo fetch --target "${TARGET}" # don't use xargo: should have native support just from rustc rustup toolchain add nightly cross_build -p compiler_builtins --lib --target "${TARGET}" @@ -84,7 +85,7 @@ main() { pushd "${td}" cargo init --lib --name foo . - retry cargo fetch + retry cargo fetch --target "${TARGET}" cross_build --target "${TARGET}" popd @@ -96,7 +97,7 @@ main() { pushd "${td}" # test that linking works cargo init --bin --name hello . - retry cargo fetch + retry cargo fetch --target "${TARGET}" cross_build --target "${TARGET}" popd @@ -176,7 +177,7 @@ main() { git clone --depth 1 https://github.com/cross-rs/rust-cpp-accumulate "${td}" pushd "${td}" - retry cargo fetch + retry cargo fetch --target "${TARGET}" cross_build --target "${TARGET}" popd @@ -190,7 +191,7 @@ main() { git clone --depth 1 https://github.com/cross-rs/rust-cpp-hello-word "${td}" pushd "${td}" - retry cargo fetch + retry cargo fetch --target "${TARGET}" if (( ${RUN:-0} )); then cross_run --target "${TARGET}" else @@ -208,7 +209,7 @@ main() { pushd "${td}" cargo init --bin --name hello . - retry cargo fetch + retry cargo fetch --target "${TARGET}" RUSTFLAGS="$RUSTFLAGS -C target-feature=-crt-static" \ cross_build --target "${TARGET}" popd @@ -225,7 +226,7 @@ main() { https://github.com/cross-rs/rust-cmake-hello-world "${td}" pushd "${td}" - retry cargo fetch + retry cargo fetch --target "${TARGET}" if [[ "${TARGET}" == "arm-linux-androideabi" ]]; then # ARMv5te isn't supported anymore by Android, which produces missing # symbol errors with re2 like `__libcpp_signed_lock_free`. From 414fa1db019e23ef1457256ecf020d2f98b5a0e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emil=20Gardstr=C3=B6m?= Date: Sun, 8 Feb 2026 22:36:29 +0100 Subject: [PATCH 13/17] fix root --- docker/linux-image.sh | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/docker/linux-image.sh b/docker/linux-image.sh index 89372e3c3..622236786 100755 --- a/docker/linux-image.sh +++ b/docker/linux-image.sh @@ -278,16 +278,12 @@ main() { # Install packages root="root-${arch}" - + mkdir -p "${root}" # make libraries and binaries available as usrmerge for d in lib lib64 bin sbin; do - if [ -d "usr/${d}" ]; then - ln -nsd "usr/${d}" "${root}/${d}" - else - mkdir -p "${root}/${d}" - fi + ln -nsd "usr/${d}" "${root}/${d}" done - mkdir -p "${root}"/{etc/dropbear,root,sys,dev,proc,tmp,usr/{bin,sbin},var/log} + mkdir -p "${root}"/{etc/dropbear,root,sys,dev,proc,tmp,usr/{bin,sbin,lib,lib64},var/log} # install for deb in "${arch}"/*deb; do dpkg -x "${deb}" "${root}"/ From 710385d28d2441abb912b51f738d9e304042f0d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emil=20Gardstr=C3=B6m?= Date: Sun, 8 Feb 2026 22:39:07 +0100 Subject: [PATCH 14/17] fix i686? --- docker/Dockerfile.i686-unknown-linux-gnu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile.i686-unknown-linux-gnu b/docker/Dockerfile.i686-unknown-linux-gnu index e251bd8ce..86b2742f4 100644 --- a/docker/Dockerfile.i686-unknown-linux-gnu +++ b/docker/Dockerfile.i686-unknown-linux-gnu @@ -44,4 +44,4 @@ ENV CARGO_TARGET_I686_UNKNOWN_LINUX_GNU_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \ CROSS_CMAKE_CRT=gnu \ CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC -m32 -march=i686" -RUN sed -e "s#@DEFAULT_QEMU_LD_PREFIX@#$QEMU_LD_PREFIX#g" -i /linux-runner +RUN sed -e "s#@DEFAULT_QEMU_LD_PREFIX@#$QEMU_LD_PREFIX#g" -i /qemu-runner From 9dcc112605a0f25ffd3440aff98c6407866a5b4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emil=20Gardstr=C3=B6m?= Date: Sun, 8 Feb 2026 22:39:42 +0100 Subject: [PATCH 15/17] use https --- docker/linux-image.sh | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/docker/linux-image.sh b/docker/linux-image.sh index 622236786..3c69038c0 100755 --- a/docker/linux-image.sh +++ b/docker/linux-image.sh @@ -59,8 +59,8 @@ main() { local arch="${1}" \ kversion=6.12.41+deb13 - local debsource="deb http://http.debian.net/debian/ trixie main" - debsource="${debsource}\ndeb http://security.debian.org/ trixie-security main" + local debsource="deb https://http.debian.net/debian/ trixie main" + debsource="${debsource}\ndeb https://security.debian.org/ trixie-security main" local dropbear="dropbear-bin" @@ -89,8 +89,8 @@ main() { mips) # mips was discontinued in bullseye, so we have to use buster. libgcc="libgcc1" - debsource="deb http://http.debian.net/debian/ buster main" - debsource="${debsource}\ndeb http://security.debian.org/ buster/updates main" + debsource="deb https://http.debian.net/debian/ buster main" + debsource="${debsource}\ndeb https://security.debian.org/ buster/updates main" kernel='4.*-4kc-malta' # ncurses="=6.1*" ;; @@ -98,20 +98,20 @@ main() { # mipsel was discontinued in trixie, so we have to use bookworm. kernel='6.*-4kc-malta' deps=(libcrypt1:"${arch}") - debsource="deb http://http.debian.net/debian/ bookworm main" + debsource="deb https://http.debian.net/debian/ bookworm main" ;; mips64el) # mipsel was discontinued in trixie, so we have to use bookworm. kernel='6.*-5kc-malta' deps=(libcrypt1:"${arch}") - debsource="deb http://http.debian.net/debian/ bookworm main" + debsource="deb https://http.debian.net/debian/ bookworm main" ;; powerpc) # there is no buster powerpc port, so we use jessie # use a more recent kernel from backports kversion='4.9.0-0.bpo.6' kernel="${kversion}-powerpc" - debsource="deb http://archive.debian.org/debian jessie main" + debsource="deb https://archive.debian.org/debian jessie main" # archive.debian.org Release files are expired. echo "Acquire::Check-Valid-Until false;" | tee -a /etc/apt/apt.conf.d/10-nocheckvalid @@ -126,8 +126,8 @@ main() { arch=ppc64 # https://packages.debian.org/en/sid/linux-image-powerpc64 kernel='6.*-powerpc64' - debsource="deb http://ftp.ports.debian.org/debian-ports unstable main" - debsource="${debsource}\ndeb http://ftp.ports.debian.org/debian-ports unreleased main" + debsource="deb https://ftp.ports.debian.org/debian-ports unstable main" + debsource="${debsource}\ndeb https://ftp.ports.debian.org/debian-ports unreleased main" # sid version of dropbear requires these dependencies deps=(libcrypt1:"${arch}") ;; @@ -138,7 +138,7 @@ main() { ;; riscv64) kernel='6.*-riscv64' - debsource="deb http://deb.debian.org/debian unstable main" + debsource="deb https://deb.debian.org/debian unstable main" deps=(libcrypt1:"${arch}") ;; s390x) @@ -150,8 +150,8 @@ main() { # there is no stable port # https://packages.debian.org/en/sid/linux-image-sparc64 kernel='6.*-sparc64' - debsource="deb http://ftp.ports.debian.org/debian-ports unstable main" - debsource="${debsource}\ndeb http://ftp.ports.debian.org/debian-ports unreleased main" + debsource="deb https://ftp.ports.debian.org/debian-ports unstable main" + debsource="${debsource}\ndeb https://ftp.ports.debian.org/debian-ports unreleased main" # sid version of dropbear requires these dependencies deps=(libcrypt1:"${arch}") ;; From 783b412e51ca0e524e9adb134365698e338558b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emil=20Gardstr=C3=B6m?= Date: Sun, 8 Feb 2026 22:41:26 +0100 Subject: [PATCH 16/17] fix redirected deb sources --- docker/linux-image.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docker/linux-image.sh b/docker/linux-image.sh index 3c69038c0..093135796 100755 --- a/docker/linux-image.sh +++ b/docker/linux-image.sh @@ -59,7 +59,7 @@ main() { local arch="${1}" \ kversion=6.12.41+deb13 - local debsource="deb https://http.debian.net/debian/ trixie main" + local debsource="deb https://deb.debian.org/debian trixie main" debsource="${debsource}\ndeb https://security.debian.org/ trixie-security main" local dropbear="dropbear-bin" @@ -89,7 +89,7 @@ main() { mips) # mips was discontinued in bullseye, so we have to use buster. libgcc="libgcc1" - debsource="deb https://http.debian.net/debian/ buster main" + debsource="deb https://deb.debian.org/debian buster main" debsource="${debsource}\ndeb https://security.debian.org/ buster/updates main" kernel='4.*-4kc-malta' # ncurses="=6.1*" @@ -98,13 +98,13 @@ main() { # mipsel was discontinued in trixie, so we have to use bookworm. kernel='6.*-4kc-malta' deps=(libcrypt1:"${arch}") - debsource="deb https://http.debian.net/debian/ bookworm main" + debsource="deb https://deb.debian.org/debian bookworm main" ;; mips64el) # mipsel was discontinued in trixie, so we have to use bookworm. kernel='6.*-5kc-malta' deps=(libcrypt1:"${arch}") - debsource="deb https://http.debian.net/debian/ bookworm main" + debsource="deb https://deb.debian.org/debian bookworm main" ;; powerpc) # there is no buster powerpc port, so we use jessie From 53708d20f50a95ee464a245cc8d4dc9f64f49149 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emil=20Gardstr=C3=B6m?= Date: Sun, 8 Feb 2026 23:05:11 +0100 Subject: [PATCH 17/17] new packagesite on 13 is only available as .txz now, seems very broken :3 preferably maybe update to 15/16 --- docker/freebsd-install.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docker/freebsd-install.sh b/docker/freebsd-install.sh index 2de040699..36d056f0a 100755 --- a/docker/freebsd-install.sh +++ b/docker/freebsd-install.sh @@ -15,6 +15,7 @@ FREEBSD_HTTP_TCP_SOURCES=( ) FREEBSD_PACKAGEDIR="/opt/freebsd-packagesite" FREEBSD_PACKAGESITE="${FREEBSD_PACKAGEDIR}/packagesite.yaml" +FREEBSD_RELEASE="release_5" FREEBSD_TARGET="${ARCH}-unknown-freebsd${FREEBSD_MAJOR}" FREEBSD_DEFAULT_MIRROR="pkg.freebsd.org" # NOTE: these mirrors were known to work as of 2022-11-28. @@ -36,7 +37,7 @@ FREEBSD_BACKUP_MIRRORS=( # and `mirror` for those without the scheme for consistent naming. freebsd_package_source() { local url="${1}" - echo "${url}/FreeBSD:${FREEBSD_MAJOR}:${FREEBSD_ARCH}/quarterly" + echo "${url}/FreeBSD:${FREEBSD_MAJOR}:${FREEBSD_ARCH}/${FREEBSD_RELEASE}" } freebsd_mirror_works() { @@ -121,8 +122,8 @@ setup_freebsd_packagesite() { pkg_source=$(freebsd_package_source "${url}") mkdir -p "${FREEBSD_PACKAGEDIR}" - curl --retry 3 -sSfL "${pkg_source}/packagesite.tzst" -O - tar -C "${FREEBSD_PACKAGEDIR}" --zstd -xf packagesite.tzst + curl --retry 3 -sSfL "${pkg_source}/packagesite.txz" -O + tar -C "${FREEBSD_PACKAGEDIR}" -xJf packagesite.txz } # don't provide the mirror as a positional argument, so it can be optional