[neon/backports-noble/distrobox-noble/Neon/unstable] /: New upstream version 1.4.1

Michel Alexandre Salim null at kde.org
Tue Sep 3 08:26:59 BST 2024


Git commit 3389510ac09fa39eeb541e7b7f6eb12578f6b408 by Michel Alexandre Salim.
Committed on 22/09/2022 at 01:52.
Pushed by carlosdem into branch 'Neon/unstable'.

New upstream version 1.4.1

M  +1    -1    .github/workflows/compatibility.yml
M  +1    -1    .github/workflows/main.yml
A  +42   -0    completions/distrobox
A  +11   -0    completions/distrobox-create
A  +11   -0    completions/distrobox-enter
A  +11   -0    completions/distrobox-ephemeral
A  +11   -0    completions/distrobox-generate-entry
A  +11   -0    completions/distrobox-list
A  +11   -0    completions/distrobox-rm
A  +11   -0    completions/distrobox-stop
A  +11   -0    completions/distrobox-upgrade
M  +1    -1    distrobox
M  +39   -7    distrobox-create
M  +3    -21   distrobox-enter
M  +1    -2    distrobox-ephemeral
M  +1    -1    distrobox-export
M  +15   -3    distrobox-generate-entry
M  +1    -1    distrobox-host-exec
M  +99   -3    distrobox-init
M  +1    -1    distrobox-list
M  +1    -1    distrobox-rm
M  +1    -1    distrobox-stop
M  +1    -1    distrobox-upgrade
M  +9    -2    docs/README.md
M  +10   -7    docs/compatibility.md
A  +28   -0    docs/posts/install_rootless.md
M  +1    -0    docs/usage/distrobox-create.md
M  +2    -2    docs/useful_tips.md
M  +54   -24   extras/install-podman
M  +11   -0    install
M  +3    -4    man/man1/distrobox-compatibility.1
M  +1    -0    man/man1/distrobox-create.1
M  +4    -4    man/man1/distrobox.1
M  +4    -0    uninstall

https://invent.kde.org/neon/backports-noble/distrobox-noble/-/commit/3389510ac09fa39eeb541e7b7f6eb12578f6b408

diff --git a/.github/workflows/compatibility.yml b/.github/workflows/compatibility.yml
index 9674d1d..4c68609 100644
--- a/.github/workflows/compatibility.yml
+++ b/.github/workflows/compatibility.yml
@@ -38,7 +38,7 @@ jobs:
       # Fetch from compatibility table all the distros supported
       - id: check_file_changed
         run: |
-          if git diff --name-only HEAD^ HEAD | grep -v host-exec | grep -E "^distrobox|compatibility.md"; then
+          if git diff --name-only HEAD^ HEAD | grep -Ev "host-exec|generate-entry|ephemeral|upgrade" | grep -E "^distrobox|compatibility.md"; then
             echo "::set-output name=distrobox_changed::True"
           else
             echo "::set-output name=distrobox_changed::False"
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 42a7c66..44a03bb 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -24,7 +24,7 @@ jobs:
       - name: Run dash -n
         run: |
           result=0
-          for file in $(find . -type f -not -path "*.git*"); do
+          for file in $(find . -type f -not -path "*.git*" -a -not -path "*completions*"); do
             if file "$file" | grep -qi shell; then
               echo "### Checking file $file..."
               dash -n $file
diff --git a/completions/distrobox b/completions/distrobox
new file mode 100644
index 0000000..82f386a
--- /dev/null
+++ b/completions/distrobox
@@ -0,0 +1,42 @@
+#!/usr/bin/env bash
+# shellcheck disable=all
+
+_generate_from_help() {
+	command=$1
+
+	local list cur prev totalopts opts diropts
+
+	COMPREPLY=()
+
+	cur="${COMP_WORDS[COMP_CWORD]}"
+	prev="${COMP_WORDS[COMP_CWORD - 1]}"
+	opts="$($command --help | sed 's|^\t||g' | grep '^--' | cut -d':' -f1 | tr '/' ' ' | tr '\n' ' ')"
+	totalopts="$(echo $opts | tr ' ' '|')"
+	diropts="-H|--home|--volume"
+
+	if [[ ${prev} =~ ${diropts} ]]; then
+		COMPREPLY=($(compgen -d -- ${cur}))
+		return 0
+	fi
+
+	if [[ ${cur} == -* ]]; then
+		COMPREPLY+=($(compgen -W "${opts}" -- ${cur}))
+		return 0
+	elif [[ ${command} != *"create"* ]] && [[ ${command} != *"ephemeral"* ]] && [[ ${command} != *"list"* ]]; then
+		while IFS= read -r line; do
+			list+="$line "
+		done < <(distrobox-list --no-color | tail -n+2 | awk '{print $3}')
+		COMPREPLY=($(compgen -W "${list}" "${cur}"))
+		return 0
+	fi
+}
+
+__distrobox() {
+	if [ "${#COMP_WORDS[@]}" == "2" ]; then
+		COMPREPLY=($(compgen -W "$(distrobox | tail -n+4 | xargs echo)" "${COMP_WORDS[1]}"))
+	elif [ "${#COMP_WORDS[@]}" -gt "2" ]; then
+		_generate_from_help distrobox-"${COMP_WORDS[1]}"
+	fi
+}
+
+complete -F __distrobox distrobox
diff --git a/completions/distrobox-create b/completions/distrobox-create
new file mode 100644
index 0000000..d9347cd
--- /dev/null
+++ b/completions/distrobox-create
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+# shellcheck disable=all
+
+if [ -e /usr/share/bash-completion/completions/distrobox ]; then
+	source /usr/share/bash-completion/completions/distrobox
+fi
+if [ -e "${HOME}/.local/share/bash-completion/completions/distrobox" ]; then
+	source "${HOME}/.local/share/bash-completion/completions/distrobox"
+fi
+
+complete -F _generate_from_help distrobox-create
diff --git a/completions/distrobox-enter b/completions/distrobox-enter
new file mode 100644
index 0000000..8d13ca9
--- /dev/null
+++ b/completions/distrobox-enter
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+# shellcheck disable=all
+
+if [ -e /usr/share/bash-completion/completions/distrobox ]; then
+	source /usr/share/bash-completion/completions/distrobox
+fi
+if [ -e "${HOME}/.local/share/bash-completion/completions/distrobox" ]; then
+	source "${HOME}/.local/share/bash-completion/completions/distrobox"
+fi
+
+complete -F _generate_from_help distrobox-enter
diff --git a/completions/distrobox-ephemeral b/completions/distrobox-ephemeral
new file mode 100644
index 0000000..ebcfdf1
--- /dev/null
+++ b/completions/distrobox-ephemeral
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+# shellcheck disable=all
+
+if [ -e /usr/share/bash-completion/completions/distrobox ]; then
+	source /usr/share/bash-completion/completions/distrobox
+fi
+if [ -e "${HOME}/.local/share/bash-completion/completions/distrobox" ]; then
+	source "${HOME}/.local/share/bash-completion/completions/distrobox"
+fi
+
+complete -F _generate_from_help distrobox-ephemeral
diff --git a/completions/distrobox-generate-entry b/completions/distrobox-generate-entry
new file mode 100644
index 0000000..076b73b
--- /dev/null
+++ b/completions/distrobox-generate-entry
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+# shellcheck disable=all
+
+if [ -e /usr/share/bash-completion/completions/distrobox ]; then
+	source /usr/share/bash-completion/completions/distrobox
+fi
+if [ -e "${HOME}/.local/share/bash-completion/completions/distrobox" ]; then
+	source "${HOME}/.local/share/bash-completion/completions/distrobox"
+fi
+
+complete -F _generate_from_help distrobox-generate-entry
diff --git a/completions/distrobox-list b/completions/distrobox-list
new file mode 100644
index 0000000..8c7e45c
--- /dev/null
+++ b/completions/distrobox-list
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+# shellcheck disable=all
+
+if [ -e /usr/share/bash-completion/completions/distrobox ]; then
+	source /usr/share/bash-completion/completions/distrobox
+fi
+if [ -e "${HOME}/.local/share/bash-completion/completions/distrobox" ]; then
+	source "${HOME}/.local/share/bash-completion/completions/distrobox"
+fi
+
+complete -F _generate_from_help distrobox-list
diff --git a/completions/distrobox-rm b/completions/distrobox-rm
new file mode 100644
index 0000000..21f0324
--- /dev/null
+++ b/completions/distrobox-rm
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+# shellcheck disable=all
+
+if [ -e /usr/share/bash-completion/completions/distrobox ]; then
+	source /usr/share/bash-completion/completions/distrobox
+fi
+if [ -e "${HOME}/.local/share/bash-completion/completions/distrobox" ]; then
+	source "${HOME}/.local/share/bash-completion/completions/distrobox"
+fi
+
+complete -F _generate_from_help distrobox-rm
diff --git a/completions/distrobox-stop b/completions/distrobox-stop
new file mode 100644
index 0000000..991ba06
--- /dev/null
+++ b/completions/distrobox-stop
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+# shellcheck disable=all
+
+if [ -e /usr/share/bash-completion/completions/distrobox ]; then
+	source /usr/share/bash-completion/completions/distrobox
+fi
+if [ -e "${HOME}/.local/share/bash-completion/completions/distrobox" ]; then
+	source "${HOME}/.local/share/bash-completion/completions/distrobox"
+fi
+
+complete -F _generate_from_help distrobox-stop
diff --git a/completions/distrobox-upgrade b/completions/distrobox-upgrade
new file mode 100644
index 0000000..edb74fd
--- /dev/null
+++ b/completions/distrobox-upgrade
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+# shellcheck disable=all
+
+if [ -e /usr/share/bash-completion/completions/distrobox ]; then
+	source /usr/share/bash-completion/completions/distrobox
+fi
+if [ -e "${HOME}/.local/share/bash-completion/completions/distrobox" ]; then
+	source "${HOME}/.local/share/bash-completion/completions/distrobox"
+fi
+
+complete -F _generate_from_help distrobox-upgrade
diff --git a/distrobox b/distrobox
index 0f83b54..df1f517 100755
--- a/distrobox
+++ b/distrobox
@@ -24,7 +24,7 @@ set -o nounset
 
 trap '[ "$?" -ne 0 ] && printf "\nAn error occurred\n"' EXIT
 
