“ รุ่นใหม่ของ /boot/grub/menu.lst พร้อมใช้งาน” เมื่ออัพเกรด Ubuntu บนเซิร์ฟเวอร์ AWS


29

ฉันเพิ่งลองทำsudo do_release_upgradeบนเซิร์ฟเวอร์ AWS EC2 Ubuntu 13.10 เพื่ออัพเกรดเป็น 14.04 ทุกอย่างเป็นไปด้วยดีจนกระทั่งฉันได้รับข้อความต่อไปนี้:

A new version of /boot/grub/menu.lst is available, but the version installed 
currently has been locally modified.

  What would you like to do about menu.lst?       

   * install the package maintainer's version
   * keep the local version currently installed
   * show the differences between the versions
   * show a side-by-side difference between the versions
   * show a 3-way difference between available versions
   * do a 3-way merge between available versions (experimental)
   * start a new shell to examine the situation

  <Ok>

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

แต่ทำไมฉันถึงได้รับข้อความนี้และนี่คือวิธีที่ถูกต้องในการจัดการมัน


คำตอบ:


8

ปัญหานี้อาจเกิดจากปัญหาต่าง ๆ มากมายดังนั้นจึงไม่มีวิธีแก้ไขปัญหาเดียว ขั้นตอนเหล่านี้ควรใช้กับ EC2

ที่มา:

ปัญหานี้เกิดจากข้อขัดแย้งการเปลี่ยนแปลงในพื้นที่และระยะไกลในการกำหนดค่าดั้งเดิมของGrub มรดก Grub และ Grub2 ใช้ตำแหน่งการตั้งค่าที่แตกต่างกัน:

  • มรดกด้วง: /boot/grub/menu.lst
  • Grub2: /boot/grub/grub.cfg

สาเหตุ:

คุณอาจกำลังใช้ AMI ที่ได้รับการสนับสนุนของ Amazon EBS อินสแตนซ์สร้างระบบไฟล์รูทจากอิมเมจพื้นฐานที่สร้างไว้ล่วงหน้า (สแน็ปช็อต) การกำหนดค่าด้วงถูกเขียนในสแน็ปช็อต แต่รีจีสทรี UCF ไม่ได้ถูกล้างอย่างถูกต้อง ซึ่งหมายความว่าคุณมีสแน็ปช็อตที่คิดว่าการกำหนดค่าmenu.lstนั้นได้รับการแก้ไขในเครื่อง ข้อมูลเพิ่มเติมสามารถดูได้ที่นี่: https://bugs.launchpad.net/ubuntu/+source/cloud-init/+bug/1485685

ทำไม ubuntu ถึงใช้ UCF สำหรับ grub ได้อธิบายไว้ที่นี่: https://askubuntu.com/a/147079

วิธีการแก้ปัญหา (s):

วิธีแก้ปัญหาทั่วไปอย่างหนึ่งที่ใช้งานได้คือการลบเมนูรายการและกำหนดค่าใหม่ สิ่งนี้ทำให้มั่นใจได้ว่ารายการรีจิสทรี ucf และไฟล์การกำหนดค่าแก้ไขเป็นแฮชเดียวกัน

#Remove the menu.lst config.

sudo rm /boot/grub/menu.lst
# Generate a new configuration file. 
sudo update-grub-legacy-ec2 -y

#Upgrade the configuration
sudo apt-get dist-upgrade -qq --force-yes

โซลูชันที่สองกำลังแก้ไขการกำหนดค่า UCF เพื่อยอมรับการเปลี่ยนแปลงผู้ดูแลระบบโดยอัตโนมัติ

unset UCF_FORCE_CONFFOLD
export UCF_FORCE_CONFFNEW=YES
ucf --purge /var/run/grub/menu.lst
sudo apt-get dist-upgrade -qq --force-yes

Disclaimer:

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

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

โชคดี :)


ubuntu 18.04 เห็น W: --force-yes เลิกใช้แล้วใช้หนึ่งในตัวเลือกที่เริ่มต้นด้วย - อนุญาตแทน
Scott Stensland

มันเป็นปี 2019 และวิธีนี้ไม่ได้ผล (อีกต่อไป) ดูเหมือนว่าข้อผิดพลาดจะถดถอยอีกครั้งดู: bugs.launchpad.net/cloud-images/+bug/1747464
DarkNeuron

0

รุ่นของคำถามนี้ของฉันไป: "ฉันมีเคอร์เนลอัตโนมัติ upates บน ec2 และเมื่อเร็ว ๆ นี้ได้apt-get autoremove -yแม้หลังจากที่sudo update-grubฉันเห็นเฉพาะ3.13.0-48ในรายการ/boot/grub/menu.lstแต่ไม่ได้อยู่ในเมล็ดที่ติดตั้งฉันเมาแล้ว?"

