Czy powinienem używać wersji pakietu CentOS w (oficjalnych) repozytoriach, czy najnowszych stabilnych wersjach pakietów?

9

To pytanie jest otwarte, ale chciałbym przeprowadzić konstruktywną i pomocną dyskusję na ten temat.

Aby wyjaśnić pytanie: na serwerze z CentOS 7 (lub inną dystrybucją / wersją Linuksa) Czy najlepiej trzymać się wersji pakietu w repozytorium Base / EPEL, czy też jest w porządku, aby uzyskać najnowszą stabilną wersję utworzyć witrynę pakietu? W tym przypadku odnoszę się konkretnie do pakietów takich jak nginx, MariaDB i PHP 7. Na przykład, jakie byłyby zalety i wady instalacji nginx 1.8.0 w wersji EPEL 1.6.3? Czy występują różnice w wydajności lub zagrożenia bezpieczeństwa?

Wszelkie dyskusje i doświadczenia są mile widziane, spróbuj zacytować zasoby i fakty.

GiggleSquid
źródło
4
Chciałbym uniknąć instalowania nad pakietem OS-dostarczone. Po pierwsze, tak naprawdę nie wiesz co, jeśli dostawca mógł dokonać jakichkolwiek dostosowań - lokalizacja pliku konfiguracyjnego itp. Na przykład, co się stanie, jeśli zainstalujesz nginx 1.8.0 na dostarczonej przez niego dystrybucji 1.6.3, a następnie dystrybucji skacze do 1.9.9? Co to stanie się z Twoją niestandardową instalacją? Ogólnie rzecz biorąc - nie wkręcaj się w nic dostarczonego przez system operacyjny , chyba że chcesz zobowiązać się do utrzymania niestandardowej instalacji systemu operacyjnego przez cały okres eksploatacji serwera . W przypadku nowszej wersji aplikacji dostarczanej z systemem operacyjnym zainstaluj ją w /usr/localpodobnej wersji lub podobnej.
Andrew Henle,
To dobra uwaga, moja retorta byłaby następująca: Ponownie weźmy na przykład nginx, najnowszą stabilną wersją jest 1.8.0, a najnowszą starszą wersją jest 1.6.3, co jeśli błąd bezpieczeństwa zostanie wykryty w wersji dystrybucyjnej 1.6.3 ?
GiggleSquid 17.01.16
5
Red Hat : Po wykryciu luk w zabezpieczeniach oprogramowanie, którego dotyczy luka, musi zostać zaktualizowane, aby ograniczyć wszelkie potencjalne zagrożenia bezpieczeństwa. Jeśli oprogramowanie jest częścią pakietu w ramach obecnie obsługiwanej dystrybucji Red Hat Enterprise Linux, Red Hat, Inc. zobowiązuje się do wydania zaktualizowanych pakietów, które jak najszybciej naprawią lukę. ... (ciąg dalszy)
Andrew Henle,
5
Często ogłoszeniom o danym exploicie zabezpieczającym towarzyszy łatka (lub kod źródłowy, który rozwiązuje problem). Ta poprawka jest następnie stosowana do pakietu Red Hat Enterprise Linux, przetestowanego przez zespół zapewnienia jakości Red Hat i wydana jako aktualizacja erraty . ... Czy planujesz zapisać się na to wszystko?
Andrew Henle,

Odpowiedzi:

9

Zasadniczo bardzo staram się używać domyślnych pakietów systemowych.

Jednak czasami nie jest to możliwe. Aby dokonać wykształconego wyboru, musiałeś odpowiedzieć na następujące pytania:

  1. czy pakiety dystrybucji zawierają wymagane funkcje? Jeśli tak, nie musisz nawet szukać innych pakietów; wystarczy użyć pakietów dostarczonych przez repozytoria systemowe.
  2. czy potrzebujesz oficjalnego wsparcia i / lub czy przestrzegałeś określonych zasad? Jeśli tak, nie możesz użyć nieoficjalnego repozytorium . W takim przypadku prawdopodobnie używasz niewłaściwej dystrybucji dla swojego projektu oprogramowania.
  3. jeśli odpowiedź na poprzednie pytania brzmiała „nie”, trzeba było wyszukać nowszą wersję oprogramowania. Czy istnieje dobrze znane repozytorium z wymaganym pakietem? Jeśli tak, użyj go.
  4. jeśli nie istnieją żadne konkretne, renomowane repozytoria, trzeba było użyć oprogramowania źródłowego. W takim przypadku staraj się bardzo mocno używać oprogramowania w pakiecie (np. RPM, DEB, ecc) zamiast zwykłego tar.gz (lub podobnych).
