[3a0f599] | 1 | VAGRANTFILE_API_VERSION = "2" |
---|
| 2 | # VM provider: Oracle VM VirtualBox. |
---|
| 3 | ENV['VAGRANT_DEFAULT_PROVIDER'] = "vmware_esxi" |
---|
| 4 | # OpenGnsys version and OGAgent version. |
---|
[85df22be] | 5 | BRANCH=ENV['BRANCH'] || "main" |
---|
| 6 | BRANCH_EXTRA=ENV['BRANCH_EXTRA'] || BRANCH |
---|
[3a0f599] | 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). |
---|
[a8044f7] | 13 | NCLIENTS = ENV['NUMBER_OF_CLIENTS']|| 4 |
---|
[915580e] | 14 | NCLIENTS = NCLIENTS.to_i |
---|
[3a0f599] | 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. |
---|
[0fe1fb95] | 22 | MACPREFIX = ENV['OGN_MAC_PREFIX'] || '00:50:56:aa:aa' |
---|
[6a65c2d] | 23 | NETPREFIX = ENV['OGN_NET_PREFIX'] || "192.168.2" |
---|
[f43bbbd] | 24 | DHCPNET = ENV['DHCPNET'] || "192.168.2.0" |
---|
[3a0f599] | 25 | # OpenGnsys Server IP address. |
---|
| 26 | SERVERIP = "#{NETPREFIX}.10" |
---|
| 27 | # Local port to access OpenGnsys Server. |
---|
| 28 | LOCALWEBPORT = 8443 |
---|
[a8044f7] | 29 | # ESXI Password |
---|
[1f22729] | 30 | ESXIPASSWORD = ENV['ESXI_PASSWORD'] || 'prompt:' |
---|
[3a0f599] | 31 | |
---|
[a8044f7] | 32 | #Gitea credentials |
---|
[c5afb54] | 33 | GITEA_TOKEN = ENV['GITEA_TOKEN'] |
---|
| 34 | GITEA_USER = ENV['GITEA_USER'] || 'unizar' |
---|
[bf3f1ed] | 35 | SSH_GIT_KEY_PASS = ENV['SSH_GIT_KEY_PASS'] || '' |
---|
[c5afb54] | 36 | |
---|
[3a0f599] | 37 | # OpenGnsys Server provisioning script: prepare repo disk, install OpenGnsys, change default interface, configure DHCP server. |
---|
| 38 | OGSERVERSCRIPT = <<EOT |
---|
[a8044f7] | 39 | set -eu |
---|
[19e3ffc] | 40 | ip address show |
---|
| 41 | journalctl -b 0 |grep -iE 'eth|dhcp' |
---|
[a8044f7] | 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 |
---|
[c0b4f96] | 45 | |
---|
[85df22be] | 46 | echo Setting up SSH config and agent |
---|
[c9497e6] | 47 | mkdir -p /root/.ssh/ |
---|
| 48 | cp /vagrant/config/id_rsa /root/.ssh/id_rsa |
---|
| 49 | chown root:root /root/.ssh/id_rsa |
---|
[a8044f7] | 50 | chmod 0400 /root/.ssh/id_rsa |
---|
[c9497e6] | 51 | cp /vagrant/config/ssh_config /root/.ssh/config |
---|
| 52 | chown root:root /root/.ssh/config |
---|
| 53 | chmod 0400 /root/.ssh/config |
---|
[a8044f7] | 54 | cp /vagrant/config/ask_pass.sh /root/ask_pass.sh |
---|
| 55 | chmod 755 /root/ask_pass.sh |
---|
[692e9417] | 56 | |
---|
[a8044f7] | 57 | eval `ssh-agent` |
---|
| 58 | export DISPLAY=:0 |
---|
[692e9417] | 59 | export SSH_ASKPASS=/root/ask_pass.sh |
---|
[bf3f1ed] | 60 | ssh-add /root/.ssh/id_rsa <<< $SSH_GIT_KEY_PASS |
---|
[692e9417] | 61 | |
---|
[787ba5b] | 62 | |
---|
[85df22be] | 63 | echo Setting up language and locales |
---|
[c9497e6] | 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 |
---|
[787ba5b] | 70 | |
---|
[85df22be] | 71 | |
---|
[3a0f599] | 72 | # Exit if OpenGnsys is installed. |
---|
[c9497e6] | 73 | [ -f /opt/opengnsys/doc/VERSION.json ] && echo "Cannot provision, OpenGnsys is already installed." && exit 1 |
---|
| 74 | |
---|
[85df22be] | 75 | |
---|
| 76 | echo Creating a repository disk |
---|
[c9497e6] | 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 | |
---|
[85df22be] | 88 | |
---|
[c9497e6] | 89 | if [ -f /etc/netplan/01-eth1.yaml ]; then |
---|
[85df22be] | 90 | echo "Network configured, skipping" |
---|
[c9497e6] | 91 | else |
---|
[85df22be] | 92 | echo "Configuring eth1" |
---|
[c9497e6] | 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 |
---|
[787ba5b] | 99 | |
---|
[726f7c0] | 100 | |
---|
[a8044f7] | 101 | # Download installer |
---|
[85df22be] | 102 | echo Downloading https://ognproject.evlt.uma.es/gitea/opengnsys/opengnsys/raw/branch/${BRANCH}/installer/opengnsys_installer_devel_esxi.sh |
---|
[12d7aa3] | 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 |
---|
[c9497e6] | 104 | chmod 755 opengnsys_installer_devel_esxi.sh && ./opengnsys_installer_devel_esxi.sh $BRANCH |
---|
[e202670] | 105 | |
---|
[8e9456f9] | 106 | [ -e /opt/opengnsys/log/bash.log ] && mv /opt/opengnsys/log/bash.log /opt/opengnsys/log/opengnsys_installer.log |
---|
[6b2b601] | 107 | |
---|
[c9497e6] | 108 | echo y | /opt/opengnsys/bin/setserveraddr $(ip -o link show | tail -1 | cut -d: -f2) |
---|
| 109 | |
---|
[3a0f599] | 110 | # Insert DHCP data. |
---|
[7bb39840] | 111 | sed -i "/^}$/ i host modelo { hardware ethernet #{MACPREFIX}:FF; fixed-address #{NETPREFIX}.199; }" /etc/dhcp/dhcpd.conf |
---|
[c9497e6] | 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 |
---|
[3513239] | 115 | service isc-dhcp-server restart |
---|
[e202670] | 116 | |
---|
[85df22be] | 117 | echo Creating an aula and some clients |
---|
[bc93fcc] | 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 "\ |
---|
[7bb39840] | 121 | "('modelo', '#{NETPREFIX}.199', REPLACE('#{MACPREFIX}FF',':',''), 1, 1, 0, 0, 0, 0, '#{NETPREFIX}.1', '255.255.255.0', '00unknown', 'eth0', 'generic', 'fotoordenador.gif')," |
---|
[c9497e6] | 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')," |
---|
[3a0f599] | 124 | done |
---|
| 125 | mysql -u usuog -ppassusuog -D ogAdmBD -e "${SQL%,}" |
---|
[bc93fcc] | 126 | /opt/opengnsys/bin/setclientmode ogLiveAdmin modelo PERM |
---|
[c9497e6] | 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 |
---|
[3a0f599] | 130 | done |
---|
[85df22be] | 131 | |
---|
[3a0f599] | 132 | echo "Notes:" |
---|
[6b2b601] | 133 | echo "- OpenGnsys Server URL: https://localhost:${LOCALWEBPORT}/opengnsys/" |
---|
[3a0f599] | 134 | exit 0 |
---|
| 135 | EOT |
---|
| 136 | |
---|
| 137 | |
---|
| 138 | Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| |
---|
[85df22be] | 139 | config.vm.define "og-#{BRANCH_EXTRA}-admin", primary: true do |og| |
---|
[3a0f599] | 140 | og.vm.provider :vmware_esxi do |esxi| |
---|
[85df22be] | 141 | esxi.guest_name = "og-#{BRANCH_EXTRA}-admin" |
---|
[3a0f599] | 142 | esxi.guest_memsize = SERVERMEM |
---|
| 143 | esxi.esxi_username = 'root' |
---|
[1f22729] | 144 | esxi.esxi_password = ESXIPASSWORD |
---|
[3a0f599] | 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 ] |
---|
[85df22be] | 151 | esxi.esxi_virtual_network = [ 'vLan_742', BRANCH_EXTRA ] |
---|
[692e9417] | 152 | esxi.guest_mac_address = [ "#{MACPREFIX}:00", "#{MACPREFIX}:01" ] |
---|
[e994ff5] | 153 | esxi.guest_nic_type = 'e1000' |
---|
[3a0f599] | 154 | end |
---|
| 155 | og.vm.box = "esxi_clone/dummy" |
---|
[85df22be] | 156 | og.vm.hostname = "og-#{BRANCH_EXTRA}-admin" |
---|
| 157 | |
---|
[edae476] | 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 | } |
---|
[3a0f599] | 172 | end |
---|
| 173 | end |
---|