Vagrant Box Oluşturma (Sıfırdan ve mevcut sanal makineler için)

Emin Aktaş
5 min readOct 11, 2020

--

Vagrant, bir sanal makine(virtual machine — VM) oluşturma ve yönetme aracıdır. VirtualBox, Hyper-V ve Docker üzerinde makineler sağlayarak bizlere birden çok işletim sisteminde çalışan geliştirme ortamı sağlar.

Vaktiniz olursa bu işlemleri Docker ve Hyper-V üzerinde oluşturmayı deneyebilirsiniz. Ben VirtualBox ile gerçekleştireceğim.

Vagrant ile sanal makine oluşturmadan, bir sanal makine için sshbağlantısı ve dosya paylaşımı için gerekli işlemlerin yapılmasından ve paketleme işlemlerinden bahsedeceğim.

Eğer bilgisayarınızda Vagrant ve VirtualBox kurulu değilse aşağıdaki bağlantılardan işletim sisteminize uygun olanı indirip kurabilirsiniz.

https://www.virtualbox.org/wiki/Downloads

https://www.vagrantup.com/downloads

Öncelikle ana makinemizde bir klasör oluşturup, klasör içerisine Vagrant ile bir Vagrantfile dosyasını oluşturacağız.

$ mkdir my-vagrant
$ cd my-vagrant

Vagrantfile oluştururken temel almak istediğimiz sisteme karar vermelisiniz. Örnek çalışmamız için Centos/8 ile bu işlemleri yapacağız. Burada kullandığımız centos/8 elimizde yok, bunu gidip Vagrant reposundan bulup, indirecek.

vagrant init centos/8

Sanal makinemizi ayaklandırmadan önce burada sistem gereksinimleri gibi çeşitli ayarlamalar yapabilirsiniz. (Bu bağlantıdan yapabileceğiniz ayarlamaları inceleyebilirsiniz.)

Sanal makinemizi ayaklandırırken varsayılan olarak bir anahtar çifti (public ve private anahtarlar) üretir.

Eğer Vagrant’ın varsayılan anahtar çiftini kullanmak istiyorsanız, Vagrantfile içerisine aşağıdaki komutu ekleyebilirsiniz. Bu bize Vagrant ssh konfigürasyon ayarlarında değişiklik yapmadan vagrant ssh ile sanal makineye erişim imkanı sağlar.

config.ssh.insert_key = false

Sanal makine için özel anahtar çiftiyle kullanmak isterseniz. Vagrant ssh konfigürasyonunda gerekli düzenlemeleri yapıp vagrant sshile bağlanabilirisinz veya aşağıdaki komut satırını kullanarak sanal makineye erişebilirsiniz.

-i ile private anahtarın dosya yolunu belirtmeniz gerekir. Private anahtar dosyasını .vagrant/machines/default/virtualbox/ dizini altında bulabilirsiniz.

ssh vagrant@127.0.0.1 -p 2222 -i /Projects/Vagrant/my-vagrant/.vagrant/machines/default/virtualbox/private_key

Ben burada yeni anahtar çifti oluşturmadan işlemlere devam edeceğim. Sıradaki komut ile makineyi ayaklandıralım.

vagrant up

Centos/8 sanal makinem artık ayaklanmış durumdadır.

vagrant ssh ile sanal makineye erişebiliriz.

Şimdi, oluşturduğumuz ortamı kendimize göre hazırlayalım. Önce güncellemeler yapalım.

sudo yum update -y 
sudo yum upgrade -y

Güncelleme sonrasında sistemi yeniden başlatalım.

sudo shutdown -r now

Buraya kadar olan işlemler sıfırdan bir sanal makine oluşturmak istediğimizde yapılacak adımlar idi. Bundan sonraki adımları ise hali hazırda olan makinelerin içinde yapılabilir.

Eğer hali hazırda bir sistem için box oluşturacaksanız ve bu sistemi dağıtmayı planlıyorsanız. Sıradaki işlemleri uygulayarak private anahtarı dağıtmadan hali hazırda Vagrant dosyalarında olan insecure_private_key ile erişim sağlanabilir hale gelir.

