Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package distrobox for openSUSE:Factory checked in at 2022-06-23 10:24:00 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/distrobox (Old) and /work/SRC/openSUSE:Factory/.distrobox.new.1548 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "distrobox" Thu Jun 23 10:24:00 2022 rev:5 rq:984378 version:1.3.1 Changes: -------- --- /work/SRC/openSUSE:Factory/distrobox/distrobox.changes 2022-05-31 15:48:28.312031624 +0200 +++ /work/SRC/openSUSE:Factory/.distrobox.new.1548/distrobox.changes 2022-06-23 10:24:44.083770263 +0200 @@ -1,0 +2,33 @@ +Tue Jun 21 16:49:28 UTC 2022 - Dario Faggioli <[email protected]> + +- Move config file in vendor specific path by default + * Patch added: + 0001-Read-config-in-usr-etc-too.patch +- Update to latest version, 1.3.1 + * all: allow users to specify non_interactive=true/false + * all: improve code readability and formatting, follow happy paths + * create: make it clearer to the user the container creation output + * create: remove check about clone and image name + * docs: Fix typo by @rugk in #308 + * docs: remove WSL2 entry, cannot actively check if works correctly + * enter: automatically create containers during 'distrobox-enter' (if they don't exist!) + * export: add --root to rooful containers + * export: fix DBusActivatable not working + * host-exec docs: 755 -> 644 + * host-exec: change [N/y] to [y/N] + * init: fix apt hooks to make systemd install work + * init: move zypper recommends after the basic packages install, + make OpenSUSE containers creation faster + * install: add --next flag to install latest commit from git + * stop: update misleading comment + * uninstall: interactive rm won't work when executed throught pipe + * docs: update compatibility list + * Confirm support for: + Redhat UBI 9 + Redhat UBI 9-init + Redhat UBI 9-minimal + AlmaLinux 8-minimal + AlmaLinux 9-minimal + AlmaLinux 9 + +------------------------------------------------------------------- Old: ---- distrobox-1.3.0.tar.gz New: ---- 0001-Read-config-in-usr-etc-too.patch distrobox-1.3.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ distrobox.spec ++++++ --- /var/tmp/diff_new_pack.cjc1IY/_old 2022-06-23 10:24:44.419770628 +0200 +++ /var/tmp/diff_new_pack.cjc1IY/_new 2022-06-23 10:24:44.423770632 +0200 @@ -16,13 +16,15 @@ # Name: distrobox -Version: 1.3.0 +Version: 1.3.1 Release: 0 Summary: Use any linux distribution inside your terminal License: GPL-3.0 URL: https://github.com/89luca89/distrobox Source: distrobox-%{version}.tar.gz Source1: distrobox.conf +# Read the config from vendor specific directory (/usr/etc/distrobox) too +Patch1: 0001-Read-config-in-usr-etc-too.patch Requires: %{_bindir}/basename Requires: %{_bindir}/find Requires: %{_bindir}/grep @@ -39,17 +41,22 @@ %prep %setup -q -n distrobox-%{version} +%patch1 -p1 %build %install mkdir -p %{buildroot}%{_bindir} -mkdir -p %{buildroot}%{_sysconfdir}/distrobox mkdir -p %{buildroot}%{_docdir}/%{name} ./install --prefix %{buildroot}/%{_prefix} install -m 0644 docs/*.md %{buildroot}%{_docdir}/%{name} +%if 0%{?suse_version} > 1500 +mkdir -p %{buildroot}%{_distconfdir}/distrobox +install -m 0644 %{SOURCE1} %{buildroot}%{_distconfdir}/distrobox/distrobox.conf +%else +mkdir -p %{buildroot}%{_sysconfdir}/distrobox install -m 0644 %{SOURCE1} %{buildroot}%{_sysconfdir}/distrobox/distrobox.conf - +%endif %files %license COPYING.md %doc %{_docdir}/%{name} @@ -57,7 +64,14 @@ %{_bindir}/%{name}-* %{_mandir}/man1/%{name}.1.gz %{_mandir}/man1/%{name}-*.1.gz +%if 0%{?suse_version} > 1500 +%{_distconfdir}/distrobox +%else %config %{_sysconfdir}/distrobox -%config %{_sysconfdir}/distrobox/distrobox.conf - +%endif +%if 0%{?suse_version} > 1500 +%{_distconfdir}/distrobox/distrobox.conf +%else +%config(noreplace) %{_sysconfdir}/distrobox/distrobox.conf +%endif %changelog ++++++ 0001-Read-config-in-usr-etc-too.patch ++++++ >From fd1243898d3547e890bd11cc69077fb2c57cf2df Mon Sep 17 00:00:00 2001 From: Dario Faggioli <[email protected]> Date: Tue, 21 Jun 2022 18:17:59 +0200 Subject: [PATCH] Read config in /usr/etc too Signed-off-by: Dario Faggioli <[email protected]> --- distrobox-create | 1 + distrobox-enter | 1 + distrobox-list | 1 + distrobox-rm | 1 + distrobox-stop | 1 + docs/README.md | 1 + 6 files changed, 6 insertions(+) diff --git a/distrobox-create b/distrobox-create index b0bb0e9..94fe003 100755 --- a/distrobox-create +++ b/distrobox-create @@ -79,6 +79,7 @@ version="1.3.1" # leave priority to environment variables. config_files=" /usr/share/distrobox/distrobox.conf + /usr/etc/distrobox/distrobox.conf /etc/distrobox/distrobox.conf ${HOME}/.config/distrobox/distrobox.conf ${HOME}/.distroboxrc diff --git a/distrobox-enter b/distrobox-enter index 138446c..2ddf9ac 100755 --- a/distrobox-enter +++ b/distrobox-enter @@ -69,6 +69,7 @@ version="1.3.1" # leave priority to environment variables. config_files=" /usr/share/distrobox/distrobox.conf + /usr/etc/distrobox/distrobox.conf /etc/distrobox/distrobox.conf ${HOME}/.config/distrobox/distrobox.conf ${HOME}/.distroboxrc diff --git a/distrobox-list b/distrobox-list index f62da97..36788df 100755 --- a/distrobox-list +++ b/distrobox-list @@ -42,6 +42,7 @@ container_manager="autodetect" # leave priority to environment variables. config_files=" /usr/share/distrobox/distrobox.conf + /usr/etc/distrobox/distrobox.conf /etc/distrobox/distrobox.conf ${HOME}/.config/distrobox/distrobox.conf ${HOME}/.distroboxrc diff --git a/distrobox-rm b/distrobox-rm index 4d6b0a8..e23a1d7 100755 --- a/distrobox-rm +++ b/distrobox-rm @@ -46,6 +46,7 @@ version="1.3.1" # leave priority to environment variables. config_files=" /usr/share/distrobox/distrobox.conf + /usr/etc/distrobox/distrobox.conf /etc/distrobox/distrobox.conf ${HOME}/.config/distrobox/distrobox.conf ${HOME}/.distroboxrc diff --git a/distrobox-stop b/distrobox-stop index accfce0..f848b7e 100755 --- a/distrobox-stop +++ b/distrobox-stop @@ -45,6 +45,7 @@ version="1.3.1" # leave priority to environment variables. config_files=" /usr/share/distrobox/distrobox.conf + /usr/etc/distrobox/distrobox.conf /etc/distrobox/distrobox.conf ${HOME}/.config/distrobox/distrobox.conf ${HOME}/.distroboxrc diff --git a/docs/README.md b/docs/README.md index df00785..61b2c7a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -243,6 +243,7 @@ Configuration files can be placed in the following paths, from the least importa to the most important: - /usr/share/distrobox/distrobox.conf +- /usr/etc/distrobox/distrobox.conf - /etc/distrobox/distrobox.conf - ${HOME}/.config/distrobox/distrobox.conf - ${HOME}/.distroboxrc -- 2.36.1 ++++++ distrobox-1.3.0.tar.gz -> distrobox-1.3.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/.github/ISSUE_TEMPLATE/bug_report.md new/distrobox-1.3.1/.github/ISSUE_TEMPLATE/bug_report.md --- old/distrobox-1.3.0/.github/ISSUE_TEMPLATE/bug_report.md 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/.github/ISSUE_TEMPLATE/bug_report.md 2022-06-11 18:13:52.000000000 +0200 @@ -21,8 +21,9 @@ Attach also the output of `podman logs` or `docker logs`, possibly with `--latest` flag **Desktop (please complete the following information):** - - OS: [e.g. iOS] - - Version [e.g. 22] + - Are you using podman or docker? + - Which version or podman or docker? + - Which version of distrobox? **Additional context** Add any other context about the problem here. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/.github/workflows/compatibility.yml new/distrobox-1.3.1/.github/workflows/compatibility.yml --- old/distrobox-1.3.0/.github/workflows/compatibility.yml 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/.github/workflows/compatibility.yml 2022-06-11 18:13:52.000000000 +0200 @@ -6,18 +6,26 @@ # Controls when the workflow will run on: # Triggers the workflow on push or pull request events but only for the master branch + push: + branches: [main] pull_request: branches: [main] types: [opened, synchronize, ready_for_review, edited, labeled] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: - + inputs: + run_always: + description: 'Run even if no files are changed' + required: true + type: boolean # Check if we indeed modified distrobox stuff jobs: check_changes: runs-on: ubuntu-latest - if: ${{ contains( github.event.pull_request.labels.*.name, 'CI') }} + if: >- + contains( github.event.pull_request.labels.*.name, 'CI') || + github.ref == 'refs/heads/main' outputs: distrobox_changed: ${{ steps.check_file_changed.outputs.distrobox_changed }} steps: @@ -42,7 +50,9 @@ needs: check_changes outputs: targets: ${{ steps.set-matrix.outputs.targets }} - if: needs.check_changes.outputs.distrobox_changed == 'True' + if: >- + needs.check_changes.outputs.distrobox_changed == 'True' || + github.event.inputs.run_always == 'True' steps: - uses: actions/checkout@v2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/CONTRIBUTING.md new/distrobox-1.3.1/CONTRIBUTING.md --- old/distrobox-1.3.0/CONTRIBUTING.md 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/CONTRIBUTING.md 2022-06-11 18:13:52.000000000 +0200 @@ -10,7 +10,7 @@ ## Creating a Pull Requests -Pull requests are the best way to propose changes to the codebase +Pull requests are the best way to propose changes to the codebase. We actively welcome your pull requests: 1. Fork the repo and create your branch from `main`. @@ -31,16 +31,16 @@ Suggestions are welcome, be sure: -- it is not already being discussed in the [issue tracker](https://github.com/89luca89/distrobox/issues) +- It is not already being discussed in the [issue tracker](https://github.com/89luca89/distrobox/issues) - If it has and is marked as OPEN, go ahead and share your own thoughts about the topic! - If it has and is marked as CLOSED, please read the ticket and depending on - whether the suggestion was accepted or not consider if it is worth opening + whether the suggestion was accepted consider if it is worth opening a new issue or not. - Consider if the suggestion is not too out of scope of the project. -- Mark them with a [Suggestion] in the title +- Mark them with a [Suggestion] in the title. -## Report bugs using Github's [issues](https://github.com/89luca89/distrobox/issues) +## Report bugs using GitHub's [issues](https://github.com/89luca89/distrobox/issues) We use GitHub issues to track public bugs. Report a bug by @@ -77,6 +77,11 @@ done ``` + Here we're using `dash` to verify if there are any non-POSIX code inside the + scripts. Distrobox aims to be POSIX compliant so it's important to use a + strict POSIX compliant shell to verify. `dash` is available in all major distributions' + repositories. + - use `shellcheck` to check for posix compliance and bashisms using: - install from: [HERE](https://github.com/koalaman/shellcheck) following [this](https://github.com/koalaman/shellcheck#installing) @@ -92,8 +97,17 @@ - run `markdownlint $(find . -name '*.md' | grep -vF './.git')` - Legibility of the code is more important than code golfing, try to be expressive in the code +- Try to **follow the happy path**: + - [This guide](https://maelvls.dev/go-happy-line-of-sight/) is for golang, + but it's a very insightful source to follow - Error checking is important! Ensure to LBYL (Look Before You Leap), check for variables and for code success exit codes +- If a command or function can fail, ensure you check the outcome: + - `if ! my_function; then ...` + this is important to handle errors gracefully and to potentially warn users + of what's happening +- Use snake_case for variable naming. Keep variable names lowercase if they are + not an environment variable - Don't hesitate to comment your code! We're placing high importance on this to maintain the code readable and understandeable - Update documentation to reflect your changes - Manual pages can be found in @@ -113,4 +127,4 @@ ## References This document was adapted from the open-source contribution guidelines -for [Facebook's Draft](https://github.com/facebook/draft-js/blob/a9316a723f9e918afde44dea68b5f9f39b7d9b00/CONTRIBUTING.md) +for [Facebook's Draft](https://github.com/facebook/draft-js/blob/a9316a723f9e918afde44dea68b5f9f39b7d9b00/CONTRIBUTING.md). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/distrobox new/distrobox-1.3.1/distrobox --- old/distrobox-1.3.0/distrobox 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/distrobox 2022-06-11 18:13:52.000000000 +0200 @@ -24,7 +24,7 @@ trap '[ "$?" -ne 0 ] && printf "\nAn error occurred\n"' EXIT -version="1.3.0" +version="1.3.1" # Print usage to stdout. # Arguments: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/distrobox-create new/distrobox-1.3.1/distrobox-create --- old/distrobox-1.3.0/distrobox-create 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/distrobox-create 2022-06-11 18:13:52.000000000 +0200 @@ -72,7 +72,7 @@ init=0 rootful=0 verbose=0 -version="1.3.0" +version="1.3.1" # Source configuration files, this is done in an hierarchy so local files have # priority over system defaults @@ -87,6 +87,10 @@ # shellcheck disable=SC1090 [ -e "${config_file}" ] && . "${config_file}" done +# Fixup non_interactive=[true|false], in case we find it in the config file(s) +[ "${non_interactive}" = "true" ] && non_interactive=1 +[ "${non_interactive}" = "false" ] && non_interactive=0 + [ -n "${DBX_CONTAINER_ALWAYS_PULL}" ] && container_always_pull="${DBX_CONTAINER_ALWAYS_PULL}" [ -n "${DBX_CONTAINER_CUSTOM_HOME}" ] && container_user_custom_home="${DBX_CONTAINER_CUSTOM_HOME}" [ -n "${DBX_CONTAINER_IMAGE}" ] && container_image="${DBX_CONTAINER_IMAGE}" @@ -268,12 +272,6 @@ set -o xtrace fi -# We cannot have both a clone AND an image name. -if [ -n "${container_clone}" ] && [ -n "${container_image}" ]; then - printf >&2 "Error: Invalid arguments, choose only one between clone or image name.\n" - exit 2 -fi - # If no clone option and no container image, let's choose a default image to use. # Fedora toolbox is a sensitive default if [ -z "${container_clone}" ] && [ -z "${container_image}" ]; then @@ -308,8 +306,6 @@ container_manager="podman" elif command -v docker > /dev/null; then container_manager="docker" - else - container_manager="not_found" fi ;; podman) @@ -321,22 +317,19 @@ *) printf >&2 "Invalid input %s.\n" "${container_manager}" printf >&2 "The available choices are: 'autodetect', 'podman', 'docker'\n" - container_manager="not_found" ;; esac # Be sure we have a container manager to work with. -if ! command -v "${container_manager}" > /dev/null; then +if ! command -v "${container_manager}" > /dev/null && [ "${dryrun}" -eq 0 ]; then # Error: we need at least one between docker or podman. - if [ "${dryrun}" -eq 0 ]; then - printf >&2 "Missing dependency: we need a container manager.\n" - printf >&2 "Please install one of podman or docker.\n" - printf >&2 "You can follow the documentation on:\n" - printf >&2 "\tman distrobox-compatibility\n" - printf >&2 "or:\n" - printf >&2 "\thttps://github.com/89luca89/distrobox/blob/main/docs/compatibility.md\n" - exit 127 - fi + printf >&2 "Missing dependency: we need a container manager.\n" + printf >&2 "Please install one of podman or docker.\n" + printf >&2 "You can follow the documentation on:\n" + printf >&2 "\tman distrobox-compatibility\n" + printf >&2 "or:\n" + printf >&2 "\thttps://github.com/89luca89/distrobox/blob/main/docs/compatibility.md\n" + exit 127 fi # add verbose if -v is specified if [ "${verbose}" -ne 0 ]; then @@ -420,6 +413,8 @@ # This grants access to external devices like usb webcams, disks and so on. # # Mount also the distrobox-init utility as the container entrypoint. + # Also mount in the container the distrobox-export and distrobox-host-exec + # utilities. result_command="${result_command} --env \"SHELL=${SHELL:-"/bin/bash"}\" --env \"HOME=${container_user_home}\" @@ -451,10 +446,8 @@ # This works around this using an unnamed volume so that this path will be # mounted with a normal non-overlay FS, allowing ACLs and preventing errors. # - # This work around works in conjunction with: - # - distrobox-init:488-489 - # - distrobox-init:463-464 - # - distrobox-init:498-503 + # This work around works in conjunction with distrobox-init's package manager + # setups. # So that we can use pre/post hooks for package managers to present to the # systemd install script a blank path to work with, and mount the host's # journal path afterwards. @@ -521,11 +514,6 @@ # These flags are not supported by docker, so we use them only if our # container manager is podman. if [ -z "${container_manager#*podman*}" ]; then - # Use keep-id only if going rootless. - if [ "${rootful}" -eq 0 ]; then - result_command="${result_command} - --userns keep-id" - fi result_command="${result_command} --ulimit host --annotation run.oci.keep_original_groups=1 @@ -534,6 +522,11 @@ result_command="${result_command} --systemd=always" fi + # Use keep-id only if going rootless. + if [ "${rootful}" -eq 0 ]; then + result_command="${result_command} + --userns keep-id" + fi fi # Add additional flags @@ -627,15 +620,18 @@ fi # Generate the create command and run it +printf "Creating '%s' using image %s\t" "${container_name}" "${container_image}" cmd="$(generate_command)" # Eval the generated command. If successful display an helpful message. # shellcheck disable=SC2086 -if eval ${cmd}; then - printf "Distrobox '%s' successfully created.\n" "${container_name}" +if eval ${cmd} > /dev/null; then + printf >&2 "\033[32m [ OK ]\n\033[0mDistrobox '%s' successfully created.\n" "${container_name}" printf "To enter, run:\n\n" if [ "${rootful}" -ne 0 ]; then - printf "distrobox-enter --root %s\n\n" "${container_name}" + printf "distrobox enter --root %s\n\n" "${container_name}" else - printf "distrobox-enter %s\n\n" "${container_name}" + printf "distrobox enter %s\n\n" "${container_name}" fi + exit 0 fi +printf >&2 "\033[31m [ ERR ]\n\033[0m" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/distrobox-enter new/distrobox-1.3.1/distrobox-enter --- old/distrobox-1.3.0/distrobox-enter 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/distrobox-enter 2022-06-11 18:13:52.000000000 +0200 @@ -45,9 +45,12 @@ # For example in hosts that do not follow FHS, like NixOS or for shells in custom # exotic paths. container_shell="$(basename "${container_shell}") -l" +container_image="" +container_image_default="registry.fedoraproject.org/fedora-toolbox:36" container_manager="autodetect" container_name="my-distrobox" container_manager_additional_flags="" +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 @@ -59,7 +62,7 @@ rootful=0 skip_workdir=0 verbose=0 -version="1.3.0" +version="1.3.1" # Source configuration files, this is done in an hierarchy so local files have # priority over system defaults @@ -74,9 +77,15 @@ # shellcheck disable=SC1090 [ -e "${config_file}" ] && . "${config_file}" done +# Fixup non_interactive=[true|false], in case we find it in the config file(s) +[ "${non_interactive}" = "true" ] && non_interactive=1 +[ "${non_interactive}" = "false" ] && non_interactive=0 + +[ -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_SKIP_WORKDIR}" ] && skip_workdir="${DBX_SKIP_WORKDIR}" +[ -n "${DBX_NON_INTERACTIVE}" ] && non_interactive="${DBX_NON_INTERACTIVE}" # Print usage to stdout. # Arguments: @@ -157,6 +166,10 @@ shift fi ;; + -Y | --yes) + non_interactive=1 + shift + ;; -e | --exec | --) shift container_command=$* @@ -195,8 +208,6 @@ container_manager="podman" elif command -v docker > /dev/null; then container_manager="docker" - else - container_manager="not_found" fi ;; podman) @@ -208,22 +219,19 @@ *) printf >&2 "Invalid input %s.\n" "${container_manager}" printf >&2 "The available choices are: 'autodetect', 'podman', 'docker'\n" - container_manager="not_found" ;; esac # Be sure we have a container manager to work with. -if ! command -v "${container_manager}" > /dev/null; then +if ! command -v "${container_manager}" > /dev/null && [ "${dryrun}" -eq 0 ]; then # Error: we need at least one between docker or podman. - if [ "${dryrun}" -eq 0 ]; then - printf >&2 "Missing dependency: we need a container manager.\n" - printf >&2 "Please install one of podman or docker.\n" - printf >&2 "You can follow the documentation on:\n" - printf >&2 "\tman distrobox-compatibility\n" - printf >&2 "or:\n" - printf >&2 "\thttps://github.com/89luca89/distrobox/blob/main/docs/compatibility.md\n" - exit 127 - fi + printf >&2 "Missing dependency: we need a container manager.\n" + printf >&2 "Please install one of podman or docker.\n" + printf >&2 "You can follow the documentation on:\n" + printf >&2 "\tman distrobox-compatibility\n" + printf >&2 "or:\n" + printf >&2 "\thttps://github.com/89luca89/distrobox/blob/main/docs/compatibility.md\n" + exit 127 fi # Small performance optimization, using podman socket shaves # about half the time to access informations. @@ -315,10 +323,7 @@ fi done # Ensure the $PATH entries from the host are appended as well - for standard_path in $( - IFS=: - for p in ${PATH}; do echo "${p}"; done - ); do + for standard_path in $(echo "${PATH}" | tr ':' ' '); do if [ -n "${container_paths##*:"${standard_path}"*}" ]; then container_paths="${container_paths}:${standard_path}" fi @@ -372,23 +377,53 @@ exit 0 fi -# Inspect the container we're working with. +# Now inspect the container we're working with. container_status="unknown" eval "$(${container_manager} inspect --type container "${container_name}" --format \ 'container_status={{.State.Status}}; {{range .Config.Env}}{{if slice . 0 5 | eq "HOME="}}container_home={{slice . 5 | printf "%q"}};{{end}}{{end}} {{range .Config.Env}}{{if slice . 0 6 | eq "SHELL="}}container_shell={{slice . 6 | printf "%q"}};{{end}}{{end}} {{range .Config.Env}}{{if slice . 0 5 | eq "PATH="}}container_path={{slice . 5 | printf "%q"}}{{end}}{{end}}')" -container_exists="$?" # Set SHELL as a login shell container_shell="$(basename "${container_shell}") -l" -# Does the container exists? check if inspect reported errors -if [ "${container_exists}" -gt 0 ]; then + +# Check if the container is even there +if [ "${container_status}" = "unknown" ]; then # If not, prompt to create it first - printf >&2 "Cannot find container %s, does it exist?\n" "${container_name}" - printf >&2 "\nTry running first:\n" - printf >&2 "\tdistrobox-create <name-of-container> --image <remote>/<docker>:<tag>\n" - exit 1 + printf >&2 "Cannot find container %s\n" "${container_name}" + if [ -z "${container_image}" ]; then + container_image="${container_image_default}" + fi + # If we're not-interactive, just don't ask questions + if [ "${non_interactive}" -eq 1 ]; then + response="yes" + else + printf >&2 "Create it now, out of image %s? [Y/n]: " "${container_image}" + read -r response + response="${response:-"Y"}" + fi + + # Accept only y,Y,Yes,yes,n,N,No,no. + case "${response}" in + y | Y | Yes | yes | YES) + # Ok, let's create the container with just 'distrobox create $container_name + printf >&2 "Creating the container with command:\n" + printf >&2 " distrobox create -i %s %s\n" "${container_image}" "${container_name}" + if [ "${dryrun}" -ne 1 ]; then + "$(dirname "${0}")"/distrobox-create -i "${container_image}" -n "${container_name}" + fi + ;; + n | N | No | no | NO) + printf >&2 "Ok. For creating it, run this command:\n" + printf >&2 "\tdistrobox create <name-of-container> --image <remote>/<docker>:<tag>\n" + exit 0 + ;; + *) # Default case: If no more options then break out of the loop. + printf >&2 "Invalid input.\n" + printf >&2 "The available choices are: y,Y,Yes,yes,YES or n,N,No,no,NO.\nExiting.\n" + exit 1 + ;; + esac fi # If the container is not already running, we need to start if first diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/distrobox-export new/distrobox-1.3.1/distrobox-export --- old/distrobox-1.3.0/distrobox-export 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/distrobox-export 2022-06-11 18:13:52.000000000 +0200 @@ -41,8 +41,9 @@ # with custom --home directory host_home="${DISTROBOX_HOST_HOME:-"${HOME}"}" is_sudo="" +rootful="" verbose=0 -version="1.3.0" +version="1.3.1" # We depend on some commands, let's be sure we have them base_dependencies="basename grep sed find" @@ -171,12 +172,17 @@ set -o xtrace fi -# Check we're running inside a container and not on the host +# Check we're running inside a container and not on the host. if [ ! -f /run/.containerenv ] && [ ! -f /.dockerenv ]; then printf >&2 "You must run %s inside a container!\n" " $(basename "$0")" exit 126 fi +# Check if we're in a rootful or rootless container. +if grep -q "rootless=0" /run/.containerenv 2> /dev/null; then + rootful="--root" +fi + # We're working with HOME, so we must run as USER, not as root. if [ "$(id -u)" -eq 0 ]; then printf >&2 "You must not run %s as root!\n" " $(basename "$0")" @@ -211,7 +217,7 @@ # We can assume this as we set it the same as container name during creation. container_name=$(uname -n | cut -d'.' -f1) # Prefix to add to an existing command to work throught the container -container_command_prefix="${DISTROBOX_ENTER_PATH:-"distrobox-enter"} -n ${container_name} -- '${is_sudo} " +container_command_prefix="${DISTROBOX_ENTER_PATH:-"distrobox-enter"} ${rootful} -n ${container_name} -- '${is_sudo} " if [ -z "${exported_app_label}" ]; then exported_app_label=" (on ${container_name})" fi @@ -227,7 +233,7 @@ # distrobox_binary # name: ${container_name} if [ ! -f /run/.containerenv ] && [ ! -f /.dockerenv ]; then - ${DISTROBOX_ENTER_PATH:-"distrobox-enter"} -n ${container_name} -- \ + ${DISTROBOX_ENTER_PATH:-"distrobox-enter"} ${rootful} -n ${container_name} -- \ ${is_sudo} ${exported_bin} ${extra_flags} \$@ else ${exported_bin} \$@ @@ -255,22 +261,14 @@ dest_file="${dest_path}/$(basename "${exported_bin}")" # If we're deleting it, just do it and exit - if [ "${exported_delete}" -ne 0 ]; then - if [ ! -f "${dest_file}" ]; then - printf >&2 "Error: cannot find %s in %s.\nWas it exported?.\n" \ - "$(basename "${exported_bin}")" "${dest_path}" - return 1 - fi - if grep -q "distrobox_binary" "${dest_file}"; then - if rm -f "${dest_file}"; then - printf "%s from %s removed successfully from %s.\nOK!\n" \ - "${exported_bin}" "${container_name}" "${dest_path}" - return 0 - fi - else - printf >&2 "Error: %s exists but it's not a distrobox exported file.\n" "${dest_file}" - printf >&2 "Error: cannot delete: %s.\n" "${dest_file}" - return 2 + if [ "${exported_delete}" -ne 0 ] && + # ensure it's a distrobox exported binary + grep -q "distrobox_binary" "${dest_file}"; then + + if rm -f "${dest_file}"; then + printf "%s from %s removed successfully from %s.\nOK!\n" \ + "${exported_bin}" "${container_name}" "${dest_path}" + return 0 fi fi @@ -288,7 +286,6 @@ return 0 fi # Unknown error. - printf >&2 "A problem occurred.\n" return 3 } @@ -324,25 +321,28 @@ icon_files="" for desktop_file in ${desktop_files}; do icon_name="$(grep Icon= "${desktop_file}" | cut -d'=' -f2-)" + + # In case it's an hard path, conserve it and continue if [ -e "${icon_name}" ]; then icon_files="${icon_files} ${icon_name}" - else - icon_files="${icon_files} $(find \ - /usr/share/icons \ - /usr/share/pixmaps \ - /var/lib/flatpak/exports/share/icons -iname "*${icon_name}*" 2> /dev/null || :)" + continue fi + + # If it's not an hard path, find all files in the canonical paths. + icon_files="${icon_files} $(find \ + /usr/share/icons \ + /usr/share/pixmaps \ + /var/lib/flatpak/exports/share/icons -iname "*${icon_name}*" 2> /dev/null || :)" done # create applications dir if not existing - if [ ! -d "/run/host${host_home}/.local/share/applications" ]; then - mkdir -p "/run/host${host_home}/.local/share/applications" - fi + mkdir -p "/run/host${host_home}/.local/share/applications" # copy icons in home directory icon_file_absolute_path="" for icon_file in ${icon_files}; do + # replace canonical paths with equivalent paths in HOME icon_home_directory="$(dirname "${icon_file}" | sed "s|/usr/share/|\/run\/host\/${host_home}/.local/share/|g" | sed "s|/var/lib/flatpak/exports/share|\/run\/host\/${host_home}/.local/share/|g" | @@ -358,56 +358,60 @@ if [ "${exported_delete}" -ne 0 ]; then # we need to remove, not export rm -rf "${icon_home_directory:?}"/"$(basename "${icon_file:?}")" - else - # we wanto to export the application's icons - mkdir -p "${icon_home_directory}" - cp -r "${icon_file}" "${icon_home_directory}" + continue fi + + # we wanto to export the application's icons + mkdir -p "${icon_home_directory}" + cp -r "${icon_file}" "${icon_home_directory}" done # create desktop files for the distrobox for desktop_file in ${desktop_files}; do desktop_original_file="$(basename "${desktop_file}")" desktop_home_file="${container_name}-$(basename "${desktop_file}")" + # check if we're exporting or deleting if [ "${exported_delete}" -ne 0 ]; then - if [ ! -f "/run/host${host_home}/.local/share/applications/${desktop_home_file}" ]; then - printf >&2 "Error: trying to remove a non-exported application.\n" - return 1 - fi rm -f "/run/host${host_home}/.local/share/applications/${desktop_original_file}" rm -f "/run/host${host_home}/.local/share/applications/${desktop_home_file}" - else - # Add commmand_prefix - # Add extra flags - # Add closing quote - # If a TryExec is present, we have to fake it as it will not work - # throught the container separation - sed "s|^Exec=|Exec=${container_command_prefix} |g" "${desktop_file}" | - sed "s|\(%.*\)|${extra_flags} \1|g" | - sed "s|^Exec=.*|&'|g" | - sed "s|^TryExec=.*|TryExec=true|g" | - sed "s|Name.*|& ${exported_app_label}|g" \ - > "/run/host${host_home}/.local/share/applications/${desktop_home_file}" - # In case of an icon in a non canonical path, we need to replace the path - # in the desktop file. - if [ -n "${icon_file_absolute_path}" ]; then - sed -i "s|Icon=.*|Icon=${icon_file_absolute_path}|g" \ - "/run/host${host_home}/.local/share/applications/${desktop_home_file}" - else - # In case of an icon in a canonical path, but specified as an absolute - # we need to replace the path in the desktop file. - sed -i "s|/usr/share/|\/run\/host${host_home}/.local/share/|g" \ - "/run/host${host_home}/.local/share/applications/${desktop_home_file}" - sed -i "s|pixmaps|icons|g" \ - "/run/host${host_home}/.local/share/applications/${desktop_home_file}" - fi - if ! grep -q "StartupWMClass" "/run/host${host_home}/.local/share/applications/${desktop_home_file}"; then - printf "StartupWMClass=%s\n" "${exported_app}" >> \ - "/run/host${host_home}/.local/share/applications/${desktop_home_file}" - fi - # in the end we add the final quote we've opened in the "container_command_prefix" + # we're done, go to next + continue + fi + + # Add commmand_prefix + # Add extra flags + # Add closing quote + # If a TryExec is present, we have to fake it as it will not work + # throught the container separation + sed "s|^Exec=|Exec=${container_command_prefix} |g" "${desktop_file}" | + sed "s|\(%.*\)|${extra_flags} \1|g" | + sed "s|^Exec=.*|&'|g" | + sed "/^TryExec=.*/d" | + sed "/^DBusActivatable=true/d" | + sed "s|Name.*|& ${exported_app_label}|g" \ + > "/run/host${host_home}/.local/share/applications/${desktop_home_file}" + # in the end we add the final quote we've opened in the "container_command_prefix" + + if ! grep -q "StartupWMClass" "/run/host${host_home}/.local/share/applications/${desktop_home_file}"; then + printf "StartupWMClass=%s\n" "${exported_app}" >> \ + "/run/host${host_home}/.local/share/applications/${desktop_home_file}" + fi + # In case of an icon in a non canonical path, we need to replace the path + # in the desktop file. + if [ -n "${icon_file_absolute_path}" ]; then + sed -i "s|Icon=.*|Icon=${icon_file_absolute_path}|g" \ + "/run/host${host_home}/.local/share/applications/${desktop_home_file}" + # we're done, go to next + continue fi + + # In case of an icon in a canonical path, but specified as an absolute + # we need to replace the path in the desktop file. + sed -i "s|Icon=/usr/share/|Icon=/run/host${host_home}/.local/share/|g" \ + "/run/host${host_home}/.local/share/applications/${desktop_home_file}" + sed -i "s|pixmaps|icons|g" \ + "/run/host${host_home}/.local/share/applications/${desktop_home_file}" done if [ "${exported_delete}" -ne 0 ]; then @@ -436,6 +440,7 @@ /etc/systemd/system/ /lib/systemd/system/ /usr/lib/systemd/system/ \ "${host_home}"/.config/systemd/user/ \ -type f -name "${exported_service}*" 2> /dev/null | tail -1) + # Check that we found some service files first. if [ -z "${service_file}" ]; then printf >&2 "Error: cannot find any service file for %s.\n" "${exported_service}" @@ -449,14 +454,11 @@ # If we're deleting it, just do it and exit if [ "${exported_delete}" -ne 0 ]; then - if [ ! -f "${exported_service_fullpath}" ]; then - printf >&2 "Error: cannot find service %s.\nWas it exported?.\n" "${exported_service_file}" - return 1 - fi rm -f "${exported_service_fullpath}" printf "Service %s successfully removed.\nOK!\n" "${exported_service_file}" return 0 fi + # Check if it is already exported if [ -f "${exported_service_fullpath}" ] && grep -q "${container_command_prefix}" "${exported_service_fullpath}"; then @@ -470,14 +472,13 @@ # Create temp file with random name temp_file="$(mktemp -u)" + mkdir -p "/run/host${host_home}/.config/systemd/user/" + # Replace all Exec occurrencies - if [ ! -d "/run/host${host_home}/.config/systemd/user/" ]; then - mkdir -p "/run/host${host_home}/.config/systemd/user/" - fi - cat "${service_file}" > "${exported_service_fullpath}" 2> /dev/null + cp -f "${service_file}" "${exported_service_fullpath}" for exec_cmd in ExecStart ExecStartPre ExecStartPost ExecReload ExecStop ExecStopPost; do # Save to temp file - cat "${exported_service_fullpath}" > "${temp_file}" 2> /dev/null + cp -f "${exported_service_fullpath}" "${temp_file}" # Add prefix only if not present if ! grep "${exec_cmd}" "${temp_file}" | grep -q "${container_command_prefix}"; then # Add commmand_prefix diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/distrobox-host-exec new/distrobox-1.3.1/distrobox-host-exec --- old/distrobox-1.3.0/distrobox-host-exec 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/distrobox-host-exec 2022-06-11 18:13:52.000000000 +0200 @@ -24,7 +24,7 @@ distrobox_host_exec_default_command="/bin/sh" verbose=0 -version="1.3.0" +version="1.3.1" # Print usage to stdout. # Arguments: @@ -108,7 +108,7 @@ printf "We recommend installing it and then trying distrobox-host-exec again.\n\n" printf "Alternatively, we can try an different (chroot-based) approach, but please\n" printf "be aware that it has severe limitations and some commands will not work!\n\n" - printf "Do you really want to continue without installing flatpak-spawn? [N/y] " + printf "Do you really want to continue without installing flatpak-spawn? [y/N] " read -r response response=${response:-"N"} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/distrobox-init new/distrobox-1.3.1/distrobox-init --- old/distrobox-1.3.0/distrobox-init 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/distrobox-init 2022-06-11 18:13:52.000000000 +0200 @@ -31,7 +31,7 @@ init_hook="" pre_init_hook="" verbose=0 -version="1.3.0" +version="1.3.1" # Print usage to stdout. # Arguments: # None @@ -355,7 +355,6 @@ microdnf install -y \ "${shell_pkg}" \ bc \ - curl \ diffutils \ findutils \ less \ @@ -489,20 +488,6 @@ vte-profile elif command -v zypper; then - # 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). - # So, let's enable them. For the same reason, we make sure we install - # docs. - sed -i 's/.*solver.onlyRequires.*/solver.onlyRequires = false/g' /etc/zypp/zypp.conf - sed -i 's/.*rpm.install.excludedocs.*/rpm.install.excludedocs = no/g' /etc/zypp/zypp.conf - # With recommended packages, something might try to pull in - # parallel-printer-support which can't be installed in rootless podman. - # Since we very much likely never need it, just lock it - zypper al parallel-printer-support - # 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 - # that it is set up correctly for the user. if ! zypper install -y "${shell_pkg}"; then SHELL="/bin/bash" shell_pkg="bash" @@ -523,7 +508,20 @@ systemd \ wget \ util-linux - + # 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). + # So, let's enable them. For the same reason, we make sure we install + # docs. + sed -i 's/.*solver.onlyRequires.*/solver.onlyRequires = false/g' /etc/zypp/zypp.conf + sed -i 's/.*rpm.install.excludedocs.*/rpm.install.excludedocs = no/g' /etc/zypp/zypp.conf + # With recommended packages, something might try to pull in + # parallel-printer-support which can't be installed in rootless podman. + # Since we very much likely never need it, just lock it + zypper al parallel-printer-support + # 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 + # that it is set up correctly for the user. else printf "Error: could not find a supported package manager.\n" printf "Error: could not set up base dependencies.\n" @@ -569,6 +567,15 @@ fi done +HOST_MOUNTS_RO_INIT=" + /run/systemd/journal + /run/systemd/resolve + /run/systemd/seats + /run/systemd/sessions + /run/systemd/users + /var/lib/systemd/coredump + /var/log/journal" + # On some ostree systems, home is in /var/home, but most of the software expects # it to be in /home. In the hosts systems this is fixed by using a symlink. # Do something similar here with a bind mount. @@ -589,6 +596,9 @@ -prune -o -name 'system_bus_socket' \ -prune -o -type s -print \ 2> /dev/null || :)" +# we're excluding system dbus socket and nscd socket here. Including them will +# create many problems with package managers thinking they have access to +# system dbus or user auth cache misused. for host_socket in ${host_sockets}; do container_socket="$(printf "%s" "${host_socket}" | sed 's|/run/host||g')" # Check if the socket already exists or the symlink already esists @@ -665,10 +675,14 @@ # Also we put a hook to clear some critical paths that do not play well # with read only filesystems, like systemd. if [ -d "/etc/apt/apt.conf.d/" ]; then - cat << EOF > /etc/apt/apt.conf.d/00_distrobox -DPkg::Pre-Invoke {"if mountpoint /var/log/journal; then umount /var/log/journal; fi";}; -DPkg::Post-Invoke {"if [ -e /run/host/var/log/journal ]; then mount --rbind -o ro /run/host/var/log/journal /var/log/journal; fi";}; -EOF + + printf "" > /etc/apt/apt.conf.d/00_distrobox + for init_mount in ${HOST_MOUNTS_RO_INIT}; do + printf 'DPkg::Pre-Invoke {"if mountpoint %s; then umount %s; fi";};\n' \ + "${init_mount}" "${init_mount}" >> /etc/apt/apt.conf.d/00_distrobox + printf 'DPkg::Post-Invoke {"if [ -e /run/host/%s ]; then mount --rbind /run/host/%s %s; fi";};\n' \ + "${init_mount}" "${init_mount}" "${init_mount}" >> /etc/apt/apt.conf.d/00_distrobox + done fi fi @@ -830,6 +844,8 @@ printf "container_setup_done\n" +# If init support is disabled, let's do our routine to keep the container +# up, running and in sync with host. if [ "${init}" -eq 0 ]; then # Keepalive loop HOST_WATCH=" @@ -858,23 +874,16 @@ done sleep 15 done -else - # some of this directories are needed by - # the init system. If they're mounts, there might - # be problems. Let's unmount them. - printf "distrobox: Setting up init system...\n" - HOST_MOUNTS_RO_INIT=" - /run/systemd/journal - /run/systemd/seats - /run/systemd/sessions - /run/systemd/system - /run/systemd/users - /var/lib/systemd/coredump - /var/log/journal" - for host_mount in ${HOST_MOUNTS_RO_INIT}; do - if mountpoint "${host_mount}"; then umount "${host_mount}"; fi - done - # Now we can launch init - printf "distrobox: Firing up init system...\n" - exec /sbin/init fi + +# If we're here, the init support has been enabled. +printf "distrobox: Setting up init system...\n" +# some of this directories are needed by +# the init system. If they're mounts, there might +# be problems. Let's unmount them. +for host_mount in ${HOST_MOUNTS_RO_INIT}; do + if mountpoint "${host_mount}"; then umount "${host_mount}"; fi +done +# Now we can launch init +printf "distrobox: Firing up init system...\n" +exec /sbin/init diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/distrobox-list new/distrobox-1.3.1/distrobox-list --- old/distrobox-1.3.0/distrobox-list 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/distrobox-list 2022-06-11 18:13:52.000000000 +0200 @@ -34,7 +34,7 @@ rootful=0 size=0 verbose=0 -version="1.3.0" +version="1.3.1" container_manager="autodetect" # Source configuration files, this is done in an hierarchy so local files have @@ -128,8 +128,6 @@ container_manager="podman" elif command -v docker > /dev/null; then container_manager="docker" - else - container_manager="not_found" fi ;; podman) @@ -141,7 +139,6 @@ *) printf >&2 "Invalid input %s.\n" "${container_manager}" printf >&2 "The available choices are: 'autodetect', 'podman', 'docker'\n" - container_manager="not_found" ;; esac @@ -182,7 +179,6 @@ ' # Header of the output for container in ${container_list}; do - # Check if the current container has a custom mount point for distrobox. if [ -z "${container##*distrobox*}" ]; then @@ -193,14 +189,15 @@ container_status="$(printf "%s" "${container}" | cut -d'|' -f4)" container_size="$(printf "%s" "${container}" | cut -d'|' -f6)" - # If the container is Up and Running, print it in green + # If the container is Up and Running, print it in green and go next. if [ -z "${container_status##*Up*}" ] || [ -z "${container_status##*running*}" ]; then printf "\033[32m %-12s | %-25s | %-30s | %-40s | %-30s\n\033[0m" \ "${container_id}" "${container_name}" "${container_status}" "${container_image}" "${container_size}" - # Else, print it in yellow - else - printf "\033[33m %-12s | %-25s | %-30s | %-40s | %-30s\n\033[0m" \ - "${container_id}" "${container_name}" "${container_status}" "${container_image}" "${container_size}" + continue fi + # print it in yellow if not Running + printf "\033[33m %-12s | %-25s | %-30s | %-40s | %-30s\n\033[0m" \ + "${container_id}" "${container_name}" "${container_status}" "${container_image}" "${container_size}" + fi done diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/distrobox-rm new/distrobox-1.3.1/distrobox-rm --- old/distrobox-1.3.0/distrobox-rm 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/distrobox-rm 2022-06-11 18:13:52.000000000 +0200 @@ -39,7 +39,7 @@ non_interactive=0 rootful=0 verbose=0 -version="1.3.0" +version="1.3.1" # Source configuration files, this is done in an hierarchy so local files have # priority over system defaults @@ -54,6 +54,10 @@ # shellcheck disable=SC1090 [ -e "${config_file}" ] && . "${config_file}" done +# Fixup non_interactive=[true|false], in case we find it in the config file(s) +[ "${non_interactive}" = "true" ] && non_interactive=1 +[ "${non_interactive}" = "false" ] && non_interactive=0 + [ -n "${DBX_CONTAINER_MANAGER}" ] && container_manager="${DBX_CONTAINER_MANAGER}" [ -n "${DBX_CONTAINER_NAME}" ] && container_name="${DBX_CONTAINER_NAME}" [ -n "${DBX_NON_INTERACTIVE}" ] && non_interactive="${DBX_NON_INTERACTIVE}" @@ -156,8 +160,6 @@ container_manager="podman" elif command -v docker > /dev/null; then container_manager="docker" - else - container_manager="not_found" fi ;; podman) @@ -169,7 +171,6 @@ *) printf >&2 "Invalid input %s.\n" "${container_manager}" printf >&2 "The available choices are: 'autodetect', 'podman', 'docker'\n" - container_manager="not_found" ;; esac diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/distrobox-stop new/distrobox-1.3.1/distrobox-stop --- old/distrobox-1.3.0/distrobox-stop 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/distrobox-stop 2022-06-11 18:13:52.000000000 +0200 @@ -38,7 +38,7 @@ non_interactive=0 rootful=0 verbose=0 -version="1.3.0" +version="1.3.1" # Source configuration files, this is done in an hierarchy so local files have # priority over system defaults @@ -53,6 +53,10 @@ # shellcheck disable=SC1090 [ -e "${config_file}" ] && . "${config_file}" done +# Fixup non_interactive=[true|false], in case we find it in the config file(s) +[ "${non_interactive}" = "true" ] && non_interactive=1 +[ "${non_interactive}" = "false" ] && non_interactive=0 + [ -n "${DBX_CONTAINER_MANAGER}" ] && container_manager="${DBX_CONTAINER_MANAGER}" [ -n "${DBX_CONTAINER_NAME}" ] && container_name="${DBX_CONTAINER_NAME}" [ -n "${DBX_NON_INTERACTIVE}" ] && non_interactive="${DBX_NON_INTERACTIVE}" @@ -151,8 +155,6 @@ container_manager="podman" elif command -v docker > /dev/null; then container_manager="docker" - else - container_manager="not_found" fi ;; podman) @@ -164,7 +166,6 @@ *) printf >&2 "Invalid input %s.\n" "${container_manager}" printf >&2 "The available choices are: 'autodetect', 'podman', 'docker'\n" - container_manager="not_found" ;; esac @@ -198,7 +199,7 @@ fi if [ "${non_interactive}" -eq 0 ]; then - # Prompt to download it. + # Prompt to stop the container. printf "Do you really want to stop %s? [Y/n]: " "${container_name}" read -r response response="${response:-"Y"}" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/docs/README.md new/distrobox-1.3.1/docs/README.md --- old/distrobox-1.3.0/docs/README.md 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/docs/README.md 2022-06-11 18:13:52.000000000 +0200 @@ -295,6 +295,18 @@ curl -s https://raw.githubusercontent.com/89luca89/distrobox/main/install | sh -s -- --prefix ~/.local ``` +If you want to install the last development version, directly from last commit on git, you can use: + +```sh +curl -s https://raw.githubusercontent.com/89luca89/distrobox/main/install | sudo sh -s -- --next +``` + +or: + +```sh +curl -s https://raw.githubusercontent.com/89luca89/distrobox/main/install | sh -s -- --next --prefix ~/.local +``` + Alternatively you can clone the project using `git clone` or using the latest release [HERE](https://github.com/89luca89/distrobox/releases/latest). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/docs/compatibility.md new/distrobox-1.3.1/docs/compatibility.md --- old/distrobox-1.3.0/docs/compatibility.md 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/docs/compatibility.md 2022-06-11 18:13:52.000000000 +0200 @@ -58,7 +58,6 @@ | 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). | | Void Linux | glibc | Systemd service export will not work. | | NixOS | 21.11 | Currently you must have your default shell set to Bash, if it is not, make sure you edit your configuration.nix so that it is. <br> Also make sure to mind your executable paths. Sometimes a container will not have nix paths, and sometimes it will not have its own paths. <br> Distrobox is available in Nixpkg collection (thanks [AtilaSaraiva](https://github.com/AtilaSaraiva)!)< <br> To setup Docker, look [HERE](https://nixos.wiki/wiki/Docker) <br> To setup Podman, look [HERE](https://nixos.wiki/wiki/Podman) and [HERE](https://gist.github.com/adisbladis/187204cb772800489ee3dac4acdd9947) | -| Windows WSL2 | | **NOTE WSL2 support is preliminary, and there are many bugs present, any help in improving support is appreciated** <br> Currently you must work around some incompatibility between WSL2 and Podman, namely [THIS](https://github.com/containers/podman/issues/12236). <br> Install into WSL2 any of the supported distributions in this list. <br> Ensure you have an entry in the `fstab` for the `/tmp` folder: <br> `echo 'tmpfs /tmp tmps defaults 0 0' >> /etc/fstab`. <br> Then reboot the WSL machine `wsl --shutdown` <br> Note that `distrobox export` is not supported on WSL2 and will not work. | ### Compatibility notes @@ -106,7 +105,7 @@ | Distro | Version | Images | | --- | --- | --- | -| AlmaLinux | 8 <br> 9 | docker.io/library/almalinux:8 <br> docker.io/library/almalinux:9 | +| AlmaLinux | 8 <br> 8-minimal <br> 9 <br> 9-minimal | docker.io/library/almalinux:8 <br> docker.io/library/almalinux:9 <br> docker.io/library/almalinux:9-minimal | | AlmaLinux (UBI) | 8 | docker.io/almalinux/8-base <br> docker.io/almalinux/8-init | | Alpine Linux | 3.14 <br> 3.15 | docker.io/library/alpine:latest | | AmazonLinux | 2 | docker.io/library/amazonlinux:2.0.20211005.0 | @@ -115,7 +114,7 @@ | ClearLinux | | docker.io/library/clearlinux:latest <br> docker.io/library/clearlinux:base | | CentOS | 7 | quay.io/centos/centos:7 | | CentOS Stream | 8 <br> 9 | quay.io/centos/centos:stream8 <br> quay.io/centos/centos:stream9 | -| RedHat (UBI) | 7 <br> 8 | 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 | +| 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 | | Debian | 7 <br> 8 <br> 9 <br> 10 <br> 11 | docker.io/debian/eol:wheezy <br> docker.io/library/debian:8 <br> docker.io/library/debian:9 <br> docker.io/library/debian:10 <br> docker.io/library/debian:stable <br> docker.io/library/debian:stable-backports | | Debian | Testing | docker.io/library/debian:testing <br> docker.io/library/debian:testing-backports | | Debian | Unstable | docker.io/library/debian:unstable | diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/docs/posts/execute_commands_on_host.md new/distrobox-1.3.1/docs/posts/execute_commands_on_host.md --- old/distrobox-1.3.0/docs/posts/execute_commands_on_host.md 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/docs/posts/execute_commands_on_host.md 2022-06-11 18:13:52.000000000 +0200 @@ -34,7 +34,7 @@ user@fedora-distrobox:~$ sudo dnf install -y flatpak-spawn ``` -With `flatpak-swpan` we can easily execute commands on the host using: +With `flatpak-spawn` we can easily execute commands on the host using: ```shell user@fedora-distrobox:~$ flatpak-spawn --host bash -l diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/docs/posts/run_latest_gnome_kde_on_distrobox.md new/distrobox-1.3.1/docs/posts/run_latest_gnome_kde_on_distrobox.md --- old/distrobox-1.3.0/docs/posts/run_latest_gnome_kde_on_distrobox.md 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/docs/posts/run_latest_gnome_kde_on_distrobox.md 2022-06-11 18:13:52.000000000 +0200 @@ -39,7 +39,7 @@ ## Running Latest GNOME First we need to change a couple of bits in the distrobox container to make host's -systemd session accessible from within the host: +systemd session accessible from within the container: ```shell ~$ distrobox enter fedora-rawhide @@ -175,7 +175,7 @@ # Using other GUIs -Thanks to [J.S. Evans](https://twitter.com/usenetnerd) he experimented and wrote a befautiful blog post +Thanks to [J.S. Evans](https://twitter.com/usenetnerd) he experimented and wrote a beautiful blog post on how to use Distrobox for much more than simply running apps. You'll read on how to set up a working Ubuntu container with IceWM running on Xorg using Distrobox: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/install new/distrobox-1.3.1/install --- old/distrobox-1.3.0/install 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/install 2022-06-11 18:13:52.000000000 +0200 @@ -19,6 +19,7 @@ # POSIX +next=0 verbose=0 # Print usage to stdout. @@ -57,6 +58,12 @@ shift fi ;; + -N | --next) + if [ -n "$2" ]; then + shift + next=1 + fi + ;; -P | --prefix) if [ -n "$2" ]; then prefix="$2" @@ -122,10 +129,14 @@ exit 1 fi - release_ver=$(curl -L https://github.com/89luca89/distrobox/releases/latest | - grep 'refs/tags' | tail -1 | cut -d'"' -f2) - release_name=$(echo "${release_ver}" | rev | cut -d'/' -f1 | rev) - + if [ "${next}" -eq 0 ]; then + release_ver=$(curl -L https://github.com/89luca89/distrobox/releases/latest | + grep 'refs/tags' | tail -1 | cut -d'"' -f2) + release_name=$(echo "${release_ver}" | rev | cut -d'/' -f1 | rev) + else + release_ver="89luca89/distrobox/archive/refs/heads/main.tar.gz" + release_name="main" + fi # go in tmp tmp_dir="$(mktemp -d)" cd "${tmp_dir}" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/man/man1/distrobox-compatibility.1 new/distrobox-1.3.1/man/man1/distrobox-compatibility.1 --- old/distrobox-1.3.0/man/man1/distrobox-compatibility.1 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/man/man1/distrobox-compatibility.1 2022-06-11 18:13:52.000000000 +0200 @@ -15,7 +15,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "DISTROBOX" "1" "May 2022" "Distrobox" "User Manual" +.TH "DISTROBOX" "1" "Jun 2022" "Distrobox" "User Manual" .hy .SH Compatibility .PP @@ -71,9 +71,10 @@ T{ AlmaLinux T}@T{ -8 9 +8 8-minimal 9 9-minimal T}@T{ docker.io/library/almalinux:8 docker.io/library/almalinux:9 +docker.io/library/almalinux:9-minimal T} T{ AlmaLinux (UBI) @@ -132,7 +133,7 @@ T{ RedHat (UBI) T}@T{ -7 8 +7 8 9 T}@T{ registry.access.redhat.com/ubi7/ubi registry.access.redhat.com/ubi7/ubi-init @@ -140,6 +141,9 @@ registry.access.redhat.com/ubi8/ubi registry.access.redhat.com/ubi8/ubi-init registry.access.redhat.com/ubi8/ubi-minimal +registry.access.redhat.com/ubi9/ubi +registry.access.redhat.com/ubi9/ubi-init +registry.access.redhat.com/ubi9/ubi-minimal T} T{ Debian diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/man/man1/distrobox-create.1 new/distrobox-1.3.1/man/man1/distrobox-create.1 --- old/distrobox-1.3.0/man/man1/distrobox-create.1 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/man/man1/distrobox-create.1 2022-06-11 18:13:52.000000000 +0200 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "DISTROBOX-CREATE" "1" "May 2022" "Distrobox" "User Manual" +.TH "DISTROBOX-CREATE" "1" "Jun 2022" "Distrobox" "User Manual" .hy .SH Create the distrobox .PP diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/man/man1/distrobox-enter.1 new/distrobox-1.3.1/man/man1/distrobox-enter.1 --- old/distrobox-1.3.0/man/man1/distrobox-enter.1 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/man/man1/distrobox-enter.1 2022-06-11 18:13:52.000000000 +0200 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "DISTROBOX-ENTER" "1" "May 2022" "Distrobox" "User Manual" +.TH "DISTROBOX-ENTER" "1" "Jun 2022" "Distrobox" "User Manual" .hy .SH Enter the distrobox .PP diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/man/man1/distrobox-export.1 new/distrobox-1.3.1/man/man1/distrobox-export.1 --- old/distrobox-1.3.0/man/man1/distrobox-export.1 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/man/man1/distrobox-export.1 2022-06-11 18:13:52.000000000 +0200 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "DISTROBOX-EXPORT" "1" "May 2022" "Distrobox" "User Manual" +.TH "DISTROBOX-EXPORT" "1" "Jun 2022" "Distrobox" "User Manual" .hy .SH Application and service exporting .PP diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/man/man1/distrobox-host-exec.1 new/distrobox-1.3.1/man/man1/distrobox-host-exec.1 --- old/distrobox-1.3.0/man/man1/distrobox-host-exec.1 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/man/man1/distrobox-host-exec.1 2022-06-11 18:13:52.000000000 +0200 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "DISTROBOX-HOST-EXEC" "1" "May 2022" "Distrobox" "User Manual" +.TH "DISTROBOX-HOST-EXEC" "1" "Jun 2022" "Distrobox" "User Manual" .hy .SH Host Command Execution .PP diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/man/man1/distrobox-init.1 new/distrobox-1.3.1/man/man1/distrobox-init.1 --- old/distrobox-1.3.0/man/man1/distrobox-init.1 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/man/man1/distrobox-init.1 2022-06-11 18:13:52.000000000 +0200 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "DISTROBOX-INIT" "1" "May 2022" "Distrobox" "User Manual" +.TH "DISTROBOX-INIT" "1" "Jun 2022" "Distrobox" "User Manual" .hy .SH Init the distrobox (not to be launched manually) .PP diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/man/man1/distrobox-list.1 new/distrobox-1.3.1/man/man1/distrobox-list.1 --- old/distrobox-1.3.0/man/man1/distrobox-list.1 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/man/man1/distrobox-list.1 2022-06-11 18:13:52.000000000 +0200 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "DISTROBOX-LIST" "1" "May 2022" "Distrobox" "User Manual" +.TH "DISTROBOX-LIST" "1" "Jun 2022" "Distrobox" "User Manual" .hy .SH List containers .PP diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/man/man1/distrobox-rm.1 new/distrobox-1.3.1/man/man1/distrobox-rm.1 --- old/distrobox-1.3.0/man/man1/distrobox-rm.1 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/man/man1/distrobox-rm.1 2022-06-11 18:13:52.000000000 +0200 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "DISTROBOX-RM" "1" "May 2022" "Distrobox" "User Manual" +.TH "DISTROBOX-RM" "1" "Jun 2022" "Distrobox" "User Manual" .hy .SH Remove containers .PP diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/man/man1/distrobox-stop.1 new/distrobox-1.3.1/man/man1/distrobox-stop.1 --- old/distrobox-1.3.0/man/man1/distrobox-stop.1 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/man/man1/distrobox-stop.1 2022-06-11 18:13:52.000000000 +0200 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "DISTROBOX-STOP" "1" "May 2022" "Distrobox" "User Manual" +.TH "DISTROBOX-STOP" "1" "Jun 2022" "Distrobox" "User Manual" .hy .SH Stop containers .PP diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/man/man1/distrobox.1 new/distrobox-1.3.1/man/man1/distrobox.1 --- old/distrobox-1.3.0/man/man1/distrobox.1 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/man/man1/distrobox.1 2022-06-11 18:13:52.000000000 +0200 @@ -15,7 +15,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "DISTROBOX" "1" "May 2022" "Distrobox" "User Manual" +.TH "DISTROBOX" "1" "Jun 2022" "Distrobox" "User Manual" .hy .SH Compatibility .PP @@ -71,9 +71,10 @@ T{ AlmaLinux T}@T{ -8 9 +8 8-minimal 9 9-minimal T}@T{ docker.io/library/almalinux:8 docker.io/library/almalinux:9 +docker.io/library/almalinux:9-minimal T} T{ AlmaLinux (UBI) @@ -132,7 +133,7 @@ T{ RedHat (UBI) T}@T{ -7 8 +7 8 9 T}@T{ registry.access.redhat.com/ubi7/ubi registry.access.redhat.com/ubi7/ubi-init @@ -140,6 +141,9 @@ registry.access.redhat.com/ubi8/ubi registry.access.redhat.com/ubi8/ubi-init registry.access.redhat.com/ubi8/ubi-minimal +registry.access.redhat.com/ubi9/ubi +registry.access.redhat.com/ubi9/ubi-init +registry.access.redhat.com/ubi9/ubi-minimal T} T{ Debian @@ -317,7 +321,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "DISTROBOX-CREATE" "1" "May 2022" "Distrobox" "User Manual" +.TH "DISTROBOX-CREATE" "1" "Jun 2022" "Distrobox" "User Manual" .hy .SH Create the distrobox .PP @@ -500,7 +504,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "DISTROBOX-ENTER" "1" "May 2022" "Distrobox" "User Manual" +.TH "DISTROBOX-ENTER" "1" "Jun 2022" "Distrobox" "User Manual" .hy .SH Enter the distrobox .PP @@ -599,7 +603,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "DISTROBOX-EXPORT" "1" "May 2022" "Distrobox" "User Manual" +.TH "DISTROBOX-EXPORT" "1" "Jun 2022" "Distrobox" "User Manual" .hy .SH Application and service exporting .PP @@ -768,7 +772,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "DISTROBOX-HOST-EXEC" "1" "May 2022" "Distrobox" "User Manual" +.TH "DISTROBOX-HOST-EXEC" "1" "Jun 2022" "Distrobox" "User Manual" .hy .SH Host Command Execution .PP @@ -828,7 +832,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "DISTROBOX-INIT" "1" "May 2022" "Distrobox" "User Manual" +.TH "DISTROBOX-INIT" "1" "Jun 2022" "Distrobox" "User Manual" .hy .SH Init the distrobox (not to be launched manually) .PP @@ -889,7 +893,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "DISTROBOX-LIST" "1" "May 2022" "Distrobox" "User Manual" +.TH "DISTROBOX-LIST" "1" "Jun 2022" "Distrobox" "User Manual" .hy .SH List containers .PP @@ -951,7 +955,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "DISTROBOX-RM" "1" "May 2022" "Distrobox" "User Manual" +.TH "DISTROBOX-RM" "1" "Jun 2022" "Distrobox" "User Manual" .hy .SH Remove containers .PP @@ -1014,7 +1018,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "DISTROBOX-STOP" "1" "May 2022" "Distrobox" "User Manual" +.TH "DISTROBOX-STOP" "1" "Jun 2022" "Distrobox" "User Manual" .hy .SH Stop containers .PP diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distrobox-1.3.0/uninstall new/distrobox-1.3.1/uninstall --- old/distrobox-1.3.0/uninstall 2022-05-29 11:10:02.000000000 +0200 +++ new/distrobox-1.3.1/uninstall 2022-06-11 18:13:52.000000000 +0200 @@ -103,9 +103,9 @@ # uninstall for file in "${dest_path}/distrobox"*; do - [ -e "${file}" ] && rm -i "${file}" + [ -e "${file}" ] && rm "${file}" done for file in "${man_dest_path}/distrobox"*; do - [ -e "${file}" ] && rm -i "${file}" + [ -e "${file}" ] && rm "${file}" done echo "Thank you for using Distrobox. Uninstall complete."
