base_role/overlay/Linux/usr/local/sbin/base_chroot_unbind.bash

43 lines
958 B
Bash
Raw Normal View History

2024-01-06 01:38:28 +00:00
#!/bin/sh
# -*- mode: sh; tab-width: 8; encoding: utf-8-unix -*-
ROLE=base
prog=$( basename $0 .bash )
. /usr/local/bin/usr_local_tput.bash
error () { ERROR "$prog $2" ; exit $1 ; }
# must be run as root
if [ "$( id -u )" != "0" ] ; then
echo ERROR: $0 run as root
exit 0
fi
if [ "$#" -eq "0" ] ; then
error 2 "give an absolute directory name as argument"
fi
root=$1
if [ ! -d "$1" ] ; then
error 3 "give an absolute directory name for chroot - $root"
fi
mount | grep $root/ | while read a on elt rest ; do
umount $elt || { ERROR "unmounting $elt" ; exit 5 ; }
done
mount | grep bind | while read a on elt rest ; do
umount $elt || { ERROR "unmounting $elt" ; exit 6 ; }
done
umount -R $root
lsof $root/usr 2>/dev/null \
| sed -e 's@^[a-z]* *@@' -e 's@ .*@@' \
| grep -v "$$\\|COMMAND" | sort -r -u | while read pid ; do
INFO "killing $pid"
kill $pid
sleep 10
#? kill -9 $pid
done
exit 0