آزمایش client/server باید در اجرای بعدی هم قابل ساخت باشد. امشب دو VM با شبکهٔ خصوصی، فایل پیکربندی و provisioner تکرارپذیر می‌سازیم و حدود همگام‌سازی پوشه را بررسی می‌کنیم.

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

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

محیط: شاخهٔ VirtualBox شب ۵۸؛ box معتبر این درس Debian/Ubuntu با apt، sudo و rsync است. میزبان هم rsync دارد. شبکهٔ 192.168.59.0/24 آزاد است؛ آن را به LAN bridge نکن. منابع کافی برای دو VM داشته باش.

در پوشهٔ تازهٔ ~/lpic305/vagrant-pair، فایل role.txt با متن lpic305-pair و زیرپوشهٔ shared بساز. همان متغیرهای نام/نسخهٔ box شب قبل را تنظیم کن. Vagrantfile:

Vagrant.configure("2") do |config|
  config.vm.box = ENV.fetch("LPIC305_BOX")
  config.vm.box_version = ENV.fetch("LPIC305_BOX_VERSION")
  config.vm.synced_folder ".", "/vagrant", disabled: true
  config.vm.synced_folder "./shared", "/srv/shared", type: "rsync"

  {"srv" => "192.168.59.10", "client" => "192.168.59.20"}.each do |name, ip|
    config.vm.define name do |node|
      node.vm.hostname = "vg305-#{name}"
      node.vm.network "private_network", ip: ip
      node.vm.provider "virtualbox" do |vb|
        vb.memory = 1024
        vb.cpus = 1
      end
      node.vm.provision "file", source: "role.txt", destination: "/tmp/lpic305-role"
      node.vm.provision "shell", inline: <<-SHELL
        set -eu
        install -o root -g root -m 0644 /tmp/lpic305-role /etc/lpic305-role
        apt-get update
        apt-get install -y curl
      SHELL
    end
  end
end

File provisioner با حساب SSH فایل را به مقصد قابل‌نوشتن می‌برد؛ shell پیش‌فرض privileged سپس آن را در /etc نصب می‌کند. provisioner باید اجرای دوباره را تحمل کند؛ نصب همین فایل و بسته تکرارپذیر است، ولی append بی‌قید به config نیست.

vagrant validate
vagrant up --provider=virtualbox
vagrant status
vagrant ssh srv -c 'cat /etc/lpic305-role; ip -br address'
vagrant ssh client -c 'ping -c 3 192.168.59.10'
vagrant provision srv

NIC خصوصی ارتباط دو مهمان را می‌دهد؛ NIC NAT provider ممکن است برای APT همچنان فعال باشد. private network به معنی نبود هر مسیر اینترنتی نیست.

اشتراک زنده یا کپی؟#

یک فایل آموزشی در shared/ روی host بساز و vagrant rsync بزن؛ در هر guest آن را زیر /srv/shared بخوان. این روش یک‌طرفه از host به guest است؛ تغییر فایل guest به host برنمی‌گردد. برای اشتراک زنده، shared folder سازگار provider و guest additions یا NFS با policy مناسب مسیر دیگری است. هیچ‌کدام جای backup نیستند.

آزمون و بازگشت: ارتباط شبکه، نصب curl و بقای config پس از اجرای مجدد provisioner را ثبت کن. با halt هر دو VM متوقف می‌شوند؛ destroy diskهای guest را حذف می‌کند و فایل‌های shared/ میزبان مستقل می‌مانند. دادهٔ لازم را پیش از حذف خارج کن و فقط همین پروژه را جمع کن.

منبع: multi-machine ، File provisioner ، Shell provisioner ، rsync .