dchr/run.sh
2024-04-09 10:41:04 +04:00

79 lines
1.3 KiB
Bash
Executable file

#!/usr/bin/env bash
help () {
echo 'dchr-run <chroot-dir> <command>'
echo 'https://dchr.dc09.ru'
}
clean () {
echo '-- Cleaning up'
umount "$1/proc"
umount "$1/sys"
umount "$1/dev"
umount "$1/run"
}
error () {
echo -e '-- \e[1;31mError\e[0m -- see output above'
exit 1 # `trap` in main() calls cleanup function
}
setup () {
echo '-- Mounting'
mount -t proc /proc "$1/proc" || error
mount -t sysfs /sys "$1/sys" || error
mount -o bind /dev "$1/dev" || error
mount -o bind /run "$1/run"
}
cphosts () {
if ! [ -e "$1/etc/hosts" ]
then
echo '-- Copying hosts'
cp /etc/hosts "$1/etc/hosts"
fi
if ! [ -e "$1/etc/resolv.conf" ]
then
echo '-- Copying resolv.conf'
cp /etc/resolv.conf "$1/etc/resolv.conf"
fi
}
runcmd () {
echo -e '-- \e[1;32mOK\e[0m -- running chroot'
chroot "$1" "$2"
return $?
}
main () {
if [[ "$1" == "--help" ]] || [[ "$1" == "" ]]
then
help
exit 0
fi
chrdir="$(readlink -f "$1")"
chrcmd="${2:-/bin/bash}"
trap "clean $chrdir" EXIT
setup "$chrdir"
cphosts "$chrdir"
runcmd "$chrdir" "$chrcmd"
exit $?
}
sourced () {
if [ -n "$ZSH_VERSION" ]
then
case $ZSH_EVAL_CONTEXT in
*:file*) return 0;;
esac
elif [ -n "$BASH_VERSION" ]
then
! [ "$0" = "$BASH_SOURCE" ] && return 0
fi
return 1
}
sourced || main $@