[Bug 1978862] [NEW] deboostrap of debian guest shows recursive symlnks according to lsof ouput which interfears with unmounting chroot

Steven Anderson 1978862 at bugs.launchpad.net
Wed Jun 15 19:31:03 UTC 2022


Public bug reported:

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


#!/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


produces this lsof output :
Filename: None. Size: 8kb. View raw, copy, hex, or download this file.
View source code, the removal or expiry stories, or read the about page.

This website does not claim ownership of, copyright on, and assumes no
liability for provided content. Toggle color scheme.

** Affects: debootstrap (Ubuntu)
     Importance: Undecided
         Status: New

-- 
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 interfears with unmounting chroot

Status in debootstrap package in Ubuntu:
  New

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


  
  #!/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


  
  produces this lsof output :
  Filename: None. Size: 8kb. View raw, copy, hex, or download this file.
  View source code, the removal or expiry stories, or read the about page.

  This website does not claim ownership of, copyright on, and assumes no
  liability for provided content. Toggle color scheme.

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