refactor
This commit is contained in:
1 parent
e7d6e61720
commit
75c5b90d29
19 files changed
+91
-335
No files matched your search
+35
-43
@@ -1,64 +1,56 @@
|
||||
#!/bin/sh
|
||||
#------ cli variables -------------------------------------------------------------------------------------------------------------------------------
|
||||
PATH=$1 # path for new root
|
||||
SHELL=$2 # shell to use in chroot
|
||||
#----------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
#------- Check root func ----------------------------------------------------------------------------------------------------------------------------
|
||||
PATH=$1
|
||||
SHELL=$2
|
||||
|
||||
check_root() {
|
||||
if [ $(/usr/bin/id -u) -ne 0 ]; then # cheking root priveleges
|
||||
if [ $(/usr/bin/id -u) -ne 0 ]; then
|
||||
printf "** You must be root\n"
|
||||
exit 1 # exit with exit code 1 error
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
#----------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
#----------- checking or create dirs ----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
check_or_mkdir() {
|
||||
[ ! -d $PATH/dev ] && mkdir -pv $PATH/dev # if directory not exists then mkdir
|
||||
[ ! -d $PATH/proc ] && mkdir -pv $PATH/proc # if directory not exists then mkdir
|
||||
[ ! -d $PATH/sys ] && mkdir -pv $PATH/sys # if directory not exists then mkdir
|
||||
[ ! -d $PATH/run ] && mkdir -pv $PATH/run # if directory not exists then 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 filesystems -----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
mount_virtual() {
|
||||
/usr/bin/mount -v --bind /dev $PATH/dev # mount bind devtmpfs to /dev
|
||||
/usr/bin/mount -vt devpts devpts -o gid=5,mode=0620 $PATH/dev/pts # mount devpts to /dev/pts
|
||||
/usr/bin/mount -vt proc proc $PATH/proc # mount procfs to /proc
|
||||
/usr/bin/mount -vt sysfs sysfs $PATH/sys # mount sysfs to /sys
|
||||
/usr/bin/mount -vt tmpfs tmpfs $PATH/run # mount tmpfs to /run
|
||||
if [ -h $PATH/dev/shm ]; then # check
|
||||
/usr/bin/install -v -d -m 1777 $PATH$(/usr/bin/realpath /dev/shm) # install directories
|
||||
/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 # mount tmpfs to /dev/shm
|
||||
/usr/bin/mount -vt tmpfs -o nosuid,nodev tmpfs $PATH/dev/shm
|
||||
fi
|
||||
/usr/bin/cp -v /etc/resolv.conf $PATH/etc/resolv.conf # copy resolv.conf file to chroot
|
||||
/usr/bin/cp -v /etc/resolv.conf $PATH/etc/resolv.conf
|
||||
}
|
||||
#----------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
#------ umount virtual filesystems ------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
umount_virtual() {
|
||||
/usr/bin/mountpoint -q $PATH/dev/shm && /usr/bin/umount $PATH/dev/shm # umount /dev/shm
|
||||
/usr/bin/umount $PATH/dev/pts # umount /dev/pts
|
||||
/usr/bin/umount $PATH/{sys,proc,run,dev} # umount /sys,/proc,/run,/dev
|
||||
/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 path func -------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
get_shell() {
|
||||
if [[ "$SHELL" != "" ]]; then # if shell is not empty
|
||||
echo $SHELL # return shell
|
||||
if [[ "$SHELL" != "" ]]; then
|
||||
echo $SHELL
|
||||
fi
|
||||
echo "/bin/sh" # if shell is empty return /bin/sh
|
||||
echo "/bin/sh"
|
||||
}
|
||||
#----------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
#------- main ---------------------------------------------------------------------------------------------------------------------------------------
|
||||
check_root # check root priveleges
|
||||
check_or_mkdir # check directories for mount virtual filesystems in chroot
|
||||
mount_virtual # mount virtual filesystems to chroot
|
||||
#---- do chroot in chroot path using shell ----------------------------------------------------------------------------------------------------------
|
||||
|
||||
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 # umount virtual filesystems from chroot
|
||||
#----------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
umount_virtual
|
||||
Reference in new issue
Block a user