Ryan Steele wrote:
Hey list,
I was in the middle of testing an FAI install today, and had to re-run
'fai-setup -v'. However, I noticed that it was taking a long, long
time to delete the old nfsroot, and noticed something extremely
alarming. The nfsroot is located at '/srv/fai/nfsroot', as defined in
make-fai-nfsroot.conf:
NFSROOT=/srv/fai/nfsroot
And, the mount point for the mirror is defined as /media/mirror in
fai.conf:
MNTPOINT=/media/mirror
However, I noticed that this appears to be relative to
/srv/fai/nfsroot/live/filesystem.dir:
[EMAIL PROTECTED]:~# mount | grep nfsroot
remotenfshost:/path/to/repo on
/srv/fai/nfsroot/live/filesystem.dir/media/mirror type nfs
(rw,remount,noatime,rsize=8192,addr=10.x.x.x)
When running 'fai-setup -v', it detected that there was an existing
nfsroot, and it went to delete that, but disturbingly, it did so with
the following command:
root 27858 0.7 0.1 2952 660 pts/0 S+ 18:48 0:04 rm
-rf /srv/fai/nfsroot/.??* /srv/fai/nfsroot/live
Correct me if I'm wrong, but doesn't this mean that the mirror located
at /srv/fai/nfsroot/live/filesystem.dir/media/mirror is going to be
blown away if it was mounted rw, as seen above? I happened to catch
this, but I'm not sure all what was lost yet. This was using FAI 3.2.8.
In fact, it had started deleting the local mirror, which had been
mounted via NFS. It's not catastrophic, since I can rebuild it with
debmirror, but why would make-nfs-root (called via fai-setup) not
unmount that NFS mirror before executing an 'rm -rf' in an attempt to
get rid of the old nfsroot? I've decided to do away with NFS-mounting
the mirror and do it over HTTP instead to eliminate the possibility of
another bad experience, but this seems like a glaring flaw unless I'm
very mistaken. The offending code from make-fai-nfsroot is:
if [ -d $NFSROOT/proc -a ! "$recover" ]
then
echo $NFSROOT already exists. Removing $NFSROOT
umount $NFSROOT/dev/pts 1>/dev/null 2>&1 || true
[ -L $NFSROOT/proc/self ] && umount $NFSROOT/proc || true
[ -L $NFSROOT/proc/self ] && die "/proc is still mounted inside the
nfsroot."
rm -rf $oldnfsroot/.??* $oldnfsroot/*
# also remove files $NFSROOT/.? but not . and ..
find $oldnfsroot -xdev -maxdepth 1 ! -type d | xargs -r rm -f
fi