1 | # Vagrantfile to install OpenGnsys 1.1 virtual environment using VirtualBox provider. |
---|
2 | |
---|
3 | VAGRANTFILE_API_VERSION = "2" |
---|
4 | # VM provider: Oracle VM VirtualBox. |
---|
5 | ENV['VAGRANT_DEFAULT_PROVIDER'] = "virtualbox" |
---|
6 | # Language (accepted values: es_ES, ca_ES, en_GB). |
---|
7 | LANGUAGE = "es_ES" |
---|
8 | ENV['LC_ALL'] = LANGUAGE + ".UTF-8" |
---|
9 | # Number of OpenGnsys clients (accepted values: from 2 to 9). |
---|
10 | NCLIENTS = 4 |
---|
11 | # Repository virtual disk: file and size (GB). |
---|
12 | REPODISK = "ogRepo.vdi" |
---|
13 | REPOSIZE = 50 |
---|
14 | # Amount of memory for server and clients (MB) |
---|
15 | SERVERMEM = 1024 # Minimum: 512 |
---|
16 | CLIENTMEM = 512 # Minimum: 256 |
---|
17 | # Clients MAC address prefix. |
---|
18 | MACPREFIX = "08:00:27:0E:65:" |
---|
19 | NETPREFIX = "192.168.2." |
---|
20 | # Local port to access OpenGnsys Server. |
---|
21 | LOCALWEBPORT = 8443 |
---|
22 | |
---|
23 | # OpenGnsys Server provisioning script: prepare repo disk, install OpenGnsys, change default interface, configure DHCP server. |
---|
24 | OGSERVERSCRIPT = <<EOT |
---|
25 | # Exit if OpenGnsys is installed. |
---|
26 | [ -f /opt/opengnsys/doc/VERSION.txt ] && echo "Cannot provision, OpenGnsys is already installed." && exit 1 |
---|
27 | # Mount repository disk, if necesary. |
---|
28 | if [ -n "$(blkid /dev/sdb1 | grep ext4)" ]; then |
---|
29 | echo -e "o\nn\np\n\n\n\nw" | fdisk /dev/sdb |
---|
30 | mkfs -t ext4 /dev/sdb1 |
---|
31 | mkdir -p /opt/opengnsys/images |
---|
32 | echo "/dev/sdb1 /opt/opengnsys/images ext4 defaults 0 0" >> /etc/fstab |
---|
33 | mount -a |
---|
34 | fi |
---|
35 | # Install OpenGnsys and change server address. |
---|
36 | wget -q http://opengnsys.es/svn/branches/version1.1/installer/opengnsys_installer.sh -O - | bash || exit $? |
---|
37 | mv /opt/opengnsys/log/bash.log /opt/opengnsys/log/opengnsys_installer.log |
---|
38 | echo y | /opt/opengnsys/bin/setserveraddr enp0s8 |
---|
39 | # Insert DHCP data. |
---|
40 | for ((i=#{NCLIENTS}; i>0; i--)); do |
---|
41 | sed -i "/^}$/ i host ogClient0${i} { hardware ethernet #{MACPREFIX}0${i}; fixed-address #{NETPREFIX}1${i}; }" /etc/dhcp/dhcpd.conf |
---|
42 | done |
---|
43 | service isc-dhcp-server restart |
---|
44 | # Set language. |
---|
45 | export LANG="#{LANGUAGE}.UTF-8" |
---|
46 | echo "LANG=\"$LANG\"" > /etc/default/locale |
---|
47 | echo "LANG=\"$LANG\"" >> /etc/environment |
---|
48 | locale-gen --lang #{LANGUAGE} |
---|
49 | sed -i "s/XKBLAYOUT=.*/XKBLAYOUT=\"${LANG%_*}\"/" /etc/default/keyboard |
---|
50 | dpkg-reconfigure -fnoninteractive console-setup |
---|
51 | # Comment out next lines for automatic data insertion. |
---|
52 | #SQL="INSERT INTO aulas (nombreaula, idcentro, urlfoto, grupoid, ubicacion, puestos, modomul, ipmul, pormul, velmul, router, netmask, ntp, dns, proxy, modp2p, timep2p) VALUES ('Aula virtual', 1, 'aula.jpg', 0, 'Despliegue virtual con Vagrant.', 5, 2, '239.194.2.11', 9000, 70, '#{NETPREFIX}1', '255.255.255.0', '', '', '', 'peer', 30); INSERT INTO ordenadores (nombreordenador, ip, mac, idaula, idrepositorio, idperfilhard, idmenu, idproautoexec, grupoid, router, mascara, arranque, netiface, netdriver, fotoord) VALUES" |
---|
53 | #for ((i=1; i<=#{NCLIENTS}; i++)); do |
---|
54 | # SQL="$SQL ('ogClient0$i', '#{NETPREFIX}1$i', REPLACE('#{MACPREFIX}0$i',':',''), 1, 1, 0, 0, 0, 0, '#{NETPREFIX}1', '255.255.255.0', '00unknown', 'eth0', 'generic', 'fotoordenador.gif')," |
---|
55 | #done |
---|
56 | #mysql -u usuog -ppassusuog -D ogAdmBD -e "${SQL%,}" |
---|
57 | #/opt/opengnsys/bin/setclientmode ogLiveAdmin ogClient01 PERM |
---|
58 | #for ((i=2; i<=#{NCLIENTS}; i++)); do |
---|
59 | # /opt/opengnsys/bin/setclientmode ogLive ogClient0$i PERM |
---|
60 | #done |
---|
61 | # Comment out next lines to install new Angular-based web application (on early development). |
---|
62 | #apt-get install -y git nodejs npm |
---|
63 | #ln -fs nodejs /usr/bin/node |
---|
64 | #npm install bower -g |
---|
65 | #svn export http://opengnsys.es/svn/branches/version1.1-tickets/ogWebAdmin-ticket761/admin/WebConsole/angular /opt/opengnsys/www/angular |
---|
66 | #cd /opt/opengnsys/www/angular |
---|
67 | #chown -R vagrant.vagrant . |
---|
68 | #su vagrant -c "bower install -F" |
---|
69 | #sed -i 's!BASE_URL = .*$!BASE_URL = "https://localhost:#{LOCALWEBPORT}/opengnsys";!' ogWebAdmin/assets/js/config.constants.js |
---|
70 | #### TEMPORAL PATCHES |
---|
71 | #su vagrant -c "bower install angular-sanitize -F" |
---|
72 | #su vagrant -c "bower install angular-translate-loader-static-files -F" |
---|
73 | #su vagrant -c "bower install angular-ui-select -F" |
---|
74 | #su vagrant -c "bower install bootstrap -F" |
---|
75 | #su vagrant -c "bower install isteven-angular-multiselect -F" |
---|
76 | #ln -s globunet-util.min.css ogWebAdmin/lib/globunet/dist/css/globunet-util.css |
---|
77 | #cp -a ogWebAdmin/assets/i18n/es.json ogWebAdmin/assets/i18n/en.json |
---|
78 | #sed -i 's/jm.bardallo/usuog/' ogWebAdmin/assets/js/controllers/login.controller.js |
---|
79 | #sed -i "s/DirectoryIndex index.php/DirectoryIndex index.php index.html/" /etc/apache2/sites-enabled/opengnsys.conf |
---|
80 | #service apache2 reload |
---|
81 | echo "Notes:" |
---|
82 | echo "- OpenGnsys Server URL: https://localhost:#{LOCALWEBPORT}/opengnsys/" |
---|
83 | [ -d /opt/opengnsys/www/angular ] && echo "- Angular-based web URL: https://localhost:#{LOCALWEBPORT}/opengnsys/angular/ogWebAdmin/" |
---|
84 | exit 0 |
---|
85 | EOT |
---|
86 | |
---|
87 | # Client 1 OS provisioning script. |
---|
88 | MODELSCRIPT = <<EOT |
---|
89 | # Comment out next lines to install and configure OGAgent for Ubuntu. |
---|
90 | #apt-get update -y |
---|
91 | #apt-get install -y libxss1 policykit-1 python python-requests python-qt4 python-six python-prctl |
---|
92 | #wget -q --no-check-certificate https://#{NETPREFIX}10/opengnsys/descargas/ogagent_1.1.0_all.deb |
---|
93 | #dpkg -i ogagent_1.1.0_all.deb |
---|
94 | #sed -i "0,/remote=/ s,remote=.*,remote=https://#{NETPREFIX}10/opengnsys/rest/," /usr/share/OGAgent/cfg/ogagent.cfg |
---|
95 | # Remove network configuration added by Vagrant. |
---|
96 | sed -i "/VAGRANT/,$ d" /etc/network/interfaces |
---|
97 | echo "Notes:" |
---|
98 | echo "- After now, use VirtualBox GUI to disable network interface 1 and restart this VM." |
---|
99 | # Leave VM halted. |
---|
100 | sleep 2 |
---|
101 | poweroff & |
---|
102 | EOT |
---|
103 | |
---|
104 | Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| |
---|
105 | |
---|
106 | # OpenGnsys Server VM definition. |
---|
107 | config.vm.define "ogAdministrator", primary: true do |og| |
---|
108 | # Specific VirtualBox configuration. |
---|
109 | og.vm.provider "virtualbox" do |vb| |
---|
110 | # VM name, memory and CPUs. |
---|
111 | vb.name = "ogAdministrator" |
---|
112 | vb.memory = SERVERMEM |
---|
113 | vb.cpus = 1 |
---|
114 | # 2nd virtual disk path (current dir on Windows, VM dir on other OSes) |
---|
115 | if Vagrant::Util::Platform.windows? then |
---|
116 | second_disk = File.join(".", REPODISK) |
---|
117 | else |
---|
118 | line = `VBoxManage list systemproperties`.match("Default machine folder.*")[0] |
---|
119 | vb_machine_folder = line.split(':')[1].strip() |
---|
120 | second_disk = File.join(vb_machine_folder, vb.name, REPODISK) |
---|
121 | end |
---|
122 | # Create repo virtual disk, if needed. |
---|
123 | unless File.exist?(second_disk) |
---|
124 | vb.customize ['createhd', '--filename', second_disk, '--size', REPOSIZE * 1024] |
---|
125 | end |
---|
126 | # Attach repo virtual disk. |
---|
127 | vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', second_disk] |
---|
128 | end |
---|
129 | # VM base and host name. |
---|
130 | og.vm.box = "bento/ubuntu-16.04" |
---|
131 | og.vm.hostname = "ogAdministrator" |
---|
132 | # Network configuration: forward web port and attach new interface to VMs private network. |
---|
133 | og.vm.network "forwarded_port", guest: 443, host: LOCALWEBPORT, host_ip: "127.0.0.1" |
---|
134 | og.vm.network "private_network", ip: "#{NETPREFIX}10", virtualbox__intnet: true |
---|
135 | # Comment out to disable synced folder. |
---|
136 | #og.vm.synced_folder ".", "/vagrant", disabled: true |
---|
137 | # Launch provisioning script. |
---|
138 | og.vm.provision "shell", inline: OGSERVERSCRIPT |
---|
139 | end |
---|
140 | |
---|
141 | # Client 1 VM definition. |
---|
142 | config.vm.define "ogClient01", autostart: false do |v1| |
---|
143 | v1.vm.box = "bento/ubuntu-16.04" |
---|
144 | v1.vm.hostname = "ogClient01" |
---|
145 | v1.vm.network "private_network", mac: "#{MACPREFIX}01".tr(":",""), type: "dhcp", virtualbox__intnet: true |
---|
146 | v1.vm.provider "virtualbox" do |vb| |
---|
147 | vb.name = "ogClient01" |
---|
148 | vb.memory = CLIENTMEM |
---|
149 | vb.cpus = 1 |
---|
150 | vb.customize ['modifyvm', :id, '--boot1', 'net', '--boot2', 'disk'] |
---|
151 | end |
---|
152 | v1.vm.synced_folder ".", "/vagrant", disabled: true |
---|
153 | v1.vm.provision "shell", inline: MODELSCRIPT |
---|
154 | end |
---|
155 | |
---|
156 | # Clonable clients definition. |
---|
157 | (2..NCLIENTS).each do |i| |
---|
158 | config.vm.define "ogClient0#{i}", autostart: false do |cl| |
---|
159 | cl.vm.box = "clink15/pxe" |
---|
160 | cl.ssh.insert_key = false |
---|
161 | cl.vm.boot_timeout = 5 |
---|
162 | cl.vm.network "private_network", mac: "#{MACPREFIX}".tr(":","") + "%02d" % "#{i}", type: "dhcp", virtualbox__intnet: true |
---|
163 | cl.vm.provider "virtualbox" do |vb| |
---|
164 | vb.name = "ogClient0#{i}" |
---|
165 | vb.memory = CLIENTMEM |
---|
166 | vb.cpus = 1 |
---|
167 | vb.customize ['modifyvm', :id, '--boot1', 'net', '--boot2', 'disk'] |
---|
168 | vb.customize ["modifyvm", :id, "--nic1", "none"] |
---|
169 | end |
---|
170 | end |
---|
171 | end |
---|
172 | |
---|
173 | end |
---|
174 | |
---|