commit 3baa648f45d09fc095b0774afcf78b85cb7853e5 Author: Mark Vainomaa Date: Sat Nov 10 00:42:27 2018 +0200 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dc06851 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +root/ +*.pkg.tar.xz +*-src.* diff --git a/pkgs/build-all.sh b/pkgs/build-all.sh new file mode 100755 index 0000000..4a4bea6 --- /dev/null +++ b/pkgs/build-all.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +set -e + +TARGET="${1}" +if [ -z "${TARGET}" ]; then + echo "You must specify rootfs where packages should be unpacked" +fi + +TARGET="$(realpath "${TARGET}")" + +source ./prepare-musl.sh + +build_and_install () { + local pkg="${1}" + local ver="$(grep ^pkgver < "${pkg}/build.sh" | sed 's/pkgver="\(.*\)"/\1/')" + + pushd "${pkg}" > /dev/null + local pkgfile="$(realpath "./${pkg}-${ver}.pkg.tar.xz")" + + if [ ! -f "${pkgfile}" ]; then + echo ">>> Building '${pkg}'" + ./build.sh + fi + + + tar -C "${TARGET}" -xf "${pkgfile}" + popd > /dev/null +} + +b () { + build_and_install "${@}" + return "${?}" +} + +# Absulutely needed +b filesystem +b musl-libc +b libexecinfo +b mksh + +# Networking +b zlib +b libressl +b curl + +# Init +b sabotage-kernel-headers +b runit +b eudev diff --git a/pkgs/common.sh b/pkgs/common.sh new file mode 100644 index 0000000..ca9d7e1 --- /dev/null +++ b/pkgs/common.sh @@ -0,0 +1,49 @@ +set -e + +check_function () { + if [ ! "$(type -t "${1}")" = "function" ]; then + echo ">>> Function '${1}' is not defined!" + return 1 + fi + return 0 +} + +do_prepare () { + prepare + + cd "${wd}" +} + +do_build () { + build + + cd "${wd}" +} + +do_package () { + package + + cd "${wd}" + fakeroot tar -C "${pkgdir}" -cf - . | \ + xz -9 -T 0 -vvv \ + > "${pkgname}-${pkgver}.pkg.tar.xz" + +} + +[ -z "${pkgname}" ] && ( echo ">>> pkgname is not defined"; exit 1 ); +[ -z "${pkgver}" ] && ( echo ">>> pkgver is not defined"; exit 1 ); + +check_function prepare || exit 1 +check_function build || exit 1 +check_function package || exit 1 + +wd="$(pwd)" +srcdir="$(mktemp -d /tmp/buildpkg-src.XXXXXXX)" +pkgdir="$(mktemp -d /tmp/buildpkg-bin.XXXXXXX)" + +do_prepare +do_build +do_package + +rm -rf "${srcdir}" +rm -rf "${pkgdir}" diff --git a/pkgs/curl/build.sh b/pkgs/curl/build.sh new file mode 100755 index 0000000..1bf9e2b --- /dev/null +++ b/pkgs/curl/build.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +pkgname="curl" +pkgver="7.62.0" + +src="https://curl.haxx.se/download/curl-${pkgver}.tar.gz" + +prepare () { + [ -f "${pkgname}-src.tar.gz" ] || curl -o "${pkgname}-src.tar.gz" "${src}" + tar -C "${srcdir}" -xvf "${pkgname}-src.tar.gz" +} + +build () { + cd "${srcdir}/curl-${pkgver}" + mkdir build && cd build + + ../configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --with-random=/dev/urandom \ + --with-ssl \ + --with-zlib \ + --enable-versioned-symbols \ + --enable-threaded-resolver \ + --disable-ldap \ + --disable-ldaps + + make +} + +package () { + cd "${srcdir}/curl-${pkgver}/build" + + make DESTDIR="${pkgdir}" install + make DESTDIR="${pkgdir}" install -C scripts +} + +. ../common.sh diff --git a/pkgs/eudev/build.sh b/pkgs/eudev/build.sh new file mode 100755 index 0000000..91d3e61 --- /dev/null +++ b/pkgs/eudev/build.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +pkgname="eudev" +pkgver="3.2.7" + +src="https://github.com/gentoo/eudev/archive/v${pkgver}.tar.gz" + +prepare () { + [ -f "${pkgname}-src.tar.gz" ] || curl -L -o "${pkgname}-src.tar.gz" "${src}" + tar -C "${srcdir}" -xvf "${pkgname}-src.tar.gz" +} + +build () { + cd "${srcdir}/eudev-${pkgver}" + + ./autogen.sh + + # Patch defs which aren't in 3.12.6 kernel headers + sed -i 's/KEY_ALS_TOGGLE/0x230/g' src/udev/udev-builtin-input_id.c + + mkdir build && cd build + + ../configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --disable-blkid \ + --disable-mtd_probe \ + --disable-kmod \ + --disable-selinux + + make +} + +package () { + cd "${srcdir}/eudev-${pkgver}/build" + make DESTDIR="${pkgdir}" install + + # Also bundle runit services + install -d -m 755 "${pkgdir}"/etc + install -d -m 755 "${pkgdir}"/etc/sv + + for svc in "${wd}"/sv-service/*; do + cp -p -r "${svc}" "${pkgdir}"/etc/sv/ + done +} + +. ../common.sh diff --git a/pkgs/eudev/sv-service/udev-trigger/check b/pkgs/eudev/sv-service/udev-trigger/check new file mode 100755 index 0000000..58b5f44 --- /dev/null +++ b/pkgs/eudev/sv-service/udev-trigger/check @@ -0,0 +1,2 @@ +#!/bin/sh -eu +exec udevadm settle diff --git a/pkgs/eudev/sv-service/udev-trigger/run b/pkgs/eudev/sv-service/udev-trigger/run new file mode 100755 index 0000000..6ee25fc --- /dev/null +++ b/pkgs/eudev/sv-service/udev-trigger/run @@ -0,0 +1,5 @@ +#!/bin/sh -eu +sv start udevd +/sbin/udevadm trigger --type=subsystems --action=add +/sbin/udevadm trigger --type=devices --action=add +exec sv once . diff --git a/pkgs/eudev/sv-service/udevd/check b/pkgs/eudev/sv-service/udevd/check new file mode 100755 index 0000000..58b5f44 --- /dev/null +++ b/pkgs/eudev/sv-service/udevd/check @@ -0,0 +1,2 @@ +#!/bin/sh -eu +exec udevadm settle diff --git a/pkgs/eudev/sv-service/udevd/run b/pkgs/eudev/sv-service/udevd/run new file mode 100755 index 0000000..0b8518a --- /dev/null +++ b/pkgs/eudev/sv-service/udevd/run @@ -0,0 +1,2 @@ +#!/bin/sh -eu +exec /sbin/udevd diff --git a/pkgs/filesystem/build.sh b/pkgs/filesystem/build.sh new file mode 100755 index 0000000..ae1be5f --- /dev/null +++ b/pkgs/filesystem/build.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +pkgname="filesystem" +pkgver="0.0.1" + +prepare () { + true +} + +build () { + true +} + +package () { + install -d "${pkgdir}"/dev + install -d "${pkgdir}"/proc + install -d "${pkgdir}"/sys + + install -d "${pkgdir}"/etc + + install -d "${pkgdir}"/usr + install -d "${pkgdir}"/usr/bin + install -d "${pkgdir}"/usr/sbin + install -d "${pkgdir}"/usr/lib + + ln -s /usr/bin "${pkgdir}"/bin + ln -s /usr/bin "${pkgdir}"/sbin + ln -s /usr/bin "${pkgdir}"/usr/sbin + ln -s /usr/lib "${pkgdir}"/lib +} + +. ../common.sh diff --git a/pkgs/libexecinfo/build.sh b/pkgs/libexecinfo/build.sh new file mode 100755 index 0000000..d154452 --- /dev/null +++ b/pkgs/libexecinfo/build.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +pkgname="libexecinfo" +pkgver="1.1-2" + +src="https://github.com/mikroskeem/${pkgname}/archive/1.1-2.tar.gz" + +prepare () { + [ -f "${pkgname}-src.tar.gz" ] || curl -L -o "${pkgname}-src.tar.gz" "${src}" + tar -C "${srcdir}" -xvf "${pkgname}-src.tar.gz" +} + +build () { + cd "${srcdir}/${pkgname}-${pkgver}" + + make \ + CC="${CC:-cc}" \ + CFLAGS="${CFLAGS} -fno-omit-frame-pointer" \ + all +} + +package () { + cd "${srcdir}/${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}/usr" install +} + +. ../common.sh diff --git a/pkgs/libressl/build.sh b/pkgs/libressl/build.sh new file mode 100755 index 0000000..51d8e95 --- /dev/null +++ b/pkgs/libressl/build.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +pkgname="libressl" +pkgver="2.8.2" + +src="https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-${pkgver}.tar.gz" + +prepare () { + [ -f "${pkgname}-src.tar.gz" ] || curl -o "${pkgname}-src.tar.gz" "${src}" + tar -C "${srcdir}" -xvf "${pkgname}-src.tar.gz" +} + +build () { + cd "${srcdir}/libressl-${pkgver}" + mkdir build && cd build + + ../configure \ + --prefix=/usr \ + --with-openssldir=/etc/ssl + + make +} + +package () { + cd "${srcdir}/libressl-${pkgver}/build" + make DESTDIR="${pkgdir}" install +} + +. ../common.sh diff --git a/pkgs/mksh/build.sh b/pkgs/mksh/build.sh new file mode 100755 index 0000000..a3576e0 --- /dev/null +++ b/pkgs/mksh/build.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +pkgname="mksh" +pkgver="R56c" + +src="http://www.mirbsd.org/MirOS/dist/mir/mksh/${pkgname}-${pkgver}.tgz" + +prepare () { + [ -f "${pkgname}-src.tar.gz" ] || curl -o "${pkgname}-src.tar.gz" "${src}" + tar -C "${srcdir}" -xvf "${pkgname}-src.tar.gz" +} + +build () { + cd "${srcdir}/mksh" + + sh ./Build.sh -j +} + +package () { + cd "${srcdir}/mksh" + strip --strip-all mksh + + local PREFIX + PREFIX="/usr" + + # Create directory structure + install -d "${pkgdir}${PREFIX}"/bin + install -d "${pkgdir}"/usr/share/man/cat1/ + install -d "${pkgdir}"/usr/share/man/man1/ + install -d "${pkgdir}"/usr/share/doc/mksh/examples/ + + # Copy files + install -s -m 555 mksh "${pkgdir}${PREFIX}"/bin/mksh + install -m 444 dot.mkshrc "${pkgdir}"/usr/share/doc/mksh/examples/ + install -m 444 lksh.cat1 "${pkgdir}"/usr/share/man/cat1/lksh.0 + install -m 444 mksh.cat1 "${pkgdir}"/usr/share/man/cat1/mksh.0 + install -m 444 lksh.1 "${pkgdir}"/usr/share/man/man1/lksh.1 + install -m 444 mksh.1 "${pkgdir}"/usr/share/man/man1/mksh.1 + + # Symlink /usr/bin/sh to /usr/bin/mksh + ln -s "${PREFIX}"/bin/mksh "${pkgdir}${PREFIX}"/bin/sh + + #grep -x "${PREFIX}"/bin/mksh "${pkgdir}"/etc/shells > /dev/null || \ + # echo "${PREFIX}"/bin/mksh >> "${pkgdir}"/etc/shells +} + +. ../common.sh diff --git a/pkgs/musl-libc/build.sh b/pkgs/musl-libc/build.sh new file mode 100755 index 0000000..f528c04 --- /dev/null +++ b/pkgs/musl-libc/build.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +pkgname="musl-libc" +pkgver="1.1.20" + +src="https://www.musl-libc.org/releases/musl-${pkgver}.tar.gz" + +prepare () { + [ -f "${pkgname}-src.tar.gz" ] || curl -o "${pkgname}-src.tar.gz" "${src}" + tar -C "${srcdir}" -xvf "${pkgname}-src.tar.gz" +} + +build () { + cd "${srcdir}/musl-${pkgver}" + mkdir build && cd build + + ../configure \ + --prefix=/usr + + make +} + +package () { + cd "${srcdir}/musl-${pkgver}/build" + make DESTDIR="${pkgdir}" install + + # Fix mislocated ld-musl-*.so + mv "${pkgdir}"/lib/ld-musl*.so* "${pkgdir}"/usr/lib + rmdir "${pkgdir}"/lib +} + +. ../common.sh diff --git a/pkgs/prepare-musl.sh b/pkgs/prepare-musl.sh new file mode 100644 index 0000000..864ff2e --- /dev/null +++ b/pkgs/prepare-musl.sh @@ -0,0 +1,3 @@ +export MAKEFLAGS="-j$(grep -c ^processor /proc/cpuinfo)" +export CC="musl-gcc -L\"${TARGET}/usr/lib\" -I\"${TARGET}/usr/include\"" +export LDFLAGS="-L\"${TARGET}/usr/lib\"" diff --git a/pkgs/runit/build.sh b/pkgs/runit/build.sh new file mode 100755 index 0000000..8ffb164 --- /dev/null +++ b/pkgs/runit/build.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +pkgname="runit" +pkgver="2.1.2" + +src="http://smarden.org/runit/runit-${pkgver}.tar.gz" + +prepare () { + [ -f "${pkgname}-src.tar.gz" ] || curl -o "${pkgname}-src.tar.gz" "${src}" + tar -C "${srcdir}" -xvf "${pkgname}-src.tar.gz" +} + +build () { + cd "${srcdir}/admin/runit-${pkgver}" + + echo "${CC:-gcc} $CFLAGS" > src/conf-cc + echo "${CC:-gcc -s} $LDFLAGS" > src/conf-ld + + # Fix quirks + sed -i 's/ -static//g' src/Makefile + sed -i 's#/service#/var&#g' src/sv.c + sed -i 's#/service#/var&#g' etc/debian/3 + + make -C src + make -C src check +} + +package () { + cd "${srcdir}/admin/runit-${pkgver}" + + # Oh boy... + install -d -m 755 "${pkgdir}"/etc/runit/runsvdir/pkg-default + install -d -m 755 "${pkgdir}"/etc/runit/runsvdir/all + install -d -m 755 "${pkgdir}"/var + install -m 755 etc/debian/{1,2,3} "${pkgdir}"/etc/runit/ + install -m 755 etc/debian/ctrlaltdel "${pkgdir}"/etc/runit/ + ln -s ../etc/runit/runsvdir/current "${pkgdir}"/var/service + + # Install binaries + install -d -m 755 "${pkgdir}"/usr/bin + for f in $(