субота, 20 априла, 2024
Како да...?

Направите сопствени Вагрант Бокс

Аутор: Марјан Ђуран

Кратак увод

Након сјајног серијала текстова о Вагранту из 2015. године Ивана Радељића, који је одличан увод у Вагрант, па и више од уводa, није остало много да се напише о самом алату, али је остало простора за евентуалне додатне потребе. У другом делу се помиње иницијализација, као и додавање кутија (енг. BOX). Шта се дешава када не одговара потребама ниједна од, на интернету доступних кутија, или је потребно увек изнова правити превише измена, или нешто треће? Потребан је (као и иначе за Вагрант) неки од провајдера као што је Virtual Box у којем ће бити инсталиран потребан оперативни систем. Као пример за ову прилику је инсталиран ЦентОС верзије 6 и у виртуал боксу назван ЦентОС6Либре. У даљем тексту ће бити објашњена подешавања и извоз система из виртуал боксa у Вагрант.

Подешавање мреже и ажурирање

За почетак, идеја је да се мрежа аутоматски пали са системом, то се постиже изменом конфигурационе датотеке (омиљеним едитором, нпр vi) која се налази на локацији

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

и линије

ONBOOT=yes

постављањем параметра yes. Затим следи рестартовање система командом reboot или init 6 или само рестартовање мрежног сервиса командом

service network restart

.

Следећи корак је ажурирање ситема командом

yum -y update

Подешавање приступа

Како сервер нема графички интерфејс, и како вагрант има само могућност приступа путем ssh (Secure Shell), потребно је конфигурисати ssh сервер. Ssh сервер је инсталиран уз систем и нема потребе посебно га инсталирати, те се поново омиљеним текст едитором мења датотека на локацији

/etc/ssh/sshd_config

За ауторизацију се користити метода размене ssh кључева, и онемогућава пријава као рут, стога је потребно изменити следеће линију конфигурационе датотеке:

PermitRoolLogin no
PubkeyAuthentication yes
AuthorizedKeysFile	.ssh/authorized_keys
PasswordAuthentication no

Најзад, потребно је да се ssh сервер пали заједно са системом. Потребно је уписати:

chkconfig sshd on

(Не)безбедност

Уколико ће се овај сервер (или радна станица) користити само за тест (ретко се виртуелни, поготово под вагрантом, сервери користе за нешто „озбиљније” у погледу безбедности) може се окалшати приступ и даља подешавања гашењем iptables сервиса чиме ће се уштедети време на постављање правила шта је дозвољено, односно шта није дозвољено да прође кроз мрежне портове система. Следећим командама се стопира сервис и онемогућава његово покретање са системом:

service iptables stop
chkconfig iptables off

Такође је у том случају може се угасити и СЕЛинукс (енг. SELinux).

СЕЛинукс је скраћено од Security-Enhanced Linux, ради се о безбедносном модулу језгра Линукс оперативног система који омогућава механизме заштите и контроле приступа (у виду листа контроле приступа Access Control List и безбедносних полиса). Изворни аутори су америчка национална безбедносна агенција (енг. NSANational Security Agency) и Ред Хет компанија која развија Ред Хет, ЦентОС и Федора дистрибуције Линукс оперативних система. Гашење СЕЛинукс модула се врши изменом једне линије кода датотеке на локацији: /etc/sysconfig/selinux

SELINUX=disabled

Инсталација потребних алата

Шта ће бити инсталирано, зависи од конкретне намене за коју ће виртуални сервер или радна станица припремају. У даљем тексту ће бити наведени неки од стандардних алата који су у стандардној поставци система, а најчешће су потребни за развој.

Потребно је узети у обзир шта ће будућим корисницима овог бокса бити заједничко у погледу алата и програма, тиме ће будућим корисницима бити смањено утрошено време након прве употребе бокса, али и иницијална величина бокса приликом преузимања. Оно што је готово увек потребно инсталирати када се ради о развојном окружењу, јесу следећи пакети:

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

Постоји и условно речено лакши начин да инсталирамо готово све потребно за даљи развој. Карактеристично за дисрибуције базиране на РедХет оперативном систему јесте опција groupinstall, те у датом случају постоји сјајно решење:

yum groupinstall -y 'Development Tools'

Могуће је и излиставање свих пакета групе, командом:

yum groupinfo 'Development Tools'

Информације о сваком пакету понаособ, нпр. о пакету гцц, могу се де добити командом:

yum info gcc

Прављење корисника вагрант

Како се вагрант виртуалним машинама приступа командом vagrant ssh морамо знати да се „у позадини” извршава команда

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

Закључујемо да је неопходно да „машина” има корисника vagrant.

Додавање новог корисника врши се командом useradd:

useradd -d /home/vagrant vagrant

Затим је потребно направити директоријум у којем ће стајати јавни ssh кључ:

mkdir /home/vagrant/.ssh

Након тога, у директоријуму /home/vagrant/.ssh је потребно креирати датотеку authorized_keyс у коју се уписује вагрантов јавни кључ (датотека са екстензијом .pub) Користи се конфигурација са несигурним паром кључева (eng. unsecure keypair), кључеви ће бити генерисани и касније у конфигурациону датотеку укључена путања ка приватном кључу. Путања до приватног кључа се спецификује као што је описано у четвртом делу серијала о Вагранту

config.ssh.private_key_path

Генерисање кључева се може урадити на следећи начин:

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

Опционим додацима команди ssh-keygen је прецизирано да користимо алгоритам РСА. РСА је асиметрични алгоритам настао давне 1977. године али је читавих двадесет година држан у тајности. Име потиче од почетних слова презимена људи који су на њему радили и који су га патентирали: Рон Ривест, Ади Схамир анд Лен Адлеман. Могуће је користити и друге алгоритме као што су DSA, ECDSA, Ed25519. Наредном командом је специфицикована величина кључа – 4096 бита и на крају директна путања до директоријума у који ће бити сачуван пар кључева, као и име датотеке. Биће креиране две датотеке, једна ће бити задато име, док ће друга бити иста, само са .pub екстензијом.

Следи постављање права приступа командом chmod:

chmod 400 /home/vagrant/.ssh/authorized_keys

Овиме смо поставили само право за читање датотеке authorized_keys кориснику вагрант који је власник датотеке, док су за директоријум .ssh потребна права и уписа и извршавања:

chmod 700 /home/vagrant/.ssh

На крају преостаје још само промена власника .ssh директоријума и његовог садржаја командом chown (change owner):

chown -R vagrant. .ssh

Следи провера да ли је са корисником вагрант све у реду, у датотеци која се налази на локацији /etc/passwd налазе се записи о свим корисницима у систему, неки су креирани акцијом администратора, неки су ту креирани системски, а неке је креирао неки од могућих сервиса који су накнадно инсталирани (нпр. апачи или mysql). Командом grep се може излистати и филтрирати садржај датотеке:

grep -i vagrant /etc/passwd

Као излаз добија се следећа линија:

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

Последња ставка везана за корисника vagrant јесте подешавање опције да корисник може да инсталира нове програме без претходне верификације, односно провере идентитета и утврђивања да ли се заиста ради о човеку који зна шифру корисничког налога vagrant.

Командом visudo отварамо датотеку на локацији /etc/sudoers у vi едитору, и као сигурносни додатак имаће синтаксну проверу, те ако направимо неку грешку, едитор ће нам пријавити проблем и нећемо моћи да затворимо датотеку пре него што грешку исправимо. Линија коју додајемо је:

vagrant ALL=(ALL) NOPASSWD: ALL

и линија коју је потребно да изменимо је:

Defaults   !requiretty

Измена конфигурације ГРУБ-а

По стандардним поставкама, сваки пут приликом паљења система, пет секунди ће стајати мени са могућношћу избора верзије кернела и измене boot loader-а, међутим, уколико нам то није потребно, као што у овом случају није, можемо то време скратити изменом (својим омиљеним текст-едитором) датотеке на локацији /boot/grub/grub.conf, линија:

set timeout=5

вредност 5 ћемо променити на 1

Последњи додаци

Преостало је додавање „Gues Additionals” компонената како би све могло да ради како треба – на неким хост системима се не може користити дељени (shared) директоријум без ових додатака. Навигирањем кроз мени виртуал бокса, опција Devices > Insert Guest Additions CD Image, затим креирање новог директоријума, омогућавање приступа датотекама из ИСО слике „Gues Additionals”, приступање датотекама и извршавање инсталационе скрипте, за коју је неопходно да су већ инсталирани претходно описани Development Tools

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

Следи још да се све остави „чисто” након обављеног посла, дакле брисање историје писаних команди.

yum clean all
history -c

Гашење виртуалног рачунара се може извршити командом:

shutdown -h now

Прелазак кутије из Виртуал Бокса у Вагрант

На самом почетку текста је наведено име инсталираног виртуалног система ЦентОС6 Либре, долази тренутак када ће име бити битно, јер се користи као идентфикатор виртуалног система који ће бити извезен као кутија. Следећа команда указује на име нове кутије и основу која се за њу користи. Име кутији дајемо VagrantLibre.box, а након тога је додајемо у листу кутија на систему и вршимо излиставање ради крајње провере да ли се појавила на листи.

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

У наредним конфигурационим датотекама ће бити могуће навести име као новонаправљеној кутији:

config.vm.box = "CentOS6Libre"

Последњи корак ове операције јесте употреба, следе команде за иницијализацију, паљење уз навођење провајдера и приступ.

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