1 | VAGRANTFILE_API_VERSION = "2" |
---|
2 | # VM provider: Oracle VM VirtualBox. |
---|
3 | ENV['VAGRANT_DEFAULT_PROVIDER'] = "vmware_esxi" |
---|
4 | # OpenGnsys version and OGAgent version. |
---|
5 | BRANCH=ENV['BRANCH'] || "main" |
---|
6 | BRANCH_EXTRA=ENV['BRANCH_EXTRA'] || BRANCH |
---|
7 | # OGAgent version. |
---|
8 | OGAGENTVERSION="1.1.2" |
---|
9 | # Language (accepted values: es_ES, ca_ES, en_GB). |
---|
10 | LANGUAGE = "es_ES" |
---|
11 | ENV['LC_ALL'] = LANGUAGE + ".UTF-8" |
---|
12 | # Number of OpenGnsys clients (accepted values: from 2 to 9). |
---|
13 | NCLIENTS = ENV['NUMBER_OF_CLIENTS']|| 4 |
---|
14 | NCLIENTS = NCLIENTS.to_i |
---|
15 | # Repository virtual disk: file and size (GB). |
---|
16 | REPODISK = "ogRepo.vdi" |
---|
17 | REPOSIZE = 50 |
---|
18 | # Amount of memory for server and clients (MB) |
---|
19 | SERVERMEM = 2048 # Minimum: 512 |
---|
20 | CLIENTMEM = 512 # Minimum: 256 |
---|
21 | # Prefixes for MAC and IP addresses. |
---|
22 | MACPREFIX = ENV['OGN_MAC_PREFIX'] || '00:50:56:aa:aa' |
---|
23 | NETPREFIX = ENV['OGN_NET_PREFIX'] || "192.168.2" |
---|
24 | DHCPNET = ENV['DHCPNET'] || "192.168.2.0" |
---|
25 | # OpenGnsys Server IP address. |
---|
26 | SERVERIP = "#{NETPREFIX}.10" |
---|
27 | # Local port to access OpenGnsys Server. |
---|
28 | LOCALWEBPORT = 8443 |
---|
29 | # ESXI Password |
---|
30 | ESXIPASSWORD = ENV['ESXI_PASSWORD'] || 'prompt:' |
---|
31 | |
---|
32 | #Gitea credentials |
---|
33 | GITEA_TOKEN = ENV['GITEA_TOKEN'] |
---|
34 | GITEA_USER = ENV['GITEA_USER'] || 'unizar' |
---|
35 | SSH_GIT_KEY_PASS = ENV['SSH_GIT_KEY_PASS'] || '' |
---|
36 | |
---|
37 | # OpenGnsys Server provisioning script: prepare repo disk, install OpenGnsys, change default interface, configure DHCP server. |
---|
38 | OGSERVERSCRIPT = <<EOT |
---|
39 | set -eu |
---|
40 | ip address show |
---|
41 | journalctl -b 0 |grep -iE 'eth|dhcp' |
---|
42 | |
---|
43 | # Fix problem with gitea host |
---|
44 | grep -q '^150\.214\.58\.246' /etc/hosts || echo "150.214.58.246 ognproject.evlt.uma.es" >> /etc/hosts |
---|
45 | |
---|
46 | echo Setting up SSH config and agent |
---|
47 | mkdir -p /root/.ssh/ |
---|
48 | cp /vagrant/config/id_rsa /root/.ssh/id_rsa |
---|
49 | chown root:root /root/.ssh/id_rsa |
---|
50 | chmod 0400 /root/.ssh/id_rsa |
---|
51 | cp /vagrant/config/ssh_config /root/.ssh/config |
---|
52 | chown root:root /root/.ssh/config |
---|
53 | chmod 0400 /root/.ssh/config |
---|
54 | cp /vagrant/config/ask_pass.sh /root/ask_pass.sh |
---|
55 | chmod 755 /root/ask_pass.sh |
---|
56 | |
---|
57 | eval `ssh-agent` |
---|
58 | export DISPLAY=:0 |
---|
59 | export SSH_ASKPASS=/root/ask_pass.sh |
---|
60 | ssh-add /root/.ssh/id_rsa <<< $SSH_GIT_KEY_PASS |
---|
61 | |
---|
62 | |
---|
63 | echo Setting up language and locales |
---|
64 | export LANG="#{LANGUAGE}.UTF-8" |
---|
65 | echo "LANG=\\\"$LANG\\\"" > /etc/default/locale |
---|
66 | echo "LANG=\\\"$LANG\\\"" >> /etc/environment |
---|
67 | locale-gen --lang #{LANGUAGE} |
---|
68 | sed -i "s/XKBLAYOUT=.*/XKBLAYOUT=\\\"${LANG%_*}\\\"/" /etc/default/keyboard |
---|
69 | dpkg-reconfigure -fnoninteractive console-setup |
---|
70 | |
---|
71 | |
---|
72 | # Exit if OpenGnsys is installed. |
---|
73 | [ -f /opt/opengnsys/doc/VERSION.json ] && echo "Cannot provision, OpenGnsys is already installed." && exit 1 |
---|
74 | |
---|
75 | |
---|
76 | echo Creating a repository disk |
---|
77 | if [ -z "$(blkid /dev/mapper/og-images | grep ext4)" ]; then |
---|
78 | pvcreate /dev/sdb |
---|
79 | vgcreate og /dev/sdb |
---|
80 | vgchange -ay |
---|
81 | lvcreate -ay -n images -l 100%VG og |
---|
82 | mkfs -t ext4 /dev/mapper/og-images |
---|
83 | mkdir -p /opt/opengnsys/images |
---|
84 | echo "/dev/mapper/og-images /opt/opengnsys/images ext4 defaults 0 0" >> /etc/fstab |
---|
85 | mount -a |
---|
86 | fi |
---|
87 | |
---|
88 | |
---|
89 | if [ -f /etc/netplan/01-eth1.yaml ]; then |
---|
90 | echo "Network configured, skipping" |
---|
91 | else |
---|
92 | echo "Configuring eth1" |
---|
93 | sed -i "s/##ADDRESS##/${NETPREFIX}.1/g" /tmp/01-eth1.yaml |
---|
94 | mv /tmp/01-eth1.yaml /etc/netplan |
---|
95 | chown root:root /etc/netplan/01-eth1.yaml |
---|
96 | netplan apply |
---|
97 | sleep 1 |
---|
98 | fi |
---|
99 | |
---|
100 | |
---|
101 | # Download installer |
---|
102 | echo Downloading https://ognproject.evlt.uma.es/gitea/opengnsys/opengnsys/raw/branch/${BRANCH}/installer/opengnsys_installer_devel_esxi.sh |
---|
103 | curl --show-error --fail --insecure --location --output opengnsys_installer_devel_esxi.sh https://$GITEA_USER:$GITEA_TOKEN@ognproject.evlt.uma.es/gitea/opengnsys/opengnsys/raw/branch/${BRANCH}/installer/opengnsys_installer_devel_esxi.sh |
---|
104 | chmod 755 opengnsys_installer_devel_esxi.sh && ./opengnsys_installer_devel_esxi.sh $BRANCH |
---|
105 | |
---|
106 | [ -e /opt/opengnsys/log/bash.log ] && mv /opt/opengnsys/log/bash.log /opt/opengnsys/log/opengnsys_installer.log |
---|
107 | |
---|
108 | echo y | /opt/opengnsys/bin/setserveraddr $(ip -o link show | tail -1 | cut -d: -f2) |
---|
109 | |
---|
110 | # Insert DHCP data. |
---|
111 | sed -i "/^}$/ i host modelo { hardware ethernet #{MACPREFIX}:FF; fixed-address #{NETPREFIX}.199; }" /etc/dhcp/dhcpd.conf |
---|
112 | for ((i=#{NCLIENTS+10}; i>10; i--)); do |
---|
113 | sed -i "/^}$/ i host pc${i} { hardware ethernet #{MACPREFIX}:${i}; fixed-address #{NETPREFIX}.${i}; }" /etc/dhcp/dhcpd.conf |
---|
114 | done |
---|
115 | service isc-dhcp-server restart |
---|
116 | |
---|
117 | echo Creating an aula and some clients |
---|
118 | SQL="INSERT INTO aulas (nombreaula, idcentro, urlfoto, grupoid, ubicacion, puestos, modomul, ipmul, pormul, velmul, router, netmask, ntp, dns, proxy, modp2p, timep2p)"\ |
---|
119 | "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); "\ |
---|
120 | "INSERT INTO ordenadores (nombreordenador, ip, mac, idaula, idrepositorio, idperfilhard, idmenu, idproautoexec, grupoid, router, mascara, arranque, netiface, netdriver, fotoord) VALUES "\ |
---|
121 | "('modelo', '#{NETPREFIX}.199', REPLACE('#{MACPREFIX}FF',':',''), 1, 1, 0, 0, 0, 0, '#{NETPREFIX}.1', '255.255.255.0', '00unknown', 'eth0', 'generic', 'fotoordenador.gif')," |
---|
122 | for ((i=11; i<=#{NCLIENTS+10}; i++)); do |
---|
123 | SQL="$SQL ('pc$i', '#{NETPREFIX}.$i', REPLACE('#{MACPREFIX}$i',':',''), 1, 1, 0, 0, 0, 0, '#{NETPREFIX}.1', '255.255.255.0', '00unknown', 'eth0', 'generic', 'fotoordenador.gif')," |
---|
124 | done |
---|
125 | mysql -u usuog -ppassusuog -D ogAdmBD -e "${SQL%,}" |
---|
126 | /opt/opengnsys/bin/setclientmode ogLiveAdmin modelo PERM |
---|
127 | /opt/opengnsys/bin/setclientmode ogLiveAdmin pc11 PERM |
---|
128 | for ((i=12; i<=#{NCLIENTS+10}; i++)); do |
---|
129 | /opt/opengnsys/bin/setclientmode ogLive pc$i PERM |
---|
130 | done |
---|
131 | |
---|
132 | echo "Notes:" |
---|
133 | echo "- OpenGnsys Server URL: https://localhost:${LOCALWEBPORT}/opengnsys/" |
---|
134 | exit 0 |
---|
135 | EOT |
---|
136 | |
---|
137 | |
---|
138 | Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| |
---|
139 | config.vm.define "og-#{BRANCH_EXTRA}-admin", primary: true do |og| |
---|
140 | og.vm.provider :vmware_esxi do |esxi| |
---|
141 | esxi.guest_name = "og-#{BRANCH_EXTRA}-admin" |
---|
142 | esxi.guest_memsize = SERVERMEM |
---|
143 | esxi.esxi_username = 'root' |
---|
144 | esxi.esxi_password = ESXIPASSWORD |
---|
145 | esxi.esxi_hostname = 'esxi-jenkins.evlt.uma.es' |
---|
146 | esxi.clone_from_vm = 'Ubuntu-18-template-image' |
---|
147 | esxi.esxi_resource_pool = "/" |
---|
148 | esxi.local_allow_overwrite = 'True' |
---|
149 | esxi.guest_custom_vmx_settings = [['monitor.allowLegacyCPU', 'TRUE']] |
---|
150 | esxi.guest_storage = [ 10 ] |
---|
151 | esxi.esxi_virtual_network = [ 'vLan_742', BRANCH_EXTRA ] |
---|
152 | esxi.guest_mac_address = [ "#{MACPREFIX}:00", "#{MACPREFIX}:01" ] |
---|
153 | esxi.guest_nic_type = 'e1000' |
---|
154 | end |
---|
155 | og.vm.box = "esxi_clone/dummy" |
---|
156 | og.vm.hostname = "og-#{BRANCH_EXTRA}-admin" |
---|
157 | |
---|
158 | og.vm.provision "file", source: "config/01-eth1.yaml", destination: "/tmp/" |
---|
159 | og.vm.provision "shell", inline: OGSERVERSCRIPT, env: { |
---|
160 | "NETPREFIX" => NETPREFIX, |
---|
161 | "BRANCH" => BRANCH, |
---|
162 | "GITEA_TOKEN" => GITEA_TOKEN, |
---|
163 | "GITEA_USER" => GITEA_USER, |
---|
164 | "DHCPNET" => DHCPNET, |
---|
165 | "SSH_GIT_KEY_PASS" => SSH_GIT_KEY_PASS, |
---|
166 | "LOCALWEBPORT" => LOCALWEBPORT, |
---|
167 | "DEFAULT_UDS_REST_URL" => ENV['DEFAULT_UDS_REST_URL'], |
---|
168 | "DEFAULT_UDS_AUTHENTICATOR" => ENV['DEFAULT_UDS_AUTHENTICATOR'], |
---|
169 | "DEFAULT_UDS_USER" => ENV['DEFAULT_UDS_USER'], |
---|
170 | "DEFAULT_UDS_PASS" => ENV['DEFAULT_UDS_PASS'] |
---|
171 | } |
---|
172 | end |
---|
173 | end |
---|