utorak, 16 aprila, 2024
Kako da...?

Napravite sopstveni Vagrant Boks

Autor: Marjan Đuran

Kratak uvod

Nakon sjajnog serijala tekstova o Vagrantu iz 2015. godine Ivana Radeljića, koji je odličan uvod u Vagrant, pa i više od uvoda, nije ostalo mnogo da se napiše o samom alatu, ali je ostalo prostora za eventualne dodatne potrebe. U drugom delu se pominje inicijalizacija, kao i dodavanje kutija (eng. BOX). Šta se dešava kada ne odgovara potrebama nijedna od, na internetu dostupnih kutija, ili je potrebno uvek iznova praviti previše izmena, ili nešto treće? Potreban je (kao i inače za Vagrant) neki od provajdera kao što je Virtual Box u kojem će biti instaliran potreban operativni sistem. Kao primer za ovu priliku je instaliran CentOS verzije 6 i u virtual boksu nazvan CentOS6Libre. U daljem tekstu će biti objašnjena podešavanja i izvoz sistema iz virtual boksa u Vagrant.

Podešavanje mreže i ažuriranje

Za početak, ideja je da se mreža automatski pali sa sistemom, to se postiže izmenom konfiguracione datoteke (omiljenim editorom, npr vi) koja se nalazi na lokaciji

/etc/sysconfig/network-scripts/ifcfg-eth0

i linije

ONBOOT=yes

postavljanjem parametra yes. Zatim sledi restartovanje sistema komandom reboot ili init 6 ili samo restartovanje mrežnog servisa komandom

service network restart

.

Sledeći korak je ažuriranje sitema komandom

yum -y update

Podešavanje pristupa

Kako server nema grafički interfejs, i kako vagrant ima samo mogućnost pristupa putem ssh (Secure Shell), potrebno je konfigurisati ssh server. Ssh server je instaliran uz sistem i nema potrebe posebno ga instalirati, te se ponovo omiljenim tekst editorom menja datoteka na lokaciji

/etc/ssh/sshd_config

Za autorizaciju se koristiti metoda razmene ssh ključeva, i onemogućava prijava kao rut, stoga je potrebno izmeniti sledeće liniju konfiguracione datoteke:

PermitRoolLogin no PubkeyAuthentication yes AuthorizedKeysFile	.ssh/authorized_keys PasswordAuthentication no

Najzad, potrebno je da se ssh server pali zajedno sa sistemom. Potrebno je upisati:

chkconfig sshd on

(Ne)bezbednost

Ukoliko će se ovaj server (ili radna stanica) koristiti samo za test (retko se virtuelni, pogotovo pod vagrantom, serveri koriste za nešto „ozbiljnije” u pogledu bezbednosti) može se okalšati pristup i dalja podešavanja gašenjem iptables servisa čime će se uštedeti vreme na postavljanje pravila šta je dozvoljeno, odnosno šta nije dozvoljeno da prođe kroz mrežne portove sistema. Sledećim komandama se stopira servis i onemogućava njegovo pokretanje sa sistemom:

service iptables stop chkconfig iptables off

Takođe je u tom slučaju može se ugasiti i SELinuks (eng. SELinux).

SELinuks je skraćeno od Security-Enhanced Linux, radi se o bezbednosnom modulu jezgra Linuks operativnog sistema koji omogućava mehanizme zaštite i kontrole pristupa (u vidu lista kontrole pristupa Access Control List i bezbednosnih polisa). Izvorni autori su američka nacionalna bezbednosna agencija (eng. NSANational Security Agency) i Red Het kompanija koja razvija Red Het, CentOS i Fedora distribucije Linuks operativnih sistema. Gašenje SELinuks modula se vrši izmenom jedne linije koda datoteke na lokaciji: /etc/sysconfig/selinux

SELINUX=disabled

Instalacija potrebnih alata

