กระบวนการอัพเกรด Ubuntu ทำงานอย่างไร


11

Ubuntu ปรับรุ่นเป็นรุ่นที่ใหม่กว่าได้อย่างไรในขณะที่ระบบปฏิบัติการยังทำงานอยู่ ฉันอัปเกรดจาก 10.10 เป็น 11.04 และฉันเคยอัพเกรดหลายครั้งก่อนหน้านี้และมันก็ง่ายเหมือนการรัน update-manager -d และการดาวน์โหลดและติดตั้งจากนั้นทำการรีบูต

มันทำงานอย่างไรกันแน่? ตัวจัดการการอัพเกรดสามารถอัพเดตระบบปฏิบัติการในขณะที่ยังใช้งานอยู่ได้อย่างไร?


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

คำตอบ:


3

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

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


นั่นจะอธิบายว่าทำไมฉันสังเกตเห็นคุณสมบัติใหม่ที่ถูกเพิ่มลงในบางเมนูเมื่อการอัปเกรดดำเนินไป
bbosak

15

นี่คือคำอธิบายรายละเอียดเพิ่มเติมของกระบวนการ ขออภัยข้อความยาวเกินไป

ประสบการณ์ของฉันมาจาก Debian ซึ่งทั้งบรรจุภัณฑ์และระบบอัพเกรดที่ใช้ในอูบุนตูนั้นถูกคิดค้น การอัพเกรดความปลอดภัยของ Ubuntu ทุกวันนั้นสอดคล้องกับการทำงานapt-get upgradeซึ่งโดยปกติแล้วจะไม่ลบซอฟต์แวร์ใด ๆ การอัพเกรดครั้งใหญ่นั้นสอดคล้องกับapt-get dist-upgradeช่วงเวลาที่สามารถแลกเปลี่ยนแพคเกจซอฟต์แวร์ได้อย่างสมบูรณ์

ที่จริงแล้วส่วนประกอบระดับต่ำมากมักจะไม่แลกเปลี่ยนในระหว่างการอัพเกรด ทันทีหลังการอัพเกรดคุณควรพบเคอร์เนลสองตัวและอิมเมจเริ่มต้นในไดเรกทอรี / boot ของคุณ เพราะนี่คือสิ่งที่แตกต่างจากองค์ประกอบของเคอร์เนลโปรแกรมที่ไม่สามารถใช้ร่วมกันได้ หากความต้องการเกิดขึ้นในการโหลดไดรเวอร์อุปกรณ์ใหม่ในระหว่างการอัพเกรดพวกเขาจะต้องเข้ากันได้กับเคอร์เนลที่กำลังทำงานอยู่ หลังจากระบบบู๊ตด้วยเคอร์เนลใหม่สามารถลบเคอร์เนลเก่าออกได้ ครั้งสุดท้ายที่ฉันตรวจสอบสิ่งนี้ต้องทำด้วยตนเองฉันไม่รู้ว่าตัวอัพเดตปัจจุบันจัดการกับสิ่งนี้ได้อย่างไร นี่คือ BTW เหตุผลหลักว่าทำไมเคอร์เนลอิมเมจถึงหมายเลขเวอร์ชันในชื่อไฟล์ดังนั้นคุณสามารถติดตั้งเคอร์เนลเวอร์ชันต่างกันได้ในเวลาเดียวกัน เหมือนกันสำหรับเส้นทางโมดูล (/ lib / modules / ... )

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

คุณต้องเข้าใจที่นี่ว่าระบบแตกต่างระหว่างแพ็คเกจที่ติดตั้งด้วยตนเอง (เช่นแพ็คเกจที่การติดตั้งที่คุณร้องขอโดยตรงเช่น Chromium) และแพคเกจที่ติดตั้งโดยอัตโนมัติซึ่งติดตั้งเพียงเพื่อตอบสนองการพึ่งพาแพ็คเกจที่ติดตั้งด้วยตนเองเท่านั้น )

