11__author__ = "desultory"
2- __version__ = "5.1.4 "
2+ __version__ = "5.2.0 "
33
44from importlib .metadata import version
55from pathlib import Path
@@ -46,12 +46,20 @@ def autodetect_init(self) -> None:
4646 raise FileNotFoundError ("init_target is not specified and could not be detected." )
4747
4848
49+ def export_switch_root_target (self ) -> None :
50+ """Adds SWITCH_ROOT_TARGET to exports.
51+ Uses switch_root_target if set, otherwise uses the rootfs."""
52+ switch_root_target = self ["switch_root_target" ]
53+ if str (switch_root_target ) == "." : # Handle empty Path
54+ switch_root_target = self ["mounts" ]["root" ]["destination" ]
55+ self ["exports" ]["SWITCH_ROOT_TARGET" ] = switch_root_target
56+
4957def _find_init (self ) -> str :
5058 """Returns bash to find the init_target."""
5159 return [
5260 'for init_path in "/sbin/init" "/bin/init" "/init"; do' ,
53- ' if [ -e "$(readvar MOUNTS_ROOT_TARGET )$init_path" ] ; then' ,
54- ' einfo "Found init at: $(readvar MOUNTS_ROOT_TARGET )$init_path"' ,
61+ ' if [ -e "$(readvar SWITCH_ROOT_TARGET )$init_path" ] ; then' ,
62+ ' einfo "Found init at: $(readvar SWITCH_ROOT_TARGET )$init_path"' ,
5563 ' setvar init "$init_path"' ,
5664 " return" ,
5765 " fi" ,
@@ -68,9 +76,8 @@ def set_loglevel(self) -> list[str]:
6876
6977@contains ("init_target" , "init_target must be set." , raise_exception = True )
7078def do_switch_root (self ) -> list [str ]:
71- """
72- Should be the final statement, switches root.
73- Checks if the root mount is mounted and that it contains an init.
79+ """Should be the final statement, switches root.
80+ Checks if the switch_root target is mounted, and that it contains an init.
7481 If not, it restarts UGRD.
7582 """
7683 return [
@@ -79,21 +86,21 @@ def do_switch_root(self) -> list[str]:
7986 " exit 1" ,
8087 "fi" ,
8188 'init_target=$(readvar init) || rd_fail "init_target not set."' , # should be set, if unset, checks fail
82- 'einfo "Checking root mount: $(readvar MOUNTS_ROOT_TARGET )"' ,
83- 'if ! grep -q " $(readvar MOUNTS_ROOT_TARGET ) " /proc/mounts ; then' ,
84- ' rd_fail "Root not found at: $(readvar MOUNTS_ROOT_TARGET )"' ,
85- 'elif [ ! -e "$(readvar MOUNTS_ROOT_TARGET )${init_target}" ] ; then' ,
86- ' ewarn "$init_target not found at: $(readvar MOUNTS_ROOT_TARGET )"' ,
87- r' einfo "Target root contents:\n$(ls -l "$(readvar MOUNTS_ROOT_TARGET )")"' ,
89+ 'einfo "Checking root mount: $(readvar SWITCH_ROOT_TARGET )"' ,
90+ 'if ! grep -q " $(readvar SWITCH_ROOT_TARGET ) " /proc/mounts ; then' ,
91+ ' rd_fail "Root not found at: $(readvar SWITCH_ROOT_TARGET )"' ,
92+ 'elif [ ! -e "$(readvar SWITCH_ROOT_TARGET )${init_target}" ] ; then' ,
93+ ' ewarn "$init_target not found at: $(readvar SWITCH_ROOT_TARGET )"' ,
94+ r' einfo "Target root contents:\n$(ls -l "$(readvar SWITCH_ROOT_TARGET )")"' ,
8895 " if _find_init ; then" , # This redefineds the var, so readvar instaed of using $init_target
89- ' einfo "Switching root to: $(readvar MOUNTS_ROOT_TARGET ) $(readvar init)"' ,
90- ' exec switch_root "$(readvar MOUNTS_ROOT_TARGET )" "$(readvar init)"' ,
96+ ' einfo "Switching root to: $(readvar SWITCH_ROOT_TARGET ) $(readvar init)"' ,
97+ ' exec switch_root "$(readvar SWITCH_ROOT_TARGET )" "$(readvar init)"' ,
9198 " fi" ,
9299 ' rd_fail "Unable to find init."' ,
93100 "else" ,
94101 f' einfo "Completed UGRD v{ version ("ugrd" )} ."' ,
95- ' einfo "Switching root to: $(readvar MOUNTS_ROOT_TARGET ) $init_target"' ,
96- ' exec switch_root "$(readvar MOUNTS_ROOT_TARGET )" "$init_target"' ,
102+ ' einfo "Switching root to: $(readvar SWITCH_ROOT_TARGET ) $init_target"' ,
103+ ' exec switch_root "$(readvar SWITCH_ROOT_TARGET )" "$init_target"' ,
97104 "fi" ,
98105 ]
99106
0 commit comments