ฉันจะบรรลุการจัดการอัปเดตเหมือน“ Git” สำหรับ Linux ได้อย่างไร


14

ฉันต้องการจัดการการอัปเดตของระบบ Linux ในแบบเดียวกันกับที่Gitทำโดยสามารถเลื่อนไปมาได้ใน "การแก้ไข" ฉันจะทำสิ่งนั้นได้อย่างไร


ในฐานะผู้ดูแลระบบ Linux / Unix ที่จัดการกับแง่มุมที่ลึกกว่าของระบบ Linux / Unix ทำงานฉันไม่สามารถจินตนาการได้ว่าการเปลี่ยนแปลงชนิดใดที่จะต้องทำกับระบบของพวกเขาเพื่อต้องการระบบการแก้ไขแบบ Git สิ่งสำคัญที่ได้รับการเปลี่ยนแปลงในระบบเหล่านี้คือการติดตั้งซอฟต์แวร์และไฟล์กำหนดค่า ไฟล์กำหนดค่านั้นง่ายต่อการสำรองและติดตามด้วยตนเอง และมันตกอยู่ในความคิด "ตั้งค่าและลืมมัน" ความคิด
JakeGould

คำตอบ:


12

คุณอาจจะมองไปที่NixOSซึ่งใช้แพคเกจผู้จัดการห้าม

NixOS เป็นการกระจาย GNU / Linux ที่มีวัตถุประสงค์เพื่อปรับปรุงสถานะของการจัดการการกำหนดค่าระบบ ในการกระจายที่มีอยู่การกระทำเช่นการอัปเกรดเป็นอันตราย: การอัพเกรดแพ็คเกจอาจทำให้แพ็คเกจอื่นหยุดชะงักการอัพเกรดทั้งระบบมีความน่าเชื่อถือน้อยกว่าการติดตั้งใหม่ตั้งแต่เริ่มต้นคุณไม่สามารถทดสอบได้อย่างปลอดภัยว่าผลลัพธ์ของการเปลี่ยนแปลงการกำหนดค่าจะเป็นอย่างไร คุณไม่สามารถเลิกทำการเปลี่ยนแปลงระบบได้อย่างง่ายดายและอื่น ๆ


12

สิ่งที่คุณอาจกำลังมองหาจะเรียกว่าเครื่องมือในการจัดการการกำหนดค่า มีให้เลือกหลายแบบและมันก็เป็นอัตวิสัยที่ดีที่สุดในทุกสถานการณ์

ผมเองคิดว่าหุ่นจะค่อนข้างง่ายที่จะเริ่มต้นด้วย แต่เลือกที่นิยมอื่น ๆ ที่มีเกลือและเบิ้ล


ฉันใช้หุ่นเชิดแล้ว แต่ฉันจำไม่ได้ว่าเคยสามารถเลิกทำสิ่งยุ่งเหยิงที่ฉันทำในระบบปฏิบัติการของฉัน ...
Patrick Villela

4
เครื่องมือการจัดการการกำหนดค่าโดยทั่วไปจะไม่มีฟังก์ชัน "ย้อนกลับ" "การย้อนกลับ" กำลังพัดระบบและใช้เครื่องมือการจัดการการกำหนดค่าเพื่อกำหนดค่าระบบใหม่ ตัวอย่างเช่นคุณอาจใช้เครื่องมือเตรียมโลหะเปลือยเช่นมีดโกนเพื่อจัดรูปแบบและติดตั้งระบบปฏิบัติการใหม่ จากนั้นจะมอบเครื่องมือเช่น Chef เพื่อใช้การกำหนดค่า
ctc

2
แม่มดตั้งใจหรือไม่ :)
Ruslan

cfengine ตายแล้วหรือ ฉันจำได้ว่าพยายามรับบางสิ่งบางอย่างที่ฉันมีความสุขกับการใช้กับคลัสเตอร์เล็ก ๆ ของฉันเมื่อฉันดูแลระบบ แต่ฉันไม่เคยจบการปรับใช้
Peter Cordes

