Merge "Minimal solar VM packer template"

This commit is contained in:
Jenkins 2016-05-05 14:21:03 +00:00 committed by Gerrit Code Review
commit 2f3fab16a0
14 changed files with 385 additions and 0 deletions

View File

@ -0,0 +1,2 @@
This directory is adjusted and modified version of:
https://github.com/maier/packer-templates/tree/master/alpine3.3

View File

@ -0,0 +1,16 @@
KEYMAPOPTS="us us"
HOSTNAMEOPTS="-n solar"
INTERFACESOPTS="auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
hostname solar
"
DNSOPTS="-d local -n 8.8.8.8 8.8.4.4"
TIMEZONEOPTS="-z UTC"
PROXYOPTS="none"
APKREPOSOPTS="-r"
SSHDOPTS="-c openssh"
NTPOPTS="-c openntpd"
DISKOPTS="-s 0 -m sys /dev/vda"

View File

@ -0,0 +1,16 @@
KEYMAPOPTS="us us"
HOSTNAMEOPTS="-n solar"
INTERFACESOPTS="auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
hostname solar
"
DNSOPTS="-d local -n 8.8.8.8 8.8.4.4"
TIMEZONEOPTS="-z UTC"
PROXYOPTS="none"
APKREPOSOPTS="-r"
SSHDOPTS="-c openssh"
NTPOPTS="-c openntpd"
DISKOPTS="-s 0 -m sys /dev/sda"

View File

@ -0,0 +1,19 @@
set -ux
apk upgrade -U --available
source /etc/os-release
cat << EOF > /etc/motd
$PRETTY_NAME ($VERSION_ID) Development Environment
Built for use with Vagrant using:
<https://github.com/maier/packer-templates>
See the Alpine Wiki for how-to guides and
general information about administrating
Alpine systems and development.
See <http://wiki.alpinelinux.org>
EOF

View File

@ -0,0 +1,5 @@
set -ux
# nothing special required
exit 0

View File

@ -0,0 +1,5 @@
set -ux
# nothing special required
exit 0

View File

@ -0,0 +1,10 @@
set -eux
# add in order to allow packer ssh access to provision
# the system, remove here to make box more secure
sed -i '/^PermitRootLogin yes/d' /etc/ssh/sshd_config
# make 'vagrant ssh' connections faster
echo "UseDNS no" >> /etc/ssh/sshd_config

View File

@ -0,0 +1,25 @@
set -exu
date > /etc/vagrant_box_build_time
#
# bash for vagrant (default shell is bash)
# doesn't look like there is an easy way for vagrant guest
# plugin to register a default shell. easier than always
# having to *remember* to configure `ssh.shell` for
# alpine boxes.
#
# cURL for initial vagrant key install from vagrant github repo.
# on first 'vagrant up', overwritten with a local, secure key.
#
apk add bash curl
adduser -D vagrant
echo "vagrant:vagrant" | chpasswd
mkdir -pm 700 /home/vagrant/.ssh
curl -sSo /home/vagrant/.ssh/authorized_keys 'https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub'
chown -R vagrant:vagrant /home/vagrant/.ssh
chmod -R go-rwsx /home/vagrant/.ssh

View File

@ -0,0 +1,7 @@
set -eux
apk add sudo
adduser vagrant wheel
echo "Defaults exempt_group=wheel" > /etc/sudoers
echo "%wheel ALL=NOPASSWD:ALL" >> /etc/sudoers

View File

@ -0,0 +1,53 @@
set -eux
echo "VBoxGuestAdditions currently do not build or install on Alpine Linux."
exit 0
#
# #
# # VBoxGuestAdditions fails to install.
# #
# # Alpine is intended to be 'minimal' so
# # there are certain things VBGA
# # 1. needs
# # 2. *assumes* are available
# # 3. or function a specific way
# # which is, not yet, the case...
# #
#
# mkdir -p /mnt/virtualbox
# retval=$?
# [ $retval -eq 0 ] || exit $retval
#
# modprobe loop
# retval=$?
# [ $retval -eq 0 ] || exit $retval
#
# LOOP=`losetup -f`
# retval=$?
# [ $retval -eq 0 ] || exit $retval
#
# losetup $LOOP /root/VBoxGuestAdditions.iso
# retval=$?
# [ $retval -eq 0 ] || exit $retval
#
# mount -t iso9660 -o ro $LOOP /mnt/virtualbox
# retval=$?
# [ $retval -eq 0 ] || exit $retval
#
# # current error 'unable to determine library path.'
# # "ldconfig -v" does not result in a list of valid
# # library paths (it is actually a shell script which
# # silently ignores -v).
# #
# # there are other issues as well, which have been
# # open with oracle/virtualbox for several years.
# # without forward progress (according to search
# # results and skimming through various discussions).
# sh /mnt/virtualbox/VBoxLinuxAdditions.run
# retval=$?
# [ $retval -eq 0 ] || exit $retval
#
# ln -s /opt/VBoxGuestAdditions-*/lib/VBoxGuestAdditions /usr/lib/VBoxGuestAdditions
# umount /mnt/virtualbox
# rm -rf /root/VBoxGuestAdditions.iso
#
# # END

View File

@ -0,0 +1,54 @@
#!/usr/bin/env bash
set -ex
# install required stuff
apk add --no-cache py-pip openssl git gcc build-base python-dev libffi libffi-dev
# install packages for solar transports
# (sshpass -> password passing for SSH commands)
apk add --no-cache rsync sshpass
mkdir -p /opt
cd /opt
git clone https://github.com/openstack/solar.git
cd /opt/solar
sudo sed -i '/ansible.*/ s/^#*/#/' requirements.txt
pip install pbr && pip install -e .
chown -R vagrant: /opt/solar
mkdir -p /etc/solar
echo "solar_db: sqlite:////home/vagrant/solar.db" > /etc/solar/solar.yaml
mkdir -p /var/lib/solar/repositories
chown -R vagrant: /var/lib/solar/repositories
# ssh config
cat <<EOF >>/home/vagrant/.ssh/config
Host *
StrictHostKeyChecking no
EOF
# worker
cat <<EOF >>/etc/init.d/solar-worker
#!/sbin/runscript
# $Header: $
depend() {
need net
need localmount
}
start() {
ebegin "Starting solar-worker"
exec start-stop-daemon -b --chdir /tmp --start --user vagrant --make-pidfile --pidfile /tmp/solar-worker.pid --exec solar-worker
eend $?
}
stop() {
ebegin "Stopping solar-worker"
exec start-stop-daemon --stop --user vagrant --pidfile /tmp/solar-worker.pid --exec solar-worker
eend $?
}
EOF
chmod +x /etc/init.d/solar-worker
rc-update add solar-worker default

View File

@ -0,0 +1,11 @@
set -ux
dd if=/dev/zero of=/EMPTY bs=1M
rm -f /EMPTY
# Block until the empty file has been removed, otherwise, Packer
# will try to kill the box while the disk is still full and that's bad
sync
sync
sync
exit 0

15
bootstrap/alpine/sh_vars Normal file
View File

@ -0,0 +1,15 @@
dist_name="alpine"
dist_vers="3.3"
dist_arch="x86_64"
# local or remote
build_type="local"
# set in .bashrc
# ATLAS_USER_NAME="maier"
#
# default in atlas.sh is fine
# ATLAS_BOX_NAME="${dist_name}-${dist_vers}-${dist_arch}"
# END

View File

@ -0,0 +1,147 @@
{
"description": "Build base Alpine Linux x86_64",
"provisioners": [
{
"type": "shell",
"scripts": [
"scripts/00base.sh",
"scripts/01alpine.sh",
"scripts/01networking.sh",
"scripts/02sshd.sh",
"scripts/03vagrant.sh",
"scripts/04sudoers.sh",
"scripts/90virtualbox.sh",
"scripts/98solar.sh",
"scripts/99minimize.sh"
],
"override": {
"virtualbox-iso": {
"execute_command": "/bin/sh '{{.Path}}'"
}
}
}
],
"builders": [
{
"type": "virtualbox-iso",
"virtualbox_version_file": ".vbox_version",
"guest_additions_mode": "disable",
"guest_os_type": "Linux26_64",
"headless": true,
"disk_size": 1024,
"http_directory": "http",
"iso_url": "http://wiki.alpinelinux.org/cgi-bin/dl.cgi/v3.3/releases/x86_64/alpine-3.3.3-x86_64.iso",
"iso_checksum": "af766ac6221c6f5b471ca388be22df81ac6f21be37486ba6846f115d1798528a",
"iso_checksum_type": "sha256",
"communicator": "ssh",
"ssh_username": "root",
"ssh_password": "vagrant",
"ssh_wait_timeout": "30m",
"shutdown_command": "/sbin/poweroff",
"boot_wait": "30s",
"boot_command": [
"root<enter><wait>",
"ifconfig eth0 up && udhcpc -i eth0<enter><wait>",
"wget http://{{ .HTTPIP }}:{{ .HTTPPort }}/answers_vbox<enter><wait>",
"setup-alpine -f answers_vbox<enter><wait5>",
"vagrant<enter><wait>",
"vagrant<enter><wait>",
"<wait10><wait10><wait10>",
"<wait10><wait10><wait10>",
"y<enter>",
"<wait10><wait10><wait10>",
"<wait10><wait10><wait10>",
"<wait10><wait10><wait10>",
"<wait10><wait10><wait10>",
"<wait10><wait10><wait10>",
"<wait10><wait10><wait10>",
"<wait10><wait10><wait10>",
"<wait10><wait10><wait10>",
"<wait10><wait10><wait10>",
"rc-service sshd stop<enter>",
"mount /dev/sda3 /mnt<enter>",
"echo 'PermitRootLogin yes' >> /mnt/etc/ssh/sshd_config<enter>",
"umount /mnt<enter>",
"reboot<enter>"
],
"hard_drive_interface": "sata",
"vboxmanage": [
["modifyvm", "{{.Name}}", "--memory", "512"],
["modifyvm", "{{.Name}}", "--cpus", "1"]
]
}, {
"type": "qemu",
"headless": true,
"disk_size": 1024,
"accelerator": "kvm",
"format": "qcow2",
"http_directory": "http",
"iso_url": "http://wiki.alpinelinux.org/cgi-bin/dl.cgi/v3.3/releases/x86_64/alpine-3.3.3-x86_64.iso",
"iso_checksum": "af766ac6221c6f5b471ca388be22df81ac6f21be37486ba6846f115d1798528a",
"iso_checksum_type": "sha256",
"communicator": "ssh",
"ssh_username": "root",
"ssh_password": "vagrant",
"ssh_wait_timeout": "30m",
"shutdown_command": "/sbin/poweroff",
"boot_wait": "30s",
"boot_command": [
"root<enter><wait>",
"ifconfig eth0 up && udhcpc -i eth0<enter><wait>",
"wget http://{{ .HTTPIP }}:{{ .HTTPPort }}/answers_qemu<enter><wait>",
"setup-alpine -f answers_qemu<enter><wait5>",
"vagrant<enter><wait>",
"vagrant<enter><wait>",
"<wait10><wait10><wait10>",
"<wait10><wait10><wait10>",
"y<enter>",
"<wait10><wait10><wait10>",
"<wait10><wait10><wait10>",
"<wait10><wait10><wait10>",
"<wait10><wait10><wait10>",
"<wait10><wait10><wait10>",
"<wait10><wait10><wait10>",
"<wait10><wait10><wait10>",
"<wait10><wait10><wait10>",
"<wait10><wait10><wait10>",
"rc-service sshd stop<enter>",
"mount /dev/vda3 /mnt<enter>",
"echo 'PermitRootLogin yes' >> /mnt/etc/ssh/sshd_config<enter>",
"umount /mnt<enter>",
"reboot<enter>"
],
"qemuargs": [
[
"-m",
"512M"
],
[
"-smp",
"1"
]
]
}
],
"post-processors": [
[{
"type": "vagrant",
"keep_input_artifact": false,
"only": ["virtualbox-iso"],
"output": "solar-minimal-virtualbox.box"
},{
"type": "vagrant",
"keep_input_artifact": true,
"only": ["qemu"],
"output": "solar-minimal-qemu.box"
}]
]
}