[OpenIndiana-discuss] Split-root installations

Jim Klimov jimklimov at cos.ru
Wed Nov 27 12:15:51 UTC 2013


On 2013-11-27 12:16, Jim Klimov wrote:
>> restart = disable and enable. If your /usr is nfs mounted,
>> what happens when you disable networking?
>
> I see a good point here, thanks :)
>
> So this trick with restarts should take place only in case that
> I am testing - with the locally mounted /usr filesystem (though
> how can we determine this well with i.e. iSCSI pools?), or perhaps
> a check that there was no /usr/bin at start of the script and
> there is one after it has done its work - actually this is what
> I am trying to counter here?..

Would this updated logic for filesystem/root be acceptable at least
in terms of least-breakage? Again, the only(?) other solution is in
the direction of reworked SMF dependencies so that networking starts
after /usr is mounted - and there are cases that /usr can depend on
the network, so it would become a spaghetti mess like the Live Media,
not something I'd want to impose on everyone for production ;)

--- /lib/svc/method/fs-root.splitroot   2013-11-17 03:21:47.000000000 +0100
+++ /lib/svc/method/fs-root     2013-11-27 04:22:10.617171864 +0100
@@ -24,10 +24,16 @@
  #

  # Make sure that the libraries essential to this stage of booting can 
be found.
  LD_LIBRARY_PATH=/lib; export LD_LIBRARY_PATH

+NET_PHYS_FMRI="svc:/network/physical:default"
+NET_NWAM_FMRI="svc:/network/physical:nwam"
+NET_IPTUN_FMRI="svc:/network/iptun:default"
+SVCADM=/usr/sbin/svcadm
+SVCS=/usr/bin/svcs
+
  libc_mount() {
         #
         # If there is an optimized libc available in /usr that fits this
         # processor, mount it on top of the base libc.
         #
@@ -66,10 +72,17 @@
         libc_mount
         exit $SMF_EXIT_OK
  fi

  #
+# Keep a flag that /usr was (or was not) available when the script started,
+# because some services may need to reinitialize if it got mounted now.
+#
+_USR_WAS_AVAILABLE=yes
+[ -d /usr/bin ] || _USR_WAS_AVAILABLE=no
+
+#
  # Root is already mounted (by the kernel), but still needs to be
  # checked, possibly remounted and entered into mnttab.  First
  # mount /usr if it is a separate file system.  If the file system
  # type is something other than zfs, mount it read-only.  This must
  # be done first to allow utilities such as fsck and setmnt to
@@ -237,8 +250,24 @@
  # Update kernel driver.conf cache with any additional driver.conf
  # files found on /usr, and device permissions from /etc/minor_perm.
  #
  /usr/sbin/devfsadm -I -P

+#
+# After getting an /usr, redo network. NWAM in particular requires good 
/usr.
+#
+if [ x"$_USR_WAS_AVAILABLE" = no ]; then
+       for _SVC in $NET_PHYS_FMRI $NET_NWAM_FMRI $NET_IPTUN_FMRI; do
+               _STATE="`$SVCS -H -o state $_SVC`"
+               [ x"$debug_mnt" = x1 ] && echo "fs-root: $_SVC: $_STATE" 
 > /dev/msglog
+               case "$_STATE" in
+                   online*)    $SVCADM restart $_SVC ;;
+                   maintenance)$SVCADM clear $_SVC ;;
+               esac
+       done
+       unset _SVC _STATE
+fi
+unset _USR_WAS_AVAILABLE
+
  libc_mount

  exit $SMF_EXIT_OK

Thanks,
//Jim




More information about the OpenIndiana-discuss mailing list