یک cloud image برای همهٔ ماشین‌ها یکسان است، اما نام، کاربر و کلید ورود هر نمونه باید مشخص باشد. امشب تنظیم اولین بوت را با cloud-init و یک seed محلی قابل بررسی انجام می‌دهیم.

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

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

محیط: hv-a، ابزارهای شب ۱۱ و image پایهٔ معتبر؛ پوشهٔ تازهٔ ~/lpic305/cloudinit و مهمانی مستقل با نام ci305. مثال شب ۱۲ را با overlay تازه تکرار می‌کنیم؛ overlay آن شب را دوباره استفاده نکن.

داده از کجا می‌آید؟#

Datasource منبع دادهٔ اولیه است. در NoCloud، فایل meta-data هویت نمونه و فایل user-data تنظیم درخواستی را می‌دهند. seed محلی رسانهٔ همین داده است؛ سرویس cloud عمومی لازم نداریم.

در پوشهٔ تمرین، meta-data:

instance-id: ci305-v1
local-hostname: ci305

فایل user-data؛ کلید عمومی واقعی دوره را جای placeholder بگذار:

#cloud-config
users:
  - name: student
    groups: [sudo]
    shell: /bin/bash
    lock_passwd: true
    sudo: ["ALL=(ALL) NOPASSWD:ALL"]
    ssh_authorized_keys:
      - REPLACE_WITH_LAB_PUBLIC_SSH_KEY
ssh_pwauth: false
disable_root: true
package_update: true
packages: [curl, qemu-guest-agent]
write_files:
  - path: /etc/lpic305-role
    owner: root:root
    permissions: '0644'
    content: |
      training-cloud-init

مجوز sudo مخصوص مهمان دورریختنی است. private key روی میزبان می‌ماند و وارد seed نمی‌شود. نصب بسته به دسترسی مخزن و DNS مهمان نیاز دارد.

cd ~/lpic305/cloudinit
cloud-localds seed.img user-data meta-data
qemu-img create -f qcow2 -F qcow2 -b "$BASE_IMAGE" ci305.qcow2
qemu-img resize ci305.qcow2 12G

فرمان QEMU شب ۱۲ را با نام و disk جدید و همین seed اجرا کن. پورت 2222 باید آزاد باشد؛ مهمان قبلی خاموش است. پیش از ورود، fingerprint کلید میزبان guest را از کنسول تطبیق بده.

نتیجه را داخل مهمان بسنج#

sudo cloud-init status --wait
sudo cloud-init schema --system
hostnamectl --static
id student
cat /etc/lpic305-role
dpkg-query -W curl qemu-guest-agent
sudo sshd -T

نام و فایل شاهد باید مطابق config باشند؛ در خروجی مؤثر SSH، ورود با password خاموش باشد. باز کردن SSH به‌تنهایی پایان موفق cloud-init را ثابت نمی‌کند. schema ساختار داده را بررسی می‌کند؛ نصب واقعی بسته یا سلامت سرویس آزمون جداست.

تمرین و بازگشت: reboot کن و بقای فایل را بسنج. برای تنظیمی متفاوت، overlay تازه و instance-id تازه بساز؛ تغییر seed روی مهمان مصرف‌شده تضمین اجرای دوبارهٔ همهٔ moduleها نیست. خروجی خام user-data ممکن است راز داشته باشد؛ evidence عمومی را محدود کن. پس از shutdown، فقط artifact همین نمونه را کنار بگذار.

منبع: NoCloud ، قالب cloud-config ، اعتبارسنجی user-data ، ماژول‌های cloud-init .