Loading makechrootpkg 0 → 100755 +92 −0 Original line number Diff line number Diff line #!/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" mkarchroot +15 −7 Original line number Diff line number Diff line #!/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..]]" Loading @@ -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 ;; Loading @@ -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 Loading Loading @@ -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 Loading Loading
makechrootpkg 0 → 100755 +92 −0 Original line number Diff line number Diff line #!/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"
mkarchroot +15 −7 Original line number Diff line number Diff line #!/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..]]" Loading @@ -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 ;; Loading @@ -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 Loading Loading @@ -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 Loading