imported>Supportadmin |
imported>Supportadmin |
Строка 1: |
Строка 1: |
| [https://www.google.ru Источник]
| | За последние пару лет, а сейчас январь 2018, в JS появилось столько всего нового и это в стольких местах описано. Пора собрать в кучу весь поток сознания. |
| === Настройка GRUB для LXC=== | | ==Объявления переменных let и const == |
| В /etc/default/grub изменить параметр
| | [https://learn.javascript.ru/let-const Теория] |
| <nowiki>
| | [https://jsperf.com/let-vs-var-performance/93 Тесты] |
| GRUB_CMDLINE_LINUX="cgroup_enable=memory"
| |
| </nowiki>
| |
| Хотя официально [https://wiki.debian.org/LXC] сказано, что делать ничего не надо.
| |
|
| |
|
| === Настройка ядра для LXC ===
| | Вывод: никакого существенного изменения производительности не несут. Вопрос в обратной совместимости кода. |
| В /etc/sysctl.conf [https://habrahabr.ru/post/120717/]
| |
| <nowiki>
| |
| net.ipv4.ip_forward=1
| |
| net.ipv4.conf.all.forwarding=1
| |
| net.ipv4.conf.all.proxy_arp=1
| |
| </nowiki>
| |
| | |
| grub_updare, reboot
| |
| | |
| === Настройка сети для LXC ===
| |
| На хост-машине:
| |
| | |
| <nowiki>
| |
| apt-get install bridge-utils
| |
| </nowiki>
| |
| | |
| Если планируется использовать виртуальные сети, дополнительно:
| |
| | |
| <nowiki>
| |
| apt-get install vlan
| |
| </nowiki>
| |
| | |
| В /etc/network/interfaces:
| |
| <nowiki>
| |
| #allow-hotplug eth0
| |
| #auto eth0
| |
| #iface eth0 inet static
| |
| | |
| | |
| auto br0
| |
| iface br0 inet static
| |
| address 192.168.150.30
| |
| netmask 255.255.255.0
| |
| network 192.168.150.0
| |
| broadcast 192.168.150.255
| |
| gateway 192.168.150.1
| |
| dns-nameservers 192.168.150.1
| |
| bridge_ports eth0
| |
| bridge_fd 0
| |
| bridge_maxwait 0</nowiki>
| |
| | |
| === Создание контейнера ===
| |
| Создаем контейнер [https://wiki.debian.org/LXC#RootFS_creation]
| |
| | |
| <nowiki>lxc-create -t debian -n nodejs</nowiki>
| |
| | |
| Сразу меняем пароль root на свой.
| |
| | |
| <nowiki>
| |
| старт в режиме консоли (не очень удобно, точнее вообще неудобно)
| |
| | |
| lxc-start -n nodejs
| |
| | |
| или старт в режиме демона и присоединяется к консоли контейнера, для выхода из консоли exit
| |
| | |
| lxc-start -dn nodejs
| |
| lxc-attach -n nodejs
| |
| </nowiki>
| |
| ===Настройка параметров контейнера===
| |
| Конфигурируем контейнер /var/lib/lxc/nodejs/config. Обязательно обратить внимание на lxc.network.veth.pair [http://xgu.ru/wiki/LXC] - это имя интерфейса в хост машине. [https://wiki.debian.org/LXC Здесь] про это не сказано, и работать с сетью сможет только один контейнер.
| |
| | |
| <nowiki>
| |
| | |
| lxc.rootfs = /var/lib/lxc/nodejs/rootfs
| |
| lxc.include = /usr/share/lxc/config/debian.common.conf
| |
| lxc.mount = /var/lib/lxc/nodejs/fstab
| |
| lxc.utsname = nodejs
| |
| lxc.arch = amd64
| |
| lxc.autodev = 1
| |
| lxc.kmsg = 0
| |
| | |
| #Количество /dev/tty
| |
| lxc.tty = 6
| |
| | |
| # Autostart
| |
| lxc.start.auto = 1
| |
| lxc.start.delay = 5
| |
| lxc.start.order = 100
| |
| | |
| # eth0
| |
| | |
| lxc.network.type = veth
| |
| lxc.network.flags = up
| |
| lxc.network.link = br0
| |
| lxc.network.veth.pair= br0-1
| |
| lxc.network.name = eth0
| |
| lxc.network.hwaddr = 00:11:12:00:88:99
| |
| | |
| #mount папка на хост-машине папка в контейнере, относительно хост-машины
| |
| #lxc.mount.entry = /home/debs /var/lib/lxc/nodejs/rootfs/home/debs none bind 0 0
| |
| </nowiki>
| |
| | |
| === Настройка параметров сети внутри LXC контейнера===
| |
| Настраиваем сеть не через конфигурацию, а в контейнере (можно и так, и так) /var/lib/lxc/nodejs/rootfs/etc/network/interfaces
| |
| <nowiki>
| |
| # The loopback network interface
| |
| auto lo
| |
| iface lo inet loopback
| |
| | |
| # The primary network interfac
| |
| | |
| allow-hotplug eth0
| |
| auto eth0
| |
| iface eth0 inet static
| |
| address 192.168.150.33
| |
| netmask 255.255.255.0
| |
| network 192.168.150.0
| |
| broadcast 192.168.150.255
| |
| gateway 192.168.150.1
| |
| dns-nameservers 192.168.150.1
| |
| </nowiki>
| |
| | |
| === Настройка репозитариев и обустройство контейнера ===
| |
| Правим /var/lib/lxc/nodejs/rootfs/etc/apt/sources.list
| |
| <nowiki>
| |
| #deb file:/home/debs /
| |
| deb http://mirror.mephi.ru/debian/ jessie main
| |
| deb-src http://mirror.mephi.ru/debian/ jessie main
| |
| | |
| deb http://security.debian.org/ jessie/updates main contrib
| |
| deb-src http://security.debian.org/ jessie/updates main contrib
| |
| | |
| # jessie-updates, previously known as 'volatile'
| |
| deb http://mirror.mephi.ru/debian/ jessie-updates main contrib
| |
| deb-src http://mirror.mephi.ru/debian/ jessie-updates main contrib
| |
| | |
| deb http://ftp.ru.debian.org/debian/ jessie main contrib non-free
| |
| deb http://http.debian.net/debian jessie-backports main contrib non-free
| |
| | |
| #deb http://www.deb-multimedia.org jessie main non-free
| |
| #deb http://www.deb-multimedia.org jessie-backports main
| |
| | |
| | |
| </nowiki>
| |
| | |
| Изначально контейнер пустой (установлено 136 пакетов). Даже ping отсутствует.
| |
| <nowiki>
| |
| apt-get update
| |
| apt-get install aptitude apt-utils mc ssh iputils-ping iptables cron wget
| |
| </nowiki>
| |
| | |
| === Если нет сети в LXC контейнере ===
| |
| Если интернета в контейнере не появилось, ping отсутствует, то как вариант можно создать локальный репозитарий, подмонтировать его в контейнер, в sources.list добавить ссылку на него и поставить bind9 и resolvconf.
| |
| * качаем один или все три установочные диска с [https://www.debian.org/CD/http-ftp/ сайта]
| |
| * создаем папку на хост-машине /home/debs
| |
| * из каталога pool каждого диска копируем в /home/debs каталоги main и contrib
| |
| * создаем индекс репозитория
| |
| <nowiki>
| |
| cd /home/debs
| |
| dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
| |
| </nowiki>
| |
| * В sources.list контейнера добавить первой строкой (остальные #)
| |
| <nowiki>
| |
| deb file:/home/debs /
| |
| </nowiki>
| |
| * В конфигурацию контейнера добавить
| |
| <nowiki>
| |
| lxc.mount.entry = /home/debs /var/lib/lxc/nodejs/rootfs/home/debs none bind 0 0
| |
| </nowiki>
| |
| * Запустить контейнер и в нем поставить пакеты
| |
| <nowiki>
| |
| lxc-start -dn nodejs
| |
| lxc-attach -n nodejs
| |
| apt-get update
| |
| apt-get install aptitude apt-utils mc ssh iputils-ping iptables cron wget resolvconf
| |
| apt-get install bind9
| |
| exit
| |
| lxc-stop -n nodejs
| |
| lxc-start -dn nodejs
| |
| </nowiki>
| |
| После этого, при правильном конфигурировании gateway и dns-nameservers все должно заработать
| |
| | |
| | |
| === Настройка vlan для LXC ===
| |
| Пример для двух vlan. На хост-машине /etc/network/interfaces:
| |
| <nowiki>
| |
| auto lo
| |
| iface lo inet loopback
| |
| | |
| auto eth0.1
| |
| iface eth0.1 inet manual
| |
| vlan_raw_device eth0
| |
| | |
| auto eth0.2
| |
| iface eth0.2 inet manual
| |
| vlan_raw_device eth0
| |
| | |
| ######### Интерфейсы для хост-машины
| |
| auto br0_1
| |
| iface br0_1 inet static
| |
| address 192.168.10.90
| |
| netmask 255.255.255.0
| |
| broadcast 192.168.102.255
| |
| bridge_ports eth0.1
| |
| bridge_fd 0
| |
| bridge_maxwait 0
| |
| | |
| auto br0_2
| |
| iface br0_2 inet static
| |
| address 9.23.3.169
| |
| netmask 255.255.255.128
| |
| network 9.23.3.128
| |
| broadcast 9.23.3.255
| |
| gateway 9.23.3.129
| |
| dns-nameservers 9.23.3.13 9.23.4.2
| |
| bridge_ports eth0.2
| |
| bridge_fd 0
| |
| bridge_maxwait 0
| |
| </nowiki>
| |
| | |
| Настройки контейнера:
| |
|
| |
| <nowiki>
| |
| lxc.rootfs = /var/lib/lxc/nodejs/rootfs
| |
| lxc.include = /usr/share/lxc/config/debian.common.conf
| |
| lxc.mount = /var/lib/lxc/nodejs/fstab
| |
| lxc.utsname = nodejs
| |
| lxc.arch = amd64
| |
| lxc.autodev = 1
| |
| lxc.kmsg = 0
| |
| | |
| #Количество /dev/tty
| |
| lxc.tty = 6
| |
| | |
| # Autostart
| |
| lxc.start.auto = 1
| |
| lxc.start.delay = 5
| |
| lxc.start.order = 100
| |
| | |
| | |
| # eth0
| |
| lxc.network.type = veth
| |
| lxc.network.flags = up
| |
| lxc.network.link = br0_1
| |
| # имя устройства внутри контейнера
| |
| lxc.network.name = eth0
| |
| lxc.network.veth.pair= br0_1-1
| |
| lxc.network.hwaddr = 00:11:22:33:88:99
| |
| | |
| # eth1
| |
| | |
| lxc.network.type = veth
| |
| lxc.network.flags = up
| |
| lxc.network.link = br0_2
| |
| lxc.network.veth.pair= br0_2-1
| |
| # имя устройства внутри контейнера
| |
| lxc.network.name = eth1
| |
| lxc.network.hwaddr = 00:11:62:77:88:00
| |
| </nowiki>
| |
| | |
| В контейнере /etc/network/interfaces:
| |
| | |
| <nowiki>
| |
| auto lo
| |
| iface lo inet loopback
| |
| | |
| auto eth0
| |
| iface eth0 inet static
| |
| address 192.168.102.91
| |
| netmask 255.255.255.0
| |
| broadcast 192.168.102.255
| |
| | |
| auto eth1
| |
| iface eth1 inet static
| |
| address 9.23.3.170
| |
| netmask 255.255.255.128
| |
| network 9.23.3.128
| |
| broadcast 9.23.3.255
| |
| gateway 9.23.3.129
| |
| dns-nameservers 9.23.3.13 9.23.4.2
| |
| </nowiki>
| |
| | |
| | |
| Для каждого следующего контейнера меняется в конфигурации имя устройства например так:
| |
| <nowiki>
| |
| lxc.network.veth.pair= br0_1-1
| |
| lxc.network.veth.pair= br0_2-1
| |
| </nowiki>
| |
| следующий контейнер
| |
| <nowiki>
| |
| lxc.network.veth.pair= br0_1-2
| |
| lxc.network.veth.pair= br0_2-2
| |
| </nowiki>
| |
| Главное, чтобы не совпадали имена интерфейсов, создаваемых на хост-машине. Количество мостов соответствует количеству vlan. По одному на каждый vlan.
| |