ด้วยเครื่องมือใด ๆ เหล่านี้คุณจะได้รับการควบคุมเวอร์ชันโดยการทำให้ไฟล์ config หลักของคุณเป็น git สิ่งที่คุณได้รับจากพวกเขาคือการรวมศูนย์และลดการกำหนดค่าของทั้งระบบเป็นหนึ่งในไฟล์ข้อความไม่กี่ไฟล์
Peter Cordes

10

นี่เป็นคำถามที่เกินความจำเป็นของคุณ แต่วิธีที่ง่ายที่สุดในการเปลี่ยนกลับการเปลี่ยนแปลงระดับระบบ / ขนาดใหญ่คือการถ่ายภาพ:

https://en.wikipedia.org/wiki/Snapshot_%28computer_storage%29

คุณไม่ได้พูดถึงลักษณะเฉพาะของอุปกรณ์ของคุณ แต่เมื่อคุณคุ้นเคยกับคอมไพล์แล้วจะไม่เป็นการคิดที่เกินกว่าที่จะจินตนาการว่าคุณอาจสนใจใช้ระบบไฟล์ที่ซับซ้อนกว่านี้ หากคุณต้องใช้ระบบไฟล์รุ่นต่อไป (ไม่ต้องสนใจชื่อ click-bait-y) คุณจะสามารถ "ย้อนกลับ" ระบบทั้งหมดของคุณได้อย่างสมบูรณ์โดยใช้คำสั่งเพียงกดลงในเทอร์มินัลของคุณ การเปลี่ยนแปลงใด ๆ ที่ทำไว้ทั้งหมดจะถูกเปลี่ยนกลับด้วยความล่าช้า / ความพยายามเพียงเล็กน้อย ZFS เป็นทางออกที่ดีที่สุดของคุณและคุณสามารถอ้างถึงบทความ Ars ที่น่าทึ่งนี้เพื่อดูว่ามันอาจจะเป็นสิ่งที่คุ้มค่าสำหรับคุณหรือไม่ (มีคุณสมบัติที่ยอดเยี่ยมอื่น ๆ อีกมากมาย):

http://arstechnica.com/information-technology/2014/02/ars-walkthrough-using-the-zfs-next-gen-filesystem-on-linux/


2
ตัวเลือกอื่นคือ btrfs ซึ่ง BTW ได้รับการสนับสนุนอย่างเป็นทางการจาก Ubuntu, SUSE> = 11, Oracle แม้ว่ามันจะยังคงได้รับการพัฒนาและ blahblahblah แต่ก็มีความน่าเชื่อถือสำหรับการใช้งานเดสก์ท็อปทุกวันและทำงานได้ดี
Ignis

1
@ignis: ฉันเพิ่งพบ Btrfs ที่ไม่สอดคล้องกันและไม่สามารถกู้คืนได้แม้จะมี RAID 5 อยู่ด้านล่างและได้ยินอีกสองอินสแตนซ์ในที่ทำงาน ดังนั้นฉันจะไม่สนใจคำเตือนเหล่านั้นเล็กน้อยเกี่ยวกับเรื่องนี้ยังไม่พร้อมสำหรับการใช้งานจริง ฉันไม่ต้องการเชื่อตัวเองก่อนที่จะพบมัน อาจจะเป็นเพราะแรมไม่ดีบางทีซึ่งเป็นหนึ่งในเหตุผลที่ว่าทำไมคน ZFS ขอ แนะนำให้ใช้หน่วยความจำ ECC ฉันคิดว่าแบบเดียวกันนี้อาจใช้กับ Btrfs
MvG

6

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

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