-version="1.4.0"
+version="1.4.1"
 
 # Print usage to stdout.
 # Arguments:
diff --git a/distrobox-create b/distrobox-create
index 2f111d0..2d98d41 100755
--- a/distrobox-create
+++ b/distrobox-create
@@ -28,6 +28,7 @@
 #	DBX_CONTAINER_IMAGE
 #	DBX_CONTAINER_MANAGER
 #	DBX_CONTAINER_NAME
+#	DBX_CONTAINER_ENTRY
 #	DBX_NON_INTERACTIVE
 #	DBX_SUDO_PROGRAM
 
@@ -49,6 +50,7 @@ container_image_default="registry.fedoraproject.org/fedora-toolbox:36"
 container_init_hook=""
 container_manager="autodetect"
 container_manager_additional_flags=""
+container_entry=1
 container_name=""
 container_pre_init_hook=""
 container_user_custom_home=""
@@ -60,9 +62,21 @@ distrobox_sudo_program="sudo"
 dryrun=0
 init=0
 non_interactive=0
+# Use cd + dirname + pwd so that we do not have relative paths in mount points
+# We're not using "realpath" here so that symlinks are not resolved this way
+# "realpath" would break situations like Nix or similar symlink based package
+# management.
+distrobox_entrypoint_path="$(cd "$(dirname "${0}")" && pwd)/distrobox-init"
+distrobox_export_path="$(cd "$(dirname "${0}")" && pwd)/distrobox-export"
+distrobox_hostexec_path="$(cd "$(dirname "${0}")" && pwd)/distrobox-host-exec"
+# In case init or export are not in the same path as create, let's search
+# in PATH for them.
+[ ! -e "${distrobox_entrypoint_path}" ] && distrobox_entrypoint_path="$(command -v distrobox-init)"
+[ ! -e "${distrobox_export_path}" ] && distrobox_export_path="$(command -v distrobox-export)"
+[ ! -e "${distrobox_hostexec_path}" ] && distrobox_hostexec_path="$(command -v distrobox-hostexec)"
 rootful=0
 verbose=0
-version="1.4.0"
+version="1.4.1"
 
 # Source configuration files, this is done in an hierarchy so local files have
 # priority over system defaults
@@ -89,6 +103,7 @@ done
 [ -n "${DBX_CONTAINER_IMAGE}" ] && container_image="${DBX_CONTAINER_IMAGE}"
 [ -n "${DBX_CONTAINER_MANAGER}" ] && container_manager="${DBX_CONTAINER_MANAGER}"
 [ -n "${DBX_CONTAINER_NAME}" ] && container_name="${DBX_CONTAINER_NAME}"
+[ -n "${DBX_CONTAINER_ENTRY}" ] && container_entry="${DBX_CONTAINER_ENTRY}"
 [ -n "${DBX_NON_INTERACTIVE}" ] && non_interactive="${DBX_NON_INTERACTIVE}"
 [ -n "${DBX_SUDO_PROGRAM}" ] && distrobox_sudo_program="${DBX_SUDO_PROGRAM}"
 
@@ -126,14 +141,15 @@ Options:
 	--clone/-c:		name of the distrobox container to use as base for a new container
 				this will be useful to either rename an existing distrobox or have multiple copies
 				of the same environment.
-	--home/-H		select a custom HOME directory for the container. Useful to avoid host's home littering with temp files.
-	--volume		additional volumes to add to the container
+	--home/-H:		select a custom HOME directory for the container. Useful to avoid host's home littering with temp files.
+	--volume:		additional volumes to add to the container
 	--additional-flags/-a:	additional flags to pass to the container manager command
-	--init-hooks		additional commands to execute during container initialization
-	--pre-init-hooks	additional commands to execute prior to container initialization
-	--init/-I		use init system (like systemd) inside the container.
+	--init-hooks:		additional commands to execute during container initialization
+	--pre-init-hooks:	additional commands to execute prior to container initialization
+	--init/-I:		use init system (like systemd) inside the container.
 				this will make host's processes not visible from within the container.
 	--help/-h:		show this message
+	--no-entry:		do not generate a container entry in the application list
 	--dry-run/-d:		only print the container manager command generated
 	--verbose/-v:		show more verbosity
 	--version/-V:		show version
@@ -162,6 +178,10 @@ while :; do
 			printf "distrobox: %s\n" "${version}"
 			exit 0
 			;;
+		--no-entry)
+			shift
+			container_entry=0
+			;;
 		-d | --dry-run)
 			shift
 			dryrun=1
