See this message in the thread "Merge /usr/bin & /usr/sbin after upgrade
to F42?" maybe ?
Hope, this helps a bit.
Theo.
-------- Forwarded Message --------
Subject: Re: Merge /usr/bin & /usr/sbin after upgrade to F42?
Date: Mon, 28 Apr 2025 18:03:26 +0200
From: francis.montag...@inria.fr
Reply-To: Community support for Fedora users
<users@lists.fedoraproject.org>
To: Community support for Fedora users <users@lists.fedoraproject.org>
Hi
On Mon, 28 Apr 2025 08:50:39 -0700 "Doug H." wrote:
Does anybody have an opinion on this?
Seeing the postfix bug introduced by that (no sendmail), I wrote the
attached script to finish the merge.
It already worked on a few machines.
--
francis
#!/bin/bash -p
dont () {
if [ "$DONT" ]
then
echo "$@"
else
"$@"
fi
}
bad_usage () {
local name=$1
shift
echo >&2 "\
** ${name##*/}: Uncorrect usage: $*
** Cf: $name --help"
}
#---+ usr-bin-usr-sbin-unification
# Ref:
https://docs.fedoraproject.org/en-US/fedora/latest/release-notes/sysadmin/#usr-bin-usr-sbin-unification
fix-usr-sbin () {
local usage="\
Usage: $FUNCNAME [OPTIONS]
Finishes the unification of /usr/bin and /usr/sbin
During an upgrade to F42, most of the files in /usr/sbin are converted
to symlinks to ../bin/
This command moves the remaining files and links to /usr/bin then defines
/usr/sbin as a symlink to /usr/bin.
Checks are done that no conflicts exist for those files/links like:
- a file must not exist in /usr/bin and /usr/sbin or as a symlink
to /usr/sbin
Options:
--help This help
-n,--dry-run Dry run
"
local -a initargs=( "$@" ) # For eventual re-use
local -A opts
local -a args
while (($# > 0)); do
case $1 in
--help )
echo "$usage"
return 0
;;
-n | --dry-run )
local DONT=true
opts['dry-run']=true
;;
-- ) # End of options
shift
break
;;
-* )
bad_usage $FUNCNAME "Unknown option: $1"
return 2
;;
# Options everywhere
* )
args+=( "$1" )
;;
esac
shift
done
# Arguments back in $@
set -- "${args[@]}" "$@"
local err="$FUNCNAME: *** Error:"
## sanity checks
local releasever=$(rpm -qf --qf '%{version}' /etc/fedora-release \
2> /dev/null)
if ! [ "$releasever" ] || (( releasever < 42 )); then
echo >&2 "$err wrong fedora release: $releasever. Stop"
return 1
fi
## already correct
if [[ "$(readlink /usr/sbin)" = bin ]]; then
echo "$FUNCNAME: /usr/sbin points to bin: nothing to do"
return 0
fi
## files in /usr/sbin
# that dont exist in /usr/bin or as symlink to /usr/sbin
# Exception: /usr/sbin/iconvconfig is not owned by any package
# ldconfig also
local -a files=( $(find /usr/sbin -type f \
! -name iconvconfig \
! -name ldconfig \
-printf '%f\n') )
local file
for file in "${files[@]}"; do
if [ -e /usr/bin/$file ]; then
case "$(readlink /usr/bin/$file)" in
"../../usr/sbin/$file" \
| "../sbin/$file" \
| "/usr/sbin/$file" )
;;
* )
echo >&2 "$err $file exist in /usr/bin and /usr/sbin. Stop"
return 2
;;
esac
fi
done
## links in /usr/sbin but not to ../bin
local -a links=( $(find /usr/sbin -type l ! -lname '../bin*' \
-printf '%f\n') )
local link
for link in "${links[@]}"; do
if [ -e /usr/bin/$link ]; then
echo >&2 "$err $link exist in /usr/bin and /usr/sbin. Stop"
return 2
fi
done
## go
( cd /usr/sbin && dont mv --force "${files[@]}" /usr/bin ) || return
( cd /usr/sbin && dont mv --force "${links[@]}" /usr/bin ) || return
dont mv /usr/sbin /usr/sbin-pre-F42 || return
dont ln -s bin /usr/sbin || return
}
#---+ postfix
fix-postfix-inria () {
local usage="\
Usage: $FUNCNAME [OPTIONS]
Following the /usr/bin /usr/sbin unification, the alternatives for postfix
are broken: sendmail not found
This command attempt to correct that
Options:
--help This help
-n,--dry-run Dry run
"
local -a initargs=( "$@" ) # For eventual re-use
local -A opts
local -a args
while (($# > 0)); do
case $1 in
--help )
echo "$usage"
return 0
;;
-n | --dry-run )
local DONT=true
opts['dry-run']=true
;;
-- ) # End of options
shift
break
;;
-* )
bad_usage $FUNCNAME "Unknown option: $1"
return 2
;;
# Options everywhere
* )
args+=( "$1" )
;;
esac
shift
done
# Arguments back in $@
set -- "${args[@]}" "$@"
if ! rpm -q postfix &> /dev/null; then
echo "$FUNCNAME: postfix is not installed: noop"
return 0
fi
(
[ "$DONT" ] || set -x
dont dnf -y remove --no-autoremove postfix
dont alternatives --remove mta /usr/sbin/sendmail.postfix
dont dnf -y install postfix
dont systemctl enable postfix.service
dont postconf -e relayhost=smtp.inria.fr
dont postconf -e mydomain=inria.fr
)
}
--
_______________________________________________
users mailing list -- users@lists.fedoraproject.org
To unsubscribe send an email to users-le...@lists.fedoraproject.org
Fedora Code of Conduct:
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives:
https://lists.fedoraproject.org/archives/list/users@lists.fedoraproject.org
Do not reply to spam, report it:
https://pagure.io/fedora-infrastructure/new_issue
--
_______________________________________________
users mailing list -- users@lists.fedoraproject.org
To unsubscribe send an email to users-le...@lists.fedoraproject.org
Fedora Code of Conduct:
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives:
https://lists.fedoraproject.org/archives/list/users@lists.fedoraproject.org
Do not reply to spam, report it:
https://pagure.io/fedora-infrastructure/new_issue