Šta će biti instalirano, zavisi od konkretne namene za koju će virtualni server ili radna stanica pripremaju. U daljem tekstu će biti navedeni neki od standardnih alata koji su u standardnoj postavci sistema, a najčešće su potrebni za razvoj.

Potrebno je uzeti u obzir šta će budućim korisnicima ovog boksa biti zajedničko u pogledu alata i programa, time će budućim korisnicima biti smanjeno utrošeno vreme nakon prve upotrebe boksa, ali i inicijalna veličina boksa prilikom preuzimanja. Ono što je gotovo uvek potrebno instalirati kada se radi o razvojnom okruženju, jesu sledeći paketi:

yum install -y wget kernel-devel gcc nano openssl-devel gcc-c++ mc vim centos-release-SCL

Postoji i uslovno rečeno lakši način da instaliramo gotovo sve potrebno za dalji razvoj. Karakteristično za disribucije bazirane na RedHet operativnom sistemu jeste opcija groupinstall, te u datom slučaju postoji sjajno rešenje:

yum groupinstall -y 'Development Tools'

Moguće je i izlistavanje svih paketa grupe, komandom:

yum groupinfo 'Development Tools'

Informacije o svakom paketu ponaosob, npr. o paketu gcc, mogu se de dobiti komandom:

yum info gcc

Pravljenje korisnika vagrant

Kako se vagrant virtualnim mašinama pristupa komandom vagrant ssh moramo znati da se „u pozadini” izvršava komanda

 ssh -i /putanja/do/privatnog/ključa/ vagrant@//adresavirtualnemašine//

Zaključujemo da je neophodno da „mašina” ima korisnika vagrant.

Dodavanje novog korisnika vrši se komandom useradd:

useradd -d /home/vagrant vagrant

Zatim je potrebno napraviti direktorijum u kojem će stajati javni ssh ključ:

mkdir /home/vagrant/.ssh

Nakon toga, u direktorijumu /home/vagrant/.ssh je potrebno kreirati datoteku authorized_keys u koju se upisuje vagrantov javni ključ (datoteka sa ekstenzijom .pub) Koristi se konfiguracija sa nesigurnim parom ključeva (eng. unsecure keypair), ključevi će biti generisani i kasnije u konfiguracionu datoteku uključena putanja ka privatnom ključu. Putanja do privatnog ključa se specifikuje kao što je opisano u četvrtom delu serijala o Vagrantu

config.ssh.private_key_path

Generisanje ključeva se može uraditi na sledeći način:

ssh-keygen -t rsa -b 4096 -f /putanja/do/ključeva

Opcionim dodacima komandi ssh-keygen je precizirano da koristimo algoritam RSA. RSA je asimetrični algoritam nastao davne 1977. godine ali je čitavih dvadeset godina držan u tajnosti. Ime potiče od početnih slova prezimena ljudi koji su na njemu radili i koji su ga patentirali: Ron Rivest, Adi Shamir and Len Adleman. Moguće je koristiti i druge algoritme kao što su DSA, ECDSA, Ed25519. Narednom komandom je specificikovana veličina ključa – 4096 bita i na kraju direktna putanja do direktorijuma u koji će biti sačuvan par ključeva, kao i ime datoteke. Biće kreirane dve datoteke, jedna će biti zadato ime, dok će druga biti ista, samo sa .pub ekstenzijom.

Sledi postavljanje prava pristupa komandom chmod:

chmod 400 /home/vagrant/.ssh/authorized_keys

Ovime smo postavili samo pravo za čitanje datoteke authorized_keys korisniku vagrant koji je vlasnik datoteke, dok su za direktorijum .ssh potrebna prava i upisa i izvršavanja:

chmod 700 /home/vagrant/.ssh

Na kraju preostaje još samo promena vlasnika .ssh direktorijuma i njegovog sadržaja komandom chown (change owner):

chown -R vagrant. .ssh

