# Vagrantfile to install OpenGnsys virtual environment (production version) using VirtualBox provider. VAGRANTFILE_API_VERSION = "2" # VM provider: Oracle VM VirtualBox. ENV['VAGRANT_DEFAULT_PROVIDER'] = "vmware_esxi" # OpenGnsys version and OGAgent version. OGVERSION=ENV['OGVERSION'] || "test" # 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 # Fix ssh 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 # Sets ssh agent to work with git eval `ssh-agent` export DISPLAY=:0 export SSH_ASKPASS=/root/ask_pass.sh ssh-add /root/.ssh/id_rsa <<< $SSH_GIT_KEY_PASS # Set language 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 # Create repo 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 # Configure eth1 iface if [ -f /etc/netplan/01-eth1.yaml ]; then echo "Network configured Skipping" else echo "Configuring Network" 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 BRANCH="$OGVERSION" curl --show-error --fail -k -L -o opengnsys_installer_devel_esxi.sh https://$GITEA_USER:$GITEA_TOKEN@ognproject.evlt.uma.es/gitea/unizar/opengnsys/raw/branch/${BRANCH}/installer/opengnsys_installer_devel_esxi.sh chmod 755 opengnsys_installer_devel_esxi.sh && ./opengnsys_installer_devel_esxi.sh $BRANCH 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. 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 # Comment out next lines for automatic data insertion. 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" 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 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| # OpenGnsys Server VM definition. config.vm.define "ogAdministrator-#{OGVERSION}", primary: true do |og| # Specific VirtualBox configuration. og.vm.provider :vmware_esxi do |esxi| # VM name, memory and CPUs. esxi.guest_name = "ogAdministrator-#{OGVERSION}" 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', OGVERSION ] esxi.guest_mac_address = [ "#{MACPREFIX}:00", "#{MACPREFIX}:01" ] esxi.guest_nic_type = 'e1000' end # VM base and host name. og.vm.box = "esxi_clone/dummy" og.vm.hostname = "ogAdministrator-#{OGVERSION}" # Launch provisioning script. og.vm.provision "file", source: "config/01-eth1.yaml" , destination: "/tmp/" og.vm.provision "shell", inline: OGSERVERSCRIPT , env: {"NETPREFIX" => NETPREFIX , "OGVERSION" => OGVERSION , "GITEA_TOKEN" => GITEA_TOKEN , "GITEA_USER" => GITEA_USER , "DHCPNET" => DHCPNET , "SSH_GIT_KEY_PASS" => SSH_GIT_KEY_PASS } end end