Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature] Create custom HOME for containers #70

Closed
89luca89 opened this issue Dec 29, 2021 · 12 comments · Fixed by #71
Closed

[Feature] Create custom HOME for containers #70

89luca89 opened this issue Dec 29, 2021 · 12 comments · Fixed by #71
Labels
enhancement New feature or request good first issue Good for newcomers help wanted Extra attention is needed

Comments

@89luca89
Copy link
Owner

This is needed for #28

We should be able to use something like --home-dir /path/i/like so that a container can use a specific directory as HOME, instead of the $HOME of the host.

This can be needed for various reasons, from isolation (as per #28) or to keep clean the host's HOME when we try software or build stuff.

Original HOME will anyway be reachable on /run/host/ so we will be still able to reach for files and such

@89luca89 89luca89 added enhancement New feature or request help wanted Extra attention is needed good first issue Good for newcomers labels Dec 29, 2021
@89luca89
Copy link
Owner Author

Update: we need to keep an eye also on distrobox-enter as it will set the HOME environment value and will thwart the value set in distrobox-create

A simple workaround could be that we enforce in distrobox-init the value of HOME passed to the init via the --home flag we already have and use

@yilkalargaw
Copy link

Yes you might also need to keep eyes files like .bashrc, .bash_profile and .profile. The need to be autogenerated by the guest distros default mechanism and they need to persistent between sessions. For some reason podman might reset them if you use the approach used by tlbx.

@89luca89
Copy link
Owner Author

Yes you might also need to keep eyes files like .bashrc, .bash_profile and .profile. The need to be autogenerated by the guest distros default mechanism and they need to persistent between sessions. For some reason podman might reset them if you use the approach used by tlbx.

Yep I was working on this lightly now, and the only thing remaining is really this, having those default files ready.

For now the adjustments needed are:

  • distrobox-create: add the flag that sets the already present $container_user_home, be sure to set the HOME env variable contextually
  • distrobox-enter: ignore the HOME env variable, as it is set at distrobox-create time now

And it works as it is, we need to sort out the shell default files

@89luca89
Copy link
Owner Author

@yilkalargaw I've opened a pull request if you want to test it

distrobox-create --image alpine --name alpine-test --home /tmp/

and

distrobox-enter --name alpine-test

This is still not having the default profile/bashrc file done

@89luca89
Copy link
Owner Author

For some reason podman might reset them if you use the approach used by tlbx.

I didn't know this project, neat 😄

Anyway it's been resetting because each start it does:

su "$user" sh -c "cp -p /etc/skel/.* /home/$user"

Which overwrites the files with the default ones in skel.

The skel directory is not a ubiquitous default, so i'd say i would set like this in the distrobox-init

if [ -d /etc/skel ]; then
    for skel_file in /etc/skel/.*; do
         if [ ! -f $HOME/$(basename $skel_file ]; then
               cp $skel_file $HOME
         fi
     done
fi

This should let initialize the home files only if a skel dir is present, and a dot file is not already present in the home

@89luca89
Copy link
Owner Author

89luca89 commented Dec 29, 2021

Updated the PR with an implementation of the above 👍

EDIT: at a first glance, trying some major families (alpine, arch, ubuntu, fedora) seems to work as intended, and it persists

@yilkalargaw
Copy link

Thanks @89luca89 that was fast. I tried it out on a fedora:35 and for some reason it is failing for me. I will list the commands I ran the the output from running the commands in verbose mode below

mkdir /tmp/modmod
distrobox-create --image ubuntu:20.04 --name modmod --home /tmp/modmod/ # this part seems to work
distrobox-enter --name modmod # this fails with the following error
# Error: chdir: No such file or directory: OCI runtime attempted to invoke a command that was not found
#
# An error occurred

The output of distrobox-enter --name modmod --verbose 2>>distro_txt.txt

+ container_manager=podman
++ id -ru
+ '[' -S /run/user/1001/podman/podman.sock ']'
+ command -v podman
+ '[' 1 -ne 0 ']'
+ container_manager='podman --log-level debug'
++ podman --log-level debug inspect --type container modmod --format '{{.State.Status}}'
time="2021-12-30T04:39:14+03:00" level=info msg="podman filtering at log level debug"
time="2021-12-30T04:39:14+03:00" level=debug msg="Called inspect.PersistentPreRunE(podman --log-level debug inspect --type container modmod --format {{.State.Status}})"
time="2021-12-30T04:39:14+03:00" level=debug msg="Cached value indicated that overlay is supported"
time="2021-12-30T04:39:14+03:00" level=debug msg="Merged system config \"/usr/share/containers/containers.conf\""
time="2021-12-30T04:39:14+03:00" level=debug msg="Cached value indicated that overlay is supported"
time="2021-12-30T04:39:14+03:00" level=debug msg="Using conmon: \"/usr/bin/conmon\""
time="2021-12-30T04:39:14+03:00" level=debug msg="Initializing boltdb state at /home/contraland/.local/share/containers/storage/libpod/bolt_state.db"
time="2021-12-30T04:39:14+03:00" level=debug msg="Using graph driver overlay"
time="2021-12-30T04:39:14+03:00" level=debug msg="Using graph root /home/contraland/.local/share/containers/storage"
time="2021-12-30T04:39:14+03:00" level=debug msg="Using run root /run/user/1001/containers"
time="2021-12-30T04:39:14+03:00" level=debug msg="Using static dir /home/contraland/.local/share/containers/storage/libpod"
time="2021-12-30T04:39:14+03:00" level=debug msg="Using tmp dir /run/user/1001/libpod/tmp"
time="2021-12-30T04:39:14+03:00" level=debug msg="Using volume path /home/contraland/.local/share/containers/storage/volumes"
time="2021-12-30T04:39:14+03:00" level=debug msg="Cached value indicated that overlay is supported"
time="2021-12-30T04:39:14+03:00" level=debug msg="Set libpod namespace to \"\""
time="2021-12-30T04:39:14+03:00" level=debug msg="[graphdriver] trying provided driver \"overlay\""
time="2021-12-30T04:39:14+03:00" level=debug msg="Cached value indicated that overlay is supported"
time="2021-12-30T04:39:14+03:00" level=debug msg="Cached value indicated that metacopy is not being used"
time="2021-12-30T04:39:14+03:00" level=debug msg="Cached value indicated that native-diff is usable"
time="2021-12-30T04:39:14+03:00" level=debug msg="backingFs=btrfs, projectQuotaSupported=false, useNativeDiff=true, usingMetacopy=false"
time="2021-12-30T04:39:14+03:00" level=debug msg="Initializing event backend journald"
time="2021-12-30T04:39:14+03:00" level=debug msg="configured OCI runtime kata initialization failed: no valid executable found for OCI runtime kata: invalid argument"
time="2021-12-30T04:39:14+03:00" level=debug msg="configured OCI runtime runsc initialization failed: no valid executable found for OCI runtime runsc: invalid argument"
time="2021-12-30T04:39:14+03:00" level=debug msg="configured OCI runtime runc initialization failed: no valid executable found for OCI runtime runc: invalid argument"
time="2021-12-30T04:39:14+03:00" level=debug msg="Using OCI runtime \"/usr/bin/crun\""
time="2021-12-30T04:39:14+03:00" level=debug msg="Default CNI network name podman is unchangeable"
time="2021-12-30T04:39:14+03:00" level=info msg="Setting parallel job count to 25"
time="2021-12-30T04:39:15+03:00" level=debug msg="Error parsing cgroup: expected 3 fields but got 1: /proc/414342/cgroup"
time="2021-12-30T04:39:15+03:00" level=debug msg="Called inspect.PersistentPostRunE(podman --log-level debug inspect --type container modmod --format {{.State.Status}})"
+ container_status=running
+ container_exists=0
+ '[' 0 -gt 0 ']'
+ '[' running '!=' running ']'
++ generate_command
++ result_command='podman --log-level debug exec'
++ result_command='podman --log-level debug exec
		--user=contraland'
++ '[' 0 -eq 0 ']'
++ result_command='podman --log-level debug exec
		--user=contraland
			--interactive
			--tty'
+++ command -v distrobox-enter
++ result_command='podman --log-level debug exec
		--user=contraland
			--interactive
			--tty
		--workdir=/home/contraland
		--env=DISTROBOX_ENTER_PATH=/home/contraland/.local/bin/distrobox-enter'
++ set +o xtrace
++ result_command='podman --log-level debug exec
		--user=contraland
			--interactive
			--tty
		--workdir=/home/contraland
		--env=DISTROBOX_ENTER_PATH=/home/contraland/.local/bin/distrobox-enter --env="SHELL=/bin/bash" --env="WINDOWID=50331663" --env="COLORTERM=truecolor" --env="HISTCONTROL=ignoredups" --env="XDG_MENU_PREFIX=lxde-" --env="HISTSIZE=1000" --env="HOSTNAME=fedora" --env="EDITOR=/usr/bin/vim" --env="XDG_SEAT=seat0" --env="PWD=/home/contraland" --env="LOGNAME=contraland" --env="XDG_SESSION_TYPE=tty" --env="SYSTEMD_EXEC_PID=1646" --env="XAUTHORITY=/home/contraland/.Xauthority" --env="DESKTOP_STARTUP_ID=awesome/kitty/1773-40-fedora_TIME113778030" --env="QT_STYLE_OVERRIDE=kvantum" --env="WINDOWPATH=1" --env="LANG=en_US.UTF-8" --env="LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.m4a=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.oga=01;36:*.opus=01;36:*.spx=01;36:*.xspf=01;36:" --env="XDG_CURRENT_DESKTOP=LXDE" --env="KITTY_WINDOW_ID=1" --env="INVOCATION_ID=20233e165c2c4b8c973a2e50426cc0ae" --env="XORG_RUN_AS_USER_OK=1" --env="XDG_SESSION_CLASS=user" --env="TERM=xterm-256color" --env="TERMINFO=/usr/lib64/kitty/terminfo" --env="USER=contraland" --env="DISPLAY=:0" --env="SHLVL=2" --env="XDG_VTNR=1" --env="XDG_SESSION_ID=1" --env="XDG_RUNTIME_DIR=/run/user/1001" --env="JOURNAL_STREAM=8:26582" --env="XDG_DATA_DIRS=/home/contraland/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share" --env="PATH=/home/contraland/.local/bin:/home/contraland/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin" --env="GTK_USE_PORTAL=1" --env="DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1001/bus" --env="MAIL=/var/spool/mail/contraland" --env="_=/usr/bin/printenv" --env="PATH=/home/contraland/.local/bin:/home/contraland/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/bin" modmod bash -l'
++ printf %s 'podman --log-level debug exec
		--user=contraland
			--interactive
			--tty
		--workdir=/home/contraland
		--env=DISTROBOX_ENTER_PATH=/home/contraland/.local/bin/distrobox-enter --env="SHELL=/bin/bash" --env="WINDOWID=50331663" --env="COLORTERM=truecolor" --env="HISTCONTROL=ignoredups" --env="XDG_MENU_PREFIX=lxde-" --env="HISTSIZE=1000" --env="HOSTNAME=fedora" --env="EDITOR=/usr/bin/vim" --env="XDG_SEAT=seat0" --env="PWD=/home/contraland" --env="LOGNAME=contraland" --env="XDG_SESSION_TYPE=tty" --env="SYSTEMD_EXEC_PID=1646" --env="XAUTHORITY=/home/contraland/.Xauthority" --env="DESKTOP_STARTUP_ID=awesome/kitty/1773-40-fedora_TIME113778030" --env="QT_STYLE_OVERRIDE=kvantum" --env="WINDOWPATH=1" --env="LANG=en_US.UTF-8" --env="LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.m4a=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.oga=01;36:*.opus=01;36:*.spx=01;36:*.xspf=01;36:" --env="XDG_CURRENT_DESKTOP=LXDE" --env="KITTY_WINDOW_ID=1" --env="INVOCATION_ID=20233e165c2c4b8c973a2e50426cc0ae" --env="XORG_RUN_AS_USER_OK=1" --env="XDG_SESSION_CLASS=user" --env="TERM=xterm-256color" --env="TERMINFO=/usr/lib64/kitty/terminfo" --env="USER=contraland" --env="DISPLAY=:0" --env="SHLVL=2" --env="XDG_VTNR=1" --env="XDG_SESSION_ID=1" --env="XDG_RUNTIME_DIR=/run/user/1001" --env="JOURNAL_STREAM=8:26582" --env="XDG_DATA_DIRS=/home/contraland/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share" --env="PATH=/home/contraland/.local/bin:/home/contraland/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin" --env="GTK_USE_PORTAL=1" --env="DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1001/bus" --env="MAIL=/var/spool/mail/contraland" --env="_=/usr/bin/printenv" --env="PATH=/home/contraland/.local/bin:/home/contraland/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/bin" modmod bash -l'
+ cmd='podman --log-level debug exec
		--user=contraland
			--interactive
			--tty
		--workdir=/home/contraland
		--env=DISTROBOX_ENTER_PATH=/home/contraland/.local/bin/distrobox-enter --env="SHELL=/bin/bash" --env="WINDOWID=50331663" --env="COLORTERM=truecolor" --env="HISTCONTROL=ignoredups" --env="XDG_MENU_PREFIX=lxde-" --env="HISTSIZE=1000" --env="HOSTNAME=fedora" --env="EDITOR=/usr/bin/vim" --env="XDG_SEAT=seat0" --env="PWD=/home/contraland" --env="LOGNAME=contraland" --env="XDG_SESSION_TYPE=tty" --env="SYSTEMD_EXEC_PID=1646" --env="XAUTHORITY=/home/contraland/.Xauthority" --env="DESKTOP_STARTUP_ID=awesome/kitty/1773-40-fedora_TIME113778030" --env="QT_STYLE_OVERRIDE=kvantum" --env="WINDOWPATH=1" --env="LANG=en_US.UTF-8" --env="LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.m4a=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.oga=01;36:*.opus=01;36:*.spx=01;36:*.xspf=01;36:" --env="XDG_CURRENT_DESKTOP=LXDE" --env="KITTY_WINDOW_ID=1" --env="INVOCATION_ID=20233e165c2c4b8c973a2e50426cc0ae" --env="XORG_RUN_AS_USER_OK=1" --env="XDG_SESSION_CLASS=user" --env="TERM=xterm-256color" --env="TERMINFO=/usr/lib64/kitty/terminfo" --env="USER=contraland" --env="DISPLAY=:0" --env="SHLVL=2" --env="XDG_VTNR=1" --env="XDG_SESSION_ID=1" --env="XDG_RUNTIME_DIR=/run/user/1001" --env="JOURNAL_STREAM=8:26582" --env="XDG_DATA_DIRS=/home/contraland/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share" --env="PATH=/home/contraland/.local/bin:/home/contraland/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin" --env="GTK_USE_PORTAL=1" --env="DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1001/bus" --env="MAIL=/var/spool/mail/contraland" --env="_=/usr/bin/printenv" --env="PATH=/home/contraland/.local/bin:/home/contraland/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/bin" modmod bash -l'
+ eval podman --log-level debug exec --user=contraland --interactive --tty --workdir=/home/contraland --env=DISTROBOX_ENTER_PATH=/home/contraland/.local/bin/distrobox-enter '--env="SHELL=/bin/bash"' '--env="WINDOWID=50331663"' '--env="COLORTERM=truecolor"' '--env="HISTCONTROL=ignoredups"' '--env="XDG_MENU_PREFIX=lxde-"' '--env="HISTSIZE=1000"' '--env="HOSTNAME=fedora"' '--env="EDITOR=/usr/bin/vim"' '--env="XDG_SEAT=seat0"' '--env="PWD=/home/contraland"' '--env="LOGNAME=contraland"' '--env="XDG_SESSION_TYPE=tty"' '--env="SYSTEMD_EXEC_PID=1646"' '--env="XAUTHORITY=/home/contraland/.Xauthority"' '--env="DESKTOP_STARTUP_ID=awesome/kitty/1773-40-fedora_TIME113778030"' '--env="QT_STYLE_OVERRIDE=kvantum"' '--env="WINDOWPATH=1"' '--env="LANG=en_US.UTF-8"' '--env="LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.m4a=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.oga=01;36:*.opus=01;36:*.spx=01;36:*.xspf=01;36:"' '--env="XDG_CURRENT_DESKTOP=LXDE"' '--env="KITTY_WINDOW_ID=1"' '--env="INVOCATION_ID=20233e165c2c4b8c973a2e50426cc0ae"' '--env="XORG_RUN_AS_USER_OK=1"' '--env="XDG_SESSION_CLASS=user"' '--env="TERM=xterm-256color"' '--env="TERMINFO=/usr/lib64/kitty/terminfo"' '--env="USER=contraland"' '--env="DISPLAY=:0"' '--env="SHLVL=2"' '--env="XDG_VTNR=1"' '--env="XDG_SESSION_ID=1"' '--env="XDG_RUNTIME_DIR=/run/user/1001"' '--env="JOURNAL_STREAM=8:26582"' '--env="XDG_DATA_DIRS=/home/contraland/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share"' '--env="PATH=/home/contraland/.local/bin:/home/contraland/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin"' '--env="GTK_USE_PORTAL=1"' '--env="DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1001/bus"' '--env="MAIL=/var/spool/mail/contraland"' '--env="_=/usr/bin/printenv"' '--env="PATH=/home/contraland/.local/bin:/home/contraland/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/bin"' modmod bash -l
++ podman --log-level debug exec --user=contraland --interactive --tty --workdir=/home/contraland --env=DISTROBOX_ENTER_PATH=/home/contraland/.local/bin/distrobox-enter --env=SHELL=/bin/bash --env=WINDOWID=50331663 --env=COLORTERM=truecolor --env=HISTCONTROL=ignoredups --env=XDG_MENU_PREFIX=lxde- --env=HISTSIZE=1000 --env=HOSTNAME=fedora --env=EDITOR=/usr/bin/vim --env=XDG_SEAT=seat0 --env=PWD=/home/contraland --env=LOGNAME=contraland --env=XDG_SESSION_TYPE=tty --env=SYSTEMD_EXEC_PID=1646 --env=XAUTHORITY=/home/contraland/.Xauthority --env=DESKTOP_STARTUP_ID=awesome/kitty/1773-40-fedora_TIME113778030 --env=QT_STYLE_OVERRIDE=kvantum --env=WINDOWPATH=1 --env=LANG=en_US.UTF-8 '--env=LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.m4a=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.oga=01;36:*.opus=01;36:*.spx=01;36:*.xspf=01;36:' --env=XDG_CURRENT_DESKTOP=LXDE --env=KITTY_WINDOW_ID=1 --env=INVOCATION_ID=20233e165c2c4b8c973a2e50426cc0ae --env=XORG_RUN_AS_USER_OK=1 --env=XDG_SESSION_CLASS=user --env=TERM=xterm-256color --env=TERMINFO=/usr/lib64/kitty/terminfo --env=USER=contraland --env=DISPLAY=:0 --env=SHLVL=2 --env=XDG_VTNR=1 --env=XDG_SESSION_ID=1 --env=XDG_RUNTIME_DIR=/run/user/1001 --env=JOURNAL_STREAM=8:26582 --env=XDG_DATA_DIRS=/home/contraland/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share --env=PATH=/home/contraland/.local/bin:/home/contraland/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin --env=GTK_USE_PORTAL=1 --env=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1001/bus --env=MAIL=/var/spool/mail/contraland --env=_=/usr/bin/printenv --env=PATH=/home/contraland/.local/bin:/home/contraland/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/bin modmod bash -l
time="2021-12-30T04:39:15+03:00" level=info msg="podman filtering at log level debug"
time="2021-12-30T04:39:15+03:00" level=debug msg="Called exec.PersistentPreRunE(podman --log-level debug exec --user=contraland --interactive --tty --workdir=/home/contraland --env=DISTROBOX_ENTER_PATH=/home/contraland/.local/bin/distrobox-enter --env=SHELL=/bin/bash --env=WINDOWID=50331663 --env=COLORTERM=truecolor --env=HISTCONTROL=ignoredups --env=XDG_MENU_PREFIX=lxde- --env=HISTSIZE=1000 --env=HOSTNAME=fedora --env=EDITOR=/usr/bin/vim --env=XDG_SEAT=seat0 --env=PWD=/home/contraland --env=LOGNAME=contraland --env=XDG_SESSION_TYPE=tty --env=SYSTEMD_EXEC_PID=1646 --env=XAUTHORITY=/home/contraland/.Xauthority --env=DESKTOP_STARTUP_ID=awesome/kitty/1773-40-fedora_TIME113778030 --env=QT_STYLE_OVERRIDE=kvantum --env=WINDOWPATH=1 --env=LANG=en_US.UTF-8 --env=LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.m4a=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.oga=01;36:*.opus=01;36:*.spx=01;36:*.xspf=01;36: --env=XDG_CURRENT_DESKTOP=LXDE --env=KITTY_WINDOW_ID=1 --env=INVOCATION_ID=20233e165c2c4b8c973a2e50426cc0ae --env=XORG_RUN_AS_USER_OK=1 --env=XDG_SESSION_CLASS=user --env=TERM=xterm-256color --env=TERMINFO=/usr/lib64/kitty/terminfo --env=USER=contraland --env=DISPLAY=:0 --env=SHLVL=2 --env=XDG_VTNR=1 --env=XDG_SESSION_ID=1 --env=XDG_RUNTIME_DIR=/run/user/1001 --env=JOURNAL_STREAM=8:26582 --env=XDG_DATA_DIRS=/home/contraland/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share --env=PATH=/home/contraland/.local/bin:/home/contraland/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin --env=GTK_USE_PORTAL=1 --env=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1001/bus --env=MAIL=/var/spool/mail/contraland --env=_=/usr/bin/printenv --env=PATH=/home/contraland/.local/bin:/home/contraland/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/bin modmod bash -l)"
time="2021-12-30T04:39:15+03:00" level=debug msg="Cached value indicated that overlay is supported"
time="2021-12-30T04:39:15+03:00" level=debug msg="Merged system config \"/usr/share/containers/containers.conf\""
time="2021-12-30T04:39:15+03:00" level=debug msg="Cached value indicated that overlay is supported"
time="2021-12-30T04:39:15+03:00" level=debug msg="Using conmon: \"/usr/bin/conmon\""
time="2021-12-30T04:39:15+03:00" level=debug msg="Initializing boltdb state at /home/contraland/.local/share/containers/storage/libpod/bolt_state.db"
time="2021-12-30T04:39:15+03:00" level=debug msg="Using graph driver overlay"
time="2021-12-30T04:39:15+03:00" level=debug msg="Using graph root /home/contraland/.local/share/containers/storage"
time="2021-12-30T04:39:15+03:00" level=debug msg="Using run root /run/user/1001/containers"
time="2021-12-30T04:39:15+03:00" level=debug msg="Using static dir /home/contraland/.local/share/containers/storage/libpod"
time="2021-12-30T04:39:15+03:00" level=debug msg="Using tmp dir /run/user/1001/libpod/tmp"
time="2021-12-30T04:39:15+03:00" level=debug msg="Using volume path /home/contraland/.local/share/containers/storage/volumes"
time="2021-12-30T04:39:15+03:00" level=debug msg="Cached value indicated that overlay is supported"
time="2021-12-30T04:39:15+03:00" level=debug msg="Set libpod namespace to \"\""
time="2021-12-30T04:39:15+03:00" level=debug msg="[graphdriver] trying provided driver \"overlay\""
time="2021-12-30T04:39:15+03:00" level=debug msg="Cached value indicated that overlay is supported"
time="2021-12-30T04:39:15+03:00" level=debug msg="Cached value indicated that metacopy is not being used"
time="2021-12-30T04:39:15+03:00" level=debug msg="Cached value indicated that native-diff is usable"
time="2021-12-30T04:39:15+03:00" level=debug msg="backingFs=btrfs, projectQuotaSupported=false, useNativeDiff=true, usingMetacopy=false"
time="2021-12-30T04:39:15+03:00" level=debug msg="Initializing event backend journald"
time="2021-12-30T04:39:15+03:00" level=debug msg="configured OCI runtime kata initialization failed: no valid executable found for OCI runtime kata: invalid argument"
time="2021-12-30T04:39:15+03:00" level=debug msg="configured OCI runtime runsc initialization failed: no valid executable found for OCI runtime runsc: invalid argument"
time="2021-12-30T04:39:15+03:00" level=debug msg="configured OCI runtime runc initialization failed: no valid executable found for OCI runtime runc: invalid argument"
time="2021-12-30T04:39:15+03:00" level=debug msg="Using OCI runtime \"/usr/bin/crun\""
time="2021-12-30T04:39:15+03:00" level=debug msg="Default CNI network name podman is unchangeable"
time="2021-12-30T04:39:15+03:00" level=info msg="Setting parallel job count to 25"
time="2021-12-30T04:39:15+03:00" level=debug msg="Handling terminal attach"
time="2021-12-30T04:39:15+03:00" level=info msg="Created exec session 3cb7105c2fc65d0efd01203ef01e86d73d307ac4011d30d1308a1aca8df33f45 in container 015ef309d787cb59523f01d36c314d50cf3969c9620c8b85e3227fd023c78d36"

time="2021-12-30T04:39:15+03:00" level=debug msg="Sending resize events to exec session 3cb7105c2fc65d0efd01203ef01e86d73d307ac4011d30d1308a1aca8df33f45"

time="2021-12-30T04:39:15+03:00" level=info msg="Going to start container 015ef309d787cb59523f01d36c314d50cf3969c9620c8b85e3227fd023c78d36 exec session 3cb7105c2fc65d0efd01203ef01e86d73d307ac4011d30d1308a1aca8df33f45 and attach to it"

time="2021-12-30T04:39:15+03:00" level=debug msg="/usr/bin/conmon messages will be logged to syslog"

time="2021-12-30T04:39:15+03:00" level=debug msg="running conmon: /usr/bin/conmon" args="[--api-version 1 -c 015ef309d787cb59523f01d36c314d50cf3969c9620c8b85e3227fd023c78d36 -u 3cb7105c2fc65d0efd01203ef01e86d73d307ac4011d30d1308a1aca8df33f45 -r /usr/bin/crun -b /home/contraland/.local/share/containers/storage/overlay-containers/015ef309d787cb59523f01d36c314d50cf3969c9620c8b85e3227fd023c78d36/userdata/3cb7105c2fc65d0efd01203ef01e86d73d307ac4011d30d1308a1aca8df33f45 -p /home/contraland/.local/share/containers/storage/overlay-containers/015ef309d787cb59523f01d36c314d50cf3969c9620c8b85e3227fd023c78d36/userdata/3cb7105c2fc65d0efd01203ef01e86d73d307ac4011d30d1308a1aca8df33f45/exec_pid -n modmod --exit-dir /home/contraland/.local/share/containers/storage/overlay-containers/015ef309d787cb59523f01d36c314d50cf3969c9620c8b85e3227fd023c78d36/userdata/3cb7105c2fc65d0efd01203ef01e86d73d307ac4011d30d1308a1aca8df33f45/exit --full-attach -s -l none --log-level debug --syslog -t -i -e --exec-attach --exec-process-spec /home/contraland/.local/share/containers/storage/overlay-containers/015ef309d787cb59523f01d36c314d50cf3969c9620c8b85e3227fd023c78d36/userdata/3cb7105c2fc65d0efd01203ef01e86d73d307ac4011d30d1308a1aca8df33f45/exec-process-290859649 --exit-command /usr/bin/podman --exit-command-arg --root --exit-command-arg /home/contraland/.local/share/containers/storage --exit-command-arg --runroot --exit-command-arg /run/user/1001/containers --exit-command-arg --log-level --exit-command-arg debug --exit-command-arg --cgroup-manager --exit-command-arg systemd --exit-command-arg --tmpdir --exit-command-arg /run/user/1001/libpod/tmp --exit-command-arg --runtime --exit-command-arg crun --exit-command-arg --storage-driver --exit-command-arg overlay --exit-command-arg --events-backend --exit-command-arg journald --exit-command-arg container --exit-command-arg cleanup --exit-command-arg --exec --exit-command-arg 3cb7105c2fc65d0efd01203ef01e86d73d307ac4011d30d1308a1aca8df33f45 --exit-command-arg 015ef309d787cb59523f01d36c314d50cf3969c9620c8b85e3227fd023c78d36]"

time="2021-12-30T04:39:15+03:00" level=debug msg="Attaching to container 015ef309d787cb59523f01d36c314d50cf3969c9620c8b85e3227fd023c78d36 exec session 3cb7105c2fc65d0efd01203ef01e86d73d307ac4011d30d1308a1aca8df33f45"

time="2021-12-30T04:39:15+03:00" level=debug msg="Received: 0"

time="2021-12-30T04:39:15+03:00" level=debug msg="Received: -1"

Error: OCI runtime error: [conmon:d]: exec with attach is waiting for start message from parent
[conmon:d]: exec with attach got start message from parent
+ '[' 255 -ne 0 ']'
+ printf '\nAn error occurred\n'

@89luca89
Copy link
Owner Author

89luca89 commented Dec 30, 2021

Mhh seems it is a problem with --workdir
If you are anywhere inside your home it will try co chdir into it and fail

That's a problem to solve, for now try distrobox-enter from a non home directory (like CD in /tmp or /var first)

EDIT: pushed a possible fix

right now we're resolving the "have custom HOME problem" not the isolation problem, so we do not override the home mountpoint in case of custom home, we will add on top of that
this way we have both /path/to/custom/home and /home/$user mounted inside the container, making PWD/workdir work seamlessly between host/container, and maintaining file access when entering the container, whilst still having a different $HOME to litter with dotfiles and whatnot

@yilkalargaw
Copy link

yilkalargaw commented Dec 30, 2021

Thanks again @89luca89. You are right when I run it from /tmp it works. I'll try out the new commit and let you know.

@yilkalargaw
Copy link

@89luca89 the new commit does exactly what you said. It opens in the current directory (weather I am in $HOME in the host or not) but litters in the given custom directory. Awesome.

@89luca89
Copy link
Owner Author

After some test this is working as intended, merging it and closing this, it will be available in next release 👍

@Mehdi-YC
Copy link

Hello ,
i already know that this feature works well , but can someone tell me of i can create a container with pre configured homedir even i f i pass the -H argument to give it a custom homedir ?

i mean i created a Containerfile , which creates an image so i can use it with distrobox , but the config is not working when i use the -H to give my new created distrobox a new path for the Home dir

does anyone know how to acheive this ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request good first issue Good for newcomers help wanted Extra attention is needed
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants