diff --git a/HACKING/testing.md b/HACKING/testing.md index 8dee4853..3946f0ef 100644 --- a/HACKING/testing.md +++ b/HACKING/testing.md @@ -5,7 +5,7 @@ Please write unit tests for new things. Tests can be run with `make check`, which just runs `./testenv roundup` in the `test/` directory. Relatedly, you need the `roundup` (the `sh-roundup` package on Parabola) tool to run the tests. `./testenv` can be given -`--no-network` and/or `--no-sudo` to dissable tests that require those +`--no-network` and/or `--no-doas` to dissable tests that require those things. Make can be made to pass those things in by setting `TESTENVFLAGS`. If you don't dissable either, I *strongly* recommend setting TMPDIR to somewhere on a btrfs partition before running the diff --git a/src/abslibre-tools/libredbdiff b/src/abslibre-tools/libredbdiff index a01c32fb..22d27a77 100755 --- a/src/abslibre-tools/libredbdiff +++ b/src/abslibre-tools/libredbdiff @@ -3,6 +3,8 @@ # # Copyright (C) 2014 Esteban Carnevale # Copyright (C) 2014, 2017 Luke Shumaker +# Copyright (C) 2020 André Silva +# Copyright (C) 2020 Márcio Silva # # License: GNU GPLv3+ # @@ -131,7 +133,7 @@ print_cmp() { } usage() { - print "Usage: sudo %q" "$cmd" + print "Usage: doas %q" "$cmd" print " or: %q -n [REPO]" "$cmd" print " or: %q -h" "$cmd" print 'Show packages that need to be updated from Arch repositories.' diff --git a/src/chroot-tools/hooks-check.sh b/src/chroot-tools/hooks-check.sh index 2bf3fff4..de18c452 100644 --- a/src/chroot-tools/hooks-check.sh +++ b/src/chroot-tools/hooks-check.sh @@ -1,5 +1,7 @@ #!/hint/bash -euE -o pipefail # Copyright (C) 2013, 2017 Luke Shumaker +# Copyright (C) 2020 André Silva +# Copyright (C) 2020 Márcio Silva # # License: GNU GPLv2+ # @@ -19,13 +21,21 @@ hook_check_pkgbuild+=("check_pkgbuild_nonfree") check_pkgbuild_nonfree() { local s=0 - sudo -EH -u "$LIBREUSER" pkgbuild-check-nonfree -f || s=$? + if [ $(doas grep -qs 'permit nopass keepenv setenv { HOME='$LIBREHOME' } '$LIBREUSER /etc/doas.conf; echo $?) != 0 ]; then + echo 'permit nopass keepenv setenv { HOME='$LIBREHOME' } '$LIBREUSER >> "$copydir/etc/doas.conf" + fi + doas -u "$LIBREUSER" bash -c "DOAS_USER="$DOAS_USER" pkgbuild-check-nonfree -f || s=$?" + sed -i '\|permit nopass keepenv setenv { HOME='$LIBREHOME' } '$LIBREUSER'|d' "$copydir/etc/doas.conf" pkgbuild-summarize-nonfree $s } #hook_check_pkgbuild+=("check_pkgbuild_namcap") check_pkgbuild_namcap() { - sudo -EH -u "$LIBREUSER" namcap PKGBUILD + if [ $(doas grep -qs 'permit nopass keepenv setenv { HOME='$LIBREHOME' } '$LIBREUSER /etc/doas.conf; echo $?) != 0 ]; then + echo 'permit nopass keepenv setenv { HOME='$LIBREHOME' } '$LIBREUSER >> "$copydir/etc/doas.conf" + fi + doas -u "$LIBREUSER" bash -c "DOAS_USER="$DOAS_USER" namcap PKGBUILD" + sed -i '\|permit nopass keepenv setenv { HOME='$LIBREHOME' } '$LIBREUSER'|d' "$copydir/etc/doas.conf" } #hook_check_pkg+=("check_pkg") diff --git a/src/chroot-tools/librechroot b/src/chroot-tools/librechroot index 7b1c8c2c..f9bbc463 100755 --- a/src/chroot-tools/librechroot +++ b/src/chroot-tools/librechroot @@ -206,7 +206,7 @@ usage() { echo prose 'Each named chroot has a master clean copy (named `root`), and any number of other named copies; the copy used by default is the - current username (or $SUDO_USER, or `copy` if root).' + current username (or $DOAS_USER, or `copy` if root).' echo prose 'The full path to the chroot copy is "$CHROOTDIR/$CHROOT/$COPY", unless the copy name is manually specified as an absolute path, diff --git a/src/chroot-tools/libremakepkg b/src/chroot-tools/libremakepkg index d4e5b8a0..b6e7ff92 100755 --- a/src/chroot-tools/libremakepkg +++ b/src/chroot-tools/libremakepkg @@ -6,6 +6,8 @@ set -euE # Copyright (C) 2010-2012 Joshua Ismael Haase Hernández (xihh) # Copyright (C) 2012 Michał Masłowski # Copyright (C) 2012-2015, 2017 Luke Shumaker +# Copyright (C) 2020 André Silva +# Copyright (C) 2020 Márcio Silva # # License: GNU GPLv2+ # @@ -144,8 +146,8 @@ usage() { bullet 'set `MAKEFLAGS` and `PACKAGER` in `/etc/makepkg.conf` to reflect the value outside of the chroot.' bullet 'create a `builduser` with the same numeric UID as the - invoking $SUDO_USER.' - bullet 'lets this `builduser` call `sudo pacman` without a password.' + invoking $DOAS_USER.' + bullet 'lets this `builduser` call `doas pacman` without a password.' bullet 'adds a pacman repositoriy of locally built packages' echo prose 'This command is configured both with `chroot.conf` (either in diff --git a/src/chroot-tools/makechrootpkg.in b/src/chroot-tools/makechrootpkg.in index f97b329b..370d672f 100644 --- a/src/chroot-tools/makechrootpkg.in +++ b/src/chroot-tools/makechrootpkg.in @@ -33,9 +33,9 @@ init_variables() { bindmounts_rw=() copy=$USER - [[ -n ${SUDO_USER:-} ]] && copy=$SUDO_USER + [[ -n ${DOAS_USER:-} ]] && copy=$DOAS_USER [[ -z "$copy" || $copy = root ]] && copy=copy - src_owner=${SUDO_USER:-$USER} + src_owner=${DOAS_USER:-$USER} } usage() { @@ -191,7 +191,7 @@ prepare_chroot() { $repack || rm -rf "$copydir/build" local builduser_uid builduser_gid - builduser_uid="${SUDO_UID:-$UID}" + builduser_uid="$(id -u ${DOAS_USER:-$USER})" builduser_gid="$(id -g "$builduser_uid")" local install="install -o $builduser_uid -g $builduser_gid" local x @@ -222,10 +222,12 @@ prepare_chroot() { echo "$x" >>"$copydir/etc/makepkg.conf" done - cat > "$copydir/etc/sudoers.d/builduser-pacman" < "$copydir/etc/doas.conf" <> "$copydir/etc/doas.conf" + fi + doas -u builduser bash -c 'cd $HOME; cd /startdir; DOAS_USER='$DOAS_USER' makepkg "$@" --nobuild' -bash "$@" + sed -i '\|permit nopass setenv { HOME="/build" PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/sbin:/usr/sbin:/sbin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl" _="/bin/bash" } builduser|d' "$copydir/etc/doas.conf" } _chrootbuild() { # shellcheck source=/dev/null . /etc/profile - # Beware, there are some stupid arbitrary rules on how you can - # use "$" in arguments to commands with "sudo -i". ${foo} or - # ${1} is OK, but $foo or $1 isn't. - # https://bugzilla.sudo.ws/show_bug.cgi?id=765 - sudo -iu builduser bash -c 'cd /startdir; makepkg "${@:2}" --allsource' -bash ".src.tar.gz" "$@" || return - sudo -iu builduser bash -c 'cd /startdir; makepkg "$@" --noextract --noprepare' -bash "$@" + if [ $(doas grep -qs 'permit nopass setenv { HOME="/build" PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/sbin:/usr/sbin:/sbin" _="/bin/bash" } builduser' /etc/doas.conf; echo $?) != 0 ]; then + echo 'permit nopass setenv { HOME="/build" PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/sbin:/usr/sbin:/sbin" _="/bin/bash" } builduser' >> "$copydir/etc/doas.conf" + fi + doas -u builduser bash -c 'cd $HOME; cd /startdir; DOAS_USER='$DOAS_USER' makepkg "${@:2}" --allsource' -bash ".src.tar.gz" "$@" || return + sed -i '\|permit nopass setenv { HOME="/build" PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/sbin:/usr/sbin:/sbin:" _="/bin/bash" } builduser|d' "$copydir/etc/doas.conf" + if [ $(doas grep -qs 'permit nopass setenv { HOME="/build" PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/sbin:/usr/sbin:/sbin" _="/bin/bash" } builduser' /etc/doas.conf; echo $?) != 0 ]; then + echo 'permit nopass setenv { HOME="/build" PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/sbin:/usr/sbin:/sbin" _="/bin/bash" } builduser' >> "$copydir/etc/doas.conf" + fi + doas -u builduser bash -c 'cd $HOME; cd /startdir; DOAS_USER='$DOAS_USER' makepkg "$@" --noextract --noprepare' -bash "$@" + sed -i '\|permit nopass setenv { HOME="/build" PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/sbin:/usr/sbin:/sbin" _="/bin/bash" } builduser|d' "$copydir/etc/doas.conf" } _chrootnamcap() { pacman -S --needed --noconfirm namcap for pkgfile in /startdir/PKGBUILD /pkgdest/*; do echo "Checking ${pkgfile##*/}" - sudo -u builduser namcap "$pkgfile" 2>&1 | tee "/logdest/${pkgfile##*/}-namcap.log" + doas -u builduser namcap "$pkgfile" 2>&1 | tee "/logdest/${pkgfile##*/}-namcap.log" done } @@ -306,7 +312,7 @@ download_sources() { # Ensure sources are downloaded if [[ "$(id -u "$makepkg_user")" != 0 ]]; then - sudo -u "$makepkg_user" env SRCDEST="$SRCDEST" BUILDDIR="$builddir" \ + doas -u "$makepkg_user" env SRCDEST="$SRCDEST" BUILDDIR="$builddir" \ makepkg --config="$copydir/etc/makepkg.conf" --verifysource -o || die "Could not download sources." else @@ -372,7 +378,7 @@ main() { [[ ! -f PKGBUILD && -z "${install_pkgs[*]}" ]] && die 'This must be run in a directory containing a PKGBUILD.' [[ -n $makepkg_user && -z $(id -u "$makepkg_user") ]] && die 'Invalid makepkg user.' - makepkg_user=${makepkg_user:-${SUDO_USER:-$USER}} + makepkg_user=${makepkg_user:-${DOAS_USER:-$USER}} check_root @@ -400,8 +406,8 @@ main() { esac done - if [[ -n $SUDO_USER ]]; then - eval "USER_HOME=~$SUDO_USER" + if [[ -n $DOAS_USER ]]; then + eval "USER_HOME=~$DOAS_USER" else USER_HOME=$HOME fi diff --git a/src/dagpkg b/src/dagpkg index d6f7ccaa..38c6844d 100755 --- a/src/dagpkg +++ b/src/dagpkg @@ -1,11 +1,13 @@ #!/usr/bin/env bash -# +# # dagpkg - create a directed graph of package dependencies and build # them in topological order # Copyright (C) 2014 Nicolás Reynolds # Copyright (C) 2014 Michał Masłowski # Copyright (C) 2017 Luke Shumaker +# Copyright (C) 2020 André Silva +# Copyright (C) 2020 Márcio Silva # # License: GNU GPLv3+ # @@ -196,7 +198,11 @@ main() { # upgrade the system # this would probably have to go on HOOKPREBUILD if you're working # outside chroots - sudo -E pacman -Syu --noconfirm + if [ $(doas grep -qs 'permit nopass keepenv '$LIBREUSER /etc/doas.conf; echo $?) != 0 ]; then + echo 'permit nopass keepenv '$LIBREUSER >> "$copydir/etc/doas.conf" + fi + doas pacman -Syu --noconfirm + sed -i '\|permit nopass keepenv '$LIBREUSER'|d' "$copydir/etc/doas.conf" # run the pre build command from libretools.conf if [[ -n "$HOOKPREBUILD" ]]; then diff --git a/src/lib/archroot.sh.in b/src/lib/archroot.sh.in index 98fd2cfb..e449499d 100644 --- a/src/lib/archroot.sh.in +++ b/src/lib/archroot.sh.in @@ -11,8 +11,8 @@ CHROOT_VERSION='v4' orig_argv=("$0" "$@") check_root() { (( EUID == 0 )) && return - if type -P sudo >/dev/null; then - exec sudo -- "${orig_argv[@]}" + if type -P doas >/dev/null; then + exec doas -- "${orig_argv[@]}" else exec su root -c "$(printf ' %q' "${orig_argv[@]}")" fi diff --git a/src/lib/conf.sh.3.ronn b/src/lib/conf.sh.3.ronn index 949ce3e9..93bf3d08 100644 --- a/src/lib/conf.sh.3.ronn +++ b/src/lib/conf.sh.3.ronn @@ -12,15 +12,15 @@ files related to Arch/Hyperbola(7) and libretools(7). ### VARIABLES -When loading configuration files in a program run with `sudo`(8), it +When loading configuration files in a program run with `doas`(1), it is often desirable to load the configuration files from the home -directory of the user who called `sudo`, instead of from /root. +directory of the user who called `doas`, instead of from /root. To accommodate this, instead of using the usual $ and $, `conf.sh` sets $ and $, which it then uses. * : - If $ is set, then $ is set to + If $ is set, then $ is set to that. Otherwise, $ is set to the value of $. * : If $ == $, then $ is set to the value diff --git a/src/lib/conf.sh.in b/src/lib/conf.sh.in index 942484ef..e28febf6 100644 --- a/src/lib/conf.sh.in +++ b/src/lib/conf.sh.in @@ -19,8 +19,7 @@ # along with this program. If not, see . SNAPSHOT=2020-05-08 - -LIBREUSER="${SUDO_USER:-$USER}" +LIBREUSER="${DOAS_USER:-$USER}" if [[ $LIBREUSER == "$USER" ]]; then LIBREHOME=$HOME else diff --git a/src/librefetch/librefetch.conf.5.ronn b/src/librefetch/librefetch.conf.5.ronn index 29df4d2d..9325b0bc 100644 --- a/src/librefetch/librefetch.conf.5.ronn +++ b/src/librefetch/librefetch.conf.5.ronn @@ -19,7 +19,7 @@ to override. If `$XDG_CONFIG_HOME` is not set, a default value is set: - * if `$SUDO_USER` is set: `$(eval echo ~$SUDO_USER)/.config` + * if `$DOAS_USER` is set: `$(eval echo ~$DOAS_USER)/.config` * else: `$HOME/.config` ## OPTIONS diff --git a/src/libretools.conf b/src/libretools.conf index 7ecad428..ab7e3c95 100644 --- a/src/libretools.conf +++ b/src/libretools.conf @@ -35,7 +35,7 @@ REPODEST=staging@dusseldorf.hyperbola.info:$LIBREUSER ## These are run before and after uploading packages HOOKPRERELEASE="ssh -p 51011 -fN ${REPODEST%%:*}" -HOOKPOSTRELEASE="sudo librechroot clean-repo" # && sudo librechroot -n i686 clean-repo" +HOOKPOSTRELEASE="doas librechroot clean-repo" # && doas librechroot -n i686 clean-repo" ################################################################################ # dagpkg # @@ -48,9 +48,9 @@ HOOKPREBUILD="" ## Uncomment one of those or make one of your choice # Normal -FULLBUILDCMD="sudo libremakepkg" +FULLBUILDCMD="doas libremakepkg" # Cross compiling -#FULLBUILDCMD="sudo libremakepkg -n cross-compile-chroot" +#FULLBUILDCMD="doas libremakepkg -n cross-compile-chroot" # Don't use a chroot #FULLBUILDCMD="makepkg -sL --noconfirm" diff --git a/src/workflows.md b/src/workflows.md index 03dca4f6..c7c85052 100644 --- a/src/workflows.md +++ b/src/workflows.md @@ -22,7 +22,7 @@ This is how the chroot is configured: * Create the same user (with same uid) on the chroot that the one I use regularly. -* Give it password-less sudo on the chroot. +* Give it password-less doas on the chroot. * Bind mount `/home` to `/chroot/home`, where I have the abslibre-mips64el clone. diff --git a/src/xbs-abs/helper-abs b/src/xbs-abs/helper-abs index e8f41de9..0d2e6cdc 100755 --- a/src/xbs-abs/helper-abs +++ b/src/xbs-abs/helper-abs @@ -1,6 +1,8 @@ #!/usr/bin/env bash # Copyright (C) 2013-2014, 2017 Luke Shumaker +# Copyright (C) 2020 André Silva +# Copyright (C) 2020 Márcio Silva # # For code from db-functions (arch_svn): # Copyright (C) 2012 Pierre Schmitz @@ -43,7 +45,7 @@ arch_svn() { if [[ -z "${SVNUSER}" ]]; then /usr/bin/svn "${@}" else - sudo -u "${SVNUSER}" -- /usr/bin/svn --username "${USER}" "${@}" + doas -u "${SVNUSER}" -- /usr/bin/svn --username "${USER}" "${@}" fi } diff --git a/test/lib-conf-test.sh b/test/lib-conf-test.sh index d79c5f2a..1cf5d6f1 100644 --- a/test/lib-conf-test.sh +++ b/test/lib-conf-test.sh @@ -13,13 +13,13 @@ it_sets_makepkg_vars_in_custom_file() { } it_figures_out_HOME_when_root() { - require sudo || return 0 + require doas || return 0 # This one is tricky, because it does the job too well, it will find # the actual HOME, instead of the test environment HOME. Therefore, we # will just check that [[ $HOME != /root ]] cd "$tmpdir" echo '. $(librelib conf.sh); echo "$LIBREHOME"' > test.sh - LIBREHOME=$(testsudo bash ./test.sh) + LIBREHOME=$(testdoas bash ./test.sh) [[ $LIBREHOME != /root ]] } diff --git a/test/librechroot-test.sh b/test/librechroot-test.sh index 2aad0c60..172b9462 100644 --- a/test/librechroot-test.sh +++ b/test/librechroot-test.sh @@ -6,56 +6,56 @@ describe librechroot setup_chrootdir it_creates_repo_for_new_chroots() { - require network sudo || return 0 + require network doas || return 0 libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty - testsudo librechroot -l "$roundup_test_name" run test -r /repo/repo.db + testdoas librechroot -l "$roundup_test_name" run test -r /repo/repo.db } it_cleans_the_local_repo_correctly() { - require network sudo || return 0 + require network doas || return 0 libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty - testsudo librechroot -l "$roundup_test_name" make - testsudo librechroot -l "$roundup_test_name" clean-repo - testsudo librechroot -l "$roundup_test_name" run test -r /repo/repo.db + testdoas librechroot -l "$roundup_test_name" make + testdoas librechroot -l "$roundup_test_name" clean-repo + testdoas librechroot -l "$roundup_test_name" run test -r /repo/repo.db # TODO: inspect /repo/* more } it_respects_exit_status_if_out_isnt_a_tty() ( - require network sudo || return 0 + require network doas || return 0 set -o pipefail libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty r=0 - { testsudo librechroot -l "$roundup_test_name" run bash -c 'exit 3' | cat; } || r=$? + { testdoas librechroot -l "$roundup_test_name" run bash -c 'exit 3' | cat; } || r=$? [[ $r == 3 ]] ) it_creates_ca_certificates() { - require network sudo || return 0 + require network doas || return 0 libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty - testsudo librechroot -l "$roundup_test_name" run test -r /etc/ssl/certs/ca-certificates.crt + testdoas librechroot -l "$roundup_test_name" run test -r /etc/ssl/certs/ca-certificates.crt } it_disables_networking_when_requested() { - require network sudo || return 0 + require network doas || return 0 libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty - testsudo librechroot -l "$roundup_test_name" run curl https://repo.hyperbola.info:50011/ >/dev/null - not testsudo librechroot -l "$roundup_test_name" -N run curl https://repo.hyperbola.info:50011/ >/dev/null + testdoas librechroot -l "$roundup_test_name" run curl https://repo.hyperbola.info:50011/ >/dev/null + not testdoas librechroot -l "$roundup_test_name" -N run curl https://repo.hyperbola.info:50011/ >/dev/null } it_handles_CHROOTEXTRAPKG_correctly() { - requuire network sudo || return 0 + requuire network doas || return 0 libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty - not testsudo librechroot -l "$roundup_test_name" run lsof + not testdoas librechroot -l "$roundup_test_name" run lsof echo "CHROOTEXTRAPKG=(lsof)" >> "$XDG_CONFIG_HOME"/libretools/chroot.conf - testsudo librechroot -l "$roundup_test_name" install-name lsof - testsudo librechroot -l "$roundup_test_name" clean-pkgs - testsudo librechroot -l "$roundup_test_name" run lsof + testdoas librechroot -l "$roundup_test_name" install-name lsof + testdoas librechroot -l "$roundup_test_name" clean-pkgs + testdoas librechroot -l "$roundup_test_name" run lsof echo "CHROOTEXTRAPKG=()" >> "$XDG_CONFIG_HOME"/libretools/chroot.conf - testsudo librechroot -l "$roundup_test_name" clean-pkgs - not testsudo librechroot -l "$roundup_test_name" run lsof + testdoas librechroot -l "$roundup_test_name" clean-pkgs + not testdoas librechroot -l "$roundup_test_name" run lsof } it_displays_help_as_normal_user() { @@ -82,20 +82,20 @@ it_displays_help_and_fails_with_0_args() { [[ "$(sed -n 2p $tmpdir/stderr)" =~ Usage:.* ]] } -# requires sudo so we know it's not failing because it needs root +# requires doas so we know it's not failing because it needs root it_fails_for_unknown_commands() { - require sudo || return 0 - testsudo librechroot phony >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? + require doas || return 0 + testdoas librechroot phony >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? [[ $stat != 0 ]] empty $tmpdir/stdout not empty $tmpdir/stderr } -# requires sudo so we know it's not failing because it needs root +# requires doas so we know it's not failing because it needs root it_fails_for_unknown_flags() { - require sudo || return 0 - testsudo librechroot -q >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? + require doas || return 0 + testdoas librechroot -q >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? [[ $stat != 0 ]] empty $tmpdir/stdout @@ -103,8 +103,8 @@ it_fails_for_unknown_flags() { } it_fails_when_syncing_a_copy_with_itself() { - require sudo || return 0 - testsudo timeout 5 librechroot -l root sync || stat=$? + require doas || return 0 + testdoas timeout 5 librechroot -l root sync || stat=$? case $stat in 0|124|137) # success|timeout+TERM|timeout+KILL false;; @@ -114,23 +114,23 @@ it_fails_when_syncing_a_copy_with_itself() { } it_deletes_copies() { - require network sudo || return 0 + require network doas || return 0 libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty - testsudo librechroot -l "$roundup_test_name" make + testdoas librechroot -l "$roundup_test_name" make test -d "$chrootdir/default/$roundup_test_name" - testsudo librechroot -l "$roundup_test_name" delete + testdoas librechroot -l "$roundup_test_name" delete not test -e "$chrootdir/default/$roundup_test_name" } it_deletes_subvolumes_recursively() { - require network sudo btrfs || return 0 + require network doas btrfs || return 0 libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty - testsudo librechroot -l "$roundup_test_name" make - testsudo librechroot -l "$roundup_test_name" run pacman -S --noconfirm btrfs-progs + testdoas librechroot -l "$roundup_test_name" make + testdoas librechroot -l "$roundup_test_name" run pacman -S --noconfirm btrfs-progs test -d "$chrootdir/default/$roundup_test_name" not test -e "$chrootdir/default/$roundup_test_name/var/subvolume" - testsudo librechroot -l "$roundup_test_name" run btrfs subvolume create /var/subvolume + testdoas librechroot -l "$roundup_test_name" run btrfs subvolume create /var/subvolume test -d "$chrootdir/default/$roundup_test_name/var/subvolume" - testsudo librechroot -l "$roundup_test_name" delete + testdoas librechroot -l "$roundup_test_name" delete not test -e "$chrootdir/default/$roundup_test_name" } diff --git a/test/libremakepkg-test.sh b/test/libremakepkg-test.sh index 3609cb63..b0f0d977 100644 --- a/test/libremakepkg-test.sh +++ b/test/libremakepkg-test.sh @@ -6,52 +6,52 @@ describe libremakepkg setup_chrootdir it_builds_a_trivial_package() { - require network sudo || return 0 + require network doas || return 0 cp libremakepkg.d/PKGBUILD-hello "$tmpdir/PKGBUILD" cd "$tmpdir" libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty - testsudo libremakepkg -l "$roundup_test_name" + testdoas libremakepkg -l "$roundup_test_name" [[ -f $(echo libretools-hello-1.0-1-any.pkg.tar.?z) ]] } it_enables_networking_during_prepare() { - require network sudo || return 0 + require network doas || return 0 cp libremakepkg.d/PKGBUILD-netprepare "$tmpdir/PKGBUILD" cd "$tmpdir" libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty - testsudo libremakepkg -l "$roundup_test_name" + testdoas libremakepkg -l "$roundup_test_name" [[ -f $(echo libretools-netprepare-1.0-1-any.pkg.tar.?z) ]] } it_disables_networking_during_build() { - require network sudo || return 0 + require network doas || return 0 cp libremakepkg.d/PKGBUILD-netbuild "$tmpdir/PKGBUILD" cd "$tmpdir" libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty - not testsudo libremakepkg -l "$roundup_test_name" + not testdoas libremakepkg -l "$roundup_test_name" not [[ -f $(echo libretools-netbuild-1.0-1-any.pkg.tar.?z) ]] - testsudo libremakepkg -l "$roundup_test_name" -N + testdoas libremakepkg -l "$roundup_test_name" -N [[ -f $(echo libretools-netbuild-1.0-1-any.pkg.tar.?z) ]] } it_disables_networking_during_package() { - require network sudo || return 0 + require network doas || return 0 cp libremakepkg.d/PKGBUILD-netpackage "$tmpdir/PKGBUILD" cd "$tmpdir" libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty - not testsudo libremakepkg -l "$roundup_test_name" + not testdoas libremakepkg -l "$roundup_test_name" not [[ -f $(echo libretools-netpackage-1.0-1-any.pkg.tar.?z) ]] - testsudo libremakepkg -l "$roundup_test_name" -N + testdoas libremakepkg -l "$roundup_test_name" -N [[ -f $(echo libretools-netpackage-1.0-1-any.pkg.tar.?z) ]] } it_cleans_the_chroot_before_building() { - require network sudo || return 0 + require network doas || return 0 # 1. First, we build testpkg1 # 2. Then, we build testpkg2, which depends on testpkg1 # Therefore, testpkg1 will be installed after testpkg2 is built, we @@ -70,28 +70,28 @@ it_cleans_the_chroot_before_building() { libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty cd "$tmpdir/1" - testsudo libremakepkg -l "$roundup_test_name" &> "$tmpdir/out" || { r=$?; tail "$tmpdir/out"|cat -v; return $r; } + testdoas libremakepkg -l "$roundup_test_name" &> "$tmpdir/out" || { r=$?; tail "$tmpdir/out"|cat -v; return $r; } cd "$tmpdir/2" - testsudo libremakepkg -l "$roundup_test_name" &> "$tmpdir/out" || { r=$?; tail "$tmpdir/out"|cat -v; return $r; } - testsudo librechroot -l "$roundup_test_name" run libretools-testpkg1 'first time, pass' + testdoas libremakepkg -l "$roundup_test_name" &> "$tmpdir/out" || { r=$?; tail "$tmpdir/out"|cat -v; return $r; } + testdoas librechroot -l "$roundup_test_name" run libretools-testpkg1 'first time, pass' # This next line is actually a separate test, but it fits in well with this test, and chroot tests are slow.. # it_doesnt_cache_local_packages() { - not testsudo librechroot -l "$roundup_test_name" run test -e /var/cache/pacman/pkg/libretools-testpkg1-1.0-1-any.pkg.tar.?z + not testdoas librechroot -l "$roundup_test_name" run test -e /var/cache/pacman/pkg/libretools-testpkg1-1.0-1-any.pkg.tar.?z cd "$tmpdir/3" - testsudo libremakepkg -l "$roundup_test_name" &> "$tmpdir/out" || { r=$?; tail "$tmpdir/out"|cat -v; return $r; } - not testsudo librechroot -l "$roundup_test_name" run libretools-testpkg1 'second time, fail' + testdoas libremakepkg -l "$roundup_test_name" &> "$tmpdir/out" || { r=$?; tail "$tmpdir/out"|cat -v; return $r; } + not testdoas librechroot -l "$roundup_test_name" run libretools-testpkg1 'second time, fail' } it_handles_PKGDEST_not_existing() { - require network sudo || return 0 + require network doas || return 0 cp libremakepkg.d/PKGBUILD-hello "$tmpdir/PKGBUILD" cd "$tmpdir" libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty - testsudo env PKGDEST="$tmpdir/dest/pkgdest" libremakepkg -l "$roundup_test_name" + testdoas env PKGDEST="$tmpdir/dest/pkgdest" libremakepkg -l "$roundup_test_name" [[ -f $(echo dest/pkgdest/libretools-hello-1.0-1-any.pkg.tar.?z) ]] } @@ -118,7 +118,7 @@ it_otherwise_fails_as_normal_user() { } it_fails_if_a_hook_fails() { - require network sudo || return 0 + require network doas || return 0 cp libremakepkg.d/PKGBUILD-hello "$tmpdir/PKGBUILD" cd "$tmpdir" local stat=0 @@ -127,30 +127,30 @@ it_fails_if_a_hook_fails() { trap 'sed -i s/-bogus// "$XDG_CONFIG_HOME"/libretools/libretools.conf' RETURN libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty - testsudo libremakepkg -l "$roundup_test_name" >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? + testdoas libremakepkg -l "$roundup_test_name" >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? [[ $stat != 0 ]] tail -n1 $tmpdir/stderr | grep -qF '==> ERROR: Failure(s) in check_pkgbuild: check_pkgbuild_nonfree' } it_detects_distcc_files() { - require network sudo || return 0 + require network doas || return 0 cp libremakepkg.d/PKGBUILD-hello "$tmpdir/PKGBUILD" cd "$tmpdir" echo "CHROOTEXTRAPKG+=(distcc-nozeroconf socat)" >> "$XDG_CONFIG_HOME"/libretools/chroot.conf trap 'sed -i /CHROOTEXTRAPKGs+=/d "$XDG_CONFIG_HOME"/libretools/chroot.conf' RETURN libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty - testsudo librechroot -l "$roundup_test_name" run pacman -S --noconfirm distcc-nozeroconf socat + testdoas librechroot -l "$roundup_test_name" run pacman -S --noconfirm distcc-nozeroconf socat # first make sure that the engine works - testsudo libremakepkg -l "$roundup_test_name" + testdoas libremakepkg -l "$roundup_test_name" [[ -f $(echo libretools-hello-1.0-1-any.pkg.tar.?z) ]] rm -f -- libretools-hello-1.0-1-any.pkg.tar.?z # now throw a wrench in it - testsudo librechroot -l "$roundup_test_name" run touch /bin/distcc-tool + testdoas librechroot -l "$roundup_test_name" run touch /bin/distcc-tool # and make sure that the engine broke - testsudo libremakepkg -l "$roundup_test_name" || stat=$? + testdoas libremakepkg -l "$roundup_test_name" || stat=$? [[ $stat != 0 ]] not [[ -f $(echo libretools-hello-1.0-1-any.pkg.tar.?z) ]] } diff --git a/test/librestage-test.sh b/test/librestage-test.sh index 75450aec..7169df0d 100644 --- a/test/librestage-test.sh +++ b/test/librestage-test.sh @@ -45,7 +45,7 @@ it_fails_with_invalid_args() { } it_guesses_the_repo() { - nochroot=false; require network sudo || nochroot=true + nochroot=false; require network doas || nochroot=true mkdir -p -- "$tmpdir/reponame/libretools-hello" cp librestage.d/PKGBUILD-hello "$tmpdir/reponame/libretools-hello/PKGBUILD" cd "$tmpdir/reponame/libretools-hello" @@ -53,7 +53,7 @@ it_guesses_the_repo() { if $nochroot; then makepkg else - testsudo libremakepkg -l "$roundup_test_name" + testdoas libremakepkg -l "$roundup_test_name" fi librestage @@ -63,7 +63,7 @@ it_guesses_the_repo() { } it_stages_packages_without_PKGDEST() { - nochroot=false; require network sudo || nochroot=true + nochroot=false; require network doas || nochroot=true echo "PKGDEST=''" >> $XDG_CONFIG_HOME/pacman/makepkg.conf echo "SRCPKGDEST=''" >> $XDG_CONFIG_HOME/pacman/makepkg.conf @@ -74,7 +74,7 @@ it_stages_packages_without_PKGDEST() { if $nochroot; then makepkg else - testsudo libremakepkg -l "$roundup_test_name" + testdoas libremakepkg -l "$roundup_test_name" fi librestage repo1 diff --git a/test/test-common.sh b/test/test-common.sh index 3f3763cb..e46872fd 100644 --- a/test/test-common.sh +++ b/test/test-common.sh @@ -36,8 +36,8 @@ before() { after() { common_after killall gpg-agent &>/dev/null || true - if [[ -f "$tmpdir/.used-sudo" ]]; then - sudo rm -rf -- "$tmpdir" "$XDG_CONFIG_HOME" "$XDG_CACHE_HOME" + if [[ -f "$tmpdir/.used-doas" ]]; then + doas rm -rf -- "$tmpdir" "$XDG_CONFIG_HOME" "$XDG_CACHE_HOME" else rm -rf -- "$tmpdir" "$XDG_CONFIG_HOME" "$XDG_CACHE_HOME" fi @@ -62,12 +62,12 @@ setup_chrootdir() { _cleanup_chrootdir() ( chrootdir=$1 shopt -s nullglob - if [[ $SUDO ]]; then + if [[ $DOAS ]]; then if [[ "$(stat -f -c %T "$chrootdir")" == btrfs ]]; then - sudo find "$chrootdir" -depth -inum 256 -exec \ + doas find "$chrootdir" -depth -inum 256 -exec \ btrfs subvolume delete {} \; &>/dev/null fi - sudo rm -rf -- "$chrootdir" + doas rm -rf -- "$chrootdir" else rm -rf -- "$chrootdir" fi @@ -79,8 +79,8 @@ require() ( if libremessages in_array "network" "$@" && ! [[ $NETWORK ]]; then missing+=('networking') fi - if libremessages in_array "sudo" "$@" && ! [[ $SUDO ]]; then - missing+=('sudo') + if libremessages in_array "doas" "$@" && ! [[ $DOAS ]]; then + missing+=('doas') fi if libremessages in_array "btrfs" "$@" && ! [[ "$(stat -f -c %T "$chrootdir" 2>/dev/null || true)" == 'btrfs' ]]; then missing+=('btrfs') @@ -89,8 +89,8 @@ require() ( libremessages warning "Next test requires %s; Skipping (passing)..." "$(echo "${missing[*]}"|sed 's/ /, /g')" &>/dev/tty return 1 fi - if libremessages in_array "sudo" "$@"; then - touch "$tmpdir/.used-sudo" + if libremessages in_array "doas" "$@"; then + touch "$tmpdir/.used-doas" fi return 0 ) diff --git a/test/testenv b/test/testenv index 7072326b..6c8860a2 100755 --- a/test/testenv +++ b/test/testenv @@ -2,18 +2,18 @@ # Parse the arguments NETWORK=true -SUDO=true +DOAS=true while [[ $# -gt 0 ]]; do case "$1" in --no-network) shift; unset NETWORK;; --network) shift; NETWORK=true;; - --no-sudo) shift; unset SUDO;; - --sudo) shift; SUDO=true;; + --no-doas) shift; unset DOAS;; + --doas) shift; DOAS=true;; --) shift; break;; *) break;; esac done -export NETWORK SUDO +export NETWORK DOAS if [[ $# == 0 ]]; then echo 'You need to run testenv with arguments!' >&2 @@ -48,22 +48,22 @@ export XDG_CONFIG_HOME="$HOME/.config" export _librelib_conf_sh_sysconfdir="$destdir/etc" export _librelib_conf_sh_pkgconfdir="$destdir/etc/libretools.d" -# Hack to respect our variables in sudo -_sudo() { +# Hack to respect our variables in doas +_doas() { local vars=(TMPDIR PATH LIBRETOOLS_LIBDIR XDG_CACHE_HOME XDG_CONFIG_HOME _librelib_conf_sh_sysconfdir) local args=() local var for var in "${vars[@]}"; do args+=("$var=${!var}") done - sudo env "${args[@]}" "$@" + doas env "${args[@]}" "$@" } printf '%s\n' \ '#!/bin/bash' \ - "$(declare -f _sudo)" \ - '_sudo "$@"' \ - > "$destdir/usr/bin/testsudo" -chmod 755 "$destdir/usr/bin/testsudo" + "$(declare -f _doas)" \ + '_doas "$@"' \ + > "$destdir/usr/bin/testdoas" +chmod 755 "$destdir/usr/bin/testdoas" # Run the tests eval "$@"