Sollte ich die CentOS-Paketversion in den (offiziellen) Repositorys oder die neuesten stabilen Versionen der Pakete verwenden?

9

Dies ist eine offene Frage, aber ich möchte eine konstruktive und hilfreiche Diskussion zu diesem Thema haben.

Um die Frage zu klären: Auf einem Server mit CentOS 7 (oder einer anderen Linux-Distribution / -Version) Ist es am besten, die Paketversion im Base / EPEL-Repo beizubehalten, oder ist es in Ordnung, die neueste stabile Version zu erhalten die Paketseite bilden? In diesem Fall beziehe ich mich genauer auf Pakete wie nginx, MariaDB und PHP 7. Welche Vor- und Nachteile hätte die Installation von nginx 1.8.0 gegenüber der EPEL-Version 1.6.3? Gibt es Leistungsunterschiede oder Sicherheitsrisiken?

Alle Diskussionen und Erfahrungen sind willkommen. Bitte versuchen Sie, Ressourcen und Fakten zu zitieren.

GiggleSquid
quelle
4
Ich würde es vermeiden, über ein vom Betriebssystem bereitgestelltes Paket zu installieren . Erstens wissen Sie nicht genau, welche Anpassungen der Distributionsanbieter vorgenommen hat - Speicherort der Konfigurationsdatei usw. Was passiert beispielsweise, wenn Sie nginx 1.8.0 über die von der Distribution bereitgestellte Version 1.6.3 und dann über die Distribution installieren springt auf 1.9.9? Was wird das mit Ihrer benutzerdefinierten Installation tun? Im Allgemeinen - schrauben Sie nichts mit dem Betriebssystem , es sei denn, Sie möchten sich dazu verpflichten, Ihre angepasste Betriebssysteminstallation für die gesamte Lebensdauer des Servers beizubehalten . Installieren Sie eine spätere Version einer vom Betriebssystem bereitgestellten Anwendung in /usr/localoder ähnlich.
Andrew Henle
Das ist ein guter Punkt, meine Antwort darauf wäre: Nehmen wir zum Beispiel wieder nginx, wobei der neueste Stable 1.8.0 und die neueste Legacy-Version 1.6.3 ist. Was ist, wenn in der Distributionsversion von 1.6.3 ein Sicherheitsfehler entdeckt wird? ?
GiggleSquid
5
Red Hat : Wenn Sicherheitslücken entdeckt werden, muss die betroffene Software aktualisiert werden, um potenzielle Sicherheitsrisiken zu begrenzen. Wenn die Software Teil eines Pakets in einer derzeit unterstützten Red Hat Enterprise Linux-Distribution ist, verpflichtet sich Red Hat, Inc., aktualisierte Pakete zu veröffentlichen, mit denen die Sicherheitsanfälligkeit so schnell wie möglich behoben wird. ... (Fortsetzung)
Andrew Henle
5
Ankündigungen zu einem bestimmten Sicherheits-Exploit werden häufig von einem Patch (oder Quellcode, der das Problem behebt) begleitet. Dieser Patch wird dann auf das Red Hat Enterprise Linux-Paket angewendet, vom Red Hat-Qualitätssicherungsteam getestet und als Errata-Update veröffentlicht . ... Planen Sie, sich für alles anzumelden, was dazu gehört?
Andrew Henle

Antworten:

9

Im Allgemeinen bemühe ich mich sehr, Systemstandardpakete zu verwenden.

