Шаблоны (DSmanager)
Материал из ISPWiki
Содержание |
Шаблоны для RecoveryMode
FreeBSD
Во FreeBSD 7 поддержка загрузки через NFS есть в GENERIC, что значительно упрощает весь процесс.
Компиляция PXE для работы с TFTP
Берем из /boot/pxeboot
Загрузчик можно собрать в любом месте, он не привязан к версии FreeBSD.
- cd /usr/src/sys/boot
- make clean depend
- make -DLOADER_TFTP_SUPPORT=yes
- Ищем результат в i386/pxeldr/
Создаем шаблон для загрузки через pxe
- Через sysinstall ставим в отдельный каталог FreeBSD (base и kernel).
- Удаляем файлы /boot/GENERIC/*.symbols (весят они слишком много).
- В файле /boot/loader.conf прописываем
kernel="GENERIC" autoboot_delay="1"
- В /etc/ssh/sshd_config прописываем
PermitRootLogin yes PasswordAuthentication yes
- Создаем пустой /etc/fstab.
- Создаем каталог /DS/mnt.
- Заливаем /etc/rc.local (скрипт для удаленной установки ОС). В случае recovery mode он будет удален.
- Заливаем /Clone.sh (скрипт для создания временных копий). Используется в recovery mode.
- Копируем /boot/pxeboot в /pxe
В принципе, на этом шаге можно и закончить. Следующие действия необходимы для отключения избыточной функциональности, чтобы не наблюдать ненужные ошибки в консоли.
- В /etc/ttys убираем все не сетевые консоли (оставляем только Pseudo terminals).
- В /etc/rc.conf прописываем следующие строки:
sendmail_enable="NONE" sendmail_submit_enable="NO" cron_enable="NO" syslogd_enable="NO"
Одним скриптом:
#!/bin/sh
FOLDER=${1:-FreeBSD}
if [ -d $FOLDER ]; then
echo "Some data already exists in this ($FOLDER) folder"
exit 1
fi
mkdir $FOLDER
/usr/sbin/sysinstall
rm $FOLDER/boot/GENERIC/*.symbols
grep nameserver /etc/resolv.conf > $FOLDER/etc/resolv.conf
echo "emptyserverpassword" | pw -V $FOLDER/etc usermod root -h0
echo 'kernel="GENERIC"' > $FOLDER/boot/loader.conf
echo 'autoboot_delay="1"' >> $FOLDER/boot/loader.conf
echo 'PermitRootLogin yes' >> $FOLDER/etc/ssh/sshd_config
echo 'PasswordAuthentication yes' >> $FOLDER/etc/ssh/sshd_config
echo 'sendmail_enable="NONE"' > $FOLDER/etc/rc.conf
echo 'sendmail_submit_enable="NO"' >> $FOLDER/etc/rc.conf
echo 'cron_enable="NO"' >> $FOLDER/etc/rc.conf
echo 'syslogd_enable="NO"' >> $FOLDER/etc/rc.conf
touch $FOLDER/etc/fstab
grep network $FOLDER/etc/ttys > /tmp/ttys
cat /tmp/ttys > $FOLDER/etc/ttys
Сделать копию этого шаблона для RecoveryMode
- Разрешить запуск SSH в /etc/rc.conf
sshd_enable="YES"
- Чистим лишние файлы
rm -rf /tmp/* rm -rf /var/log/* rm -f /var/run/* rm /root/.bash_history
Одним скриптом:
#!/bin/sh
TO=${1:-Error}
FROM=${2:-FreeBSD}
if [ $TO = "Error" ]; then
echo "You must specify folder where your new linux root will be created"
exit 1
fi
if [ -d $TO ]; then
echo "Some data already exists in this ($TO) folder"
exit 1
fi
if [ ! -d $FROM ]; then
echo "Folder with source data ($FROM) not found"
exit 1
fi
mkdir $TO
tar -c -f- -C $FROM . | tar -x -f- -p -C $TO
echo 'sshd_enable="YES"' >> $TO/etc/rc.conf
rm -f $TO/var/log/*
rm -f $TO/var/run/*
rm -f $TO/tmp/*
# в принципе этих файлов быть не должно.
# В отличие от Linux, загружаться с шаблоном FreeBSD не надо.
rm -f $TO/etc/ssh/ssh_host_*
rm -f $TO/root/.bash_history
Linux
Создаем шаблон для загрузки через pxe
- Качаем дисковый шаблон от OpenVZ ftp://download.openvz.org/template/precreated/contrib/centos-5-i386-minimal.tar.gz.
- Распаковываем его
- Устанавливаем пароль для root
- Копируем сервера имен из /etc/resolv.conf
- Запускаем сервер, используя этот шаблон в качестве рутового раздела
- Устанавливаем yum
rpm -ivh http://ftp.belnet.be/packages/centos/5/os/i386/CentOS/expat-1.95.8-8.2.1.i386.rpm rpm -ivh http://ftp.belnet.be/packages/centos/5/os/i386/CentOS/python-elementtree-1.2.6-5.i386.rpm rpm -ivh http://ftp.belnet.be/packages/centos/5/os/i386/CentOS/python-iniparse-0.2.3-4.el5.noarch.rpm rpm -ivh http://ftp.belnet.be/packages/centos/5/os/i386/CentOS/python-sqlite-1.1.7-1.2.1.i386.rpm rpm --nodeps -ivh http://ftp.belnet.be/packages/centos/5/os/i386/CentOS/rpm-python-4.4.2-48.el5.i386.rpm rpm -ivh http://ftp.belnet.be/packages/centos/5/os/i386/CentOS/m2crypto-0.16-6.el5.2.i386.rpm rpm -ivh http://ftp.belnet.be/packages/centos/5/os/i386/CentOS/python-urlgrabber-3.1.0-2.noarch.rpm rpm -ivh http://ftp.belnet.be/packages/centos/5/os/i386/CentOS/libxml2-2.6.26-2.1.2.1.i386.rpm rpm -ivh http://ftp.belnet.be/packages/centos/5/os/i386/CentOS/yum-metadata-parser-1.1.2-2.el5.i386.rpm rpm -ivh http://ftp.belnet.be/packages/centos/5/os/i386/CentOS/yum-3.2.8-9.el5.centos.1.noarch.rpm
- Устанавливаем nfs-utils
yum install nfs-utils
- Создаем файл /etc/sysconfig/network (без него portmap работать не будет, а без него, в свою очередь, nfs клиент не работает)
- Устанавливаем wget
yum install wget
- Установить grub
yum install grub
- Выключаем сервер
- Отключаем лишние сервисы
rm -f S18rpcidmapd S19rpcgssd K69rpcsvcgssd S08iptables K20nfs S14nfslock # Здесь мы ssh отключаем, для установки ОС он не нужен. # В RecoveryMode мы его включаем rm -f S55sshd rm -f /etc/ssh/ssh_host_*
- Заметаем следы
rm $FOLDER/root/.bash_history $FOLDER/root/.bash_logout
Одним скриптом: (его надо будет выполнить дважды)
#!/bin/sh
FOLDER=${1:-Linux}
DISTR=${2:-centos-5-i386-minimal.tar.gz}
if [ ! -d $FOLDER ]; then
if [ ! -f $DISTR ]; then
echo "Distribution $DISTR not found"
exit 1
fi
mkdir $FOLDER
tar xfz $DISTR -C $FOLDER
grep nameserver /etc/resolv.conf > $FOLDER/etc/resolv.conf
grep -v '^root:' $FOLDER/etc/shadow > /tmp/shadow
echo 'root:$1$awFD3$voBR8.XDYTONh61S7PvZC.:14012:0:99999:7:::' > $FOLDER/etc/shadow
cat /tmp/shadow >> $FOLDER/etc/shadow
rm /tmp/shadow
mknod $FOLDER/dev/console c 5 1
chmod 600 $FOLDER/dev/console
mknod $FOLDER/dev/urandom c 1 9
chmod 444 $FOLDER/dev/urandom
touch $FOLDER/etc/sysconfig/network
echo "install yum, nfs-utils, grub and wget !!!"
echo
echo "Start some server with this new image. Login to it with password: emptyserverpassword"
exit 0
else
rm -f $FOLDER/etc/rc3.d/S18rpcidmapd
rm -f $FOLDER/etc/rc3.d/S19rpcgssd
rm -f $FOLDER/etc/rc3.d/K69rpcsvcgssd
rm -f $FOLDER/etc/rc3.d/S08iptables
rm -f $FOLDER/etc/rc3.d/K20nfs
rm -f $FOLDER/etc/rc3.d/S14nfslock
rm -f $FOLDER/etc/rc3.d/S55sshd
echo "SSH access disabled"
rm -f $FOLDER/root/.bash_history $FOLDER/root/.bash_logout
rm -f $FOLDER/etc/ssh/ssh_host_*
fi
Сделать копию этого шаблона для RecoveryMode
#!/bin/sh
TO=${1:-Error}
FROM=${2:-Linux}
if [ $TO = "Error" ]; then
echo "You must specify folder where your new linux root will be created"
exit 1
fi
if [ -d $TO ]; then
echo "Some data already exists in this ($TO) folder"
exit 1
fi
if [ ! -d $FROM ]; then
echo "Folder with source data ($FROM) not found"
exit 1
fi
mkdir $TO
tar -c -f- -C $FROM . | tar -x -f- -p -C $TO
touch $TO/fastboot
rm -f $TO/var/lib/random-seed
rm -f $TO/var/empty/sshd/etc/localtime
rm -f $TO/etc/ssh/ssh_host_*
rm -f $TO/root/.bash_history
rm -f $TO/var/run/utmp
rm -f $TO/var/log/*
ln -s ../init.d/sshd $TO/etc/rc3.d/S55sshd