mkdir -p /home/vagrant/.sshchmod 0700 /home/vagrant/.sshwget --no-check-certificate https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub -O /home/vagrant/.ssh/authorized_keyschmod 0600 /home/vagrant/.ssh/authorized_keyschown -R vagrant /home/vagrant/.ssh

Guest Tool, işletim sisteminin paylaşılan klasörleri işlemesine ve “daha iyi performans ve kullanılabilirlik için konuk işletim sistemini optimize etmesine” yardımcı olur.

Guest Tool için gerekli kurulumlar yapılmalıdır.

Centos için:

yum install -y gcc perl kernel-headers kernel-devel

Ubuntu için:

sudo apt-get install -y gcc build-essential linux-headers-server

Kurulumlar gerçekleştikten sonra sistemi yeniden başlatın.

Guest Tool ISO dosyasını eklemek için VirtualBox arayüzüne erişin, ardından işlem yapmak istediğiniz sanal makineyi seçin ve Show sekmesine tıklayın.

Açılan ara yüzden Devices sekmesini seçtikten sonra Insert Guest Additions CD image.. seçeneğini seçerek, sanal bir CDROM’a ISO yansısı eklenir.

Aşağıdaki hatayı alırsanız, optik sürücü kurulu olmadığı için yansıyı ekleyemedik.

Bu hatayı düzeltmek için VirtualBox ara yüzünden önce sanal makineyi kapatın.

Ardından, Storage sekmesine tıklayıp, Controller: IDE üzerine sağ tıklayarak Optical Drive seçeneğini seçin

VBoxGuestAdditions.iso seçip, Choose sekmesine tıklayın. Yansıyı bu şekilde sanala makinemize ekleme işlemini gerçekleştirdik.

Ekran görüntüsünde görüldüğü gibi tekrar makineyi ayaklandırabilirsiniz.

mount işlemini gerçekleştirdikten sonra VBoxLinuxAdditions.run betimlemesini başlatın ve kurulumu gerçekleştirin.

sudo mount /dev/cdrom /mntcd /mntsudo ./VBoxLinuxAdditions.run

Artık sanal makineyi paketlemeye hazırız. Aşağıdaki komut ile paketlemek istediğimiz sanal makine ismini --base den sonra belirterek oluşturabiliriz.

vagrant package --base my-vagrant_default_1602433108135_4564

Şimdi yaptığımız paketi test edelim. Önce paketi (package.box) alıp farklı klasöre taşıyalım.

Ardından paketi yeni-vagrant ismiyle Vagrant box listesine yeni bir isimle ekleyelim.

vagrant box add yeni-vagrant ./package.box

Sonra, Vagrantfile oluşturalım. Komut sonunda eklediğimiz isim sayesinde yeni-vagrant paketin ismi belirtilmiş oluruz.

vagrant init yeni-vagrant

Sanal makineyi başlatmadan önce eş zamanlamak istediğimiz dosyayı Vagrantfile içerisine aşağıdaki ekran görüntüsündeki gibi ekleyin.

İlk sanal makinemizi oluştururken tekrardan yeni anahtar çifti oluşturmaması için Vagrantfile config.ssh.insert_key = false komutunu ekleriz.

Sıfırdan bir Vagrantfile oluşturduğumuz için bazı adımları tekrarlamak durumunda kaldık aslında hali hazırda oluşturduğunuz Vagrantfile ile bu işlemide yapabilirdik.

vagrant up ile sanal makineyi ayaklandırabilirsiniz.

Yeni oluşturduğumuz paket ile kurulumu başarılı bir şekilde gerçekleştirdikten sonra başarılı bir şekilde çalıştığını aşağıdaki ekran görüntüsünden görebilirsiniz.

Not: Vagrant’ı UTF-8 hatası için bu bağlantıdan yararlanabilirsiniz: https://github.com/hashicorp/vagrant/issues/3937

Kaynaklar:

https://computingforgeeks.com/easiest-way-to-create-vagrant-box-from-existing-virtualbox-vm/

https://computingforgeeks.com/easiest-way-to-create-vagrant-box-from-existing-virtualbox-vm/

https://blog.engineyard.com/building-a-vagrant-box

https://scotch.io/tutorials/how-to-create-a-vagrant-base-box-from-an-existing-one

https://linuxize.com/post/how-to-install-vagrant-on-ubuntu-20-04/

--

--