برای آزمایش کوتاه، تعریف محیط باید کنار پروژه بماند. امشب Vagrantfile می‌سازیم تا ساخت، ورود و توقف یک VM را با دستورهای مشخص انجام دهیم.

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

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

محیط: میزبان آزمایشگاهی دارای Vagrant و VirtualBox سازگار؛ این شاخه جدا از VMهای libvirt است. در میزبان KVM فعال، اجرای هم‌زمان backendهای ناسازگار را فرض نکن؛ پنجرهٔ جدا یا host مستقل داشته باش.

box همان ISO نیست#

Box بستهٔ پایهٔ مخصوص provider است؛ provider مانند VirtualBox یا plugin مربوط به libvirt VM را اجرا می‌کند. نام مشترک box به معنی وجود artifact برای همهٔ providerها نیست. در سرفصل نام تاریخی Atlas آمده؛ برای دریافت فعلی از Vagrant Cloud و مسیر مستند ناشر استفاده کن.

در پوشهٔ تازهٔ ~/lpic305/vagrant فایل Vagrantfile:

Vagrant.configure("2") do |config|
  config.vm.box = ENV.fetch("LPIC305_BOX")
  config.vm.box_version = ENV.fetch("LPIC305_BOX_VERSION")
  config.vm.hostname = "vg305"
  config.vm.synced_folder ".", "/vagrant", disabled: true
  config.vm.provider "virtualbox" do |vb|
    vb.memory = 1024
    vb.cpus = 1
  end
end

پیش از اجرا دو متغیر زیر را به نام و نسخهٔ واقعی box معتبر دارای provider VirtualBox و معماری میزبان تنظیم کن؛ این placeholderها نام دانلودشدنی نیستند:

export LPIC305_BOX='REPLACE_WITH_VERIFIED_BOX_NAME'
export LPIC305_BOX_VERSION='REPLACE_WITH_PUBLISHED_VERSION'
vagrant version
vagrant validate
vagrant up --provider=virtualbox
vagrant status
vagrant ssh

داخل guest با hostname، cat /etc/os-release و ip -br address نتیجه را ثبت و با exit خارج شو. up ممکن است box دانلود کند؛ ناشر، checksum، نسخه و شرایط مجوز آن را قبل دریافت بررسی کن. فایل Vagrantfile Ruby است و می‌تواند کد host اجرا کند؛ فایل ناشناس را مانند ورودی بی‌اثر باز نکن.

vagrant ssh-config
vagrant halt
vagrant status
vagrant up

halt توقف است و disk را نگه می‌دارد؛ suspend state را ذخیره می‌کند و destroy VM را حذف می‌کند. .vagrant/ وضعیت محلی و گاهی مسیر credential دارد؛ آن را در Git عمومی نگذار. box cache مستقل از instance است.

آزمون و بازگشت: یک فایل شاهد داخل guest بساز؛ پس از halt/up باید باقی بماند. برای حذف، vagrant destroy را فقط در همین پوشه بعد backup اجرا کن؛ فایل synced میزبان رفتار حذف متفاوت دارد. پاک کردن box لازم نیست.

منبع: Vagrantfile ، boxها ، providerها ، چرخهٔ فرمان‌ها .