Skip to content

Instantly share code, notes, and snippets.

@jasoncarr0
Forked from sigma/redis-mini.nix
Last active May 1, 2023 14:51
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jasoncarr0/8a745d70b84331382795f37020884ebc to your computer and use it in GitHub Desktop.
Save jasoncarr0/8a745d70b84331382795f37020884ebc to your computer and use it in GitHub Desktop.
minimal #redis #docker image with #nix
{ pkgs ? import <nixpkgs> {} }:
with pkgs;
let
su_exec = pkgs.stdenv.mkDerivation {
name = "su-exec-0.2";
src = fetchurl {
url = https://github.com/ncopa/su-exec/archive/v0.2.tar.gz;
sha256 = "09ayhm4w7ahvwk6wpjimvgv8lx89qx31znkywqmypkp6rpccnjpc";
};
preBuild = ''
makeFlagsArray=(CC="${musl.dev}/bin/musl-gcc -static"
CFLAGS="-I${musl.dev}/include"
LDFLAGS="-L${musl.dev}/lib")
'';
buildFlags = "su-exec-static";
installPhase = ''mkdir -p $out/bin && cp su-exec-static $out/bin/su-exec'';
};
redis_2_8_23 = pkgs.redis.overrideDerivation (attrs: rec {
version = "2.8.23";
name = "redis-${version}";
src = fetchurl {
url = "http://download.redis.io/releases/${name}.tar.gz";
sha256 = "1kjsx79jhhssh5k9v17s9mifaclkl6mfsrsv0cvi583qyiw9gizk";
};
});
redis_3_0_7 = pkgs.redis.overrideDerivation (attrs: rec {
version = "3.0.7";
name = "redis-${version}";
src = fetchurl {
url = "http://download.redis.io/releases/${name}.tar.gz";
sha256 = "08vzfdr67gp3lvk770qpax2c5g2sx8hn6p64jn3jddrvxb2939xj";
};
postInstall = ''
rm -f $out/bin/redis-{benchmark,check-aof,check-dump,cli}
'';
});
redis_3_0_7_musl = redis_3_0_7.overrideDerivation (attrs: rec {
version = "3.0.7-mini";
preBuild = ''
makeFlagsArray=(PREFIX="$out"
CC="${musl.dev}/bin/musl-gcc -static"
CFLAGS="-I${musl.dev}/include"
LDFLAGS="-L${musl.dev}/lib")
'';
});
redisImage = redis: baseImage: dockerTools.buildImage {
name = "redis";
tag = redis.version;
fromImage = baseImage;
runAsRoot = ''
#!${stdenv.shell}
export PATH=/bin:/usr/bin:/sbin:/usr/sbin:$PATH
${if baseImage == null then dockerTools.shadowSetup else ""}
groupadd -r redis
useradd -r -g redis -d /data -M redis
mkdir /data
chown redis:redis /data
${gnused}/bin/sed -i 's:/nix/.*bash.*::' etc/passwd
${gnused}/bin/sed -i 's:/nix/.*bash.*::' etc/passwd-
'';
config = {
Cmd = [ "${su_exec}/bin/su-exec" "redis" "${redis}/bin/redis-server" ];
ExposedPorts = {
"6379/tcp" = {};
};
WorkingDir = "/data";
Volumes = {
"/data" = {};
};
};
};
debianImage = dockerTools.pullImage {
imageName = "debian";
sha256 = "08w22gx6hmmq75rybqzrxs03nzq2k39lrcj291yhsc08p9d9l9cj";
};
in {
redisDocker_3_0_7 = redisImage redis_3_0_7 null;
redisDocker_2_8_23 = redisImage redis_2_8_23 null;
redisOnDebian = redisImage redis_3_0_7 debianImage;
redisMini = redisImage redis_3_0_7_musl null;
}
@jasoncarr0
Copy link
Author

Updated for newer nixpkgs, musl -> musl.dev, add sed lines to remove bash from /etc/passwd

@573
Copy link

573 commented Feb 18, 2021

Updated for newer nixpkgs, musl -> musl.dev, add sed lines to remove bash from /etc/passwd

Thanks for the patch:

Had this working past the old version which errored:

build flags: SHELL=/nix/store/cwnwyy82wrq53820z6yg7869z8dl5s7g-bash-4.4-p23/bin/bash CC=/nix/store/s8j344acf7af9pwc0sfqm7pzimdhva44-musl-1.2.1/bin/musl-gcc\ -static CFLAGS=-I/nix/store/s8j344acf7af9pwc0sfqm7pzimdhva44-musl-1.2.1/include LDFLAGS=-L/nix/store/s8j344acf7af9pwc0sfqm7pzimdhva44-musl-1.2.1/lib su-exec-static
/nix/store/s8j344acf7af9pwc0sfqm7pzimdhva44-musl-1.2.1/bin/musl-gcc -static -I/nix/store/s8j344acf7af9pwc0sfqm7pzimdhva44-musl-1.2.1/include -o su-exec-static su-exec.c -static -L/nix/store/s8j344acf7af9pwc0sfqm7pzimdhva44-musl-1.2.1/lib
/nix/store/cwnwyy82wrq53820z6yg7869z8dl5s7g-bash-4.4-p23/bin/bash: /nix/store/s8j344acf7af9pwc0sfqm7pzimdhva44-musl-1.2.1/bin/musl-gcc: No such file or directory
make: *** [Makefile:14: su-exec-static] Error 127

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment