VAGRANTFILE_API_VERSION = "2" # VM provider: Oracle VM VirtualBox. ENV['VAGRANT_DEFAULT_PROVIDER'] = "vmware_esxi" # OpenGnsys version and OGAgent version. BRANCH=ENV['BRANCH'] || "main" BRANCH_EXTRA=ENV['BRANCH_EXTRA'] || BRANCH # OGAgent version. OGAGENTVERSION="1.1.2" # Language (accepted values: es_ES, ca_ES, en_GB). LANGUAGE = "es_ES" ENV['LC_ALL'] = LANGUAGE + ".UTF-8" # Number of OpenGnsys clients (accepted values: from 2 to 9). NCLIENTS = ENV['NUMBER_OF_CLIENTS']|| 4 NCLIENTS = NCLIENTS.to_i # Repository virtual disk: file and size (GB). REPODISK = "ogRepo.vdi" REPOSIZE = 50 # Amount of memory for server and clients (MB) SERVERMEM = 2048 # Minimum: 512 CLIENTMEM = 512 # Minimum: 256 # Prefixes for MAC and IP addresses. MACPREFIX = ENV['OGN_MAC_PREFIX'] || '00:50:56:aa:aa' NETPREFIX = ENV['OGN_NET_PREFIX'] || "192.168.2" DHCPNET = ENV['DHCPNET'] || "192.168.2.0" # OpenGnsys Server IP address. SERVERIP = "#{NETPREFIX}.10" # Local port to access OpenGnsys Server. LOCALWEBPORT = 8443 # ESXI Password ESXIPASSWORD = ENV['ESXI_PASSWORD'] || 'prompt:' #Gitea credentials GITEA_TOKEN = ENV['GITEA_TOKEN'] GITEA_USER = ENV['GITEA_USER'] || 'unizar' SSH_GIT_KEY_PASS = ENV['SSH_GIT_KEY_PASS'] || '' # OpenGnsys Server provisioning script: prepare repo disk, install OpenGnsys, change default interface, configure DHCP server. OGSERVERSCRIPT = <> /etc/hosts echo Setting up SSH config and agent mkdir -p /root/.ssh/ cp /vagrant/config/id_rsa /root/.ssh/id_rsa chown root:root /root/.ssh/id_rsa chmod 0400 /root/.ssh/id_rsa cp /vagrant/config/ssh_config /root/.ssh/config chown root:root /root/.ssh/config chmod 0400 /root/.ssh/config cp /vagrant/config/ask_pass.sh /root/ask_pass.sh chmod 755 /root/ask_pass.sh eval `ssh-agent` export DISPLAY=:0 export SSH_ASKPASS=/root/ask_pass.sh ssh-add /root/.ssh/id_rsa <<< $SSH_GIT_KEY_PASS echo Setting up language and locales export LANG="#{LANGUAGE}.UTF-8" echo "LANG=\\\"$LANG\\\"" > /etc/default/locale echo "LANG=\\\"$LANG\\\"" >> /etc/environment locale-gen --lang #{LANGUAGE} sed -i "s/XKBLAYOUT=.*/XKBLAYOUT=\\\"${LANG%_*}\\\"/" /etc/default/keyboard dpkg-reconfigure -fnoninteractive console-setup # Exit if OpenGnsys is installed. [ -f /opt/opengnsys/doc/VERSION.json ] && echo "Cannot provision, OpenGnsys is already installed." && exit 1 echo Creating a repository disk if [ -z "$(blkid /dev/mapper/og-images | grep ext4)" ]; then pvcreate /dev/sdb vgcreate og /dev/sdb vgchange -ay lvcreate -ay -n images -l 100%VG og mkfs -t ext4 /dev/mapper/og-images mkdir -p /opt/opengnsys/images echo "/dev/mapper/og-images /opt/opengnsys/images ext4 defaults 0 0" >> /etc/fstab mount -a fi if [ -f /etc/netplan/01-eth1.yaml ]; then echo "Network configured, skipping" else echo "Configuring eth1" sed -i "s/##ADDRESS##/${NETPREFIX}.1/g" /tmp/01-eth1.yaml mv /tmp/01-eth1.yaml /etc/netplan chown root:root /etc/netplan/01-eth1.yaml netplan apply sleep 1 fi # Download installer echo Downloading https://ognproject.evlt.uma.es/gitea/opengnsys/opengnsys/raw/branch/${BRANCH}/installer/opengnsys_installer_devel_esxi.sh 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 chmod 755 opengnsys_installer_devel_esxi.sh && ./opengnsys_installer_devel_esxi.sh $BRANCH [ -e /opt/opengnsys/log/bash.log ] && mv /opt/opengnsys/log/bash.log /opt/opengnsys/log/opengnsys_installer.log echo y | /opt/opengnsys/bin/setserveraddr $(ip -o link show | tail -1 | cut -d: -f2) # Insert DHCP data. sed -i "/^}$/ i host modelo { hardware ethernet #{MACPREFIX}:FF; fixed-address #{NETPREFIX}.199; }" /etc/dhcp/dhcpd.conf for ((i=#{NCLIENTS+10}; i>10; i--)); do sed -i "/^}$/ i host pc${i} { hardware ethernet #{MACPREFIX}:${i}; fixed-address #{NETPREFIX}.${i}; }" /etc/dhcp/dhcpd.conf done service isc-dhcp-server restart echo Creating an aula and some clients 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 "\ "('modelo', '#{NETPREFIX}.199', REPLACE('#{MACPREFIX}FF',':',''), 1, 1, 0, 0, 0, 0, '#{NETPREFIX}.1', '255.255.255.0', '00unknown', 'eth0', 'generic', 'fotoordenador.gif')," for ((i=11; i<=#{NCLIENTS+10}; i++)); do 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')," done mysql -u usuog -ppassusuog -D ogAdmBD -e "${SQL%,}" /opt/opengnsys/bin/setclientmode ogLiveAdmin modelo PERM /opt/opengnsys/bin/setclientmode ogLiveAdmin pc11 PERM for ((i=12; i<=#{NCLIENTS+10}; i++)); do /opt/opengnsys/bin/setclientmode ogLive pc$i PERM done echo "Notes:" echo "- OpenGnsys Server URL: https://localhost:${LOCALWEBPORT}/opengnsys/" exit 0 EOT Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.define "og-#{BRANCH_EXTRA}-admin", primary: true do |og| og.vm.provider :vmware_esxi do |esxi| esxi.guest_name = "og-#{BRANCH_EXTRA}-admin" esxi.guest_memsize = SERVERMEM esxi.esxi_username = 'root' esxi.esxi_password = ESXIPASSWORD esxi.esxi_hostname = 'esxi-jenkins.evlt.uma.es' esxi.clone_from_vm = 'Ubuntu-18-template-image' esxi.esxi_resource_pool = "/" esxi.local_allow_overwrite = 'True' esxi.guest_custom_vmx_settings = [['monitor.allowLegacyCPU', 'TRUE']] esxi.guest_storage = [ 10 ] esxi.esxi_virtual_network = [ 'vLan_742', BRANCH_EXTRA ] esxi.guest_mac_address = [ "#{MACPREFIX}:00", "#{MACPREFIX}:01" ] esxi.guest_nic_type = 'e1000' end og.vm.box = "esxi_clone/dummy" og.vm.hostname = "og-#{BRANCH_EXTRA}-admin" og.vm.provision "file", source: "config/01-eth1.yaml", destination: "/tmp/" 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, "DEFAULT_UDS_REST_URL" => ENV['DEFAULT_UDS_REST_URL'], "DEFAULT_UDS_AUTHENTICATOR" => ENV['DEFAULT_UDS_AUTHENTICATOR'], "DEFAULT_UDS_USER" => ENV['DEFAULT_UDS_USER'], "DEFAULT_UDS_PASS" => ENV['DEFAULT_UDS_PASS'] } end end