source: installer/vagrant/Vagrantfile-devel-vbox

lgromero-new-oglive
Last change on this file was cf14a94, checked in by Natalia Serrano <natalia.serrano@…>, 6 months ago

refs #941 try to make installer on ESXi pick oglive/ogagent from NFS

  • Property mode set to 100644
File size: 10.3 KB
RevLine 
[5ba547e]1# Vagrantfile to install OpenGnsys virtual environment (production version) using VirtualBox provider.
2
3VAGRANTFILE_API_VERSION = "2"
4# VM provider: Oracle VM VirtualBox.
5ENV['VAGRANT_DEFAULT_PROVIDER'] = "virtualbox"
6# OpenGnsys version and OGAgent version.
7OGVERSION="1.1.1d"
8# OGAgent version.
[cf14a94]9OGAGENTVERSION="1.4.2-1"
[5ba547e]10# Language (accepted values: es_ES, ca_ES, en_GB).
11LANGUAGE = "es_ES"
12ENV['LC_ALL'] = LANGUAGE + ".UTF-8"
13# Number of OpenGnsys clients (accepted values: from 2 to 9).
14NCLIENTS = ENV['NUMBER_OF_CLIENTS']|| 2
15NCLIENTS = NCLIENTS.to_i
16# Repository virtual disk: file and size (GB).
17#REPODISK = "ogRepo.vdi"
18#REPOSIZE = 50
19# Amount of memory for server and clients (MB)
20SERVERMEM = 1536        # Minimum: 512
21CLIENTMEM = 512         # Minimum: 256
22# Prefixes for MAC and IP addresses.
23MACPREFIX = ENV['OGN_MAC_PREFIX'] || "08:00:27:0E:65"
24NETPREFIX = ENV['OGN_NET_PREFIX'] || "192.168.2"
25# OpenGnsys Server IP address.
26SERVERIP = "#{NETPREFIX}.10"
27# Local port to access OpenGnsys Server.
28LOCALWEBPORT = 8443
29
30# OpenGnsys Server provisioning script: prepare repo disk, install OpenGnsys, change default interface, configure DHCP server.
31OGSERVERSCRIPT = <<EOT
32set -eu
33
34# Fix problem with gitea host
35grep -q '^150\.214\.58\.246' /etc/hosts || echo "150.214.58.246 ognproject.evlt.uma.es" >> /etc/hosts
36
37# Exit if OpenGnsys is installed.
38[ -f /opt/opengnsys/doc/VERSION.json ] && echo "Cannot provision, OpenGnsys is already installed." && exit 1
39#echo Creating a repository disk
40#if [ -z "$(blkid /dev/mapper/og-images | grep ext4)" ]; then
41#    pvcreate /dev/sdb
42#    vgcreate og /dev/sdb
43#    vgchange -ay
44#    lvcreate -ay -n images -l 100%VG og
45#    mkfs -t ext4 /dev/mapper/og-images
46#    mkdir -p /opt/opengnsys/images
47#    echo "/dev/mapper/og-images  /opt/opengnsys/images  ext4  defaults  0  0" >> /etc/fstab
48#    mount -a
49#fi
50# Install OpenGnsys and change server address.
51if which curl &>/dev/null; then
52    DOWNLOAD="curl -s"
53elif which wget &>/dev/null; then
54    DOWNLOAD="wget -q -O -"
55fi
56if [[ -f /install-from-repo/opengnsys_installer_devel_esxi.sh ]]; then
57    ## installer will have REMOTE=1. Usage: cp installer/opengnsys_installer_devel_esxi.sh .; VAGRANT_VAGRANTFILE=installer/vagrant/Vagrantfile-1.1.1d-vbox INSTALL_FROM_REPO=. vagrant up ogAdministrator; rm -f opengnsys_installer_devel_esxi.sh
58    /install-from-repo/opengnsys_installer_devel_esxi.sh || exit $?
59elif [[ -f /install-from-repo/installer/opengnsys_installer_devel_esxi.sh ]]; then
60    ## installer will have REMOTE=0. Usage:                                                   VAGRANT_VAGRANTFILE=installer/vagrant/Vagrantfile-1.1.1d-vbox INSTALL_FROM_REPO=. vagrant up ogAdministrator
61    /install-from-repo/installer/opengnsys_installer_devel_esxi.sh || exit $?
62else
63    BRANCH="opengnsys-#{OGVERSION}"
64    $DOWNLOAD "https://raw.githubusercontent.com/opengnsys/OpenGnsys/$BRANCH/installer/opengnsys_installer.sh" | bash || exit $?
65fi
66[ -e /opt/opengnsys/log/bash.log ] && mv /opt/opengnsys/log/bash.log /opt/opengnsys/log/opengnsys_installer.log
67echo y | /opt/opengnsys/bin/setserveraddr $(ip -o link show | tail -1 | cut -d: -f2)
68# Insert DHCP data.
69sed -i "/^}$/ i host modelo { hardware ethernet #{MACPREFIX}:FF; fixed-address #{NETPREFIX}.199; }" /etc/dhcp/dhcpd.conf
70for ((i=#{NCLIENTS+10}; i>10; i--)); do
71    sed -i "/^}$/ i host pc${i} { hardware ethernet #{MACPREFIX}:${i}; fixed-address #{NETPREFIX}.${i}; }" /etc/dhcp/dhcpd.conf
72done
73service isc-dhcp-server restart
74
75# Set language.
76#echo Setting up language and locales
77#export LANG="#{LANGUAGE}.UTF-8"
78#echo "LANG=\\\"$LANG\\\"" > /etc/default/locale
79#echo "LANG=\\\"$LANG\\\"" >> /etc/environment
80#locale-gen --lang #{LANGUAGE}
81#sed -i "s/XKBLAYOUT=.*/XKBLAYOUT=\\\"${LANG%_*}\\\"/" /etc/default/keyboard
82#dpkg-reconfigure -fnoninteractive console-setup
83
84# Comment out next lines for automatic data insertion.
85echo Creating an aula and some clients
86SQL="INSERT INTO aulas (nombreaula, idcentro, urlfoto, grupoid, ubicacion, puestos, modomul, ipmul, pormul, velmul, router, netmask, ntp, dns, proxy, modp2p, timep2p) VALUES
87  ('Aula virtual', 1, 'aula.jpg', 0, 'Despliegue virtual con Vagrant.', 5, 2, '239.194.2.11', 9000, 70, '#{SERVERIP}', '255.255.255.0', '', '', '', 'peer', 30);
88  INSERT INTO ordenadores (nombreordenador, ip, mac, idaula, idrepositorio, idperfilhard, idmenu, idproautoexec, grupoid, router, mascara, arranque, netiface, netdriver, fotoord) VALUES
89  ('modelo', '#{NETPREFIX}.199', REPLACE('#{MACPREFIX}FF',':',''), 1, 1, 0, 0, 0, 0, '#{SERVERIP}', '255.255.255.0', '00unknown', 'eth0', 'generic', 'fotoordenador.gif'),"
90for ((i=11; i<=#{NCLIENTS+10}; i++)); do
91    SQL="$SQL ('pc$i', '#{NETPREFIX}.$i', REPLACE('#{MACPREFIX}$i',':',''), 1, 1, 0, 0, 0, 0, '#{SERVERIP}', '255.255.255.0', '00unknown', 'eth0', 'generic', 'fotoordenador.gif'),"
92done
93mysql -u usuog -ppassusuog -D ogAdmBD -e "${SQL%,}"
94/opt/opengnsys/bin/setclientmode ogLiveAdmin modelo PERM
95#/opt/opengnsys/bin/setclientmode ogLiveAdmin pc11 PERM
96#for ((i=12; i<=#{NCLIENTS+10}; i++)); do
97#    /opt/opengnsys/bin/setclientmode ogLive pc$i PERM
98#done
99
100echo "Giving internet connectivity to clients, required to install ogagent's pyqt6 dependencies"
101iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
102iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
103iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE
104echo 1 >/proc/sys/net/ipv4/ip_forward
105
106echo "Notes:"
107echo "- OpenGnsys Server URL: https://localhost:#{LOCALWEBPORT}/opengnsys/"
108exit 0
109EOT
110
111# Client 1 OS provisioning script.
112MODELSCRIPT = <<EOT
113adduser --disabled-password --gecos '' qindel
114echo 'qindel:qindel' |chpasswd
115echo 'qindel ALL=(ALL:ALL) ALL' >/etc/sudoers.d/qindel
116
117## don't point to systemd's resolver, as there's no systemd in oglive
118rm /etc/resolv.conf
119cat >/etc/resolv.conf <<EOF
120nameserver 1.1.1.1
121search opengnsys.es
122EOF
123
124apt-get update -y
125apt-get --purge remove bash-completion         ## interfaceAdm scripts seem to get broken by this
126
127# Comment out next lines to install and configure OGAgent for Ubuntu.
128OGAGENTPKG="ogagent_#{OGAGENTVERSION}_all.deb"
129wget --no-check-certificate --output-document /tmp/$OGAGENTPKG https://#{SERVERIP}/opengnsys/descargas/$OGAGENTPKG
130if [ -f /tmp/$OGAGENTPKG ]; then
131    apt-get install -y /tmp/$OGAGENTPKG || exit $?
132    ## port 444 is where we run 'flask ogcore-mock'
133    sed -i "/remote=/ s/192.168.[0-9].[0-9]*/#{SERVERIP}:444/" /usr/share/OGAgent/cfg/ogagent.cfg
134    sed -i "/remote=/ s/https/http/"                           /usr/share/OGAgent/cfg/ogagent.cfg
135    rm -f /tmp/$OGAGENTPKG
136else
137    echo "Warning: cannot install OGAgent package $OGAGENTPKG"
138fi
139
140# Remove network configuration added by Vagrant.
141sed -i "/enp0s3/ d" /etc/network/interfaces
142if [ -d /etc/netplan ]; then
143  rm /etc/netplan/50-vagrant.yaml /etc/netplan/50-cloud-init.yaml
144  echo $'network:\n  ethernets:\n    enp0s3:\n      dhcp4: true\n  renderer: networkd\n  version: 2' >/etc/netplan/01-nati.yaml
145fi
146
147echo "Notes:"
148echo "- Now run: VBoxManage modifyvm modelo --nic1 intnet --nic2 none --macaddress1 #{MACPREFIX}FF"
149echo "- Afterwards, do NOT start this VM using vagrant--use this: VBoxManage startvm modelo"
150# Leave VM halted.
151sleep 2
152poweroff &
153EOT
154
155Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
156
157  # OpenGnsys Server VM definition.
158  config.vm.define "ogAdministrator", primary: true do |og|
159    # Specific VirtualBox configuration.
160    og.vm.provider "virtualbox" do |vb|
161      # VM name, memory and CPUs.
162      vb.name = "ogAdministrator"
163      vb.memory = SERVERMEM
164      vb.cpus = 1
165      ## 2nd virtual disk path (current dir on Windows, VM dir on other OSes)
166      #if Vagrant::Util::Platform.windows? then
167      #  second_disk = File.join(".", REPODISK)
168      #else
169      #  line = `VBoxManage list systemproperties`.match("Default machine folder.*")[0]
170      #  vb_machine_folder = line.split(':')[1].strip()
171      #  second_disk = File.join(vb_machine_folder, vb.name, REPODISK)
172      #end
173      ## Create repo virtual disk, if needed.
174      #unless File.exist?(second_disk)
175      #  vb.customize ['createhd', '--filename', second_disk, '--size', REPOSIZE * 1024]
176      #end
177      ## Attach repo virtual disk.
178      #vb.customize ['storageattach', :id, '--storagectl', 'IDE Controller', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', second_disk]
179    end
180    # VM base and host name.
181    og.vm.box = "alvistack/ubuntu-24.04"
182    og.vm.hostname = "ogAdministrator"
183    # Network configuration: forward web port and attach new interface to VMs private network.
184    og.vm.network "forwarded_port", guest: 443, host: LOCALWEBPORT, host_ip: "127.0.0.1"
185    og.vm.network "private_network", mac: "#{MACPREFIX}10".tr(":",""), ip: "#{SERVERIP}", virtualbox__intnet: true
186    # Comment out to disable synced folder.
187    #og.vm.synced_folder ".", "/vagrant", disabled: true
188    if (ENV['INSTALL_FROM_REPO'])
189      og.vm.synced_folder ENV['INSTALL_FROM_REPO'], "/install-from-repo"
190    end
191    # Launch provisioning script.
192    og.vm.provision "shell", inline: OGSERVERSCRIPT
193  end
194
195  # Client 1 VM definition.
196  config.vm.define "modelo", autostart: false do |v1|
197    v1.vm.box = "debian/bookworm64"
198    v1.vm.hostname = "modelo"
199    v1.vm.network "private_network", mac: "#{MACPREFIX}FF".tr(":",""), type: "dhcp", virtualbox__intnet: true
200    v1.vm.provider "virtualbox" do |vb|
201      vb.name = "modelo"
202      vb.memory = CLIENTMEM
203      vb.cpus = 1
204      vb.customize ['modifyvm', :id, '--boot1', 'net', '--boot2', 'disk']
[4a9a488]205
206      ## 2nd disk for partitioning, imaging and booting from
207      vb.customize ['createhd', '--filename', 'modelo-8gb.vdi', '--size', 8192]
208      vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', 'modelo-8gb.vdi']
[5ba547e]209    end
210    v1.vm.synced_folder ".", "/vagrant", disabled: true
211    v1.vm.provision "shell", inline: MODELSCRIPT
212  end
213
214  # Clonable clients definition.
215  (2..NCLIENTS).each do |i|
216    config.vm.define "pc#{i+10}", autostart: false do |cl|
217      cl.vm.box = "clink15/pxe"
218      cl.ssh.insert_key = false
219      cl.vm.boot_timeout = 5
220      cl.vm.network "private_network", mac: "#{MACPREFIX}#{i+10}".tr(":",""), type: "dhcp", virtualbox__intnet: true
221      cl.vm.provider "virtualbox" do |vb|
222        vb.name = "pc#{i+10}"
223        vb.memory = CLIENTMEM
224        vb.cpus = 1
225        vb.customize ['modifyvm', :id, '--boot1', 'net', '--boot2', 'disk']
226        vb.customize ["modifyvm", :id, "--nic1", "none"]
227      end
228    end
229  end
230
231end
232
Note: See TracBrowser for help on using the repository browser.