Page_c76a3fcf https://linux-notes.org Unix/ Linux блог, на котором можно найти полезную информацию по настройке ОС и ПО. Sat, 30 Dec 2017 14:37:03 +0000 ru-RU hourly 1 https://wordpress.org/?v=6.7.2 Page_c76a3fcf https://linux-notes.org/zapusk-gui-prilozhenij-v-docker/ https://linux-notes.org/zapusk-gui-prilozhenij-v-docker/#respond Wed, 27 Dec 2017 23:27:28 +0000 http://linux-notes.org/?p=5479 Запуск GUI-приложения в Docker Хочу поведать историю о том, как я запустил GUI-приложение в Docker. некоторые спросят, зачем? Ну есть много причин, вот некоторые из них: Нет нужного пакета/утилиты под твою ОС. Проверить что получится. Запуск GUI-приложения в Docker Начну с теории и закончу примерами. Архитектура X window system 101 В *NIX системах, приложение GUI имеет […]

The post Запуск GUI-приложения в Docker first appeared on linux-notes.org.]]>

Запуск GUI-приложения в Docker

Хочу поведать историю о том, как я запустил GUI-приложение в Docker. некоторые спросят, зачем? Ну есть много причин, вот некоторые из них:

  • Нет нужного пакета/утилиты под твою ОС.
  • Проверить что получится.

Запуск GUI-приложения в Docker

Начну с теории и закончу примерами.

Архитектура X window system 101

В *NIX системах, приложение GUI имеет роль «X-клиента». Каждый раз, когда он перерисовывает свое содержимое, последовательность графических команд кодируется все в X протокол используя библиотеку (обычно Xlib) и передается в сокет X11. На другом конце, X-сервер считывает такие команды из сокета и отображает их на дисплей:

Архитектура X window system 101

Контейнерезированные (Containerizing) GUI приложения

Взглянув на архитектуру X window системы, ясно то, что для того, чтобы наши контейнеризованные графические приложения могли рисовать на экране, нам нужно предоставить ему доступ к сокету X11 (запись), и нам нужен X-сервер для использования и рендеринга графики команд на экран.

Мы можем подойти к этой проблеме с двух сторон:

  • Мы можем связать xvfb и VNC-сервер с нашим образом контейнера.
  • Мы можем совместно использовать сокет X11 хоста с контейнером в качестве внешнего раздела.

Контейнерезированные (Containerizing) GUI приложения

Первый подход — это тот, который проще реализовать, он работает из коробки и клиенты VNC доступны. В то же время мы должны учитывать, что xvfb создает представление в памяти дисплея, а VNC сохраняет в памяти последнюю обновленную область, поэтому в худшем случае мы получаем размер буфера кадра, выделенного дважды в каждый экземпляр докер-контейнера.

Совместное использование сокета X11 хоста с контейнером — это гораздо более модульное решение, которое позволяет использовать более компактный файл Docker, и он позволяет владельцу X-сервера переключать реализацию в соответствии с ее потребностями (возможно, X-сервер нашего хоста может быть даже самой xvfb).

Для начала, установим вспомогательное ПО:

Установка docker machine в Unix/Linux

Установка Docker на Debian/Ubuntu

Установка Docker на CentOS/RedHat/Fedora

Установка docker-compose в Unix/Linux

И так, сейчас я приведу несколько примеров использования docker чтобы запустить графическое ПО внутри докер-контейнера. Самый простой способ сделать это, это выполнить:

$ docker run --rm -it \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY \
your_image

Или:

$ docker run --rm -d \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY \
your_image

Или:

$ docker run --privileged -v /tmp/.X11-unix/X0:/tmp/.X11-unix/X0 your_image

Это самые простые способы для запуска.

Поддержка 3D hardware acceleration:

$ docker run --rm -it \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY \
--device /dev/dri \
your_image

Или:

$ docker run --rm -d \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY \
--device /dev/dri \
your_image

Поддержка звука (Audio):

$ docker run --rm -it \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY \
--device /dev/dri \
--device /dev/snd \
your_image

Или:

$ docker run --rm -d \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY \
--device /dev/dri \
--device /dev/snd \
your_image

Поддержка Webcam:

$ docker run --rm -it \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY \
--device /dev/dri \
--device /dev/snd \
--device /dev/video0 \
your_image

Или:

$ docker run --rm -d \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY \
--device /dev/dri \
--device /dev/snd \
--device /dev/video0 \
your_image

Используем date/time как и на хосте:

$ docker run --rm -it \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY \
--device /dev/dri \
--device /dev/snd \
--device /dev/video0 \
-v /etc/localtime:/etc/localtime:ro \
your_image

PS: Некоторые дистрибутивы не используют /etc/localtime, чтобы установить часовой пояс, в этих случаях вам нужно будет проверить, как он это делает и «реплицировать» в контейнер.

