Moin, hatte ich auch. gcc7 vom Aktualisierungs-Repo (OSS) und gcc8 anfangs vom devel:/gcc. Erst ging es nicht, dann ging es. Möglicherweise hatte ich danach den gcc8 vom Aktualisierungs-Repo. Dort tauchte er später auf.
Jetzt hab ich den gcc9 aus devel:/gcc installiert und alle Einträge in /etc/alternatives sind weg :-/ Auch de- und neuinstallieren schaffte keine Abhilfe...
Habe ein kleines Script geschrieben das alle installierten rpms durchsucht die mit cpp/gcc beginnen gefolgt von 1-2 Zahlen. Ist noch nicht sonderlich getestet, hat bei mir aber alles richtig gemacht. gcc10 dürfte nicht mehr lange auf sich warten, sowas ist aber noch nicht getestet. mit gcc7/8/9 funzt es.
Die Pakete werden nach /bin und /usr/bin-Binäries durchsucht und mit update-alternatives --install gesetzt. Als Priorität wird Version*10/2 gerechnet, die man-pages werden als
--slaves angehangen. Siehe man update-alternatives.
Bei Aufruf als normaler User spuckt es ein bash-script aus. Am besten in eine Datei umleiten und prüfen. Dann diese erzeugte Datei als root ausführen.
Als root werden die befehle direkt ausgeführt.
Das Script ist nicht sonderlich getestet, habe es gestern geschrieben. Also besser als normaler User ausführen und prüfen!
Auch gibt es evtl. Ärger wenn noch Einträge in /etc/alternatives/ vorhanden sind. Evtl. vorher löschen.
Bei mir war alles weg. Mit ls /etc/alternatives war nichts zu finden und update-alternatives --query gcc fand auch nichts
Bei ./make_alternatives-gcc.sh -A sucht das script selbst nach Paketen,
bei ./make_alternatives-gcc.sh gcc8-c++ cpp8 gcc8 z.B. werden nur diese drei Pakete verarbeitet. Nur Pakete mit Version angeben, keine generischen. Also gcc8 ist ok, gcc ist falsch. dürfte aber nichts passieren.
Mein erster Beitrag. Ich sehe keine Vorschau-Funktion :-/
Das bash-Script:
PS: Mein Englisch ist grausam, aber wenigstens 'ne Hilfs-Option mit -h/--help
#!/bin/bash
shopt -s extglob
auto_rpms_regex='^(cpp|gcc)[1-9][0-9]?'
args=$@
ret=0
if test -z $args; then
echo "error: no arguments! See --help" 1>&2
args[0]="-h"
ret=1
fi
for i in $args; do
if test -z "$rpms"; then
case "$i" in
-h|--help)
echo "Usage: $0 [-f | --force] RPMs... - create alternatives."
echo " $0 [-h | --help] - show this help."
echo
echo "Options: -f|--force - no skipping package if /etc/alternatives"
echo " found in the rpm."
echo " -A|--automatic - search with '$auto_rpms_regex'-regex."
echo " in the rpm-db."
echo " -p|--print - only show the matching rpms. nothing changes."
echo
echo "RPMs = -A|--automatic OR list of rpms like gcc8 cpp7 etc."
echo "Note: no generic rpms like cpp gcc etc"
echo
echo "Example: $0 -A processing all mathing rpms"
echo " $0 -fA if an /et/alternatives/-dir found in the actual"
echo " processing package, no skip this rpm. Attention!"
echo " $0 -p only show matching packages, See -A"
exit $ret
;;
-f|--force)
force=true
;;
-A|--automatic)
auto=true
;;
-Af|-fA)
auto=true
force=true
;;
-p|--print)
rpm -qa | grep -E "$auto_rpms_regex"
exit 0
;;
-*|--*)
echo "error: bad option! See --help" 1>&2
exit 1
;;
*)
rpms="$i"
;;
esac
else
case "$i" in
-*|--*)
echo "error: bad usage! See --help" 1>&2
exit 1
;;
*)
rpms="$rpms $i"
;;
esac
fi
done
ret=0
if test "$auto" = "true"; then
if test -n "$rpms"; then
echo "error: -A OR rpms! See --help." 1>&2
exit 1
fi
rpms=$(rpm -qa | grep -E "$auto_rpms_regex")
else
if test -z "$rpms"; then
echo "error: no rpms! See --help." 1>&2
exit 1
fi
fi
echo "#!/bin/bash"
update_alt_bin=$(type -P update-alternatives)
if test -z "$update_alt_bin"; then
echo "error: update-alternatives not found!" 1>&2
update_alt_bin="echo"
fi
declare -A inst_alt generic_names
for i in $rpms; do
echo -n "# processing $i..."
rpms_found=$(rpm -ql $i | grep -E '/usr/bin/|/bin/')
for n in $rpms_found; do
if test "${n}:0:18" = "/etc/alternatives/"; then
if test "$force" = "true"; then
continue 1
else
echo "found /etc/alternatives/ - skipping"
continue 2
fi
fi
done
for n in $rpms_found; do
full_path=$n
full_generic_path=${n%-+([0-9])}
full_name=${n##?*/}
name=${full_name%-+([0-9])}
pri=${full_name##?*-}
if test -z "${pri##+([0-9])}"; then
pri=$((pri*10/2))
inst_alt["$full_name"]=" --install $full_generic_path $name $full_path $pri"
generic_names["$full_name"]="$name"
fi
done
for full_path in $(rpm -ql $i | grep -E '/usr/share/man/'); do
tmp=${full_path##/?*man}
sec=${tmp%%/?*}
page_full_name=${tmp#$sec/}
page_name=${page_full_name%.$sec.?*}
if test -n "${inst_alt[$page_name]}"; then
suffix=${page_full_name##$page_name.$sec}
man_path=${full_path%/$page_full_name}
tmp2=${man_path#/}
page_alt_name="${tmp2//\//-}-${generic_names[$page_name]}"
generic_path="$man_path/${generic_names[$page_name]}.$sec$suffix"
inst_alt["$page_name"]="${inst_alt["$page_name"]} --slave $generic_path $page_alt_name $full_path"
fi
done
echo "ok."
done
echo -e "# result:\n"
for i in "${inst_alt[@]}"; do
if test "$update_alt_bin" = "echo"; then
echo "update-alternatives $i"
else
echo "$update_alt_bin $i"
$update_alt_bin $i
fi
done
ret=0
$update_alt_bin --query gcc >/dev/null 2>&1
ret=$?
if test $ret -eq 0; then
cc_install=" --install /usr/bin/cc cc /usr/bin/gcc 200 --slave /usr/share/man/man1/cc.1.gz usr-share-man-man1-cc /usr/share/man/man1/gcc.1.gz"
if test "$update_alt_bin" = "echo"; then
echo "update-alternatives $cc_install"
else
echo "$update_alt_bin $cc_install"
$update_alt_bin $cc_install
fi
fi
Alles anzeigen
hth,
dirkski