[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#782641: initramfs-tools: nfs booting requires /usr to be present on the nfs root filesystem



Control: tags -1 + patch

Hi,

On Fri, Nov 06, 2015 at 01:27:58PM +0100, Salvatore Bonaccorso wrote:
> Hi,
> 
> On Wed, Apr 15, 2015 at 03:01:44PM +0100, fc3452-00 wrote:
> > Package: initramfs-tools
> > Version: 0.120
> > Severity: normal
> > 
> > Dear Maintainer,
> > 
> > Problem occurs when attempting to do an nfs network boot with no /usr directory
> > present on the nfs root partition.
> > 
> > At https://www.debian.org/releases/jessie/i386/apcs02.html.en it says that
> > /etc, /bin, /sbin, /lib & /dev must be present on the root partition in order
> > to boot.
> > 
> > But in the script /usr/share/initramfs-tools/scripts/nfs there is:
> > 
> >         # loop until nfsmount succeeds
> >         nfs_mount_root_impl
> >         nfs_retry_count=0
> >         while [ ${nfs_retry_count} -lt ${delay} ] \
> >                 && ! chroot "${rootmnt}" test -x "${init}" ; do
> >                 [ "$quiet" != "y" ] && log_begin_msg "Retrying nfs mount"
> >                 /bin/sleep 1
> >                 nfs_mount_root_impl
> >                 nfs_retry_count=$(( ${nfs_retry_count} + 1 ))
> >                 [ "$quiet" != "y" ] && log_end_msg
> >         done
> > 
> > which attempts to execute /usr/bin/test immediately after mounting the root
> > partition and before mounting any of the filesystems in /etc/fstab. This fails
> > if your are trying to mount /usr from another filesystem by using an entry in
> > /etc/fstab. The script could be modified to use the shell built-in "test"
> > command by changing the line
> > 
> >                 && ! chroot "${rootmnt}" test -x "${init}" ; do
> > 
> > to
> > 
> >                 && ! chroot "${rootmnt}" sh -c "[ -x \"${init}\" ]" ; do
> > 
> > which enables the system to boot when /usr is not present.
> 
> Untested: One other option might be to move the validate_init()
> wrapper from init to scripts/functions and use that from there as well
> in scripts/nfs.

After thinking a bit more on it, maybe doing the file check to test if
the rootfs mount was successful could be better replaced by a return
value check. The init is validated aftwards.

Attached is proposed patch for #782641 . Does it looks good to go
ahead?

Regards,
Salvatore
From be2122fb1368697870ded2b2495c1265086e5ddd Mon Sep 17 00:00:00 2001
From: Salvatore Bonaccorso <carnil@debian.org>
Date: Fri, 6 Nov 2015 14:12:44 +0100
Subject: [PATCH] scripts/nfs: Check return value from nfs_mount_root_impl

Check if mount of rootfs was successful. This avoids doing a file test
within the mount.

Closes: #782641
---
 scripts/nfs | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/scripts/nfs b/scripts/nfs
index 1c29850..359bd46 100644
--- a/scripts/nfs
+++ b/scripts/nfs
@@ -90,12 +90,14 @@ nfs_mount_root()
 
 	# loop until nfsmount succeeds
 	nfs_mount_root_impl
+	ret=$?
 	nfs_retry_count=0
 	while [ ${nfs_retry_count} -lt ${delay} ] \
-		&& ! chroot "${rootmnt}" test -x "${init}" ; do
+		&& [ $ret -ne 0 ] ; do
 		[ "$quiet" != "y" ] && log_begin_msg "Retrying nfs mount"
 		/bin/sleep 1
 		nfs_mount_root_impl
+		ret=$?
 		nfs_retry_count=$(( ${nfs_retry_count} + 1 ))
 		[ "$quiet" != "y" ] && log_end_msg
 	done
-- 
2.6.2

Attachment: signature.asc
Description: PGP signature


Reply to: