diff options
author | Zach van Rijn <me@zv.io> | 2022-12-08 23:56:37 -0600 |
---|---|---|
committer | Zach van Rijn <me@zv.io> | 2024-08-10 06:09:07 +0000 |
commit | ab793c18beed332b2788d4b3fa848df8dfa61659 (patch) | |
tree | 16c39be69b040321586ba187612a2cc284a92adb | |
parent | d86c68a1631f589c382cc436ff8ba04f6e7700bc (diff) | |
download | packages-ab793c18beed332b2788d4b3fa848df8dfa61659.tar.gz packages-ab793c18beed332b2788d4b3fa848df8dfa61659.tar.bz2 packages-ab793c18beed332b2788d4b3fa848df8dfa61659.tar.xz packages-ab793c18beed332b2788d4b3fa848df8dfa61659.zip |
Miscellaneous cleaning & updating. Mega descriptive i know.
-rwxr-xr-x | scripts/bootstrap-abuild | 39 | ||||
-rwxr-xr-x | scripts/bootstrap.sh | 164 |
2 files changed, 119 insertions, 84 deletions
diff --git a/scripts/bootstrap-abuild b/scripts/bootstrap-abuild index 4333113a8..c35dd2f51 100755 --- a/scripts/bootstrap-abuild +++ b/scripts/bootstrap-abuild @@ -14,28 +14,6 @@ git config --global http.sslCAInfo "${CURL_CA_BUNDLE}"; mkdir -p "${DEST}"; cd "${DEST}"; # this directory will already exist if correct -if false; then # provided by latest 'bootstrap' -## -# Perl -# -nprl=perl; -vprl=5.36.0; -test ! -f ._${vprl}-${vprl} && \ -( - test ! -d ${nprl}-${vprl} \ - && curl -s https://www.cpan.org/src/${vprl%%.*}.0/perl-${vprl}.tar.gz \ - | tar -xzf - \ - ; - cd ${nprl}-${vprl}; - rm -fr x; mkdir x; cd x; - ../Configure -des; - make -j$(nproc); - make install; -) -touch ._${nprl}-${vprl}; -rm -fr ${nprl}-${vprl}; -fi - ## # musl # @@ -53,7 +31,7 @@ test ! -f ._${nmus}-${vmus} && \ cd ${nmus}-${vmus}; rm -fr x; mkdir x; cd x; ../configure \ - --prefix="${DEST}" \ + --prefix=/usr \ --enable-static \ --enable-shared \ ; @@ -279,6 +257,11 @@ test ! -f ._${natl}-${vatl} && \ sed -i Make.rules \ -e '/targets += $(__shlibs) $(shobjs)/d' \ ; # disable shared libs + sed -i Make.rules \ + -e '/CC.*:=/d' \ + -e '/AR.*:=/d' \ + -e '/LD.*:=/d' \ + ; # inherit from environment sed -i src/Makefile \ -e 's/$(install-libapk_so)//g' -e 's/$(libapk_so)//g' \ -e 's/ version.o/ version.o strlcpy.o/' \ @@ -331,14 +314,20 @@ test ! -f ._${nfrt}-${vfrt#*:} && \ ; cd ${nfrt}-${vfrt}; git checkout ${vfrt}; + while read k; do curl -s ${k} | patch -p1 || true; done <<EOF +https://git.alpinelinux.org/aports/plain/main/fakeroot/do-not-redefine-id_t.patch?id=bb497eeb2155d0332284942105692bc05fec25a9 +https://git.alpinelinux.org/aports/plain/main/fakeroot/fakeroot-no64.patch?id=bb497eeb2155d0332284942105692bc05fec25a9 +https://git.alpinelinux.org/aports/plain/main/fakeroot/fakeroot-stdint.patch?id=bb497eeb2155d0332284942105692bc05fec25a9 +https://git.alpinelinux.org/aports/plain/main/fakeroot/fix-format.patch?id=bb497eeb2155d0332284942105692bc05fec25a9 +https://git.alpinelinux.org/aports/plain/main/fakeroot/fix-shell-in-fakeroot.patch?id=bb497eeb2155d0332284942105692bc05fec25a9 +EOF ./bootstrap; f=$(mktemp); # needed due to "error: unknown type name 'cap_user_header_t'" echo > ${f} "#include <linux/capability.h>"; cat libfakeroot.c >> ${f}; mv ${f} libfakeroot.c; rm -fr x; mkdir x; cd x; - # -D_ID_T is for "error: conflicting types for 'id_t'; have 'int'" - CFLAGS="-D_ID_T" \ + CFLAGS="-D_STAT_VER=0 $CFLAGS" \ ../configure \ --prefix="${DEST}" \ ; diff --git a/scripts/bootstrap.sh b/scripts/bootstrap.sh index 206eab750..3617a0c74 100755 --- a/scripts/bootstrap.sh +++ b/scripts/bootstrap.sh @@ -1,7 +1,7 @@ #!/bin/sh -e #=============================================================== -# Filename : scripts/bootstrap.sh (part of Adélie package repo). +# Filename : bootstrap.sh # Purpose : Bootstraps Adélie from source for any architecture. # Authors : Zach van Rijn <me@zv.io> # License : MIT @@ -37,7 +37,7 @@ # # * One-click bootstrap. Just start the script and walk away. # -# $ ./scripts/bootstrap.sh ppc64 /path/to/new/scratch/dir +# $ ./bootstrap.sh ppc64 /path/to/new/scratch/dir # # * Can be done without root privileges: no 'chroot(8)'. # @@ -51,12 +51,72 @@ # * Minimal dependencies. Nothing fancy. Shell scripts only. # # * Can be adapted to assist with porting Adélie to new target -# architectures. TODO: write a tool to automatically do it. +# architectures. TODO: write a tool to automatically do so. # # (*) We don't count binaries in your starting environment, and # recommend https://www.gnu.org/software/mes/ for the brave. # # +# design +# ------ +# +# The goal of this script is to support as wide a range of uses +# as possible. For example, a full cross-platform bootstrap that +# needs to be done without target hardware or virtual machines. +# +# There are a few different strategies, depending on your needs +# and what type of privileges/hardware you have access to. +# +# In this diagram, indentation refers to an output product, and +# moving down vertically refers to an input step. CPU A is the +# build architecture, and CPU B is the target architecture. Your +# mileage may vary, and you can mix/match other approaches.. +# +# * CPU A --> CPU B (slowest: no privilege, no CPU B hardware) +# --> Bootstrap 1 (Cross Libc + Partial Cross CPU B) +# --> CPU A + CPU B Mixed Rootfs +# --> Partial Emulation (PRoot) +# --> Bootstrap 2 (Full Cross CPU B) +# --> CPU B Host Rootfs +# --> Full Emulation (PRoot) +# --> Adélie Bootstrap +# --> Adélie Rootfs for CPU B +# +# * CPU A --> CPU B (slower: privilege, no CPU B hardware) +# --> Bootstrap 1 (Cross Libc + Partial Cross CPU B) +# --> CPU A + CPU B Mixed Rootfs +# --> Partial Emulation (registered binfmt_misc) +# --> Bootstrap 2 (Full Cross CPU B) +# --> CPU B Host Rootfs +# --> Full Emulation (registered binfmt_misc) +# --> Adélie Bootstrap +# --> Adélie Rootfs for CPU B +# +# * CPU A --> CPU B (faster; no privilege, CPU B hardware) +# --> Bootstrap 1 (Cross Libc + Partial Cross CPU B) +# --> CPU A + CPU B Mixed Rootfs +# --> Partial Emulation (PRoot) +# --> Bootstrap 2 (Full Cross CPU B) +# --> CPU B Host Rootfs +# --> Copy to Native CPU B Hardware +# --> Adélie Bootstrap +# --> Adélie Rootfs for CPU B +# +# * CPU B --> CPU B (fastest; QEMU-system or native hardware) +# --> Bootstrap 1 (Cross Libc) +# --> CPU B Mixed Rootfs +# --> Bootstrap 2 (Remove Contamination) +# --> CPU B Host Rootfs +# --> Adélie Bootstrap +# --> Adélie Rootfs for CPU B +# +# The resulting Adélie Rootfs is capable of building the entire +# Adélie Linux distribution from source. We use it to seed our +# official build servers. This removes the dependency on using +# previous binary releases of our distribution, which had been +# manually bootstrapped way back from Gentoo and/or on a G5. +# +# # requirements # ------------ # @@ -68,6 +128,9 @@ # and the decision to emulate a native environment instead of to # force explicit cross-compilation at each step in the process. # +# Targeting an architecture of opposite endianness will be even +# slower; this is a QEMU limitation. +# # If you wish to bootstrap to the same target CPU architecture, # or a compatible mode (e.g. i686 on x86_64), it will be faster. # @@ -87,38 +150,6 @@ # To do this, you'd essentially comment out the first stages or # copy the results of the first stages elsewhere and continue. # -# There are a few different sequences, depending on your needs. -# In this diagram, indentation refers to an output product, and -# moving down vertically refers to an input step. -# -# * CPU A --> CPU B (slow; no access to CPU B hardware) -# --> Bootstrap 1 (Cross Libc + Partial Cross CPU B) -# --> CPU A + CPU B Mixed Rootfs -# --> Partial Emulation -# --> Bootstrap 2 (Full Cross CPU B) -# --> CPU B Host Rootfs -# --> Full Emulation -# --> Adélie Bootstrap -# --> Adélie Rootfs for CPU B -# -# * CPU A --> CPU B (faster; access to CPU B hardware) -# --> Bootstrap 1 (Cross Libc + Partial Cross CPU B) -# --> CPU A + CPU B Mixed Rootfs -# --> Partial Emulation -# --> Bootstrap 2 (Full Cross CPU B) -# --> CPU B Host Rootfs -# --> Copy to Native CPU B Hardware -# --> Adélie Bootstrap -# --> Adélie Rootfs for CPU B -# -# * CPU A --> CPU A (fastest) -# --> Bootstrap 1 (Cross Libc) -# --> CPU A Mixed Rootfs -# --> Bootstrap 2 (Remove Contamination) -# --> CPU A Host Rootfs -# --> Adélie Bootstrap -# --> Adélie Rootfs for CPU A -# # Other requirements that you should be aware of, estimated: # # * As many CPU cores as you can throw at it; @@ -289,14 +320,15 @@ EOF # ARCH is translated to canonical GCC and QEMU machine types. # case "${1}" in -# adelie gcc qemu -# ------ --- ---- - aarch64) m=aarch64 ; q=aarch64 ; ;; - armv7) m=armv7l ; q=arm ; ;; - ppc) m=powerpc ; q=ppc ; ;; - ppc64) m=powerpc64 ; q=ppc64 ; ;; - x86_64) m=x86_64 ; q=x86_64 ; ;; - pmmx) m=i586 ; q=i386 ; ;; +# adelie gcc qemu +# ------ --- ---- + aarch64) m=aarch64: ; q=aarch64 ; ;; + armv7) m=armv7l:eabihf ; q=arm ; ;; + ppc) m=powerpc: ; q=ppc ; ;; + ppc64) m=powerpc64: ; q=ppc64 ; ;; + riscv64) m=riscv64: ; q=riscv64 ; ;; + x86_64) m=x86_64: ; q=x86_64 ; ;; + pmmx) m=i586: ; q=i386 ; ;; *) usage ;; esac shift; @@ -317,6 +349,7 @@ case "${1}" in exit 1; ;; esac +shift; ## @@ -325,7 +358,7 @@ esac CHAINS=https://git.zv.io/toolchains; printf "CHAINS=%s\n" "${CHAINS}"; -SYSTEM="-linux-musl"; # we only target musl on Linux +SYSTEM="-adelie-linux-musl"; # we only target musl on Linux printf "SYSTEM=%s\n" "${SYSTEM}"; NATIVE=$(cc -dumpmachine); # host arch, host libc @@ -334,7 +367,7 @@ printf "NATIVE=%s\n" "${NATIVE}"; BUILDS="${NATIVE%%-*}${SYSTEM}"; # host arch, musl libc printf "BUILDS=%s\n" "${BUILDS}"; -TARGET="${m}${SYSTEM}"; # ultimate Adélie Linux target +TARGET="${m%:*}${SYSTEM}${m#*:}"; # ultimate Adélie Linux target printf "TARGET=%s\n" "${TARGET}"; MTOOLS=${MCMTOOLS:-"${BASE}/mcmtools"}; # CAREFUL! MAY CAUSE DATA LOSS! @@ -345,6 +378,8 @@ printf "MTOOLS=%s\n" "${MTOOLS}"; # DEF_PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"; +mkdir -p "${BASE}"; + #--------------------------------------------------------------- # mcmtools (seed) @@ -363,7 +398,7 @@ if ! test -d "${MTOOLS}/sys/emus/bin"; then # FIXME: no hard code test -d bootstrap \ || git clone ${CHAINS}/bootstrap.git; cd bootstrap; - git checkout 2a79c1e5ea43e6fab23cf1e18b8a4104cfb9cef1; + git checkout a7c0a77976484755650932d1b6070bb7003c5025; ## seed rootfs # @@ -373,27 +408,35 @@ if ! test -d "${MTOOLS}/sys/emus/bin"; then # FIXME: no hard code # We copy 'config.mak' from mcmtools bootstrap to the rootfs # so that when we build "real" toolchain they are the same. # - test -d "${MTOOLS}" || \ DEST="${MTOOLS}" \ ARCH=${BUILDS} \ ./bootstrap \ ; + # cleaning + ( + cd "${MTOOLS}"; + rm -fr tmp; # save 10 GB + ) test -f "${MTOOLS}"/config.mak || \ cp "${MTOOLS}"/tmp/musl-cross-make/config.mak \ "${MTOOLS}"/config.mak \ ; # cleaning - cd "${MTOOLS}"; - rm -fr tmp; # save 10 GB + ( + cd "${MTOOLS}"; + rm -fr tmp; # save 10 GB + ) # is any of this actually needed? - cd "${MTOOLS}"/sys; - mkdir -p dev; - mkdir -p proc; - mkdir -p sys; - rm -fr usr; - ln -s . usr; + ( + cd "${MTOOLS}"/sys; + mkdir -p dev; + mkdir -p proc; + mkdir -p sys; + rm -fr usr; + ln -s . usr; + ) ## emulators # @@ -453,7 +496,7 @@ if ! test -d "${MTOOLS}"/sys/tc/native; then # FIXME: no hard code # # Note: "native" is for the foreign target CPU architecture. # - PATH="${MTOOLS}/musl/bin:${MTOOLS}/sys/bin" \ + MCMTOOLS="${MTOOLS}" \ ./scripts/build ${TARGET} \ ; for k in cross native; do @@ -478,7 +521,6 @@ PATH="/tc/cross/bin:${DEF_PATH}" \ SHELL=/bin/sh \ DEST=/usr/local \ CURL_CA_BUNDLE=/cacert.pem \ -CROSS_COMPILE=${TARGET}- \ CC=${TARGET}-gcc \ CXX=${TARGET}-g++ \ AR=${TARGET}-ar \ @@ -533,8 +575,6 @@ fi # # FIXME: is Linux 3.2.0 really appropriate here? # -# TODO: add 'if' gate for whether to execute this ... don't want -# to run it every time. if ! test -d "${BASE}"/mcmtools-${TARGET}/sys/tc/musl/bin; then # FIXME: no hard code PROOT_NO_SECCOMP=1 \ PATH="/tc/native/bin:${DEF_PATH}" \ @@ -553,6 +593,12 @@ ${MTOOLS}/sys/emus/bin/proot \ ; fi +# cleaning +( + cd "${BASE}"/mcmtools-${TARGET}; + rm -fr tmp; # save 10 GB +) + ## # Install the native static toolchain over the native rootfs for # a quick way to have the dynamic loader. Overwrite the symlink! |