Skip to content

Commit 77fd5a0

Browse files
Use backup locations for kernel downloads:
It happened that today the latest point releases for the 5.x and 6.x kernels were in the https://www.kernel.org/releases.json but not in corresponding sha256sum.asc file, https://www.kernel.org/pub/linux/kernel/v6.x/sha256sums.asc for example. Interestingly enough, the kernels were in https://cdn.kernel.org/pub/linux/kernel/v6.x/sha256sums.asc. The difference being https://www.kernel.org vs https://cdn.kernel.org. This new script will try against www.kernel.org and fall back to cdn.kernel.org. Signed-off-by: Jacob Weinstock <[email protected]>
1 parent 6bf10e5 commit 77fd5a0

File tree

2 files changed

+65
-12
lines changed

2 files changed

+65
-12
lines changed

kernel/Dockerfile

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,17 @@ ARG KERNEL_VERSION
1212
ARG KERNEL_SOURCE=https://www.kernel.org/pub/linux/kernel/${KERNEL_MAJOR_V}/linux-${KERNEL_VERSION}.tar.xz
1313
ARG KERNEL_SHA256_SUMS=https://www.kernel.org/pub/linux/kernel/${KERNEL_MAJOR_V}/sha256sums.asc
1414
ARG KERNEL_PGP2_SIGN=https://www.kernel.org/pub/linux/kernel/${KERNEL_MAJOR_V}/linux-${KERNEL_VERSION}.tar.sign
15+
# Backup URLs in case the main ones are down or point releases are not available yet.
16+
ARG KERNEL_SOURCE_BACKUP=https://cdn.kernel.org/pub/linux/kernel/${KERNEL_MAJOR_V}/linux-${KERNEL_VERSION}.tar.xz
17+
ARG KERNEL_SHA256_SUMS_BACKUP=https://cdn.kernel.org/pub/linux/kernel/${KERNEL_MAJOR_V}/sha256sums.asc
18+
ARG KERNEL_PGP2_SIGN_BACKUP=https://cdn.kernel.org/pub/linux/kernel/${KERNEL_MAJOR_V}/linux-${KERNEL_VERSION}.tar.sign
1519

1620
# PGP keys: 589DA6B1 ([email protected]) & 6092693E ([email protected]) & 00411886 ([email protected])
1721
COPY /keys.asc /keys.asc
1822

1923
# Download and verify kernel
20-
RUN set -x && \
21-
curl -fsSLO ${KERNEL_SHA256_SUMS} && \
22-
gpg2 -q --import keys.asc && \
23-
gpg2 --verify sha256sums.asc && \
24-
KERNEL_SHA256=$(grep linux-${KERNEL_VERSION}.tar.xz sha256sums.asc | cut -d ' ' -f 1) && \
25-
[ -f linux-${KERNEL_VERSION}.tar.xz ] || curl -fsSLO ${KERNEL_SOURCE} && \
26-
echo "${KERNEL_SHA256} linux-${KERNEL_VERSION}.tar.xz" | sha256sum -c - && \
27-
xz -T 0 -d linux-${KERNEL_VERSION}.tar.xz && \
28-
curl -fsSLO ${KERNEL_PGP2_SIGN} && \
29-
gpg2 --verify linux-${KERNEL_VERSION}.tar.sign linux-${KERNEL_VERSION}.tar && \
30-
cat linux-${KERNEL_VERSION}.tar | tar --absolute-names -x && mv /linux-${KERNEL_VERSION} /linux
31-
24+
COPY download.sh /download.sh
25+
RUN /download.sh ${KERNEL_VERSION} ${KERNEL_SOURCE} ${KERNEL_SHA256_SUMS} ${KERNEL_PGP2_SIGN} ${KERNEL_SOURCE_BACKUP} ${KERNEL_SHA256_SUMS_BACKUP} ${KERNEL_PGP2_SIGN_BACKUP}
3226

3327
FROM kernel-source-unpacked AS kernel-with-config
3428

kernel/download.sh

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
#!/bin/bash
2+
3+
set -xeuo pipefail
4+
5+
# This script downloads the Linux kernel source code and verifies it using GPG.
6+
7+
function verify() {
8+
local kernel_sha256_sums="$1"
9+
local kernel_version="$2"
10+
local kernel_source="$3"
11+
local kernel_pgp2_sign="$4"
12+
13+
curl -fsSL ${kernel_sha256_sums} -o sha256sums.asc
14+
[ -f linux-${kernel_version}.tar.xz ] || curl -fsSLO ${kernel_source}
15+
gpg2 -q --import keys.asc
16+
gpg2 --verify sha256sums.asc
17+
KERNEL_SHA256=$(grep linux-${kernel_version}.tar.xz sha256sums.asc | cut -d ' ' -f 1)
18+
echo "${KERNEL_SHA256} linux-${kernel_version}.tar.xz" | sha256sum -c -
19+
if [ $? -ne 0 ]; then
20+
return 1
21+
fi
22+
# Verify the signature of the kernel source
23+
[ -f linux-${kernel_version}.tar ] || xz -T 0 -d linux-${kernel_version}.tar.xz
24+
curl -fsSLO ${kernel_pgp2_sign}
25+
gpg2 --verify linux-${kernel_version}.tar.sign linux-${kernel_version}.tar
26+
if [ $? -ne 0 ]; then
27+
return 1
28+
fi
29+
}
30+
31+
function extract() {
32+
local kernel_version="$1"
33+
34+
if [ -d linux-${kernel_version} ]; then
35+
echo "Directory linux-${kernel_version} already exists, skipping extraction."
36+
else
37+
tar --absolute-names -xf linux-${kernel_version}.tar
38+
rm -rf ./linux
39+
mv ./linux-${kernel_version} ./linux
40+
fi
41+
}
42+
43+
# Main script execution
44+
function main() {
45+
local kernel_version="$1"
46+
local kernel_source="$2"
47+
local kernel_sha256_sums="$3"
48+
local kernel_pgp2_sign="$4"
49+
local kernel_source_backup="$5"
50+
local kernel_sha256_sums_backup="$6"
51+
local kernel_pgp2_sign_backup="$7"
52+
53+
verify "${kernel_sha256_sums}" "${kernel_version}" "${kernel_source}" "${kernel_pgp2_sign}" || \
54+
verify "${kernel_sha256_sums_backup}" "${kernel_version}" "${kernel_source_backup}" "${kernel_pgp2_sign_backup}"
55+
56+
extract "${kernel_version}"
57+
}
58+
59+
main "$@"

0 commit comments

Comments
 (0)