The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Создание чистого openvz-контейнера на основе CentOS 6
Разработчики OpenVZ предлагают загрузить заранее созданные шаблоны
контейнеров, но у этих шаблонов есть недостаток - в них присутствует довольно
много лишних пакетов, которые не хотелось бы вычищать руками. Помимо этого, в
этих шаблонах присутствуют неподписаные пакеты, а так же репозиторий с
пакетами-заглушками, цифровая подпись пакетов из которого не проверяется. В
общем всё это и заставило сделать свой собственный чистый контейнер с нуля.
Далее предлагается скрипт, который в хост-системе на основе 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. При желании можно
сделать шаблон самостоятельно, например как написано здесь или здесь.
 
04.04.2014 , Автор: umask , Источник: http://pastebin.com/nFa99bNn...
Ключи: openvz, template
Раздел:    Корень / Безопасность / Виртуализация - Xen, OpenVZ, KVM, Qemu

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Romik (??), 10:22, 09/04/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Вот не понимаю таких статей. Это решение для одного конкретного случая. Зачем его выкладывать на опеннет? Всё равно тот, кто будет решать схожую задачу, либо потратит время на написание своего скрипта с нуля, либо потратит то же время на анализ этого скрипта и его корректировку-доводку под свои требования. В таких вещах велосипедостроение оправдано, а использование чужих велосипедов без доработки рисковано.
     
     
  • 2.2, nnoname (?), 21:24, 10/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Дорогой Ромик, тут статьи на опеннете появляются с перерывами иногда по месяцу. Человек старался и поделился опытом. Скажем спасибо и попросим писать ещё.
     

  • 1.3, Michael Shigorin (ok), 12:27, 11/04/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Если что, http://altlinux.org/starterkits#server и http://altlinux.org/m-p (эксперименты по созданию контейнеров на базе centos6 тоже проводились, но были в итоге заброшены).
     
     
  • 2.14, Аноним (-), 12:00, 14/05/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Да это ваще никому не интересно в отличие от сабжа.
     

  • 1.4, Анонище (?), 16:53, 11/04/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А тем временем, в gentoo:
    rc_sys="openvz"

    И всё.

     
  • 1.5, iZEN (ok), 11:29, 22/04/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    О, опять #!/bin/bash'измы. Ж)
     
     
  • 2.6, Michael Shigorin (ok), 12:30, 22/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > О, опять #!/bin/bash'измы. Ж)

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

     
     
  • 3.7, iZEN (ok), 17:46, 22/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >> О, опять #!/bin/bash'измы. Ж)
    > Озвучьте альтернативное предложение по -o pipefail, что ли.

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


     
     
  • 4.8, Michael Shigorin (ok), 21:00, 22/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >> Озвучьте альтернативное предложение по -o pipefail, что ли.
    > Вот: https://github.com/frej/fast-export/commit/aaccfba

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

     
     
  • 5.10, Andrey Mitrofanov (?), 11:09, 23/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >>> Озвучьте альтернативное предложение по -o pipefail, что ли.
    >> Вот: https:
    >я спрашивал по существу: чем добиться эффекта, когда

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

     
     
  • 6.11, Michael Shigorin (ok), 11:18, 23/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >>>> Озвучьте альтернативное предложение по -o pipefail, что ли.
    >>> Вот:  
    >>я спрашивал по существу: чем добиться эффекта, когда
    > Миша! Остановись!! Ты только что спросил патча у iZEN-а.

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

     
  • 2.9, Аноним (-), 01:41, 23/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Дурень ты айзень.
    Я вот ничего против баша не имею если в шебанге честно он и прописан.
    А вот когда в шебанге sh а в кишках bash - надо убивать.
     
     
  • 3.12, An (??), 17:29, 24/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Поддерживаю
     
  • 3.13, Аноним (-), 01:33, 28/04/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Если уровень знаний не позволяет тебе увидеть проблему, это ещё не значит, что следует начинать оскорблять других комментаторов. Твой Кэп.
     

  • 1.17, Кретин (?), 14:44, 03/08/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а git нафига там? Чистый контейнер, чистый контейнер, ага!
     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру