Comment 2 for bug 996789

Revision history for this message
gmoore777 (guy-moore) wrote : Re: 70-install-ssh does not prevent sshd from starting up

Looking at the code of xen-create-image, --keep would only matter if somewhere along the lines FAIL was set to 1and that
"exit" was not called at the point of the error.
The failure occurs during a `umount` of a busy device. (it's still busy cause `sshd` is running.)
The perl program just exits at that point which at this point is inside the routine, runCommand()
at the last 2 lines:
        $FAIL = 1;
        exit 127;

If --keep were to work, I would have had to see this line get printed:
      Removing failed install:
The installation is not programmatically being removed via the command, xen-delete-image.

The installation is being removed cause of this line in the beginning:
        use File::Temp qw/ tempdir /;
Meaning, once the perl program exits, and before control is given back to the user,
Perl automajically removes any file systems that was created with the intention of them
being temporary. "tempdir" represents the entire installation and it is this directory that is
being "correctly" cleaned up behind the scenes without any notice to the end user.
"Correctly" meaning, Perl is only doing what it is supposed to do.

Anyways, I just did this per your request:

Ran UpdateManager to get any updates. (none)
rebooted machine.
Shut down the `sshd` on Dom0
Unedit by hack in /usr/lib/xen-tools/karmic.d/70-install-ssh.
sudo xen-create-image --fs=ext4 --image=full --memory=1Gb --size=20Gb --swap=2Gb --install-method=debootstrap --arch=amd64 --dist=precise --lvm=vg1 --hostname=xen004 --vcpus=1 --ip=192.168.0.245 --gateway=192.168.0.1 --broadcast=192.168.0.255 --netmask=255.255.255.0 --keep --verbose

and that resulted in an empty installation under my mounted volume at /tmp/P_4Wff0FTJ.

This was the final n lines from the xen-create-image:
...
Setting up root password
Generating a password for the new guest.
All done
Executing : umount /tmp/P_4Wff0FTJ/proc
Finished : umount /tmp/P_4Wff0FTJ/proc 2>&1
Unmounting : /tmp/P_4Wff0FTJ/dev/pts
Executing : umount /tmp/P_4Wff0FTJ/dev/pts
Finished : umount /tmp/P_4Wff0FTJ/dev/pts 2>&1
Unmounting : /tmp/P_4Wff0FTJ
Executing : umount /tmp/P_4Wff0FTJ
umount: /tmp/P_4Wff0FTJ: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
Finished : umount /tmp/P_4Wff0FTJ 2>&1
Running command 'umount /tmp/P_4Wff0FTJ 2>&1' failed with exit code 256.
Aborting
See /var/log/xen-tools/xen004.log for details
cannot remove directory for /tmp/P_4Wff0FTJ: Device or resource busy at /usr/share/perl/5.14/File/Temp.pm line 902
$

and then I surmise between the message of "cannot remove directory" and the Unix prompt,
Perl is effectively doing this: `rm -rf /tmp/P_4Wff0FTJ`.
Actually I discovered this, cause during my 100s of installations fighting with this problem, I had commented
out one of the umount commands for .../proc. So when xen-create-image failed and got the regular messages
as in the above, I also got all these messages about how it couldn't "unlink" a bunch of files under /tmp/XXXXXX/proc/...
I said to myself, huh? where is that code that is doing all this removing. I then stumbled upon that line:
   use File::Temp qw/ tempdir /;
and looked up what that Perl Class does. And the intent is to clean up after the programmer all files and directories
once the program exits.
(Having said that, not sure why "root" couldn't unlink those directories. But that isn't important.)