Initial checking of makechrootpkg
Mostly functional, missing true su capability.... Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
This commit is contained in:
parent
5c11e9bb7c
commit
656a54014b
|
@ -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"
|
22
mkarchroot
22
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
|
||||
|
|
Loading…
Reference in New Issue