diff --git a/precise/host/hooks/install b/precise/host/hooks/install new file mode 100755 index 0000000..21deb6d --- /dev/null +++ b/precise/host/hooks/install @@ -0,0 +1,242 @@ +#!/bin/bash + +set -eux # -x for verbose logging to juju debug-log + +apt-get update +apt-get -y install bash-completion wget bzip2 git-core less language-pack-en python-software-properties tmux mosh sudo git + +## 0k git remote path +GIT_0K_BASE=${GIT_0K_BASE:-"git.0k.io:/var/git"} + +## 0k git remote options +GIT_0K_CLONE_OPTIONS=${GIT_0K_CLONE_OPTIONS:-""} + + + + +## +## etckeeper +## + +apt-get install etckeeper + +sed -i 's/#VCS="git"/VCS="git"/g' /etc/etckeeper/etckeeper.conf +sed -i 's/VCS="bzr"/#VCS="bzr"/g' /etc/etckeeper/etckeeper.conf + +etckeeper init + + +## +## Git utilities +## + +echo "[alias] + co = checkout + com = commit + st = status + ci = commit + +[color] + branch = auto + diff = auto + interactive = auto + status = auto + +" >> /etc/gitconfig + + + +## +## kal-scripts +## + +cat <> /etc/apt/sources.list + +## vlab's shell libraries +deb http://deb.kalysto.org no-dist kal-alpha kal-beta kal-main + +EOF + + +## +## More shell configurations (prompt, functions) +## + +mkdir -p /etc/prompt + +cat < /etc/prompt/prompt.1.rc +PROMPT_COMMAND="" +parse_git_branch() { + ref=\$(git symbolic-ref HEAD 2> /dev/null) || return + echo -en ' (\033[0;32m'\${ref#refs/heads/}'\033[0m)' +} +export PS1="\[\033[0;37m\][\[\033[1;30m\]\u\[\033[0;37m\]@\[\033[1;30m\]\h\[\033[0;37m\]]-[\[\033[1;34m\]\w\[\033[0;37m\]]\\\$(parse_git_branch)\n\[\033[1;37m\]\\$ \[\033[0;37m\]" +EOF + +cat <> /root/.bashrc + +## History management + +export HISTCONTROL=ignoredups +export HISTSIZE=50000 +shopt -s histappend +PROMPT_COMMAND='history -a' + + +## Prompt easy management + +prompt() { + prompt_name="prompt.\$1.rc" + + for i in /etc/prompt ~/.prompt; do + [ -f "\$i/\$prompt_name" ] && + . "\$i/\$prompt_name" + done +} + + +## Git log command + +function glog() { + git log --graph --pretty=tformat:%C\(yellow\ normal\)%h%Creset\ %C\(blue\ normal\)%an%Creset\ %s\ %Cgreen%d%Creset -n 20 "\$@" +} + + +prompt 1 + +EOF + + + + +apt-get install -y kal-scripts python-pip +pip install shyaml + +## +## btrfs install +## + +apt-get install btrfs-tools + +root=/mnt/btrfs-root + +#mkdir /mnt/btrfs-root -p +#mount /mnt/btrfs-root + + +btrfs subvolume create $root/var +mkdir $root/var/{lib,cache,backups} -p +for d in $root/var/{lib,cache,backups}; do + btrfs subvolume create $d/lxc +done + +for d in $root/srv/{,lxc-datastore{,/config,/data}}; do + btrfs subvolume create $d +done + +mkdir srv/lxc + + +cat <> /etc/fstab + +## binds + +/mnt/btrfs-root/var/lib/lxc /var/lib/lxc none bind,defaults,auto 0 0 +/mnt/btrfs-root/var/cache/lxc /var/cache/lxc none bind,defaults,auto 0 0 +/mnt/btrfs-root/var/backups/lxc /var/backups/lxc none bind,defaults,auto 0 0 +/mnt/btrfs-root/srv/lxc-datastore /srv/lxc-datastore none bind,defaults,auto 0 0 + + +EOF + +mkdir -p /var/backups/lxc /srv/lxc-datastore + +## +## lxc tools +## + +apt-get install lxc + +## mount all + +mkdir -p /opt/apps + +## +## Install 0k-manage for the handy oe command +## + +( + if ! [ -d "/opt/apps/0k-manage" ]; then + cd /opt/apps && + git clone $GIT_0K_CLONE_OPTIONS "$GIT_0K_BASE/0k/0k-manage.git" && + cd /opt/apps/0k-manage && + git checkout 0k/dev/master + fi +) + +## +## Install 0k-charms +## + +( + if ! [ -d "/opt/apps/0k-charms" ]; then + cd /opt/apps && + git clone $GIT_0K_CLONE_OPTIONS "$GIT_0K_BASE/0k/0k-charms.git" && + cd /opt/apps/0k-manage && + git checkout 0k/dev/master + fi +) + + +## +## Install lxc-scripts +## + +( + if ! [ -d "/opt/apps/lxc-scripts" ]; then + cd /opt/apps && + git clone $GIT_0K_CLONE_OPTIONS "$GIT_0K_BASE/0k/lxc-scripts.git" && + cd /opt/apps/0k-manage && + git checkout master && + ln -sf /opt/apps/lxc-scripts/bin/lxc-* /usr/local/sbin/ && + ln -sf /opt/apps/lxc-scripts/usr/lib/lxc/templates/lxc-0k-ubuntu-cloud /usr/lib/lxc/templates/ + fi +) + +## +## Patch some files +## + +( + cd /etc && + cat /opt/apps/lxc-scripts/precise-12.04.patch | patch -p1 + +) + +## +## Install dns waterfall +## + +apt-get install -y bind9 dnsmasq + + +# edit /etc/dnsmaq.conf +echo " +server=$(. /etc/default/lxc && echo "$LXC_ADDR") +interface=lo +no-negcache +log-queries +log-facility=/var/log/dnsmasq.log +" >> /etc/dnsmasq.conf + +( + cd /etc && + cat src/bind9.patch | patch -p1 && + sed -ri s/%%EXTERNAL_IP%%/$(. /etc/default/lxc && ifip "$HOST_EXTERNAL_DEVICE") +) +mkdir /var/log/named -p && +chown bind:bind /var/log/named + + + + diff --git a/precise/host/src/bind9.patch b/precise/host/src/bind9.patch new file mode 100644 index 0000000..149272a --- /dev/null +++ b/precise/host/src/bind9.patch @@ -0,0 +1,39 @@ +diff --git a/bind/named.conf.options b/bind/named.conf.options +index 5b1981d..c1fd78c 100644 +--- a/bind/named.conf.options ++++ b/bind/named.conf.options +@@ -21,8 +21,32 @@ options { + dnssec-validation auto; + + auth-nxdomain no; # conform to RFC1035 +- listen-on-v6 { ::1; }; +- listen-on { 127.0.0.1; }; ++ //listen-on-v6 { ::1; }; ++ listen-on { 178.33.122.174; }; + // allow-recursion { 127.0.0.1; }; + }; + ++ ++logging { ++ channel warning ++ { ++ file "/var/log/named/dns.warnings.log"; ++ severity warning; ++ print-category yes; ++ print-severity yes; ++ print-time yes; ++ }; ++ ++ channel general_dns ++ { ++ file "/var/log/named/dns.log"; ++ severity info; ++ print-category yes; ++ print-severity yes; ++ print-time yes; ++ }; ++ ++ category default { warning; } ; ++ category queries { general_dns; } ; ++}; ++