These are the instructions for creating an end-user VM from scratch.
VM Configuration
- Using VirtualBox:
- 1 Core
- 3G RAM
- 500G System Disk (VDI, Dynamically Allocated)
- Set network to "Attached to Bridged Adapter"
Base OS Install
- Centos 6.4 x86-64
- English language and keyboard
- hostname: localhost.localdomain (the default)
- if it is localhost it should set it to the dhcp hostname provided.
- eth0:
- Clear "Device MAC address"
- Connect automatically
- IPv4 Settings
- Automatic (DHCP)
- Automatic (DHCP)
- set timezone to america/indiana/indianapolis, clock uses utc
- root password is 'changeme'
- partitioning:
- custom layout
- /dev/sda1: 500M ext4 mounted as /boot
- /dev/sda2: (remainder of disk) Physical volume
- Volume Group: vg_avalon
- PVs: /dev/sda2
- LV lv_swap 2G
- LV lv_root (remainder of disk) ext4 mounted as /
- custom layout
- Desktop install
- Reboot / Firstboot
- Leave all of the defaults, except...
- Do Not create a new user
- Log in as root
- do not check "do not show me this again" to the "you are running as root" dialog. Just close it.
- yum update
- open these ports in the firewall:
- tcp/22
- tcp/80
- tcp/1935
- tcp/18080
- clean up eth0 configuration in /etc/sysconfig/network-scripts/ifcfg-eth0:
- remove UUID
remove any DHCP_CLIENT_ID
egrep -v '^(UUID|DHCP_CLIENT_ID)=' /etc/sysconfig/network-scripts/ifcfg-eth0 > /etc/sysconfig/network-scripts/ifcfg-eth0
- OPTIONAL:
- shut down the VM
- at this point the vm is at "baseOS" and can be used as a cloning point
There is a bug in VirtualBox with IPv6 handling over a bridged network. When the bug is present the top transfer speeds for IPv6 are around 18kb/s. Since RHEL (and derivatives) prefer IPv6 when looking up hosts, it is not uncommon to get an IPv6 host address for updates. To disable IPv6 on the guest add these lines to /etc/sysctl.conf. VirtualBox 4.2.12 was supposed to fix it but I'm not sure it has.
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1
Avalon Install
- OPTIONAL:
- clone the baseOS image as puppet-YYMMDD
- Use the installation notes from Manual Puppet Install
- When setting FACTER_* environment variables, set
- FACTER_avalon_dropbox_password to "changeme"
- FACTER_avalon_public_address to "localhost.localdomain"
- When setting FACTER_* environment variables, set
- HACK: maintain permissions for dropbox
create script /usr/local/bin/fix_dropbox_permissions with this content:
#!/bin/bash chown -R avalon:dropbox /var/avalon/dropbox find /var/avalon/dropbox -type f -exec chmod 664 "{}" ";" find /var/avalon/dropbox -type d -exec chmod 2775 "{}" ";"
and set the mode to 755.
set the cronjob to run every minute by adding this line:
* * * * * /usr/local/bin/fix_dropbox_permissions
Demo Content
- OPTIONAL:
- clone the puppet image as democontent-YYMMDD
- Register the archivist1@example.com user in Avalon, and log in as that user.
- this account is removed when the system is prepared for delivery.
- Create a 'Default Collection' collection with the archivist1@example.com user.
Get the demo fixtures bundle
cd /tmp wget http://www.avalonmediasystem.org/downloads/DemoFixturesBatch.tar.gz tar xvzf DemoFixturesBatch.tar.gz chown -R avalon:dropbox DemoFixturesBatch chmod -R g+w DemoFixturesBatch mv DemoFixturesBatch /var/avalon/dropbox
Monitor progress in Matterhorn (at http://<whatever>:18080 using the default username/password) or within Avalon.
Download the demo content thumbnails
cd /tmp wget http://www.avalonmediasystem.org/downloads/DemoFixturesThumbnails.tar.gz tar -xzvf DemoFixturesThumbnails.tar.gz chown -R avalon:avalon DemoFixturesThumbnails mv DemoFixturesthumbnails /var/www/avalon/current/app/assets/images
Modify /var/www/avalon/current/app/views/catalog/_home_text.html.erb and replace sample content with something like:
<ul class="thumbnails"> <li class="span3"><h5>Featured Video</h5><a href="<%= media_object_path('avalon:1') %>" class="thumbnail" ><%= image_tag "DemoFixturesThumbnails/organClip.jpg", alt: "Featured Video" %></a></li> <li class="span3"><h5>Featured Video</h5><a href="<%= media_object_path('avalon:2') %>" class="thumbnail" ><%= image_tag "DemoFixturesThumbnails/lunchroomManners.jpg", alt: "Featured Video" %></a></li> <li class="span3"><h5>Featured Audio</h5><a href="<%= media_object_path('avalon:3') %>" class="thumbnail" ><%= image_tag "DemoFixturesThumbnails/mahler.jpg", alt: "Featured Audio" %></a></li> </ul>
The values "avalon:1" to "avalon:3" should be changed to the appropriate container IDs
Reload the avalon application by running
touch /var/www/avalon/current/tmp/restart.txt
and verify the changes are correct.
- Fix access permissions on all three items:
- edit each item
- click on the "Access Control" tab
- click on the "Available to the general public" radio button
- click Save
- Click the 'Publish" button if it is available on the item view (Lunchroom Manners).
- edit each item
Remove source data
rm /tmp/DemoFixturesBatch.tar.gz rm -rf /var/avalon/dropbox/DemoFixturesBatch
VM Image Prep
- OPTIONAL:
- clone the latest democontent image as dist-YYMMDD
- Install avalon-vm-2.0-1.noarch.rpm to install the firstboot changes and tools
- If IPv6 was disabled during install, re-enable it by removing the lines added to /etc/sysctl.conf during BaseOS. If these lines are not removed, email will not work.
- Prepare the disk for compacting
clean up anything that's left over from the build process
rm -rf /root/Downloads/* /var/avalon/dropbox/* /home/makerpm/rpmbuild /opt/staging /root/avalon-installer-flat /root/flat.tar.gz yum clean all swapoff /dev/mapper/vg_avalon-lv_swap; dd if=/dev/zero of=/dev/mapper/vg_avalon-lv_swap bs=1M; mkswap /dev/mapper/vg_avalon-lv_swap
deleted files still take up space on the disk image. The disk image (as of 4/24/13) is roughly 12G in size, with 7.8G of actual data. Write zeros to a file until the disk is full to clear out the sectors which are unallocated but had data at one point. Since the .VDI image is sparsely allocated, the disk image size will actually grow less that 1G even though nearly 500G has been written.
dd if=/dev/zero of=/tmp/foo bs=1M oflag=direct; rm /tmp/foo
- run /usr/share/avalon/dist-prep to prepare the machine for release
- clear the command line history (history -cw)
- shutdown the VM
- Compact the disk image
On the host run:
VBoxManage modifyhd avalon-vm-disk-YYMMDD.vdi --compact
- Export the appliance
List the VMs and find the UUID of the Avalon VM
VBoxManage list vms
Disable USB 2.0 in the VM to avoid a warning when users don't have the VirtualBox extensions loaded.
VBoxManage modifyvm <machine-id> --usb off
VM Settings:
Name Value Name avalon-vm Product Avalon Media System Product-URL http://www.avalonmediasystem.org Version R2 VBoxManage export <machine-id> --output avalon-vm.ova --product "Avalon Media System" --producturl http://www.avalonmediasystem.org --version R2
- copy the OVA to the distribution point
- Make sure to set the avalon-vm.ova symlink to the current release
- Set the permissions to 644 (they're 600 by default)