لینوکس ۳۰۵؛ شب ۵۴: cloud-init؛ هویت و تنظیم اولین بوت
فهرست نوشته
یک 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 .