คำตอบของฉัน: "อาจไม่ได้เมาในระบบ Ubuntu อื่น ๆmenu.lstไม่มีอยู่และupdate-grubดูเหมือนจะวางการตั้งค่า/boot/grub/grub.cfgแทนฉันเดาว่าmenu.lstมันเป็นสิ่งประดิษฐ์แปลก ๆ จาก Ubuntu AMI ของ EC2 หรือมีปฏิสัมพันธ์กับบรรจุภัณฑ์หรือการจัดการการกำหนดค่าท้องถิ่น "


0

โดยส่วนตัวแล้วในสถานที่ของคุณฉันจะ "แสดงความแตกต่างระหว่างรุ่น" โปรดระวังสิ่งที่เปลี่ยนแปลงคืออะไรจากนั้นทำการทดสอบกับความแตกต่างใหม่ในอินสแตนซ์ "การพัฒนา" AWS หากฉันระมัดระวังเป็นพิเศษฉันจะอ่าน man page สำหรับการเปลี่ยนแปลงที่เป็นปัญหา (อาจไม่ใช่เมนู menu แต่ซอฟต์แวร์อื่น ๆ เช่นเคอร์เนลหรือ heck อะไรก็ได้) เพื่อค้นหาว่าสิ่งที่เปลี่ยนแปลงไป .

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


0

ฉันเพิ่งพบปัญหา "เดียวกัน" กับ VPS จาก OVH
ในกรณีของฉัน (และอื่น ๆ อีกมากมายที่ฉันพบในขณะที่ Google) การเปลี่ยนแปลงเพียงอย่างเดียวคือช่องว่าง
พวกเขามาจากที่ไหนฉันไม่รู้ แต่ถ้าคุณเลือกshow the differences between the versionsและคำตอบก็คือNo non whitespace changes detectedใช้เวอร์ชันผู้ดูแล


-1

ตัวเลือกของคุณ

  • แสดงความแตกต่างระหว่างรุ่น

แล้วก็

  • ติดตั้งเวอร์ชันของผู้ดูแลแพ็คเกจ

หรือ

  • ทำให้รุ่นท้องถิ่นติดตั้งอยู่ในปัจจุบัน

อย่างไรก็ตามตอนนี้คุณสามารถเรียกใช้

ls -hl /boot/grub/menu.lst*
diff --suppress-common-lines /boot/grub/menu.lst*

1
-1; สิ่งนี้ไม่ตอบคำถามเลย (จริง ๆ แล้วส่วนใหญ่เป็นเพียงแค่ทำซ้ำบิตของข้อความที่ฉันยกมาแล้ว) และไม่ได้อธิบายว่าทำไมฉันจึงต้องการเรียกใช้รหัสที่ให้มาหรือสิ่งที่จะทำ
Mark Amery

ไฟล์แฮชไม่ตรงกันทำให้เกิดข้อความที่มีตัวเลือกคุณต้องค้นหาความแตกต่างระหว่างพวกเขาเพื่อเลือกตัวเลือกที่เหมาะสม "whatis ls diff" พิมพ์คำอธิบายของคำสั่ง
Imya

"ไฟล์แฮชไม่ตรงกันทำให้ข้อความมีตัวเลือก" - ใช่ฉันอ่านได้ คำถามของฉันคือเหตุใดความแตกต่างเหล่านี้จึงมีอยู่ในอินสแตนซ์ของ EC2 และผลที่ตามมาของการรักษาหรือการละทิ้งมันคืออะไร คำตอบของคุณไม่ได้อยู่ที่นี่เพียงแค่ทำซ้ำสิ่งที่พิมพ์ในข้อความ คำตอบของคุณไม่ได้พูดถึง Amazon หรือ EC2 มันไม่เกี่ยวข้องกับคำถามที่ถูกถาม
Mark Amery

โอ้โหแม้ไม่ได้ให้เนื้อหาของไฟล์และรอให้คนอื่นรู้ว่าเกิดอะไรขึ้นกับระบบของเขา
Imya

1
ไม่ใช่ "ระบบของฉัน" ฉันถามเกี่ยวกับพฤติกรรมการติดตั้ง EC2 มาตรฐานในคำถามเกี่ยวกับ EC2 และติดแท็กด้วยแท็ก EC2 แน่นอนว่าฉันตัดสินใจที่จะไม่ทิ้งเนื้อหาทั้งหมดของไฟล์ลงในคำถามเพราะไม่จำเป็นต้องเข้าใจและตอบคำถามได้ ใครก็ตามที่ใช้ Ubuntu บน EC2 สามารถตรวจสอบเนื้อหาได้หากต้องการตรวจสอบปัญหา ฉันไม่เห็นว่าทำไมฉันจึงคาดว่าจะให้แหล่งที่มาของไฟล์ที่นี่มากกว่าที่ฉันจะทิ้งซอร์สโค้ดของไลบรารีที่เป็นที่นิยมไปยังคำถาม Stack Overflow ก่อนถามเกี่ยวกับมัน
Mark Amery
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.