Проброс конфигов в контейнер:

$ docker run [--rm [-it]|-d] \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY \
--device /dev/dri \
--device /dev/snd \
--device /dev/video0 \
-v /etc/localtime:/etc/localtime:ro \
-v $HOME/.config/app:/root/.config/app \
your_image

Подключаем Video-game controller:

$ docker run [--rm [-it]|-d] \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY \
--device /dev/dri \
--device /dev/snd \
--device /dev/video0 \
-v /etc/localtime:/etc/localtime:ro \
--device /dev/input \
your_image

Это были примеры запусков. Сейчас приведу наглядные примеры….

-=== Запуск mysql-workbench в Docker ===-

После чего, я создам машину для тестов, буду использовать docker-machine:

$ docker-machine create --driver virtualbox --virtualbox-cpu-count "2" --virtualbox-memory "2048" --virtualbox-disk-size "20000" mysql-workbench

Потом выполняю:

$ docker-machine env mysql-workbench

И:

$ eval $(docker-machine env mysql-workbench)

Машина создана, подключаемся к ней:

$ docker-machine ssh mysql-workbench

Внутри созданной докер-машины, создаем:

# vim Dockerfile

И прописываем:

FROM debian
RUN apt-get update
RUN apt-get install -qqy x11-apps mysql-workbench libcanberra-gtk-module packagekit-gtk3-module
ENV DISPLAY :0
CMD /usr/bin/mysql-workbench

Где нужно изменить «ENV DISPLAY :0» строку на свой «DISPLAY», чтобы узнать его, выполните:

$ echo $DISPLAY

Получите вывод (Если у вас MacOS X):

/private/tmp/com.apple.launchd.6iXsMbPJbh/org.macosforge.xquartz:0

Получите вывод (Если у вас Linux. Проверял на CentOS 6):

:0.0

Ну что, создаем контейнер:

$ docker build -t workbench - < Dockerfile

Запускаем контейнер и прокидываем в него сокет. Контейнер автоматически стартует MySQL-Workbench при запуске:

$ docker run --privileged -v /tmp/.X11-unix/X0:/tmp/.X11-unix/X0 workbench

PS: Можно прописать переменную:

$ export XSOCK=/tmp/.X11-unix/X0

Потом запуск будет проходить вот так:

$ docker run --privileged -v $XSOCK:$XSOCK workbench

Честно сказать, у меня не получилось запустить данный контейнер на моем macbook, получил ошибку:

(mysql-workbench-bin:19): Gtk-WARNING **: cannot open display: unix/private/tmp/com.apple.launchd.6iXsMbPJbh/org.macosforge.xquartz:0

Дубль 2, пробую выполнить все тоже, но на CentOS 6:

[root@puppet-agent captain]# docker run --privileged -v /tmp/.X11-unix/X0:/tmp/.X11-unix/X0 workbench
No protocol specified

(mysql-workbench-bin:20): Gtk-WARNING **: cannot open display: :0
[root@puppet-agent captain]# xhost +local:root
non-network local connections being added to access control list
[root@puppet-agent captain]# xhost +local:captain
non-network local connections being added to access control list

ИЛИ, для всех юзеров:

# xhost +localhost

Но это не верное решение, берем свой eth0 ИП:

# xhost + $ip

Так же, пробросим переменную для дисплея:

# export DISPLAY=:0.0

После этого, запускаю:

[root@puppet-agent captain]# docker run --privileged -v /tmp/.X11-unix/X0:/tmp/.X11-unix/X0 workbench

Вылезли другие ошибки… Посидел пару часов, я исправил ошибки на маке (описание решения, в самом низу статьи), ну а сейчас — я запускаю контейнер:

$ docker run -it -e DISPLAY=$ip:0 -v /tmp/.X11-unix:/tmp/.X11-uni workbench

Или (Но 1-й вариант лучше как по мне):

$ docker run --privileged --name firefox -e DISPLAY=$ip:0 -v /tmp/.X11-unix:/tmp/.X11-unix workbench

Получаю:

Запуск mysql-workbench в Docker

Шикарно! Все заработало!

-=== Запуск FireFox в Docker ===-

Существует несколько различных вариантов запуска GUI-приложений внутри Docker контейнера:

  • С использованием SSH с пересылкой X11
  • С использованием SSH с пересылкой VNC
  • Разделение сокетов между хостом и докер-контейнером

Самый простой способ — заключается в том, чтобы разделить мой сокет X11 с контейнером и использовать его напрямую. Идея довольно проста, и вы можете легко попробовать попробовать запустить контейнер Firefox, используя следующий файл Docker:

FROM ubuntu:14.04

RUN apt-get update && apt-get install -y firefox libcanberra-gtk-module packagekit-gtk3-module

# Replace 1000 with your user / group id
RUN export uid=1000 gid=1000 && \
mkdir -p /home/developer && \
echo "developer:x:${uid}:${gid}:Developer,,,:/home/developer:/bin/bash" >> /etc/passwd && \
echo "developer:x:${uid}:" >> /etc/group && \
echo "developer ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/developer && \
chmod 0440 /etc/sudoers.d/developer && \
chown ${uid}:${gid} -R /home/developer

USER developer
ENV HOME /home/developer
CMD /usr/bin/firefox

Запускаем:

$ docker build -t firefox .

Запускаем контейнер:

docker run -ti --rm \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
firefox

И вот что получилось:

Запуск FireFox в Docker

Данный пример приводился на CentOS 6, но у меня есть еще MacOS X и я бы хотел все же подружить все это дело!

Ставим пакет для MacOS X:

$ brew install caskroom/cask/xquartz

Запускаем:

$ open -a XQuartz

Открываем натройки, переходим во вкладку «security» и выставляем все галочки (2 шт):

Настройка Security в XQuartz

Идем далее:

$ ip=$(ifconfig en0 | grep inet | awk '$1=="inet" {print $2}')
$ xhost + $ip

И, запускаем:

$ docker run -it -e DISPLAY=$ip:0 -v /tmp/.X11-unix:/tmp/.X11-uni firefox

Хочу добавить следующее, я много перерыл в интернете, но мало что полезного нашел. И да, вот как у меня выглядят конфигы ssh.

# cat /etc/ssh/ssh_config | grep -Ev "(#|^$)"

 Host *
   ForwardAgent yes
   ForwardX11 yes
Host *
	SendEnv LANG LC_*
Host *
    XAuthLocation /opt/X11/bin/xauth

И:

# cat /etc/ssh/sshd_config | grep -Ev "(#|^$)"

AuthorizedKeysFile	.ssh/authorized_keys
UsePAM yes
X11Forwarding yes
X11DisplayOffset 10
AcceptEnv LANG LC_*
Subsystem	sftp	/usr/libexec/sftp-server
XAuthLocation /opt/X11/bin/xauth

Приведу еще пример.

-=== Запуск spotify в Docker ===-

Выполняем:

$ ip=$(ifconfig eth1 | grep inet | awk '$1=="inet" {print $2}'| cut -c6-)
$ xhost + $ip

PS: У меня тут используется несколько интерфейсов, но я взял ИП с eth1.

Или, для MacOS X:

$ ip=$(ifconfig en0 | grep inet | awk '$1=="inet" {print $2}')
$ xhost + $ip

Не буду собирать контейнер с Dockerfile, возьму готовый имедж:

$ # docker run --privileged --name spotify -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix jess/spotify

Я тут пробросил звуковое устройство во внутрь самого контейнера.

Запуск spotify в Docker

Вот это шайтаны додумались)))

На маке я пока не понял как это сделать 🙁

-=== Запуск wireshark в Docker ===-

Выполняем:

$ ip=$(ifconfig eth1 | grep inet | awk '$1=="inet" {print $2}'| cut -c6-)
$ xhost + $ip

PS: У меня тут используется несколько интерфейсов, но я взял ИП с eth1.

Или, для MacOS X:

$ ip=$(ifconfig en0 | grep inet | awk '$1=="inet" {print $2}')
$ xhost + $ip

Или посмотреть все ИП на всех интерфейсах:

$ ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'

 

Не буду собирать контейнер с Dockerfile, возьму готовый имедж:

$ docker run -ti --net=host --privileged --name wireshark1 -v $HOME:/root:rw -e XAUTHORITY=/root/.Xauthority -e DISPLAY=$ip:0 manell/wireshark

Получаем:

Запуск wireshark в Docker

Работает даже!

Полезная статья:

Утилита xhost в Unix/Linux

Вот и все, статья «Запуск GUI-приложения в Docker» завершена.

The post Запуск GUI-приложения в Docker first appeared on linux-notes.org.]]>
https://linux-notes.org/zapusk-gui-prilozhenij-v-docker/feed/ 0
Page_c76a3fcf https://linux-notes.org/ustanovka-openvz-na-ubuntu/ https://linux-notes.org/ustanovka-openvz-na-ubuntu/#respond Fri, 11 Apr 2014 11:25:04 +0000 http://linux-notes.org/?p=1285 Установка OpenVZ на Ubuntu 13.04 В этой статье я опишу, как подготовить сервер Ubuntu 13.04 для OpenVZ. С OpenVZ можно создать несколько виртуальных частных серверов (VPS) на том же оборудовании, подобно Xen и проекта Linux Vserver. OpenVZ является с открытым исходным кодом филиал Virtuozzo, коммерческого решения виртуализации, используемого многими поставщиками, которые предлагают виртуальные серверы. Патч OpenVZ в […]

The post Установка OpenVZ на Ubuntu first appeared on linux-notes.org.]]>

Установка OpenVZ на Ubuntu 13.04

В этой статье я опишу, как подготовить сервер Ubuntu 13.04 для OpenVZ. С OpenVZ можно создать несколько виртуальных частных серверов (VPS) на том же оборудовании, подобно Xen и проекта Linux Vserver. OpenVZ является с открытым исходным кодом филиал Virtuozzo, коммерческого решения виртуализации, используемого многими поставщиками, которые предлагают виртуальные серверы. Патч OpenVZ в ядро под лицензией GPL, и инструменты пользовательского уровня находятся под лицензией QPL.

Это руководство предназначено в качестве практического руководства; он не охватывает теоретические основы. Их много в Интернете.

Эта статья не дает никаких гарантий! Я хочу сказать, что это не единственный способ создания такой системы. Есть много способов достижения этой цели, но это то, как я выбрал. Я не даю никаких гарантий, что это будет работать именно у вас, так как возможны какие то ошибки!

1 Предварительные замечания
У меня установлена x86_64 (amd64) система. Если вы пользуетесь системой i386, некоторые команды будут немного отличаться. Проверить какаю разрядность вы имеете можно следующим образом:

# uname -a
#uname -i

2 Установка OpenVZ
Для Ubuntu 13.04, нет OpenVZ ядра в официальных репозиториях. Поэтому мы должны установить OpenVZ с официальных RPM пакетов из проекта OpenVZ.

2.1 Установка с официального RPM пакета из OpenVZ проекта
Загрузите последние версии vzkernel, Ploop, vzquota RPM, vzctl из http://wiki.openvz.org/Download/kernel/rhel6 и http://wiki.openvz.org/Download/utils, например следующим образом ::

RPMs

Для Ubuntu с 64-битной архитектурой (x86_64 (AMD64, EM64T)):

# cd /usr/local/src/
# wget http://download.openvz.org/kernel/branches/rhel6-2.6.32/042stab085.20/vzkernel-2.6.32-042stab085.20.x86_64.rpm
# wget http://download.openvz.org/kernel/branches/rhel6-2.6.32/042stab085.20/vzkernel-devel-2.6.32-042stab085.20.x86_64.rpm
# wget http://download.openvz.org/kernel/branches/rhel6-2.6.32/042stab085.20/vzkernel-headers-2.6.32-042stab085.20.x86_64.rpm
# wget http://download.openvz.org/kernel/branches/rhel6-2.6.32/042stab085.20/vzkernel-debug-2.6.32-042stab085.20.x86_64.rpm
# wget http://download.openvz.org/kernel/branches/rhel6-2.6.32/042stab085.20/vzkernel-debug-devel-2.6.32-042stab085.20.x86_64.rpm
# wget http://download.openvz.org/kernel/branches/rhel6-2.6.32/042stab085.20/vzkernel-firmware-2.6.32-042stab085.20.noarch.rpm
# wget http://download.openvz.org/utils/vzctl/4.6.1/vzctl-4.6.1-1.x86_64.rpm
# wget http://download.openvz.org/utils/vzctl/4.6.1/vzctl-core-4.6.1-1.x86_64.rpm
# wget http://download.openvz.org/utils/ploop/1.11/ploop-1.11-1.x86_64.rpm
# wget http://download.openvz.org/utils/ploop/1.11/ploop-devel-1.11-1.x86_64.rpm
# wget http://download.openvz.org/utils/ploop/1.11/ploop-lib-1.11-1.x86_64.rpm
# wget http://download.openvz.org/utils/vzquota/3.1/vzquota-3.1-1.x86_64.rpm
# wget http://download.openvz.org/utils/vzstats/0.5.3/vzstats-0.5.3-1.noarch.rpm

Для Ubuntu с 32-битной архитектурой (x86 (i686, IA32)):

# cd /usr/local/src/
# wget http://download.openvz.org/kernel/branches/rhel6-2.6.32/042stab085.20/vzkernel-2.6.32-042stab085.20.i686.rpm
# wget http://download.openvz.org/kernel/branches/rhel6-2.6.32/042stab085.20/vzkernel-devel-2.6.32-042stab085.20.i686.rpm
# wget http://download.openvz.org/kernel/branches/rhel6-2.6.32/042stab085.20/vzkernel-headers-2.6.32-042stab085.20.i686.rpm
# wget http://download.openvz.org/kernel/branches/rhel6-2.6.32/042stab085.20/vzkernel-debug-2.6.32-042stab085.20.i686.rpm
# wget http://download.openvz.org/kernel/branches/rhel6-2.6.32/042stab085.20/vzkernel-debug-devel-2.6.32-042stab085.20.i686.rpm
# wget http://download.openvz.org/kernel/branches/rhel6-2.6.32/042stab085.20/vzkernel-firmware-2.6.32-042stab085.20.noarch.rpm
# wget http://download.openvz.org/utils/vzctl/4.6.1/vzctl-4.6.1-1.i386.rpm
# wget http://download.openvz.org/utils/vzctl/4.6.1/vzctl-core-4.6.1-1.i386.rpm
# wget http://download.openvz.org/utils/ploop/1.11/ploop-1.11-1.i386.rpm
# wget http://download.openvz.org/utils/ploop/1.11/ploop-devel-1.11-1.i386.rpm
# wget http://download.openvz.org/utils/ploop/1.11/ploop-lib-1.11-1.i386.rpm
# wget http://download.openvz.org/utils/vzquota/3.1/vzquota-3.1-1.i386.rpm
# wget http://download.openvz.org/utils/vzstats/0.5.3/vzstats-0.5.3-1.noarch.rpm

Установка следующих пакетов …

# apt-get install fakeroot alien libcgroup1

И пересобираем пакеты из RPM в DEB для этого нужно выполнить команду:

# fakeroot alien --to-deb --scripts --keep-version vz*.rpm ploop*.rpm

Установка DEB  пакетов следующим образом:

# dpkg -i vz*.deb ploop*.deb

После чего мы должны убедиться, что правильное ядро (ядро OpenVZ) загружается при перезапуске системы. В выходе последней команды, вы должны увидеть что-то вроде этого:

dpkg -i vz*.deb ploop*.deb

dpkg -i vz*.deb ploop*.deb

Это означает, что есть и другое ядро в системе (3.8.0), а ядро ​​OpenVZ (2.6.32) уже не первый в списке. Таким образом, чтобы сделать OpenVZ ядро ядром по умолчанию, у нас есть два варианта — отрегулировать ядро по умолчанию в GRUB (рекомендуется) или удалить ядро не-VZ (ы).

Для регулировки ядра по умолчанию в GRUB необходимо открыть /etc/default/grub…

# ee /etc/default/grub

Нам нужно изменить строку с GRUB_DEFAULT (подсчет начинается с 0; наш OpenVZ является третим ядром в дополнительные параметры подменю GRUB Ubuntu (который является вторым вариантом в меню загрузки после ядра 3.8.0), так что мы должны прописать  «1> 2»:

[...]
GRUB_DEFAULT="1>2"
[...]

После чего необходимо обновить GRUB, сделать это можно:

# update-grub

Чтобы удалить ядро которое стоит по умолчанию, выполните:

# apt-get remove linux-image linux-image-3.8.0-19-generic

Обновим GRUB еще 1 раз:

 # update-grub

Теперь, когда мы убедились, что правильно загружаться ядро , мы можем идти дальше.

Далее мы должны проверить, что мы используем UUID, вместо имен устройств в /etc/fstab поскольку в противном случае система может не загрузиться с ядром OpenVZ. Запуск …

# blkid

Чтобы узнать UUID, ваших устройств / разделов:

blkid

blkid

Откроем /etc/fstab:

# ee /etc/fstab

Мой первоначальный /etc/fstab выглядит следующим образом (как видите, UUID из /boot раздела уже используется, но для /swap, имена устройств уже используются):

fstab on OpenVZ

fstab on OpenVZ

Изменить его так, чтобы UUID, использовался для всех разделов следующим образом:

fstab on OpenVZ_norm

fstab on OpenVZ_norm

Убедитесь что OpenVZ запускается автоматически при загрузке:

# update-rc.d vz defaults
# update-rc.d vzeventd defaults

Далее нам нужно связать несколько библиотек:

# ln -s /usr/lib64/libvzctl-4.3.1.so /usr/lib
# ln -s /usr/lib64/libploop.so /usr/lib

Если вы хотите использовать Ploop контейнеры, сделайте следующее:

# apt-get install parted

Кроме того, нужно открыть /etc/init.d/vz……:

# ee /etc/init.d/vz

И необходимо добавить строку mkdir $VARLOCK/ploop, чтобы убедиться, что каталог /var/lock/ploop воссоздан после перезагрузки:

#!/bin/sh
[...]
. /usr/libexec/vzctl/scripts/initd-functions
mkdir $VARLOCK/ploop
[...]

Создадим символические ссылки с /vz to/var/lib/vz для обеспечения обратной совместимости:

# ln -s /vz /var/lib/vz

Открываем  /etc/sysctl.conf и смотрим, что у вас есть следующие настройки в нем:

# ee /etc/sysctl.conf
[...]
net.ipv4.conf.all.rp_filter=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.ip_forward=1
kernel.sysrq = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.eth0.proxy_arp=1
[...]

Если вы хотите или есть необходимость в изменении /etc/sysctl.conf, то выполните:

# sysctl -p

После этого. Следующий шаг очень важен, если IP-адреса ваших виртуальных машин из другой подсети, чем IP-адрес хост-системы. Если вы не сделаете этого, сеть не будет работать в виртуальных машинах!

Открываем /etc/vz/vz.conf и устанавливаем строку NEIGHBOUR_DEVS всем:

# ee /etc/vz/vz.conf
[...]
# Controls which interfaces to send ARP requests and modify APR tables on.
NEIGHBOUR_DEVS=all
[...]

Нужно установить утилиту vzdump:

# apt-get install vzdump

Наконец, перезагрузим нашу систему:

# reboot

Если перезагрузка произошла без проблем, то все в порядке! Запускаем команду:

# uname -r

и ваше новое ядро ​​OpenVZ должен появиться, Вы должны увидеть что то типа этого:

root@testvps:/usr/local/src/OpenVZ# uname -r
2.6.32-042stab085.17
root@testvps:/usr/local/src/OpenVZ#

3 Использование OpenVZ

Перед тем как мы сможем создавать виртуальные машины с OpenVZ, мы должны иметь шаблон для распределения, что мы хотим использовать на виртуальных машинах в директории /var/lib/vz/template/cache. Виртуальные машины будет создан на основе этого шаблона.

Вы сможете посмотреть список precreated шаблонов на http://wiki.openvz.org/Download/template/precreated и выбрать нужный. Например, мы можем скачать минимальный шаблон следующим образом:
Wheezy Debian (x86_64):

# cd /vz/template/cache
# wget http://download.openvz.org/template/precreated/contrib/debian-7.0-amd64-minimal.tar.gz

Wheezy Debian (x86):

# cd /vz/template/cache
# wget http://download.openvz.org/template/precreated/debian-7.0-x86.tar.gz

(Если ваш хостинг представляет собой систему на i386, вы не сможете использовать шаблон для amd64 — вы должны использовать i386 шаблоны тогда!)

Сейчас я покажу и расскажу о некоторых командах для использования OpenVZ.

Чтобы настроить VPS от Debian-7.0-amd64 минимального шаблона (вы сможете увидеть его в /vz/template/cache), выполните:

# vzctl create 101 --ostemplate debian-7.0-amd64-minimal --config basic

101 должна состоять из эксклюзивного ID — все виртуальные машины должны иметь свой собственный уникальный ID. Можно использовать IP-адреса виртуальной машины для этого (последнюю часть). Например, если IP-адрес вашей виртуальной машины — 192.168.0.101, то можно использувать 101 как ID.

Если вы хотите иметь В.М. запускался во время загрузки, запустите:

# vzctl set 101 --onboot yes --save

Чтобы присвоить имя хоста и IP-адрес для VM, запустите следующую команды:

# vzctl set 101 --hostname test.example.com --save
# vzctl set 101 --ipadd 192.168.0.101 --save

После всего этого мы устанавливаем количество sockets до 120 и назначить несколько сервер имен к ВМ:

# vzctl set 101 --numothersock 120 --save
# vzctl set 101 --nameserver 8.8.8.8 --nameserver 8.8.4.4 --save

(Если вы не можете использовать команды vzctl , вы так же можете просто отредактировать файл конфигурации на виртуальной машины, который хранится в  /etc/vz/conf. Если идентификатор ВМ 101, то файл конфигурации выглядит: /etc/vz/conf/101.conf.)

Для того чтобы «завести» виртуальную машину, выполните команду в терменале:

# vzctl start 101

Чтобы установить пароль root для виртуальной машины:

# vzctl exec 101 passwd

Теперь вы можете либо законнектиться к виртуальной машине через SSH (например через PuTTY), или  следующим образом:

# vzctl enter 101

Чтобы закрыть консоль в ВМ выполните:

# exit

Чтобы остановить VM, запустите команду:

# vzctl stop 101

Чтобы перезапустить виртуальную машину, запустите команду:

# vzctl restart 101

Удалить ВМ из жесткого диска (она должен быть остановлена, прежде чем вы сделаете это), запустите команду:

# vzctl destroy 101

Чтобы получить список ваших виртуальных машин и их состояние можно следующим образом:

# vzlist -a
vzlist -a

vzlist -a

Чтобы узнать о ресурсах, выделяемых на виртуальной машине, запустите команду:

# vzctl exec 101 cat /proc/user_beancounters
vzctl exec 101 cat /proc/user_beancounters

vzctl exec 101 cat /proc/user_beancounters

Колонна failcnt очень важна, она должна содержать только нули; если это не так, это означает, что виртуальная машина нуждается в большем количестве ресурсов, чем в настоящее время распределена VM. Откройте файл конфигурации виртуальной машины в /etc/vz/conf и поднять соответствующий ресурс, а затем перезапустить виртуальную машину.

Чтобы узнать больше о команде vzctl, запустите команду:

# man vzctl

3.1 Установка квоты внутри контейнера

Чтобы включить квоты внутри контейнера (в данном примере это контейнер с ID 101), выполните следующие команды от хоста:

# vzctl stop 101
# vzctl set 101 --diskquota yes --save
# vzctl set 101 --diskspace 10G --save
# vzctl set 101 --diskinodes 200000:220000 --save
# vzctl set 101 --quotatime 0 --save
# vzctl set 101 --quotaugidlimit 1000 --save
# vzctl start 101

Вы можете выбрать значения для дискового пространства и diskinodes с вашими потребностями. quotaugidlimit устанавливает максимальное количество идентификаторов для пользователей / групп в контейнере, для которого дисковая квота внутри контейнера, будут учитываться.

После того, как контейнер запущен, необходимо установить квоты и quotatool пакеты внутри контейнера:

# apt-get install quota quotatool

После этого выполните команду:

# repquota -avug

Должно показать текущие квоты:

repquota -avug

repquota -avug

3.2 Создание Ploop контейнера

Создание Ploop контейнера не сильно отличается от создания обычного, на основе контейнер каталогов — просто убедитесь, что вы используете — макета переключатель для Ploop и укажите дискового пространства (например — дискового пространства 10G) при создании контейнера:

# vzctl create 102 --layout ploop --diskspace 10G --ostemplate debian-7.0-amd64-minimal --config basic

Установка все другие варианты (если необходимо):

# vzctl set 102 --onboot yes --save
# vzctl set 102 --hostname test2.example.com --save
# vzctl set 102 --ipadd 192.168.0.102 --save
# vzctl set 102 --numothersock 120 --save
# vzctl set 102 --nameserver 8.8.8.8 --nameserver 8.8.4.4 --save
# vzctl start 102
# vzctl exec 102 passwd

Чтобы включить квоту внутри Ploop контейнера, нам просто нужно установить опцию quotaugidlimit:

# vzctl stop 102
# vzctl set 102 --quotaugidlimit 1000 --save
# vzctl start 102

После того, как контейнер запущен, необходимо установить квоты и quotatool пакеты внутри контейнера:

# apt-get install quota quotatool
# repquota -avug

Должно показать текущие квоты (если нет, то перезапустить контейнер):

repquota -avug

repquota -avug

Установка OpenVZ на Ubuntu подошла к окончанию. Надеюсь все понятно, тема раскрыта полностью и охватывает очень большую часть. Если есть вопросы, то пишите ниже в комментариях.

The post Установка OpenVZ на Ubuntu first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-openvz-na-ubuntu/feed/ 0
Page_c76a3fcf https://linux-notes.org/kak-ustanovit-i-nastroit-openvpn-na-openvz/ https://linux-notes.org/kak-ustanovit-i-nastroit-openvpn-na-openvz/#comments Thu, 10 Apr 2014 16:33:46 +0000 http://linux-notes.org/?p=1254 Как установить и настроить OpenVPN на OpenVZ Это руководство покажет вам, как установить OpenVPN внутри вашей VPS с OpenVZ на Ubuntu. OpenVZ поддерживается в VPN с помощью ядра TUN / модуля TAP. Первое, что вам нужно сделать, это разрешить TUN / TAP, если вы еще не сделали это: Перейдите Hypanel->Machine Settings -> Enable TUN/TAP Установку буду делать на […]

The post Как установить и настроить OpenVPN на OpenVZ first appeared on linux-notes.org.]]>