มันคุ้มค่าที่จะพิจารณาว่าไม่ว่าคุณจะใช้เครื่องมืออย่าง Puppet, Ansible, Etckeeper หรืออื่น ๆ คุณไม่สามารถ "ย้อนกลับ" ได้อย่างหมดจดโดยไม่สูญเสียข้อมูลเว้นแต่ว่าคุณจะได้หมูทั้งตัว (เช่นสแนปชอต วิธีการที่เหมาะสมจะขึ้นอยู่กับสถานการณ์ของคุณ (เช่นการถ่ายภาพสแนปชอตจะไม่เหมาะสมสำหรับระบบการผลิตที่คุณอาจสูญเสียใบสั่งซื้อของลูกค้าเมื่อย้อนกลับ)


2

ฉันได้ใช้OpenVMSในอดีตที่ผ่านมาโดยค่าเริ่มต้นที่มีระบบไฟล์เวอร์ชัน

หากเครื่องมือเช่นหุ่นเชิดไม่ได้ไปไกลพออาจเป็นระบบไฟล์ที่กำหนดเวอร์ชันเป็นสิ่งที่คุณกำลังมองหา


1

ถ้าคุณอยากที่จะจัดการทั้งระบบ (รวมถึงรุ่นเคอร์เนล) เช่นคอมไพล์คุณกำลังมองหาNixOS

สำหรับเวอร์ชันที่มีส่วนเกี่ยวข้องน้อยคุณสามารถใช้ตัวจัดการแพ็กเกจของ NixOS ได้จากเกือบทุกยูนิกซ์ ระวังสามารถติดตั้งในฐานะผู้ใช้ที่เรียบง่ายแม้ว่ามันจะง่ายต่อการติดตั้งมันเป็นราก เมื่อติดตั้ง nix แล้วคุณสามารถใช้มันเพื่อติดตั้งแพ็กเกจในฐานะผู้ใช้ที่ไม่มีสิทธิพิเศษและทำงานได้ดีกับผู้จัดการแพ็กเกจปัจจุบันของคุณโดยไม่มีข้อขัดแย้ง นอกจากนี้ยังเป็นเรื่องง่ายมากที่จะลบออกจากระบบของคุณอย่างสมบูรณ์ดังนั้นจึงไม่มีข้อแก้ตัวใด ๆ ที่จะไม่ลองทำ ;-)

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

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

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

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

ฉันยังอ่านไม่จบทั้งหมด แต่ฉันแนะนำยา Nix ของคนตายเพื่อเป็นการแนะนำ Nix


0

หากคุณเป็นประเภททดลองคุณอาจลองตรวจสอบระบบไฟล์ทั้งหมดของคุณในที่เก็บข้อมูลคอมไพล์ท้องถิ่น ฉันคิดว่านี่น่าสนใจ

  1. git init ในไดเรกทอรีราก /
  2. สร้าง. gignignore สำหรับรูทที่ไม่สนใจไดเรกทอรีที่เนื้อหาเปลี่ยนแปลงบ่อยหรือไม่ควรเช็คอิน:
    • / dev
    • /วิ่ง
    • tmp /
    • proc /
    • / หายไปพบ +
    • ...
  3. เพิ่มประเภทไฟล์เฉพาะ. gitignore ที่คุณอาจต้องการยกเว้น:
    • * .tmp
    • * .log
    • ...
  4. เพิ่มเนื้อหาเริ่มต้นของคุณด้วย git add -A .
  5. ส่งมอบสแนปชอตด้วย git commit -m "Initial Snapshot"
  6. ใช้คอมพิวเตอร์ของคุณ
  7. เพิ่มสแนปชอตเป็นระยะgit commit -Am "Snapshot X"หรือคล้ายกัน

