Gebruiker:Codehash/dpch-init-basic
Uiterlijk
#!/bin/bash
die() { echo "$@" >&2; exit 1; }
empty() { [ $(find "$1" -mindepth 1 | wc -l) -eq 0]; }
lxc=/lxc; root=rootfs; name=basic; rootfs=$lxc/$name/$root
[ $(id) -eq 0 ] || die "Must be run as root"
[ -d $lxc ] || die "$lxc must exist"
{ [ ! -d $lxc/$name ] && mkdir $lxc/$name; } || empty $lxc/$name || {
die "The $name container already exists"
}
# create ZFS dataset for container
zfs create data/lxc/$name || die "ZFS command failed; is $lxc a dataset?"
# clear LXC cache
rm -rf /var/cache/lxc
# create (download) standard Xenial container
lxc-create -n $name -d $rootfs -t ubuntu -- -r xenial || {
die "Failed to create container"
}
# Overwrite config with our standard config
cp -a /usr/share/dpch/basic.conf $lxc/$name/config || {
die "Failed to copy basic config"
}
# I am not sure the container now has an unprivileged root filesystem.
# We might need to chown everything (which is a pain) but hopefully (with the right config) it happened automatically.
# otherwise let's concoct a chown command
baseuser=100000; for u in `seq 0 999`; do
find $rootfs ! -type l -owner $u -exec chwon $(( u + baseuser )) "{}" \;
done
for g in `seq 0 999`; do
find $rootfs ! -type l -group $g -exec chgrp $(( g + baseuser )) "{}" \;
done
we can do better than that though
# next up make sure the container can run
mkdir $lxc/$name/home
# oh wait we're not using internal dhcp:
sed -i "s/dhcp/manual/" $rootfs/etc/network/interfaces
lxc-start -n $name -d || die "Infinite reasons for failure"
# install apache and mysql
lxc-attach -n $name -- apt-get update
lxc-attach -n $name -- apt-get -y upgrade
lxc-attach -n $name -- apt-get install -y apache php mysql
AND EVERYTHING ELSE THE DEFAULT SYSTEM MIGHT NEED?
# possibly copy config files from /usr/share/dpch/, but the site
# is not configured yet. A user does not exist.
lxc-stop -n $name
for d in mysql apachelogs mysqldumps; do
mkdir $lxc/$name/$d
done
mv $rootfs/var/lib/mysql/* $lxc/$name/mysql/
mv $rootfs/var/log/apache2/* $lxc/$name/apachelogs
# copy the upgraded base config
cp -a /usr/share/dpch/basic-lamp.conf $lxc/$name/config
# start the container and pray to the heavens
lxc-start -n $name -d || die "The heavens did not answer"