From eeb8ee058c5228eb80657d7cc606bb8832df01fa Mon Sep 17 00:00:00 2001 From: Rolf Neugebauer Date: Sat, 29 Apr 2017 13:36:22 +0100 Subject: [PATCH] kernels: Add script to convert CentOS kernels We only convert CentOS 7 kernels for now. CentOS 6 is too old for most of our purposes. Signed-off-by: Rolf Neugebauer --- scripts/kernels/Dockerfile.rpm | 25 +++++++++++++++++++ scripts/kernels/centos.sh | 44 ++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 scripts/kernels/Dockerfile.rpm create mode 100755 scripts/kernels/centos.sh diff --git a/scripts/kernels/Dockerfile.rpm b/scripts/kernels/Dockerfile.rpm new file mode 100644 index 000000000..509ce017c --- /dev/null +++ b/scripts/kernels/Dockerfile.rpm @@ -0,0 +1,25 @@ +FROM alpine:3.5 AS extract + +ARG RPM_URLS + +RUN apk add --no-cache curl rpm tar && true +WORKDIR /rpm +RUN mkdir extract +RUN for url in ${RPM_URLS}; do \ + echo "Extracting: $url"; \ + curl -fsSL -o dl.rpm $url && \ + rpm2cpio dl.rpm | cpio -idm ;\ + done + +RUN mkdir /out +RUN cp -a boot/vmlinuz-* /out/kernel +RUN cp -a boot/config-* /out/kernel_config +RUN cp -a boot/System.map-* /out/System.map +RUN tar cf /out/kernel.tar lib +RUN tar cf /out/kernel-dev.tar usr || true + +FROM linuxkit/toybox-media:d7e82a7d19ccc84c9071fa7a88ecaa58ae958f7c@sha256:4c7d25f2be2429cd08417c36e04161cb924e46f3e419ee33a0aa9ff3a0942e02 +WORKDIR / +ENTRYPOINT [] +CMD [] +COPY --from=extract /out/* / diff --git a/scripts/kernels/centos.sh b/scripts/kernels/centos.sh new file mode 100755 index 000000000..d95dd92ee --- /dev/null +++ b/scripts/kernels/centos.sh @@ -0,0 +1,44 @@ +#! /bin/sh + +REPO="linuxkit/kernel-centos" +BASE_URL=http://mirror.centos.org/centos/ + +TAGS=$(curl --silent -f -lSL https://registry.hub.docker.com/v1/repositories/${REPO}/tags) + +LINKS=$(curl -s ${BASE_URL}/ | sed -n 's/.*href="\([^"]*\).*/\1/p') +# Just get names for Centos 7 +RELEASES=$(echo $LINKS | grep -o "7\.[^ ]*") +RELEASES="7/ $RELEASES" + +# Add updates +URLS="" +for RELEASE in $RELEASES; do + URLS="$URLS ${BASE_URL}/${RELEASE}/os/x86_64/Packages/" +done +URLS="$URLS ${BASE_URL}/7/updates/x86_64/Packages/" + +for URL in $URLS; do + PACKAGES=$(curl -s ${URL}/ | sed -n 's/.*href="\([^"]*\).*/\1/p') + + KERNEL_RPMS=$(echo $PACKAGES | \ + grep -o "kernel-[0-9]\+\.[0-9]\+\.[0-9]\+-[0-9]\+\.[^ ]\+\.rpm") + for KERNEL_RPM in $KERNEL_RPMS; do + RPM_URLS="${URL}/${KERNEL_RPM}" + + VERSION=$(echo $KERNEL_RPM | \ + grep -o "[0-9]\+\.[0-9]\+\.[0-9]\+-[0-9\.]\+\.el[0-9]\+") + + if echo $TAGS | grep -q "\"${VERSION}\""; then + echo "${REPO}:${VERSION} exists" + continue + fi + + # Don't pull in the headers. This is mostly for testing + # HEADERS_RPM="kernel-headers-${VERSION}.x86_64.rpm" + # RPM_URLS="${RPM_URLS} ${URL}/${HEADERS_RPM}" + + docker build -t ${REPO}:${VERSION} -f Dockerfile.rpm --no-cache \ + --build-arg RPM_URLS="${RPM_URLS}" . && + DOCKER_CONTENT_TRUST=1 docker push ${REPO}:${VERSION} + done +done