URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 95310
[ Назад ]

Исходное сообщение
"Раздел полезных советов: Создание чистого openvz-контейнера ..."

Отправлено auto_tips , 09-Апр-14 10:22 
Разработчики 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
Обсуждается: https://www.opennet.ru/tips/info/2829.shtml


Содержание

Сообщения в этом обсуждении
"Создание чистого openvz-контейнера на основе CentOS 6"
Отправлено Romik , 09-Апр-14 10:22 
Вот не понимаю таких статей. Это решение для одного конкретного случая. Зачем его выкладывать на опеннет? Всё равно тот, кто будет решать схожую задачу, либо потратит время на написание своего скрипта с нуля, либо потратит то же время на анализ этого скрипта и его корректировку-доводку под свои требования. В таких вещах велосипедостроение оправдано, а использование чужих велосипедов без доработки рисковано.

"Создание чистого openvz-контейнера на основе CentOS 6"
Отправлено nnoname , 10-Апр-14 21:24 
Дорогой Ромик, тут статьи на опеннете появляются с перерывами иногда по месяцу. Человек старался и поделился опытом. Скажем спасибо и попросим писать ещё.

"Создание чистого openvz-контейнера на основе CentOS 6"
Отправлено Michael Shigorin , 11-Апр-14 12:27 
Если что, http://altlinux.org/starterkits#server и http://altlinux.org/m-p (эксперименты по созданию контейнеров на базе centos6 тоже проводились, но были в итоге заброшены).

"Создание чистого openvz-контейнера на основе CentOS 6"
Отправлено Аноним , 14-Май-14 12:00 
Да это ваще никому не интересно в отличие от сабжа.

"Создание чистого openvz-контейнера на основе CentOS 6"
Отправлено Анонище , 11-Апр-14 16:53 
А тем временем, в gentoo:
rc_sys="openvz"

И всё.


"Создание чистого openvz-контейнера на основе CentOS 6"
Отправлено iZEN , 22-Апр-14 11:29 
О, опять #!/bin/bash'измы. Ж)

"Создание чистого openvz-контейнера на основе CentOS 6"
Отправлено Michael Shigorin , 22-Апр-14 12:30 
> О, опять #!/bin/bash'измы. Ж)

Озвучьте альтернативное предложение по -o pipefail, что ли.


"Создание чистого openvz-контейнера на основе CentOS 6"
Отправлено iZEN , 22-Апр-14 17:46 
>> О, опять #!/bin/bash'измы. Ж)
> Озвучьте альтернативное предложение по -o pipefail, что ли.

Вот: https://github.com/frej/fast-export/commit/aaccfba



"Создание чистого openvz-контейнера на основе CentOS 6"
Отправлено Michael Shigorin , 22-Апр-14 21:00 
>> Озвучьте альтернативное предложение по -o pipefail, что ли.
> Вот: https://github.com/frej/fast-export/commit/aaccfba

Это из серии "альтернатива -- утки", а я спрашивал по существу: чем добиться эффекта, когда облом хотя бы одной программы в конвейере (в терминах кода возврата) приведёт к ненулевому коду возврата всего конвейера?  В одном из скриптов моего mkimage-profiles ровно потому и задействован шеллом bash.


"Создание чистого openvz-контейнера на основе CentOS 6"
Отправлено Andrey Mitrofanov , 23-Апр-14 11:09 
>>> Озвучьте альтернативное предложение по -o pipefail, что ли.
>> Вот: https:
>я спрашивал по существу: чем добиться эффекта, когда

Миша! Остановись!! Ты только что спросил патча у iZEN-а. И он тебе ответил. Пасчем. :-O Хотя бы в этот момент _нужно бежать не глядя и сломя. B)


"Создание чистого openvz-контейнера на основе CentOS 6"
Отправлено Michael Shigorin , 23-Апр-14 11:18 
>>>> Озвучьте альтернативное предложение по -o pipefail, что ли.
>>> Вот:  
>>я спрашивал по существу: чем добиться эффекта, когда
> Миша! Остановись!! Ты только что спросил патча у iZEN-а.

Не-не, ни разу.  Вопрос был о том, как решить вполне реальную проблему, с которой тоже сталкивался.  Ответ был о том, что гильотин -- лучшее средство от всех проблем.  А за патчами лучше обращаться к разработчикам, понятное дело...


"Создание чистого openvz-контейнера на основе CentOS 6"
Отправлено Аноним , 23-Апр-14 01:41 
Дурень ты айзень.
Я вот ничего против баша не имею если в шебанге честно он и прописан.
А вот когда в шебанге sh а в кишках bash - надо убивать.

"Создание чистого openvz-контейнера на основе CentOS 6"
Отправлено An , 24-Апр-14 17:29 
Поддерживаю

"Создание чистого openvz-контейнера на основе CentOS 6"
Отправлено Аноним , 28-Апр-14 01:33 
Если уровень знаний не позволяет тебе увидеть проблему, это ещё не значит, что следует начинать оскорблять других комментаторов. Твой Кэп.

"Создание чистого openvz-контейнера на основе CentOS 6"
Отправлено Кретин , 03-Авг-14 14:44 
а git нафига там? Чистый контейнер, чистый контейнер, ага!