вторник, 12 ноября 2019 г.

Лучшие ссылки lxd

Перевод: Стефан Грабер (Stéphane Graber) автор серии статей про LXC.
Stéphane Graber's website Skip to content
форум Linux Containers
Блог simos
The LXD tutorials of Simos
Linux FAQs with Answers
Linux-контейнеры дома: зачем и как
LXD, ZFS и мостовые сети в Ubuntu 16.04 LTS +
Ubuntu 18.04 LXD / LXC, ZFS, Docker и расширенные сети
How to set the timezone in LXD containers
How to make your LXD containers get IP addresses from your LAN using macvlan
Соединение хост-контейнер с мостом Macvlan
LXC и macvlan, хост-соединение для гостя
Giving the host a macvlan
Production setup
Оркестрация проектов с помощью менеджера контейнеров LXD
Маршрутизация LXC и доступ к контейнерам по SSH
Работа с бэкапами контейнеров
Проброс USB-принтера в контейнер LXD
cyberciti.biz
ww.cyberciti.biz Tag: LXD 

How to add multi-line raw.lxc configuration to LXD

понедельник, 11 ноября 2019 г.

lxd update-binfmts: warning: unable to open /proc/sys/fs/binfmt_misc/status for writing: Permission denied

Unable to access /sys/kernel in privileged container #2661

AppArmor


update-binfmts: warning: unable to open /proc/sys/fs/binfmt_misc/status for writing: Permission denied


lxc config edit test

lxc.apparmor.profile = unconfined

lxd debian 10 сборка PostgreSQL 11.5 (По Олегу Харину)

Платформа 8.3 → Тестирование PostgreSQL, версия 10.8-13.1C 8.3.15.1565 ubuntu

$ lxc image list images: > 1.txt
$ lxc launch images:debian/10 deb10harin
$ lxc list
$ lxc config set deb10harin security.privileged true
$ lxc restart deb10harin
$ lxc exec deb10harin /bin/bash
# passwd
# adduser builder
# usermod -aG sudo builder

# apt update
# apt upgrade
# apt install qemu-user-static -y
# apt install mc samba sudo ssh wget -y
## locale-gen ru_RU.UTF-8
## timedatectl set-timezone Europe/Moscow
# dpkg-reconfigure tzdata
## nano /etc/hosts##127.0.0.1 localhost test
Сохранить.
# exit
$ lxc stop deb10harin
$ lxc copy deb10harin deb10har

$ lxc start deb10harin
$ lxc list
+------------+---------+---------------------+------+------------+-----------+
| deb10harin | RUNNING | 192.168.0.85 (eth0) |      | PERSISTENT | 0         |
+------------+---------+---------------------+------+------------+-----------+


Соединяемся по ssh builder@192.168.0.85

Последовательность сборки по шагам (работаем под пользователем не root):

  1. Ставим необходимые общие пакеты для сборки:
    $ sudo apt-get install build-essential fakeroot devscripts -y
    $ wget http://apt.postgresql.org/pub/repos/apt/pool/main/p/postgresql-11/postgresql-11_11.5.orig.tar.bz2
  2. Распаковываем приложенный архив для сборки PostgreSQL:
    $ mkdir postgresql-11_11.5-1.1C
    $ cd postgresql-11_11.5-1.1C
  3. Копируем:
    $ cp ~/postgresql-11_11.5-1.1C.opt.dsc .
    $ cp ~/postgresql-11_11.5-1.1C.opt.debian.tar.xz .
    $ cp ~/postgresql-11_11.5.orig.tar.bz2 .
  4. Распаковываем и накладываем патчи:
    $ dpkg-source -x postgresql-11_11.5-1.1C.opt.dsc
  5. Переходим в каталог сборки:
    $ cd postgresql-11-11.5
  6. Устанавливаем пакеты, необходимые для сборки PostgreSQL:
    $ sudo mk-build-deps -i
    1. - для Ubuntu-сервер потребовалось ещё предварительно установить пакет equivs (для Debian нет надобности):
        $ sudo apt-get install equivs
  7. Запускаем сборку:
    $ debuild -b -uc -us
Если всё проходит нормально, то получаем в каталоге postgresql-11_11.5-1.1C файлы *.deb.
Пакуем в postgresql-11_11.5-1.1C.tar.gz



$ grep -i failed build/src/test/regress/regression.out

