update-alternatives bei gcc

Hinweis: In dem Thema update-alternatives bei gcc gibt es 11 Antworten auf 2 Seiten. Der letzte Beitrag () befindet sich auf der letzten Seite.
  • Hallo,


    irgendwann hatte ich es mal geschafft bei meinem 15.0 gcc7 und gcc8 parallel zu installieren und
    per "update-alternatives" umschaltbar zu machen.


    Jetzt geht das nicht mehr richtig (warum auch immer).
    Geschaltet wird nur gcc, also der zeigt bei --version das richtige an, aber cc und c++ bleiben immer auf der Version 7.
    Gibt es für update eigentlich irgendwo eine config Datei die ich manuell ändern kann oder sitzt das alles in einer Datenbank ?


    Ulli

    Für den Inhalt des Beitrages 132978 haftet ausdrücklich der jeweilige Autor: beeblebrox

  • 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 :)




    hth,
    dirkski

    Einmal editiert, zuletzt von dirkski ()

    Für den Inhalt des Beitrages 133608 haftet ausdrücklich der jeweilige Autor: dirkski

  • Hier der Output bei mir als normaler User. Dann kommt eine Fehlermeldung. Das ist normal weil das script update-alternatives nicht findet, sie wird nach stderr geschrieben. Stört also nicht wenn man die Ausgabe in eine Datei umleitet, daher hier im Output nicht vorhanden. Aufruf war ./make_alternatives-gcc.sh -A :


    hth,
    dirkski

    Für den Inhalt des Beitrages 133609 haftet ausdrücklich der jeweilige Autor: dirkski

  • Hier mal die Art, wie man ein update-alternatives für gcc anlegt (bitte # und nachfolgend nicht eingeben, ist nur ein Kommentar):

    Quelle:
    User:Tsu2/gcc update-alternatives - openSUSE Wiki

    Für den Inhalt des Beitrages 133610 haftet ausdrücklich der jeweilige Autor: Sauerland

  • Selbiges ist natürlich auch für cc, c++ oder g++ möglich.

    Für den Inhalt des Beitrages 133611 haftet ausdrücklich der jeweilige Autor: Sauerland

  • Guten Morgen!
    Ja, nach der Quelle habe ich mich gerichtet und die links werden so aufgebaut. Es wird noch nach den passenden man-pages geschaut und als --slave dran gehangen. Nur der Eintrag für 'cc' habe ich von Hand am Ende des Scripts angefügt. Mit der Priorität viel mir gerade nichts besseres ein.... neuer = höhere Priorität. So brauch ich das hier. Hab allerdings momentan wenig Zeit um am Script weiter zu arbeiten. Grobe Fehler werde ich aber direkt beseitigen, einfach melden.


    hth

    Für den Inhalt des Beitrages 133613 haftet ausdrücklich der jeweilige Autor: dirkski

  • Habe schon ne Idee für eine Verbesserung:


    Momentan werden aus einem rpm (hier als Beispiel gcc7) mehrere master-Einträge mit slave für die man-pages erstellt:



    Ich werde das dahingehend ändern das alle Binäries pro rpm-Paket unter einem master als slaves auftauchen. Wenn man dann den gcc z.B per update-alternatives --config gcc ändert werden auch alle weiteren binarys aus dem rpm geändert...


    Hier in dem Fall dann gcc-nm gcov etc....


    Momentan müsste man dann alles von Hand durchgehen, nicht schön...


    cu

    Für den Inhalt des Beitrages 133615 haftet ausdrücklich der jeweilige Autor: dirkski

  • Selbiges ist natürlich auch für cc, c++ oder g++ möglich.

    Wenn man jetzt den obigen update-alternatives --install Befehl etwas abändert, geht das auch mit update-alternatives:

    Code
    update-alternatives --install /usr/bin/gcc gcc  /usr/bin/gcc-7 50 --slave /usr/bin/g++ g++ /usr/bin/g++-7 --slave /usr/bin/c++ c++ /usr/bin/g++-7 --slave /usr/bin/cc cc /usr/bin/gcc-7
    update-alternatives --install /usr/bin/gcc gcc  /usr/bin/gcc-8 20 --slave /usr/bin/g++ g++ /usr/bin/g++-8 --slave /usr/bin/c++ c++ /usr/bin/g++-8 --slave /usr/bin/cc cc /usr/bin/gcc-8

    Mit update-alternatives --config gcc werden dann 4 Programme umgestellt:gcc, c++, g++ und cc jeweils auf das entsprechende Pendant.

    Für den Inhalt des Beitrages 133618 haftet ausdrücklich der jeweilige Autor: Sauerland

  • Jup. Hab das Script jetzt fertig. Muss noch aufräumen. Macht alles automatisch.... Direkt aus den rpms


    Sowas kommt raus:

    Ergebnis:



    Mit einer Umstellung werden alle binarys und man-pages mit geändert.....


    Muss das Script noch aufräumen und etwas testen. Dann setzte ich das hier rein....


    hth

    Für den Inhalt des Beitrages 133622 haftet ausdrücklich der jeweilige Autor: dirkski

  • So funzt es erstmal gut...


    Aufruf mit ./make_alternatives-gcc.sh -A >make_alt.sh und dann die erzeugte Datei prüfen.
    Wenn alle ok ist als root bash make_alt.sh aufrufen...


    Ich hänge noch ein gekürztes Output an...

    Für den Inhalt des Beitrages 133642 haftet ausdrücklich der jeweilige Autor: dirkski