Tôi có nên sử dụng phiên bản gói CentOS trong kho (chính thức) hoặc phiên bản ổn định mới nhất của gói không?


9

Đây là một câu hỏi kết thúc mở, nhưng tôi muốn có một cuộc thảo luận mang tính xây dựng và hữu ích về chủ đề này.

Vì vậy, để làm rõ câu hỏi: Trên máy chủ chạy CentOS 7 (hoặc bất kỳ phiên bản / bản phân phối Linux nào khác cho vấn đề đó) Tốt nhất nên gắn bó với phiên bản gói trong repo Base / EPEL hoặc có ổn không khi có phiên bản ổn định mới nhất hình thành các gói trang web? Trong trường hợp này, tôi đặc biệt đề cập đến các gói như nginx, MariaDB và PHP 7. Ví dụ, ưu và nhược điểm của việc cài đặt nginx 1.8.0 so với phiên bản EPEL 1.6.3 là gì? Có bất kỳ sự khác biệt hiệu suất hoặc rủi ro bảo mật nào không?

Tất cả các cuộc thảo luận và kinh nghiệm đều được chào đón, vui lòng thử trích dẫn các nguồn lực và sự kiện.


4
Tôi sẽ tránh cài đặt qua gói do hệ điều hành cung cấp. Trước tiên, bạn không thực sự biết nếu có bất kỳ tùy chỉnh nào mà nhà cung cấp phân phối có thể đã thực hiện - vị trí tệp cấu hình, v.v. Ví dụ: điều gì xảy ra nếu bạn cài đặt nginx 1.8.0 qua bản phân phối 1.6.3 và sau đó là bản phân phối nhảy lên 1.9.9? Điều gì sẽ làm để cài đặt tùy chỉnh của bạn? Nói chung - không làm phiền với bất cứ điều gì do hệ điều hành cung cấp trừ khi bạn muốn cam kết duy trì cài đặt hệ điều hành tùy chỉnh của mình cho vòng đời của máy chủ . Đối với phiên bản mới hơn của ứng dụng do HĐH cung cấp, hãy cài đặt nó trong /usr/localhoặc tương tự.
Andrew Henle

Đó là một điểm tốt, tôi vặn lại điều đó sẽ là: Một lần nữa lấy nginx, bản ổn định mới nhất là 1.8.0 và phiên bản kế thừa mới nhất là 1.6.3, nếu lỗi bảo mật được phát hiện trong phiên bản phân phối 1.6.3 ?
Cười khúc khích

5
Red Hat : Khi lỗ hổng bảo mật được phát hiện, phần mềm bị ảnh hưởng phải được cập nhật để hạn chế mọi rủi ro bảo mật tiềm ẩn. Nếu phần mềm là một phần của gói trong bản phân phối Red Hat Enterprise Linux hiện được hỗ trợ, Red Hat, Inc. cam kết phát hành các gói cập nhật khắc phục lỗ hổng càng sớm càng tốt. ... (Tiếp)
Andrew Henle

5
Thông thường, các thông báo về một khai thác bảo mật nhất định được kèm theo một bản vá (hoặc mã nguồn khắc phục sự cố). Bản vá này sau đó được áp dụng cho gói Red Hat Enterprise Linux, được thử nghiệm bởi nhóm đảm bảo chất lượng của Red Hat và được phát hành dưới dạng cập nhật errata . ... Bạn có kế hoạch đăng ký cho tất cả những gì đòi hỏi?
Andrew Henle

Câu trả lời:


9

Nói chung, tôi rất cố gắng sử dụng các gói mặc định của hệ thống.

Tuy nhiên, điều này đôi khi không thể. Để thực hiện một lựa chọn có giáo dục, bạn phải trả lời những câu hỏi sau:

  1. các gói phân phối có cung cấp các tính năng bạn yêu cầu không? Nếu vậy, bạn thậm chí không cần tìm kiếm các gói khác; chỉ cần sử dụng các gói được cung cấp bởi kho hệ thống.
  2. bạn có cần hỗ trợ chính thức và / hoặc bạn đã tuân thủ các chính sách cụ thể không? Nếu vậy, bạn không thể sử dụng một kho lưu trữ không chính thức . Trong trường hợp này, có lẽ bạn đang sử dụng phân phối sai cho dự án phần mềm của bạn.
  3. nếu câu trả lời cho các câu hỏi trước là "không", bạn phải tìm kiếm phiên bản phần mềm mới hơn. Có tồn tại một kho lưu trữ được công nhận với gói yêu cầu? Nếu vậy, sử dụng nó.
  4. nếu không có kho lưu trữ cụ thể, có uy tín, bạn phải sử dụng phần mềm ngược dòng. Trong trường hợp này, hãy cố gắng hết sức để sử dụng phần mềm đóng gói (ví dụ: RPM, DEB, ecc) thay vì tar.gz đơn giản (hoặc lượt thích).

3
Một điều bạn có thể thêm: Nhược điểm. Chủ lao động của bạn (nếu có) có biết bạn đang làm điều này với các hệ thống của công ty, đặc biệt nếu họ đang trả tiền cho hỗ trợ? Trong số những điều khác, có thể có những lý do pháp lý tại sao một công ty đang sử dụng phân phối được hỗ trợ, và chính công ty của bạn rất có thể mở ra cho công ty các vấn đề về trách nhiệm pháp lý, ví dụ, nếu dữ liệu người dùng phải được bảo vệ. Nếu gói không được hỗ trợ tại nhà của bạn làm rò rỉ dữ liệu người dùng vì bạn đã bỏ lỡ một bản sửa lỗi bảo mật, bạn không còn có thể trỏ đến Red Hat và nói: "Chúng tôi đã chạy HĐH của họ và chúng tôi đã trả tiền để họ cập nhật."
Andrew Henle

6

Câu trả lời của Matthew Ife và shodanshok nói chung về các vấn đề nói chung, nhưng tôi muốn giải quyết mối quan tâm cụ thể của bạn bằng cách đặt các vấn đề trong bối cảnh, vì đó chính xác là những loại hệ thống mà tôi quản lý.

Bản dựng hiện tại của tôi để triển khai các ứng dụng web PHP / MySQL là:

Trước tiên, hãy xem xét lý do tại sao chúng tôi chọn một bộ phân phối hoặc gói cụ thể. Hoặc chúng tôi coi trọng sự ổn định hơn các tính năng mới nhất hoặc chúng tôi đánh giá các tính năng mới nhất trên tính ổn định. Nhìn chung, không thể có cả hai trong cùng một bản phân phối, vì phần mềm ổn định cần có thời gian để sửa lỗi và thêm các tính năng mới giới thiệu các lỗi, do đó không ổn định.

Theo nguyên tắc chung, tôi muốn hệ điều hành mà ứng dụng chạy ổn định nhất có thể, nhưng với một bộ tính năng hợp lý hiện đại. Do đó, tôi sẽ chọn CentOS 7 thay vì CentOS 6, khá cũ ở thời điểm này và trong khi nó sẽ hoạt động , nó không còn nhiều thời gian trong vòng đời hỗ trợ của nó, vì vậy tôi sẽ không sử dụng nó cho một dự án mới .

Tuy nhiên, sau đó tôi gặp phải vấn đề là phiên bản nginx đi kèm với CentOS đã quá cũ và không có một số tính năng cần thiết và sửa lỗi. Vì vậy, tôi đã tìm kiếm các gói thay thế và thấy rằng nginx.org phân phối riêng của họ. Tôi chuyển sang họ gần như ngay lập tức và thấy họ hoàn toàn ổn định trong thời gian dài.

Sau đó là PHP. Tôi biết từ lịch sử rằng phiên bản PHP được cung cấp với CentOS sẽ là phiên bản duy nhất mà nó từng có và sẽ chỉ nhận được các bản cập nhật bảo mật; không có tính năng mới hoặc sửa lỗi. Do đó, một khi nó không hỗ trợ ngược dòng, cuối cùng tôi sẽ không thể chạy các ứng dụng web PHP hiện đại nếu tôi sử dụng các gói đó. Vì vậy, nó là cần thiết để thay thế là tốt.

Từ kinh nghiệm lâu năm tôi đã học được rằng tốt nhất là theo dõi các bản phát hành lỗi với PHP, không chỉ đơn giản là đóng băng tại một điểm phát hành và chỉ sửa lỗi bảo mật, vì các ứng dụng web tôi chạy cũng sẽ được cập nhật và sẽ cần các lỗi đó. Vì vậy, sau khi đánh giá nhiều bộ gói PHP khác nhau, tôi đã giải quyết theo nhịp của Remi. Remi tình cờ là một nhân viên của Red Hat và cũng chịu trách nhiệm về các gói PHP trong RHEL / CentOS. Vì vậy, tôi biết các gói của anh ấy sẽ có chất lượng cao, và chúng đã được. Chúng là các thay thế thả trong cho các gói hệ thống và hoạt động hoàn hảo.

Cuối cùng chúng tôi cũng đến MariaDB. Bạn có thể chọn giữ các gói hệ thống ở đây và không bị ảnh hưởng xấu. Tôi đã chọn chuyển sang các gói 10.0 của MariaDB (và sẽ sớm chuyển sang 10.1) để tận dụng TokuDB và một số cải tiến hiệu suất khác không có trong phiên bản 5.5 được cung cấp với CentOS và nó sẽ không bao giờ nhận được các bản nâng cấp lớn.


Nhìn chung, bạn cần sự ổn định trong hệ thống cơ sở của mình, nhưng các ứng dụng web thay đổi nhanh hơn nhiều so với dòng phần mềm kinh doanh và máy chủ của bạn sẽ cần theo kịp. Do đó, tôi đã chọn các điểm được nhắm mục tiêu trong đó các gói nâng cấp sẽ thu được lợi ích rõ ràng với ít chi phí quản trị bổ sung (còn gọi là công việc).


5

Câu trả lời ngắn gọn là, luôn luôn sử dụng những gì được cung cấp bởi kho lưu trữ hệ thống. Hãy cẩn thận những gì bạn cài đặt quá. Một số chỉ đơn giản là xấu.

Bạn không nên viết các gói hệ thống với các phiên bản mới hơn, Redhat được thiết kế và sắp xếp rất cẩn thận và bạn có thể gặp phải các lỗi hoặc sự cố lạ nếu bạn làm như vậy.

Một số điều cần xem xét và xem xét có thể gây ra vấn đề bao gồm.

  1. Một số kho chỉ đơn giản là duy trì xấu. Họ không cập nhật với các bản sửa lỗi bảo mật cho các gói.
  2. Mọi người có xu hướng viết RPM xấu, họ không đánh dấu các tệp cấu hình là các tệp cấu hình, ghi đè lên cấu hình của bạn mỗi khi bạn cập nhật, điều này có thể gây ra sự cố. Tôi đã thấy vấn đề này trước đây.
  3. Họ không đủ tuyên bố phụ thuộc của họ đúng. Tôi cũng đã thấy điều này trước đây, nơi một phpgói được đưa vào hệ thống nhưng không cập nhật peargói có vấn đề.
  4. Cài đặt nhiều kho lưu trữ tất cả cung cấp cùng tên gói có thể dẫn đến các vấn đề phụ thuộc không lường trước trên hệ thống của bạn.
  5. Một số gói ghi đè hoặc ghi lại các tệp cấu hình hệ thống mà các gói khác phụ thuộc hoặc mong đợi tồn tại. Điều này dẫn đến các vấn đề với các gói khác mà bạn có thể không mong đợi.

Không bao giờ xây dựng các gói từ nguồn và cài đặt chúng trên đầu các gói có ở đó. Điều này phá vỡ tính toàn vẹn gói hệ thống của bạn có thể dẫn đến các vấn đề ABI lạ như nhận unresolved symbolhoặc undefined referencetin nhắn. Điều khá quan trọng là hệ thống duy trì một chỉ số đáng tin cậy và chính xác vì phần mềm nào đã được triển khai trên một hệ thống nhất định để đảm bảo rằng tất cả đều hoạt động tốt với nhau, đây là lý do chúng tôi sử dụng RPM ở nơi đầu tiên.