# ls -w 1
libecpg-compat3-dbgsym_11.5-1.1C.opt_amd64.deb
libecpg-compat3_11.5-1.1C.opt_amd64.deb
libecpg-dev-dbgsym_11.5-1.1C.opt_amd64.deb
libecpg-dev_11.5-1.1C.opt_amd64.deb
libecpg6-dbgsym_11.5-1.1C.opt_amd64.deb
libecpg6_11.5-1.1C.opt_amd64.deb
libpgtypes3-dbgsym_11.5-1.1C.opt_amd64.deb
libpgtypes3_11.5-1.1C.opt_amd64.deb
libpq-dev_11.5-1.1C.opt_amd64.deb
libpq5-dbgsym_11.5-1.1C.opt_amd64.deb
libpq5_11.5-1.1C.opt_amd64.deb
postgresql-11-dbgsym_11.5-1.1C.opt_amd64.deb
postgresql-11_11.5-1.1C.opt_amd64.deb
postgresql-client-11-dbgsym_11.5-1.1C.opt_amd64.deb
postgresql-client-11_11.5-1.1C.opt_amd64.deb
postgresql-doc-11_11.5-1.1C.opt_all.deb
postgresql-plperl-11-dbgsym_11.5-1.1C.opt_amd64.deb
postgresql-plperl-11_11.5-1.1C.opt_amd64.deb
postgresql-plpython-11-dbgsym_11.5-1.1C.opt_amd64.deb
postgresql-plpython-11_11.5-1.1C.opt_amd64.deb
postgresql-plpython3-11-dbgsym_11.5-1.1C.opt_amd64.deb
postgresql-plpython3-11_11.5-1.1C.opt_amd64.deb
postgresql-pltcl-11-dbgsym_11.5-1.1C.opt_amd64.deb
postgresql-pltcl-11_11.5-1.1C.opt_amd64.deb
postgresql-server-dev-11-dbgsym_11.5-1.1C.opt_amd64.deb
postgresql-server-dev-11_11.5-1.1C.opt_amd64.deb

Установка в контейнер debian

Можно создать новый контейнер:
 

$ lxc launch images:debian/10 debian
$ lxc config set debian security.privileged true
$ lxc restart debian
$ lxc exec debian /bin/bash
# passwd
# adduser user
# usermod -aG sudo user
# apt update
# apt upgrade
# apt install qemu-user-static -y
# apt install mc samba sudo ssh wget -y
# locale-gen ru_RU.UTF-8
## timedatectl set-timezone Europe/Moscow
# dpkg-reconfigure tzdata 
# service cron restart
## nano /etc/hosts
##127.0.0.1 localhost test
Сохранить.
# exit
$ lxc restart debian
$ lxc list
+--------+---------+----------------------+------+------------+-----------+
| debian | RUNNING | 192.168.0.169 (eth0) |      | PERSISTENT | 0         |
+--------+---------+----------------------+------+------------+-----------+
$ scp deb.tar.gz user@192.168.0.169:/home/user

Или использовать существующий:

$ lxc copy deb10har debpg
$ lxc start debpg

Соединяемся по ssh user@192.168.0.169
=============================
В случае существующего
Соединяемся по ssh builder@192.168.0.169
$ sudo adduser user
$ sudo usermod -aG sudo user
=============================

$ ssh user@192.168.0.169
#$ sudo apt search postgresql-common
$ wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
$ sudo apt-get update
#$ sudo apt search postgresql-common
$ sudo apt install libxslt1.1
$ sudo apt-get install libpython3.7 clang-7 llvm-7-dev libtcl8.6 -y
$ sudo apt-get install postgresql-common  postgresql-client-common -y 
$ tar xvzf postgresql-11_11.5-1.1C.tar.gz
$ cd postgresql-11_11.5-1.1C
$ rm *plpython*.deb
$ sudo dpkg -i *.deb
$ locale-gen ru_RU.utf8
$ sudo dpkg-reconfigure locales
# Выбираем ru_RU.UTF-8
$ locale -a 
$ sudo pg_dropcluster --stop 11 main
$ sudo pg_createcluster --locale ru_RU.utf8 11 main --  --data-checksums
$ sudo pg_ctlcluster 11 main start
$ sudo -u postgres psql -U postgres -c "alter user postgres with password 'pass';"
$ sudo pg_ctlcluster 11 main stop 
$ sudo apt install nano
$ sudo nano /etc/postgresql/11/main/postgresql.conf

Добавить в конец

# DB Version: 11
# OS Type: linux
# DB Type: oltp
# Total Memory (RAM): 16 GB
# Data Storage: ssd