Dies ist jedoch manchmal nicht möglich. Um eine fundierte Entscheidung zu treffen, mussten Sie folgende Fragen beantworten:

  1. Bieten die Pakete der Distribution die Funktionen, die Sie benötigen? In diesem Fall müssen Sie nicht einmal nach anderen Paketen suchen. Verwenden Sie einfach die Pakete, die von System-Repositorys bereitgestellt werden.
  2. Benötigen Sie offizielle Unterstützung und / oder mussten Sie bestimmte Richtlinien einhalten? In diesem Fall können Sie kein inoffizielles Repository verwenden . In diesem Fall verwenden Sie wahrscheinlich die falsche Distribution für Ihr Softwareprojekt.
  3. Wenn die Antwort auf die vorherigen Fragen "Nein" war, mussten Sie nach einer neueren Softwareversion suchen. Gibt es ein bekanntes Repository mit dem erforderlichen Paket? Wenn ja, benutze es.
  4. Wenn keine spezifischen, seriösen Repositorys vorhanden sind, mussten Sie die Upstream-Software verwenden. Versuchen Sie in diesem Fall sehr, gepackte Software (z. B. RPM, DEB, ecc) anstelle von einfachem tar.gz (oder ähnlichem) zu verwenden.
Shodanshok
quelle
3
Eine andere Sache, die Sie hinzufügen können: Nachteil. Weiß Ihr Arbeitgeber (falls zutreffend), dass Sie dies mit Unternehmenssystemen tun, insbesondere wenn diese für die Unterstützung bezahlen? Unter anderem kann es rechtliche Gründe geben, warum ein Unternehmen eine unterstützte Distribution verwendet, und das Rollen Ihrer eigenen Distribution kann das Unternehmen sehr wohl für Haftungsprobleme öffnen, wenn beispielsweise Benutzerdaten geschützt werden müssen. Wenn Ihr nicht unterstütztes, zu Hause installiertes Paket Benutzerdaten verliert, weil Sie eine Sicherheitsupdase verpasst haben, können Sie nicht mehr auf Red Hat verweisen und sagen: "Wir haben das Betriebssystem ausgeführt und sie bezahlt, um es auf dem neuesten Stand zu halten."
Andrew Henle
6

Die Antworten von Matthew Ife und Shodanshok decken die Probleme im Allgemeinen ab, aber ich möchte auf Ihr spezifisches Anliegen eingehen, indem ich die Probleme in einen Kontext setze, da ich genau diese Art von Systemen verwalte.

Mein aktueller Build für die Bereitstellung von PHP / MySQL-Webanwendungen ist:

Lassen Sie uns zunächst überlegen, warum wir eine bestimmte Distribution oder ein bestimmtes Paket auswählen. Entweder legen wir Wert auf Stabilität gegenüber den neuesten Funktionen oder auf die neuesten Funktionen gegenüber Stabilität. Es ist im Allgemeinen nicht möglich, beide in derselben Distribution zu haben, da die Stabilisierung der Software Zeit benötigt, um Fehler zu beheben, und das Hinzufügen neuer Funktionen zu Fehlern und damit zu Instabilität führt.

Generell möchte ich, dass das Betriebssystem, auf dem die Anwendung ausgeführt wird, so stabil wie möglich ist, aber über einen angemessen modernen Funktionsumfang verfügt. Daher werde ich CentOS 7 anstelle von CentOS 6 wählen, das zu diesem Zeitpunkt ziemlich alt ist, und obwohl es funktioniert , hat es nicht mehr so ​​viel Zeit im Support-Lebenszyklus, sodass ich es nicht für ein neues Projekt verwenden werde .

Dann stieß ich jedoch auf das Problem, dass die in CentOS enthaltene Version von Nginx zu alt war und nicht über die erforderlichen Funktionen und Fehlerbehebungen verfügte. Daher habe ich nach alternativen Paketen gesucht und festgestellt, dass nginx.org ihre eigenen vertreibt. Ich bin fast sofort zu ihnen gewechselt und habe festgestellt, dass sie auf lange Sicht vollkommen stabil sind.

Dann gibt es PHP. Ich weiß aus der Geschichte, dass die mit CentOS gelieferte Version von PHP die einzige Version sein wird, die es jemals gibt, und nur Sicherheitsupdates erhalten wird. Keine neuen Funktionen oder Fehlerbehebungen. Sobald der Support nicht mehr unterstützt wird, kann ich möglicherweise keine modernen PHP-Webanwendungen mehr ausführen, wenn ich diese Pakete verwende. Daher ist es auch notwendig, diese zu ersetzen.