@@ -418,6 +438,9 @@ generate_command() {
 		--volume /dev:/dev:rslave
 		--volume /sys:/sys:rslave
 		--volume /tmp:/tmp:rslave
+		--volume \"${distrobox_entrypoint_path}\":/usr/bin/entrypoint:ro
+		--volume \"${distrobox_export_path}\":/usr/bin/distrobox-export:ro
+		--volume \"${distrobox_hostexec_path}\":/usr/bin/distrobox-host-exec:ro
 		--volume \"${container_user_home}\":\"${container_user_home}\":rslave"
 
 	# This fix is needed as on Selinux systems, the host's selinux sysfs directory
@@ -553,6 +576,13 @@ generate_command() {
 	printf "%s" "${result_command}"
 }
 
+# Check that we have a complete distrobox installation or
+# entrypoint and export will not work.
+if [ -z "${distrobox_entrypoint_path}" ] || [ -z "${distrobox_export_path}" ]; then
+	printf >&2 "Error: no distrobox-init found in %s\n" "${PATH}"
+	exit 127
+fi
+
 # dry run mode, just generate the command and print it. No creation.
 if [ "${dryrun}" -ne 0 ]; then
 	if [ -n "${container_clone}" ]; then
@@ -633,7 +663,9 @@ if eval ${cmd} > /dev/null; then
 
 	# We've created the box, let's also create the entry
 	if [ "${rootful}" -eq 0 ]; then
-		"$(dirname "$(realpath "${0}")")/distrobox-generate-entry" "${container_name}"
+		if [ "${container_entry}" -ne 0 ]; then
+			"$(dirname "$(realpath "${0}")")/distrobox-generate-entry" "${container_name}"
+		fi
 	fi
 	exit $?
 fi
diff --git a/distrobox-enter b/distrobox-enter
index 54be888..49d283f 100755
--- a/distrobox-enter
+++ b/distrobox-enter
@@ -38,15 +38,6 @@ if [ "$(id -u)" -eq 0 ]; then
 	exit 1
 fi
 
-# Finx components we need to copy inside the container.
-distrobox_entrypoint_path="$(dirname "$(realpath "${0}")")/distrobox-init"
-distrobox_export_path="$(dirname "$(realpath "${0}")")/distrobox-export"
-distrobox_hostexec_path="$(dirname "$(realpath "${0}")")/distrobox-host-exec"
-# In case init or export are not in the same path as create, let's search
-# in PATH for them.
-[ ! -e "${distrobox_entrypoint_path}" ] && distrobox_entrypoint_path="$(command -v distrobox-init)"
-[ ! -e "${distrobox_export_path}" ] && distrobox_export_path="$(command -v distrobox-export)"
-[ ! -e "${distrobox_hostexec_path}" ] && distrobox_hostexec_path="$(command -v distrobox-hostexec)"
 # Defaults
 container_command=""
 container_image=""
@@ -67,7 +58,7 @@ headless=0
 rootful=0
 skip_workdir=0
 verbose=0
-version="1.4.0"
+version="1.4.1"
 
 # Source configuration files, this is done in an hierarchy so local files have
 # priority over system defaults
@@ -300,8 +291,8 @@ generate_command() {
 	# and export them to the container.
 	set +o xtrace
 	# disable logging fot this snippet, or it will be too talkative.
-	for i in $(printenv | grep '=' | grep -Ev ' |"' |
-		grep -Ev '^(HOST|HOSTNAME|HOME|PATH|SHELL|XDG_.*_DIRS|^_)|`'); do
+	for i in $(printenv | grep '=' | grep -Ev ' |"|`|\$' |
+		grep -Ev '^(HOST|HOSTNAME|HOME|PATH|SHELL|XDG_.*_DIRS|^_)'); do
 		# We filter the environment so that we do not have strange variables,
 		# multiline or containing spaces.
 		# We also NEED to ignore the HOME variable, as this is set at create time
@@ -444,15 +435,6 @@ if [ "${container_status}" != "running" ]; then
 	printf >&2 "run this command to follow along:\n\n"
 	printf >&2 " %s logs -f %s\n\n" "${container_manager}" "${container_name}"
 
-	# IMPORTANT STEP:
-	#
-	# Before starting, ensure we copy the entrypoint, the export and the host-exec utilities.
-	# This approach should solve the location-dependency, on systems like NixOS, or
-	# If one wants to change the installation path of distrobox (eg: from /usr/bin to ~/.local/bin).
-	${container_manager} cp "${distrobox_entrypoint_path}" "${container_name}":/usr/bin/entrypoint
-	${container_manager} cp "${distrobox_export_path}" "${container_name}":/usr/bin/distrobox-export
-	${container_manager} cp "${distrobox_hostexec_path}" "${container_name}":/usr/bin/distrobox-host-exec
-
 	log_timestamp="$(date +%FT%T.%N%:z)"
 	${container_manager} start "${container_name}" > /dev/null
 	# Check if the container is going in error status earlier than the
diff --git a/distrobox-ephemeral b/distrobox-ephemeral
index a308a65..1331ad1 100755
--- a/distrobox-ephemeral
+++ b/distrobox-ephemeral
@@ -39,7 +39,7 @@ distrobox_path="$(dirname "${0}")"
 extra_flags=""
 rootful=0
 verbose=0
-version="1.4.0"
+version="1.4.1"
 
 # Print usage to stdout.
 # Arguments:
@@ -112,7 +112,6 @@ while :; do
 	esac
 done
 
-set -o errexit
 set -o nounset
 # set verbosity
 if [ "${verbose}" -ne 0 ]; then
diff --git a/distrobox-export b/distrobox-export
index eb49228..41c4989 100755
--- a/distrobox-export
+++ b/distrobox-export
@@ -43,7 +43,7 @@ host_home="${DISTROBOX_HOST_HOME:-"${HOME}"}"
 is_sudo=""
 rootful=""
 verbose=0
-version="1.4.0"
+version="1.4.1"
 
 # We depend on some commands, let's be sure we have them
 base_dependencies="basename grep sed find"
diff --git a/distrobox-generate-entry b/distrobox-generate-entry
index b5f9c60..02c5d22 100755
--- a/distrobox-generate-entry
+++ b/distrobox-generate-entry
@@ -28,7 +28,7 @@ delete=0
 icon="auto"
 icon_default="${HOME}/.local/share/icons/terminal-distrobox-icon.png"
 verbose=0
-version="1.4.0"
+version="1.4.1"
 
 # Source configuration files, this is done in an hierarchy so local files have
 # priority over system defaults
@@ -162,6 +162,18 @@ if [ "${delete}" -ne 0 ]; then
 	exit
 fi
 
+if  ! command -v curl > /dev/null && ! command -v wget > /dev/null; then
+	printf >&2 "Icon generation depends on either curl or wget\n"
+	printf >&2 "Fallbacking to default icon.\n"
+	download="null"
+fi
+
+if  command -v curl > /dev/null 2>&1; then
+	download="curl -sLo"
+elif  command -v wget > /dev/null 2>&1; then
+	download="wget -qO"
+fi
+
 # We depend on a container manager let's be sure we have it
 # First we use podman, else docker
 case "${container_manager}" in
@@ -249,10 +261,10 @@ if [ "${icon}" = "auto" ]; then
 	rm -f /tmp/"${container_name}".os-release
 
 	icon_url="$(echo "${DISTRO_ICON_MAP}" | grep "${container_distro}:" | cut -d':' -f2-)"
-	if [ -n "${icon_url}" ]; then
+	if [ -n "${icon_url}" ] && [ "${download}" != "null" ]; then
 		icon_extension="${icon_url##*.}"
 
-		if wget -c -q "${icon_url}" -O "${HOME}/.local/share/icons/distrobox/${container_distro}.${icon_extension}"; then
+		if ${download} - "${icon_url}" > "${HOME}/.local/share/icons/distrobox/${container_distro}.${icon_extension}"; then
 			icon="${HOME}/.local/share/icons/distrobox/${container_distro}.${icon_extension}"
 		else
 			# Wget failed for some reasons. Default to generic terminal icon as declared at the beginning.
diff --git a/distrobox-host-exec b/distrobox-host-exec
index d35af4d..12e8f7e 100755
--- a/distrobox-host-exec
+++ b/distrobox-host-exec
@@ -28,7 +28,7 @@ fi
 distrobox_host_exec_default_command="${SHELL:-/bin/sh}"
 host_spawn_version="1.2.1"
 verbose=0
-version="1.4.0"
+version="1.4.1"
 
 # Print usage to stdout.
 # Arguments:
diff --git a/distrobox-init b/distrobox-init
index 1a2bea6..65833b8 100755
--- a/distrobox-init
+++ b/distrobox-init
@@ -32,7 +32,7 @@ init_hook=""
 upgrade=0
 pre_init_hook=""
 verbose=0
-version="1.4.0"
+version="1.4.1"
 # Print usage to stdout.
 # Arguments:
 #   None
@@ -234,7 +234,7 @@ fi
 if [ "${upgrade}" -ne 0 ] || ! command -v find || ! command -v mount || ! command -v passwd ||
 	! command -v sudo || ! command -v useradd || ! command -v diff ||
 	! command -v pinentry || ! command -v wget || ! command -v curl ||
-	! command -v less || ! command -v bc ||
+	! command -v less || ! command -v bc || ! command -v time || ! command -v lsof ||
 	! command -v "${shell_pkg}"; then
 
 	# Detect the available package manager
@@ -261,7 +261,9 @@ if [ "${upgrade}" -ne 0 ] || ! command -v find || ! command -v mount || ! comman
 			curl \
 			diffutils \
 			findutils \
+			gnupg \
 			less \
+			lsof \
 			ncurses \
 			pinentry \
 			procps \
@@ -270,6 +272,12 @@ if [ "${upgrade}" -ne 0 ] || ! command -v find || ! command -v mount || ! comman
 			util-linux \
 			wget \
 			vte3
+		# These are graphics drivers for 3d applications
+		# shellcheck disable=SC2046
+		apk add \
+			$(apk search -q mesa-dri) \
+			$(apk search -q mesa-vulkan) \
+			vulkan-loader
 
 	elif command -v apt-get; then
 		# If we need to upgrade, do it and exit, no further action required.
@@ -300,17 +308,32 @@ if [ "${upgrade}" -ne 0 ] || ! command -v find || ! command -v mount || ! comman
 			dialog \
 			diffutils \
 			findutils \
+			gnupg2 \
 			less \
 			libnss-myhostname \
+			libvte-2.9[0-9]-common \
 			libvte-common \
+			lsof \
 			ncurses-base \
 			passwd \
 			pinentry-curses \
 			procps \
 			sudo \
+			time \
 			wget \
 			util-linux
 
+		# These are graphics drivers for 3d applications
+		apt-get install -y \
+			libegl1-mesa \
+			libgl1-mesa-glx
+		# Older versions of debian/ubuntu don't have vulkan, check for it.
+		if apt-cache show libvulkan1 > /dev/null; then
+			apt-get install -y \
+				libvulkan1 \
+				mesa-vulkan-drivers
+		fi
+
 	elif command -v dnf; then
 		# If we need to upgrade, do it and exit, no further action required.
 		if [ "${upgrade}" -ne 0 ]; then
@@ -334,18 +357,30 @@ if [ "${upgrade}" -ne 0 ] || ! command -v find || ! command -v mount || ! comman
 			bc \
 			curl \
 			diffutils \
+			dnf-plugins-core \
 			findutils \
+			gnupg2 \
 			less \
+			lsof \
 			ncurses \
 			passwd \
 			pinentry \
 			procps-ng \
 			shadow-utils \
 			sudo \
+			time \
 			util-linux \
 			wget \
 			vte-profile
 
+		# These are graphics drivers for 3d applications
+		if dnf list mesa-dri-drivers > /dev/null; then
+			dnf install -y \
+				mesa-dri-drivers \
+				mesa-vulkan-drivers \
+				vulkan
+		fi
+
 	elif command -v emerge; then
 		# Check if shell_pkg is available in distro's repo. If not we
 		# fall back to bash, and we set the SHELL variable to bash so
@@ -388,16 +423,27 @@ if [ "${upgrade}" -ne 0 ] || ! command -v find || ! command -v mount || ! comman
 			bc \
 			diffutils \
 			findutils \
+			gnupg \
 			less \
+			lsof \
 			ncurses \
 			passwd \
 			pinentry \
 			procps \
 			shadow-utils \
 			sudo \
+			time \
 			wget \
+			vte-profile \
 			util-linux
-		# vte-profile
+
+		# These are graphics drivers for 3d applications
+		# On these very minimal images, graphics can be abstent
+		# from the repos, so let's ignore the error in this case.
+		microdnf install -y \
+			mesa-dri-drivers \
+			mesa-vulkan-drivers \
+			vulkan || :
 
 	elif command -v pacman; then
 		# If we need to upgrade, do it and exit, no further action required.
@@ -425,16 +471,26 @@ if [ "${upgrade}" -ne 0 ] || ! command -v find || ! command -v mount || ! comman
 			curl \
 			diffutils \
 			findutils \
+			gnupg \
 			less \
+			lsof \
 			ncurses \
 			pinentry \
 			procps-ng \
 			shadow \
 			sudo \
+			time \
 			util-linux \
 			wget \
 			vte-common
 
+		# These are graphics drivers for 3d applications
+		pacman -Sy --noconfirm \
+			mesa \
+			opengl-driver \
+			vulkan-intel \
+			vulkan-radeon
+
 	elif command -v slackpkg; then
 		# If we need to upgrade, do it and exit, no further action required.
 		if [ "${upgrade}" -ne 0 ]; then
@@ -455,16 +511,23 @@ if [ "${upgrade}" -ne 0 ] || ! command -v find || ! command -v mount || ! comman
 			curl \
 			diffutils \
 			findutils \
+			gnupg2 \
 			less \
 			libvte-2 \
+			lsof \
 			ncurses \
 			pinentry \
 			procps \
 			shadow \
 			sudo \
+			time \
 			wget \
 			util-linux
 
+		# These are graphics drivers for 3d applications
+		yes | slackpkg install -default_answer=yes -batch=yes \
+			mesa
+
 	elif command -v swupd; then
 		# If we need to upgrade, do it and exit, no further action required.
 		if [ "${upgrade}" -ne 0 ]; then
@@ -482,6 +545,11 @@ if [ "${upgrade}" -ne 0 ] || ! command -v find || ! command -v mount || ! comman
 			sysadmin-basic \
 			wget
 
+		# These are graphics drivers for 3d applications
+		swupd bundle-add \
+			lib-opengl \
+			devpkg-Vulkan-Loader
+
 	elif command -v xbps-install; then
 		# If we need to upgrade, do it and exit, no further action required.
 		if [ "${upgrade}" -ne 0 ]; then
@@ -503,14 +571,20 @@ if [ "${upgrade}" -ne 0 ] || ! command -v find || ! command -v mount || ! comman
 			curl \
 			diffutils \
 			findutils \
+			gnupg2 \
 			less \
+			lsof \
 			ncurses-base \
 			procps-ng \
 			shadow \
 			sudo \
+			time \
 			wget \
 			util-linux
 
+		# These are graphics drivers for 3d applications
+		xbps-install -Sy mesa-dri
+
 	elif command -v yum; then
 		# If we need to upgrade, do it and exit, no further action required.
 		if [ "${upgrade}" -ne 0 ]; then
@@ -535,17 +609,27 @@ if [ "${upgrade}" -ne 0 ] || ! command -v find || ! command -v mount || ! comman
 			curl \
 			diffutils \
 			findutils \
+			gnupg2 \
 			less \
+			lsof \
 			ncurses \
 			passwd \
 			pinentry \
 			procps \
 			shadow-utils \
 			sudo \
+			time \
 			util-linux \
 			wget \
 			vte-profile
 
+		# These are graphics drivers for 3d applications
+		# yum distros are too old to have vulkan anyway.
+		if yum list mesa-dri-drivers > /dev/null; then
+			yum install -y \
+				mesa-dri-drivers
+		fi
+
 	elif command -v zypper; then
 		# If we need to upgrade, do it and exit, no further action required.
 		if [ "${upgrade}" -ne 0 ]; then
@@ -562,16 +646,27 @@ if [ "${upgrade}" -ne 0 ] || ! command -v find || ! command -v mount || ! comman
 			curl \
 			diffutils \
 			findutils \
+			gnupg \
 			less \
 			libvte-2* \
+			lsof \
 			ncurses \
 			pinentry \
 			procps \
 			shadow \
 			sudo \
 			systemd \
+			time \
 			wget \
 			util-linux
+
+		# These are graphics drivers for 3d applications
+		zypper install -y \
+			Mesa-dri \
+			libvulkan1 \
+			libvulkan_intel \
+			libvulkan_radeon
+
 		# In openSUSE official images, zypper is configured to ignore recommended
 		# packages (i.e., weak dependencies). This however, results in a rather
 		# poor out-of-the-box experience (e.g., when trying to run GUI apps).
@@ -663,6 +758,7 @@ printf "distrobox: Setting up host's sockets integration...\n"
 # the container or accessing docker and libvirt sockets.
 host_sockets="$(find /run/host/run -name 'user' \
 	-prune -o -name 'nscd' \
+	-prune -o -name 'bees' \
 	-prune -o -name 'system_bus_socket' \
 	-prune -o -type s -print \
 	2> /dev/null || :)"
diff --git a/distrobox-list b/distrobox-list
index e74b30d..4a76d47 100755
--- a/distrobox-list
+++ b/distrobox-list
@@ -35,7 +35,7 @@ fi
 no_color=0
 rootful=0
 verbose=0
-version="1.4.0"
+version="1.4.1"
 container_manager="autodetect"
 distrobox_sudo_program="sudo"
 
diff --git a/distrobox-rm b/distrobox-rm
index ddfc149..76b7a26 100755
--- a/distrobox-rm
+++ b/distrobox-rm
@@ -40,7 +40,7 @@ non_interactive=0
 rootful=0
 verbose=0
 distrobox_sudo_program="sudo"
-version="1.4.0"
+version="1.4.1"
 
 # Source configuration files, this is done in an hierarchy so local files have
 # priority over system defaults
diff --git a/distrobox-stop b/distrobox-stop
index c9549b2..3cf032b 100755
--- a/distrobox-stop
+++ b/distrobox-stop
@@ -40,7 +40,7 @@ non_interactive=0
 rootful=0
 verbose=0
 distrobox_sudo_program="sudo"
-version="1.4.0"
+version="1.4.1"
 
 # Source configuration files, this is done in an hierarchy so local files have
 # priority over system defaults
diff --git a/distrobox-upgrade b/distrobox-upgrade
index dcf487b..96d4f9b 100755
--- a/distrobox-upgrade
+++ b/distrobox-upgrade
@@ -33,7 +33,7 @@ distrobox_path="$(dirname "$(realpath "${0}")")"
 distrobox_sudo_program="sudo"
 rootful=0
 verbose=0
-version="1.4.0"
+version="1.4.1"
 
 # Source configuration files, this is done in an hierarchy so local files have
 # priority over system defaults
diff --git a/docs/README.md b/docs/README.md
index 8ec20bf..c77d788 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -158,7 +158,7 @@ Fedora Silverblue on his project [ublue](https://github.com/castrojo/ublue)
 ## Why
 
 - Provide a mutable environment on an immutable OS, like [Endless OS,
-  Fedora Silverblue, OpenSUSE MicroOS](compatibility.md#host-distros)  or [SteamOS3](compatibility.md#install-podman-in-a-static-manner)
+  Fedora Silverblue, OpenSUSE MicroOS](compatibility.md#host-distros)  or [SteamOS3](posts/install_rootless.md)
 - Provide a locally privileged environment for sudoless setups
   (eg. company-provided laptops, security reasons, etc...)
 - To mix and match a stable base system (eg. Debian Stable, Ubuntu LTS, RedHat)
@@ -270,6 +270,7 @@ container_user_custom_home="/home/.local/share/container-home-test"
 container_image="registry.opensuse.org/opensuse/toolbox:latest"
 container_manager="docker"
 container_name="test-name-1"
+container_entry=0
 non_interactive="1"
 skip_workdir="0"
 ```
@@ -281,6 +282,7 @@ Alternatively it is possible to specify preferences using ENV variables:
 - DBX_CONTAINER_IMAGE
 - DBX_CONTAINER_MANAGER
 - DBX_CONTAINER_NAME
+- DBX_CONTAINER_ENTRY
 - DBX_NON_INTERACTIVE
 - DBX_SKIP_WORKDIR
 
@@ -297,13 +299,15 @@ Thanks to the maintainers for their work: [M0Rf30](https://github.com/M0Rf30),
 [alcir](https://github.com/alcir), [dfaggioli](https://github.com/dfaggioli),
 [AtilaSaraiva](https://github.com/AtilaSaraiva), [michel-slm](https://github.com/michel-slm)
 
+You can also [follow the guide to install in a rootless manner](posts/install_rootless.md)
+
 ## Alternative methods
 
 Here is a list of alternative ways to install distrobox
 
 ### Curl
 
-Else, if you like to live your life dangerously, or you want the latest release,
+If you like to live your life dangerously, or you want the latest release,
 you can trust me and simply run this in your terminal:
 
 ```sh
@@ -328,6 +332,9 @@ or:
 curl -s https://raw.githubusercontent.com/89luca89/distrobox/main/install | sh -s -- --next --prefix ~/.local
 ```
 
+> **Warning**
+> Remember to add prefix-path-you-choose/bin to your PATH, to make it work.
+
 ### Git
 
 Alternatively you can clone the project using `git clone` or using the latest
diff --git a/docs/compatibility.md b/docs/compatibility.md
index ac54904..56ce309 100644
--- a/docs/compatibility.md
+++ b/docs/compatibility.md
@@ -52,7 +52,7 @@ Distrobox has been successfully tested on:
 | Alpine Linux | 3.14 <br> 3.15 | To setup rootless podman, look [HERE](https://wiki.alpinelinux.org/wiki/Podman) |
 | Arch Linux | | `distrobox` and `distrobox-git` are available in AUR (thanks [M0Rf30](https://github.com/M0Rf30)!). <br> To setup rootless podman, look [HERE](https://wiki.archlinux.org/title/Podman) |
 | CentOS | 8 <br> 8 Stream <br> 9 Stream | `distrobox` is available in epel repos. (thanks [alcir](https://github.com/alcir)!) |
-| Debian | 11 <br> Testing <br> Unstable | `distrobox` is available in default repos in `unstable` (thanks [michel-slm!](https://github.com/michel-slm!)!) |
+| Debian | 11 <br> Testing <br> Unstable | `distrobox` is available in default repos in `testing` and `unstable` (thanks [michel-slm!](https://github.com/michel-slm!)!) |
 | EndlessOS | 4.0.0 | |
 | Fedora Silverblue/Kinoite | 35 <br> 36 <br> Rawhide | `distrobox` is available in default repos.(thanks [alcir](https://github.com/alcir)!) |
 | Fedora | 35 <br> 36 <br> Rawhide | `distrobox` is available in default repos.(thanks [alcir](https://github.com/alcir)!) |
@@ -62,15 +62,15 @@ Distrobox has been successfully tested on:
 | OpenSUSE | Leap 15.4 <br> Leap 15.3 <br> Leap 15.2 | Packages are available [here](https://software.opensuse.org/download/package?package=distrobox&project=home%3Adfaggioli%3Amicroos-desktop) (thanks [dfaggioli](https://github.com/dfaggioli)!).<br> To install on openSUSE Leap 15, Use the following repository links in the `zypper addrepo` command: [15.4](https://download.opensuse.org/repositories/home:dfaggioli:microos-desktop/15.4/home:dfaggioli:microos-desktop.repo), [15.3](https://download.opensuse.org/repositories/home:dfaggioli:microos-desktop/15.3/home:dfaggioli:microos-desktop.repo), [15.2](https://download.opensuse.org/repositories/home:dfaggioli:microos-desktop/15.2/home:dfaggioli:microos-desktop.repo). Then: <br>  `zypper refresh && zypper install distrobox`. <br> `Podman` under SUSE Leap, cannot initialize correctly the containers managed by ``distrobox`` until [this OpenSUSE bug](https://bugzilla.opensuse.org/show_bug.cgi?id=1199871) is fixed, or ``podman`` loggin is configured properly. |
 | OpenSUSE | Tumbleweed <br> MicroOS | `distrobox` is available in default repos (thanks [dfaggioli](https://github.com/dfaggioli)!) <br> For Tumbleweed, do: `zypper install distrobox`. <br> For MicroOS, do: `pkcon install distrobox` and reboot the system. |
 | SUSE Linux Enterprise Server | 15 Service Pack 4 <br> 15 Service Pack 3 <br> 15 Service Pack 2 | Same procedure as the one for openSUSE (Leap, respective versions, of course). Use the following repository links in the `zypper addrepo` command: [SLE-15-SP4](https://download.opensuse.org/repositories/home:dfaggioli:microos-desktop/15.4/home:dfaggioli:microos-desktop.repo), [SLE-15-SP3](https://download.opensuse.org/repositories/home:dfaggioli:microos-desktop/15.3/home:dfaggioli:microos-desktop.repo), [SLE-15-SP4](https://download.opensuse.org/repositories/home:dfaggioli:microos-desktop/SLE_15_SP2/home:dfaggioli:microos-desktop.repo). Then: <br>  `zypper refresh && zypper install distrobox`. <br> `Podman` under SUSE Leap, cannot initialize correctly the containers managed by ``distrobox`` until [this OpenSUSE bug](https://bugzilla.opensuse.org/show_bug.cgi?id=1199871) is fixed, or ``podman`` loggin is configured properly. |
-| SteamOS 3 | | You can use `steamos-readonly disable` and follow `Arch Linux` instructions. This will **NOT** survive updates.<br>Else you can follow the [Install Podman in a static manner](#install-podman-in-a-static-manner) guide, this will install it in your $HOME and it will survive updates.|
+| SteamOS 3 | | You can use `steamos-readonly disable` and follow `Arch Linux` instructions. This will **NOT** survive updates.<br>Alternatively you can follow the [Install Podman in a static manner](posts/install_rootless.md) guide, this will install it in your $HOME and it will survive updates.|
 | RedHat | 8 <br> 9  | `distrobox` is available in epel repos. (thanks [alcir](https://github.com/alcir)!) |
-| Ubuntu | 18.04 <br> 20.04 <br> 21.10 | Older versions based on 20.04 or earlier may need external repos to install newer Podman and Docker releases. <br> Derivatives like Pop_OS!, Mint and Elementary OS should work the same. <br> [Now PPA available!](https://launchpad.net/~michel-slm/+archive/ubuntu/distrobox), also `distrobox` is available in default repos in `22.10` (thanks [michel-slm](https://github.com/michel-slm)!)  |
+| Ubuntu | 18.04 <br> 20.04 <br> 22.04 <br> 22.10 | Older versions based on 20.04 or earlier may need external repos to install newer Podman and Docker releases. <br> Derivatives like Pop_OS!, Mint and Elementary OS should work the same. <br> [Now PPA available!](https://launchpad.net/~michel-slm/+archive/ubuntu/distrobox), also `distrobox` is available in default repos in `22.10` (thanks [michel-slm](https://github.com/michel-slm)!)  |
 | Void Linux | glibc | Systemd service export will not work. |
 
 ### Install Podman in a static manner
 
 If on your distribution (eg. SteamOS) can be difficult to install something and keep it
-between reboots, then you could use this script to install `podman` in your `$HOME`.
+between updates, then you could use this script to install `podman` in your `$HOME`.
 
 This has some limitations, for starters, it won't work in `rootful` mode for now,
 but otherwise it's working for normal use.
@@ -93,6 +93,9 @@ To uninstall:
 curl -s https://raw.githubusercontent.com/89luca89/distrobox/main/extras/install-podman | sh -s -- --prefix ~/.local --remove
 ```
 
+> **Warning**
+> Remember to add ~/.local/podman/bin to your PATH, to make it work.
+
 #### Compatibility notes
 
 If your container is not able to connect to your host xserver, make sure to
@@ -158,11 +161,11 @@ Distrobox guests tested successfully with the following container images:
 | Opensuse | Leap | registry.opensuse.org/opensuse/leap:latest    |
 | Opensuse | Tumbleweed | registry.opensuse.org/opensuse/tumbleweed:latest  <br>  registry.opensuse.org/opensuse/toolbox:latest    |
 | Oracle Linux | 7 <br> 7-slim <br> 8 <br> 8-slim <br> 9 <br> 9-slim |container-registry.oracle.com/os/oraclelinux:7 <br> container-registry.oracle.com/os/oraclelinux:7-slim <br> container-registry.oracle.com/os/oraclelinux:8 <br> container-registry.oracle.com/os/oraclelinux:8-slim <br> container-registry.oracle.com/os/oraclelinux:9 <br> container-registry.oracle.com/os/oraclelinux:9-slim  |
-| RedHat (UBI) | 7 <br> 8 <br> 9 | registry.access.redhat.com/ubi7/ubi <br> registry.access.redhat.com/ubi7/ubi-init <br> registry.access.redhat.com/ubi7/ubi-minimal <br> registry.access.redhat.com/ubi8/ubi <br> registry.access.redhat.com/ubi8/ubi-init <br> registry.access.redhat.com/ubi8/ubi-minimal <br> registry.access.redhat.com/ubi9/ubi <br> registry.access.redhat.com/ubi9/ubi-init <br> registry.access.redhat.com/ubi9/ubi-minimal |
-| Rocky Linux | 8 <br> 8-minimal | quay.io/rockylinux/rockylinux:8 <br> quay.io/rockylinux/rockylinux:8-minimal <br> quay.io/rockylinux/rockylinux:latest    |
+| RedHat (UBI) | 7 <br> 8 <br> 9 | registry.access.redhat.com/ubi7/ubi <br> registry.access.redhat.com/ubi7/ubi-init <br> registry.access.redhat.com/ubi8/ubi <br> registry.access.redhat.com/ubi8/ubi-init <br> registry.access.redhat.com/ubi8/ubi-minimal <br> registry.access.redhat.com/ubi9/ubi <br> registry.access.redhat.com/ubi9/ubi-init <br> registry.access.redhat.com/ubi9/ubi-minimal |
+| Rocky Linux | 8 <br> 8-minimal <br> 9 | quay.io/rockylinux/rockylinux:8 <br> quay.io/rockylinux/rockylinux:8-minimal <br> quay.io/rockylinux/rockylinux:9 <br> quay.io/rockylinux/rockylinux:latest    |
 | Scientific Linux | 7 | docker.io/library/sl:7    |
 | Slackware | 14.2 | docker.io/vbatts/slackware:14.2    |
-| Ubuntu | 14.04 <br> 16.04 <br> 18.04 <br> 20.04 <br> 22.04 | docker.io/library/ubuntu:14.04 <br> docker.io/library/ubuntu:16.04 <br> docker.io/library/ubuntu:18.04 <br> docker.io/library/ubuntu:20.04 <br> docker.io/library/ubuntu:22.04    |
+| Ubuntu | 14.04 <br> 16.04 <br> 18.04 <br> 20.04 <br> 22.04 <br> 22.10 | docker.io/library/ubuntu:14.04 <br> docker.io/library/ubuntu:16.04 <br> docker.io/library/ubuntu:18.04 <br> docker.io/library/ubuntu:20.04 <br> docker.io/library/ubuntu:22.04    |
 | Void Linux | | ghcr.io/void-linux/void-linux:latest-full-x86_64  <br>  ghcr.io/void-linux/void-linux:latest-full-x86_64-musl |
 
 Note however that if you use a non-toolbox preconfigured image (e.g.
diff --git a/docs/posts/install_rootless.md b/docs/posts/install_rootless.md
new file mode 100644
index 0000000..4343a73
--- /dev/null
+++ b/docs/posts/install_rootless.md
@@ -0,0 +1,28 @@
+# Install on SteamOS 3
+
+## Step 1
+
+Installing distrobox on SteamOS is quite straightforward:
+
+1 - Install `distrobox` in your HOME following the `curl` instructions: [INSTALL](../README.md#curl)
+2 - Add the Path you've choosen to install to your PATH (by default it's `$HOME/.local/bin`. [See here how to do it](https://www.howtogeek.com/658904/how-to-add-a-directory-to-your-path-in-linux/)
+
+## Step 2
+
+We now need `podman` to be installed in order for `distrobox` to work.
+The easiest way is to use the script to install it in HOME, so it will survive future updates:
+
+1 - Install `podman` in your HOME following the `curl` command: [INSTALL](../compatibility.md#install-podman-in-a-static-manner)
+2 - Add the Path you've choosen to install to your PATH (by default it's `$HOME/.local/podman/bin`. [See here how to do it](https://www.howtogeek.com/658904/how-to-add-a-directory-to-your-path-in-linux/)
+
+## Step 3
+
+On some systems, you might have to enable this command in order to have graphical applications working: [SEE THESE NOTES](../compatibility.md#compatibility-notes)
+
+To resolve add this line to your `~/.bashrc` or `~/.profile` or `~/.xinitrc`
+
+  `xhost +si:localuser:$USER`
+
+---
+
+After this, you can open a new terminal, and have Distrobox working!
diff --git a/docs/usage/distrobox-create.md b/docs/usage/distrobox-create.md
index bc76136..56cf86d 100644
--- a/docs/usage/distrobox-create.md
+++ b/docs/usage/distrobox-create.md
@@ -33,6 +33,7 @@ graphical apps (X11/Wayland), and audio.
 	--init/-I		use init system (like systemd) inside the container.
 				this will make host's processes not visible from within the container.
 	--help/-h:		show this message
+	--no-entry:             do not generate a container entry in the application list
 	--dry-run/-d:		only print the container manager command generated
 	--verbose/-v:		show more verbosity
 	--version/-V:		show version
diff --git a/docs/useful_tips.md b/docs/useful_tips.md
index 4cf1fe7..d36f5a6 100644
--- a/docs/useful_tips.md
+++ b/docs/useful_tips.md
@@ -394,7 +394,7 @@ the shell you use on the host is not available in the default repos (e.g.
 Use the pre-initialization hooks for this:
 
 ```shell
-distrobox create -i docker.io/almalinux/8-init --init --name test --pre-init-hooks "dnf config-manager --enable powertools && dnf -y install epel-release"
+distrobox create -i docker.io/almalinux/8-init --init --name test --pre-init-hooks "dnf -y install dnf-plugins-core && dnf config-manager --enable powertools && dnf -y install epel-release"
 ```
 
 ```shell
@@ -402,5 +402,5 @@ distrobox create -i docker.io/library/almalinux:9 -n alma9 --pre-init-hooks "dnf
 ```
 
 ```shell
-distrobox create -i quay.io/centos/centos:stream8 c8s --pre-init-hooks "dnf config-manager --enable powertools && dnf -y install epel-next-release"
+distrobox create -i quay.io/centos/centos:stream9 c9s --pre-init-hooks "dnf -y install dnf-plugins-core && dnf config-manager --enable crb && dnf -y install epel-next-release"
 ```
diff --git a/extras/install-podman b/extras/install-podman
index 0d2c443..0531981 100755
--- a/extras/install-podman
+++ b/extras/install-podman
@@ -95,49 +95,81 @@ if [ "${verbose}" -ne 0 ]; then
 	set -o xtrace
 fi
 
+export  PATH="${PATH}:${dest_path}/bin"
+
+## Uninstall ###################################################################
+
 if [ "${remove}" -ne 0 ]; then
+
 	printf >&2 "\033[1;31m Resetting...\n\033[0m"
 	"${dest_path}/bin/podman" system reset -f > /dev/null
 	printf >&2 "\033[1;31m Removing...\n\033[0m"
-	rm -r "${dest_path}" "${conf_path}/containers" "${prefix}/bin/podman"
+	rm -r "${dest_path}" "${conf_path}/containers"
 	printf >&2 "\033[1;31m Done.\n\033[0m"
 	exit $?
 fi
 
-printf >&2 "\033[1;31m Fetching latest podman version...\n\033[0m"
+###############################################################################
+
+## Get crun ###################################################################
+
+CRUN_VERSION="1.6"
+printf >&2 "\033[1;31m Fetching crun %s...\n\033[0m" "${CRUN_VERSION}"
+# Download the binary to /tmp
+curl -L \
+	"https://github.com/containers/crun/releases/download/${CRUN_VERSION}/crun-${CRUN_VERSION}-linux-amd64" \
+	-o "/tmp/crun"
+chmod +x /tmp/crun
+
+###############################################################################
+
+## Get podman ###################################################################
+
+PODMAN_VERSION="4.2.1"
+printf >&2 "\033[1;31m Fetching podman %s...\n\033[0m" "${PODMAN_VERSION}"
 # Using static podman bulds semplifies our lifes! Thanks to the wonderful project
 #   https://github.com/mgoltzsche/podman-static
 # All credits to @mgoltzsche for the builds.
-RELEASE=$(curl -s -L https://github.com/mgoltzsche/podman-static/releases/latest |
-	grep href |
-	grep podman |
-	grep download |
-	grep linux | grep amd64 | sort | tail -n 1 | cut -d'"' -f2)
-printf >&2 "\033[1;31m Found %s, downloading...\n\033[0m" "${RELEASE}"
-
-NAME=$(echo "${RELEASE}" | rev | cut -d'/' -f1 | rev)
 # Download and unpack the tar in /tmp
-curl -L "https://github.com/${RELEASE}" -o "/tmp/${NAME}"
-printf >&2 "\033[1;31m Unpacking...\n\033[0m"
-tar xf /tmp/"${NAME}" -C /tmp/
+curl -L \
+	"https://github.com/mgoltzsche/podman-static/releases/download/v${PODMAN_VERSION}/podman-linux-amd64.tar.gz" \
+	-o /tmp/podman-linux-amd64.tar.gz
+printf >&2 "\033[1;31m Unpacking Podman...\n\033[0m"
+tar xf /tmp/podman-linux-amd64.tar.gz -C /tmp/
 
-# Setup the config and local dirs, they are needed to make podman work
-# on this particular setup
-mkdir -p "${conf_path}" "${dest_path}" "${prefix}/bin"
+###############################################################################
 
 printf >&2 "\033[1;31m Copying in %s...\n\033[0m" "${dest_path}"
 # Copy default config files in there
+mkdir -p "${conf_path}" "${dest_path}"
 cp -r /tmp/podman-linux-amd64/usr/local/bin "${dest_path}"
 cp -r /tmp/podman-linux-amd64/usr/local/lib "${dest_path}"
 cp -r /tmp/podman-linux-amd64/etc/containers "${conf_path}"
+mv /tmp/crun "${dest_path}/bin/crun"
 
 printf >&2 "\033[1;31m Configuring...\n\033[0m"
 # We need to tell podman to use those costom directories in order to make
 # it work from custom directories
-echo "conmon_path=[ \"${dest_path}/lib/podman/conmon\" ]
-static_dir = \"${dest_path}/share/podman/libpod\"
-volume_path = \"${dest_path}//share/podman/volume\"
-" >> "${conf_path}/containers/containers.conf"
+cat << EOF > "${conf_path}/containers/containers.conf"
+# See https://github.com/containers/common/blob/master/pkg/config/containers.conf
+[engine]
+# can be croupfs, systemd
+cgroup_manager = "systemd"
+# can be file, journald
+events_logger="file"
+exit_command_delay = 10
+# can be runc, crun
+runtime = "crun"
+stop_timeout = 5
+cni_plugin_dirs = [ "${dest_path}/lib/cni" ]
+conmon_path=[ "${dest_path}/lib/podman/conmon" ]
+helper_binaries_dir = [ "${dest_path}/lib/podman" ]
+static_dir = "${dest_path}/share/podman/libpod"
+volume_path = "${dest_path}/share/podman/volume"
+[engine.runtimes]
+crun = [ "${dest_path}/bin/crun" ]
+runc = [ "${dest_path}/bin/runc" ]
+EOF
 
 # Same for mouning programs
 sed -i "s|/var|${dest_path}|g" "${conf_path}/containers/storage.conf"
@@ -146,13 +178,11 @@ sed -i "s|mount_program =.*|mount_program = \"${dest_path}/bin/fuse-overlayfs\"|
 
 printf >&2 "\033[1;31m Cleaning up...\n\033[0m"
 # Cleanup
-rm -f /tmp/"${NAME}"
-rm -rf /tmp/podman-linux-amd64/
+rm -rf /tmp/podman-linux-amd64/ /tmp/podman-linux-amd64.tar.gz /tmp/crun
 
 printf >&2 "\033[1;31m Migrating...\n\033[0m"
 
 "${dest_path}/bin/podman" system migrate
-ln -sf "${dest_path}/bin/podman" "${prefix}/bin/podman"
 
 printf >&2 "Successfully installed to %s.\n" "${dest_path}"
-printf >&2 "Be sure that %s is in your \$PATH environment variable for it to work.\n" "${dest_path}"
+printf >&2 "Be sure that %s is in your \$PATH environment variable for it to work.\n" "${dest_path}/bin"
diff --git a/install b/install
index 9c944c0..b482912 100755
--- a/install
+++ b/install
@@ -79,6 +79,7 @@ fi
 dest_path="${prefix}/bin"
 man_dest_path="${prefix}/share/man/man1"
 icon_dest_path="${prefix}/share/icons"
+completion_dest_path="${prefix}/share/bash-completion/completions/"
 
 set -o errexit
 set -o nounset
@@ -105,6 +106,11 @@ if [ -e "${curr_dir}/distrobox-enter" ]; then
 			install -D -m 0644 -t "${man_dest_path}" "${file}"
 		done
 	fi
+	if [ -e "completions" ]; then
+		for file in completions/*; do
+			install -D -m 0644 -t "${completion_dest_path}" "${file}"
+		done
+	fi
 	if [ -e terminal-distrobox-icon.png ]; then
 		install -D -m 0644 -t "${icon_dest_path}" terminal-distrobox-icon.png
 	fi
@@ -156,6 +162,11 @@ else
 			install -D -m 0644 -t "${man_dest_path}" "${file}"
 		done
 	fi
+	if [ -e "distrobox-$(echo "${release_name}" | sed 's/.tar.gz//g')/completions/" ]; then
+		for file in "distrobox-$(echo "${release_name}" | sed 's/.tar.gz//g')"/completions/*; do
+			install -D -m 0644 -t "${completion_dest_path}" "${file}"
+		done
+	fi
 	if [ -e "distrobox-$(echo "${release_name}" | sed 's/.tar.gz//g')"/terminal-distrobox-icon.png ]; then
 		install -D -m 0644 -t "${icon_dest_path}" \
 			"distrobox-$(echo "${release_name}" | sed 's/.tar.gz//g')"/terminal-distrobox-icon.png
diff --git a/man/man1/distrobox-compatibility.1 b/man/man1/distrobox-compatibility.1
index 94e522b..92c3471 100644
--- a/man/man1/distrobox-compatibility.1
+++ b/man/man1/distrobox-compatibility.1
@@ -225,7 +225,6 @@ T}@T{
 T}@T{
 registry.access.redhat.com/ubi7/ubi
 registry.access.redhat.com/ubi7/ubi-init
-registry.access.redhat.com/ubi7/ubi-minimal
 registry.access.redhat.com/ubi8/ubi
 registry.access.redhat.com/ubi8/ubi-init
 registry.access.redhat.com/ubi8/ubi-minimal
@@ -236,10 +235,10 @@ T}
 T{
 Rocky Linux
 T}@T{
-8 8-minimal
+8 8-minimal 9
 T}@T{
 quay.io/rockylinux/rockylinux:8 quay.io/rockylinux/rockylinux:8-minimal
-quay.io/rockylinux/rockylinux:latest
+quay.io/rockylinux/rockylinux:9 quay.io/rockylinux/rockylinux:latest
 T}
 T{
 Scientific Linux
@@ -258,7 +257,7 @@ T}
 T{
 Ubuntu
 T}@T{
-14.04 16.04 18.04 20.04 22.04
+14.04 16.04 18.04 20.04 22.04 22.10
 T}@T{
 docker.io/library/ubuntu:14.04 docker.io/library/ubuntu:16.04
 docker.io/library/ubuntu:18.04 docker.io/library/ubuntu:20.04
diff --git a/man/man1/distrobox-create.1 b/man/man1/distrobox-create.1
index 86c1596..ba36f82 100644
--- a/man/man1/distrobox-create.1
+++ b/man/man1/distrobox-create.1
@@ -55,6 +55,7 @@ usb devices and graphical apps (X11/Wayland), and audio.
 --init/-I       use init system (like systemd) inside the container.
             this will make host\[aq]s processes not visible from within the container.
 --help/-h:      show this message
+--no-entry:             do not generate a container entry in the application list
 --dry-run/-d:       only print the container manager command generated
 --verbose/-v:       show more verbosity
 --version/-V:       show version
diff --git a/man/man1/distrobox.1 b/man/man1/distrobox.1
index 132a745..4a86117 100644
--- a/man/man1/distrobox.1
+++ b/man/man1/distrobox.1
@@ -225,7 +225,6 @@ T}@T{
 T}@T{
 registry.access.redhat.com/ubi7/ubi
 registry.access.redhat.com/ubi7/ubi-init
-registry.access.redhat.com/ubi7/ubi-minimal
 registry.access.redhat.com/ubi8/ubi
 registry.access.redhat.com/ubi8/ubi-init
 registry.access.redhat.com/ubi8/ubi-minimal
@@ -236,10 +235,10 @@ T}
 T{
 Rocky Linux
 T}@T{
-8 8-minimal
+8 8-minimal 9
 T}@T{
 quay.io/rockylinux/rockylinux:8 quay.io/rockylinux/rockylinux:8-minimal
-quay.io/rockylinux/rockylinux:latest
+quay.io/rockylinux/rockylinux:9 quay.io/rockylinux/rockylinux:latest
 T}
 T{
 Scientific Linux
@@ -258,7 +257,7 @@ T}
 T{
 Ubuntu
 T}@T{
-14.04 16.04 18.04 20.04 22.04
+14.04 16.04 18.04 20.04 22.04 22.10
 T}@T{
 docker.io/library/ubuntu:14.04 docker.io/library/ubuntu:16.04
 docker.io/library/ubuntu:18.04 docker.io/library/ubuntu:20.04
@@ -365,6 +364,7 @@ usb devices and graphical apps (X11/Wayland), and audio.
 --init/-I       use init system (like systemd) inside the container.
             this will make host\[aq]s processes not visible from within the container.
 --help/-h:      show this message
+--no-entry:             do not generate a container entry in the application list
 --dry-run/-d:       only print the container manager command generated
 --verbose/-v:       show more verbosity
 --version/-V:       show version
diff --git a/uninstall b/uninstall
index d7c8b31..d7ecba7 100755
--- a/uninstall
+++ b/uninstall
@@ -78,6 +78,7 @@ fi
 dest_path="${prefix}/bin"
 man_dest_path="${prefix}/share/man/man1"
 icon_dest_path="${prefix}/share/icons"
+completion_dest_path="${prefix}/share/bash-completion/completions/"
 
 set -o errexit
 set -o nounset
@@ -96,6 +97,9 @@ done
 for file in "${man_dest_path}/distrobox"*; do
 	[ -e "${file}" ] && rm "${file}"
 done
+for file in "${completion_dest_path}/distrobox"*; do
+	[ -e "${file}" ] && rm "${file}"
+done
 [  -e "${icon_dest_path}"/terminal-distrobox-icon.png ] && rm "${icon_dest_path}"/terminal-distrobox-icon.png
 [  -e "${icon_dest_path}"/distrobox ] && rm -rf "${icon_dest_path}"/distrobox
 



More information about the Neon-commits mailing list