Files
dotfiles/bin/linux-chroot.sh
2025-07-18 15:42:55 +07:00

57 lines
1.3 KiB
Bash
Executable File

#!/bin/sh
PATH=$1
SHELL=$2
check_root() {
if [ $(/usr/bin/id -u) -ne 0 ]; then
printf "** You must be root\n"
exit 1
fi
}
check_or_mkdir() {
[ ! -d $PATH/dev ] && mkdir -pv $PATH/dev
[ ! -d $PATH/proc ] && mkdir -pv $PATH/proc
[ ! -d $PATH/sys ] && mkdir -pv $PATH/sys
[ ! -d $PATH/run ] && mkdir -pv $PATH/run
}
mount_virtual() {
/usr/bin/mount -v --bind /dev $PATH/dev
/usr/bin/mount -vt devpts devpts -o gid=5,mode=0620 $PATH/dev/pts
/usr/bin/mount -vt proc proc $PATH/proc
/usr/bin/mount -vt sysfs sysfs $PATH/sys
/usr/bin/mount -vt tmpfs tmpfs $PATH/run
if [ -h $PATH/dev/shm ]; then
/usr/bin/install -v -d -m 1777 $PATH$(/usr/bin/realpath /dev/shm)
else
/usr/bin/mount -vt tmpfs -o nosuid,nodev tmpfs $PATH/dev/shm
fi
/usr/bin/cp -v /etc/resolv.conf $PATH/etc/resolv.conf
}
umount_virtual() {
/usr/bin/mountpoint -q $PATH/dev/shm && /usr/bin/umount $PATH/dev/shm
/usr/bin/umount $PATH/dev/pts
/usr/bin/umount $PATH/{sys,proc,run,dev}
}
get_shell() {
if [[ "$SHELL" != "" ]]; then
echo $SHELL
fi
echo "/bin/sh"
}
check_root
check_or_mkdir
mount_virtual
/usr/bin/chroot \
$PATH \
/usr/bin/env -i \
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin \
$(get_shell)
umount_virtual