ประโยชน์บางอย่างจะเป็น:

  • เครื่องมือที่คุ้นเคยสำหรับประวัติการแก้ไขเช่นgitkและgit diff
  • livecd หรือระบบปฏิบัติการอื่น ๆ ที่มีคอมไพล์สามารถกู้คืนการสำรองข้อมูลของคุณ
  • คุณสามารถผลักระบบทั้งหมดของคุณขึ้นไปยัง GitHub และเรียกคืนไปยังเครื่องอื่นหรือแชร์กับผู้คน ... ?
  • การแตกกิ่งจะรวดเร็วและใช้งานง่าย
  • /, ไดเรกทอรี git ในรูทของคุณจะสร้างแรงบันดาลใจให้ความมั่นใจในการใช้ระบบของคุณในทางที่ผิดและมีความเสี่ยงมากขึ้นคล้ายกับซอร์สโค้ด
  • สแนปชอตแต่ละอันจะมีขนาดค่อนข้างเล็กเมื่อเทียบกับโซลูชันสำรองอื่น ๆ
  • จะยอดเยี่ยมสำหรับการตรวจสอบและติดตามการเปลี่ยนแปลงการกำหนดค่าใน / etc
  • คุณสามารถบุกเบิกสิ่งนี้และเรียกมันว่า linit - linux ในคอมไพล์
  • ความอับอายขายหน้า

สิ่งแปลกประหลาดบางอย่างอาจรวมถึง:

  • ไม่น่าเป็นไปได้ที่คุณสามารถกู้คืน / ชำระเงินสาขาหรือการแก้ไขที่มีการเปลี่ยนแปลงที่สำคัญหรือการเปลี่ยนแปลงไฟล์ที่ใช้งานอยู่ในขณะที่ใช้งานระบบ - อาจจะมี USB สำหรับบูตที่น้อยที่สุดพร้อม git สำหรับจุดประสงค์นี้
  • เริ่มต้นค่อนข้างใหญ่กระทำ
  • ตรวจสอบในไดเรกทอรี. git ที่ตามมา -?
  • gitหวังว่าจะทำงานได้ตามที่คาดไว้เมื่อคุณอยู่ในไดเรกทอรีซอร์สโค้ดซ้อนในรูทgitคอนเทนเนอร์
  • / etc / passwd และ / etc / shadow จะต้องรวมอยู่ในพื้นที่เก็บข้อมูลเพื่อรักษาและติดตามผู้ใช้และเรียกคืนไปยังเครื่องอื่น ๆ แต่ตอนนี้ทุกคนที่มีการเข้าถึงมุมมอง (อาจจะอยู่ใน GitHub) สามารถดูข้อมูลที่สำคัญ และแฮชรหัสผ่านของผู้ใช้ของคุณ

3
วิธีการนี้น่าจะล้มเหลวอย่างน่ากลัวที่สุดเนื่องจากคอมไพล์จะไม่จัดการสิทธิ์อย่างถูกต้อง สมมติว่าคุณทำทุกอย่างในฐานะรูทคุณจะต้องใช้ระบบไฟล์ทั้งหมดเพื่อรูทและในที่สุดก็จะทำให้การเขียนไม่ทำงาน ตัวอย่างเช่นคุณถ่ายภาพสแนปชอตคืนเจ้าของไดเรกทอรีสมุดบันทึกอาปาเช่จะกลายเป็นรูท (แทนที่จะเป็น http), apache ไม่สามารถเขียนไปยังไดเรกทอรีไม่สามารถเริ่มต้นได้ ฉันรู้ว่าเพราะฉันลองสิ่งที่คล้ายกัน แต่ในขนาดที่เล็กกว่ามากและถึงอย่างนั้นก็มีปัญหา
Tuncay Göncüoğlu

ลองดูที่ห้ามเป็นข้อเสนอแนะในคำตอบอื่น;)
ไมเคิล Pankov

ดีแล้วที่รู้! ฉันคิดว่ามันจัดการสิทธิ์อย่างน้อย octet เนื่องจากสคริปต์ของฉันเก็บค่าสถานะ x ไว้บนโคลน แต่ฉันไม่ได้คิดถึงการเป็นเจ้าของไฟล์และกลุ่ม
Ehryk

ดูเหมือนว่ามีเครื่องมือเพิ่มเติมที่จะรักษาสิทธิ์และความเป็นเจ้าของอย่างเต็มที่หากคุณต้องการ หนึ่งในเครื่องมือดังกล่าวคือgit-cache-metaและนี่คือรายการ
Ehryk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.