Sledi provera da li je sa korisnikom vagrant sve u redu, u datoteci koja se nalazi na lokaciji /etc/passwd nalaze se zapisi o svim korisnicima u sistemu, neki su kreirani akcijom administratora, neki su tu kreirani sistemski, a neke je kreirao neki od mogućih servisa koji su naknadno instalirani (npr. apači ili mysql). Komandom grep se može izlistati i filtrirati sadržaj datoteke:

grep -i vagrant /etc/passwd

Kao izlaz dobija se sledeća linija:

vagrant:x:500:500:vagrant:/home/vagrant:/bin/bash

Poslednja stavka vezana za korisnika vagrant jeste podešavanje opcije da korisnik može da instalira nove programe bez prethodne verifikacije, odnosno provere identiteta i utvrđivanja da li se zaista radi o čoveku koji zna šifru korisničkog naloga vagrant.

Komandom visudo otvaramo datoteku na lokaciji /etc/sudoers u vi editoru, i kao sigurnosni dodatak imaće sintaksnu proveru, te ako napravimo neku grešku, editor će nam prijaviti problem i nećemo moći da zatvorimo datoteku pre nego što grešku ispravimo. Linija koju dodajemo je:

vagrant ALL=(ALL) NOPASSWD: ALL

i linija koju je potrebno da izmenimo je:

Defaults   !requiretty

Izmena konfiguracije GRUB-a

Po standardnim postavkama, svaki put prilikom paljenja sistema, pet sekundi će stajati meni sa mogućnošću izbora verzije kernela i izmene boot loader-a, međutim, ukoliko nam to nije potrebno, kao što u ovom slučaju nije, možemo to vreme skratiti izmenom (svojim omiljenim tekst-editorom) datoteke na lokaciji /boot/grub/grub.conf, linija:

set timeout=5

vrednost 5 ćemo promeniti na 1

Poslednji dodaci

Preostalo je dodavanje „Gues Additionals” komponenata kako bi sve moglo da radi kako treba – na nekim host sistemima se ne može koristiti deljeni (shared) direktorijum bez ovih dodataka. Navigiranjem kroz meni virtual boksa, opcija Devices > Insert Guest Additions CD Image, zatim kreiranje novog direktorijuma, omogućavanje pristupa datotekama iz ISO slike „Gues Additionals”, pristupanje datotekama i izvršavanje instalacione skripte, za koju je neophodno da su već instalirani prethodno opisani Development Tools

mkdir /mnt/cdrom mount /dev/cdrom /mnt/cdrom cd /mnt/cdrom ./VBoxLinuxAdditions.run

Sledi još da se sve ostavi „čisto” nakon obavljenog posla, dakle brisanje istorije pisanih komandi.

yum clean all history -c

Gašenje virtualnog računara se može izvršiti komandom:

shutdown -h now

Prelazak kutije iz Virtual Boksa u Vagrant

Na samom početku teksta je navedeno ime instaliranog virtualnog sistema CentOS6 Libre, dolazi trenutak kada će ime biti bitno, jer se koristi kao identfikator virtualnog sistema koji će biti izvezen kao kutija. Sledeća komanda ukazuje na ime nove kutije i osnovu koja se za nju koristi. Ime kutiji dajemo VagrantLibre.box, a nakon toga je dodajemo u listu kutija na sistemu i vršimo izlistavanje radi krajnje provere da li se pojavila na listi.

vagrant package --output VagrantLibre.box --base CentOS6Libre vagrant box add VagrantLibre VagrantLibre.box vagrant box list

U narednim konfiguracionim datotekama će biti moguće navesti ime kao novonapravljenoj kutiji:

config.vm.box = "CentOS6Libre"

Poslednji korak ove operacije jeste upotreba, slede komande za inicijalizaciju, paljenje uz navođenje provajdera i pristup.

vagrant init LibreVagrant vagrant up --provider=virtualbox vagrant ssh