Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/makechrootpkg
diff options
context:
space:
mode:
Diffstat (limited to 'makechrootpkg')
-rwxr-xr-xmakechrootpkg92
1 files changed, 92 insertions, 0 deletions
diff --git a/makechrootpkg b/makechrootpkg
new file mode 100755
index 0000000..e7d772c
--- /dev/null
+++ b/makechrootpkg
@@ -0,0 +1,92 @@
+#!/bin/sh
+
+FORCE="n"
+RUN=""
+MAKEPKG_ARGS="-Ss"
+
+chrootdir="$CHROOT_SHELL"
+
+APPNAME=$(basename "${0}")
+
+if [ ! -f PKGBUILD ]; then
+ echo "This must be run in the directory of a built package."
+ exit 1
+fi
+source PKGBUILD
+
+if [ "$EUID" != "0" ]; then
+ echo "This script must be run as root."
+ exit 1
+fi
+
+usage ()
+{
+ echo "usage ${APPNAME} [-h] [-c CHROOT_SHELL] [makepkg args]"
+ echo " Run this script in a PKGBUILD dir to build a package inside a"
+ echo " clean chroot. All unrecognized arguments passed to this script"
+ echo " will be passed to makepkg."
+ echo ""
+ echo "The \$CHROOT_SHELL environment variable is used to determine where"
+ echo " your chroot shell is. The shell consists of the following"
+ echo " directories: \$CHROOT_SHELL/{root, rw, union} but only 'root' is"
+ echo " required by default. The rest will be created as needed"
+ echo ""
+ echo "The chroot shell 'root' directory must be created via the following"
+ echo "command:"
+ echo " mkarchroot \$CHROOT_SHELL base base-devel"
+ echo ""
+ echo "Default makepkg args: $MAKEPKG_ARGS"
+ exit 1
+}
+
+while getopts 'c:h' arg; do
+ case "${arg}" in
+ c) chrootdir="$OPTARG" ;;
+ h|?) usage ;;
+ *) MAKEPKG_ARGS="$MAKEPKG_ARGS -$arg $OPTARG" ;;
+ esac
+done
+
+if [ ! -d "$chrootdir" ]; then
+ echo "No \$CHROOT_SHELL defined, or invalid path"
+ exit 1
+fi
+
+if [ ! -d "$chrootdir/root" ]; then
+ echo "Missing \$CHROOT_SHELL root directory."
+ echo "Try using: mkarchroot \$CHROOT_SHELL base base-devel"
+ exit 1
+fi
+
+[ -d "$chrootdir/rw" ] || mkdir "$chrootdir/rw"
+[ -d "$chrootdir/union" ] || mkdir "$chrootdir/union"
+
+function cleanup ()
+{
+ echo "cleaning up unioned mounts"
+ umount "$chrootdir/union"
+}
+
+uniondir="$chrootdir/union"
+echo "building union chroot"
+modprobe -q unionfs
+mount -t unionfs none -o "dirs=$chrootdir/rw=rw:$chrootdir/root=ro" "$uniondir"
+trap 'cleanup' 1 2 15
+
+echo "moving build files to chroot"
+[ -d "$uniondir/build" ] || mkdir "$uniondir/build"
+
+(
+cat <<EOF
+#!/bin/sh
+su nobody
+cd /build
+makepkg $MAKEPKG_ARGS
+EOF
+) > "$uniondir/chrootbuild"
+chmod +x "$uniondir/chrootbuild"
+
+./mkarchroot -r "/chrootbuild" "$uniondir"
+
+# TODO move relevant files here
+echo "build complete... check \$CHROOT_SHELL/build for build results"