max_connections = 1000
shared_buffers = 4GB
temp_buffers = 256MB
work_mem = 64MB
effective_cache_size = 8GB # 4GB for 1c
maintenance_work_mem = 1GB
wal_buffers = 16MB
min_wal_size = 2GB
max_wal_size = 4GB

default_statistics_target = 100
effective_io_concurrency = 2
random_page_cost = 1.1
autovacuum = on
autovacuum_max_workers = 4
autovacuum_naptime = 20s
bgwriter_delay = 20ms
bgwriter_lru_multiplier = 4.0
bgwriter_lru_maxpages = 400
synchronous_commit = off
checkpoint_completion_target = 0.9
ssl = off
fsync = on
commit_delay = 1000
commit_siblings = 5
row_security = off
max_files_per_process = 1000
standard_conforming_strings = off
escape_string_warning = off
max_locks_per_transaction = 256
#log_min_duration_statement = 0
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,client=%h '
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 0
#log_autovacuum_min_duration = 0
#log_duration = on
#log_statement = all
log_destination = stderr
plantuner.fix_empty_table = 'on'
online_analyze.table_type = 'temporary'
online_analyze.verbose = 'off'

Сохранить.

$ sudo pg_ctlcluster 11 main start 

Выход.
$ exit
$ lxc stop debpg
$ lxc copy debpg debpg-cop
$ lxc start debpg
Начинаем испытания.








воскресенье, 10 ноября 2019 г.

Перенос Elastix 2.5 из VirtualBox в контейнер lxd

Syntax for using tar command over ssh
Команды, соответствующие rsync
Настройка сервера VoIP Asterisk на PBX Elastix (CentOS) - Часть 1
Настраиваем IP адресацию в Elastix/Centos


# cd /
# getfacl -R / > acl.save
 

$ lxc launch images:centos/6 elastix
$ lxc config set elastix security.privileged true
$ lxc stop elastix

