source: installer/vagrant/Vagrantfile-prod-vbox @ f202956

918-git-images-111dconfigfileconfigure-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 f202956 was ccfd26b, checked in by Ramón M. Gómez <ramongomez@…>, 6 years ago

#739: Vagrant provisioning scripts try to get the name of the internal network interface.

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