diff --git a/CHANGELOG.md b/CHANGELOG.md index 08c3b0e4..1da86138 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ Project website: https://github.com/mviereck/x11docker ## [Unreleased] ### Added - - `--backend=proot`: Experimental support. + - `--backend=proot`: Use a rootfs on host with `proot` instead of a container. [(#224)](https://github.com/mviereck/x11docker/issues/224) - `--backend=host`: Run application from host. Replaces `-e, --exe`. ### Changed diff --git a/TODO.md b/TODO.md index 45f09e81..346d76e5 100644 --- a/TODO.md +++ b/TODO.md @@ -2,11 +2,15 @@ x11docker ToDo notes ## Work in progress + - --backend=systemd-nspawn - check empty XDG_RUNTIME_DIR e.g. with --user, --hostuser - --xc=backend for proot and host backends - --backend=proot - --name - --init except systemd possible? + - share: ro not possible + - clean /tmp + - do old binds disappear? - kata: add new runtime for nerdctl io.containerd.kata.v2 diff --git a/x11docker b/x11docker index ce7e80ba..a843fd58 100755 --- a/x11docker +++ b/x11docker @@ -11,7 +11,7 @@ # Run 'x11docker --help' or scroll down to read usage information. # More documentation at: https://github.com/mviereck/x11docker -Version="7.1.0-beta-3" +Version="7.1.0-beta-4" # --enforce-i: Enforce running in interactive mode to allow commands tty and weston-launch in special setups. grep -q -- "--enforce-i" <<< "$*" && case $- in @@ -630,6 +630,19 @@ finish() { # trap EXIT routine to clean up background proce $($Backendbin rm -f "$Containername" 2>&1)" } ;; + chroot) + while read -r Line; do + debugnote "--backend=$Backend: umount $Line" + Source="$(cut -d'|' -f1 <<< "$Line")" + Target="$(cut -d'|' -f2 <<< "$Line")" + [ -d "$Source" ] && { + umount -f "$Target" || warning "umount failed on '$Target'" + } + [ -S "$Source" ] && rm "$Target" + [ -f "$Source" ] && rm "$Target" + done <<< "$Chrootmountlist" + #umount -t devpts "$Rootfs/dev/pts" || error "--backend=$Backend: umount of devpts failed." + ;; esac # Stop watching for messages, check others again @@ -2301,17 +2314,29 @@ check_newxenv() { # find free display echo "$Newdisplaynumber" >> "$Numbersinusefile" # X over IP/TCP - [ "$Xoverip" ] || case $Xserver in - --xwin|--runx) - Xoverip="yes" - [ "$Network" = "none" ] && { - note "Option $Xserver needs network access. + [ "$Xoverip" ] || { + case $Mobyvm in + yes) + Xoverip="yes" + ;; + esac + case $Xserver in + --xwin|--runx) + Xoverip="yes" + [ "$Network" = "none" ] && { + note "Option $Xserver needs network access. Enabling option -I, --network." - check_fallback - Network="" - } - ;; - esac + check_fallback + Network="" + } + ;; + esac + case $Backend in + chroot) + Xoverip="yes" + ;; + esac + } # set $Newdisplay (DISPLAY of container) and $Newxsocket case $Xserver in @@ -3000,16 +3025,6 @@ check_xserver() { # check chosen X server, auto-choose X server esac ;; esac - case $Backend in - chroot) - Xoverip="yes" - ;; - esac - case $Mobyvm in - yes) - Xoverip="yes" - ;; - esac [ "$Xoverip" = "yes" ] && [ "$Autochooseserver" = "no" ] && debugnote "Enabled X over TCP instead of sharing unix socket." } @@ -4746,6 +4761,7 @@ create_backendcommand() { ### create command to run docker /proc|$Rootfs/proc /dev|$Rootfs/dev /run/shm|$Rootfs/run/shm" + Chrootmountlist="" ;; esac @@ -7799,9 +7815,12 @@ Fallback: using command '$Containercommand' and enabling option --interactive." Sudouser="no" Sharewebcam="" ;; - chrootXXX) ### FIXME + *) + error "Option --backend=$Backend: Backend $Backend is not supported." + ;; + chroot) ### FIXME warning "--backend=$Backend is highly experimental. - Rather use another backend. Even 'proot' is more stable. + Prefer to use another backend. Even 'proot' is more reliable. Isolation is close to not existant." [ -z "$Rootfs" ] && [ -d "$Hosthomebasefolder/ROOTFS/$Imagebasename" ] && Rootfs="$Hosthomebasefolder/ROOTFS/$Imagebasename" [ -z "$Rootfs" ] && error "--backend=$Backend: Did not find a rootfs for $Imagename @@ -7817,9 +7836,6 @@ Fallback: using command '$Containercommand' and enabling option --interactive." } Switchcontaineruser="yes" ;; - *) - error "Option --backend=$Backend: Backend $Backend is not supported." - ;; esac # --no-setup @@ -9780,7 +9796,6 @@ $(nl -ba <$Cmdrc)" Target="$(cut -d'|' -f2 <<< "$Line")" [ -d "$Source" ] && { mkdir -v -p "$Target" - umount -f "$Target" || debugnote "umount failed on '$Target'" mount --bind "$Source" "$Target" 2>> "$Containerlogfile" || error "--backend=$Backend: mount failed. Last lines of log: $(tail "$Containerlogfile")" @@ -9788,7 +9803,7 @@ $(tail "$Containerlogfile")" [ -S "$Source" ] && ln "$Source" "$Target" [ -f "$Source" ] && ln "$Source" "$Target" done <<< "$Chrootmountlist" - mount -t devpts devpts "$Rootfs/dev/pts" || error "--backend=$Backend: mount of devpts failed." +# mount -t devpts devpts "$Rootfs/dev/pts" || error "--backend=$Backend: mount of devpts failed." ;; esac