Führen Sie mit apt-get ein Downgrade von GCC auf ältere Versionen durch

1

Aus bestimmten Gründen muss ich mein GCC mithilfe von auf Version 2.x downgraden apt-get(ohne die Quelle herunterzuladen und zu kompilieren).

Ist das möglich? Wenn ja, wie kann ich die Repository-Adresse finden und über installieren apt-get?

Danke im Voraus.

Afshin Mehrabani
quelle
Dies hängt von der Version der Distribution ab, auf der Sie sich aufgrund von Bibliotheksabhängigkeiten befinden. Abgesehen davon ist es auch am besten, ältere Versionen von gcc parallel zu installieren, anstatt ein Downgrade durchzuführen, und die Umgebungseinstellungen zu verwenden, um zu erzwingen, dass gcc kompiliert wird, um den älteren gcc zu verwenden. Angesichts der Zeitspanne, in der gcc 2.x nicht mehr unterstützt wird, wird dies eine Herausforderung sein, und selbst wenn es Ihnen gelingt, es zu installieren, wird das Ersetzen des Systems gcc andere Probleme verursachen.
Stephanie
Wenn Sie dies etwas genauer untersuchen, ist die 2.x-Reihe in modernen Distributionen möglicherweise überhaupt nicht verwendbar. Es wurde im Kernel schon lange nicht mehr unterstützt ( lwn.net/Articles/163881 ) und was immer Sie damit kompilieren möchten , hat wahrscheinlich Abhängigkeiten, die auch nicht befriedigt werden können. WENN die Software, die Sie kompilieren müssen, nicht aktualisiert werden kann, um sie auf einem neueren gcc und mit neueren Bibliotheken zu kompilieren, ist es möglicherweise Ihre beste Option, sie statisch in einer Chroot der zuletzt unterstützten Distribution zu kompilieren. Gcc 2.x
Stephanie
@Stephanie Wie kann ich v2.x in anderen Versionen installieren?
Afshin Mehrabani
Ich denke, es wird Probleme mit der ABI-Kompatibilität und der "De4Pendency-Hölle" geben, die es so gut wie unmöglich machen werden, das heißt, es wird viel einfacher sein, Software zu aktualisieren, um auf einer modernen Version von gcc aufzubauen, als es sein wird Holen Sie sich eine Version von gcc 2.x, um brauchbare Binärdateien auf einer modernen Distribution zu installieren und zu produzieren. Das Problem ist, dass Sie hier nicht nur gcc 2.x benötigen, sondern auch alle erforderlichen Abhängigkeiten und alle Abhängigkeiten, die die zu erstellende Anwendung benötigt, und diese Dinge wurden in mehr als 9 überhaupt nicht beibehalten Jahre.
Stephanie

Antworten:

1

Was Sie fragen, ist praktisch unmöglich, und in den nächsten Absätzen finden Sie eine Erklärung des Warum und einige mögliche Problemumgehungen.

Während gcc, glibc, der Linux-Kernel und andere verschiedene Systembibliotheken nicht so eng miteinander verbunden sind wie in FreeBSD und OpenBSD, haben sie eine parallele Entwicklung. Als die letzten Support-Ausfälle für gcc 2.95 im Jahr 2005 im Kernel ausfielen, wurde dies auch in den zentralen Systembibliotheken unterstützt.

Nur eine 2.x-Version von gcc auf einem modernen System zu installieren, wäre aufgrund aller damit verbundenen Abhängigkeiten eine erhebliche Hürde - es hängt von älteren Versionen der Systembibliotheken ab, von denen die Linux-Community vor langer Zeit ausgegangen ist und eine Situation von erstellt hat "Hölle der Abhängigkeiten", selbst wenn Sie von der Quelle aus installieren, und erst recht nicht von Paketen aus - die Abhängigkeiten allein würden Sie wahrscheinlich zwingen, ein Downgrade über ein Dutzend Generationen oder mehr Ihrer Linux-Distribution auf eine Version durchzuführen, die nicht nur nicht mehr unterstützt wird, sondern auch auch schrecklich unsicher.

Nach der Installation von gcc haben Sie immer noch das Problem, dass Ihre Anwendung kompiliert werden muss. Die Systembibliotheken haben sich genauso stark oder stärker geändert als die von gcc, sodass Sie diesen Vorgang für Dutzende erneut durchführen müssen. vielleicht Hunderte anderer Abhängigkeiten. All diese Abhängigkeiten werden natürlich bereits an anderer Stelle im System verwendet, sodass keine vernünftige Möglichkeit besteht, die richtigen Versionen davon zu installieren.

Sie sehen sich wahrscheinlich Tausende, möglicherweise Hunderttausende von Arbeitsstunden an, bevor Sie die Chance haben, alle Teile wieder zum Laufen zu bringen, und auf dem Weg dorthin hätten Sie Ihr System in etwas verwandelt, das so unhaltbar und instabil ist, dass es sogar funktioniert Ein Neustart des Systems wäre eine Übung in blindem Glauben, und Sie hätten mehr als ein Jahrzehnt schwerwiegender Sicherheitslücken in Ihrem System wieder eingeführt.

Problemumgehungen

Alle Hoffnung ist jedoch nicht verloren. Die kurzfristigen Lösungen sind eine Chroot oder Virtualisierung. Eine der Antworten von https://stackoverflow.com/questions/8176798/installing-gcc-2-95-3-in-ubuntu-10-04-3 erwähnt, dass Debian Etch eine der letzten Distributionen war, die gcc unterstützt haben 2,95. Das Erstellen einer Chroot von Debian Etch oder einer virtuellen Maschine sollte möglich sein. Diese Distribution hat zuletzt 2010 Sicherheitsunterstützung erhalten, sodass Sie immer noch nach Sicherheitslücken im Wert von 4 Jahren suchen.

Die alten Versionen von Debian, die Sie dafür benötigen würden, sind nur unter https://archive.debian.org/debian zu finden, da sie zu diesem Zeitpunkt überhaupt nicht mehr gepflegt werden.

Debootstrap ( https://wiki.debian.org/Debootstrap ) scheint weiterhin in der Lage zu sein, Etch zu installieren, was es ermöglicht, eine funktionierende Chroot zu erstellen, in der Sie alte Software kompilieren und ausführen können.

Angesichts der Auswirkungen auf die Sicherheit muss die langfristige Lösung darin bestehen, den Code so schnell wie möglich zu aktualisieren, damit er auf einer modernen, derzeit unterstützten Distribution kompiliert werden kann. Dies ist absolut wichtig, es sei denn, die betreffende Software wird für einen einmaligen Zweck verwendet, z. B. für die Wiederherstellung von Daten aus einer älteren Version eines Programms.

Eine praktikable Lösung, um diesen Portierungsprozess handhabbar zu machen, könnte darin bestehen, schrittweise voranzukommen, voranzukommen und die Kompilierungsprobleme für jede dazwischenliegende Debian-Veröffentlichung zu beheben, bevor der Code für die neueste Ubuntu-Veröffentlichung endgültig aktualisiert wird. Da Debian einen viel längeren Veröffentlichungszyklus als Ubuntu und eine anständige Vorwärtskompatibilität aufweist, sollte dies keine zu unüberwindliche Aufgabe sein und wird mit ziemlicher Sicherheit praktikabler sein, als gcc 2.x auf das neueste Ubuntu zu portieren.

Bearbeiten: Etch ist eigentlich perfekt für einen Großteil der Portierungsbemühungen - es unterstützt Versionen von gcc von 2,95 bis 4,1, wodurch es möglich ist, Ihren alten Code in kleinen Schritten zu aktualisieren.

Stephanie
quelle