ตกลง, นี่คือคำแนะนำที่ฉันพบว่าได้ผล หลังจากลองผิดลองถูกอยู่สองวัน อูบุนตูจะทำได้ดีโดยชุมชนของพวกเขาในการโพสต์คำแนะนำสำหรับผู้ใช้ในท้องถิ่น https://www.agiliq.com/blog/2012/07/using-ubuntu-cloud-images-in-kvm/
ฉันสามารถค้นหาเคอร์เนลเวอร์ชัน "vmlinuz-virtual-generic" ในโฟลเดอร์ "คลายแพ็ก" ที่ฝังอยู่ในลิงก์เผยแพร่อิมเมจบนคลาวด์จากด้านบน https://cloud-images.ubuntu.com/focal/current/unpacked/. หน้าหลักมีเวอร์ชันอื่นนอกเหนือจาก Focal https://cloud-images.ubuntu.com. นี่เป็นส่วนที่สำคัญที่สุดเนื่องจาก initrd-userve.img จะไม่รู้จักดิสก์รูท คุณยังสามารถใช้ ปกติ เคอร์เนลอูบุนตู
เดอะ สาระสำคัญของมันคือ ใช้ qemu-img สร้าง -b ubuntu-*-server-cloudimg-amd64.img -f qcow2 samename.img.qcow2
คำสั่งเพื่อสร้าง VM (หรือเพียงแค่ใช้ GUI สร้างใน virt-mgr) มันจะให้ตัวเลือกในการกำหนดค่าก่อนติดตั้งและเริ่ม VM คุณจะต้องเพิ่มเคอร์เนลและ initrd จากการดาวน์โหลด "คลายแพ็ก" ไปยังส่วน Direct Boot ภายใต้ Boot Options รวมทั้ง boot args เหล่านี้: ro init=/usr/lib/cloud-init/uncloud-init root=/dev/vda ds=nocloud ubuntu-pass=รหัสผ่านเริ่มต้น
. คุณต้องบูตสองครั้งเพื่อให้รหัสผ่านใช้งานได้ ที่จริงเพียงแค่ rw root=/dev/vda1 init=/bin/bash
จะทำงานเพื่อสร้างผู้ใช้และรหัสผ่านใหม่
สังเกตคำแนะนำเหล่านี้ว่า วีด้า
. ฉันต้องใช้ vda1
เนื่องจากมีพาร์ติชันสำหรับบูตสองพาร์ติชัน vda14 สำหรับ GPT/bios_boot และ vda15 สำหรับพาร์ติชัน EFI/ESP/boot-flag ไฟล์ดิบ .img ดั้งเดิมใช้ sdaX, fyi.. การแปลงเป็น qcow2 หรือเพียงแค่ใช้ qemu-img คือสิ่งที่เปลี่ยนแปลงอย่างเห็นได้ชัด
รายละเอียดเพิ่มเติม:
หน้าวิธีใช้ที่เก่ากว่าระบุว่าไฟล์เคอร์เนลและฟล็อปปี้ดิสก์รวมอยู่ในไฟล์ tar เห็นได้ชัดว่านี่ไม่ใช่กรณีอีกต่อไปและทำให้ฉันลองผิดลองถูกมากขึ้น ข้อผิดพลาดทั่วไปค้างอยู่ที่ "GRUB_FORCE_PARTUUID พยายามบูตแบบ initrdless", "ข้อผิดพลาดที่ไม่รู้จักคำสั่ง hwmatch" และ "random: fast init done" จริงๆ แล้ว สองอันแรกคือตอนที่ไม่ได้ใช้ Direct Boot การนำเข้า Ova ใน VirtualBox จะทำการบูทด้วยตัวมันเอง ดังนั้นจึงต้องหาไฟล์เคอร์เนลภายในด้วยวิธีใดวิธีหนึ่ง ฉันชอบที่จะรู้ว่าจะทำอย่างไรใน KVM ฉันดูที่ไฟล์ XML แต่ไม่เห็นเงื่อนงำที่ชัดเจนข้างการตั้งค่าฟล็อปปี้ดิสก์ ทำให้ฉันค้นหาฟล็อปปี้ดิสก์ซึ่งนำฉันไปยังหน้าคำแนะนำหลักด้านบน ข้อผิดพลาดที่สามที่ฉันยกมาคือเมื่อไม่พบไฟล์เคอร์เนลภายในเหล่านี้ แม้ว่า fstab จะมีเลเบลที่ถูกต้องสำหรับไดรฟ์สำหรับบู๊ตก็ตาม มันไม่ได้ไปถึงด้วงดังนั้นฉันจึงไม่สามารถระบุ UUID ของดิสก์ที่นั่นได้แม้ว่ามันจะตรงกันในไฟล์ด้วง (เห็นได้ชัดว่าเพราะการใช้ Direct Boot ไม่ได้เปลี่ยนแปลงสิ่งใด ๆ )
นี่คือคำตอบสำหรับคำถามเดิมของฉัน อ้างอิงจากเนื้อหา tar ที่เก่ากว่าด้วยฟล็อปปี้ดิสก์ ฯลฯ มันทำให้ฉันมองลึกลงไปสำหรับไฟล์ "vmlinuz-virtual": การใช้อิมเมจแขกของคลาวด์ Ubuntu บนเอกสาร OpenStack อยู่ที่ไหน
แหล่งข้อมูลอื่นๆ:
เคอร์เนลโต้แย้ง uncloud-init
บอก cloud-init ว่าเป็น VM ในเครื่องและ ไม่มีเมฆ
arg ตั้งค่าเครือข่ายท้องถิ่น (แทนที่จะต้องเข้าไปและเปลี่ยน /etc/netplan/*yaml เพื่อลบที่อยู่ mac คงที่และใช้ สมัครเน็ตแพลน
แล้ว systemctl รีสตาร์ทเครือข่าย
)
นี่คือข้อมูลเพิ่มเติมที่ฉันได้เรียนรู้:
การพยายามตั้งค่าไฟล์ yaml ของ cloud-init ด้วยวิธีง่ายๆ ด้วยไฟล์ในเครื่องทำให้ฉันพบวิธีแก้ปัญหานี้สำหรับการใช้ cloud-init กับเซิร์ฟเวอร์ Ubuntu iso: https://discourse.ubuntu.com/t/automated-server-install-quickstart/16614. มีคำสั่งง่ายๆ ไม่กี่คำสั่งในการสร้างไฟล์ จากนั้นเรียกใช้เซิร์ฟเวอร์แบบซับในชั้นเดียวเพื่อสร้างตำแหน่ง seedfrom net ติดตั้งและบู๊ตด้วย Kvm น่าเสียดายหลังจากใช้อิมเมจดิบเพื่อสร้าง VM ใน Virtmanager มันจะไม่บูตเพราะไม่พบ /stillmounted/casper/initrd ด้วยเหตุผลบางประการ ดังนั้นฉันจึงคัดลอกไฟล์เคอร์เนลจาก iso ที่เมาต์แล้วลองใช้ (เพราะฉันสงสัยว่าอิมเมจคลาวด์ด้านบนไม่มีไดรเวอร์เสียงในเคอร์เนล) แต่มันก็ค้างอยู่ในไฟล์ casper/initrd
ดังนั้นฉันจึงกลับไปที่ VirtualBox ova my-seed.iso ทำงานเพื่อเปลี่ยนชื่อเซิร์ฟเวอร์หลังจากค้นหาวิธีส่งพารามิเตอร์เคอร์เนลเป็นเวลานาน (คุณไม่สามารถใช้ vboxmanage setextradata ได้) ฉันค้นพบอีกครั้งว่าคุณสามารถกด shift ขณะบูทเพื่อแก้ไข Grub args หลังจากใช้ init=/bin/bash เพื่อตั้งรหัสผ่านและ vga=792 เพื่อเพิ่มขนาดการแสดงผล ฉันพบจุดบกพร่องในรูปภาพในไฟล์ visudo ที่ #รวม..
ไม่มีช่องว่างที่ฆ่า sudo หลังจากได้รับการอัปเดต ฉันพบว่ามีข้อบกพร่องของ VirtualBox ที่ไม่อนุญาตให้ใช้คลิปบอร์ดแบบสองทิศทางในเวอร์ชันล่าสุด: https://superuser.com/questions/1293042/bidirectional-clipboard-not-working-in-virtualbox. แต่ อย่างน้อยที่สุดฉันก็มีวิธีสร้าง Ubuntu VM พื้นฐานโดยไม่ต้องผ่านกระบวนการติดตั้งทั้งหมด. วิธีนี้ควรใช้ได้กับ distros อื่น ๆ อีกมากมาย (อ้อ. แตะ /etc/cloud/cloud-init.disabled
ดูเหมือนว่าคำสั่งด้านบนจะทำงาน)
ติดตามเกร็ดความรู้:
- my-config.iso ใช้งานได้ในการรันครั้งแรกเท่านั้น (เว้นแต่จะมีวิธีการเรียกใช้ cloud-init)
- ถือกะเพื่อเข้าสู่ Grub ใช้เคอร์เนลหาเรื่อง
vga=792
สำหรับเทอร์มินัลที่ใหญ่ขึ้น ตั้งค่าการหมดเวลาด้วงใน /etc/default/grub และเรียกใช้ update-grub
- เสียงไม่ทำงานบนอิมเมจคลาวด์เหล่านี้โดยไม่ต้องติดตั้ง
apt ติดตั้ง linux-generic
(ประมาณ 800Mbs) และตั้งค่าเอาต์พุตเสียงที่เปิดใช้งานใน Vbox
การปรับปรุงครั้งล่าสุด: ในที่สุดฉันก็พบกุญแจสำคัญในการทำให้อิมเมจคลาวด์บูตโดยไม่ต้องใช้ไฟล์ Direct Boot. โดยทั่วไปให้ติดตั้งเวอร์ชันเคอร์เนลที่ไม่ใช่ kvm ทั่วไปโดยใช้ apt ติดตั้ง linux-image-$(uname -r)
และเปลี่ยน kvm เป็นทั่วไป (~ 90Mb) หรือใช้เคอร์เนล kvm และ ssh ใน VM โดยใช้ systemctl เปิดใช้งาน serial-getty@ttyS0.service && systemctl เริ่ม serial-getty@ttyS0.service
, แล้ว คอนโซล virtsh <ชื่อ vm>
. ในการเข้าใช้งานเบื้องต้นเพื่อให้ผู้ใช้งาน root=/dev/vda1 init=/bin/bash rw
สำหรับเคอร์เนลอาร์กิวเมนต์ จากนั้นลบหรือย้ายไฟล์สองไฟล์ /etc/grub.d/01.. และ /etc/default/grub.d/50.. และใส่ความคิดเห็นบรรทัดแรกของ /etc/default/grub.d/40-force- partuuid.cfg. เปลี่ยน /etc/default/grub ที่ซ่อนอยู่
ถึง เมนู
, ปรับการหมดเวลา ฯลฯ หากต้องการ แล้ว ปรับปรุงด้วง
และควรใช้งานได้