สำหรับแต่ละโปรแกรมที่ติดตั้งด้วยตนเองตัวอัปเดตจะค้นหาเวอร์ชันที่ใหม่กว่า บ่อยครั้งที่โปรแกรมเหล่านั้นเป็นเพียงเมตาแพ็คเกจเช่น "ubuntu-desktop" ซึ่งไม่มีข้อมูลและเป็นเพียงแค่การพึ่งพา ไลบรารี่ที่ขึ้นต่อกันเวอร์ชั่นใหม่จะถูกดึงเข้ามาเนื่องจากมันจะถูกร้องขอโดยโปรแกรมที่มีการอัพเดทโดยตรง (ร้องขอด้วยตนเอง) ตัวอัปเดตจะพยายามติดตั้งเวอร์ชันที่ใช้งานได้ใหม่ล่าสุดของแพ็คเกจที่ขึ้นต่อกัน (ในระหว่างการอัปเกรดใด ๆ

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

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

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

กลไกนี้ยังอนุญาตให้มีการแลกเปลี่ยนโปรแกรมผู้ใช้ทั้งหมด เช่นการเปลี่ยนจาก Gnome2 เป็น Unity เนื่องจากทั้งสองเป็นเพียงการพึ่งพาอัตโนมัติของ ubuntu-desktop ซึ่งเป็นหนึ่งในไม่กี่แพคเกจสำหรับรุ่นใหม่ที่มีการร้องขอจริงในสถานที่แรก

โดยปกติโปรแกรมจะไม่ขึ้นอยู่กับรุ่นของเคอร์เนลระบบปฏิบัติการดังนั้นพวกเขาจะทำงานได้ดีกับเคอร์เนลที่กำลังทำงานอยู่

นอกเหนือจากทั้งหมดนี้ฉันสงสัยว่าตัวอัปเดตของ Ubuntu โยนการแก้ไขและการแก้ปัญหาเฉพาะบางอย่างลงในส่วนผสมเพื่อหลีกเลี่ยงสถานการณ์ที่ทฤษฎีนี้แตก

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

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

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

ตอนนี้คำถามเฉพาะ:

  1. เมื่อมีการเปลี่ยนแปลงโครงสร้างพื้นฐานระดับต่ำ (ระดับต่ำเช่นเคอร์เนลไดรเวอร์ไลบรารี ฯลฯ อะไรก็ตามที่ผู้ใช้ไม่ได้โต้ตอบโดยตรง) จะเกิดอะไรขึ้นกับไบนารีที่เลิกใช้แล้ว
    • ตกลง ... ฉันครอบคลุมสิ่งนี้แล้ว
  2. เกิดอะไรขึ้นกับแอปที่เลิกใช้แล้วอย่างสมบูรณ์ ตัวอย่างเช่น Unity 2D (หรือซอฟต์แวร์อื่น ๆ ถูกยกเลิก / ไม่มีผู้ดูแลที่มีแพ็คเกจไม่ได้อยู่ใน repo ใหม่)
    • หากติดตั้งแอปด้วยตนเองครั้งเดียวมันจะยังคงอยู่ในระบบซึ่งมักจะทำให้เกิดการพึ่งพาที่ฉันอธิบาย
  3. ubuntu-desktop เป็น metapackage ที่ดึงแอพพลิเคชั่น Ubuntu เริ่มต้นเป็นการอ้างอิง หากฉันลบ Firefox และติดตั้ง Chrome แล้ว Firefox จะยังคงถูกดึงเข้ามาเป็นส่วนหนึ่งของการอัพเกรดหรือไม่
    • ตราบใดที่มันเป็นเบราว์เซอร์มาตรฐานของรีลีสใหม่ใช่ Chromium จะได้รับการอัพเกรดด้วย ฉันไม่แน่ใจว่าคุณสามารถลบ Firefox โดยไม่ต้องลบ ubuntu-desktop โปรดทราบว่านอกเหนือจากการพึ่งพาอย่างเข้มงวดแล้วระบบแพ็กเกจยังรู้ถึงแนวคิดของคำแนะนำซึ่งโดยปกติจะติดตั้งซอฟต์แวร์เช่นการพึ่งพา แต่สามารถถอนการติดตั้งได้ในภายหลังโดยไม่ส่งผลกระทบต่อสิ่งอื่นใด
  4. ยิ่งกว่านั้นจะเกิดอะไรขึ้นถ้าแอปเดียวเคยใช้แพ็คเกจ -x และไม่ทำเช่นนั้นในรีลีสใหม่ แพ็คเกจ -x จะได้รับการอัพเกรดพร้อมกับแพ็คเกจอื่น ๆ แม้จะถูกกำพร้าหรือไม่
    • Nope

แค่ถามฉันว่าคุณยังมีคำถามอีกไหม


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

ฉันคิดว่าทุกสิ่งที่คุณจะพบบนอินเทอร์เน็ตเกี่ยวกับนรกพึ่งพาเป็นข้อร้องเรียน man apt-getอ่านหน้าคนฉลาดของคุณเช่น ฉันพบว่ามันมักจะมีประโยชน์ในการใช้รุ่นที่ระบุไวยากรณ์คำสั่งเช่นapt-get -t intrepid install foo/jaunty bar/oneiricetc ... เป็นเพียงตัวอย่าง ที่จริงแล้วมันมีความหมายมากขึ้นกับ Debian ซึ่งบางครั้งคุณมิกซ์เพลงออกมาภายใต้ Ubuntu นี่เป็นธรรมเนียมที่น้อยกว่า หัวข้อที่น่าสนใจอาจเป็น apt-pinning และการตั้งค่าแพคเกจไว้ชั่วคราว
พอลHänsch

3
คุณชนะรางวัลสำหรับการตอบสนองที่ไม่ใช่รหัสที่ยาวที่สุดที่ฉันเคยเห็นในเครือข่ายสแต็คแลกเปลี่ยน
Patrick

3

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

ดังนั้นกระบวนการอัปเกรดจะลบไฟล์เก่าแทนที่ไฟล์ใหม่และสำหรับบริการระบบบางอย่างให้รีสตาร์ทเพื่อให้เวอร์ชันใหม่ทำงานอยู่

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


2

Linux จะปรับปรุงตัวเองในขณะที่ยังใช้งานอยู่ได้อย่างไร

สาเหตุหลักมาจาก Linux (และด้วยการกระจายส่วนใหญ่) ได้รับการออกแบบเพียงแค่นั้น ความสามารถในการอัพเกรดแพ็คเกจบนระบบที่กำลังทำงานอยู่นั้นเป็นเป้าหมายสำหรับการแจกจ่ายบน Linux เป็นส่วนใหญ่

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

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

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

จะไม่แทนที่ไฟล์ของโปรแกรมในขณะที่มันกำลังทำงานอยู่แบ่งบางโปรแกรมหรือไม่

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

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


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

-2

นี่คล้ายกับคุณสมบัติอื่น หวังว่าสิ่งนี้จะช่วยให้เข้าใจกระบวนการพื้นฐาน

ฉันหมายถึงความสามารถในการ "เปลี่ยนรูท" เมื่อระบบปฏิบัติการบูท

เมื่อระบบปฏิบัติการบูทระบบไฟล์รูท (อ่าน: "/") จะพร้อมใช้งานใน RAM เท่านั้น ในขณะที่กระบวนการบู๊ตเครื่องนี้ทำงานอยู่มันจะสลับ / จาก RAM ไปยัง / filesystem บนฮาร์ดดิสก์


1
ไม่ได้กลไก chroot จะไม่ถูกใช้ในระหว่างการอัพเกรดระบบ การอัพเกรดจะดำเนินการในระบบไฟล์สด คุณสามารถดูเมนูโปรแกรมของคุณได้อีกครั้งและไอคอนโปรแกรมจะเปลี่ยนไปเมื่อมีการเปลี่ยน แต่กลไก chroot จะใช้ในการติดตั้งระบบดั้งเดิมเมื่อระบบใหม่เป็น "debootstrapped" ในสภาพแวดล้อมของการเปลี่ยนแปลงรากบนพาร์ติชันดิสก์ที่สร้างขึ้นใหม่
Paul Hänsch
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.