Как установить и настроить OpenVPN на OpenVZ

Это руководство покажет вам, как установить OpenVPN внутри вашей VPS с OpenVZ на Ubuntu. OpenVZ поддерживается в VPN с помощью ядра TUN / модуля TAP.

Первое, что вам нужно сделать, это разрешить TUN / TAP, если вы еще не сделали это:
Перейдите Hypanel->Machine Settings -> Enable TUN/TAP

Установку буду делать на Ubuntu.
Во-первых, установить OpenVPN пакет:

# sudo apt-get install openvpn
# sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn
# cd /etc/openvpn/
# sudo gunzip server.conf.gz

Это позволит скопировать и распаковать пример конфигурации сервера. Пример конфигурации использует диапазон IP 192.168.244.0 и подсеть 255.255.255.255
Измените файл server.conf в своем любимом редакторе:

# ee /etc/openvpn/server.conf

Теперь вам нужно раскомментировать следующее (удалить «;» впереди):

push “redirect-gateway def1 bypass-dhcp”
push “dhcp-option DNS 192.168.244.134″
push “dhcp-option DNS 192.168.244.134″

Скопируйте необходимые файлы в создадим наши сертификаты:

# sudo mkdir /etc/openvpn/easy-rsa/
# sudo cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
# cd /etc/openvpn/easy-rsa

