summaryrefslogtreecommitdiff
path: root/setup-abuild
diff options
context:
space:
mode:
authorZach van Rijn <me@zv.io>2022-12-10 11:32:48 -0600
committerZach van Rijn <me@zv.io>2022-12-10 13:45:42 -0600
commite6db002716c0c46fd73ebc258ada23edbf5c7d12 (patch)
treed991697f179e07eaab1c8fdc2dad8f18efbe0111 /setup-abuild
downloadbootstrap-e6db002716c0c46fd73ebc258ada23edbf5c7d12.tar.gz
bootstrap-e6db002716c0c46fd73ebc258ada23edbf5c7d12.tar.bz2
bootstrap-e6db002716c0c46fd73ebc258ada23edbf5c7d12.tar.xz
bootstrap-e6db002716c0c46fd73ebc258ada23edbf5c7d12.zip
Initial proof of concept.
Currently, if you run this on a Linux box as an unprivileged user: $ ./bootstrap armv7 /some/scratch/directory you will end up with, completely from source: rootfs-armv7l-adelie-linux-musleabihf-preimage.tgz which is an armv7-native rootfs with all the tools that you need to build our distribution. (Substitute your favorite target). Work that remains to be done involves fixing "bootstrap.sh" in the packages.git repository, then plumbing that back into this project so that the complete process can be automated.
Diffstat (limited to 'setup-abuild')
-rwxr-xr-xsetup-abuild362
1 files changed, 362 insertions, 0 deletions
diff --git a/setup-abuild b/setup-abuild
new file mode 100755
index 0000000..686df6d
--- /dev/null
+++ b/setup-abuild
@@ -0,0 +1,362 @@
+#!/bin/sh -e
+
+HERE="$(dirname $(readlink -f ${0}))";
+DEST=/usr/local;
+
+git config --global http.sslCAInfo "${CURL_CA_BUNDLE}";
+
+
+mkdir -p "${DEST}";
+cd "${DEST}"; # this directory will already exist if correct
+
+##
+# musl
+#
+# This provides the dynamic loader for the foreign (target) arch
+# so that we do not have to force building static musl binaries.
+#
+nmus=musl;
+vmus=1.2.3;
+test ! -f ._${nmus}-${vmus} && \
+(
+ test ! -d ${nmus}-${vmus} \
+ && curl -s https://musl.libc.org/releases/${nmus}-${vmus}.tar.gz \
+ | tar -xzf - \
+ ;
+ cd ${nmus}-${vmus};
+ rm -fr x; mkdir x; cd x;
+ ../configure \
+ --prefix=/usr \
+ --enable-static \
+ --enable-shared \
+ ;
+ make -j$(nproc);
+ make install;
+)
+touch ._${nmus}-${vmus};
+rm -fr ${nmus}-${vmus};
+
+
+##
+# OpenSSL
+#
+nssl=openssl;
+vssl=1.1.1s;
+test ! -f ._${nssl}-${vssl} && \
+(
+ test ! -d ${nssl}-${vssl} \
+ && curl -s https://www.openssl.org/source/${nssl}-${vssl}.tar.gz \
+ | tar -xzf - \
+ ;
+ cd ${nssl}-${vssl};
+ rm -fr x; mkdir x; cd x;
+ ../Configure cc \
+ --prefix="${DEST}" \
+ --openssldir="${DEST}" \
+ no-shared \
+ ;
+ make -j$(nproc);
+ make install_sw install_ssldirs;
+)
+touch ._${nssl}-${vssl};
+rm -fr ${nssl}-${vssl};
+
+
+##
+# zlib
+#
+nzlb=zlib;
+vzlb=1.2.13;
+test ! -f ._${nzlb}-${vzlb} && \
+(
+ test ! -d ${nzlb}-${vzlb} \
+ && curl -s https://www.zlib.net/${nzlb}-${vzlb}.tar.gz \
+ | tar -xzf - \
+ ;
+ cd ${nzlb}-${vzlb};
+ rm -fr x; mkdir x; cd x;
+ ../configure \
+ --prefix="${DEST}" \
+ --static \
+ ;
+ make -j$(nproc);
+ make install;
+)
+touch ._${nzlb}-${vzlb};
+rm -fr ${nzlb}-${vzlb};
+
+
+##
+# abuild
+#
+nbld=abuild;
+vbld=f75ebd1953f6e41416b5037c4049b55b9a21a1ea;
+test ! -f ._${nbld}-${vbld} && \
+(
+ test ! -d ${nbld}-${vbld} \
+ && git clone https://git.adelielinux.org/adelie/${nbld}.git ${nbld}-${vbld} \
+ ;
+ cd abuild-${vbld};
+ git checkout ${vbld};
+ while read k; do curl -s ${k} | patch -p1 || true; done <<EOF
+http://ix.io/4ifN
+EOF
+ rm -fr x; mkdir x; cd x;
+ export SSL_CFLAGS="-I${DEST}/include";
+ export SSL_LDFLAGS="-L${DEST}/lib";
+ export SSL_LIBS="-lssl -lcrypto"; # not in mcmtools
+ export ZLIB_LIBS="-lz"; # do not use from mcmtools
+ export LDFLAGS="-L${DEST}/lib -lssl -lcrypto";
+ export CFLAGS="-static -I${DEST}/include";
+ sed -i "${DEST}/abuild-${vbld}/abuild-sudo.c" \
+ -e "s@__DEST__@${DEST}@" \
+ ; # hardcoded
+ make -j$(nproc) -C .. install \
+ prefix="${DEST}" \
+ sysconfdir="${DEST}" \
+ SCDOC=true \
+ ;
+ sed -i "${DEST}/bin/abuild" \
+ -e 's@/bin/ash -e@/usr/bin/env bash@' \
+ ; # hardcoded
+)
+touch ._${nbld}-${vbld};
+rm -fr ${nbld}-${vbld};
+
+
+##
+# util-linux (for 'getopt' used by 'abuild-keygen')
+#
+nutl=util-linux;
+vutl=08431acdf5b3accd0887ab550bfa4efabed751d6;
+test ! -f ._${nutl}-${vutl} && \
+(
+ test ! -d ${nutl}-${vutl} \
+ && mkdir ${nutl}-${vutl} \
+ && git clone https://github.com/karelzak/${nutl}.git ${nutl}-${vutl} \
+ ;
+ cd ${nutl}-${vutl};
+ git checkout ${vutl};
+ test -f configure || ./autogen.sh;
+ rm -fr x; mkdir x; cd x;
+ ../configure \
+ --prefix="${DEST}" \
+ --host="$(${CC} -dumpmachine)" \
+ --enable-static \
+ --disable-shared \
+ ;
+ sed -i Makefile \
+ -e 's/chgrp/-chgrp/g' \
+ -e 's/chmod/-chmod/g' \
+ -e 's/chown/-chown/g' \
+ ; # allow non-root installation
+ make -j$(nproc) install;
+)
+touch ._${nutl}-${vutl};
+rm -fr ${nutl}-${vutl};
+
+
+##
+# pkgconf (pkg-config replacement)
+#
+npkg=pkgconf;
+vpkg=623b8f7851648a5c476de904a8ffed7b7b679aab; # until autoconf 2.71
+test ! -f ._${npkg}-${vpkg} &&
+(
+ test ! -d ${npkg}-${vpkg} \
+ && git clone https://github.com/${npkg}/${npkg}.git ${npkg}-${vpkg} \
+ ;
+ cd ${npkg}-${vpkg};
+ git checkout ${vpkg};
+ ./autogen.sh;
+ ./configure \
+ --prefix="${DEST}" \
+ --host="$(${CC} -dumpmachine)" \
+ --enable-static \
+ --disable-shared \
+ --with-system-libdir=/lib:/usr/lib \
+ --with-system-includedir=/usr/include \
+ ;
+ make -j$(nproc) install;
+ ln -s pkgconf "${DEST}"/bin/pkg-config
+)
+touch ._${npkg}-${vpkg};
+rm -fr ${npkg}-${vpkg};
+
+
+##
+# samurai (ninja replacement)
+#
+nsam=samurai;
+vsam=4cc8f4a3654b72c977e0e62367d1ab6d5b873def;
+test ! -f ._${nsam}-${vsam} &&
+(
+ test ! -d ${nsam}-${vsam} \
+ && git clone https://github.com/michaelforney/${nsam}.git ${nsam}-${vsam} \
+ ;
+ cd ${nsam}-${vsam};
+ make -j$(nproc) install \
+ PREFIX="" \
+ DESTDIR="${DEST}" \
+ ;
+
+)
+touch ._${nsam}-${vsam};
+rm -fr ${nsam}-${vsam};
+
+
+##
+# muon (meson replacement)
+#
+nmun=muon;
+vmun=62ce4561b4444e5020dc39aad0381655afeda0d6;
+test ! -f ._${nmun}-${vmun} &&
+(
+ test ! -d ${nmun}-${vmun} \
+ && git clone https://git.sr.ht/~lattis/${nmun} ${nmun}-${vmun} \
+ ;
+ cd ${nmun}-${vmun};
+ sed -i bootstrap.sh \
+ -e 's/if.*then/if false; then/g' \
+ ;
+ ./bootstrap.sh \
+ bootstrap \
+ ;
+ bootstrap/muon setup \
+ -Dstatic=true \
+ build \
+ ;
+ sed -i build/build.ninja \
+ -e "s@\bar\b@${AR}@g" \
+ ;
+ samu -C build;
+ cp build/muon "${DEST}/bin";
+)
+touch ._${nmun}-${vmun};
+rm -fr ${nmun}-${vmun};
+
+
+##
+# apk-tools
+#
+# Ariadne says use meson, and 'muon' doesn't work so... kludges!
+# Also, '-j' will break the build.
+#
+natl=apk-tools;
+vatl=be4ce40797af9056c79be4dc74ff978f1f4957e4;
+test ! -f ._${natl}-${vatl} && \
+(
+ test ! -d ${natl}-${vatl} \
+ && git clone https://git.alpinelinux.org/${natl} ${natl}-${vatl} \
+ ;
+ cd ${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/' \
+ ; # disable shared libs, hack the hack
+ sed -i src/context.c \
+ -e "s@var/log@${DEST}/${1}/var/log@" \
+ ; # hardcoded
+ ln -sf ../portability/strlcpy.c src/strlcpy.c;
+ export LUA=no; # documentation requires lua
+ make clean;
+ make \
+ INSTALLDIR="${DEST}" \
+ CFLAGS="-I${DEST}/include -DNEED_STRLCPY -Wno-error" \
+ LDFLAGS="-L${DEST}/lib -L${DEST}/${natl}-${vatl}/libfetch" \
+ LIBS="-lapk -lfetch -lssl -lcrypto -lz" \
+ ;
+ cp src/apk "${DEST}/bin";
+)
+touch ._${natl}-${vatl};
+rm -fr ${natl}-${vatl};
+
+
+##
+# pax-utils
+#
+npax=pax-utils;
+vpax=974b9359c2f89d57e69598572aafcd8f920d79e2;
+test ! -f ._${npax}-${vpax} && \
+(
+ test ! -d ${npax}-${vpax} \
+ && git clone https://anongit.gentoo.org/git/proj/${npax}.git ${npax}-${vpax} \
+ ;
+ cd ${npax}-${vpax};
+ git checkout ${vpax};
+ muon setup build;
+ samu -C build;
+ muon -C build install;
+)
+touch ._${npax}-${vpax};
+rm -fr ${npax}-${vpax};
+
+
+##
+# fakeroot
+#
+nfrt=fakeroot;
+vfrt=8c0260009e85264fd1ea282fbb22063fc694c552; # until autoconf 2.71
+test ! -f ._${nfrt}-${vfrt#*:} && \
+(
+ test ! -d ${nfrt}-${vfrt} \
+ && git clone https://salsa.debian.org/clint/${nfrt}.git ${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;
+ CFLAGS="-D_STAT_VER=0 $CFLAGS" \
+ ../configure \
+ --prefix="${DEST}" \
+ ;
+ sed -i Makefile \
+ -e '/^SUBDIRS =/ s/doc//g' \
+ ;
+ make -j$(nproc) install;
+)
+touch ._${nfrt}-${vfrt#*:};
+rm -fr ${nfrt}-${vfrt#*:};
+
+
+##
+# attr
+#
+natt=attr;
+vatt=2979615e71fb53b3f2f9085eea516d4e2b3174ea;
+test ! -f ._${natt}-${vatt} &&
+(
+ test ! -d ${natt}-${vatt} \
+ && git clone https://git.savannah.nongnu.org/git/${natt}.git ${natt}-${vatt} \
+ ;
+ cd ${natt}-${vatt};
+ git checkout ${vatt};
+ ./autogen.sh;
+ ./configure \
+ --prefix="${DEST}" \
+ --enable-static \
+ --disable-shared \
+ ;
+ make -j$(nproc) install;
+)
+touch ._${natt}-${vatt};
+rm -fr ${natt}-${vatt};