Shodanshok
źródło
3
Kolejna rzecz, którą możesz dodać: Wada. Czy Twój pracodawca (jeśli dotyczy) wie, że robisz to z systemami firmy, zwłaszcza jeśli płaci za wsparcie? Między innymi mogą istnieć prawne powody, dla których firma korzysta z obsługiwanej dystrybucji, a jej wprowadzenie może bardzo dobrze otworzyć firmę na problemy z odpowiedzialnością, na przykład, jeśli dane użytkownika muszą być chronione. Jeśli Twój nieobsługiwany pakiet instalowany w domu wycieka z danych użytkownika, ponieważ przegapiłeś poprawkę zabezpieczeń, nie możesz już wskazywać na Red Hata i powiedzieć: „Uruchomiliśmy ich system operacyjny i zapłaciliśmy im za aktualizację”.
Andrew Henle,
6

Odpowiedzi Matthew Ife i shodanshoka dotyczą ogólnie zagadnień, ale chcę zająć się twoją szczególną troską, umieszczając je w odpowiednim kontekście, ponieważ dokładnie takimi systemami zarządzam.

Moja obecna wersja do wdrażania aplikacji internetowych PHP / MySQL to:

Najpierw zastanówmy się, dlaczego wybieramy konkretną dystrybucję lub zestaw pakietów. Albo cenimy stabilność w porównaniu z najnowszymi funkcjami, albo cenimy najnowsze funkcje w porównaniu ze stabilnością. Zasadniczo nie można mieć obu w tej samej dystrybucji, ponieważ oprogramowanie stabilizujące wymaga czasu na naprawę błędów, a dodanie nowych funkcji wprowadza błędy, a tym samym niestabilność.

Zasadniczo chcę, aby system operacyjny, na którym działa aplikacja, był jak najbardziej stabilny, ale z odpowiednio nowoczesnym zestawem funkcji. Dlatego wybiorę CentOS 7 zamiast CentOS 6, który jest dość stary w tym momencie i chociaż będzie działał , nie ma już tyle czasu w cyklu życia wsparcia, więc nie wykorzystam go do nowego projektu .

Potem jednak natknąłem się na problem polegający na tym, że wersja nginx zawarta w CentOS była zbyt stara i nie zawierała niektórych wymaganych funkcji i poprawek błędów. Poszedłem więc szukać alternatywnych pakietów i odkryłem, że nginx.org dystrybuuje własne. Przełączyłem się na nie prawie natychmiast i znalazłem je idealnie stabilne na dłuższą metę.

Potem jest PHP. Wiem z historii, że wersja PHP dostarczana z CentOS będzie jedyną wersją, jaką kiedykolwiek dostanie, i będzie otrzymywać tylko aktualizacje bezpieczeństwa; brak nowych funkcji lub poprawek błędów. Tak więc, gdy przestanie być obsługiwany w górę, ostatecznie nie będę mógł uruchamiać nowoczesnych aplikacji PHP, jeśli użyję tych pakietów. Dlatego należy je również wymienić.

Z długiego doświadczenia nauczyłem się, że najlepiej śledzić wydania poprawek za pomocą PHP, a nie tylko zawieszać się w jednym punkcie i pobierać tylko poprawki bezpieczeństwa, ponieważ uruchamiane przeze mnie aplikacje internetowe również będą aktualizowane i będą potrzebować tych poprawek. Więc po przeanalizowaniu wielu różnych zestawów pakietów PHP, zdecydowałem się na pacmaki remi. Remi jest pracownikiem Red Hata i jest również odpowiedzialny za pakiety PHP w RHEL / CentOS. Wiem, że jego paczki będą wysokiej jakości i tak było. Są to zamienniki dla pakietów systemowych i działają idealnie.

Wreszcie docieramy do MariaDB. Państwo może wybrać, aby zachować tu pakiety systemowe i cierpią żadnych niepokojących objawów. Zdecydowałem się przejść na pakiety MariaDB 10.0 (a wkrótce przejdę do 10.1), aby skorzystać z TokuDB i niektórych innych ulepszeń wydajności niedostępnych w wersji 5.5 dostarczanej z CentOS, i dla których nigdy nie będzie otrzymywać większych aktualizacji.


Ogólnie potrzebujesz stabilności w systemie podstawowym, ale aplikacje internetowe zmieniają się znacznie szybciej niż, powiedzmy, oprogramowanie biznesowe, a Twój serwer będzie musiał nadążyć. Dlatego wybrałem ukierunkowane punkty, w których aktualizacja pakietów przyniesie wyraźne korzyści przy niewielkim dodatkowym obciążeniu administracyjnym (czyli pracy).

Michael Hampton
źródło
5

Krótka odpowiedź brzmi: zawsze używaj danych dostarczonych przez repozytoria systemowe. Bądź bardzo ostrożny co ty repozytoriów należy instalować zbyt. Niektóre są po prostu złe.

Nie powinieneś nadpisywać pakietów systemowych nowszymi wersjami, Redhat jest zaprojektowany i starannie opracowany i możesz skończyć z dziwnymi błędami lub problemami.

