[Bug 1978862] Re: deboostrap of debian guest shows recursive symlnks according to lsof ouput which interferes with unmounting chroot
Ken Sharp
1978862 at bugs.launchpad.net
Mon Jan 22 03:37:14 UTC 2024
** Changed in: debootstrap (Ubuntu)
Status: New => Invalid
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to debootstrap in Ubuntu.
https://bugs.launchpad.net/bugs/1978862
Title:
deboostrap of debian guest shows recursive symlnks according to lsof
ouput which interferes with unmounting chroot
Status in debootstrap package in Ubuntu:
Invalid
Bug description:
This paste expires on 2022-06-22 17:43:10.762812. Remove now. Repaste,
or download this paste. Toggle word wrap. Pasted through web.
NOTE: the temporary exit of this script at the line:
' echo "temporary exit to make sure nothing else is screwing it up" &&
exit '
produces this error:
command: sudo lsof -x +D /root/uml-834523023462431000
lsof: WARNING: can't stat(/root/uml-834523023462431000/root_fs/var/run/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.speech-dispatcher/.speech-dispatcher/.speech-dispatcher/.cache/speech-dispatcher/.speech-dispatcher/.cache/speech-dispatcher/.speech-dispatcher/.cache/speech-dispatcher) symbolc link: Too many levels of symbolic links
lsof: WARNING: can't stat(/root/uml-834523023462431000/root_fs/var/run/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.cache/speech-dispatcher/.speech-dispatcher/.speech-dispatcher/.speech-dispatcher/.cache/speech-dispatcher/.speech-dispatcher/.speech-dispatcher/.cache/speech-dispatcher/log) symbolc link: Too many levels of symbolic links
Which in turn causes chroots not to fully dismount, leaving proc and sys vulnerable to corruption on deleting the build directory.
#!/bin/bash -x
function aptUpdate_Inner {
DEBIAN_FRONTEND=noninteractive \
apt-get update \
-o Dpkg::Options::=--force-confold \
-y --allow-downgrades --allow-remove-essential --allow-change-held-packages
}
aptUpdate_Inner
# https://askubuntu.com/questions/401454/how-to-get-sudo-access-to-
shares-mounted-by-gigolo
logfile=dies_Inner-11.log
[ -e ~/"$logfile" ] || rm -rf "$logfile"
exec > >(tee -a "$logfile") 2> >(tee -a "$logfile" >&2)
basedir=uml-834523023462431000
thePrefix=~/"$basedir"/root_fs_img
function finish_Inner_Func {
pushd ~
lsof ~/"$basedir"/root_fs_img
echo ~/"$basedir"/root_fs
lsof ~/"$basedir"/root_fs
lsof ~/"$basedir"/buster_uml
read -r "Press any key to resume ..."
read -r "Press any key to resume ..."
read -r "Press any key to resume ..."
echo "Trying to clean up Chroots that are left hanging..."
umount ~/"$basedir"/root_fs_img/sys || echo "can't unmount sys"
umount ~/"$basedir"/proc/sys/fs/binfmt_misc
umount ~/"$basedir"/root_fs_img/proc || echo "can't unmount proc"
umount ~/"$basedir"/root_fs_img/dev/pts || echo "can't unmount dev pts"
umount ~/"$basedir"/root_fs_img/dev || echo "can't unmount dev"
umount --recursive /root/"$basedir"/root_fs_img
umount --recursive /root/"$basedir"/root_fs
umount --recursive /root/"$basedir"
umount ~/"$basedir"/root_fs_img || echo "can't unmountroot_fs_img" || exit
pushd ~ || exit
umount ~/"$basedir"/root_fs
echo ~/"basedir"/root_fs_img
lsof ~/"$basedir"/root_fs_img
echo ~/"$basedir"/root_fs
lsof ~/"$basedir"/root_fs
}
#trap finish_Inner_Func EXIT
function old_kill_proc {
thePrefix=~/"$basedir"
whatsFound=0
for root_file_Systems in /proc/*/root; do
theLinks=$(readlink "$root_file_Systems")
if [ "$theLinks" != "x" ]; then
if [ "${theLinks:0:${#the_Prefix}}" = "$thePrefix" ]; then
# this process is in the chroot...
thePID="$(basename "$(dirname "$root_file_Systems")")"
kill -9 "$thePID"
whatsFound=1
fi
fi
done
if [ "$whatsFound" = "x1" ]; then
while grep -q "$thePrefix" /proc/mounts; do
counters=$counters+1
if [ "$counters" -ge 20 ]; then
echo "failed to umount $thePrefix"
if [ -x /usr/bin/lsof ]; then
/usr/bin/lsof "$thePrefix"
fi
fi
grep "$thePrefix" /proc/mounts | \
cut -d\ -f2 | LANG=C sort -r | xargs -r -n 1 umount || sleep 1
done # repeat the above, the script I'm cargo-culting this from just re-execs itself
fi
}
# -o Dpkg::Options::=--force-confdef \
function chroot_Function {
success_chroot=0
echo "made it to build root?"
mount --rbind /dev ~/"$basedir"/root_fs/dev && echo "mounted dev" && success_chroot=1
mount devpts -t devpts --rbind /dev/pts ~/"$basedir"/root_fs/dev/pts && echo "mounted pts" && success_chroot=1
mount --rbind /proc -t proc ~/"$basedir"/root_fs/proc && echo "mounted proc" && success_chroot=1
mount --rbind /sys ~/"$basedir"/root_fs/sys && echo "mounted sys" && success_chroot=1
if ((! success_chroot==4)); then
printf 'setting up bindings for the chrooot was unsuccessful\n' 1>&2
exit 1
fi
}
if [[ -d ~/"$basedir" ]]
then
printf '%s exists on your filesystem ... removing:\n ' "$basedir" && finish_Inner_Func && mkdir ~/"$basedir"
else
printf 'basedir: does not exist so I will create root %s\n ' "$basedir" && mkdir ~/"$basedir"
fi
#chown -R "$USER:$USER" buster-uml
#chmod a+rwx buster-uml
fallocate -l 2G ~/"$basedir"/root_fs_img
mkfs -t ext4 ~/"$basedir"/root_fs_img
mkdir ~/"$basedir"/root_fs
mount -t ext4 ~/"$basedir"/root_fs_img ~/"$basedir"/root_fs
mount -o remount, rw ~/"$basedir"/root_fs
pushd ~/"$basedir" || printf 'failed to change the directory: /root/ %s \n' ~/"$basedir"
/usr/sbin/debootstrap --arch amd64 --variant minbase buster ~/"$basedir"/root_fs/ http://deb.debian.org/debian
echo "temporary exit to make sure nothing else is screwing it up" && exit
#rsync --verbose --archive --one-file-system --xattrs --hard-links --numeric-ids --sparse --acls buster-uml/ root_fs/
echo '/dev/ubd0 ext4 discard,errors=remount-ro 0 ' >>
~/"$basedir"/root_fs/etc/fstab
#if ! chroot ~/"$basedir"/root_fs_img /usr/bin/passwd; then
# printf 'failed to successfully execute the chroot\n' 1>&2
# exit 1
#fi
#if ! source /etc/environment; then
# printf 'failed to source environment\n' 1>&2
# exit 1
#fi
chroot_Function
if ! DEBIAN_FRONTEND=noninteractive apt update -y; then
printf 'unable to install apt updates' 1>&2
exit 1
fi
if ! DEBIAN_FRONTEND=noninteractive apt install ifupdown -y -q; then
printf 'unable to install networking properly\n' 1>&2
exit 1
fi
random_file="UML-$(shuf -i 2000000-7000000 -n 1))"
random_hostname="$random_file"
if ! echo "$random_hostname" > ~/"$basedir"/root_fs/etc/hostname; then
printf 'failed to install random hostname\n' 1>&2
exit 1
fi
~/"$basedir"/root_fs/etc/network/interfaces <<'interfaces_EOF'
# legacy UML network devices
auto eth0
iface eth0 inet dhcp
# vector UML network devices
auto vec0
iface vec0 inet dhcp
interfaces_EOF
if ! mkdir -p ~/"$basedir"/root_fs/usr/lib/modules/; then
printf 'failed to create lib modules directory\n' 1>&2
exit 1
fi
#if ! rsync -raHAXS /lib/modules/ ~/"$basedir"/root_fs/usr/lib/modules/; then
# printf 'rsync was not succesful files not propelry copied to the image file\n' 1>&2
# exit 1
#fi
echo 'End of SCRIPT_Inner...'
finish_Inner_Func
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/debootstrap/+bug/1978862/+subscriptions
More information about the foundations-bugs
mailing list