summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Griffin <aaronmgriffin@gmail.com>2007-10-03 23:24:29 -0500
committerAaron Griffin <aaronmgriffin@gmail.com>2007-10-03 23:24:29 -0500
commit656a54014bb63dc1ce5b6f3037111fbbbd786529 (patch)
tree0a36c395fa1f5cbd829a205689eb4962cae7a222
parent5c11e9bb7ca987f61587afd807fd371ba4986875 (diff)
downloaddevtools32-656a54014bb63dc1ce5b6f3037111fbbbd786529.tar.xz
Initial checking of makechrootpkg
Mostly functional, missing true su capability.... Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
-rwxr-xr-xmakechrootpkg92
-rwxr-xr-xmkarchroot22
2 files changed, 107 insertions, 7 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"
diff --git a/mkarchroot b/mkarchroot
index db3ce37..22697ca 100755
--- a/mkarchroot
+++ b/mkarchroot
@@ -1,14 +1,17 @@
#!/bin/sh
FORCE="n"
-BZIP2=""
-GZIP=""
RUN=""
working_dir=""
APPNAME=$(basename "${0}")
+if [ "$EUID" != "0" ]; then
+ echo "This script must be run as root."
+ exit 1
+fi
+
usage ()
{
echo "usage ${APPNAME} [options] working-dir package [package [package..]]"
@@ -20,9 +23,8 @@ usage ()
}
while getopts 'r:fh' arg; do
- echo "getopts $arg"
case "${arg}" in
- r) echo "run=>$OPTARG"; RUN="$OPTARG" ;;
+ r) RUN="$OPTARG" ;;
f) FORCE="y" ;;
h|?) usage ;;
*) echo "invalid argument '${arg}'"; usage ;;
@@ -30,7 +32,13 @@ while getopts 'r:fh' arg; do
done
shift $(($OPTIND - 1))
-[ $# -lt 1 ] && echo "missing arguments" && usage
+if [ "$RUN" == "" -a $# -lt 2 ]; then
+ echo "you must specify a directory and one or more packages"
+ usage
+elif [ $# -lt 1 ]; then
+ echo "you must specify a directory"
+ usage
+fi
working_dir="$(readlink -f ${1})"
shift 1
@@ -86,8 +94,8 @@ if [ "$RUN" != "" ]; then
chroot_mount
- echo "starting chroot (using \$SHELL)"
- chroot "${working_dir}" "${SHELL}"
+ echo "starting chroot ($RUN)"
+ chroot "${working_dir}" "${RUN}"
# }}}
else