Niektóre rzeczy do rozważenia i uważania, które mogą powodować problemy, to:

  1. Niektóre repozytoria są po prostu źle utrzymane. Nie aktualizują się za pomocą poprawek bezpieczeństwa dla pakietów.
  2. Ludzie mają tendencję do pisania złych RPM, nie zaznaczają plików konfiguracyjnych jako plików konfiguracyjnych, co zastępuje twoją konfigurację przy każdej aktualizacji, co może powodować problemy. Wcześniej widziałem ten problem.
  3. Nie deklarują w wystarczającym stopniu swoich zależności. Widziałem to również wcześniej, gdy phppakiet został umieszczony w systemie, ale nie zaktualizowałem pearpakietu, który wprowadził problemy.
  4. Instalowanie wielu repozytoriów, z których wszystkie oferują te same nazwy pakietów, może prowadzić do nieprzewidzianych problemów z zależnościami w systemie.
  5. Niektóre pakiety nadpisują lub przepisują pliki konfiguracji systemu, które zależą od innych pakietów lub oczekują ich istnienia. Prowadzi to do problemów z innymi pakietami, których możesz się nie spodziewać.

Nigdy nie buduj pakietów ze źródła i nie instaluj ich na wierzchu pakietów, które tam są. To łamie integralność pakietu systemowego, co może prowadzić do dziwnych problemów ABI, takich jak odbieranie unresolved symbollub undefined referencewiadomości. Bardzo ważne jest, aby system utrzymywał wiarygodny i dokładny indeks tego, jakie oprogramowanie zostało wdrożone w danym systemie, aby upewnić się, że wszystko działa ze sobą poprawnie, dlatego właśnie używamy RPM.

Realnym (i pobłogosławionym przez Redhata) sposobem rozwiązania tego problemu jest użycie kolekcji oprogramowania.

www.softwarecollections.org

Instaluje oprogramowanie i jego „nowe” zależności we własnym katalogu głównym. Może to nieco utrudnić zastosowanie pakietu w środowisku, ale chroni system przed dziwnymi błędami lub problemami. Instaluje również pakiety we własnej przestrzeni nazw, umożliwiając równoległe instalowanie wielu wersji pakietu.

Witryna zawiera instrukcje instalacji i aktywacji tych pakietów, zawiera większość tego, czego brakuje ludziom w starszych wersjach CentOS i Redhat (w szczególności EL6). Niektóre rzeczy, z których z powodzeniem korzystałem na tej stronie.

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

Zauważ, że twoim domyślnym stanowiskiem w tej sprawie nie powinno być dostosowywanie się do tego, co popychają repozytoria Redhat. Zamiast tego dokonaj oceny, czy naprawdę potrzebujesz zaktualizowanej wersji pakietu, w szczególności jakie są twoje specyficzne wymagania, jakie problemy należy naprawić i jakie ryzyko to wprowadza.

Zasadą ogólną jest to, że jeśli ciągle potrzebujesz zaktualizowanego oprogramowania i / lub potrzebujesz wielu równoległych wersji tych samych pakietów, aby wszystko działało, zazwyczaj oznacza to, że robisz coś źle.

Matthew Ife
źródło
1
Niektóre pakiety systemowe, takie jak aplikacje użytkownika, można bezpiecznie zastąpić nowszymi wersjami bez żadnych niepożądanych efektów, jeśli program pakujący wie, co robi . Ale uaktualnianie bibliotek w ten sposób nie jest bezpieczne ; próba zrobienia tego jest przyczyną wspomnianych błędów ABI. Niestety wiedza o tym, co można bezpiecznie uaktualnić i jak to zrobić, nie wydaje się być powszechna wśród pakujących. Nawet Red Hat czasami się mylił . OTOH, Kolekcje oprogramowania to królewski ból w dupie, którego można używać ...
Michael Hampton
1
nginxjest jednym z takich pakietów typu „wszystko w jednym”. Ale w szczególności httpd(zależności libapr) i mysql(zależności libmysqlclient) nie są. Złe aktualizacje obu tych pakietów powodowały błędy w przeszłości pythoni phpdla mnie w przeszłości. Problem w tym, że nie jest łatwo wiedzieć, w jaki sposób jedna paczka wchodzi w interakcje z inną, chyba że wiesz, czego szukać (tłumaczenie: zostało wcześniej przez nią wypalone).
Matthew Ife
2
Możesz bez problemu zaktualizować coś takiego jak MariaDB, ponieważ zawiera bibliotekę kompatybilności, która pozwala programom połączonym ze starszą wersją systemu dalej działać. Musisz tylko pamiętać, aby zainstalować pakiet (a jeśli nie, to narzekaj). PHP jest bardziej złożone, ponieważ ma wiele zależności, które muszą być na bieżąco aktualizowane, a jeśli program pakujący tego nie robi, pakiety są gorsze niż bezużyteczne. Na szczęście, ponieważ remi jest również opiekunem PHP w RHEL, wie, jakie to wszystko, a jego pakiety były w porządku.
Michael Hampton