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 | |
---|
40 | set -eu |
---|
41 | |
---|
42 | # Fix problem with gitea host |
---|
43 | grep -q '^150\.214\.58\.246' /etc/hosts || echo "150.214.58.246 ognproject.evlt.uma.es" >> /etc/hosts |
---|
44 | |
---|
45 | echo Setting up SSH config and agent |
---|
46 | mkdir -p /root/.ssh/ |
---|
47 | cp /vagrant/config/id_rsa /root/.ssh/id_rsa |
---|
48 | chown root:root /root/.ssh/id_rsa |
---|
49 | chmod 0400 /root/.ssh/id_rsa |
---|
50 | cp /vagrant/config/ssh_config /root/.ssh/config |
---|
51 | chown root:root /root/.ssh/config |
---|
52 | chmod 0400 /root/.ssh/config |
---|
53 | cp /vagrant/config/ask_pass.sh /root/ask_pass.sh |
---|
54 | chmod 755 /root/ask_pass.sh |
---|
55 | |
---|
56 | eval `ssh-agent` |
---|
57 | export DISPLAY=:0 |
---|
58 | export SSH_ASKPASS=/root/ask_pass.sh |
---|
59 | ssh-add /root/.ssh/id_rsa <<< $SSH_GIT_KEY_PASS |
---|
60 | |
---|
61 | |
---|
62 | echo Setting up language and locales |
---|
63 | export LANG="#{LANGUAGE}.UTF-8" |
---|
64 | echo "LANG=\\\"$LANG\\\"" > /etc/default/locale |
---|
65 | echo "LANG=\\\"$LANG\\\"" >> /etc/environment |
---|
66 | locale-gen --lang #{LANGUAGE} |
---|
67 | sed -i "s/XKBLAYOUT=.*/XKBLAYOUT=\\\"${LANG%_*}\\\"/" /etc/default/keyboard |
---|
68 | dpkg-reconfigure -fnoninteractive console-setup |
---|
69 | |
---|
70 | |
---|
71 | # Exit if OpenGnsys is installed. |
---|
72 | [ -f /opt/opengnsys/doc/VERSION.json ] && echo "Cannot provision, OpenGnsys is already installed." && exit 1 |
---|
73 | |
---|
74 | |
---|
75 | echo Creating a repository disk |
---|
76 | if [ -z "$(blkid /dev/mapper/og-images | grep ext4)" ]; then |
---|
77 | pvcreate /dev/sdb |
---|
78 | vgcreate og /dev/sdb |
---|
79 | vgchange -ay |
---|
80 | lvcreate -ay -n images -l 100%VG og |
---|
81 | mkfs -t ext4 /dev/mapper/og-images |
---|
82 | mkdir -p /opt/opengnsys/images |
---|
83 | echo "/dev/mapper/og-images /opt/opengnsys/images ext4 defaults 0 0" >> /etc/fstab |
---|
84 | mount -a |
---|
85 | fi |
---|
86 | |
---|
87 | |
---|
88 | if [ -f /etc/netplan/01-eth1.yaml ]; then |
---|
89 | echo "Network configured, skipping" |
---|
90 | else |
---|
91 | echo "Configuring eth1" |
---|
92 | sed -i "s/##ADDRESS##/${NETPREFIX}.1/g" /tmp/01-eth1.yaml |
---|
93 | mv /tmp/01-eth1.yaml /etc/netplan |
---|
94 | chown root:root /etc/netplan/01-eth1.yaml |
---|
95 | netplan apply |
---|
96 | sleep 1 |
---|
97 | fi |
---|
98 | |
---|
99 | |
---|
100 | # Download installer |
---|
101 | echo Downloading https://ognproject.evlt.uma.es/gitea/opengnsys/opengnsys/raw/branch/${BRANCH}/installer/opengnsys_installer_devel_esxi.sh |
---|
102 | 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 |
---|
103 | chmod 755 opengnsys_installer_devel_esxi.sh && ./opengnsys_installer_devel_esxi.sh $BRANCH |
---|
104 | |
---|
105 | [ -e /opt/opengnsys/log/bash.log ] && mv /opt/opengnsys/log/bash.log /opt/opengnsys/log/opengnsys_installer.log |
---|
106 | |
---|
107 | echo y | /opt/opengnsys/bin/setserveraddr $(ip -o link show | tail -1 | cut -d: -f2) |
---|
108 | |
---|
109 | # Insert DHCP data. |
---|
110 | for ((i=#{NCLIENTS+10}; i>10; i--)); do |
---|
111 | sed -i "/^}$/ i host pc${i} { hardware ethernet #{MACPREFIX}:${i}; fixed-address #{NETPREFIX}.${i}; }" /etc/dhcp/dhcpd.conf |
---|
112 | done |
---|
113 | service isc-dhcp-server restart |
---|
114 | |
---|
115 | echo Creating an aula and some clients |
---|
116 | 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" |
---|
117 | for ((i=11; i<=#{NCLIENTS+10}; i++)); do |
---|
118 | 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')," |
---|
119 | done |
---|
120 | mysql -u usuog -ppassusuog -D ogAdmBD -e "${SQL%,}" |
---|
121 | /opt/opengnsys/bin/setclientmode ogLiveAdmin pc11 PERM |
---|
122 | for ((i=12; i<=#{NCLIENTS+10}; i++)); do |
---|
123 | /opt/opengnsys/bin/setclientmode ogLive pc$i PERM |
---|
124 | done |
---|
125 | |
---|
126 | echo "Notes:" |
---|
127 | echo "- OpenGnsys Server URL: https://localhost:${LOCALWEBPORT}/opengnsys/" |
---|
128 | exit 0 |
---|
129 | EOT |
---|
130 | |
---|
131 | |
---|
132 | Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| |
---|
133 | config.vm.define "og-#{BRANCH_EXTRA}-admin", primary: true do |og| |
---|
134 | og.vm.provider :vmware_esxi do |esxi| |
---|
135 | esxi.guest_name = "og-#{BRANCH_EXTRA}-admin" |
---|
136 | esxi.guest_memsize = SERVERMEM |
---|
137 | esxi.esxi_username = 'root' |
---|
138 | esxi.esxi_password = ESXIPASSWORD |
---|
139 | esxi.esxi_hostname = 'esxi-jenkins.evlt.uma.es' |
---|
140 | esxi.clone_from_vm = 'Ubuntu-18-template-image' |
---|
141 | esxi.esxi_resource_pool = "/" |
---|
142 | esxi.local_allow_overwrite = 'True' |
---|
143 | esxi.guest_custom_vmx_settings = [['monitor.allowLegacyCPU', 'TRUE']] |
---|
144 | esxi.guest_storage = [ 10 ] |
---|
145 | esxi.esxi_virtual_network = [ 'vLan_742', BRANCH_EXTRA ] |
---|
146 | esxi.guest_mac_address = [ "#{MACPREFIX}:00", "#{MACPREFIX}:01" ] |
---|
147 | esxi.guest_nic_type = 'e1000' |
---|
148 | end |
---|
149 | og.vm.box = "esxi_clone/dummy" |
---|
150 | og.vm.hostname = "og-#{BRANCH_EXTRA}-admin" |
---|
151 | |
---|
152 | og.vm.provision "file", source: "config/01-eth1.yaml" , destination: "/tmp/" |
---|
153 | og.vm.provision "shell", inline: OGSERVERSCRIPT , env: {"NETPREFIX" => NETPREFIX , "BRANCH" => BRANCH , "GITEA_TOKEN" => GITEA_TOKEN , "GITEA_USER" => GITEA_USER , "DHCPNET" => DHCPNET , "SSH_GIT_KEY_PASS" => SSH_GIT_KEY_PASS , "LOCALWEBPORT" => LOCALWEBPORT } |
---|
154 | end |
---|
155 | end |
---|