Valentin Lab
9 years ago
14 changed files with 561 additions and 440 deletions
-
440precise/host/hooks/install
-
9precise/host/hooks/install.d/00-base.sh
-
7precise/host/hooks/install.d/05-shyaml.sh
-
51precise/host/hooks/install.d/10-gitconfig.sh
-
17precise/host/hooks/install.d/15-etckeeper.sh
-
23precise/host/hooks/install.d/20-kal-scripts.sh
-
52precise/host/hooks/install.d/30-customize.sh
-
28precise/host/hooks/install.d/35-git-access.sh
-
20precise/host/hooks/install.d/36-gitsub.sh
-
93precise/host/hooks/install.d/40-btrfs.sh
-
8precise/host/hooks/install.d/50-lxc.sh
-
69precise/host/hooks/install.d/70-0k.sh
-
111precise/host/hooks/install.d/80-dns-waterfall.sh
-
73precise/host/hooks/install.d/90-shorewall.sh
@ -1,440 +0,0 @@ |
|||
#!/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:-""} |
|||
|
|||
|
|||
#BTRFS_DEVICE= |
|||
BTRFS_MOUNT_ROOT=${BTRFS_MOUNT_ROOT:-"/mnt/btrfs-root"} |
|||
if [ -z "$BTRFS_DEVICE" ]; then |
|||
echo "You must set a BTRFS_DEVICE environement variable prior to executing this hook." |
|||
exit 1 |
|||
fi |
|||
|
|||
MAIL_NAME=${MAIL_NAME:-localhost} |
|||
MAIL_DOMAINNAME=${MAIL_DOMAINNAME:-"localdomain"} |
|||
MAIL_SATTELITE_RELAYHOST=${MAIL_SATTELITE_RELAYHOST:-} |
|||
|
|||
|
|||
## |
|||
## 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 |
|||
apt-get update |
|||
|
|||
apt-get install -y --force-yes kal-scripts python-pip && |
|||
pip install shyaml |
|||
|
|||
## |
|||
## 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 |
|||
|
|||
## |
|||
## btrfs install |
|||
## |
|||
|
|||
apt-get install -y btrfs-tools |
|||
|
|||
echo "the following is dangerous code. Please execute yourself for now." |
|||
exit 1 |
|||
## Format the device and add entry in fstab |
|||
|
|||
mkfs.btrfs "$BTRFS_DEVICE" |
|||
|
|||
UUID="$(blkid -s UUID $BTRFS_DEVICE -o value)" |
|||
echo "UUID=$UUID $BTRFS_MOUNT_ROOT btrfs defaults,relatime,compress=lzo,auto 0 0" >> /etc/fstab |
|||
|
|||
## Mount point and mount device |
|||
|
|||
mkdir "$BTRFS_MOUNT_ROOT" -p |
|||
mount "$BTRFS_MOUNT_ROOT" |
|||
|
|||
## Build subvolume structure |
|||
|
|||
btrfs subvolume create $BTRFS_MOUNT_ROOT/var |
|||
mkdir $BTRFS_MOUNT_ROOT/var/{lib,cache,backups} -p |
|||
for d in $BTRFS_MOUNT_ROOT/var/{lib,cache,backups}; do |
|||
btrfs subvolume create $d/lxc |
|||
done |
|||
|
|||
for d in $BTRFS_MOUNT_ROOT/srv/{,lxc-datastore{,/config,/data}}; do |
|||
btrfs subvolume create $d |
|||
done |
|||
|
|||
## Add binds to /etc/fstab |
|||
|
|||
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 -a |
|||
|
|||
|
|||
mkdir -p /opt/apps |
|||
|
|||
## |
|||
## ssh config |
|||
## |
|||
|
|||
|
|||
cp src/etc/ssh/lxc_git_access_id_rsa /etc/ssh/lxc_git_access_id_rsa |
|||
chmod 0600 /etc/ssh/lxc_git_access_id_rsa |
|||
|
|||
cat <<EOF >> ~/.ssh/config |
|||
|
|||
Host git.0k.io |
|||
User lxc-user |
|||
IdentityFile /etc/ssh/lxc_git_access_id_rsa |
|||
UserKnownHostsFile /dev/null |
|||
StrictHostKeyChecking no |
|||
Port 10022 |
|||
|
|||
EOF |
|||
|
|||
|
|||
## |
|||
## Install 0k-manage |
|||
## |
|||
|
|||
( |
|||
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/prod/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-charms && |
|||
git checkout master |
|||
fi |
|||
|
|||
if ! [ -d "/srv/charm-store" ]; then |
|||
mkdir -p /srv && |
|||
ln -sf /opt/apps/0k-charms/precise /srv/charm-store |
|||
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 |
|||
## |
|||
|
|||
stop lxc-net |
|||
|
|||
( |
|||
cp src/etc/default/lxc /etc/default/lxc && |
|||
cp src/etc/init/lxc{,-net}.conf /etc/init |
|||
) |
|||
|
|||
start lxc-net |
|||
|
|||
## |
|||
## Install dns waterfall |
|||
## |
|||
|
|||
apt-get install -y bind9 dnsmasq |
|||
|
|||
echo "Change /etc/default/lxc accordingly (use 172.48.#NB) as prefix" |
|||
echo "and add HOST_EXTERNAL_DEVICE=" |
|||
exit 1 |
|||
|
|||
# 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 |
|||
|
|||
( |
|||
cp "src/etc/bind/named.conf.options" "/etc/bind/named.conf.options" && |
|||
sed -ri "s/%%EXTERNAL_IP%%/$(. /etc/default/lxc && ifip "$HOST_EXTERNAL_DEVICE")/g" "/etc/bind/named.conf.options" |
|||
) |
|||
## XXXvlab: Maybe we could change this in the service start/stop of the named daemon |
|||
|
|||
mkdir /var/log/named -p && |
|||
chown bind:bind /var/log/named |
|||
|
|||
/etc/init.d/bind9 restart |
|||
/etc/init.d/dnsmasq restart |
|||
|
|||
## |
|||
## Logrotate for dnsmasq and named |
|||
## |
|||
|
|||
cat <<EOF > /etc/logrotate.d/dnsmasq |
|||
|
|||
/var/log/dnsmasq.log { |
|||
missingok |
|||
copytruncate |
|||
notifempty |
|||
compress |
|||
|
|||
postrotate |
|||
kill -s SIGUSR2 "\$(cat /var/run/dnsmasq/dnsmasq.pid)" |
|||
endscript |
|||
} |
|||
|
|||
EOF |
|||
|
|||
|
|||
cat <<EOF > /etc/logrotate.d/lxc-dnsmasq |
|||
|
|||
/var/log/lxc-dnsmasq.log { |
|||
missingok |
|||
copytruncate |
|||
notifempty |
|||
compress |
|||
|
|||
postrotate |
|||
kill -s SIGUSR2 "\$(cat /var/run/lxc/dnsmasq.pid)" |
|||
endscript |
|||
} |
|||
|
|||
EOF |
|||
|
|||
cat <<EOF > /etc/logrotate.d/named |
|||
/var/log/named/*.log { |
|||
missingok |
|||
copytruncate |
|||
notifempty |
|||
compress |
|||
} |
|||
EOF |
|||
|
|||
|
|||
## |
|||
## shorewall |
|||
## |
|||
|
|||
apt-get install -y shorewall |
|||
|
|||
cat <<EOF > /etc/shorewall/zones |
|||
fw firewall |
|||
net ipv4 |
|||
lan ipv4 |
|||
EOF |
|||
|
|||
cat <<EOF > /etc/shorewall/interfaces |
|||
#ZONE INTERFACE BROADCAST OPTIONS |
|||
net eth0 |
|||
## Uncomment to enable vpn setup |
|||
#vpn tun0 detect |
|||
lan lxcbr0 - routeback |
|||
EOF |
|||
|
|||
cat <<EOF > /etc/shorewall/policy |
|||
#SOURCE DEST RULE LOG |
|||
|
|||
fw all ACCEPT |
|||
lan all ACCEPT |
|||
net all DROP info |
|||
all all DROP info |
|||
EOF |
|||
|
|||
cat <<EOF > /etc/shorewall/rules |
|||
SSH/ACCEPT net fw |
|||
Ping/ACCEPT net fw |
|||
|
|||
|
|||
BEGIN SHELL |
|||
|
|||
host_ip="\$(/sbin/ifconfig eth0 2> /dev/null | sed "s/^.*inet ad\+r://g" | grep ^[0-9] | sed "s/ .*$//g")" |
|||
|
|||
for name in \$(lxc-ls-running); do |
|||
ip=\$(dig +short A "\$name") |
|||
[ -e "/var/lib/lxc/\$name/shorewall" ] && |
|||
cat /var/lib/lxc/\$name/shorewall | sed -r "s/%%HOST_INTERNET_IP%%/\$host_ip/g" \ |
|||
| sed -r "s/%%IP%%/\$ip/g" |
|||
|
|||
done |
|||
|
|||
true |
|||
|
|||
END SHELL |
|||
|
|||
EOF |
|||
|
|||
|
|||
cat <<EOF > /etc/shorewall/masq |
|||
eth0 lxcbr0 |
|||
EOF |
|||
|
|||
## |
|||
## Mail facilities |
|||
## |
|||
|
|||
( |
|||
debconf-set-selections <<< "postfix postfix/mailname string ${MAIL_NAME}.${MAIL_DOMAINNAME}" && |
|||
debconf-set-selections <<< "postfix postfix/main_mailer_type select 'Local only'" && |
|||
|
|||
apt-get install -y postfix mailutils && |
|||
|
|||
postconf inet_interfaces=loopback-only && |
|||
|
|||
[ -z "$MAIL_SATTELITE_RELAYHOST" ] && postconf relayhost="$MAIL_SATTELITE_RELAYHOST" |
|||
postfix reload |
|||
) |
|||
|
|||
## |
|||
## Warnings |
|||
## |
|||
|
|||
|
|||
ln -sf /opt/apps/0k-manage/src/etc/cron.hourly/* /etc/cron.hourly/ |
|||
ln -sf /opt/apps/lxc-scripts/etc/cron.hourly/* /etc/cron.hourly/ |
|||
|
|||
## |
|||
## Backup lxc |
|||
## |
|||
|
|||
( |
|||
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/prod/master |
|||
fi |
|||
|
|||
## these are required by /etc/cron.hourly/lxc-backup |
|||
|
|||
pip install sact.epoch && |
|||
(cd /usr/local/lib/python2.7/dist-packages/; |
|||
mv zope zope-bad) && |
|||
pip install zope.interface --upgrade && |
|||
pip install zope.component --upgrade && |
|||
ln -sf /opt/apps/0k-manage/src/bin/* /usr/local/bin/ |
|||
) |
@ -0,0 +1,9 @@ |
|||
#!/bin/bash |
|||
|
|||
set +eux |
|||
|
|||
apt-get update |
|||
apt-get -y --force-yes install bash-completion wget bzip2 git-core \ |
|||
less language-pack-en python-software-properties tmux mosh \ |
|||
sudo git </dev/null |
|||
|
@ -0,0 +1,7 @@ |
|||
#!/bin/bash |
|||
|
|||
## For shyaml |
|||
|
|||
apt-get install -y --force-yes python-pip libyaml-dev python-dev </dev/null |
|||
|
|||
pip install shyaml |
@ -0,0 +1,51 @@ |
|||
#!/bin/bash |
|||
|
|||
## |
|||
## Git utilities |
|||
## |
|||
|
|||
cat <<EOF > /etc/gitconfig |
|||
[alias] |
|||
co = checkout |
|||
com = commit |
|||
st = status |
|||
ci = commit |
|||
|
|||
[color] |
|||
branch = auto |
|||
diff = auto |
|||
interactive = auto |
|||
status = auto |
|||
|
|||
[core] |
|||
whitespace = fix |
|||
excludesfile = /etc/gitignore |
|||
|
|||
EOF |
|||
|
|||
cat <<EOF > /etc/gitignore |
|||
docs/build/* |
|||
develop-eggs/* |
|||
*.pyc |
|||
*.o |
|||
.installed.cfg |
|||
eggs/* |
|||
*.egg-info/* |
|||
*.orig |
|||
dist/* |
|||
build/* |
|||
buildout.dev.cfg |
|||
*~ |
|||
*# |
|||
.#* |
|||
*.swp |
|||
*_flymake.* |
|||
.svn |
|||
|
|||
EOF |
|||
|
|||
|
|||
|
|||
git config --global user.email "default@$(hostname)" |
|||
git config --global user.name "default" |
|||
|
@ -0,0 +1,17 @@ |
|||
#!/bin/bash |
|||
|
|||
set +eux |
|||
|
|||
[ "$DOCKER" ] && exit 0 |
|||
|
|||
## |
|||
## etckeeper |
|||
## |
|||
|
|||
apt-get install -y etckeeper </dev/null |
|||
|
|||
sed -i 's/#VCS="git"/VCS="git"/g;s/VCS="bzr"/#VCS="bzr"/g' \ |
|||
/etc/etckeeper/etckeeper.conf |
|||
|
|||
etckeeper init |
|||
|
@ -0,0 +1,23 @@ |
|||
#!/bin/bash |
|||
|
|||
set -eux |
|||
|
|||
## |
|||
## kal-scripts |
|||
## |
|||
|
|||
|
|||
if ! [ -e /etc/apt/sources.list.d/kalysto.org.list ]; then |
|||
cat <<EOF > /etc/apt/sources.list.d/kalysto.org.list |
|||
|
|||
## vlab's shell libraries |
|||
deb http://deb.kalysto.org no-dist kal-alpha kal-beta kal-main |
|||
|
|||
EOF |
|||
|
|||
## Update only this repo: |
|||
apt-get update -o Dir::Etc::sourcelist="sources.list.d/kalysto.org.list" \ |
|||
-o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0" |
|||
fi |
|||
|
|||
apt-get install -y --force-yes kal-scripts |
@ -0,0 +1,52 @@ |
|||
#!/bin/bash |
|||
|
|||
## Requires kal-script |
|||
|
|||
|
|||
## |
|||
## 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 |
|||
|
@ -0,0 +1,28 @@ |
|||
#!/bin/bash |
|||
|
|||
|
|||
## |
|||
## ssh config |
|||
## |
|||
|
|||
cp src/etc/ssh/lxc_git_access_id_rsa /etc/ssh/lxc_git_access_id_rsa |
|||
chmod 0600 /etc/ssh/lxc_git_access_id_rsa |
|||
|
|||
SSH_CONFIG_DIR=~/.ssh |
|||
|
|||
mkdir -p "$SSH_CONFIG_DIR" |
|||
|
|||
if ! grep '^Host 0k-ro' "$SSH_CONFIG_DIR"/config >/dev/null 2>&1; then |
|||
cat <<EOF >> "$SSH_CONFIG_DIR"/config |
|||
|
|||
Host 0k-ro |
|||
Hostname git.0k.io |
|||
Port 10022 |
|||
User lxc-user |
|||
IdentityFile /etc/ssh/lxc_git_access_id_rsa |
|||
UserKnownHostsFile /dev/null |
|||
StrictHostKeyChecking no |
|||
|
|||
EOF |
|||
|
|||
fi |
@ -0,0 +1,20 @@ |
|||
#!/bin/bash |
|||
|
|||
set -eux # -x for verbose logging to juju debug-log |
|||
|
|||
|
|||
## 0k git remote path |
|||
GIT_0K_BASE=${GIT_0K_BASE:-"0k-ro:/var/git"} |
|||
|
|||
## 0k git remote options |
|||
GIT_0K_CLONE_OPTIONS=${GIT_0K_CLONE_OPTIONS:-""} |
|||
|
|||
|
|||
## |
|||
## install git sub |
|||
## |
|||
|
|||
mkdir -p /opt/apps && |
|||
cd /opt/apps && |
|||
git clone $GIT_0K_CLONE_OPTIONS "$GIT_0K_BASE"/0k/git-sub && |
|||
ln -sf /opt/apps/git-sub/bin/git-sub /usr/lib/git-core/ |
@ -0,0 +1,93 @@ |
|||
#!/bin/bash |
|||
|
|||
## |
|||
## btrfs install |
|||
## |
|||
|
|||
#BTRFS_DEVICE= |
|||
BTRFS_MOUNT_ROOT=${BTRFS_MOUNT_ROOT:-"/mnt/btrfs-root"} |
|||
if [ -z "$BTRFS_DEVICE" ]; then |
|||
echo "You must set a BTRFS_DEVICE environment variable prior to executing this hook." |
|||
exit 1 |
|||
fi |
|||
|
|||
apt-get install -y btrfs-tools |
|||
|
|||
if [ "$FORCE" != "yes" ]; then |
|||
echo "the following is dangerous code. Please execute with FORCE=yes." |
|||
echo "it DELETES directory /var/lib/docker if you have one." |
|||
exit 1 |
|||
fi |
|||
|
|||
## "$BTRFS_DEVICE" device should not be mounted |
|||
if mount | egrep ^"$BTRFS_DEVICE\s+" >/dev/null 2>&1; then |
|||
umount "$BTRFS_DEVICE" || { |
|||
echo "Can't umount $BTRFS_DEVICE. Aborting script." |
|||
exit 1 |
|||
} |
|||
echo "Unmounted $BTRFS_DEVICE." |
|||
fi |
|||
|
|||
|
|||
if egrep ^"$BTRFS_DEVICE\s+" /etc/fstab >/dev/null 2>&1; then |
|||
sed -r -i "\%^$BTRFS_DEVICE\s+%d" /etc/fstab || { |
|||
echo "Couldn't remove device $BTRFS_DEVICE from fstab." |
|||
exit 1 |
|||
} |
|||
echo "Removed device $BTRFS_DEVICE from fstab." |
|||
fi |
|||
|
|||
|
|||
## Format the device and add entry in fstab |
|||
|
|||
mkfs.btrfs -f "$BTRFS_DEVICE" |
|||
|
|||
## No need of UID it seems: |
|||
# UUID="$(blkid -s UUID $BTRFS_DEVICE -o value)" |
|||
# echo "UUID=$UUID $BTRFS_MOUNT_ROOT btrfs defaults,relatime,compress=lzo,space_cache,auto 0 0" >> /etc/fstab |
|||
echo "$BTRFS_DEVICE $BTRFS_MOUNT_ROOT btrfs defaults,relatime,compress=lzo,space_cache,auto 0 0" >> /etc/fstab |
|||
|
|||
|
|||
## Mount point and mount device |
|||
|
|||
mkdir "$BTRFS_MOUNT_ROOT" -p |
|||
mount "$BTRFS_MOUNT_ROOT" |
|||
|
|||
|
|||
if [ -d /var/lib/docker ] ; then |
|||
RESTART_DOCKER=yes |
|||
service docker stop |
|||
## XXXvlab: moving doesn't work and is not desirable, as we want docker |
|||
## to setup and detect new underlying btrfs system. |
|||
# mv "/var/lib/docker/"* "$BTRFS_MOUNT_ROOT/var/lib/docker" |
|||
rm -rf /var/lib/docker/* |
|||
fi |
|||
|
|||
|
|||
## Build subvolume structure |
|||
|
|||
for d in /home /var{/{lib,cache,backups}/lxc,/lib/docker} \ |
|||
/var/backups/snapshot \ |
|||
/srv/{lxc,docker}-datastore{,/config,/data}; do |
|||
mkdir -p "$(dirname "$BTRFS_MOUNT_ROOT$d")" ## creates parent directory of subvolume |
|||
btrfs subvolume create "$BTRFS_MOUNT_ROOT$d" |
|||
mkdir -p "$d" |
|||
|
|||
binds=$(cat /etc/fstab | egrep '\s+none\s+' | grep bind | grep -v '^\s+#' | sed -r 's/^\s*([^ ]+).*$/\1/g') |
|||
for b in $binds; do |
|||
if [[ "$BTRFS_MOUNT_ROOT$d/" == "$b/"* ]]; then |
|||
echo "Directory '$d' is already available via bind '$b'." |
|||
continue 2 |
|||
fi |
|||
done |
|||
|
|||
## Add bind to /etc/fstab |
|||
echo "$BTRFS_MOUNT_ROOT$d $d none bind,defaults,auto 0 0" >> /etc/fstab |
|||
done |
|||
|
|||
|
|||
## Mount all binds |
|||
|
|||
mount -a |
|||
|
|||
[ -z "$RESTART_DOCKER" ] || service docker start |
@ -0,0 +1,8 @@ |
|||
#!/bin/bash |
|||
|
|||
apt-get install lxc -y --force-yes </dev/null |
|||
|
|||
## required to access the created lxc ! |
|||
if ! [ -e ~/.ssh/id_rsa ]; then |
|||
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa -q |
|||
fi |
@ -0,0 +1,69 @@ |
|||
#!/bin/bash |
|||
|
|||
|
|||
|
|||
## 0k git remote path |
|||
GIT_0K_BASE=${GIT_0K_BASE:-"0k-ro:/var/git"} |
|||
|
|||
## 0k git remote options |
|||
GIT_0K_CLONE_OPTIONS=${GIT_0K_CLONE_OPTIONS:-""} |
|||
|
|||
|
|||
## |
|||
## Install 0k-manage |
|||
## |
|||
|
|||
mkdir -p /opt/apps |
|||
( |
|||
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/prod/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-charms && |
|||
git checkout master |
|||
fi |
|||
|
|||
if ! [ -d "/srv/charm-store" ]; then |
|||
mkdir -p /srv/charm-store && |
|||
find /opt/apps/0k-charms -type d -exec /usr/bin/test -e {}/metadata.yml \ |
|||
-o -e {}/metadata.yaml \; -print | while read f; do |
|||
ln -sf "$f" /srv/charm-store/ |
|||
done |
|||
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/ && |
|||
[ -d /usr/lib/lxc/templates ] && { |
|||
ln -sf /opt/apps/lxc-scripts/usr/lib/lxc/templates/lxc-0k-ubuntu-cloud /usr/lib/lxc/templates/ |
|||
echo TEMPLATE_PATH=/usr/lib/lxc/templates >> /etc/default/lxc |
|||
} |
|||
[ -d /usr/share/lxc/templates ] && { |
|||
ln -sf /opt/apps/lxc-scripts/usr/lib/lxc/templates/lxc-0k-ubuntu-cloud /usr/share/lxc/templates |
|||
echo TEMPLATE_PATH=/usr/share/lxc/templates >> /etc/default/lxc |
|||
} |
|||
fi |
|||
) |
@ -0,0 +1,111 @@ |
|||
#!/bin/bash |
|||
|
|||
|
|||
[ "$LXC_NETWORK" ] || { |
|||
echo "You must set \$LXC_NETWORK (to something like 172.160.0 ) before using this script." |
|||
exit 1 |
|||
} |
|||
|
|||
HOST_EXTERNAL_DEVICE=${HOST_EXTERNAL_DEVICE:-eth0} |
|||
|
|||
apt-get install -y bind9 dnsmasq |
|||
|
|||
echo HOST_EXTERNAL_DEVICE="$HOST_EXTERNAL_DEVICE" >> /etc/default/lxc |
|||
sed -ri "s%10\.0\.3\.%$LXC_NETWORK.%g;s%^#LXC_DHCP_CONFILE=%LXC_DHCP_CONFILE=%g" /etc/default/lxc-net |
|||
|
|||
LXC_ADDR=$(. /etc/default/lxc && echo "$LXC_ADDR") |
|||
if [ -z "$LXC_ADDR" ]; then |
|||
LXC_ADDR=$(. <(cat /usr/lib/x86_64-linux-gnu/lxc/lxc-net | grep ^LXC_ADDR | head -n 1) && echo "$LXC_ADDR") |
|||
fi |
|||
|
|||
HOST_IP=$(. /etc/default/lxc && ifip "$HOST_EXTERNAL_DEVICE") |
|||
|
|||
echo " |
|||
server=$LXC_ADDR |
|||
interface=lo |
|||
no-negcache |
|||
log-queries |
|||
log-facility=/var/log/dnsmasq.log |
|||
" >> /etc/dnsmasq.conf |
|||
|
|||
echo " |
|||
server=${HOST_IP} |
|||
log-queries |
|||
no-negcache |
|||
log-facility=/var/log/lxc-dnsmasq.log |
|||
" >> /etc/lxc/dnsmasq.conf |
|||
|
|||
( |
|||
cp "src/etc/bind/named.conf.options" "/etc/bind/named.conf.options" && |
|||
sed -ri "s/%%EXTERNAL_IP%%/$HOST_IP/g" "/etc/bind/named.conf.options" |
|||
) |
|||
## XXXvlab: Maybe we could change this in the service start/stop of the named daemon |
|||
|
|||
mkdir /var/log/named -p && |
|||
chown bind:bind /var/log/named |
|||
|
|||
/etc/init.d/bind9 restart |
|||
/etc/init.d/dnsmasq restart |
|||
service lxc restart |
|||
service lxc-net restart ## had to 'brctl delbr lxcbr0' myself |
|||
|
|||
cp /etc/resolv.conf{,.orig} |
|||
cat <<EOF > /etc/resolv.conf |
|||
nameserver 127.0.0.1 |
|||
#domain . ## didn't work on 12.04 |
|||
search localdomain ## imperfect, we don't want to search www.localdomain |
|||
EOF |
|||
|
|||
## |
|||
## Logrotate for dnsmasq and named |
|||
## |
|||
|
|||
cat <<EOF > /etc/logrotate.d/dnsmasq |
|||
|
|||
/var/log/dnsmasq.log { |
|||
missingok |
|||
copytruncate |
|||
notifempty |
|||
compress |
|||
|
|||
postrotate |
|||
kill -s SIGUSR2 "\$(cat /var/run/dnsmasq/dnsmasq.pid)" |
|||
endscript |
|||
} |
|||
|
|||
EOF |
|||
|
|||
|
|||
cat <<EOF > /etc/logrotate.d/lxc-dnsmasq |
|||
|
|||
/var/log/lxc-dnsmasq.log { |
|||
missingok |
|||
copytruncate |
|||
notifempty |
|||
compress |
|||
|
|||
postrotate |
|||
kill -s SIGUSR2 "\$(cat /var/run/lxc/dnsmasq.pid)" |
|||
endscript |
|||
} |
|||
|
|||
EOF |
|||
|
|||
cat <<EOF > /etc/logrotate.d/named |
|||
/var/log/named/*.log { |
|||
missingok |
|||
copytruncate |
|||
notifempty |
|||
compress |
|||
} |
|||
EOF |
|||
|
|||
## |
|||
## Testing |
|||
## |
|||
|
|||
# lsof -i4tcp:53 -n |
|||
# netstat -ltnp | grep :53 |
|||
# ping HOST |
|||
# host HOST |
|||
# tcpdump |
@ -0,0 +1,73 @@ |
|||
#!/bin/bash |
|||
|
|||
## |
|||
## shorewall |
|||
## |
|||
|
|||
apt-get install -y shorewall |
|||
|
|||
cat <<EOF > /etc/shorewall/zones |
|||
fw firewall |
|||
net ipv4 |
|||
lan ipv4 |
|||
EOF |
|||
|
|||
cat <<EOF > /etc/shorewall/interfaces |
|||
#ZONE INTERFACE BROADCAST OPTIONS |
|||
net eth0 |
|||
## Uncomment to enable vpn setup |
|||
#vpn tun0 detect |
|||
lan lxcbr0 - routeback |
|||
EOF |
|||
|
|||
cat <<EOF > /etc/shorewall/policy |
|||
#SOURCE DEST RULE LOG |
|||
|
|||
fw all ACCEPT |
|||
lan all ACCEPT |
|||
net all DROP info |
|||
all all DROP info |
|||
EOF |
|||
|
|||
cat <<EOF > /etc/shorewall/rules |
|||
SSH/ACCEPT net fw |
|||
Ping/ACCEPT net fw |
|||
|
|||
|
|||
BEGIN SHELL |
|||
|
|||
host_ip="\$(/sbin/ifconfig eth0 2> /dev/null | sed "s/^.*inet ad\+r://g" | grep ^[0-9] | sed "s/ .*$//g")" |
|||
|
|||
for name in \$(lxc-ls-running); do |
|||
ip=\$(dig +short A "\$name") |
|||
[ -e "/var/lib/lxc/\$name/shorewall" ] && |
|||
cat /var/lib/lxc/\$name/shorewall | sed -r "s/%%HOST_INTERNET_IP%%/\$host_ip/g" \ |
|||
| sed -r "s/%%IP%%/\$ip/g" |
|||
|
|||
done |
|||
|
|||
true |
|||
|
|||
END SHELL |
|||
|
|||
EOF |
|||
|
|||
cat <<EOF > /etc/shorewall/masq |
|||
eth0 lxcbr0 |
|||
EOF |
|||
|
|||
cat <<EOF > /etc/shorewall/start |
|||
## correct a bug that prevent DHCP packet to be correctly sent between |
|||
## LXC, preventing them to receive an IP. |
|||
|
|||
. /etc/default/lxc |
|||
|
|||
if [ -d "/sys/class/net/\$LXC_BRIDGE" -a "\$(cat /sys/class/net/\$LXC_BRIDGE/operstate)" == "up" ]; then |
|||
source_file=/etc/init/lxc-net.conf |
|||
code=\$(egrep '^\s+iptables.*\s+-j\s+' /etc/init/lxc-net.conf | grep -v '\-D' | sed -r 's/^\s+[^-]+/run_iptables /g') |
|||
echo "Adding LXC rules:" |
|||
echo "\$code" |
|||
eval "\$code" |
|||
fi |
|||
|
|||
EOF |
Write
Preview
Loading…
Cancel
Save
Reference in new issue