Aus langjähriger Erfahrung habe ich gelernt, dass es am besten ist, Bugfix-Releases mit PHP zu verfolgen, nicht nur an einem Punkt einzufrieren und nur Sicherheitskorrekturen vorzunehmen, da die von mir ausgeführten Webanwendungen ebenfalls aktualisiert werden und diese Bugfixes benötigen. Nachdem ich viele verschiedene Sätze von PHP-Paketen evaluiert hatte, entschied ich mich für Remis Pakete. Remi ist zufällig ein Red Hat-Mitarbeiter und auch für die PHP-Pakete in RHEL / CentOS verantwortlich. Ich weiß also, dass seine Pakete von hoher Qualität sein werden, und das war es auch. Sie sind Ersatz für die Systempakete und funktionieren einwandfrei.

Endlich kommen wir zu MariaDB. Sie können die Systempakete hier aufbewahren und keine negativen Auswirkungen haben. Ich habe mich für den Wechsel zu MariaDBs 10.0-Paketen entschieden (und werde bald auf 10.1 umsteigen), um TokuDB und einige andere Leistungsverbesserungen zu nutzen, die in der mit CentOS gelieferten 5.5-Version nicht verfügbar sind und für die es niemals größere Upgrades erhalten wird.


Insgesamt benötigen Sie Stabilität in Ihrem Basissystem, aber Web-Apps ändern sich viel schneller als beispielsweise Branchen-Software, und Ihr Server muss Schritt halten. Daher habe ich gezielte Punkte ausgewählt, an denen das Aktualisieren von Paketen mit geringem zusätzlichen Verwaltungsaufwand (auch bekannt als Arbeit) deutliche Vorteile bringt.

Michael Hampton
quelle
5

Die kurze Antwort lautet: Verwenden Sie immer das, was von den System-Repositorys bereitgestellt wird. Seien Sie sehr vorsichtig, welche Repositorys Sie ebenfalls installieren. Einige sind einfach nur schlecht.

Sie sollten die Systempakete nicht mit neueren Versionen überschreiben. Redhat wurde sehr sorgfältig entworfen und orchestriert, und es kann zu seltsamen Fehlern oder Problemen kommen, wenn Sie dies tun.

Einige Dinge, die zu beachten und zu beachten sind, können Probleme verursachen.

  1. Einige Repositories sind einfach schlecht gewartet. Sie werden nicht mit Sicherheitskorrekturen für Pakete aktualisiert.
  2. Leute neigen dazu, schlechte RPMs zu schreiben. Sie markieren Konfigurationsdateien nicht als Konfigurationsdateien, wodurch Ihre Konfiguration bei jedem Update überschrieben wird, was zu Problemen führen kann. Ich habe dieses Problem schon einmal gesehen.
  3. Sie deklarieren ihre Abhängigkeiten nicht ausreichend. Ich habe dies auch schon einmal gesehen, als ein phpPaket auf das System gestellt wurde, aber das pearPaket, das Probleme verursachte, nicht aktualisiert hat .
  4. Die Installation mehrerer Repositorys mit denselben Paketnamen kann zu unvorhergesehenen Abhängigkeitsproblemen auf Ihrem System führen.
  5. Einige Pakete überschreiben oder schreiben Systemkonfigurationsdateien neu, von denen andere Pakete abhängen oder deren Existenz erwartet wird. Dies führt zu Problemen mit anderen Paketen, die Sie möglicherweise nicht erwarten.

Erstellen Sie niemals Pakete aus dem Quellcode und installieren Sie sie über den vorhandenen Paketen. Dies beeinträchtigt die Integrität Ihres Systempakets, was zu seltsamen ABI-Problemen wie Empfang unresolved symboloder undefined referenceNachrichten führen kann. Es ist sehr wichtig, dass das System einen zuverlässigen und genauen Index darüber erstellt, welche Software auf einem bestimmten System bereitgestellt wurde, um sicherzustellen, dass alles ordnungsgemäß miteinander funktioniert. Aus diesem Grund verwenden wir in erster Linie RPMs.

Der praktikable (und von Redhat gesegnete) Weg, dies zu lösen, ist die Verwendung von Software-Sammlungen.

www.softwarecollections.org

Es installiert ist Software und seine 'neuen' Abhängigkeiten in seinem eigenen Stammverzeichnis. Dies kann das Anwenden des Pakets in Ihrer Umgebung etwas erschweren, schützt Ihr System jedoch vor seltsamen Fehlern oder Problemen. Außerdem werden die Pakete in einem eigenen Namespace installiert, sodass Sie mehrere Versionen eines Pakets parallel installieren können.

Die Website enthält Anweisungen zum Installieren und Aktivieren dieser Pakete. Sie enthält die meisten Informationen, die bei älteren Versionen von CentOS und Redhat (insbesondere EL6) fehlen. Einige Dinge, die ich von dieser Website erfolgreich verwendet habe.

  • MySQL 5.6 und MySQL 5.7, MariaDB.
  • PHP 5.5 und PHP 5.6
  • Apache 2.4

Beachten Sie, dass Ihre Standardposition in dieser Angelegenheit darin bestehen sollte, nicht von dem anzupassen, was die Redhat-Repositorys vorantreiben. Machen Sie stattdessen eine Beurteilung, ob Sie wirklich eine aktualisierte Version eines Pakets benötigen, insbesondere was Ihre spezifischen Anforderungen sind, welche Probleme es beheben soll und welche Risiken es mit sich bringt.

Wenn Sie ständig aktualisierte Software benötigen und / oder mehrere parallele Versionen derselben Pakete benötigen, damit die Dinge funktionieren, ist dies in der Regel ein Indikator dafür, dass Sie etwas falsch machen.

Matthew Ife
quelle
1
Einige Systempakete, wie z. B. Benutzeranwendungen, können sicher und ohne negative Auswirkungen durch neuere Versionen ersetzt werden, wenn der Packager weiß, was er tut . Es ist jedoch nicht sicher, Bibliotheken auf diese Weise zu aktualisieren . Der Versuch, dies zu tun, verursacht die von Ihnen erwähnten ABI-Fehler. Leider scheint das Wissen darüber, was sicher aktualisiert werden kann und wie es zu tun ist, bei Packagern nicht üblich zu sein. Sogar Red Hat hat dies gelegentlich falsch verstanden . OTOH, Software-Sammlungen sind ein königlicher Schmerz im Arsch zu verwenden ...
Michael Hampton
1
nginxist eines dieser "All-in-One" -Pakete. Dies gilt jedoch insbesondere für httpd(libapr-Abhängigkeiten) und mysql(libmysqlclient-Abhängigkeiten) nicht. Schlechte Updates dieser beiden Pakete haben in pythonund phpfür mich in der Vergangenheit Fehler verursacht . Das Problem hierbei ist, dass es nicht einfach ist zu wissen, wie ein Paket mit einem anderen interagiert, es sei denn, Sie wissen, wonach Sie suchen müssen (Übersetzung: wurde zuvor von ihm gebrannt).
Matthew Ife
2
Sie können so etwas wie MariaDB problemlos aktualisieren, da es eine Kompatibilitätsbibliothek enthält, mit der Programme, die mit der älteren Systemversion verknüpft sind, weiterhin funktionieren können. Sie müssen nur daran denken, das Paket zu installieren (und Sie sollten sich beschweren, wenn Sie dies nicht tun). PHP ist komplexer, da es viele Abhängigkeiten aufweist, die ebenfalls auf dem neuesten Stand gehalten werden müssen. Wenn der Packager dies nicht tut, sind die Pakete schlechter als nutzlos. Da remi auch RHELs PHP-Betreuer ist, weiß er glücklicherweise, was all das ist, und seine Pakete waren in Ordnung.
Michael Hampton