یک اجرای مستقیم QEMU نشان می‌دهد ماشین از چه disk و شبکه‌ای استفاده می‌کند. امشب cloud image را با user-data کوچک بوت و از پورت محلی وارد آن می‌شویم.

این جلسه بخشی از دورهٔ لینوکس ۳۰۵ در ۶۰ شب است.

جایگاه در دوره: هدف‌های 351.3، 353.3 آزمون 305-300.

محیط: hv-a، BASE_IMAGE معتبر شب ۱۱، حساب دارای /dev/kvm و SSH key مستقل دوره. cloud-init در شب ۵۴ مفصل‌تر می‌آید.

ابتدا mkdir -p ~/lpic305/direct را اجرا کن. در ~/lpic305/direct فایل meta-data بساز:

instance-id: direct-lab01-v1
local-hostname: direct-lab01

user-data با public key واقعی همان فایل کلید دوره؛ placeholder زیر پیش از اجرا جایگزین شود:

#cloud-config
users:
  - name: student
    groups: [sudo]
    shell: /bin/bash
    sudo: ["ALL=(ALL) NOPASSWD:ALL"]
    lock_passwd: true
    ssh_authorized_keys:
      - REPLACE_WITH_LAB_PUBLIC_SSH_KEY
ssh_pwauth: false

student داخل VM آزمایشگاهی sudo دارد؛ این مجوز به حساب host مربوط نیست. private key به seed منتقل نمی‌شود.

cd ~/lpic305/direct
qemu-img create -f qcow2 -F qcow2 -b "$BASE_IMAGE" direct-lab01.qcow2
qemu-img resize direct-lab01.qcow2 12G
cloud-localds seed.img user-data meta-data
qemu-system-x86_64 -name direct-lab01 -accel kvm -cpu host -smp 2 -m 2048 \
  -drive file=direct-lab01.qcow2,format=qcow2,if=virtio \
  -drive file=seed.img,format=raw,if=virtio,readonly=on \
  -netdev user,id=n0,hostfwd=tcp:127.0.0.1:2222-:22 \
  -device virtio-net-pci,netdev=n0 -nographic

BASE_IMAGE باید absolute باشد؛ فایل overlay جدید است. گزینه‌های disk را صریح تعریف کرده‌ایم و SSH فقط روی loopback host منتشر می‌شود.

در ترمینال دوم:

ssh -p 2222 -i ~/lpic305/keys/id_ed25519 student@127.0.0.1

اثر انگشت host key را از console guest تطبیق بده؛ StrictHostKeyChecking را خاموش نکن. cloud-init و نصب اولیه ممکن است زمان بخواهند. توقف با poweroff داخل guest بر خروج ناگهانی فرایند ترجیح دارد.

آزمون و بازگشت: ورود key-only، hostname و عدم دسترسی بیرونی پورت 2222 را بسنج. بعد از shutdown فقط overlay/seed همین تمرین را حذف یا آرشیو کن؛ base دست‌نخورده باقی است.

منبع: QEMU invocation ، NoCloud .