Разработчики OpenVZ предлагают [[http://wiki.openvz.org/Download/template/precreated загрузить]] заранее созданные шаблоны контейнеров, но у этих шаблонов есть недостаток - в них присутствует довольно много лишних пакетов, которые не хотелось бы вычищать руками. Помимо этого, в этих шаблонах присутствуют неподписаные пакеты, а так же репозиторий с пакетами-заглушками, цифровая подпись пакетов из которого не проверяется. В общем всё это и заставило сделать свой собственный чистый контейнер с нуля. Далее предлагается скрипт, который в хост-системе на основе centos6 создаёт чистый контейнер с это же самой ОС.Сам скрипт:
#!/bin/bash### exit on errors (in pipes too) and verbose execution
set -o pipefail -e -x
TMPDIR=$(mktemp -d)
VEID=777
DESTDIR=/vz/private/${VEID}
### veid config
cat << _EOF_ > /etc/vz/conf/${VEID}.conf
# This config is only valid for decent VSwap-enabled kernel
# (version 042stab042 or later).
ONBOOT="yes"
# RAM
PHYSPAGES="0:2G"
# Swap
SWAPPAGES="0:0G"
# Disk quota parameters (in form of softlimit:hardlimit)
DISKSPACE="20G:22G"
DISKINODES="200000:220000"
QUOTATIME="0"
# CPU fair scheduler parameter
CPUUNITS="1000"
VE_ROOT="/vz/root/\$VEID"
VE_PRIVATE="/vz/private/\$VEID"
OSTEMPLATE="centos-6-secured-x86_64"
ORIGIN_SAMPLE="basic"
HOSTNAME="localhost"
SEARCHDOMAIN=""
NAMESERVER="8.8.8.8 8.8.4.4"
IP_ADDRESS="10.20.30.40"
CPULIMIT="100"
CPUS="1"
_EOF_
### stop / destroy if exists / recreate
vzctl stop ${VEID}
[[ -d ${DESTDIR} ]] && rm -rf ${DESTDIR}
mkdir -p ${DESTDIR}
mkdir -p /vz/root/${VEID}
### init rpm db
rpm --root ${DESTDIR} --initdb
### download packages for create base directory
yum install -q -y yum-utils
yumdownloader --destdir ${TMPDIR} centos-release centos-release-cr
### install base directory rpms
TO_INSTALL=""
for i in ${TMPDIR}/*.rpm; do
TO_INSTALL="${TO_INSTALL} ${i}"
done
rpm --root ${DESTDIR} -i ${TO_INSTALL}
### Save random seed
touch ${DESTDIR}/var/lib/random-seed
chmod 600 ${DESTDIR}/var/lib/random-seed
dd if=/dev/urandom of=/var/lib/random-seed count=1 bs=512 2>/dev/null
### import centos pubkey
rpm --root ${DESTDIR} --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6### install required rpms
yum --installroot=${DESTDIR} install -q -y postfix filesystem tzdata glibc procps \
coreutils rpm yum yum-utils udev openssh basesystem bash grep MAKEDEV \
openssl gnupg2 logrotate rsyslog screen openssh-server openssh-clients \
info ca-certificates libuuid sed vim-enhanced findutils iproute tmpwatch \
wget curl patch vixie-cron sysstat htop telnet which diffutils rsync \
sudo yum-cron psacct lftp tcpdump numactl git vconfig nc xz bzip2 \
nscd passwd tar### pts only in fstab
cat << _EOF_ > ${DESTDIR}/etc/fstab
none /dev/pts devpts gid=5,mode=620 0 0
_EOF_
chmod 0644 ${DESTDIR}/etc/fstab
mkdir -p ${DESTDIR}/dev/pts### create devices
for INPATH in dev etc/udev/devices; do
/sbin/MAKEDEV -x -d ${DESTDIR}/${INPATH} console core fd full kmem kmsg mem null port \
ptmx {p,t}ty{a,p}{0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f} random \
urandom zero ram{,0,1,disk} std{in,out,err}
done### do not run agetty's
sed -i 's/^ACTIVE_CONSOLES=\(.*\)/#ACTIVE_CONSOLES=\1\nACTIVE_CONSOLES=""/g' ${DESTDIR}/etc/sysconfig/init### run minimum services
SERVICES="(network|crond|sshd|sysstat|snmpd|syslog|psacct|udev-post|nscd)"
chroot ${DESTDIR} "/sbin/chkconfig" "--list" | grep -oP '^\S+' | \
sort | uniq | egrep -vE "${SERVICES}" | xargs -I{} chroot ${DESTDIR} "/sbin/chkconfig" "{}" "off"
chroot ${DESTDIR} "/sbin/chkconfig" "--list" | grep -oP '^\S+' | \
sort | uniq | egrep -E "${SERVICES}" | xargs -I{} chroot ${DESTDIR} "/sbin/chkconfig" "{}" "--level" "2345" "on"### clock/timezone
cat << _EOF_ > ${DESTDIR}/etc/sysconfig/clock
ZONE="Europe/Moscow"
_EOF_
chroot ${DESTDIR} "/usr/sbin/tzdata-update"### make mtab actual every time
chroot ${DESTDIR} 'rm' '-fv' '/etc/mtab'
chroot ${DESTDIR} 'ln' '-s' '/proc/mounts' '/etc/mtab'
### cleanup
rm -rf ${TMPDIR}### set locale to UTF
cat << _EOF_ > ${DESTDIR}/etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
_EOF_
chroot ${DESTDIR} 'localedef' '-c' '-f' 'UTF-8' '-i' 'en_US' '/usr/lib/locale/en_US.utf8'### TODO:
### 1. check ssh keys and delete them
### 2. make template.tar.gzПосле создания контейнера я удаляю ssh host keys и делаю дамп контейнера утилитой vzdump, а затем клонирую контейнеры через vzrestore. При желании можно сделать шаблон самостоятельно, например как написано [[http://openvz.org/Creating_a_CentOS_6_Template здесь]] или [[https://forum.openvz.org/index.php?t=msg&goto=44422 здесь]].
URL: http://pastebin.com/nFa99bNn
Обсуждается: http://www.opennet.me/tips/info/2829.shtml
Вот не понимаю таких статей. Это решение для одного конкретного случая. Зачем его выкладывать на опеннет? Всё равно тот, кто будет решать схожую задачу, либо потратит время на написание своего скрипта с нуля, либо потратит то же время на анализ этого скрипта и его корректировку-доводку под свои требования. В таких вещах велосипедостроение оправдано, а использование чужих велосипедов без доработки рисковано.
Дорогой Ромик, тут статьи на опеннете появляются с перерывами иногда по месяцу. Человек старался и поделился опытом. Скажем спасибо и попросим писать ещё.
Если что, http://altlinux.org/starterkits#server и http://altlinux.org/m-p (эксперименты по созданию контейнеров на базе centos6 тоже проводились, но были в итоге заброшены).
Да это ваще никому не интересно в отличие от сабжа.
А тем временем, в gentoo:
rc_sys="openvz"И всё.
О, опять #!/bin/bash'измы. Ж)
> О, опять #!/bin/bash'измы. Ж)Озвучьте альтернативное предложение по -o pipefail, что ли.
>> О, опять #!/bin/bash'измы. Ж)
> Озвучьте альтернативное предложение по -o pipefail, что ли.Вот: https://github.com/frej/fast-export/commit/aaccfba
>> Озвучьте альтернативное предложение по -o pipefail, что ли.
> Вот: https://github.com/frej/fast-export/commit/aaccfbaЭто из серии "альтернатива -- утки", а я спрашивал по существу: чем добиться эффекта, когда облом хотя бы одной программы в конвейере (в терминах кода возврата) приведёт к ненулевому коду возврата всего конвейера? В одном из скриптов моего mkimage-profiles ровно потому и задействован шеллом bash.
>>> Озвучьте альтернативное предложение по -o pipefail, что ли.
>> Вот: https:
>я спрашивал по существу: чем добиться эффекта, когдаМиша! Остановись!! Ты только что спросил патча у iZEN-а. И он тебе ответил. Пасчем. :-O Хотя бы в этот момент _нужно бежать не глядя и сломя. B)
>>>> Озвучьте альтернативное предложение по -o pipefail, что ли.
>>> Вот:
>>я спрашивал по существу: чем добиться эффекта, когда
> Миша! Остановись!! Ты только что спросил патча у iZEN-а.Не-не, ни разу. Вопрос был о том, как решить вполне реальную проблему, с которой тоже сталкивался. Ответ был о том, что гильотин -- лучшее средство от всех проблем. А за патчами лучше обращаться к разработчикам, понятное дело...
Дурень ты айзень.
Я вот ничего против баша не имею если в шебанге честно он и прописан.
А вот когда в шебанге sh а в кишках bash - надо убивать.
Поддерживаю
Если уровень знаний не позволяет тебе увидеть проблему, это ещё не значит, что следует начинать оскорблять других комментаторов. Твой Кэп.
а git нафига там? Чистый контейнер, чистый контейнер, ага!