source: installer/vagrant/Vagrantfile-1.1.0a-vbox @ 5d05b06

Last change on this file since 5d05b06 was 153055f, checked in by Ramón M. Gómez <ramongomez@…>, 5 years ago

#914: Releasing OpenGnsys 1.1.1 (Espeto).

  • 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.json ] && 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
46BRANCH="opengnsys-1.1.0a"
47$DOWNLOAD https://raw.githubusercontent.com/opengnsys/OpenGnsys/$BRANCH/installer/opengnsys_installer.sh | bash || exit $?
48mv /opt/opengnsys/log/bash.log /opt/opengnsys/log/opengnsys_installer.log
49echo y | /opt/opengnsys/bin/setserveraddr $(ip -o link show | tail -1 | cut -d: -f2)
50# Insert DHCP data.
51for ((i=#{NCLIENTS+10}; i>10; i--)); do
52    sed -i "/^}$/ i host pc${i} { hardware ethernet #{MACPREFIX}:${i}; fixed-address #{NETPREFIX}.${i}; }" /etc/dhcp/dhcpd.conf
53done
54service isc-dhcp-server restart
55# Set language.
56export LANG="#{LANGUAGE}.UTF-8"
57echo "LANG=\\\"$LANG\\\"" > /etc/default/locale
58echo "LANG=\\\"$LANG\\\"" >> /etc/environment
59locale-gen --lang #{LANGUAGE}
60sed -i "s/XKBLAYOUT=.*/XKBLAYOUT=\\\"${LANG%_*}\\\"/" /etc/default/keyboard
61dpkg-reconfigure -fnoninteractive console-setup
62# Comment out next lines for automatic data insertion.
63#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"
64#for ((i=11; i<=#{NCLIENTS+10}; i++)); do
65#    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'),"
66#done
67#mysql -u usuog -ppassusuog -D ogAdmBD -e "${SQL%,}"
68#/opt/opengnsys/bin/setclientmode ogLiveAdmin pc11 PERM
69#for ((i=12; i<=#{NCLIENTS+10}; i++)); do
70#    /opt/opengnsys/bin/setclientmode ogLive pc$i PERM
71#done
72echo "Notes:"
73echo "- OpenGnsys Server URL: https://localhost:#{LOCALWEBPORT}/opengnsys/"
74exit 0
75EOT
76
77# Client 1 OS provisioning script.
78OGAGENTPKG = "ogagent_1.1.0_all.deb"
79MODELSCRIPT = <<EOT
80# Comment out next lines to install and configure OGAgent for Ubuntu.
81#apt-get update -y
82#apt-get install -y curl
83#curl -ks https://#{SERVERIP}/opengnsys/descargas/#{OGAGENTPKG} -o /tmp/#{OGAGENTPKG}
84#if [ -f /tmp/#{OGAGENTPKG} ]; then
85#    apt-get install -y /tmp/#{OGAGENTPKG} || exit $?
86#    sed -i "0,/remote=/ s,remote=.*,remote=https://#{SERVERIP}/opengnsys/rest/," /usr/share/OGAgent/cfg/ogagent.cfg
87#    rm -f /tmp/#{OGAGENTPKG}
88#else
89#    echo "Warning: cannot install OGAgent package #{OGAGENTPKG}"
90#fi
91# Remove network configuration added by Vagrant.
92sed -i "/enp0s3/ d" /etc/network/interfaces
93echo "Notes:"
94echo "- After now, use VirtualBox GUI to disable network interface 1 and restart this VM."
95# Leave VM halted.
96sleep 2
97poweroff &
98EOT
99
100Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
101
102  # OpenGnsys Server VM definition.
103  config.vm.define "ogAdministrator", primary: true do |og|
104    # Specific VirtualBox configuration.
105    og.vm.provider "virtualbox" do |vb|
106      # VM name, memory and CPUs.
107      vb.name = "ogAdministrator"
108      vb.memory = SERVERMEM
109      vb.cpus = 1
110      # 2nd virtual disk path (current dir on Windows, VM dir on other OSes)
111      if Vagrant::Util::Platform.windows? then
112        second_disk = File.join(".", REPODISK)
113      else
114        line = `VBoxManage list systemproperties`.match("Default machine folder.*")[0]
115        vb_machine_folder = line.split(':')[1].strip()
116        second_disk = File.join(vb_machine_folder, vb.name, REPODISK)
117      end
118      # Create repo virtual disk, if needed.
119      unless File.exist?(second_disk)
120        vb.customize ['createhd', '--filename', second_disk, '--size', REPOSIZE * 1024]
121      end
122      # Attach repo virtual disk.
123      vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', second_disk]
124    end
125    # VM base and host name.
126    og.vm.box = "bento/ubuntu-16.04"
127    og.vm.hostname = "ogAdministrator"
128    # Network configuration: forward web port and attach new interface to VMs private network.
129    og.vm.network "forwarded_port", guest: 443, host: LOCALWEBPORT, host_ip: "127.0.0.1"
130    og.vm.network "private_network", mac: "#{MACPREFIX}10".tr(":",""), ip: "#{SERVERIP}", virtualbox__intnet: true
131    # Comment out to disable synced folder.
132    #og.vm.synced_folder ".", "/vagrant", disabled: true
133    # Launch provisioning script.
134    og.vm.provision "shell", inline: OGSERVERSCRIPT
135  end
136
137  # Client 1 VM definition.
138  config.vm.define "pc11", autostart: false do |v1|
139    v1.vm.box = "bento/ubuntu-16.04"
140    v1.vm.hostname = "pc11"
141    v1.vm.network "private_network", mac: "#{MACPREFIX}11".tr(":",""), type: "dhcp", virtualbox__intnet: true
142    v1.vm.provider "virtualbox" do |vb|
143      vb.name = "pc11"
144      vb.memory = CLIENTMEM
145      vb.cpus = 1
146      vb.customize ['modifyvm', :id, '--boot1', 'net', '--boot2', 'disk']
147    end
148    v1.vm.synced_folder ".", "/vagrant", disabled: true
149    v1.vm.provision "shell", inline: MODELSCRIPT
150  end
151
152  # Clonable clients definition.
153  (2..NCLIENTS).each do |i|
154    config.vm.define "pc#{i+10}", autostart: false do |cl|
155      cl.vm.box = "clink15/pxe"
156      cl.ssh.insert_key = false
157      cl.vm.boot_timeout = 5
158      cl.vm.network "private_network", mac: "#{MACPREFIX}#{i+10}".tr(":",""), type: "dhcp", virtualbox__intnet: true
159      cl.vm.provider "virtualbox" do |vb|
160        vb.name = "pc#{i+10}"
161        vb.memory = CLIENTMEM
162        vb.cpus = 1
163        vb.customize ['modifyvm', :id, '--boot1', 'net', '--boot2', 'disk']
164        vb.customize ["modifyvm", :id, "--nic1", "none"]
165      end
166    end
167  end
168
169end
170
Note: See TracBrowser for help on using the repository browser.