39 lines
1.3 KiB
Nix
39 lines
1.3 KiB
Nix
{ pkgs }:
|
|
pkgs.writeShellApplication {
|
|
name = "docker2libc";
|
|
|
|
runtimeInputs = with pkgs; [
|
|
nix-output-monitor
|
|
openssh
|
|
coreutils
|
|
nix
|
|
attic-client
|
|
];
|
|
|
|
text = ''
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
image="''${1:-tmp-elf-extract}"
|
|
|
|
docker build -t "$image" .
|
|
|
|
cid="$(docker create "$image" /bin/true)"
|
|
cleanup() {
|
|
docker rm -f "$cid" >/dev/null 2>&1 || true
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
libc_path="$(docker run --rm --entrypoint /bin/sh "$image" -c 'for p in /lib/x86_64-linux-gnu/libc.so.6 /usr/lib/x86_64-linux-gnu/libc.so.6 /lib64/libc.so.6 /lib/libc.so.6; do if [ -e "$p" ]; then echo "$p"; exit 0; fi; done; exit 1')"
|
|
ld_path="$(docker run --rm --entrypoint /bin/sh "$image" -c 'for p in /lib64/ld-linux-x86-64.so.2 /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 /lib/ld-linux-x86-64.so.2; do if [ -e "$p" ]; then echo "$p"; exit 0; fi; done; find /lib /usr/lib /lib64 -type f \( -name "ld-linux*.so*" -o -name "ld-*.so*" \) 2>/dev/null | head -n 1')"
|
|
|
|
[ -n "$libc_path" ] || { echo "libc.so.6 not found" >&2; exit 1; }
|
|
[ -n "$ld_path" ] || { echo "ld-linux not found" >&2; exit 1; }
|
|
|
|
docker cp -L "''${cid}:''${libc_path}" ./libc.so.6
|
|
docker cp -L "''${cid}:''${ld_path}" ./ld-linux-x86-64.so.2
|
|
|
|
file libc.so.6 ld-linux-x86-64.so.2
|
|
ls -lh libc.so.6 ld-linux-x86-64.so.2
|
|
'';
|
|
}
|