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
|
#!/bin/sh
|
||||||
|
|
||||||
FORCE="n"
|
FORCE="n"
|
||||||
BZIP2=""
|
|
||||||
GZIP=""
|
|
||||||
RUN=""
|
RUN=""
|
||||||
|
|
||||||
working_dir=""
|
working_dir=""
|
||||||
|
|
||||||
APPNAME=$(basename "${0}")
|
APPNAME=$(basename "${0}")
|
||||||
|
|
||||||
|
if [ "$EUID" != "0" ]; then
|
||||||
|
echo "This script must be run as root."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
usage ()
|
usage ()
|
||||||
{
|
{
|
||||||
echo "usage ${APPNAME} [options] working-dir package [package [package..]]"
|
echo "usage ${APPNAME} [options] working-dir package [package [package..]]"
|
||||||
|
@ -20,9 +23,8 @@ usage ()
|
||||||
}
|
}
|
||||||
|
|
||||||
while getopts 'r:fh' arg; do
|
while getopts 'r:fh' arg; do
|
||||||
echo "getopts $arg"
|
|
||||||
case "${arg}" in
|
case "${arg}" in
|
||||||
r) echo "run=>$OPTARG"; RUN="$OPTARG" ;;
|
r) RUN="$OPTARG" ;;
|
||||||
f) FORCE="y" ;;
|
f) FORCE="y" ;;
|
||||||
h|?) usage ;;
|
h|?) usage ;;
|
||||||
*) echo "invalid argument '${arg}'"; usage ;;
|
*) echo "invalid argument '${arg}'"; usage ;;
|
||||||
|
@ -30,7 +32,13 @@ while getopts 'r:fh' arg; do
|
||||||
done
|
done
|
||||||
shift $(($OPTIND - 1))
|
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})"
|
working_dir="$(readlink -f ${1})"
|
||||||
shift 1
|
shift 1
|
||||||
|
@ -86,8 +94,8 @@ if [ "$RUN" != "" ]; then
|
||||||
|
|
||||||
chroot_mount
|
chroot_mount
|
||||||
|
|
||||||
echo "starting chroot (using \$SHELL)"
|
echo "starting chroot ($RUN)"
|
||||||
chroot "${working_dir}" "${SHELL}"
|
chroot "${working_dir}" "${RUN}"
|
||||||
|
|
||||||
# }}}
|
# }}}
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue