ฉันควรใช้เวอร์ชันแพคเกจ CentOS ในที่เก็บ (เป็นทางการ) หรือเวอร์ชันที่เสถียรล่าสุดของแพ็คเกจ


9

นี่เป็นคำถามปลายเปิด แต่ฉันต้องการมีการอภิปรายที่สร้างสรรค์และเป็นประโยชน์ในหัวข้อนี้

ดังนั้นเพื่อชี้แจงเกี่ยวกับคำถาม: บนเซิร์ฟเวอร์ที่ใช้ CentOS 7 (หรือลินุกซ์ distro / รุ่นอื่น ๆ สำหรับเรื่องนั้น) เป็นวิธีที่ดีที่สุดที่จะยึดติดกับแพคเกจรุ่นใน Base / EPEL repo หรือดีกว่าที่จะได้รับเวอร์ชั่นเสถียรล่าสุด สร้างเว็บไซต์แพคเกจหรือไม่ ในกรณีนี้ฉันหมายถึงแพคเกจเช่น nginx, MariaDB และ PHP 7 มากขึ้นโดยเฉพาะตัวอย่างเช่นข้อดีและข้อเสียของการติดตั้ง nginx 1.8.0 บน EPEL เวอร์ชัน 1.6.3 คืออะไร มีความแตกต่างด้านประสิทธิภาพหรือความเสี่ยงด้านความปลอดภัยอย่างใดอย่างหนึ่งหรือไม่?

ยินดีต้อนรับการอภิปรายและประสบการณ์ทั้งหมดกรุณาอ้างอิงแหล่งข้อมูลและข้อเท็จจริง


4
ฉันจะหลีกเลี่ยงการติดตั้งบนแพ็คเกจที่มากับระบบปฏิบัติการ ก่อนอื่นคุณไม่รู้จริงๆว่าจะเกิดอะไรขึ้นถ้าการปรับแต่งใด ๆ ที่ผู้ให้บริการ distro ทำ - ตำแหน่งของไฟล์การกำหนดค่า ฯลฯ ตัวอย่างเช่นจะเกิดอะไรขึ้นถ้าคุณติดตั้ง nginx 1.8.0 ผ่านทาง distro ที่จัดหา 1.6.3 แล้ว distro ข้ามไป 1.9.9 หรือไม่ การติดตั้งแบบกำหนดเองของคุณจะเป็นอย่างไร โดยทั่วไป - ไม่สกรูพร้อมกับระบบปฏิบัติการจัดอะไรถ้าคุณต้องการที่จะกระทำเพื่อการรักษาระบบปฏิบัติการของคุณเองติดตั้งสำหรับชีวิตของเซิร์ฟเวอร์ สำหรับแอปพลิเคชันที่ให้มากับระบบปฏิบัติการเวอร์ชันที่ใหม่กว่าให้ติดตั้งใน/usr/localหรือคล้ายกัน
Andrew Henle

นั่นเป็นจุดที่ดีการตอบโต้ของฉันคือ: อีกครั้งเช่นใช้ nginx เสถียรภาพล่าสุดเป็น 1.8.0 และรุ่นดั้งเดิมรุ่นล่าสุดคือ 1.6.3 จะเกิดอะไรขึ้นถ้าค้นพบข้อบกพร่องด้านความปลอดภัยในรุ่น distro 1.6.3 ?
GiggleSquid

5
Red Hat : เนื่องจากช่องโหว่ด้านความปลอดภัยถูกค้นพบซอฟต์แวร์ที่ได้รับผลกระทบจะต้องได้รับการอัพเดตเพื่อจำกัดความเสี่ยงด้านความปลอดภัยที่อาจเกิดขึ้น หากซอฟต์แวร์เป็นส่วนหนึ่งของแพ็คเกจภายใน Red Hat Enterprise Linux ที่ได้รับการสนับสนุน Red Hat, Inc. มุ่งมั่นที่จะเปิดตัวแพ็คเกจที่อัพเดตซึ่งแก้ไขช่องโหว่โดยเร็วที่สุด ... (ต่อ)
Andrew Henle

5
บ่อยครั้งที่การประกาศเกี่ยวกับการหาประโยชน์ด้านความปลอดภัยที่กำหนดมาพร้อมกับแพทช์ (หรือซอร์สโค้ดที่แก้ไขปัญหา) แพทช์นี้ถูกนำไปใช้แล้วแพคเกจ Red Hat Enterprise Linux ทดสอบโดยทีมงานประกันคุณภาพ Red Hat, และปล่อยออกมาเป็นการปรับปรุงคหบดี ... คุณวางแผนที่จะลงทะเบียนสำหรับสิ่งที่เกี่ยวข้องหรือไม่?
Andrew Henle

คำตอบ:


9

โดยทั่วไปแล้วฉันพยายามอย่างหนักที่จะใช้แพ็คเกจเริ่มต้นของระบบ

อย่างไรก็ตามบางครั้งก็เป็นไปไม่ได้ ในการทำทางเลือกที่มีการศึกษาคุณต้องตอบคำถามเหล่านี้:

  1. แพ็คเกจการจัดจำหน่ายมีคุณสมบัติที่คุณต้องการหรือไม่ ถ้าใช่คุณไม่จำเป็นต้องค้นหาแพ็คเกจอื่น เพียงใช้แพ็คเกจที่จัดทำโดยที่เก็บระบบ
  2. คุณต้องการการสนับสนุนอย่างเป็นทางการและ / หรือคุณต้องปฏิบัติตามนโยบายเฉพาะหรือไม่? ถ้าเป็นเช่นนั้นคุณจะไม่สามารถใช้ที่เก็บข้อมูลที่ไม่เป็นทางการได้ ในกรณีนี้คุณอาจใช้การกระจายที่ไม่ถูกต้องสำหรับโครงการซอฟต์แวร์ของคุณ
  3. หากคำตอบของคำถามก่อนหน้านี้คือ "ไม่" คุณต้องค้นหาเวอร์ชันซอฟต์แวร์ล่าสุด มีพื้นที่เก็บข้อมูลที่รู้จักดีพร้อมแพ็คเกจที่จำเป็นหรือไม่ ถ้าเป็นเช่นนั้นใช้มัน
  4. หากไม่มีที่เก็บข้อมูลที่น่าเชื่อถือและเจาะจงคุณต้องใช้ซอฟต์แวร์อัปสตรีม ในกรณีนี้ให้ลองใช้ซอฟต์แวร์ที่จัดทำแพคเกจอย่างหนัก (เช่น RPM, DEB, ecc) แทนที่จะเป็น tar.gz ธรรมดา (หรือไลค์)

3
อีกสิ่งหนึ่งที่คุณสามารถเพิ่ม: ข้อเสีย นายจ้างของคุณ(ถ้ามี) ทราบหรือไม่ว่าคุณกำลังทำสิ่งนี้กับระบบของ บริษัท โดยเฉพาะอย่างยิ่งหากพวกเขาจ่ายเงินเพื่อสนับสนุน เหนือสิ่งอื่นใดอาจมีเหตุผลทางกฎหมายว่าทำไม บริษัท จึงใช้การกระจายที่ได้รับการสนับสนุนและการหมุนของคุณเองอาจช่วยเปิด บริษัท ให้มีปัญหาหนี้สินได้ตัวอย่างเช่นข้อมูลของผู้ใช้จะต้องได้รับการปกป้อง หากแพ็กเกจที่ติดตั้งในบ้านของคุณไม่รองรับข้อมูลรั่วไหลเนื่องจากคุณพลาดการแก้ไขความปลอดภัยคุณไม่สามารถชี้ไปที่ Red Hat ได้อีกแล้วและพูดว่า "เราใช้ระบบปฏิบัติการของพวกเขาอยู่และเราจ่ายให้พวกเขาทันสมัย
Andrew Henle

6

คำตอบของ Matthew Ife และ shodanshok ครอบคลุมประเด็นโดยทั่วไป แต่ฉันต้องการพูดถึงข้อกังวลของคุณโดยใส่ประเด็นในบริบทเนื่องจากเป็นระบบที่ฉันจัดการ

งานสร้างปัจจุบันของฉันสำหรับการปรับใช้เว็บแอป PHP / MySQL คือ

ก่อนอื่นเรามาพิจารณาว่าทำไมเราถึงเลือกชุดการแจกจ่ายหรือแพคเกจเฉพาะ เราให้ความสำคัญกับความเสถียรของคุณสมบัติล่าสุดหรือเราให้ความสำคัญกับคุณลักษณะล่าสุดมากกว่าความเสถียร เป็นไปไม่ได้ที่จะมีทั้งการแจกแจงแบบเดียวกันเนื่องจากซอฟต์แวร์ที่มีความเสถียรต้องใช้เวลาในการแก้ไขข้อบกพร่องและการเพิ่มคุณสมบัติใหม่ ๆ จะทำให้เกิดข้อผิดพลาด

ตามกฎทั่วไปฉันต้องการระบบปฏิบัติการที่แอพพลิเคชั่นทำงานได้อย่างเสถียรที่สุดเท่าที่จะเป็นไปได้ แต่ด้วยชุดฟีเจอร์ที่ทันสมัยพอสมควร ดังนั้นฉันจะเลือก CentOS 7 มากกว่า CentOS 6 ซึ่งค่อนข้างเก่า ณ จุดนี้และในขณะที่มันใช้งานได้มันไม่มีเวลาเหลือพอในวงจรชีวิตการสนับสนุนดังนั้นฉันจะไม่ใช้มันสำหรับโครงการใหม่ .

อย่างไรก็ตามฉันพบปัญหาว่าเวอร์ชันของ nginx ที่รวมอยู่ใน CentOS นั้นเก่าเกินไปและไม่มีคุณสมบัติที่จำเป็นและการแก้ไขข้อบกพร่อง ดังนั้นฉันจึงไปค้นหาแพ็คเกจอื่นและพบว่า nginx.org กระจายข้อมูลของพวกเขาเอง ฉันเปลี่ยนมาใช้พวกเขาเกือบจะในทันทีและพบว่าพวกเขามั่นคงอย่างสมบูรณ์ในระยะทางไกล

แล้วมี PHP ฉันรู้จากประวัติว่าเวอร์ชันของ PHP มาพร้อมกับ CentOS จะเป็นเวอร์ชันเดียวที่เคยได้รับและจะได้รับการอัปเดตความปลอดภัยเท่านั้น ไม่มีคุณสมบัติใหม่หรือแก้ไขข้อผิดพลาด ดังนั้นเมื่อขาดการสนับสนุนอัปสตรีมในที่สุดฉันก็ไม่สามารถเรียกใช้เว็บแอปพลิเคชัน PHP ที่ทันสมัยได้หากฉันใช้แพ็คเกจเหล่านั้น ดังนั้นจึงจำเป็นต้องแทนที่สิ่งเหล่านี้เช่นกัน

จากประสบการณ์อันยาวนานฉันได้เรียนรู้ว่าวิธีที่ดีที่สุดในการติดตามการเผยแพร่ข้อผิดพลาดด้วย PHP ไม่ใช่เพียงแค่หยุดที่จุดเดียวและใช้การแก้ไขด้านความปลอดภัยเท่านั้นเนื่องจากเว็บแอปพลิเคชันที่ฉันเรียกใช้จะได้รับการอัปเดตด้วย ดังนั้นหลังจากการประเมินแพ็คเกจ PHP ที่แตกต่างกันหลายชุดฉันก็ตัดสินจาก pacakges ของ remi Remi เป็นพนักงาน Red Hat และรับผิดชอบแพ็คเกจ PHP ใน RHEL / CentOS ดังนั้นฉันรู้ว่าแพ็คเกจของเขาจะมีคุณภาพสูงและพวกเขาก็เคย พวกเขาเป็นแบบแทนที่สำหรับแพคเกจระบบและทำงานอย่างสมบูรณ์

ในที่สุดเราก็มาถึง MariaDB คุณสามารถเลือกที่จะเก็บแพ็คเกจของระบบไว้ที่นี่และไม่มีผลกระทบใด ๆ ฉันเลือกที่จะเปลี่ยนเป็นแพ็คเกจ 10.0 ของ MariaDB (และในไม่ช้าจะไปที่ 10.1) เพื่อใช้ประโยชน์จาก TokuDB และการปรับปรุงประสิทธิภาพอื่น ๆ ที่ไม่มีในเวอร์ชัน 5.5 มาพร้อมกับ CentOS และจะไม่ได้รับการอัพเกรดที่สำคัญ


โดยรวมแล้วคุณต้องการความเสถียรในระบบฐานของคุณ แต่เว็บแอพพลิเคชั่นเปลี่ยนแปลงอย่างรวดเร็วมากกว่าพูดซอฟต์แวร์เชิงธุรกิจและเซิร์ฟเวอร์ของคุณจะต้องติดตามต่อไป ดังนั้นฉันจึงเลือกจุดเป้าหมายที่การอัปเกรดแพ็คเกจจะได้รับประโยชน์ที่ชัดเจนพร้อมค่าใช้จ่ายในการดูแลระบบเพิ่มเติมเล็กน้อย


5

คำตอบสั้น ๆ คือใช้อะไรที่จัดทำโดยที่เก็บระบบ จะระวังให้มากสิ่งที่เก็บที่คุณจะติดตั้งมากเกินไป บางคนก็ไม่ดีธรรมดา

คุณไม่ควรเขียนแพ็กเกจระบบด้วยเวอร์ชันที่ใหม่กว่า Redhat ได้รับการออกแบบและจัดการอย่างระมัดระวังและคุณอาจพบข้อผิดพลาดหรือปัญหาแปลก ๆ หากคุณทำ

บางสิ่งที่ควรพิจารณาและระวังซึ่งอาจทำให้เกิดปัญหารวมถึง

  1. ที่เก็บบางแห่งได้รับการดูแลไม่ดี พวกเขาไม่อัปเดตด้วยการแก้ไขความปลอดภัยสำหรับแพ็คเกจ
  2. ผู้คนมักจะเขียน RPM ที่ไม่ดีพวกเขาไม่ทำเครื่องหมายไฟล์ config เป็นไฟล์กำหนดค่าซึ่งจะเขียนทับการกำหนดค่าของคุณทุกครั้งที่คุณอัปเดตซึ่งอาจทำให้เกิดปัญหา ฉันเคยเห็นปัญหานี้มาก่อน
  3. พวกเขาไม่ประกาศเพียงพออ้างอิงของพวกเขาอย่างถูกต้อง ฉันเคยเห็นสิ่งนี้มาก่อนเช่นกันซึ่งเป็นที่phpวางแพคเกจในระบบ แต่ไม่ได้อัปเดตpearแพคเกจที่นำปัญหา
  4. การติดตั้งที่เก็บหลายแห่งทั้งหมดที่เสนอชื่อแพ็กเกจเดียวกันสามารถนำไปสู่ปัญหาการพึ่งพาที่ไม่คาดคิดในระบบของคุณ
  5. บางแพ็กเกจเขียนทับหรือเขียนทับไฟล์คอนฟิกูเรชันระบบที่แพ็กเกจอื่นขึ้นอยู่กับหรือคาดว่าจะมีอยู่ สิ่งนี้นำไปสู่ปัญหากับแพ็คเกจอื่น ๆ ที่คุณอาจไม่คาดคิด

อย่าสร้างแพ็คเกจจากแหล่งที่มาและติดตั้งไว้เหนือแพ็คเกจที่มี สิ่งนี้จะทำลายความสมบูรณ์ของแพ็คเกจระบบของคุณซึ่งอาจนำไปสู่ปัญหา ABI แปลก ๆ เช่นการรับunresolved symbolหรือundefined referenceส่งข้อความ มันค่อนข้างสำคัญที่ระบบจะรักษาดัชนีที่เชื่อถือได้และแม่นยำว่าซอฟท์แวร์ใดที่ติดตั้งบนระบบที่กำหนดเพื่อให้แน่ใจว่ามันทำงานร่วมกันได้อย่างถูกต้องนี่คือเหตุผลที่เราใช้ RPMs ตั้งแต่แรก

วิธีที่ปฏิบัติได้ (และพรที่รับพร) ในการแก้ไขปัญหานี้คือการใช้ชุดซอฟต์แวร์

www.softwarecollections.org

มันติดตั้งเป็นซอฟต์แวร์และการพึ่งพา 'ใหม่' ในรากของตัวเอง สิ่งนี้สามารถทำให้ยากขึ้นเล็กน้อยในการใช้แพคเกจในสภาพแวดล้อมของคุณ แต่จะป้องกันระบบของคุณจากข้อผิดพลาดหรือปัญหาแปลก ๆ นอกจากนี้ยังติดตั้งแพ็กเกจในเนมสเปซของตนเองช่วยให้คุณติดตั้งแพคเกจได้หลายรุ่นพร้อมกัน

