5 điểm bởi GN⁺ 2024-01-31 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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

1 bình luận

 
GN⁺ 2024-01-31
Ý kiến trên Hacker News
  • Khuyên dùng https://virt-manager.org/. Trong môi trường của tôi nó hoạt động tốt hơn nhiều, và cũng hỗ trợ chạy QEMU trên hệ thống từ xa qua SSH
    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ó
    • virt-manager là một trong những phần mềm bị đánh giá thấp nhất. Nó mạnh mẽ và rất hay được dùng
      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
    • Không phải cùng một thứ, nhưng Quickemu cũng hoạt động tốt qua SSH
      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 :)
    • Thật đáng ngạc nhiên khi một chương trình chỉ dùng để cấu hình lại có thể quan trọng và hữu ích đến vậy
      Đ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
    • libvirt và virt-manager chỉ là giao diện người dùng đơn giản hóa cho phần mềm thực sự là QEMU và KVM. Chúng giải quyết vấn đề tương đối vụn vặt là phân tích tệp cấu hình và truyền các tùy chọn đúng cho binary QEMU
      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
    • Tôi thích cách truyền trực tiếp tùy chọn dòng lệnh cho QEMU. Cách này rất hợp với các OS cũ như Windows NT on MIPS hay Ultrix
  • Xin nhắc lại lưu ý bảo mật từ lần trước nó được đăng[1]
    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...
    • Có thể giải thích vì sao đây là vấn đề bảo mật không? Xác minh khóa GPG đúng là cách tốt nhất để bảo đảm tính xác thực, nhưng việc này không khác mấy so với điều gần như mọi người đều làm: tải ISO từ chính trang HTTPS của bản phân phối
      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
    • Bao nhiêu phần trong chuyện này là thực hành đã lỗi thời? TCP/TLS chẳng phải đã phải cung cấp checksum và chữ ký nguồn rồi sao?
      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
    • Hơn nữa, trong lúc livestream, tác giả đã nhập mật khẩu người dùng bằng bàn phím cơ khi micro đang bật
    • Nó không tải “các tệp tùy ý từ Internet”; có vẻ chỉ dùng nguồn gốc chính thức
    • Nhân tiện, macOS hiện đã xác minh chữ ký. Windows thì không có chữ ký khả dụng
      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
  • Trên macOS, UTM[0] làm việc này khá tốt. Nó cũng có một gallery nhỏ các image dựng sẵn[1]
    0. https://mac.getutm.app/
    1. https://mac.getutm.app/gallery/
  • libvirt có kèm virt-install, nên có thể nhanh chóng tạo và tự động cài đặt Windows cùng nhiều bản phân phối Linux. Tôi chưa thử trên Mac
    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 --unattended

Uố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 os

  • Nếu cần image đĩa Fedora 39 thì cũng có virt-builder
    $ virt-builder fedora-39
    Sau đó có thể import vào libvirt bằng virt-install --import

  • virt-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 --unattended
    ERROR 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

    • Nhìn chung tôi đồng ý rằng shell script thường không dễ đọc cho lắm, nhưng code này thật ra không tệ
      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
    • Có lý do gì để nhìn shell script khác với phần mềm khác chỉ vì nó là shell script không? Trước khi chạy OS, bạn có đọc mã nguồn kernel không? Còn trình duyệt web thì sao?
      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
    • Nếu thật sự lo lắng và có thời gian, dù có thể bị chê, bạn cũng có thể trò chuyện với ChatGPT về code. Prompt có thể kiểu như sau
      “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
    • Tôi xem đây là vấn đề xây dựng niềm tin trong phần mềm nói chung. Vấn đề là thiết lập niềm tin thế nào, và nhà phát triển cùng người dùng có kỳ vọng, trách nhiệm gì
      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?

    • Khó trả lời vì còn phụ thuộc rất nhiều vào việc bạn làm gì với VM. Cái này trông giống một wrapper cho QEMU, một công cụ cố chọn cấu hình hợp lý để dễ tạo VM mới
    • Đặc biệt có khía cạnh tăng tốc GPU. Chạy họp video trong Windows bên trong vbox gần như là không thể, và chỉ cần GUI app hơi phức tạp một chút cũng đã bị trễ đáng kể
    • Nó có vẻ gần với một lựa chọn thay thế cho Gnome Boxes hơn. Công cụ này tải image mới nhất, cung cấp thiết lập mặc định phù hợp với distro/OS đó, và hỗ trợ thêm cả những OS khó nhằn như Windows và macOS
    • Nếu thực sự chạy macOS thì đây là lợi thế lớn so với cài trên VirtualBox hoặc VMware. Ở các bên đó phải patch nhiều thứ nên rất khó chạy
  • Trên Linux tôi rất khuyến nghị Incus/LXD. Chạy VM đơn giản như sau

    incus launch images:ubuntu/22.04 --vm my-ubuntu-vm  
    

    Sau khi chạy, truy cập shell như sau

    incus exec my-ubuntu-vm /bin/bash  
    

    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ùng docker 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ằng machinectl start ubuntumachinectl shell ubuntu
    systemd-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

  • 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%?

    • Bạn đang chạy như thế nào? Nếu chạy KVM/QEMU với cấu hình phù hợp thì hiệu năng gần như bare metal
  • 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

    • Cái này khác Proxmox rất nhiều. Proxmox được tạo ra cho phòng lab và trung tâm dữ liệu cần host nhiều server dưới dạng VM
      Quickemu có vẻ chủ yếu nhắm tới việc sử dụng trên desktop