You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
242 lines
4.3 KiB
242 lines
4.3 KiB
#!/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 <<EOF >> /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 <<EOF > /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 <<EOF >> /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 <<EOF >> /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
|
|
|
|
|
|
|
|
|