Vagrant Box Oluşturma (Sıfırdan ve mevcut sanal makineler için)
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 ssh
bağ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 ssh
ile 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/