Se propone crear un laboratorio local donde experimentar y desarrollar el sistema previo a su publicacion en el proveedor. Para esto se utilizara una PC con un sistema operativo Debian, lvm y debootstrap, una vez terminada la instalacion, el nuevo volumen sera booteable y solo contendra las herramientas necesarias para el ambiente.
El primer paso es preparar un nuevo filesystem y popularlo con un sistema base utilizando debootstrap:
lvcreate -n xen_docker -L 20G /dev/system
mkfs.ext4 /dev/system/xen_docker
mount /dev/system/xen_docker /mnt
debootstrap sid /mnt http://ftp.debian.org/debian
Una vez completado, cambiamos el root al nuevo sistema y contamos con las utilidades clasicas para setear un nuevo password e instalar nuevos paquetes:
chroot /mnt
passwd
apt-get update
apt-get install lvm2 xen-linux-system-amd64 openssh-server nfs-kernel-server
Configuramos fstab:
echo "proc /proc proc defaults 0 0
/dev/mapper/system-xen_docker / ext4 errors=remount-ro 0 1" > /etc/fstab
Configuramos la red en systemd, es importante mantener la misma MAC que la placa real para seguir teniendo la misma IP si usamos dhcp.
echo "[NetDev]
Name=xenbr0
Kind=bridge
" > /etc/systemd/network/xenbr0.netdev
echo "[Match]
Name=en*
[Network]
Bridge=xenbr0
IPv6AcceptRouterAdvertisements=false
" > /etc/systemd/network/eth.network
echo "[Match]
Name=xenbr0
[Network]
DHCP=ipv4
Address=192.168.69.1/24
IPForward=1
[Link]
MACAddress=e0:cb:2e:df:04:7e
" > /etc/systemd/network/xenbr0.network
systemctl enable systemd-networkd
Creamos un nuevo network filesystem para compartir entre los nodos docker:
mkdir -p /DOCKER/images
echo "/DOCKER/images *(ro,no_subtree_check)" > /etc/exports
Dejamos el nuevo sistema:
exit
A este punto el nuevo sistema esta listo para correr en la PC, solo hay que recordar generar una nueva entrada en el grub apuntandole.
dd if=/dev/zero of=/vm00.img bs=1024k seek=4096 count=0
mkfs.ext4 /vm00.img
echo "kernel = '/boot/vmlinuz-4.8.0-2-amd64'
ramdisk = '/boot/initrd.img-4.8.0-2-amd64'
memory = 512
name = 'vm00'
vif = [ 'bridge=xenbr0' ]
disk = ['tap:aio:/vm00.img,xvda1,w']
root = '/dev/xvda1 ro'" > /vm00.cfg
mount /vm00.img /mnt
debootstrap sid /mnt http://ftp.debian.org/debian
chroot /mnt
passwd
apt-get install linux-image-amd64 openssh-server nfs-common apt-transport-https ca-certificates gnupg2 dirmngr
apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
echo "deb https://apt.dockerproject.org/repo debian-stretch main" > /etc/apt/sources.list.d/docker.list
apt-get update
apt-get install docker-engine
echo "/dev/xvda1 / ext4 defaults 1 1
none /proc proc defaults 0 0
$DOM0_IP:/DOCKER/images /DOCKER/images nfs defaults 0 0
" > /etc/fstab
echo "$HOSTNAME" > /etc/hostname
echo "$DOM0_IP $DOM0_NAME
$IP $HOSTNAME
" >> /etc/hosts
echo "[Match]
Name=eth0
[Network]
Address=$IP/24
Gateway=$DOM0_IP
" > /etc/systemd/network/eth0.network
systemctl enable systemd-network
exit