Jak vytvořit šablonu od nuly

Následující text vysvětluje postup vytváření nových Linuxových šablon pro Virtualmaster. Aktuálně jsou podporované distribuce Debian, Ubuntu, CentOS a Fedora.

Příprava

Vytvořte virtuální server s dostatečnými parametry (např. 2G RAM, 4G HDD). Parametry serveru je možné snížit před samotným vytvořením šablony. Při vytváření serveru můžete zvolit jakoukoliv šablonu, posléze bude přepsána.

Po úspěšném vytvoření a nastartování virtuálního serveru nabootujte do záchranného režimu (Boot rescue tlačítko v detailu serveru).

Nový souborový systém

Smažte originální systém a připojte prázdný kořenový systém souborů:

mkfs.ext3 -L root /dev/xvda
mkdir -p /mnt/root
mount /dev/xvda /mnt/root

Požadované softwarové nástroje

Pokud jste na lenny (podívejte se do /etc/apt/sources.list), možná by jste měli použít novější repozitáře pro debootstrap, protože natty neni zahrnutý s debootstrap ve verzi lenny.

echo "deb http://ftp.sh.cvut.cz/MIRRORS/debian/ stable main" >/etc/apt/sources.list
apt-get update
apt-get --force-yes -y install debian-keyring debian-archive-keyring

Instalace potřebných nástrojů. Skript debootstrap je pro distribuce založené na Debianu a yum manažer balíčků je pro distribuce na bázi RedHatu.

apt-get update
apt-get --force-yes -y install debootstrap yum

Systémy založené na Debianu

Debian Squeeze (6.0)

Bootstrap base Debian system (squeeze release):

debootstrap squeeze /mnt/root http://ftp.sh.cvut.cz/MIRRORS/debian

Opravte apt zdroje:

cat >/mnt/root/etc/apt/sources.list <<EOF
deb http://ftp.sh.cvut.cz/MIRRORS/debian squeeze main contrib non-free
deb http://security.debian.org/ squeeze/updates main contrib non-free
EOF

Debian Testing

Bootstrap base Debian system (testing rolling release):

debootstrap testing /mnt/root http://ftp.sh.cvut.cz/MIRRORS/debian

Opravte apt zdroje:

cat >/mnt/root/etc/apt/sources.list <<EOF
deb http://ftp.sh.cvut.cz/MIRRORS/debian testing main contrib non-free
deb http://security.debian.org/ testing/updates main contrib non-free
EOF

Ubuntu Natty (11.04)

Bootstrap base Ubuntu system (natty release):

debootstrap natty /mnt/root http://ftp.sh.cvut.cz/MIRRORS/ubuntu

Opravte apt zdroje:

cat >/mnt/root/etc/apt/sources.list <<EOF
deb http://ftp.sh.cvut.cz/MIRRORS/ubuntu natty main universe multiverse
deb http://ftp.sh.cvut.cz/MIRRORS/ubuntu natty-updates main universe multiverse
EOF

Vstup do Chroot

Příprava instalace pro chrooting:

mount -t proc proc /mnt/root/proc
mount -t sysfs sysfs /mnt/root/sys
mount --bind /dev /mnt/root/dev
mount -t tmpfs tmpfs /mnt/root/dev/shm
mount -t devpts devpts /mnt/root/dev/pts

Zkopírujte balíček firstboot do cílového systému:

cp virtualmaster-firstboot_*.deb /mnt/root/root/

Vstupte do instalace:

chroot /mnt/root
cd

Vytvořte tabulku souborového systému:

cat >/etc/fstab <<EOF
/dev/xvda  /     ext3  relatime  1  1
/dev/xvdb  none  swap  sw        0  0
EOF

Ujistěte se, že nepoběží žádné služby.

echo 'exit 0' >invoke-rc.d
chmod +x invoke-rc.d
export PATH="${PWD}:${PATH}"

Proveďte upgrade systému, aby jste získaly poslední aktualizace:

apt-get update
apt-get -y dist-upgrade

Úpravy pro Debian

Nainstalujte lokalizace:

apt-get -y install locales

Zkompilujte americkou angličtinu, doporučený jazyk:

sed 's/# en_US.UTF-8/en_US.UTF-8/' -i /etc/locale.gen
locale-gen%p Install the kernel:
apt-get -y install linux-image-xen-`dpkg --print-architecture`

Nainstalujte bootloader:

apt-get -y install grub-legacy

Vygenerujte konfiguraci bootloader:

mkdir -p /boot/grub
update-grub 0

Opravte konfiguraci konzole:

echo "T0:2345:respawn:/sbin/getty -L hvc0 38400 linux" >>/etc/inittab
sed 's/.* tty[2-6]$/#\0/' -i /etc/inittab

Úpravy pro Ubuntu

Zkompilujte americkou angličtinu, doporučený jazyk:

locale-gen en_US.UTF-8

Nainstalujte kernel:

apt-get -y install linux-image-virtual

Nainstalujte bootloader:

mkdir -p /boot/grub
apt-get -y install grub-legacy-ec2

Nastartujte getty při virtuální konzoli:

cat >/etc/init/hvc0.conf <<EOF
# hvc0 - getty for Xen
start on stopped rc RUNLEVEL=[2345]
stop on runlevel [!2345]
respawn
exec /sbin/getty -L hvc0 38400 linux
EOF

Zakažte getty při tty[2-6]:

for f in /etc/init/tty[2-6].conf; do
  mv -v "${f}"{,.off}
done

Běžné úpravy

Nainstalujte nějaké základní nástroje a ssh:

apt-get -y install less vim psmisc ssh ethtool mc sudo kbd

Nyní nainstalujte firstboot balíček.

dpkg -i virtualmaster-firstboot_*.deb
rm -f virtualmaster-firstboot_*.deb

Připojte firstboot do bootovacího procesu jako nový inicializér:

sed 's#\<root=#init=/sbin/init.vmin root=#' -i /boot/grub/menu.lst

Set local time zone:

ln -sf ../usr/share/zoneinfo/Europe/Prague /etc/localtime

Umožněte použití sudo bez hesla:

chmod +w /etc/sudoers
sed 's,#* *%sudo.*,%sudo ALL=(ALL) NOPASSWD: ALL,' -i /etc/sudoers
chmod -w /etc/sudoers

Zruště automatickou konfiguraci IPv6. Naši zákazníci sdílí L2 síť a mohli by způsobit problémy nastartováním radvd, pokud všechny virtuální servery nemají tuto možnost vypnutou.

cat >>/etc/sysctl.conf <<EOF

# Do not listen to router advertisements.
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.eth0.autoconf = 0
EOF

Zahoďte veškerou konfiguraci, ssh klíče a smažte cachované balíčky:

echo -n     >/etc/network/interfaces
echo -n     >/etc/resolv.conf
echo image  >/etc/hostname
echo -n     >/etc/hosts
rm -f /etc/ssh/*key* /etc/virtualmaster.cfg*
rm -f /root/invoke-rc.d
apt-get clean

Na závěr, opusťte chroot a odstraňte historii příkazů:

exit
rm -f /mnt/root/root/.bash_history

Systémy založené na RedHatu

Vytvořte tabulku souborového systému:

mkdir -p /mnt/root/etc
cat >/mnt/root/etc/fstab <<EOF
/dev/xvda  /         ext3    relatime        1  1
/dev/xvdb  none      swap    sw              0  0
tmpfs      /dev/shm  tmpfs   defaults        0  0
devpts     /dev/pts  devpts  gid=5,mode=620  0  0
EOF

CentOS 6

Stáhněte distribuci CentOS 6 RPM a nainstalujte ji do cílového systému souboru:

wget 'ftp://ftp.sh.cvut.cz/MIRRORS/centos/6.0/os/x86_64/Packages/centos-release-*.rpm'
rpm --root /mnt/root -ivh centos-release-*.rpm
rpm --root /mnt/root --import /mnt/root/etc/pki/rpm-gpg/*

Fedora 15

Stáhněte distribuci Fedora 15 RPM a nainstalujte ji do cílového systému souboru:

wget 'ftp://ftp.sh.cvut.cz/MIRRORS/fedora/linux/releases/15/Everything/x86_64/os/Packages/fedora-release-[0-9]*.rpm'
wget 'ftp://ftp.sh.cvut.cz/MIRRORS/fedora/linux/releases/15/Everything/x86_64/os/Packages/fedora-release-rawhide-[0-9]*.rpm'
rpm --root /mnt/root -ivh fedora-release-*.rpm

Společné instrukce

Nyní použijte yum pro instalaci základních komponent systému:

yum -y --installroot=/mnt/root --nogpgcheck install \
yum kernel grub vim /usr/bin/passwd /usr/sbin/sshd \
cronie e2fsprogs mc logrotate sudo

Nainstalujte náš firstboot balíček:

yum -y --installroot=/mnt/root --nogpgcheck localinstall virtualmaster-firstboot-*.rpm

Proveďte chroot do budoucího systému:

chroot /mnt/root
cd

Opravte RPM databázi:

db_dump ~/.rpmdb/Packages | db_load /var/lib/rpm/Packages
rpm --rebuilddb
rm -rf ~/.rpmdb

Povolte sudo:

chmod +w /etc/sudoers
sed 's,#* *\(%wheel.*NOPASSWD\),\1,' -i /etc/sudoers
chmod -w /etc/sudoers

Configure the bootloader:

kernel=$(echo /boot/vmlinuz-*)
initrd=$(echo /boot/initramfs-*)
os="$(sed 's/ release.*//' /etc/redhat-release)"
cat >/boot/grub/menu.lst <<EOF
default=0
timeout=1
title ${os} (${kernel#*-})
  root (hd0,0)
  kernel ${kernel} init=/sbin/init.vmin root=/dev/xvda ro console=hvc0
  initrd ${initrd}
EOF
ln -sf /boot/grub/grub.conf /etc/grub.conf
ln -f /boot/grub/menu.lst /boot/grub/grub.conf

Povolte základní služby:

chkconfig sshd on
chkconfig crond on
chkconfig network on

Zakažte tty[2-6]:

sed 's#^\(ACTIVE_CONSOLES\)=.*#\1=/dev/tty1#' -i /etc/sysconfig/init

Zahoďte veškerou konfiguraci a ssh klíče:

rm -f /etc/sysconfig/network-scripts/ifcfg-eth*
rm -f /etc/sysconfig/network
rm -f /etc/ssh/*key* /etc/virtualmaster.cfg*
echo -n >/etc/resolv.conf
echo -n >/etc/hosts

Nastavte root:

echo '. /etc/bashrc' >~/.bashrc
echo '. ~/.bashrc' >~/.bash_profile

Opusťte chroot:

exit
rm -f /mnt/root/root/.bash_history

Na závěr

Vypněte záchranný systém pomocí:

poweroff

Po návratu do webové aplikace Virtualmasteru otevřete konzoli a potvrďte vypnutí. Poté zmenšete virtuální server na minimum (operační pamět i pevný disk) a vytvořte šablonu.