Нам нужно настроить файл VARS, который содержит настройки для сертификатов.
Пожалуйста, имейте в виду, что поле «country» может содержать только 2 буквы.

Откройте файл VARS и перейдите до конца.
Файл по умолчанию содержит:

# Это значения по умолчанию для полей
# Которые будут размещены в сертификате.
# Не оставляйте любое из этих полей пустым.

export KEY_COUNTRY=”UA”
export KEY_PROVINCE=”RU”
export KEY_CITY=”Kiev”
export KEY_ORG=”Fort-Funston”
export KEY_EMAIL=”captain@192.168.244.134”

Вы можете изменить эти значения, если хотите.
После этого создадим сертификаты для сервера:

# cd /etc/openvpn/easy-rsa/
# source vars
# ./clean-all
# ./pkitool –initca
# ./pkitool –server server

Это поможет укрепить ваши соответствующие сертификаты, основанные файлы примеров немного поправив их. Я рекомендую это для не-продвинутых пользователей и новичков.

Создание клиентских сертификатов:

# cd /etc/openvpn/easy-rsa/
# source vars
# ./pkitool hostname

Не забудьте заменить имя хоста с именем клиента на котором вы хотите  подключиться. Это может быть использовано в качестве идентификатора, например, «client1»

Вы должны будете сделать 1 вещь, чтобы исправить маршрутизацию. То есть направлять трафик от tun0 к интерфейсу, который обеспечивает интернет (venet0:0 по умолчанию).

