@@ -27,6 +27,7 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
2727 libxkbcommon-x11-0 libxkbcommon0 \
2828 openjdk-21-jdk \
2929 qemu-user qemu-user-static \
30+ libc6-armhf-cross libc6-arm64-cross \
3031 llvm clang lld \
3132 python3 python3-dev python3-pip python3-venv pipx \
3233 ruby-dev
@@ -59,7 +60,8 @@ RUN git clone --depth=1 https://github.com/blackploit/hash-identifier /opt/hash-
5960
6061RUN --mount=type=secret,id=github_token \
6162 tok=$(cat /run/secrets/github_token 2>/dev/null || true); \
62- url=$(curl -fsSL -H "Authorization: token ${tok}" https://api.github.com/repos/opengrep/opengrep/releases/latest \
63+ curl_auth=(); [ -z "$tok" ] || curl_auth=(-H "Authorization: token ${tok}" ); \
64+ url=$(curl -fsSL "${curl_auth[@]}" https://api.github.com/repos/opengrep/opengrep/releases/latest \
6365 | jq -er '.assets[] | select(.name == "opengrep_manylinux_x86") | .browser_download_url' | head -1); \
6466 [ -n "$url" ] || { echo "ERROR: opengrep asset URL not found" ; exit 1; }; \
6567 wget -qO /usr/local/bin/opengrep "$url" ; \
@@ -102,7 +104,8 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
102104# Cutter (rizin GUI) — extracted AppImage for Docker compatibility
103105RUN --mount=type=secret,id=github_token \
104106 tok=$(cat /run/secrets/github_token 2>/dev/null || true); \
105- url=$(curl -fsSL -H "Authorization: token ${tok}" https://api.github.com/repos/rizinorg/cutter/releases/latest \
107+ curl_auth=(); [ -z "$tok" ] || curl_auth=(-H "Authorization: token ${tok}" ); \
108+ url=$(curl -fsSL "${curl_auth[@]}" https://api.github.com/repos/rizinorg/cutter/releases/latest \
106109 | jq -er '.assets[] | select(.name | test("Linux-x86_64\\ .AppImage$")) | .browser_download_url' | head -1); \
107110 [ -n "$url" ] || { echo "ERROR: Cutter asset URL not found" ; exit 1; }; \
108111 wget -qO /tmp/cutter.AppImage "$url" ; \
@@ -117,7 +120,8 @@ RUN --mount=type=secret,id=github_token \
117120# Ghidra (platform-independent zip)
118121RUN --mount=type=secret,id=github_token \
119122 tok=$(cat /run/secrets/github_token 2>/dev/null || true); \
120- url=$(curl -fsSL -H "Authorization: token ${tok}" https://api.github.com/repos/NationalSecurityAgency/ghidra/releases/latest \
123+ curl_auth=(); [ -z "$tok" ] || curl_auth=(-H "Authorization: token ${tok}" ); \
124+ url=$(curl -fsSL "${curl_auth[@]}" https://api.github.com/repos/NationalSecurityAgency/ghidra/releases/latest \
121125 | jq -er '.assets[] | select(.name | endswith(".zip")) | select(.name | test("PUBLIC")) | .browser_download_url' | head -1); \
122126 [ -n "$url" ] || { echo "ERROR: Ghidra asset URL not found" ; exit 1; }; \
123127 wget -qO /tmp/ghidra.zip "$url" ; \
@@ -132,7 +136,8 @@ RUN --mount=type=secret,id=github_token \
132136RUN --mount=type=secret,id=github_token \
133137 mkdir -p /opt/retdec; \
134138 tok=$(cat /run/secrets/github_token 2>/dev/null || true); \
135- url=$(curl -fsSL -H "Authorization: token ${tok}" https://api.github.com/repos/avast/retdec/releases/latest \
139+ curl_auth=(); [ -z "$tok" ] || curl_auth=(-H "Authorization: token ${tok}" ); \
140+ url=$(curl -fsSL "${curl_auth[@]}" https://api.github.com/repos/avast/retdec/releases/latest \
136141 | jq -er '.assets[] | select(.name | test("[Ll]inux.*tar")) | .browser_download_url' | head -1); \
137142 [ -n "$url" ] || { echo "ERROR: retdec asset URL not found" ; exit 1; }; \
138143 wget -qO /tmp/retdec.tar.xz "$url" ; \
@@ -164,7 +169,8 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
164169 --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \
165170 --mount=type=secret,id=github_token \
166171 tok=$(cat /run/secrets/github_token 2>/dev/null || true); \
167- url=$(curl -fsSL -H "Authorization: token ${tok}" https://api.github.com/repos/WerWolv/ImHex/releases/latest \
172+ curl_auth=(); [ -z "$tok" ] || curl_auth=(-H "Authorization: token ${tok}" ); \
173+ url=$(curl -fsSL "${curl_auth[@]}" https://api.github.com/repos/WerWolv/ImHex/releases/latest \
168174 | jq -er '.assets[] | select(.name | test("Ubuntu.*24\\ .04.*\\ .deb$")) | .browser_download_url' | head -1); \
169175 [ -n "$url" ] || { echo "ERROR: ImHex asset URL not found" ; exit 1; }; \
170176 wget -qO /tmp/imhex.deb "$url" ; \
@@ -176,7 +182,8 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
176182# pycdc (pre-built from decompyle-builds)
177183RUN --mount=type=secret,id=github_token \
178184 tok=$(cat /run/secrets/github_token 2>/dev/null || true); \
179- meta=$(curl -fsSL -H "Authorization: token ${tok}" https://api.github.com/repos/extremecoders-re/decompyle-builds/releases/latest); \
185+ curl_auth=(); [ -z "$tok" ] || curl_auth=(-H "Authorization: token ${tok}" ); \
186+ meta=$(curl -fsSL "${curl_auth[@]}" https://api.github.com/repos/extremecoders-re/decompyle-builds/releases/latest); \
180187 url_pycdc=$(echo "$meta" | jq -er '.assets[] | select(.name == "pycdc.x86_64") | .browser_download_url' | head -1); \
181188 url_pycdas=$(echo "$meta" | jq -er '.assets[] | select(.name == "pycdas.x86_64") | .browser_download_url' | head -1); \
182189 [ -n "$url_pycdc" ] && [ -n "$url_pycdas" ] || { echo "ERROR: pycdc/pycdas asset URLs not found" ; exit 1; }; \
@@ -218,7 +225,8 @@ RUN git clone --depth=1 https://github.com/niklasb/libc-database /opt/libc-datab
218225# pwninit
219226RUN --mount=type=secret,id=github_token \
220227 tok=$(cat /run/secrets/github_token 2>/dev/null || true); \
221- url=$(curl -fsSL -H "Authorization: token ${tok}" https://api.github.com/repos/io12/pwninit/releases/latest \
228+ curl_auth=(); [ -z "$tok" ] || curl_auth=(-H "Authorization: token ${tok}" ); \
229+ url=$(curl -fsSL "${curl_auth[@]}" https://api.github.com/repos/io12/pwninit/releases/latest \
222230 | jq -er '.assets[] | select(.name == "pwninit") | .browser_download_url' | head -1); \
223231 [ -n "$url" ] || { echo "ERROR: pwninit asset URL not found" ; exit 1; }; \
224232 wget -qO /usr/local/bin/pwninit "$url" ; \
0 commit comments