Compare commits

...

12 Commits

Author SHA1 Message Date
Christian Visintin 99b76f2fd9 ci: disable unused GnuTLS compression backends
Linux musl probe / build-x86_64-unknown-linux-musl (push) Has been cancelled
Linux musl probe / build-aarch64-unknown-linux-musl (push) Has been cancelled
2026-09-03 09:01:12 +02:00
Christian Visintin a57f020e4a ci: restore workspace before Cargo patch
Linux musl probe / build-x86_64-unknown-linux-musl (push) Has been cancelled
Linux musl probe / build-aarch64-unknown-linux-musl (push) Has been cancelled
2026-09-02 23:34:39 +02:00
Christian Visintin da23372d4b ci: build musl releases with static Samba dependencies 2026-09-02 23:30:07 +02:00
Christian Visintin 5304bc3224 ci: use compatible static gettext package 2026-09-02 23:22:12 +02:00
Christian Visintin 6de1cdb39c ci: add static gettext dependency 2026-09-02 23:22:12 +02:00
Christian Visintin 57a710eff5 ci: align musl dependencies with pavao 2026-09-02 23:22:12 +02:00
Christian Visintin 6e6d077532 ci: install samba perl parser dependency 2026-09-02 23:22:12 +02:00
Christian Visintin 63f7f0d084 ci: fix temporary samba patch rewrite 2026-09-02 23:22:12 +02:00
Christian Visintin 9d2c3746d0 ci: probe musl samba configure workaround 2026-09-02 23:22:11 +02:00
Christian Visintin 0b787fee34 ci: add static musl crypto dependencies 2026-09-02 23:22:11 +02:00
Christian Visintin 48d3701678 ci: probe static musl release builds 2026-09-02 23:22:11 +02:00
Christian Visintin 622a64ac58 build: bump remotefs-smb 0.5.0 2026-09-02 22:27:56 +02:00
4 changed files with 181 additions and 25 deletions
+154
View File
@@ -0,0 +1,154 @@
name: Linux musl probe
on:
push:
branches:
- "test/440-musl-release"
paths:
- ".github/workflows/musl.yml"
- "Cargo.lock"
- "Cargo.toml"
- "src/**"
workflow_dispatch:
permissions:
contents: read
jobs:
build:
name: build-${{ matrix.target }}
strategy:
fail-fast: false
matrix:
include:
- target: x86_64-unknown-linux-musl
runner: ubuntu-24.04
- target: aarch64-unknown-linux-musl
runner: ubuntu-24.04-arm
runs-on: ${{ matrix.runner }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Build and audit static binary
env:
TARGET: ${{ matrix.target }}
run: |
docker run --rm \
--env TARGET \
--volume "$GITHUB_WORKSPACE:/work" \
--workdir /work \
rust:1.98-alpine3.22 \
sh -euxc '
apk add --no-cache \
bison \
binutils \
build-base \
file \
flex \
git \
gnutls-dev \
libgit2-dev \
libgit2-static \
libunistring-dev \
libunistring-static \
linux-headers \
openssl-dev \
openssl-libs-static \
perl \
perl-parse-yapp \
pkgconf \
python3 \
wget \
xz \
zlib-dev \
zlib-static
rustup target add "$TARGET"
cargo fetch --locked
NATIVE_CFLAGS="-O2 -fPIC"
if [ "$TARGET" = "aarch64-unknown-linux-musl" ]; then
NATIVE_CFLAGS="$NATIVE_CFLAGS -mno-outline-atomics"
fi
export CFLAGS="$NATIVE_CFLAGS"
mkdir -p /tmp/native
wget -q https://ftp.gnu.org/gnu/nettle/nettle-3.10.1.tar.gz \
-O /tmp/native/nettle.tar.gz
tar -xzf /tmp/native/nettle.tar.gz -C /tmp/native
cd /tmp/native/nettle-3.10.1
./configure \
--prefix=/tmp/native/nettle \
--disable-shared \
--enable-static \
--disable-documentation \
--enable-mini-gmp
make -j$(getconf _NPROCESSORS_ONLN)
make install
wget -q https://www.gnupg.org/ftp/gcrypt/gnutls/v3.8/gnutls-3.8.13.tar.xz \
-O /tmp/native/gnutls.tar.xz
tar -xf /tmp/native/gnutls.tar.xz -C /tmp/native
cd /tmp/native/gnutls-3.8.13
PKG_CONFIG_PATH=/tmp/native/nettle/lib/pkgconfig \
./configure \
--prefix=/tmp/native/gnutls \
--disable-shared \
--enable-static \
--disable-doc \
--disable-tests \
--disable-nls \
--disable-hardware-acceleration \
--with-nettle-mini \
--with-included-libtasn1 \
--with-included-unistring \
--without-idn \
--without-p11-kit \
--without-brotli \
--without-zstd \
--without-zlib
make -j$(getconf _NPROCESSORS_ONLN)
make install
mkdir -p /tmp/native/pkgconfig
sed \
-e "s#^Libs:.*#Libs: -L/tmp/native/gnutls/lib -lgnutls -latomic -L/tmp/native/nettle/lib -lhogweed -lnettle#" \
-e "/^Requires.private:/d" \
-e "s#^Cflags:.*#Cflags: -I/tmp/native/gnutls/include -I/tmp/native/nettle/include#" \
/tmp/native/gnutls/lib/pkgconfig/gnutls.pc \
> /tmp/native/pkgconfig/gnutls.pc
cd /work
PAVAO_SRC=$(find "${CARGO_HOME:-/usr/local/cargo}/registry/src" \
-type d -name "pavao-src-4.24.6" -print -quit)
test -n "$PAVAO_SRC"
cp -R "$PAVAO_SRC" /tmp/pavao-src
perl -0pi -e "s#( \\\"lib/replace/replace\\.c\\\",\\n)#\$1 \\\"lib/replace/closefrom.c\\\",\\n \\\"lib/replace/strptime.c\\\",\\n#" \
/tmp/pavao-src/src/lib.rs
cat >> Cargo.toml <<EOF
[patch.crates-io]
pavao-src = { path = "/tmp/pavao-src" }
EOF
cargo update -p pavao-src@4.24.6
export PKG_CONFIG_ALL_STATIC=1
export PKG_CONFIG_PATH=/tmp/native/pkgconfig:/tmp/native/nettle/lib/pkgconfig:/usr/lib/pkgconfig
export RUSTFLAGS="-C target-feature=+crt-static -C link-arg=-static"
cargo build --locked --release --target "$TARGET" \
--features smb-vendored
file "target/$TARGET/release/termscp"
readelf -l "target/$TARGET/release/termscp" | \
tee /tmp/program-headers.txt
readelf -d "target/$TARGET/release/termscp" | \
tee /tmp/dynamic-section.txt
! grep -q INTERP /tmp/program-headers.txt
! grep -q NEEDED /tmp/dynamic-section.txt
'
- name: Upload verified binary
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: ${{ matrix.target }}
path: target/${{ matrix.target }}/release/termscp
if-no-files-found: error
retention-days: 7
Generated
+22 -22
View File
@@ -241,9 +241,9 @@ dependencies = [
[[package]]
name = "aws-lc-rs"
version = "1.18.0"
version = "1.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ce2b2dcc879c3bae0d371e77c99f2238400ef24ec001394befa67b6e543add9e"
checksum = "b281d307588d634de920874890732659e2e7672f72b5e10e81badc1a8a83621e"
dependencies = [
"aws-lc-sys",
"untrusted 0.7.1",
@@ -252,9 +252,9 @@ dependencies = [
[[package]]
name = "aws-lc-sys"
version = "0.44.0"
version = "0.45.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f09fae7be8bb3174e05c6afdb34199e6dc0c7c04ba9fa237b1967adfbde27483"
checksum = "9bff6c3b54fad79a2e60b8102caf565819711497c1f5f092f49508e2f5c31b27"
dependencies = [
"cc",
"cmake",
@@ -3418,9 +3418,9 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
[[package]]
name = "libredox"
version = "0.1.21"
version = "0.1.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7955dfc218a8afb29dfeffd540e3a6e96baeb94fe7138228dd7cc6937fbbf96"
checksum = "8d8f1ea3f21fd3405dcaf6c9b5c1630af9afc422d9073ea39c5f6d6c772e08ed"
dependencies = [
"libc",
]
@@ -3564,9 +3564,9 @@ dependencies = [
[[package]]
name = "mio"
version = "1.2.2"
version = "1.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427"
checksum = "4b18443e9c262bfe8fa82f51666e2642c53393f7e5c27b3e1aeab922cff5b9d8"
dependencies = [
"libc",
"log",
@@ -3844,9 +3844,9 @@ checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
[[package]]
name = "open"
version = "5.4.2"
version = "5.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ade3be4664bc1ef537ce133015f04c176b737815c2ba9fd60edf212d6e90dd55"
checksum = "7c603ab8300cf18bc3b14146b19fe3dfcc4843ae5a400cd0e7a30b95aa366634"
dependencies = [
"is-wsl",
"libc",
@@ -4120,9 +4120,9 @@ checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42"
[[package]]
name = "pavao"
version = "0.3.0"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6bf4bff78f032402eb6b89a72801f8d4b5ef57e79d33139f6e4fb214e823a854"
checksum = "637444e8cbc91d23a07688c41df5dcf5136c34964c8b746c4e40fc2127ef320d"
dependencies = [
"cfg_aliases",
"lazy_static",
@@ -4134,9 +4134,9 @@ dependencies = [
[[package]]
name = "pavao-src"
version = "4.22.11"
version = "4.24.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "48289686720a0215553faa63f3211f0faa57c698287fb1ac41d3fbd423ed1f12"
checksum = "70a3972383d24edd11da87205cae6d81894919821deb3c336bd715027a630b0b"
dependencies = [
"cc",
"git2",
@@ -4145,9 +4145,9 @@ dependencies = [
[[package]]
name = "pavao-sys"
version = "0.3.0"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8c6a44c550ef244c0a19f0a2201687af1853b0b9d1cfaa989a9312942c676adf"
checksum = "9d77a20ad3376d6f0194f02b7314b4e89402eef920a7c78d7d970d3f2dcd4ac5"
dependencies = [
"cc",
"libc",
@@ -4908,9 +4908,9 @@ dependencies = [
[[package]]
name = "remotefs-smb"
version = "0.4.1"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c5e5b1fc4afd54e729393b3b44b537583c8e815d0c8e41483799001084e5fe96"
checksum = "31220bffe8a75a01411fab30d90270ce40a8fdf021521a9c9f2cfecc6a29f5d5"
dependencies = [
"filetime",
"libc",
@@ -5948,9 +5948,9 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
[[package]]
name = "smallvec"
version = "1.15.2"
version = "1.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
checksum = "b9be42f50aa861c555654aa3a37f52f4b1074bacf4e48fe0ef7fa584e80f1f0f"
[[package]]
name = "smawk"
@@ -6520,9 +6520,9 @@ dependencies = [
[[package]]
name = "toml"
version = "1.1.4+spec-1.1.0"
version = "1.1.5+spec-1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3aace63f4bbcdfc2c965b059de67119c89c4017a70d633be6c104910f67056f5"
checksum = "12c0ba9680044b4ce98d391a62094047eada0d64860b80166c39f4a6b5640785"
dependencies = [
"indexmap 2.14.1",
"serde_core",
+1 -1
View File
@@ -62,7 +62,7 @@ remotefs = "0.3"
remotefs-aws-s3 = "0.4"
remotefs-gcs = "0.1"
remotefs-kube = "0.4"
remotefs-smb = { version = "0.4", optional = true }
remotefs-smb = { version = "0.5", default-features = false, optional = true, features = ["find", "pavao"] }
remotefs-ssh = { version = "0.9", default-features = false, features = ["russh"] }
remotefs-webdav = "0.2"
rpassword = "7"
+4 -2
View File
@@ -12,9 +12,11 @@ use remotefs_gcs::credentials::service_account;
use remotefs_gcs::{GoogleCloudStorageCredentials, GoogleCloudStorageFs};
use remotefs_kube::KubeMultiPodFs as KubeFs;
#[cfg(smb)]
use remotefs_smb::{SmbCredentials, SmbFs};
use remotefs_smb::{PavaoSmbCredentials as SmbCredentials, PavaoSmbFs as SmbFs};
#[cfg(smb_unix)]
use remotefs_smb::{SmbDialect as RemoteSmbDialect, SmbOptions};
use remotefs_smb::{PavaoSmbOptions as SmbOptions, SmbDialect as RemoteSmbDialect};
#[cfg(smb_windows)]
use remotefs_smb::{WNetSmbCredentials as SmbCredentials, WNetSmbFs as SmbFs};
use remotefs_ssh::{
NoCheckServerKey, RusshSession as SshSession, ScpFs, SftpFs, SshAgentIdentity,
SshConfigParseRule, SshOpts,