Applying slightly modified patch from Reinhard Tartler <siretart@tauware.de> to ensur...
[live-boot-grml.git] / scripts / boot / 9990-overlay.sh
index 00c53c8..55254c7 100755 (executable)
@@ -343,36 +343,36 @@ setup_unionfs ()
        # Correct the permissions of /:
        chmod 0755 "${rootmnt}"
 
-       live_rofs_list=""
-       # SHOWMOUNTS is necessary for custom mounts with the union option
-       # Since we may want to do custom mounts in user-space it's best to always enable SHOWMOUNTS
-       if true #[ -n "${SHOWMOUNTS}" ] || ( [ -n "${PERSISTENCE}" ] && [ -z "${NOPERSISTENCE}" ] 1)
+       # Correct the permission of /tmp:
+       if [ -d "${rootmnt}/tmp" ]
        then
-               # XXX: is the for loop really necessary? rofslist can only contain one item (see above XXX about EXPOSEDROOT) and this is also assumed elsewhere above (see use of $rofs above).
-               for d in ${rofslist}
-               do
-                       live_rofs="/live/rofs/${d##*/}"
-                       live_rofs_list="${live_rofs_list} ${live_rofs}"
-                       mkdir -p "${live_rofs}"
-                       case d in
-                               *.dir)
-                                       # do nothing # mount -o bind "${d}" "${live_rofs}"
-                                       ;;
-                               *)
-                                       case "${UNIONTYPE}" in
-                                               unionfs-fuse)
-                                                       mount -o bind "${d}" "${live_rofs}"
-                                                       ;;
-
-                                               *)
-                                                       mount -o move "${d}" "${live_rofs}"
-                                                       ;;
-                                       esac
-                                       ;;
-                       esac
-               done
+               chmod 1777 "${rootmnt}"/tmp
        fi
 
+       live_rofs_list=""
+       for d in ${rofslist}
+       do
+               live_rofs="/live/rofs/${d##*/}"
+               live_rofs_list="${live_rofs_list} ${live_rofs}"
+               mkdir -p "${live_rofs}"
+               case d in
+                       *.dir)
+                               # do nothing # mount -o bind "${d}" "${live_rofs}"
+                               ;;
+                       *)
+                               case "${UNIONTYPE}" in
+                                       unionfs-fuse)
+                                               mount -o bind "${d}" "${live_rofs}"
+                                               ;;
+
+                                       *)
+                                               mount -o move "${d}" "${live_rofs}"
+                                               ;;
+                               esac
+                               ;;
+               esac
+       done
+
        # Adding custom persistence
        if [ -n "${PERSISTENCE}" ] && [ -z "${NOPERSISTENCE}" ]
        then
@@ -399,11 +399,34 @@ setup_unionfs ()
                done
        fi
 
-       mkdir -p "${rootmnt}/live"
-       mount -o move /live "${rootmnt}/live" >/dev/null 2>&1 || mount -o bind /live "${rootmnt}/live" || log_warning_msg "Unable to move or bind /live to ${rootmnt}/live"
+       # make /root/lib/live writable for moving filesystems
+       mkdir -p "${rootmnt}/lib/live"
+       mount -t tmpfs tmpfs "${rootmnt}/lib/live"
+
+       # move all mountpoints to root filesystem
+       for _DIRECTORY in rofs persistence
+       do
+               if [ -d "/live/${_DIRECTORY}" ]
+               then
+                       mkdir -p "${rootmnt}/lib/live/${_DIRECTORY}"
+
+                       for _MOUNT in $(ls /live/${_DIRECTORY})
+                       do
+                               mkdir -p "${rootmnt}/lib/live/${_DIRECTORY}/${_MOUNT}"
+                               mount -o move "/live/${_DIRECTORY}/${_MOUNT}" "${rootmnt}/lib/live/${_DIRECTORY}/${_MOUNT}" > /dev/null 2>&1 || \
+                                       mount -o bind "/live/${_DIRECTORY}/${_MOUNT}" "${rootmnt}/lib/live/${_DIRECTORY}/${_MOUNT}" || \
+                                       log_warning_msg "W: failed to mount /live/${_DIRECTORY}/${_MOUNT} to ${rootmnt}/lib/live/${_DIRECTORY}/${_MOUNT}"
+                       done
+               fi
+       done
 
-       # shows cow fs on /overlay (FIXME: do we still need/want this? probably yes)
-       mkdir -p "${rootmnt}/live/overlay"
-       mount -o move /live/overlay "${rootmnt}/live/overlay" >/dev/null 2>&1 || mount -o bind /overlay "${rootmnt}/live/overlay" || log_warning_msg "Unable to move or bind /overlay to ${rootmnt}/live/overlay"
+       mkdir -p "${rootmnt}/lib/live/overlay"
+       mount -o move /live/overlay "${rootmnt}/lib/live/overlay" > /dev/null 2>&1 || \
+               mount -o bind /live/overlay "${rootmnt}/lib/live/overlay" || \
+               log_warning_msg "W: failed to mount /live/overlay to ${rootmnt}/lib/live/overlay"
 
+        # ensure that a potentially stray tmpfs gets removed
+        # otherways, initramfs-tools is unable to remove /live
+        # and fails to boot
+        umount /live/overlay || true
 }