نصب دستی ابزار در هر کانتینر، اختلاف پنهان می‌سازد. امشب دستور ساخت یک image را با Packer ثبت می‌کنیم و نتیجه را در instance تازه می‌آزماییم.

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

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

محیط: Clone مستقل lxd-a با تنظیم شب ۳۶، Packer از ناشر معتبر و دسترسی به plugin؛ اینجا container می‌سازیم. image خروجی در LXD محلی خصوصی می‌ماند. دسترسی گروه lxd مدیریتی است؛ برای کار با حساب عادی، فقط در همین VM دورریختنی آن را بده و نشست تازه بگیر. lxc list باید به daemon درست وصل شود.

ورودی، ساخت و خروجی#

Builder محیط موقت می‌سازد؛ provisioner تنظیم داخل آن را انجام می‌دهد؛ artifact خروجی نهایی است. Terraform منابع استقرار را اداره می‌کند، در حالی که Packer دستور ساخت image را اجرا می‌کند. HCL زبان پیکربندی template زیر است؛ shell مستقل نیست.

در پوشهٔ تازهٔ ~/lpic305/packer-lxd، فایل lab.pkr.hcl:

packer {
  required_plugins {
    lxd = {
      source  = "github.com/hashicorp/lxd"
      version = "= 1.0.2"
    }
  }
}

source "lxd" "lab305" {
  image          = "ubuntu:24.04"
  output_image   = "lab305-packer-v1"
  container_name = "packer305-build"
  profile        = "default"
}

build {
  sources = ["source.lxd.lab305"]
  provisioner "shell" {
    inline = [
      "printf 'packer305-v1\\n' > /etc/lpic305-build"
    ]
  }
}
cd ~/lpic305/packer-lxd
packer version
packer init .
packer fmt -check .
packer validate .
packer build .
lxc image info lab305-packer-v1
lxc launch lab305-packer-v1 packer305-check
lxc exec packer305-check -- cat /etc/lpic305-build

init ممکن است plugin را دانلود کند؛ منشأ، نسخه و checksum آن را ثبت کن. قبل build، نام‌های خروجی و کانتینر باید آزاد باشند؛ -force را برای نادیده گرفتن خروجی قبلی اضافه نکن. alias پایه متحرک است؛ fingerprint واقعی را برای بازتولید جای آن بگذار.

بررسی و بازگشت: marker باید packer305-v1 باشد. validate فقط config را بررسی می‌کند؛ boot و دادهٔ instance تازه شاهد artifact هستند. پس از خطای build، instance موقت و log را با نام دقیق بررسی کن؛ secret را داخل template یا image نگذار. instance آزمون را stop/delete و image خروجی مشخص را فقط بعد قطع وابستگی حذف کن.

منبع: builder رسمی LXD ، بلوک provisioner ، نصب plugin .