source: installer/vagrant/Vagrantfile-1.1.1a-vbox @ a9c232f

918-git-images-111dconfigure-oglivegit-imageslgromero-new-oglivemainmaint-cronmount-efivarfsmultivmmultivm-ogboot-installerogClonningEngineogboot-installer-jenkinsoglive-ipv6test-python-scriptsticket-301ticket-50ticket-50-oldticket-577ticket-585ticket-611ticket-612ticket-693ticket-700ubu24tplunification2use-local-agent-oglivevarios-instalacion
Last change on this file since a9c232f was b6d3c1d, checked in by Ramón M. Gómez <ramongomez@…>, 5 years ago

#946: Updating Vagrant labs to OpenGnsys 1.1.1a

  • Property mode set to 100644
File size: 7.3 KB
Line 
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.1a"
8OGAGENTVERSION="1.1.1"    ### TEMPORARY (should be worth the same)
9# Language (accepted values: es_ES, ca_ES, en_GB).
10LANGUAGE = "es_ES"
11ENV['LC_ALL'] = LANGUAGE + ".UTF-8"
12# Number of OpenGnsys clients (accepted values: from 2 to 9).
13NCLIENTS = 4
14# Repository virtual disk: file and size (GB).
15REPODISK = "ogRepo.vdi"
16REPOSIZE = 50
17# Amount of memory for server and clients (MB)
18SERVERMEM = 1024        # Minimum: 512
19CLIENTMEM = 512         # Minimum: 256
20# Prefixes for MAC and IP addresses.
21MACPREFIX = "08:00:27:0E:65"
22NETPREFIX = "192.168.2"
23# OpenGnsys Server IP address.
24SERVERIP = "#{NETPREFIX}.10"
25# Local port to access OpenGnsys Server.
26LOCALWEBPORT = 8443
27
28# OpenGnsys Server provisioning script: prepare repo disk, install OpenGnsys, change default interface, configure DHCP server.
29OGSERVERSCRIPT = <<EOT
30# Exit if OpenGnsys is installed.
31[ -f /opt/opengnsys/doc/VERSION.json ] && echo "Cannot provision, OpenGnsys is already installed." && exit 1
32# Create repository disk using LVM, if necesary.
33if [ -z "$(blkid /dev/mapper/og-images | grep ext4)" ]; then
34    pvcreate /dev/sdb
35    vgcreate og /dev/sdb
36    vgchange -ay
37    lvcreate -ay -n images -l 100%VG og
38    mkfs -t ext4 /dev/mapper/og-images
39    mkdir -p /opt/opengnsys/images
40    echo "/dev/mapper/og-images  /opt/opengnsys/images  ext4  defaults  0  0" >> /etc/fstab
41    mount -a
42fi
43# Install OpenGnsys and change server address.
44if which curl &>/dev/null; then
45    DOWNLOAD="curl -s"
46elif which wget &>/dev/null; then
47    DOWNLOAD="wget -q -O -"
48fi
49BRANCH="opengnsys-#{OGVERSION}"
50$DOWNLOAD "https://raw.githubusercontent.com/opengnsys/OpenGnsys/$BRANCH/installer/opengnsys_installer.sh" | bash || exit $?
51mv /opt/opengnsys/log/bash.log /opt/opengnsys/log/opengnsys_installer.log
52echo y | /opt/opengnsys/bin/setserveraddr $(ip -o link show | tail -1 | cut -d: -f2)
53# Insert DHCP data.
54for ((i=#{NCLIENTS+10}; i>10; i--)); do
55    sed -i "/^}$/ i host pc${i} { hardware ethernet #{MACPREFIX}:${i}; fixed-address #{NETPREFIX}.${i}; }" /etc/dhcp/dhcpd.conf
56done
57service isc-dhcp-server restart
58# Set language.
59export LANG="#{LANGUAGE}.UTF-8"
60echo "LANG=\\\"$LANG\\\"" > /etc/default/locale
61echo "LANG=\\\"$LANG\\\"" >> /etc/environment
62locale-gen --lang #{LANGUAGE}
63sed -i "s/XKBLAYOUT=.*/XKBLAYOUT=\\\"${LANG%_*}\\\"/" /etc/default/keyboard
64dpkg-reconfigure -fnoninteractive console-setup
65# Comment out next lines for automatic data insertion.
66#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"
67#for ((i=11; i<=#{NCLIENTS+10}; i++)); do
68#    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'),"
69#done
70#mysql -u usuog -ppassusuog -D ogAdmBD -e "${SQL%,}"
71#/opt/opengnsys/bin/setclientmode ogLiveAdmin pc11 PERM
72#for ((i=12; i<=#{NCLIENTS+10}; i++)); do
73#    /opt/opengnsys/bin/setclientmode ogLive pc$i PERM
74#done
75echo "Notes:"
76echo "- OpenGnsys Server URL: https://localhost:#{LOCALWEBPORT}/opengnsys/"
77exit 0
78EOT
79
80# Client 1 OS provisioning script.
81MODELSCRIPT = <<EOT
82# Comment out next lines to install and configure OGAgent for Ubuntu.
83#OGAGENTPKG="ogagent_#{OGAGENTVERSION}_all.deb"
84#apt-get update -y
85#apt-get install -y curl
86#curl -ks https://#{SERVERIP}/opengnsys/descargas/$OGAGENTPKG -o /tmp/$OGAGENTPKG
87#if [ -f /tmp/$OGAGENTPKG ]; then
88#    apt-get install -y /tmp/$OGAGENTPKG || exit $?
89#    sed -i "0,/remote=/ s,remote=.*,remote=https://#{SERVERIP}/opengnsys/rest/," /usr/share/OGAgent/cfg/ogagent.cfg
90#    rm -f /tmp/$OGAGENTPKG
91#else
92#    echo "Warning: cannot install OGAgent package $OGAGENTPKG"
93#fi
94# Remove network configuration added by Vagrant.
95sed -i "/enp0s3/ d" /etc/network/interfaces
96echo "Notes:"
97echo "- After now, use VirtualBox GUI to disable network interface 1 and restart this VM."
98# Leave VM halted.
99sleep 2
100poweroff &
101EOT
102
103Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
104
105  # OpenGnsys Server VM definition.
106  config.vm.define "ogAdministrator", primary: true do |og|
107    # Specific VirtualBox configuration.
108    og.vm.provider "virtualbox" do |vb|
109      # VM name, memory and CPUs.
110      vb.name = "ogAdministrator"
111      vb.memory = SERVERMEM
112      vb.cpus = 1
113      # 2nd virtual disk path (current dir on Windows, VM dir on other OSes)
114      if Vagrant::Util::Platform.windows? then
115        second_disk = File.join(".", REPODISK)
116      else
117        line = `VBoxManage list systemproperties`.match("Default machine folder.*")[0]
118        vb_machine_folder = line.split(':')[1].strip()
119        second_disk = File.join(vb_machine_folder, vb.name, REPODISK)
120      end
121      # Create repo virtual disk, if needed.
122      unless File.exist?(second_disk)
123        vb.customize ['createhd', '--filename', second_disk, '--size', REPOSIZE * 1024]
124      end
125      # Attach repo virtual disk.
126      vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', second_disk]
127    end
128    # VM base and host name.
129    og.vm.box = "bento/ubuntu-18.04"
130    og.vm.hostname = "ogAdministrator"
131    # Network configuration: forward web port and attach new interface to VMs private network.
132    og.vm.network "forwarded_port", guest: 443, host: LOCALWEBPORT, host_ip: "127.0.0.1"
133    og.vm.network "private_network", mac: "#{MACPREFIX}10".tr(":",""), ip: "#{SERVERIP}", virtualbox__intnet: true
134    # Comment out to disable synced folder.
135    #og.vm.synced_folder ".", "/vagrant", disabled: true
136    # Launch provisioning script.
137    og.vm.provision "shell", inline: OGSERVERSCRIPT
138  end
139
140  # Client 1 VM definition.
141  config.vm.define "pc11", autostart: false do |v1|
142    v1.vm.box = "bento/ubuntu-18.04"
143    v1.vm.hostname = "pc11"
144    v1.vm.network "private_network", mac: "#{MACPREFIX}11".tr(":",""), type: "dhcp", virtualbox__intnet: true
145    v1.vm.provider "virtualbox" do |vb|
146      vb.name = "pc11"
147      vb.memory = CLIENTMEM
148      vb.cpus = 1
149      vb.customize ['modifyvm', :id, '--boot1', 'net', '--boot2', 'disk']
150    end
151    v1.vm.synced_folder ".", "/vagrant", disabled: true
152    v1.vm.provision "shell", inline: MODELSCRIPT
153  end
154
155  # Clonable clients definition.
156  (2..NCLIENTS).each do |i|
157    config.vm.define "pc#{i+10}", autostart: false do |cl|
158      cl.vm.box = "clink15/pxe"
159      cl.ssh.insert_key = false
160      cl.vm.boot_timeout = 5
161      cl.vm.network "private_network", mac: "#{MACPREFIX}#{i+10}".tr(":",""), type: "dhcp", virtualbox__intnet: true
162      cl.vm.provider "virtualbox" do |vb|
163        vb.name = "pc#{i+10}"
164        vb.memory = CLIENTMEM
165        vb.cpus = 1
166        vb.customize ['modifyvm', :id, '--boot1', 'net', '--boot2', 'disk']
167        vb.customize ["modifyvm", :id, "--nic1", "none"]
168      end
169    end
170  end
171
172end
173
Note: See TracBrowser for help on using the repository browser.