- Quickemu là một wrapper cho QEMU: chỉ cần chọn hệ điều hành muốn chạy, công cụ sẽ tự động xử lý các thiết lập cần thiết để tạo máy ảo, giúp tạo và chạy nhanh VM Windows, macOS, Linux
quickget tự động tải xuống image OS upstream của hệ điều hành mong muốn và tạo file cấu hình VM; quickemu phát hiện phần cứng và chạy VM với cấu hình phù hợp với máy tính
- Mục tiêu ban đầu là kiểm thử nhanh các bản phân phối Linux; VM và cấu hình có thể đặt ở vị trí tùy ý như ổ lưu trữ USB ngoài hoặc thư mục home, và không cần quyền nâng cao để chạy
- Hiện hỗ trợ gần 1000 phiên bản hệ điều hành, gồm macOS, Windows, hầu hết BSD, FreeDOS, Haiku, KolibriOS, OpenIndiana, ReactOS, v.v.
- Hoạt động trên host Linux và macOS, cung cấp các tính năng cần thiết khi dùng VM như SPICE, chia sẻ file, QEMU Guest Agent, VirGL, USB passthrough, port forwarding, âm thanh, khởi động EFI và Legacy BIOS
Quickemu làm gì
- Quickemu là wrapper bọc quanh QEMU, tự động xử lý các thiết lập cần thiết khi tạo máy ảo
- Người dùng chỉ cần chọn hệ điều hành muốn chạy, không cần tự chỉ định nhiều tùy chọn cấu hình
- Có hai công cụ cốt lõi
quickget: tự động tải xuống OS upstream của hệ điều hành mong muốn và tạo file cấu hình VM
quickemu: liệt kê phần cứng host rồi chạy máy ảo với cấu hình tối ưu phù hợp với máy tính đó
Điểm khởi đầu của dự án và phạm vi hiện tại
- Mục tiêu ban đầu là giúp kiểm thử các bản phân phối Linux một cách nhanh chóng
- VM và cấu hình có thể được lưu ở vị trí tùy ý, như ổ lưu trữ USB ngoài hoặc thư mục home
- Việc chạy máy ảo không cần quyền nâng cao
- Phạm vi hỗ trợ hiện đã mở rộng vượt ngoài các bản phân phối Linux sang macOS, Windows, hầu hết BSD và các hệ điều hành không phải Linux
- Ví dụ được hỗ trợ gồm FreeDOS, Haiku, KolibriOS, OpenIndiana, ReactOS, v.v.
Hệ điều hành và host được hỗ trợ
- Host hỗ trợ Linux và macOS
- Hệ điều hành guest bao gồm
- macOS Sequoia, Sonoma, Ventura, Monterey, Big Sur, Catalina, Mojave
- Windows 10 và 11, bao gồm TPM 2.0
- Windows Server 2022, 2019, 2016
- Ubuntu và mọi Ubuntu flavour chính thức
- Hầu hết BSD và nhiều hệ điều hành không phải Linux
- Hỗ trợ guest ARM64, có thể chạy VM aarch64
- Trên host ARM: chạy native
- Trên host x86_64: chạy bằng mô phỏng
- Số lượng phiên bản hệ điều hành được hỗ trợ đạt gần 1000
Tính năng VM
- Cung cấp hỗ trợ SPICE đầy đủ, bao gồm chia sẻ clipboard giữa host/guest
- Tùy theo hệ điều hành guest, hỗ trợ nhiều cách chia sẻ file
- VirtIO-webdavd: chia sẻ file cho guest Linux và Windows
- VirtIO-9p: chia sẻ file cho guest Linux và macOS
- Samba: chia sẻ file cho guest Linux, macOS, Windows; host phải cài đặt
smbd
- Hỗ trợ QEMU Guest Agent, cho phép truy cập agent cấp hệ thống bằng các lệnh QMP chuẩn
- Về đồ họa và thiết bị, hỗ trợ tăng tốc VirGL, USB device passthrough và smartcard passthrough
- Cũng bao gồm các tính năng mạng và I/O
- Tự động SSH port forwarding vào guest
- Network port forwarding
- Âm thanh full-duplex
- Hỗ trợ chữ nổi Braille
- Khởi động EFI có hoặc không có SecureBoot
- Khởi động Legacy BIOS
Luồng bắt đầu nhanh
- Sau khi cài đặt Quickemu, tạo và chạy VM trong hai bước
- Dùng
quickget để tải xuống image ISO và tạo file cấu hình VM
quickget nixos unstable minimal
- Dùng
quickemu để khởi động VM với file cấu hình do quickget tạo
quickemu --vm nixos-unstable-minimal.conf
- Chạy
quickget không kèm tham số để xem danh sách tất cả hệ điều hành được hỗ trợ
Tài liệu và tài liệu tham khảo
- Wiki bao quát cách bắt đầu, cấu hình nâng cao và cách sử dụng
1 bình luận
Ý kiến trên Hacker News
Trước đây khi phải quản lý nhiều host VM khác nhau cùng VM cục bộ, tôi luôn dùng nó
Bạn cần biết ở mức nào đó các thuật ngữ cơ bản về VM, nhưng nó gợi nhớ nhiều đến kiểu GUI cũ đầy ắp tính năng và sức mạnh
Nếu nhu cầu của bạn đơn giản hoặc ít quen thuộc với mảng VM hơn, Gnome Boxes dùng cùng backend nhưng cung cấp GUI gọn gàng. Vì đơn giản nên kém linh hoạt hơn, nhưng điểm hay là nếu sau này cần chỉnh các thiết lập không được Boxes hiển thị, bạn có thể mở VM của Gnome Boxes bằng virt-manager
Khi chạy trên hệ thống từ xa qua SSH, nó “X forwarding” console QEMU về phiên Wayland cục bộ của Fedora
Ban đầu tôi tưởng nó chạy ở chế độ headless, nên khá bất ngờ khi cửa sổ hiện lên :)
Điều đó khiến tôi tưởng tượng sẽ ra sao nếu phần cấu hình được tách khỏi phần mềm mà nó cấu hình. Thay vì phải học cách mỗi chương trình UI tự phát minh lại bánh xe, bạn có thể chọn trình quản lý cấu hình mình thích
Thứ gần nhất hiện nay là các tệp cấu hình dạng văn bản. Mọi chương trình dùng chúng đều phải chọn một ngôn ngữ cụ thể và vị trí lưu trữ
Ý tưởng tôi nghĩ nhiều gần đây là một lớp trung gian cấu hình. UI cấu hình hiển thị cho người dùng có thể dùng ngôn ngữ/định dạng mong muốn, rồi lấy dữ liệu đó làm nguồn sự thật duy nhất để sinh ra các tệp cấu hình cho phần mềm đọc
Chúng cũng có một số chức năng quản trị hữu ích như start/stop dựa trên tệp cấu hình hay truy cập serial console, nhưng những thứ này cũng rất đơn giản để tự triển khai bằng shell script. Cách libvirt xử lý storage thì dài dòng và phức tạp kinh khủng, vậy mà thin LV hay ZFS cũng không xử lý đúng
Trừ khi bạn muốn vận hành theo kiểu doanh nghiệp tiêu chuẩn và không định học các phần mềm nền tảng như QEMU hay shell, hoặc thật sự cần những tính năng lưng chừng của libvirt, tôi khuyên nên dùng trực tiếp QEMU trên KVM và tự viết script. Bạn sẽ học được nhiều về QEMU hơn so với một wrapper Python không mấy hay ho, và cũng kiểm soát hệ thống tốt hơn
Ngoài ra IBM/Red Hat dường như đã gần như bỏ virt-manager, khi đẩy nó sang giao diện web mới là Copilot
Quickemu thú vị hơn vì bạn có thể xem lướt ví dụ rồi khởi động VM mới ngay, thay vì mất thời gian học một UI lớn và phức tạp
Công cụ này tải các tệp tùy ý từ Internet, rồi đối chiếu checksum của chúng với một tệp tùy ý khác trên Internet[2]
Đây không phải thực hành bảo mật tốt nhất. Cách đúng là commit khóa GPG của nhà phát triển bản phân phối vào repository và xác minh mọi tệp bằng khóa đó
Nói vậy không phải để phủ nhận công sức của dự án này trong việc tìm ra các flag đúng để truyền cho QEMU nhằm boot nhiều OS khác nhau
[1] https://news.ycombinator.com/item?id=28797129
[2] https://github.com/quickemu-project/quickemu/blob/0c8e1a5205...
Hơn nữa, nó còn thực hiện thêm bước kiểm tra khớp hash mà đa số không làm
Thời FTP, checksum và GPG là bắt buộc. Với HTTP/TCP, TCP lo phần retry và checksum, nên nhu cầu GPG càng lớn hơn, nhưng vì tấn công man-in-the-middle nên cả hai vẫn cần thiết
Nhưng nếu là HTTPS thì vì sao nó vẫn quan trọng? HTTPS chẳng phải thay thế cả hai việc xác minh và kiểm tra chữ ký đó sao
Hy vọng sự quan tâm trên Hacker News năm nay sẽ thúc đẩy ai đó triển khai xác minh chữ ký cho Linux
0. https://mac.getutm.app/
https://docs.getutm.app/installation/ios/
Ví dụ Alma Linux gần đây như sau
$ virt-install --name alma9 --memory 1536 --vcpus 1 --disk path=$PWD/alma9.img,size=20 --cdrom alma9.iso --unattendedUống xong một tách cà phê quay lại thì VM Alma Linux đã cài đặt xong và đang chạy. Danh sách OS được hỗ trợ thay đổi tùy theo phiên bản libvirt, có thể kiểm tra bằng lệnh sau
$ osinfo-query osNếu cần image đĩa Fedora 39 thì cũng có virt-builder
$ virt-builder fedora-39Sau đó có thể import vào libvirt bằng
virt-install --importvirt-install có tự động tải ISO xuống không? Khi thử thì hiện thông báo như sau
$ virt-install --name alma9 --memory 1536 --vcpus 1 --disk path=$PWD/alma9.img,size=20 --cdrom alma9.iso --unattendedERROR Validating install media 'alma9.iso' failed: Must specify storage creation parameters for non-existent path '/home/foo/alma9.iso'.Không rõ kết quả này sẽ ra sao. Tò mò hostname là gì, đĩa được phân vùng thế nào, những package nào được cài, múi giờ và layout bàn phím được đặt thành gì, v.v.
Để làm việc này thì tôi đã phải cài libosinfo-bin
Sự tiện lợi của những công cụ kiểu này rất tuyệt, nhưng gộp hai script chính lại thì khoảng 5000 dòng Bash
Tôi muốn xem xét trước khi chạy, nhưng lại không muốn đọc 5000 dòng Bash
Không biết có thuyết phục được không, nhưng tôi đã đọc Bash script trước khi chạy và thấy nó được cấu trúc khá tốt. Chức năng được tách thành các hàm rõ ràng, tên biến hợp lý, có comment hữu ích, không có luồng điều khiển kỳ quặc hay gọi gián tiếp, và việc dùng các lệnh khó hiểu cũng được giảm tối thiểu. Nó thuộc nhóm shell script dễ đọc nhất trong số những gì tôi từng thấy
Nếu nghĩ về việc script này thực sự làm, việc code tương đối thẳng cũng hợp lý. Cốt lõi là chạy một lệnh khởi động QEMU. Phần code còn lại là kiểm tra hệ thống cục bộ để quyết định đưa đối số nào cho lệnh đó, hoặc tải xuống vài file nếu cần
Tôi không có ý nói là nên chạy một cách mù quáng, nhưng tiêu chí chọn phần mềm để chạy thường không phụ thuộc vào việc ta có quen thuộc với source code hay không
“You are a linux guru, and you have extensive experience with bash and all forms of unix/linux. I am going to be pasting a large amount of code in a little bit at a time. Every time I paste code and send it to you, you are going to add it to the previous code and ask me if I am done. When I am done we are going to talk about the code, and you are going to help me break it down and understand what is going on. If you understand you will ask me to start sending code, otherwise ask me any questions before you ask for the code.”
Tôi đã dùng cách này với code ngắn hơn, nhưng vẫn dưới 1000 dòng và vượt giới hạn prompt, và nó hoạt động khá tốt. Tôi thừa nhận ChatGPT dạo này lười hơn, đôi khi phải nói rõ là đừng lười và hãy đưa toàn bộ output được yêu cầu, nhưng nhìn chung nó giải thích code khá ổn
Câu “nhiều con mắt sẽ làm mọi lỗi trở nên nông” với một số người dùng trông như một câu sáo rỗng khiến họ ngừng suy nghĩ. Họ cho rằng vì code được công khai và có thể review nên sẽ ổn, rồi hình dung có một đội auditor đi khắp nơi kiểm tra mọi thứ, nhưng thực tế tôi lại dễ dự đoán có ác ý hơn là thiện ý
Bên Windows đã có các tiện ích tinh chỉnh suốt hàng chục năm. Chúng thu hút những người tin rằng các nhà phát triển ở “tập đoàn lớn” không có động lực vắt kiệt hiệu năng hệ thống, và đã để lại những tùy chọn dễ dùng, hữu ích cho mọi người đằng sau các thiết lập nhanh hay tweak registry. Tôi nhớ đến TronScript thỉnh thoảng thấy xuất hiện; xét về lịch sử và mức độ tham gia thì có vẻ vượt qua được bài kiểm tra cảm tính, nên tôi nghĩ là ổn, nhưng nó che giấu chi tiết dưới danh nghĩa tự động hóa và khiến người dùng kỳ vọng công cụ sẽ thay họ đưa ra quyết định tốt. Bạn có thể đào sâu để điều tra và học xem chuyện gì diễn ra, vì sao diễn ra, nhưng với nhiều người thì thực chất nó chẳng khác gì binary
Điều may mắn là phần lớn các công cụ như vậy có tệp người dùng hạn chế nên không quá đáng để xâm phạm. Nếu một thương hiệu cụ thể được dùng đủ nhiều thì có thể xảy ra tình huống như CCleaner của Piriform bị cài backdoor vào năm 2017
Trông có vẻ thú vị, nhưng ai đó có thể cho tôi biết nó có lợi ích gì với người thỉnh thoảng chỉ chạy Windows 11 bằng VirtualBox trên Ubuntu không?
Trên Linux tôi rất khuyến nghị Incus/LXD. Chạy VM đơn giản như sau
Sau khi chạy, truy cập shell như sau
Incus/LXD cũng hỗ trợ system container
Một thứ tôi thích nhưng gần như ít được nhắc đến là systemd-nspawn. Chạy
docker create --name ubuntu ubuntu:22.04, rồi dùngdocker export ubuntuđể tạo tar từ một image Docker bất kỳSau đó chỉ cần giải nén vào
/var/lib/machines/ubuntu. Cần chọn image có sẵn systemd hoặc cài systemd bên trong container. Cuối cùng vào bằngmachinectl start ubuntuvàmachinectl shell ubuntusystemd-nspawn rất đơn giản, nhẹ, và mô phỏng một máy Linux thực rất tốt. Lấy một phân vùng root bất kỳ dựa trên systemd rồi khởi động bằng systemd-nspawn là nó chạy nguyên như vậy
Có số liệu thay đổi hiệu năng nào so với việc chỉ chạy VM thông thường không? Tôi thường chạy guest Linux trong host Linux, nhưng hay thất vọng về hiệu năng của guest
Tôi chưa từng tìm hiểu cách tinh chỉnh trải nghiệm VM nên tò mò không biết mình đang bỏ lỡ bao nhiêu. Nhanh hơn 5%? Hay 100%?
Có chạy native trên Arm, tức Apple Silicon, không? Các phiên bản macOS mới nhất thì sao? Có tăng tốc đồ họa không? Mạng được xử lý thế nào?
Tôi tò mò nó khác Proxmox ở điểm nào, và liệu có thể tái tạo thủ công các tối ưu hóa ở đây trong môi trường Proxmox của mình không
Quickemu có vẻ chủ yếu nhắm tới việc sử dụng trên desktop