portable server with embedded for musl has different feature
This commit is contained in:
171
packaging/musl/default.nix
Normal file
171
packaging/musl/default.nix
Normal file
@@ -0,0 +1,171 @@
|
||||
{ pkgs, source, version }:
|
||||
|
||||
let
|
||||
muslPkgs = pkgs.pkgsMusl;
|
||||
postgresqlVersion = "17.10";
|
||||
postgresqlArchiveVersion = "17.10.0";
|
||||
archiveName = "postgresql-${postgresqlArchiveVersion}-x86_64-unknown-linux-musl.tar.gz";
|
||||
|
||||
bootstrapInput = pname: inputs:
|
||||
pkgs.lib.findFirst
|
||||
(input: (input.pname or "") == pname)
|
||||
(throw "Nixpkgs does not expose ${pname} for the musl toolchain")
|
||||
inputs;
|
||||
bootstrapRustPlatform = muslPkgs.makeRustPlatform {
|
||||
rustc = bootstrapInput
|
||||
"rustc-bootstrap"
|
||||
muslPkgs.rustc-unwrapped.nativeBuildInputs;
|
||||
cargo = bootstrapInput
|
||||
"cargo-bootstrap"
|
||||
muslPkgs.cargo.nativeBuildInputs;
|
||||
};
|
||||
|
||||
staticOpenSSL = muslPkgs.openssl.overrideAttrs (old: {
|
||||
configureFlags =
|
||||
builtins.filter (flag: flag != "shared") old.configureFlags
|
||||
++ [ "no-shared" ];
|
||||
doCheck = false;
|
||||
});
|
||||
|
||||
postgresqlSource = pkgs.fetchurl {
|
||||
url = "https://ftp.postgresql.org/pub/source/v${postgresqlVersion}/postgresql-${postgresqlVersion}.tar.bz2";
|
||||
hash = "sha256-B4oDUW3NvbcF/sr0Feo9E6lWxYnkbwn+1ooG+wBZjJA=";
|
||||
};
|
||||
|
||||
postgresqlArchive = muslPkgs.stdenv.mkDerivation {
|
||||
pname = "komp-ac-postgresql-musl";
|
||||
version = postgresqlArchiveVersion;
|
||||
src = postgresqlSource;
|
||||
|
||||
nativeBuildInputs = [
|
||||
pkgs.bison
|
||||
pkgs.file
|
||||
pkgs.flex
|
||||
pkgs.gnutar
|
||||
pkgs.gzip
|
||||
pkgs.perl
|
||||
];
|
||||
|
||||
configurePhase = ''
|
||||
runHook preConfigure
|
||||
./configure \
|
||||
--prefix="$out/postgresql" \
|
||||
--disable-nls \
|
||||
--without-gssapi \
|
||||
--without-icu \
|
||||
--without-ldap \
|
||||
--without-libxml \
|
||||
--without-libxslt \
|
||||
--without-llvm \
|
||||
--without-lz4 \
|
||||
--without-openssl \
|
||||
--without-pam \
|
||||
--without-readline \
|
||||
--without-systemd \
|
||||
--without-zlib \
|
||||
--without-zstd
|
||||
runHook postConfigure
|
||||
'';
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
make -j"$NIX_BUILD_CORES"
|
||||
make -C contrib/btree_gist -j"$NIX_BUILD_CORES"
|
||||
runHook postBuild
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
make install-strip
|
||||
make -C contrib/btree_gist install
|
||||
|
||||
"$CC" -static -Os -s -Wall -Wextra -Werror \
|
||||
-o postgresql-launcher \
|
||||
${./postgresql-launcher.c}
|
||||
|
||||
mkdir -p "$out/postgresql/libexec"
|
||||
for tool in "$out"/postgresql/bin/*; do
|
||||
toolName="''${tool##*/}"
|
||||
mv "$tool" "$out/postgresql/libexec/$toolName"
|
||||
cp postgresql-launcher "$out/postgresql/bin/$toolName"
|
||||
done
|
||||
cp ${muslPkgs.musl}/lib/ld-musl-x86_64.so.1 \
|
||||
"$out/postgresql/lib/ld-musl-x86_64.so.1"
|
||||
|
||||
file "$out/postgresql/bin/postgres" | grep -q 'statically linked'
|
||||
"$out/postgresql/bin/postgres" --version
|
||||
|
||||
mkdir postgresql-data postgresql-socket
|
||||
"$out/postgresql/bin/initdb" \
|
||||
--auth=trust \
|
||||
--no-locale \
|
||||
-D "$PWD/postgresql-data"
|
||||
"$out/postgresql/bin/pg_ctl" \
|
||||
-D "$PWD/postgresql-data" \
|
||||
-l "$PWD/postgresql.log" \
|
||||
-o "-k $PWD/postgresql-socket -p 55432" \
|
||||
-w start
|
||||
"$out/postgresql/bin/psql" \
|
||||
-h "$PWD/postgresql-socket" \
|
||||
-p 55432 \
|
||||
-d postgres \
|
||||
-c "CREATE EXTENSION btree_gist; SET TIME ZONE 'UTC';"
|
||||
"$out/postgresql/bin/pg_ctl" \
|
||||
-D "$PWD/postgresql-data" \
|
||||
-m fast \
|
||||
-w stop
|
||||
|
||||
tar -C "$out" -czf "$out/${archiveName}" postgresql
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
dontPatchELF = true;
|
||||
dontStrip = true;
|
||||
};
|
||||
in
|
||||
bootstrapRustPlatform.buildRustPackage {
|
||||
pname = "komp-ac-server-portable";
|
||||
inherit version source;
|
||||
src = source;
|
||||
|
||||
cargoLock.lockFile = ../../Cargo.lock;
|
||||
cargoBuildFlags = [
|
||||
"--package"
|
||||
"server"
|
||||
"--no-default-features"
|
||||
"--features"
|
||||
"portable-postgres"
|
||||
];
|
||||
auditable = false;
|
||||
doCheck = false;
|
||||
|
||||
nativeBuildInputs = [
|
||||
pkgs.binutils
|
||||
pkgs.cmake
|
||||
pkgs.file
|
||||
pkgs.pkg-config
|
||||
pkgs.protobuf
|
||||
];
|
||||
buildInputs = [ staticOpenSSL ];
|
||||
|
||||
OPENSSL_STATIC = "1";
|
||||
OPENSSL_LIB_DIR = "${staticOpenSSL.out}/lib";
|
||||
OPENSSL_INCLUDE_DIR = "${staticOpenSSL.dev}/include";
|
||||
POSTGRESQL_VERSION = "=${postgresqlArchiveVersion}";
|
||||
KOMP_AC_POSTGRESQL_ARCHIVE = "${postgresqlArchive}/${archiveName}";
|
||||
KOMP_AC_POSTGRESQL_VERSION = postgresqlArchiveVersion;
|
||||
SQLX_OFFLINE = "true";
|
||||
RUSTFLAGS = "-Ctarget-feature=+crt-static";
|
||||
|
||||
postInstall = ''
|
||||
file "$out/bin/server" | grep -q 'statically linked'
|
||||
! readelf -l "$out/bin/server" | grep -q 'Requesting program interpreter'
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "Portable komp_ac server with embedded musl PostgreSQL";
|
||||
license = pkgs.lib.licenses.agpl3Plus;
|
||||
platforms = [ "x86_64-linux" ];
|
||||
mainProgram = "server";
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user