Cách khả thi (và Redhat may mắn) để giải quyết vấn đề này là sử dụng các bộ sưu tập phần mềm.

www.softwarecollections.org

Nó cài đặt là phần mềm và các phụ thuộc 'mới' của nó trong thư mục gốc. Điều này có thể làm cho việc áp dụng gói trong môi trường của bạn khó hơn một chút nhưng lại bảo vệ hệ thống của bạn khỏi các lỗi hoặc sự cố lạ. Nó cũng cài đặt các gói trong không gian tên của riêng chúng, cho phép bạn cài đặt song song nhiều phiên bản của một gói.

Trang web cung cấp hướng dẫn cách cài đặt và kích hoạt các gói này, nó chứa hầu hết những gì mọi người bỏ lỡ trên các phiên bản cũ hơn của CentOS và Redhat (đặc biệt là EL6). Một số điều tôi đã sử dụng từ trang web này thành công.

  • MySQL 5.6 và MySQL 5.7, MariaDB.
  • PHP 5.5 và PHP 5.6
  • Apache 2.4

Lưu ý rằng vị trí mặc định của bạn về vấn đề này không nên điều chỉnh từ những gì kho Redhat đang đẩy. Thay vào đó, hãy đánh giá xem bạn có thực sự cần một phiên bản cập nhật của gói không, cụ thể là yêu cầu cụ thể của bạn là gì, vấn đề gì cần khắc phục và những rủi ro mà nó đưa ra.

Theo nguyên tắc chung, nếu bạn thấy mình liên tục cần phần mềm cập nhật và / hoặc yêu cầu nhiều phiên bản song song của cùng một gói để làm cho mọi thứ hoạt động thì đó thường là một chỉ báo bạn đang làm sai.


1
Một số gói hệ thống, chẳng hạn như các ứng dụng người dùng, có thể được thay thế bằng các phiên bản mới hơn một cách an toàn và không có hiệu ứng xấu, nếu người đóng gói biết mình đang làm gì . Nhưng nó không an toàn để nâng cấp thư viện theo cách này; cố gắng làm như vậy là nguyên nhân gây ra lỗi ABI mà bạn đã đề cập. Thật không may, kiến ​​thức về những gì có thể được nâng cấp một cách an toàn và cách thực hiện nó dường như không phổ biến trong các nhà đóng gói. Ngay cả Red Hat đôi khi cũng nhận được điều này sai . OTOH, Bộ sưu tập phần mềm là một nỗi đau của hoàng gia khi sử dụng ...
Michael Hampton

1
nginxlà một trong những gói 'tất cả trong một' như thế. Nhưng, httpd(phụ thuộc libapr) và mysql(phụ thuộc libmysqlclient) nói riêng là không. Cập nhật xấu của cả hai gói này đã gây ra lỗi trong pythonphpcho tôi trong quá khứ. Vấn đề ở đây là không đơn giản để biết cách một gói tương tác với nhau như thế nào trừ khi bạn biết phải tìm gì (bản dịch: đã bị đốt cháy trước đó).
Matthew Ife

2
Bạn có thể nâng cấp một cái gì đó như MariaDB mà không có vấn đề thực sự, vì nó mang thư viện tương thích để cho phép các chương trình được liên kết với phiên bản hệ thống cũ hơn tiếp tục hoạt động. Bạn chỉ cần nhớ cài đặt gói (và yum nên khiếu nại nếu bạn không). PHP phức tạp hơn, vì nó có rất nhiều phụ thuộc cũng phải được cập nhật cùng với nó và nếu trình đóng gói không làm điều này, các gói sẽ tệ hơn vô dụng. May mắn thay, vì Remi cũng là người duy trì PHP của RHEL, anh ta biết tất cả những thứ đó là gì và các gói của anh ta vẫn ổn.
Michael Hampton
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.