Initial mkarchroot commit
A simple utility for build and running within archlinux specific chroot environments Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
This commit is contained in:
parent
0ccd823361
commit
5c11e9bb7c
1
Makefile
1
Makefile
|
@ -4,6 +4,7 @@ install:
|
||||||
mkdir -p $(DESTDIR)/usr/bin
|
mkdir -p $(DESTDIR)/usr/bin
|
||||||
install -m 755 checkpkg $(DESTDIR)/usr/bin
|
install -m 755 checkpkg $(DESTDIR)/usr/bin
|
||||||
install -m 755 extrapkg $(DESTDIR)/usr/bin
|
install -m 755 extrapkg $(DESTDIR)/usr/bin
|
||||||
|
install -m 755 mkarchroot $(DESTDIR)/usr/bin
|
||||||
ln -s extrapkg $(DESTDIR)/usr/bin/corepkg
|
ln -s extrapkg $(DESTDIR)/usr/bin/corepkg
|
||||||
ln -s extrapkg $(DESTDIR)/usr/bin/testingpkg
|
ln -s extrapkg $(DESTDIR)/usr/bin/testingpkg
|
||||||
ln -s extrapkg $(DESTDIR)/usr/bin/unstablepkg
|
ln -s extrapkg $(DESTDIR)/usr/bin/unstablepkg
|
||||||
|
|
|
@ -0,0 +1,136 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
FORCE="n"
|
||||||
|
BZIP2=""
|
||||||
|
GZIP=""
|
||||||
|
RUN=""
|
||||||
|
|
||||||
|
working_dir=""
|
||||||
|
|
||||||
|
APPNAME=$(basename "${0}")
|
||||||
|
|
||||||
|
usage ()
|
||||||
|
{
|
||||||
|
echo "usage ${APPNAME} [options] working-dir package [package [package..]]"
|
||||||
|
echo " options:"
|
||||||
|
echo " -r <app> run 'app' within the context of the chroot"
|
||||||
|
echo " -f force overwrite of files in the working-dir"
|
||||||
|
echo " -h this message."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
while getopts 'r:fh' arg; do
|
||||||
|
echo "getopts $arg"
|
||||||
|
case "${arg}" in
|
||||||
|
r) echo "run=>$OPTARG"; RUN="$OPTARG" ;;
|
||||||
|
f) FORCE="y" ;;
|
||||||
|
h|?) usage ;;
|
||||||
|
*) echo "invalid argument '${arg}'"; usage ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
shift $(($OPTIND - 1))
|
||||||
|
|
||||||
|
[ $# -lt 1 ] && echo "missing arguments" && usage
|
||||||
|
|
||||||
|
working_dir="$(readlink -f ${1})"
|
||||||
|
shift 1
|
||||||
|
|
||||||
|
[ "${working_dir}" = "" ] && echo "error: please specify a working directory" && usage
|
||||||
|
|
||||||
|
# {{{ functions
|
||||||
|
|
||||||
|
function chroot_mount ()
|
||||||
|
{
|
||||||
|
echo "mounting sysfs : /sys"
|
||||||
|
[ -e "${working_dir}/sys" ] || mkdir "${working_dir}/sys"
|
||||||
|
mount -t sysfs sysfs "${working_dir}/sys"
|
||||||
|
|
||||||
|
echo "mounting procfs : /proc"
|
||||||
|
[ -e "${working_dir}/proc" ] || mkdir "${working_dir}/proc"
|
||||||
|
mount -t proc proc "${working_dir}/proc"
|
||||||
|
|
||||||
|
echo "binding device nodes : /dev"
|
||||||
|
[ -e "${working_dir}/dev" ] || mkdir "${working_dir}/dev"
|
||||||
|
mount -o bind /dev "${working_dir}/dev"
|
||||||
|
|
||||||
|
echo "binding pacman cache : /var/cache/pacman"
|
||||||
|
[ -e "${working_dir}/var/cache/pacman" ] || mkdir -p "${working_dir}/var/cache/pacman"
|
||||||
|
mount -o bind /var/cache/pacman "${working_dir}/var/cache/pacman"
|
||||||
|
|
||||||
|
trap 'chroot_umount' 1 2 15
|
||||||
|
}
|
||||||
|
|
||||||
|
function chroot_umount ()
|
||||||
|
{
|
||||||
|
echo "cleaning up mounts"
|
||||||
|
umount "${working_dir}/proc"
|
||||||
|
umount "${working_dir}/sys"
|
||||||
|
umount "${working_dir}/dev"
|
||||||
|
umount "${working_dir}/var/cache/pacman"
|
||||||
|
}
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
if [ "$RUN" != "" ]; then
|
||||||
|
# run chroot {{{
|
||||||
|
if [ "$EUID" != "0" ]; then
|
||||||
|
echo "Running a chroot requires root privileges, aborting"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
#Sanity check
|
||||||
|
if [ ! -f "${working_dir}/.arch-chroot" ]; then
|
||||||
|
echo "'${working_dir}' does not appear to be a Arch chroot"
|
||||||
|
echo " please build the image using mkarchchroot"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
chroot_mount
|
||||||
|
|
||||||
|
echo "starting chroot (using \$SHELL)"
|
||||||
|
chroot "${working_dir}" "${SHELL}"
|
||||||
|
|
||||||
|
# }}}
|
||||||
|
else
|
||||||
|
# {{{ build chroot
|
||||||
|
if [ -e "${working_dir}" -a "${FORCE}" = "n" ]; then
|
||||||
|
echo "Working dir '${working_dir}' already exists - try using -f"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p "${working_dir}"
|
||||||
|
|
||||||
|
chroot_mount
|
||||||
|
|
||||||
|
pacargs="--noconfirm -v " #--noprogressbar -v
|
||||||
|
pacargs="$pacargs --root=${working_dir}"
|
||||||
|
pacargs="$pacargs --dbpath=${working_dir}/var/lib/pacman"
|
||||||
|
pacargs="$pacargs --cachedir=${working_dir}/var/cache/pacman"
|
||||||
|
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
echo "no packages to install"
|
||||||
|
else
|
||||||
|
echo "installing packages:"
|
||||||
|
for i in $@; do echo -e "\t$i"; done
|
||||||
|
|
||||||
|
op="-Sy"
|
||||||
|
if [ "$FORCE" == "y" ]; then
|
||||||
|
op="${op}f"
|
||||||
|
fi
|
||||||
|
if ! pacman ${op} ${pacargs} $@; then
|
||||||
|
echo "error: failed to instal all packages"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -d "${working_dir}/lib/modules" ]; then
|
||||||
|
echo "running ldconfig"
|
||||||
|
ldconfig -r "${working_dir}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -e "${working_dir}/.arch-chroot" ]; then
|
||||||
|
date +%s > "${working_dir}/.arch-chroot"
|
||||||
|
fi
|
||||||
|
# }}}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# vim:ft=sh:ts=4:sw=4:et:
|
Loading…
Reference in New Issue