Compare commits

..

2 Commits

Author SHA1 Message Date
Lance Vick c2f3edecca
refactor bootstrap 2024-02-05 10:29:14 -08:00
Lance Vick 0819e6268e
fix elfutils name 2024-02-05 10:26:27 -08:00
5 changed files with 406 additions and 375 deletions

View File

@ -1,69 +1,49 @@
ARG VERSION=1.6.0
ARG SRC_SITE=https://github.com/oriansj/stage0-posix/releases/download
ARG SRC_HASH=9260ff69278366e5c056af7b8c436b74773eaa1330a0c6a6b8ab1b5f92e5065c
FROM alpine@sha256:51b67269f354137895d43f3b3d810bfacd3945438e94dc5ac55fdac340352f48 as apline FROM alpine@sha256:51b67269f354137895d43f3b3d810bfacd3945438e94dc5ac55fdac340352f48 as apline
FROM debian@sha256:bac353db4cc04bc672b14029964e686cd7bad56fe34b51f432c1a1304b9928da as debian FROM debian@sha256:bac353db4cc04bc672b14029964e686cd7bad56fe34b51f432c1a1304b9928da as debian
FROM archlinux@sha256:1f83ba0580a15cd6ad1d02d62ad432ddc940f53f07d0e39c8982d6c9c74e53e0 as archlinux FROM archlinux@sha256:1f83ba0580a15cd6ad1d02d62ad432ddc940f53f07d0e39c8982d6c9c74e53e0 as arch
FROM debian as build1 FROM scratch as base
ARG VERSION ENV VERSION=1.6.0
ENV VERSION=${VERSION} ENV SRC_SITE=https://github.com/oriansj/stage0-posix/releases/download
ARG SRC_SITE ENV SRC_HASH=9260ff69278366e5c056af7b8c436b74773eaa1330a0c6a6b8ab1b5f92e5065c
ENV SRC_SITE=${SRC_SITE} COPY <<-EOF build.sh
ARG SRC_HASH #!/bin/sh
ENV SRC_HASH=${SRC_HASH} set -eux
RUN apt update && apt install -y wget gcc wget ${SRC_SITE}/Release_${VERSION}/stage0-posix-${VERSION}.tar.gz
RUN set -eux; \ echo "${SRC_HASH} stage0-posix-${VERSION}.tar.gz" | sha256sum -c
wget ${SRC_SITE}/Release_${VERSION}/stage0-posix-${VERSION}.tar.gz; \ tar -xf stage0-posix-${VERSION}.tar.gz
echo "${SRC_HASH} stage0-posix-${VERSION}.tar.gz" | sha256sum -c; \ cd stage0-posix-${VERSION}
tar -xf stage0-posix-${VERSION}.tar.gz bootstrap-seeds/POSIX/x86/kaem-optional-seed
WORKDIR stage0-posix-${VERSION} mkdir -p /rootfs && cp -R * /rootfs/
RUN set -eux; \ cd /rootfs
bootstrap-seeds/POSIX/x86/kaem-optional-seed; \ sha256sum x86/bin/* > hashes.txt; \
mkdir -p /rootfs && cp -R * /rootfs/ find . -exec touch -hcd "@0" "{}" +
WORKDIR /rootfs EOF
RUN sha256sum x86/bin/* > hashes.txt; \
find . -exec touch -hcd "@0" "{}" +
FROM archlinux as build2 FROM base as build1
ARG VERSION COPY --from=debian . /
ENV VERSION=${VERSION} RUN --mount=type=cache,target=/var/cache/apt <<-EOF
ARG SRC_SITE set -eux
ENV SRC_SITE=${SRC_SITE} apt update
ARG SRC_HASH apt install -y wget gcc
ENV SRC_HASH=${SRC_HASH} sh build.sh
RUN pacman -Sy --noconfirm wget gcc EOF
RUN set -eux; \
wget ${SRC_SITE}/Release_${VERSION}/stage0-posix-${VERSION}.tar.gz; \
echo "${SRC_HASH} stage0-posix-${VERSION}.tar.gz" | sha256sum -c; \
tar -xf stage0-posix-${VERSION}.tar.gz
WORKDIR stage0-posix-${VERSION}
RUN set -eux; \
bootstrap-seeds/POSIX/x86/kaem-optional-seed; \
mkdir -p /rootfs && cp -R * /rootfs/
WORKDIR /rootfs
RUN sha256sum x86/bin/* > hashes.txt; \
find . -exec touch -hcd "@0" "{}" +
FROM alpine as build3 FROM base as build2
ARG VERSION COPY --from=arch . /
ENV VERSION=${VERSION} RUN --mount=type=cache,target=/var/cache/pacman/pkg <<-EOF
ARG SRC_SITE set -eux
ENV SRC_SITE=${SRC_SITE} pacman -Sy --noconfirm wget gcc
ARG SRC_HASH sh build.sh
ENV SRC_HASH=${SRC_HASH} EOF
RUN apk add wget gcc
RUN set -eux; \ FROM base as build3
wget ${SRC_SITE}/Release_${VERSION}/stage0-posix-${VERSION}.tar.gz; \ COPY --from=alpine . /
echo "${SRC_HASH} stage0-posix-${VERSION}.tar.gz" | sha256sum -c; \ RUN --mount=type=cache,target=/var/cache/apk <<-EOF
tar -xf stage0-posix-${VERSION}.tar.gz set -eux
WORKDIR stage0-posix-${VERSION} apk add wget gcc
RUN set -eux; \ sh build.sh
bootstrap-seeds/POSIX/x86/kaem-optional-seed; \ EOF
mkdir -p /rootfs && cp -R * /rootfs/
WORKDIR /rootfs
RUN sha256sum x86/bin/* > hashes.txt; \
find . -exec touch -hcd "@0" "{}" +
FROM scratch as compare FROM scratch as compare
COPY --from=build1 /rootfs/ /a COPY --from=build1 /rootfs/ /a
@ -72,26 +52,26 @@ COPY --from=build3 /rootfs/ /c
FROM compare as test1 FROM compare as test1
WORKDIR /a WORKDIR /a
RUN ["x86/bin/sha256sum","-c","/a/hashes.txt"] RUN --network=none ["x86/bin/sha256sum","-c","/a/hashes.txt"]
RUN ["x86/bin/sha256sum","-c","/b/hashes.txt"] RUN --network=none ["x86/bin/sha256sum","-c","/b/hashes.txt"]
RUN ["x86/bin/sha256sum","-c","/c/hashes.txt"] RUN --network=none ["x86/bin/sha256sum","-c","/c/hashes.txt"]
FROM compare as test2 FROM compare as test2
WORKDIR /b WORKDIR /b
RUN ["x86/bin/sha256sum","-c","/a/hashes.txt"] RUN --network=none ["x86/bin/sha256sum","-c","/a/hashes.txt"]
RUN ["x86/bin/sha256sum","-c","/b/hashes.txt"] RUN --network=none ["x86/bin/sha256sum","-c","/b/hashes.txt"]
RUN ["x86/bin/sha256sum","-c","/c/hashes.txt"] RUN --network=none ["x86/bin/sha256sum","-c","/c/hashes.txt"]
FROM compare as test3 FROM compare as test3
WORKDIR /c WORKDIR /c
RUN ["x86/bin/sha256sum","-c","/a/hashes.txt"] RUN --network=none ["x86/bin/sha256sum","-c","/a/hashes.txt"]
RUN ["x86/bin/sha256sum","-c","/b/hashes.txt"] RUN --network=none ["x86/bin/sha256sum","-c","/b/hashes.txt"]
RUN ["x86/bin/sha256sum","-c","/c/hashes.txt"] RUN --network=none ["x86/bin/sha256sum","-c","/c/hashes.txt"]
FROM scratch as install FROM scratch as install
COPY --from=test1 /a/hashes.txt /a-hashes.txt COPY --from=test1 /a/hashes.txt /
COPY --from=test2 /b/hashes.txt /b-hashes.txt COPY --from=test2 /b/hashes.txt /
COPY --from=test3 /c/hashes.txt /c-hashes.txt COPY --from=test3 /c/hashes.txt /
COPY --from=build1 /rootfs / COPY --from=build1 /rootfs /
FROM scratch as package FROM scratch as package

View File

@ -2,7 +2,6 @@ ARG VERSION=fc6eeb6bd75ea0d0025a79ea9fe45614bd60ba14
ARG SRC_SITE=https://codeload.github.com/lrvick/live-bootstrap/legacy.tar.gz ARG SRC_SITE=https://codeload.github.com/lrvick/live-bootstrap/legacy.tar.gz
ARG SRC_HASH=0c268b19cf9f4eefdaf45dab64ac393ccf8ee43de58f0721624cab358044bf78 ARG SRC_HASH=0c268b19cf9f4eefdaf45dab64ac393ccf8ee43de58f0721624cab358044bf78
FROM debian@sha256:bac353db4cc04bc672b14029964e686cd7bad56fe34b51f432c1a1304b9928da as debian FROM debian@sha256:bac353db4cc04bc672b14029964e686cd7bad56fe34b51f432c1a1304b9928da as debian
FROM stagex/stage0 as stage0
FROM debian as fetch FROM debian as fetch
ARG VERSION ARG VERSION
@ -11,56 +10,68 @@ ARG SRC_SITE
ENV SRC_SITE=${SRC_SITE} ENV SRC_SITE=${SRC_SITE}
ARG SRC_HASH ARG SRC_HASH
ENV SRC_HASH=${SRC_HASH} ENV SRC_HASH=${SRC_HASH}
RUN apt update && apt install -y curl gcc WORKDIR /home/user
RUN set -eux; \ RUN \
curl ${SRC_SITE}/${VERSION} -o live-bootstrap.tar.gz; \ --mount=type=cache,target=/var/cache/apt \
echo "${SRC_HASH} live-bootstrap.tar.gz" | sha256sum -c; \ --mount=type=cache,target=/var/lib/apt \
tar -xvf live-bootstrap.tar.gz; \ apt update && apt install -y curl
mv lrvick-live-bootstrap-* live-bootstrap RUN <<-EOF
WORKDIR live-bootstrap set -uex
RUN ./download-distfiles.sh curl -C - ${SRC_SITE}/${VERSION} -o live-bootstrap.tgz
echo "${SRC_HASH} live-bootstrap.tgz" | sha256sum -c
tar -xvf live-bootstrap.tgz
mv lrvick-live-bootstrap-* live-bootstrap
live-bootstrap/download-distfiles.sh
EOF
FROM fetch as config FROM debian as config
RUN set -eux; \ COPY --from=fetch . /
mkdir -p /rootfs/external; \ RUN <<-EOF
mv steps seed/* /rootfs/; \ set -eux
mv distfiles /rootfs/external/; \ mkdir -p /rootfs/external
export CORES=$(nproc --all); \ cd /home/user/live-bootstrap
echo "\ cp -R distfiles /rootfs/external/
FORCE_TIMESTAMPS=False\n\ cp -R steps seed/* /rootfs/
CHROOT=True\n\ export CORES=$(nproc --all)
UPDATE_CHECKSUMS=False\n\ printf "\
JOBS=${CORES}\n\ FORCE_TIMESTAMPS=False\n\
SWAP_SIZE=0\n\ CHROOT=True\n\
FINAL_JOBS=${CORES}\n\ UPDATE_CHECKSUMS=False\n\
INTERNAL_CI=False\n\ JOBS=${CORES}\n\
INTERACTIVE=False\n\ SWAP_SIZE=0\n\
BARE_METAL=False\n\ FINAL_JOBS=${CORES}\n\
EXTERNAL_SOURCES=True\n\ INTERNAL_CI=False\n\
DISK=sda1\n\ INTERACTIVE=False\n\
KERNEL_BOOTSTRAP=False\n\ BARE_METAL=False\n\
BUILD_KERNELS=False" \ EXTERNAL_SOURCES=True\n\
> /rootfs/steps/bootstrap.cfg DISK=sda1\n\
RUN touch /rootfs/steps/lwext4-1.0.0-lb1/files/fiwix-file-list.txt KERNEL_BOOTSTRAP=False\n\
BUILD_KERNELS=False" \
> /rootfs/steps/bootstrap.cfg
touch /rootfs/steps/lwext4-1.0.0-lb1/files/fiwix-file-list.txt
EOF
FROM scratch as build FROM stagex/stage0 as build
COPY --from=stagex/stage0 / .
COPY --from=config /rootfs .
ENV ARCH_DIR=x86 ENV ARCH_DIR=x86
ENV ARCH=x86 ENV ARCH=x86
RUN ["/x86/bin/kaem","--verbose","--strict","--file","./after.kaem"] COPY --from=config /rootfs .
RUN --network=none \
["/x86/bin/kaem","--verbose","--strict","--file","./after.kaem"]
FROM build as install FROM build as install
ENV PATH=/bin:/usr/sbin:/usr/bin ENV PATH=/bin:/usr/sbin:/usr/bin
RUN set -eux; \ RUN --mount=type=cache,target=/rootfs \
rm -rf /usr/lib/python*/__pycache__; \ --network=none <<-EOF
mkdir -p /rootfs/etc /rootfs/home/user /rootfs/tmp; \ set -eux
chown -R 1000:1000 /rootfs/home/user /rootfs/tmp; \ rm -rf /usr/lib/python*/__pycache__
cp -R $(ls -d /etc/* | grep -v '\(resolv.conf\|hosts\)') /rootfs/etc/; \ mkdir -p /rootfs/etc /rootfs/home/user /rootfs/tmp
cp -R lib usr bin var /rootfs/; \ chown -R 1000:1000 /rootfs/home/user /rootfs/tmp
echo "user:x:1000:" > /rootfs/etc/group; \ cp -R $(ls -d /etc/* | grep -v '\(resolv.conf\|hosts\)') /rootfs/etc/
echo "user:x:1000:1000::/home/user:/bin/bash" > /rootfs/etc/passwd; \ cp -R lib usr bin var /rootfs/
find /rootfs -exec touch -hcd "@0" "{}" + echo "user:x:1000:" > /rootfs/etc/group
echo "user:x:1000:1000::/home/user:/bin/bash" > /rootfs/etc/passwd
find /rootfs -exec touch -hcd "@0" "{}" +
EOF
FROM scratch as package FROM scratch as package
COPY --from=install /rootfs / COPY --from=install /rootfs /

View File

@ -34,108 +34,120 @@ ENV BINUTILS_DIR ${HOME}/build-binutils
FROM base as fetch FROM base as fetch
WORKDIR ${HOME} WORKDIR ${HOME}
RUN set -eux; \ RUN <<-EOF
curl -OJ ${LINUX_SITE}/${LINUX_FILE}; \ set -eux
echo "${LINUX_HASH} ${LINUX_FILE}" | sha256sum -c; \ curl -OJ ${LINUX_SITE}/${LINUX_FILE}
curl -OJ ${GCC_SITE}/${GCC_FILE}; \ echo "${LINUX_HASH} ${LINUX_FILE}" | sha256sum -c
echo "${GCC_HASH} ${GCC_FILE}" | sha256sum -c; \ curl -OJ ${GCC_SITE}/${GCC_FILE}
curl -OJ ${GCC_DEP_SITE}/${GMP_FILE}; \ echo "${GCC_HASH} ${GCC_FILE}" | sha256sum -c
echo "${GMP_HASH} ${GMP_FILE}" | sha256sum -c; \ curl -OJ ${GCC_DEP_SITE}/${GMP_FILE}
curl -OJ ${GCC_DEP_SITE}/${MPFR_FILE}; \ echo "${GMP_HASH} ${GMP_FILE}" | sha256sum -c
echo "${MPFR_HASH} ${MPFR_FILE}" | sha256sum -c; \ curl -OJ ${GCC_DEP_SITE}/${MPFR_FILE}
curl -OJ ${GCC_DEP_SITE}/${MPC_FILE}; \ echo "${MPFR_HASH} ${MPFR_FILE}" | sha256sum -c
echo "${MPC_HASH} ${MPC_FILE}" | sha256sum -c; \ curl -OJ ${GCC_DEP_SITE}/${MPC_FILE}
curl -OJ ${GCC_DEP_SITE}/${ISL_FILE}; \ echo "${MPC_HASH} ${MPC_FILE}" | sha256sum -c
echo "${ISL_HASH} ${ISL_FILE}" | sha256sum -c; \ curl -OJ ${GCC_DEP_SITE}/${ISL_FILE}
curl -OJ ${MUSL_SITE}/releases/${MUSL_FILE}; \ echo "${ISL_HASH} ${ISL_FILE}" | sha256sum -c
echo "${MUSL_HASH} ${MUSL_FILE}" | sha256sum -c; \ curl -OJ ${MUSL_SITE}/releases/${MUSL_FILE}
curl -OJ ${BINUTILS_SITE}/${BINUTILS_FILE}; \ echo "${MUSL_HASH} ${MUSL_FILE}" | sha256sum -c
echo "${BINUTILS_HASH} ${BINUTILS_FILE}" | sha256sum -c curl -OJ ${BINUTILS_SITE}/${BINUTILS_FILE}
echo "${BINUTILS_HASH} ${BINUTILS_FILE}" | sha256sum -c
EOF
FROM fetch as extract FROM fetch as extract
RUN set -eux; \ RUN <<-EOF
tar -xf ${LINUX_FILE}; \ set -eux
tar -xzf ${MUSL_FILE}; \ tar -xf ${LINUX_FILE}
tar -xf ${BINUTILS_FILE}; \ tar -xzf ${MUSL_FILE}
tar -xf ${GCC_FILE}; \ tar -xf ${BINUTILS_FILE}
cd gcc-${GCC_VERSION}; \ tar -xf ${GCC_FILE}
mv ../*.tar.* .; \ cd gcc-${GCC_VERSION}
./contrib/download_prerequisites mv ../*.tar.* .
./contrib/download_prerequisites
EOF
FROM extract as build FROM extract as build
# Phase 1: Build cross binutils in build-binutils # Phase 1: Build cross binutils in build-binutils
WORKDIR ${BINUTILS_DIR} WORKDIR ${BINUTILS_DIR}
RUN set -eux; \ RUN <<-EOF
../binutils-${BINUTILS_VERSION}/configure \ set -eux
--build=i386-unknown-linux-musl \ ../binutils-${BINUTILS_VERSION}/configure \
--host=i386-unknown-linux-musl \ --build=i386-unknown-linux-musl \
--target=${TARGET} \ --host=i386-unknown-linux-musl \
--with-sysroot=/${TARGET} \ --target=${TARGET} \
--prefix= \ --with-sysroot=/${TARGET} \
--libdir=/lib \ --prefix= \
--disable-nls \ --libdir=/lib \
--disable-multilib \ --disable-nls \
--disable-plugins \ --disable-multilib \
--disable-gprofng \ --disable-plugins \
--enable-64-bit-bfd \ --disable-gprofng \
--enable-ld=default \ --enable-64-bit-bfd \
--enable-install-libiberty \ --enable-ld=default \
--enable-deterministic-archives; \ --enable-install-libiberty \
make all --enable-deterministic-archives
make all
EOF
# Phase 2: Prepare build sysroot # Phase 2: Prepare build sysroot
WORKDIR ${SYSROOT_DIR} WORKDIR ${SYSROOT_DIR}
RUN set -eux; \ RUN <<-EOF
mkdir -p include; \ set -eux
ln -sf . usr; \ mkdir -p include
ln -sf lib lib32; \ ln -sf . usr
ln -sf lib lib64 ln -sf lib lib32
ln -sf lib lib64
EOF
# Phase 3: Build gcc (without libgcc) in build-gcc # Phase 3: Build gcc (without libgcc) in build-gcc
WORKDIR ${GCC_DIR} WORKDIR ${GCC_DIR}
RUN set -eux; \ RUN <<-EOF
../gcc-${GCC_VERSION}/configure \ set -eux
--build=i386-unknown-linux-musl \ ../gcc-${GCC_VERSION}/configure \
--host=i386-unknown-linux-musl \ --build=i386-unknown-linux-musl \
--target=${TARGET} \ --host=i386-unknown-linux-musl \
--with-build-sysroot=${SYSROOT_DIR} \ --target=${TARGET} \
--with-sysroot=/${TARGET} \ --with-build-sysroot=${SYSROOT_DIR} \
--prefix= \ --with-sysroot=/${TARGET} \
--libdir=/lib \ --prefix= \
--disable-multilib \ --libdir=/lib \
--disable-bootstrap \ --disable-multilib \
--disable-assembly \ --disable-bootstrap \
--disable-libmudflap \ --disable-assembly \
--disable-libsanitizer \ --disable-libmudflap \
--disable-gnu-indirect-function \ --disable-libsanitizer \
--disable-libmpx \ --disable-gnu-indirect-function \
--disable-werror \ --disable-libmpx \
--enable-languages=c,c++ \ --disable-werror \
--enable-tls \ --enable-languages=c,c++ \
--enable-initfini-array \ --enable-tls \
--enable-libstdcxx-time=rt \ --enable-initfini-array \
--enable-deterministic-archives \ --enable-libstdcxx-time=rt \
AR_FOR_TARGET=${BINUTILS_DIR}/binutils/ar \ --enable-deterministic-archives \
AS_FOR_TARGET=${BINUTILS_DIR}/gas/as-new \ AR_FOR_TARGET=${BINUTILS_DIR}/binutils/ar \
LD_FOR_TARGET=${BINUTILS_DIR}/ld/ld-new \ AS_FOR_TARGET=${BINUTILS_DIR}/gas/as-new \
NM_FOR_TARGET=${BINUTILS_DIR}/binutils/nm-new \ LD_FOR_TARGET=${BINUTILS_DIR}/ld/ld-new \
OBJCOPY_FOR_TARGET=${BINUTILS_DIR}/binutils/objcopy \ NM_FOR_TARGET=${BINUTILS_DIR}/binutils/nm-new \
OBJDUMP_FOR_TARGET=${BINUTILS_DIR}/binutils/objdump \ OBJCOPY_FOR_TARGET=${BINUTILS_DIR}/binutils/objcopy \
RANLIB_FOR_TARGET=${BINUTILS_DIR}/binutils/ranlib \ OBJDUMP_FOR_TARGET=${BINUTILS_DIR}/binutils/objdump \
READELF_FOR_TARGET=${BINUTILS_DIR}/binutils/readelf \ RANLIB_FOR_TARGET=${BINUTILS_DIR}/binutils/ranlib \
STRIP_FOR_TARGET=${BINUTILS_DIR}/binutils/strip-new; \ READELF_FOR_TARGET=${BINUTILS_DIR}/binutils/readelf \
make all-gcc STRIP_FOR_TARGET=${BINUTILS_DIR}/binutils/strip-new
make all-gcc
EOF
# Phase 4: Install musl libc headers to build-sysroot for use by libgcc # Phase 4: Install musl libc headers to build-sysroot for use by libgcc
WORKDIR ${MUSL_DIR} WORKDIR ${MUSL_DIR}
RUN set -eux; \ RUN <<-EOF
../musl-${MUSL_VERSION}/configure \ set -eux
CC="${GCC_DIR}/gcc/xgcc -B ${GCC_DIR}/gcc" \ ../musl-${MUSL_VERSION}/configure \
LIBCC="${GCC_DIR}/${TARGET}/libgcc/libgcc.a" \ CC="${GCC_DIR}/gcc/xgcc -B ${GCC_DIR}/gcc" \
--prefix= \ LIBCC="${GCC_DIR}/${TARGET}/libgcc/libgcc.a" \
--host=${TARGET}; \ --prefix= \
make DESTDIR=${SYSROOT_DIR} install-headers --host=${TARGET}
make DESTDIR=${SYSROOT_DIR} install-headers
EOF
# Phase 5: Compile libgcc # Phase 5: Compile libgcc
WORKDIR ${GCC_DIR} WORKDIR ${GCC_DIR}
@ -143,11 +155,13 @@ RUN make MAKE="make enable_shared=no" all-target-libgcc
# Phase 5: Compile musl libc and install to sysroot # Phase 5: Compile musl libc and install to sysroot
WORKDIR ${MUSL_DIR} WORKDIR ${MUSL_DIR}
RUN set -eux; \ RUN <<-EOF
make \ set -eux
AR=${BINUTILS_DIR}/binutils/ar \ make \
RANLIB=${BINUTILS_DIR}/binutils/ranlib; \ AR=${BINUTILS_DIR}/binutils/ar \
make DESTDIR=${SYSROOT_DIR} install RANLIB=${BINUTILS_DIR}/binutils/ranlib
make DESTDIR=${SYSROOT_DIR} install
EOF
# Phase 6: Compile remaining gcc targets # Phase 6: Compile remaining gcc targets
WORKDIR ${GCC_DIR} WORKDIR ${GCC_DIR}
@ -155,27 +169,31 @@ RUN make all
# Phase 7: Generate linux headers # Phase 7: Generate linux headers
WORKDIR ${HOME}/linux-${LINUX_VERSION} WORKDIR ${HOME}/linux-${LINUX_VERSION}
RUN set -eux; \ RUN <<-EOF
make ARCH=${ARCH} headers; \ set -eux
find usr/include -name '.*' -delete; \ make ARCH=${ARCH} headers
rm usr/include/Makefile; \ find usr/include -name '.*' -delete
rm usr/include/headers_check.pl; \ rm usr/include/Makefile
cp -rv usr/include ${LINUX_DIR} rm usr/include/headers_check.pl
cp -rv usr/include ${LINUX_DIR}
EOF
FROM build as install FROM build as install
WORKDIR ${HOME} WORKDIR ${HOME}
USER 0:0 USER 0:0
COPY --from=stagex/stage1 . /rootfs/ COPY --from=stagex/stage1 . /rootfs/
RUN set -eux; \ RUN <<-EOF
rm /rootfs/lib; \ set -eux
env -C build-musl make DESTDIR=/rootfs/${TARGET} install; \ rm /rootfs/lib
env -C build-gcc make DESTDIR=/rootfs/ install; \ env -C build-musl make DESTDIR=/rootfs/${TARGET} install
env -C build-binutils make DESTDIR=/rootfs/ install; \ env -C build-gcc make DESTDIR=/rootfs/ install
cp -Rv ${LINUX_DIR}/* /rootfs/${TARGET}/include; \ env -C build-binutils make DESTDIR=/rootfs/ install
ln -s /usr/lib/ld-musl-i386.so.1 /rootfs/lib/libc.so; \ cp -Rv ${LINUX_DIR}/* /rootfs/${TARGET}/include
ln -s /usr/lib/ld-musl-i386.so.1 /rootfs/lib/ld-musl-i386.so.1; \ ln -s /usr/lib/ld-musl-i386.so.1 /rootfs/lib/libc.so
ln -s /${TARGET}/lib/ld-musl-${ARCH}.so.1 /rootfs/lib/ld-musl-${ARCH}.so.1; \ ln -s /usr/lib/ld-musl-i386.so.1 /rootfs/lib/ld-musl-i386.so.1
find /rootfs -exec touch -hcd "@0" "{}" + ln -s /${TARGET}/lib/ld-musl-${ARCH}.so.1 /rootfs/lib/ld-musl-${ARCH}.so.1
find /rootfs -exec touch -hcd "@0" "{}" +
EOF
FROM scratch as package FROM scratch as package
COPY --from=install /rootfs/ / COPY --from=install /rootfs/ /

View File

@ -56,168 +56,190 @@ ENV LINUX_DIR ${HOME}/build-linux
FROM base as fetch FROM base as fetch
WORKDIR /home/user WORKDIR /home/user
RUN set -eux; \ RUN <<-EOF
curl -OJ ${LINUX_SITE}/${LINUX_FILE}; \ set -eux
echo "${LINUX_HASH} ${LINUX_FILE}" | sha256sum -c; \ curl -OJ ${LINUX_SITE}/${LINUX_FILE}
curl --insecure -OJ ${MUSL_SITE}/${MUSL_FILE}; \ echo "${LINUX_HASH} ${LINUX_FILE}" | sha256sum -c
echo "${MUSL_HASH} ${MUSL_FILE}" | sha256sum -c; \ curl --insecure -OJ ${MUSL_SITE}/${MUSL_FILE}
curl --insecure -OJ ${BUSYBOX_SITE}/${BUSYBOX_FILE}; \ echo "${MUSL_HASH} ${MUSL_FILE}" | sha256sum -c
echo "${BUSYBOX_HASH} ${BUSYBOX_FILE}" | sha256sum -c; \ curl --insecure -OJ ${BUSYBOX_SITE}/${BUSYBOX_FILE}
curl --insecure -OJ ${BINUTILS_SITE}/${BINUTILS_FILE}; \ echo "${BUSYBOX_HASH} ${BUSYBOX_FILE}" | sha256sum -c
echo "${BINUTILS_HASH} ${BINUTILS_FILE}" | sha256sum -c; \ curl --insecure -OJ ${BINUTILS_SITE}/${BINUTILS_FILE}
curl --insecure -OJ ${MAKE_SITE}/${MAKE_FILE}; \ echo "${BINUTILS_HASH} ${BINUTILS_FILE}" | sha256sum -c
echo "${MAKE_HASH} ${MAKE_FILE}" | sha256sum -c; \ curl --insecure -OJ ${MAKE_SITE}/${MAKE_FILE}
curl --insecure -OJ ${GCC_SITE}/${GCC_FILE}; \ echo "${MAKE_HASH} ${MAKE_FILE}" | sha256sum -c
echo "${GCC_HASH} ${GCC_FILE}" | sha256sum -c; \ curl --insecure -OJ ${GCC_SITE}/${GCC_FILE}
curl --insecure -OJ ${GMP_SITE}/${GMP_FILE}; \ echo "${GCC_HASH} ${GCC_FILE}" | sha256sum -c
echo "${GMP_HASH} ${GMP_FILE}" | sha256sum -c; \ curl --insecure -OJ ${GMP_SITE}/${GMP_FILE}
curl --insecure -OJ ${MPFR_SITE}/${MPFR_FILE}; \ echo "${GMP_HASH} ${GMP_FILE}" | sha256sum -c
echo "${MPFR_HASH} ${MPFR_FILE}" | sha256sum -c; \ curl --insecure -OJ ${MPFR_SITE}/${MPFR_FILE}
curl --insecure -OJ ${MPC_SITE}/${MPC_FILE}; \ echo "${MPFR_HASH} ${MPFR_FILE}" | sha256sum -c
echo "${MPC_HASH} ${MPC_FILE}" | sha256sum -c; \ curl --insecure -OJ ${MPC_SITE}/${MPC_FILE}
curl --insecure -OJ ${ISL_SITE}/${ISL_FILE}; \ echo "${MPC_HASH} ${MPC_FILE}" | sha256sum -c
echo "${ISL_HASH} ${ISL_FILE}" | sha256sum -c curl --insecure -OJ ${ISL_SITE}/${ISL_FILE}
echo "${ISL_HASH} ${ISL_FILE}" | sha256sum -c
EOF
FROM fetch as extract FROM fetch as extract
RUN set -eux; \ RUN <<-EOF
tar -xf ${LINUX_FILE}; \ set -eux
tar -kxzf ${MUSL_FILE}; \ tar -xf ${LINUX_FILE}
tar -kxjf ${BUSYBOX_FILE}; \ tar -kxzf ${MUSL_FILE}
tar -kxf ${BINUTILS_FILE}; \ tar -kxjf ${BUSYBOX_FILE}
tar -kxzf ${MAKE_FILE}; \ tar -kxf ${BINUTILS_FILE}
tar -kxf ${GCC_FILE} tar -kxzf ${MAKE_FILE}
tar -kxf ${GCC_FILE}
EOF
FROM extract as build FROM extract as build
WORKDIR ${MUSL_DIR} WORKDIR ${MUSL_DIR}
RUN set -eux; \ RUN <<-EOF
../musl-${MUSL_VERSION}/configure \ set -eux
--prefix=/usr \ ../musl-${MUSL_VERSION}/configure \
--build=${BUILD} \ --prefix=/usr \
--host=${TARGET}; \ --build=${BUILD} \
make --host=${TARGET}
WORKDIR ${BINUTILS_DIR}
RUN set -eux; \
../binutils-${BINUTILS_VERSION}/configure \
--build=${BUILD} \
--host=${TARGET} \
--prefix=/usr \
--bindir=/usr/bin \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
--sysconfdir=/etc \
--disable-nls \
--disable-multilib \
--disable-plugins \
--disable-gprofng \
--enable-64-bit-bfd \
--enable-ld=default \
--enable-install-libiberty \
--enable-deterministic-archives; \
make
WORKDIR ${MAKE_DIR}
RUN set -ex; \
../make-${MAKE_VERSION}/configure \
--build=${BUILD} \
--host=${TARGET} \
--prefix=/usr \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
--disable-nls; \
make make
EOF
WORKDIR ${BINUTILS_DIR}
RUN <<-EOF
set -eux
../binutils-${BINUTILS_VERSION}/configure \
--build=${BUILD} \
--host=${TARGET} \
--prefix=/usr \
--bindir=/usr/bin \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
--sysconfdir=/etc \
--disable-nls \
--disable-multilib \
--disable-plugins \
--disable-gprofng \
--enable-64-bit-bfd \
--enable-ld=default \
--enable-install-libiberty \
--enable-deterministic-archives
make
EOF
WORKDIR ${MAKE_DIR}
RUN <<-EOF
set -eux
../make-${MAKE_VERSION}/configure \
--build=${BUILD} \
--host=${TARGET} \
--prefix=/usr \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
--disable-nls
make
EOF
WORKDIR ${GCC_DIR} WORKDIR ${GCC_DIR}
RUN set -eux; \ RUN <<-EOF
cp ../*.tar.* ../gcc-${GCC_VERSION}; \ set -eux
env -C ${HOME}/gcc-${GCC_VERSION} ./contrib/download_prerequisites; \ cp ../*.tar.* ../gcc-${GCC_VERSION}
../gcc-${GCC_VERSION}/configure \ env -C ${HOME}/gcc-${GCC_VERSION} ./contrib/download_prerequisites
--build=${BUILD} \ ../gcc-${GCC_VERSION}/configure \
--host=${TARGET} \ --build=${BUILD} \
--target=${TARGET} \ --host=${TARGET} \
--prefix=/usr \ --target=${TARGET} \
--mandir=/usr/share/man \ --prefix=/usr \
--infodir=/usr/share/info \ --mandir=/usr/share/man \
--libdir=/usr/lib \ --infodir=/usr/share/info \
--disable-cet \ --libdir=/usr/lib \
--disable-fixed-point \ --disable-cet \
--disable-libstdcxx-pch \ --disable-fixed-point \
--disable-multilib \ --disable-libstdcxx-pch \
--disable-libsanitizer \ --disable-multilib \
--disable-nls \ --disable-libsanitizer \
--disable-werror \ --disable-nls \
--enable-__cxa_atexit \ --disable-werror \
--enable-default-pie \ --enable-__cxa_atexit \
--enable-default-ssp \ --enable-default-pie \
--enable-languages=c,c++ \ --enable-default-ssp \
--enable-link-serialization=2 \ --enable-languages=c,c++ \
--enable-linker-build-id; \ --enable-link-serialization=2 \
make --enable-linker-build-id
make
EOF
WORKDIR ${BUSYBOX_DIR} WORKDIR ${BUSYBOX_DIR}
RUN set -eux; \ RUN <<-EOF
setConfs=' \ set -eux
CONFIG_LAST_SUPPORTED_WCHAR=0 \ setConfs=' \
CONFIG_STATIC=y \ CONFIG_LAST_SUPPORTED_WCHAR=0 \
'; \ CONFIG_STATIC=y \
unsetConfs=' \ '
CONFIG_FEATURE_SYNC_FANCY \ unsetConfs=' \
CONFIG_FEATURE_HAVE_RPC \ CONFIG_FEATURE_SYNC_FANCY \
CONFIG_FEATURE_INETD_RPC \ CONFIG_FEATURE_HAVE_RPC \
CONFIG_FEATURE_UTMP \ CONFIG_FEATURE_INETD_RPC \
CONFIG_FEATURE_WTMP \ CONFIG_FEATURE_UTMP \
'; \ CONFIG_FEATURE_WTMP \
make \ '
-f ../busybox-${BUSYBOX_VERSION}/Makefile \ make \
KBUILD_SRC=../busybox-${BUSYBOX_VERSION} \ -f ../busybox-${BUSYBOX_VERSION}/Makefile \
CROSS_COMPILE=${TARGET}- \ KBUILD_SRC=../busybox-${BUSYBOX_VERSION} \
defconfig; \ CROSS_COMPILE=${TARGET}- \
for conf in $unsetConfs; do \ defconfig
sed -i \ for conf in $unsetConfs; do \
-e "s!^$conf=.*\$!# $conf is not set!" \ sed -i \
.config; \ -e "s!^$conf=.*\$!# $conf is not set!" \
done; \ .config
for confV in $setConfs; do \ done
conf="${confV%=*}"; \ for confV in $setConfs; do \
sed -i \ conf="${confV%=*}"
-e "s!^$conf=.*\$!$confV!" \ sed -i \
-e "s!^# $conf is not set\$!$confV!" \ -e "s!^$conf=.*\$!$confV!" \
.config; \ -e "s!^# $conf is not set\$!$confV!" \
if ! grep -q "^$confV\$" .config; then \ .config
echo "$confV" >> .config; \ if ! grep -q "^$confV\$" .config; then \
fi; \ echo "$confV" >> .config; \
done; \ fi
make oldconfig CROSS_COMPILE=${TARGET}-; \ done
for conf in $unsetConfs; do \ make oldconfig CROSS_COMPILE=${TARGET}-
! grep -q "^$conf=" .config; \ for conf in $unsetConfs; do
done; \ ! grep -q "^$conf=" .config
for confV in $setConfs; do \ done
grep -q "^$confV\$" .config; \ for confV in $setConfs; do
done; \ grep -q "^$confV\$" .config
make CROSS_COMPILE=${TARGET}- done
make CROSS_COMPILE=${TARGET}-
EOF
WORKDIR ${HOME}/linux-${LINUX_VERSION} WORKDIR ${HOME}/linux-${LINUX_VERSION}
RUN set -eux; \ RUN <<-EOF
make ARCH=${ARCH} headers; \ set -eux
find usr/include -name '.*' -delete; \ make ARCH=${ARCH} headers
rm usr/include/Makefile; \ find usr/include -name '.*' -delete
rm usr/include/headers_check.pl; \ rm usr/include/Makefile
cp -rv usr/include ${LINUX_DIR} rm usr/include/headers_check.pl
cp -rv usr/include ${LINUX_DIR}
EOF
FROM build as install FROM build as install
USER 0:0 USER 0:0
RUN set -eux; \ RUN <<-EOF
env -C ${BUSYBOX_DIR} make \ set -eux
CROSS_COMPILE=${TARGET}- \ env -C ${BUSYBOX_DIR} make \
CONFIG_PREFIX=/rootfs \ CROSS_COMPILE=${TARGET}- \
install ; \ CONFIG_PREFIX=/rootfs \
env -C ${MUSL_DIR} make DESTDIR=/rootfs install; \ install
env -C ${BINUTILS_DIR} make DESTDIR=/rootfs install; \ env -C ${MUSL_DIR} make DESTDIR=/rootfs install
env -C ${MAKE_DIR} make DESTDIR=/rootfs install; \ env -C ${BINUTILS_DIR} make DESTDIR=/rootfs install
env -C ${GCC_DIR} make DESTDIR=/rootfs install; \ env -C ${MAKE_DIR} make DESTDIR=/rootfs install
cp -Rv ${LINUX_DIR}/* /rootfs/usr/include/; \ env -C ${GCC_DIR} make DESTDIR=/rootfs install
cd /rootfs/; \ cp -Rv ${LINUX_DIR}/* /rootfs/usr/include/
ln -sT /lib lib64; \ cd /rootfs/
mkdir -p etc tmp var/tmp home/user; \ ln -sT /lib lib64
echo "user:x:1000:" > etc/group; \ mkdir -p etc tmp var/tmp home/user
echo "user:x:1000:1000::/home/user:/bin/sh" > etc/passwd; \ echo "user:x:1000:" > etc/group
chown -R 1000:1000 tmp var/tmp home/user; \ echo "user:x:1000:1000::/home/user:/bin/sh" > etc/passwd
find /rootfs -exec touch -hcd "@0" "{}" + chown -R 1000:1000 tmp var/tmp home/user
find /rootfs -exec touch -hcd "@0" "{}" +
EOF
FROM scratch as package FROM scratch as package
COPY --from=install /rootfs / COPY --from=install /rootfs /

View File

@ -14,5 +14,5 @@ out/linux-generic.tgz: \
out/perl.tgz \ out/perl.tgz \
out/zlib.tgz \ out/zlib.tgz \
out/flex.tgz \ out/flex.tgz \
out/libelf.tgz out/elfutils.tgz
$(call build,kernel,linux-generic) $(call build,kernel,linux-generic)