# iptables -t nat -A POSTROUTING -s 192.168.244.0/24 -j SNAT --to-source your_server_ip
# iptables-save

Поскольку мы не можем использовать команду MASQUERADE, мы должны использовать SNAT. Также только полные интерфейсы поддерживаются (Так venet0: 0 не совместим с опцией-O). Вот почему я использую статическую конфигурацию на основе IP. Это будет маршрут весь сетевой трафик будет   на 192.168.244.0 к интерфейсу internet-supplying.

# sudo /etc/init.d/openvpn restart

Настройте ваш VPN клиент  на вашем компьютере

The client will need the following files (Клиенту понадобятся следующие файлы )

/etc/openvpn/easy-rsa/keys/ca.crt
/etc/openvpn/easy-rsa/keys/lvpsbl.crt
/etc/openvpn/easy-rsa/keys/lvpsbl.key

Создайте конфигурационный файл, например lvpsbl.ovpn и изменить настройки сертификатов (включите указанные выше файлы:

В строке «имя удаленного хоста 1194 (remote hostname 1194)» измените «хост» с вашим VPS хостом и с соответствующим сертификатом.
Также изменить настройки SSL в случае, если вы использовали другое имя для клиентских сертификатов:

#Простой config файл

client
dev tun

# необходим имя адаптера для TAP-Win32 
# С панели Сетевые подключения
# Если у вас есть больше чем один. На XP SP2,
# Вам может понадобиться отключить брандмауэр
# для адаптера TAP.
;dev-node MyTap
# Ли мы подключились к TCP или 
# UDP сервер? Используйте те же настройки, как
# как на server-е.
;proto tcp
proto udp

# Имя\ИП hostname/IP и порт сервера.
# Вы можете иметь несколько удаленных записей 
# Для балансировки нагрузки между серверами.
remote hostname 1194
;remote my-server-2 1194

#  Выбрать случайный host с удаленного
# Списка для балансировки нагрузки. в противном случае 
# Попробовать hosts в указанном порядке.
;remote-random
resolv-retry infinite

# Большинство клиентов не нужно связываться с            
# Конкретным номером локального порта.
nobind
;user nobody
;group nobody

# Старайтесь сохранить некоторое состояние при перезапуске.
persist-key
persist-tun

;http-proxy-retry # retry on connection failures
;http-proxy [proxy server] [proxy port #]
;mute-replay-warnings

# SSL/TLS сертификаты.
ca ca.crt
cert ilvpsbl.crt
key lvpsbl.key

# Verify server certificate by checking
ns-cert-type server
# If a tls-auth key is used on the server
# then every client must also have the key.
;tls-auth ta.key 1
# Select a cryptographic cipher.
# If the cipher option is used on the server
# then you must also specify it here.
;cipher x
# Enable compression on the VPN link.
# Don’t enable this unless it is also
# enabled in the server config file.
comp-lzo
# Set log file verbosity.
verb 3
# Silence repeating messages
;mute 20

Когда это будет сделано, импортируйте файлы клиента в ваш любимый клиент OpenVPN и все должно быть готовы к работе.
Для проверки соединения можно попробовать проверить связь с сервером локально (192.168.244.1) или подключиться к интернету через веб-браузер.

Как установить и настроить OpenVPN на OpenVZ полностью раскрыта.

The post Как установить и настроить OpenVPN на OpenVZ first appeared on linux-notes.org.]]>
https://linux-notes.org/kak-ustanovit-i-nastroit-openvpn-na-openvz/feed/ 2