Ling este o solutie simpla si interesanta pentru executia aplicatiilor Erlang sub hipervizorul Xen. Mai multe detalii ar trebui sa fie pe http://erlangonxen.org/, dar de cateva saptamani serverul este inaccesibil.
Ling este platforma pentru care este recompilat Erlang/OTP ca sa functioneze in Xen si railing este utilitarul care genereaza imaginea pentru Xen.
Avantajele executiei Erlang in Ling pe Xen: necesita memorie putina, latenta scazuta la pornirea nodului Erlang, invulnerabilitate la hackeri si virusi, portabilitate, poate merge si pe platforme ARM, PIC32, …
Am testat solutia pe ubuntu/trusty64 in Vagrant si pe ubuntu-16.04.2-server-amd64 in VirtualBox.
Pe oricare dintre cele doua servere testate si probabil pe orice distributie Linux moderna bazata pe Debian trebuie instalate pachetele:
apt-get update
apt-get upgrade
apt-get install git htop mc
apt-get install build-essential
apt-get install libncurses-dev
apt-get install libssl-dev
#eventual instalare apache Formatting Objects Processor pentru documentatie
#apt-get install fop
#instalare xen si tools
apt-get install xen-hypervisor-amd64
apt-get install xen-tools
Ling se compileaza cu succes numai pe Erlang/OTP 17, iar ultima versiune este 17.5
Ca sa instalez versiunea dorita, am folosit kerl - https://github.com/kerl/kerl
In folderul de lucru (~/erlang) am adus si compilat kerl:
mkdir ~/erlang
cd ~/erlang
git clone https://github.com/kerl/kerl
cd kerl/
./kerl build 17.5 17.5
Dupa compilarea cu succes a distributiei aduse de kerl, urmeaza compilarea Ling.
Trebuie editat fisierul Makefile din distributia Ling sa includa o referinta la locatia Erlang/OTP 17.5:
~/.kerl/builds/17.5/release_17.5/bin
cd ~/erlang
git clone https://github.com/cloudozer/ling
cd ling/
#edit Makefile sa contina ERL_BIN := ~/.kerl/builds/17.5/release_17.5/bin
make
Dupa ce s-a compilat Ling cu succes este timpul pentru generarea unei imagini de test.
mkdir ~/erlang/test-ling
cp railing/railing ~/erlang/test-ling/
cd ~/erlang/test-ling/
ls
./railing image -m 128 -n test1
Railing genereaza imaginea de test pentru Xen si imaginea contine un interpretor Erlang:
#lista de masini virtuale executate sub XEN
sudo xl list
#porneste imaginea Ling sub XEN:
sudo xl create -c domain_config
In alta sesiune SSH se poate vedea lista de masini virtuale:
sudo xl list
Masina virtuala Ling, numita test1, ocupa 128 Mb RAM.
Se pot specifica argumente pentru pornirea masinii virtuale la crearea imaginii cu railing:
#compilare, constructie imagine si executie
./rebar3 compile
./railing image -m 256 -n test2 -e "-eval test1:main(1000),application:start(app1)"
sudo xl create -c domain_config
railing are grija sa adauge in imaginea Xen toate modulele Erlang necesare, toate fisierele compilate din directorul curent si sa genereze corect secventa de pornire a aplicatiilor conform parametrului -e
4 iulie 2017: dupa cateva zile de teste si cautari am gasit cum se configureaza reteaua in nodul Ling sub Xen.
Masina virtuala Ling primeste parametrul -dhcp (sau -ipaddr x.x.x.x -netmask y.y.y.y -gateway z.z.z.z), iar Xen trebuie sa adauge cel putin o placa de retea dupa cum este specificat in configuratie:
#genereaza imaginea Xen din toate *.beam gasite in folderul curent + subfoldere
./railing image -m 128 -n test3 -e "-dhcp -eval test1:main(1000),application:start(app1)"
#adauga o placa de retea la configuratia masinii virtuale din Xen
echo "vif = ['mac=00:11:22:33:44:01,bridge=xenbr0']" >> domain_config
Mai multe detalii privind configurarea TCP/IP a solutiei Ling + Erlang se gasesc la Bare metal Erlang "Hello World", un articol scris de Vanshdeep Singh.