เว็บไซต์ให้คำแนะนำวิธีการติดตั้งและเปิดใช้งานแพคเกจเหล่านี้มันมีสิ่งที่คนส่วนใหญ่คิดถึง CentOS และ Redhat รุ่นเก่า (โดยเฉพาะอย่างยิ่ง EL6) บางสิ่งที่ฉันใช้จากเว็บไซต์นี้สำเร็จ

  • MySQL 5.6 และ MySQL 5.7, MariaDB
  • PHP 5.5 และ PHP 5.6
  • Apache 2.4

โปรดทราบว่าตำแหน่งเริ่มต้นของคุณในเรื่องนี้ไม่ควรปรับจากที่เก็บ Redhat กำลังผลักดันอะไร ให้ทำการประเมินว่าคุณต้องการแพคเกจเวอร์ชันที่ปรับปรุงใหม่โดยเฉพาะอย่างยิ่งข้อกำหนดเฉพาะของคุณคืออะไรปัญหาที่ควรแก้ไขและความเสี่ยงที่แนะนำ

ตามกฎทั่วไปหากคุณพบว่าตัวเองต้องการซอฟต์แวร์ที่อัปเดตอยู่เสมอและ / หรือต้องการแพ็คเกจรุ่นเดียวกันหลายชุดเพื่อให้สิ่งต่าง ๆ ทำงานเป็นปกติมันจะเป็นตัวบ่งชี้ว่าคุณกำลังทำสิ่งผิดปกติ


1
แพคเกจระบบบางอย่างเช่นแอปพลิเคชันผู้ใช้สามารถถูกแทนที่ด้วยเวอร์ชันที่ใหม่กว่าได้อย่างปลอดภัยและไม่มีผลกระทบใด ๆหากผู้ทำแพ็กเกจรู้ว่ากำลังทำอะไรอยู่ แต่จะไม่ปลอดภัยในการอัพเกรดไลบรารี่ด้วยวิธีนี้ การพยายามทำเช่นนั้นเป็นสิ่งที่ทำให้เกิดข้อผิดพลาด ABI ที่คุณกล่าวถึง น่าเสียดายที่ความรู้เกี่ยวกับสิ่งที่สามารถอัพเกรดได้อย่างปลอดภัยและวิธีการทำมันดูเหมือนจะไม่เป็นเรื่องธรรมดาในหมู่ผู้ทำแพ็คเกจ แม้แต่ Red Hat ก็ยังผิดพลาดอยู่บ้าง OTOH คอลเล็กชันซอฟต์แวร์เป็นความเจ็บปวดที่ยิ่งใหญ่ในการใช้ ...
Michael Hampton

1
nginxเป็นหนึ่งในแพ็คเกจ 'ทั้งหมดในที่เดียว' เช่นนั้น แต่, httpd(การพึ่งพา libapr) และmysql(การพึ่งพา libmysqlclient) โดยเฉพาะไม่ได้เป็น การอัปเดตที่ไม่ถูกต้องของแพ็กเกจทั้งสองนี้ทำให้เกิดข้อผิดพลาดในตัวpythonและphpในอดีต ปัญหาในที่นี้คือมันไม่ง่ายเลยที่จะรู้ว่าแพ็คเก็จหนึ่งโต้ตอบกับอีกอย่างไรเว้นแต่คุณจะรู้ว่าจะมองหาอะไร (แปล: ถูกเผาก่อนหน้านี้)
Matthew Ife

2
คุณสามารถอัปเกรดบางอย่างเช่น MariaDB โดยไม่มีปัญหาจริงเนื่องจากมีไลบรารีที่ใช้งานร่วมกันได้เพื่ออนุญาตให้โปรแกรมที่เชื่อมโยงกับเวอร์ชันระบบเก่าทำงานได้ต่อไป คุณเพียงแค่ต้องจำไว้ว่าให้ติดตั้งแพ็กเกจ (และยำควรบ่นถ้าคุณไม่ได้) PHP มีความซับซ้อนมากขึ้นเนื่องจากมีการพึ่งพาจำนวนมากที่ต้องได้รับการปรับปรุงให้ทันสมัยอยู่เสมอและหากผู้ทำแพ็กเกจไม่ทำเช่นนี้แพ็คเกจจะแย่กว่าไร้ประโยชน์ โชคดีเนื่องจาก remi ยังเป็นผู้ดูแล PHP ของ RHEL เขาจึงรู้ว่าทั้งหมดนี้คืออะไรและแพ็คเกจของเขาก็ใช้ได้ดี
Michael Hampton
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.