Удалить файловую систему контейнера:
$ sudo rm -rf /var/lib/lxd/containers/elastix/rootfs/* 
# rsync -zav root@192.168.1.184:/  /var/lib/lxd/containers/elastix/rootfs/

$ lxc start elastix
$ lxc list

$ lxc exec elastix /bin/bash
Внутри контейнера восстановить права
# cd /
# setfacl --restore=acl.save
# exit
Перезапустить контейнер
$ lxc restart elastix
$ lxc list

# service network restart
Shutting down interface eth0:  Device eth0 has MAC address 00:16:3E:63:D4:25, instead of configured address 08:00:27:3C:AB:E7. Ignoring.

192.168.1.111
# nano /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
HOSTNAME=elastix
NM_CONTROLLED=no
TYPE=Ethernet
MTU=
DHCP_HOSTNAME=`hostname`


# service sshd start

Итог, сеть заработала, но дальше пока не завелось.


Сделать резервную копию контейнера lxd и установить его на другом сервере

Сделайте резервную копию контейнера и установите его на другом сервере

Say you have a container called “blah”. For backup as an image tarball, you’d do:
  • lxc snapshot blah backup
  • lxc publish blah/backup --alias blah-backup
  • lxc image export blah-backup .
  • lxc image delete blah-backup
Which will get you a tarball in your current directory.
To restore and create a container from it, you can then do:
  • lxc image import TARBALL-NAME --alias blah-backup
  • lxc launch blah-backup some-container-name
  • lxc image delete blah-backup
 Скрипт:

$ nano backup_lxd.sh

#!/usr/bin/env bash
set -ex

BACKUP_DIR=~/backup
HOSTS=$(lxc list -c n --format csv)
for HOST in ${HOSTS}

do
    BACKUP_NAME=${HOST}-$(date +"%Y-%m-%d")

    lxc snapshot ${HOST} auto-backup
    lxc publish ${HOST}/auto-backup --alias ${BACKUP_NAME}
    lxc image export ${BACKUP_NAME} ${BACKUP_DIR}/${BACKUP_NAME}.tar.gz
    lxc image delete ${BACKUP_NAME}
    lxc delete ${HOST}/auto-backup
done

Сохранить.

$ sh backup_lxd.sh

+ date +%Y-%m-%d
+ BACKUP_NAME=ud1804-2019-11-10
+ lxc snapshot ud1804 auto-backup
+ lxc publish ud1804/auto-backup --alias ud1804-2019-11-10
Контейнер публикуется с отпечатком: b900ce0db69f0a57afd52af682f8a47229b5ea8fcdfa2a566af2034a6f6766a2
+ lxc image export ud1804-2019-11-10 /home/user/backup/ud1804-2019-11-10.tar.gz
Image exported successfully!
+ lxc image delete ud1804-2019-11-10
+ lxc delete ud1804/auto-backup

Восстановление на другом компьютере:

$ lxc image import ud1804-2019-11-10.tar.gz.tar.gz --alias ud1804-backup
Образ, импортирован с снимком: b900ce0db69f0a57afd52af682f8a47229b5ea8fcdfa2a566af2034a6f6766a2
$ lxc launch ud1804-backup ud1804
#lxc image delete ud1804-backup

Перенос Ubuntu 18.04 desktop из VirtualBox в контейнер lxd

Расширение прав в Linux с помощью Posix ACL
На  Ubuntu 18.04 desktop:
 
$ sudo apt install acl
$ sudo -i
# cd /
# getfacl -R / > acl.save



Действия на хосте с lxd
Остановить Ubuntu 18.04 desktop  (который хотим перенести)
средствами virtualbox клонировать диск,
средствами virtualbox подключить клонировонанный диск к системе с lxd
Запустить систему с lxd
Примонтировать диск
$ sudo mount /dev/sdb1 /mnt/


Создаем контейнер ud1804



$ lxc launch ubuntu:18.04 ud1804
$ lxc config set ud1804 security.privileged true
$ lxc stop ud1804

Удалить файловую систему контейнера:
$ sudo rm -rf /var/lib/lxd/containers/ud1804/rootfs/*
$ sudo -i
Примонтировать файловую систему переносимого Ubuntu 18.04 desktop
# sudo mount /dev/sdb1 /mnt/
# cd /mnt
Скопировать файловую систему в контейнер
# cp -R * /var/lib/lxd/containers/ud1804/rootfs/
# exit
$ lxc start ud1804
$ lxc list

$ lxc exec ud1804 /bin/bash
Внутри контейнера восстановить права
# cd /
# setfacl --restore=acl.save
# exit
Перезапустить контейнер
$ lxc restart ud1804

Зайти по ssh:
Скачать nomachine
$ wget https://download.nomachine.com/download/6.8/Linux/nomachine_6.8.1_1_amd64.deb
$ sudo dpkg -i nomachine_6.8.1_1_amd64.deb

Зайти по nomachine.

Перенос на другой сервер с lxd
$ nano backup_lxd.sh

#!/usr/bin/env bash
set -ex

BACKUP_DIR=~/backup
HOSTS=$(lxc list -c n --format csv)
for HOST in ${HOSTS}

do
    BACKUP_NAME=${HOST}-$(date +"%Y-%m-%d")

    lxc snapshot ${HOST} auto-backup
    lxc publish ${HOST}/auto-backup --alias ${BACKUP_NAME}
    lxc image export ${BACKUP_NAME} ${BACKUP_DIR}/${BACKUP_NAME}.tar.gz
    lxc image delete ${BACKUP_NAME}
    lxc delete ${HOST}/auto-backup
done

Сохранить.

$ sh backup_lxd.sh

+ date +%Y-%m-%d
+ BACKUP_NAME=ud1804-2019-11-10
+ lxc snapshot ud1804 auto-backup
+ lxc publish ud1804/auto-backup --alias ud1804-2019-11-10
Контейнер публикуется с отпечатком: b900ce0db69f0a57afd52af682f8a47229b5ea8fcdfa2a566af2034a6f6766a2
+ lxc image export ud1804-2019-11-10 /home/user/backup/ud1804-2019-11-10.tar.gz
Image exported successfully!
+ lxc image delete ud1804-2019-11-10
+ lxc delete ud1804/auto-backup

Восстановление на другом компьютере:

$ lxc image import ud1804-2019-11-10.tar.gz.tar.gz --alias ud1804-backup
Образ, импортирован с снимком: b900ce0db69f0a57afd52af682f8a47229b5ea8fcdfa2a566af2034a6f6766a2
$ lxc launch ud1804-backup ud1804
#lxc image delete ud1804-backup


$ lxc snapshot test auto-backup
$ lxc publish test/auto-backup --alias test-2019-11-12
Контейнер публикуется с отпечатком: f442e1c60b9c1353f3d665a61e67bb7c13d383fe65af530fbe7f482699233d56
$ lxc image export test-2019-11-12 /home/user/backup/test-2019-11-12.tar.gz