Показаны сообщения с ярлыком lxd. Показать все сообщения
Показаны сообщения с ярлыком lxd. Показать все сообщения

суббота, 22 февраля 2020 г.

Перенос OpenVPN в lxd

Настройка OpenVPN c stunnel Ubuntu 16.04 хостера DO  
 
lxc launch ubuntu:16.04 ovpn 
lxc stop ovpn 
 
lxc config device add ovpn myport2194 proxy listen=tcp:0.0.0.0:2194 \
connect=tcp:localhost:2194 
 
lxc config set ovpn raw.lxc 'lxc.cgroup.devices.allow = c 10:200 rwm' 
lxc config device add ovpn tun unix-char path=/dev/net/tun 
lxc start ovpn 
lxc exec ovpn -- sudo --user ubuntu --login 
 
sudo nano /etc/hosts
Изменить:
127.0.0.1 localhost ovpn
Сохранить. 
 
mknod /dev/net/tun c 10 200 
sudo apt update 
sudo apt upgrade -y 
sudo apt install mc cadaver -y 
sudo locale-gen en_US ru_RU en_US.UTF-8 ru_RU.UTF-8 
sudo timedatectl set-timezone Europe/Moscow 
sudo apt install openvpn -y 
 
#Центр сертификации ставить не будем, но поскольку не переносим старый
#больше сертификатов мы выпустить тоже не сможем
#sudo apt install openvpn easy-rsa -y
 
 
Скачать настройки OpenVPN
  
cadaver https://web2.domen.info/remote.php/webdav/
dav:/remote.php/webdav/> get openvpn.tar.gz
dav:/remote.php/webdav/> get openvpn.tar.gz
dav:/remote.php/webdav/> quit 
 
Скопируем из архива:


ccd ca.crt  ca.key  ccd  dh2048.pem  ipp.txt
server.conf  server.crt  server.key  ta.key  update-resolv-conf


в /etc/openvpn/
 
 
sudo nano /lib/systemd/system/openvpn@.service
Закомментируем:
#LimitNPROC=10
Сохранить.
sudo systemctl daemon-reload
sudo systemctl enable openvpn@server.service
sudo systemctl start openvpn@server.service
 
 
nano start.sh
#!/bin/bash
#Небольшой тюнинг:
sudo /bin/su -c "echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'net.ipv6.conf.default.disable_ipv6 = 1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'net.ipv6.conf.lo.disable_ipv6 = 1' >> /etc/sysctl.conf"
sudo  /bin/su -c "echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf"
sudo sysctl -p
sudo  systemctl restart networking.service
Сохранить.

sudo sh start.sh

Делаем сеть 10.8.20.0/24 
 
Если нужна маршрутизация интернета делаем nat 
sudo nano /etc/rc.local

добавляем строки до exit 0

iptables -A FORWARD -s 10.8.20.0/24 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.20.0/24 -o eth0 -j MASQUERADE

сохраняем

sudo nano/etc/openvpn/server.conf

Заменить:
port 2194
server 10.8.20.0 255.255.255.0

Для проброса интернета:

Раскомментировать:
push "redirect-gateway def1"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

Сохранить.

Для задания статического ip
в файлах клиентов:
sudo nano /etc/openvpn/ccd/client1
заменить ip
ifconfig-push 10.8.20.2 255.255.255.0
Сохранить.

sudo poweroff

lxc start ovpn

В файле клиента
remote 188.130.240.10 2194
dev-node 'Ethernet 5' 


mkdir ~/backup/
nano ~/backup_ovpn_lxd.sh 

Добавить:

#!/usr/bin/env bash
set -ex
lxc stop ovpn
BACKUP_DIR=/home/user/backup
#HOSTS=$(lxc list -c n --format csv)
HOSTS=ovpn
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 export ${BACKUP_NAME} ${BACKUP_DIR}/${BACKUP_NAME}
    lxc image delete ${BACKUP_NAME}
    lxc delete ${HOST}/auto-backup
done
lxc start ovpn

Сохранить.

chmod +x ~/backup_ovpn_lxd.sh
./backup_ovpn_lxd.sh


backup контейнера
ovpn-2020-02-22.tar.gz
 
Теперь на другой сервер будет переноситься очень просто:
 
Перенос на другой сервер
lxc image import ovpn-2020-02-22.tar.gz --alias ovpn-ip
lxc launch ovpn-ip ovpn-ip
lxc image delete ovpn-ip
lxc stop ovpn-ip
lxc config device add ovpn-ip myport2194 proxy listen=tcp:0.0.0.0:2194 connect=tcp:localhost:2194
lxc config set ovpn-ip raw.lxc 'lxc.cgroup.devices.allow = c 10:200 rwm'
lxc config device add ovpn-ip tun unix-char path=/dev/net/tun
lxc start ovpn-ip
 

Установка и настройка Pure-FTPD (Pure FTP) внутри контейнера

 
sudo apt install pure-ftpd -y
sudo groupadd ftpgroup
sudo useradd -g ftpgroup -d /dev/null -s /etc ftpuser
sudo passwd ftpuser
12345
12345
sudo mkdir /home/ftpuser/
sudo chown -R ftpuser:ftpgroup /home/ftpuser
sudo ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/50pure
sudo mkdir -p /home/ftpuser/test/client
sudo mkdir -p /home/ftpuser/test/buh
sudo mkdir -p /home/ftpuser/test1
sudo chown -R ftpuser:ftpgroup /home/ftpuser
sudo pure-pw useradd test -u ftpuser -d /home/ftpuser/test
sudo pure-pw useradd test1 -u ftpuser -d /home/ftpuser/test1
#FTP, порты пассивного режима (иначе случайные):
#указать два порта на одного клиента. 
sudo su -c 'echo "50000 50010" > /etc/pure-ftpd/conf/PassivePortRange'
#Порты открываются независимо от ufw! (и iptables? )
#Работаем только по ip4
sudo su -c 'echo "yes" > /etc/pure-ftpd/conf/IPV4Only'
#"Человеческий лог после отладки убрать"
sudo su -c 'echo "yes" > /etc/pure-ftpd/conf/VerboseLog'
#В логе ip адреса вместо имен.
sudo su -c 'echo yes > /etc/pure-ftpd/conf/DontResolve'
!!! # echo "YOUR_EXTERNAL_IP_HERE" > /etc/pure-ftpd/conf/ForcePassiveIP 
sudo pure-pw mkdb
sudo service pure-ftpd restart
netstat -ln | grep :21
#копируем файлы на ftp
sudo chown -R ftpuser:ftpgroup /home/ftpuser  
 

четверг, 2 января 2020 г.

Установка DokuWiki в lxd

Install DokuWiki Wiki Software on Ubuntu 16.04 | 18.04 | 18.10 with Apache2, PHP 7.2
How to Install DokuWiki on Ubuntu 18.04 LTS
Установка DokuWiki
Установка DokuWiki на Debian/Ubuntu на Nginx с авторизацией LDAP (AD) и установкой плагинов
Как развернуть DokuWiki on Ubuntu 18.04 Server
Часто задаваемые вопросы


Запись А wiki.examle.com host  в DNS домена example.com

На хосте lxd :

$ lxc launch ubuntu:18.04 wiki
$ lxc exec wiki -- sudo --user ubuntu --login
$ sudo apt update
$ sudo apt upgrade
$ sudo locale-gen en_US ru_RU en_US.UTF-8 ru_RU.UTF-8
$ sudo timedatectl set-timezone Europe/Moscow
$ sudo apt install mc cadaver -y
$ sudo apt install apache2 -y
#$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:ondrej/php -y
$ sudo apt update
$ sudo apt install php7.2 libapache2-mod-php7.2 php7.2-common php7.2-mbstring php7.2-xmlrpc php7.2-sqlite3 php7.2-soap php7.2-gd php7.2-xml php7.2-cli php7.2-tidy php7.2-intl php7.2-json php7.2-curl php7.2-zip -y
$ sudo nano /etc/php/7.2/apache2/php.ini

memory_limit = 256M
upload_max_filesize = 100M
max_execution_time = 360
date.timezone = Europe/Moscow

$ sudo systemctl restart apache2.service

$ cd /var/www/html/
$ sudo git clone --branch stable https://github.com/splitbrain/dokuwiki.git
$ sudo chown -R www-data:www-data /var/www/html/dokuwiki/
$ sudo chmod -R 755 /var/www/html/dokuwiki/


Обратить внимание, запись А wiki.example.com host  в домен example.com
 ServerName wiki.example.com

$ sudo nano /etc/apache2/sites-available/dokuwiki.conf

<VirtualHost *:80>
     ServerAdmin admin@example.com
     DocumentRoot /var/www/html/dokuwiki
     ServerName wiki.example.com
     #ServerAlias www.example.com

     <Directory /var/www/html/dokuwiki/>
          Options FollowSymlinks
          AllowOverride All
          Require all granted
     </Directory>

     ErrorLog ${APACHE_LOG_DIR}/error.log
     CustomLog ${APACHE_LOG_DIR}/access.log combined

     <Directory /var/www/html/dokuwiki/>
            RewriteEngine on
            RewriteBase /
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^(.*) index.php [PT,L]
    </Directory>
</VirtualHost>

Сохранить.

$ sudo a2ensite dokuwiki.conf
$ sudo a2enmod rewrite

$ exit

$ lxc list
| wiki        | RUNNING | 10.91.219.37 (eth0)  |

Далее в контейнере haproxy:

$ lxc exec haproxy -- sudo --user ubuntu --login

$ sudo nano /etc/hosts

10.91.219.37 wiki.lxd

$ sudo nano /etc/haproxy/haproxy.cfg
...
acl host_wiki hdr(host) -i wiki.example.com
...
use_backend subdomain5 if host_wiki
...
acl web_wiki hdr(host) -i wiki.example.com
...
use_backend subdomain5 if web_wiki
...
backend subdomain5
balance leastconn
http-request set-header X-Client-IP %[src]
#redirect scheme https if !{ ssl_fc }
server wordpress wiki.lxd:80 check

Сохранить.

$ sudo systemctl restart haproxy

https://wiki.example.com/install.php

https://wiki.example.com/doku.php

После успешной установки:

$ lxc exec wiki -- sudo --user ubuntu --login
$ sudo rm /var/www/html/dokuwiki/install.php
$ exit

Настроим backup

$ nano /home/user/backup_wiki_lxd.sh

#!/usr/bin/env bash
set -ex
lxc stop wiki
BACKUP_DIR=/home/user/backup
#HOSTS=$(lxc list -c n --format csv)
HOSTS=wiki
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 export ${BACKUP_NAME} ${BACKUP_DIR}/${BACKUP_NAME}
    lxc image delete ${BACKUP_NAME}
    lxc delete ${HOST}/auto-backup
done
lxc start wiki

Сохранить.

$ chmod +x /home/user/backup_wiki_lxd.sh

$ crontab -e

00 4 * * * sh /home/user/backup_wiki_lxd.sh


Сохранить.



воскресенье, 22 декабря 2019 г.

Установка wordpress в контейнер lxd

lxd-wordpress
LXD now runs my WordPress
Get Docker Engine - Community for Ubuntu
[Ubuntu 18.04] 18.09.0 Docker на LXD 3.0.2 / 3.6 не работает


docker не работает в lxd !!!

$ lxc launch ubuntu:18.04 wordpress
#$ lxc config set wordpress linux.kernel_modules overlay
#$ lxc restart wordpress
$ lxc exec wordpress -- sudo --user ubuntu --login
$ sudo apt update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
 $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
$ sudo apt update
$ sudo apt-get install docker-ce=18.06.1~ce~3-0~ubuntu
Ниже не делаем (на lxd работать не будет) :
sudo apt-get install docker-ce docker-ce-cli containerd.io

$ sudo adduser $USER docker
$ sudo systemctl start docker
$ sudo systemctl enable docker
$ sudo mkdir -p /etc/systemd/system/containerd.service.d/
$ sudo nano /etc/systemd/system/containerd.service.d/override.conf
[Service]
ExecStartPre=
Сохранить
$ sudo systemctl daemon-reload.
$ sudo systemctl restart docker

$ sudo reboot
$ lxc exec wordpress -- sudo --user ubuntu --login
$ docker run --name some-wordpress -p 80:80 -d wordpress

$ docker stop some-wordpress
$ docker rm  some-wordpress

суббота, 21 декабря 2019 г.

Установка lxd на Ubuntu 19.10 server

$ sudo apt-get install bridge-utils -y
$ sudo nano  /etc/netplan/50-cloud-init.yaml

network:
  version: 2
  ethernets:
    enp0s3:
      dhcp4: no
      dhcp6: no
  bridges:
    br0:
      interfaces: [enp0s3]
      addresses: [192.168.1.247/24]
      gateway4: 192.168.1.1
      mtu: 1500
      nameservers:
        addresses: [8.8.8.8]
      parameters:
        stp: true
        forward-delay: 4
      dhcp4: no
      dhcp6: no

Сохранить.

$ sudo netplan generate
$ sudo netplan --debug apply

$ nano tuning.sh

#!/bin/bash
# отключим ipv6
sudo /bin/su -c "echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'net.ipv6.conf.default.disable_ipv6 = 1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'net.ipv6.conf.lo.disable_ipv6 = 1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo '#net.ipv4.ip_forward = 1' >> /etc/sysctl.conf"
#тюнинг postgresql
sudo /bin/su -c "echo 'vm.swappiness=1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'kernel.sched_migration_cost_ns = 5000000' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'kernel.sched_autogroup_enabled = 0' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'vm.dirty_background_bytes = 67108864' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'vm.dirty_bytes = 536870912' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'vm.zone_reclaim_mode = 0' >> /etc/sysctl.conf"
#lxd
sudo /bin/su -c "echo 'fs.inotify.max_queued_events = 1048576' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'fs.inotify.max_user_instances = 1048576' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'fs.inotify.max_user_watches = 1048576' >> /etc/sysctl.conf"
sudo sysctl -p


Сохранить.

$ sudo sh tuning.sh

$ sudo lxd init
Would you like to use LXD clustering? (yes/no) [default=no]:
Do you want to configure a new storage pool? (yes/no) [default=yes]:
Name of the new storage pool [default=default]:
Name of the storage backend to use (btrfs, ceph, dir, lvm, zfs) [default=zfs]:
Create a new ZFS pool? (yes/no) [default=yes]:
Would you like to use an existing block device? (yes/no) [default=no]:
Size in GB of the new loop device (1GB minimum) [default=100GB]:
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Would you like to create a new local network bridge? (yes/no) [default=yes]: no
Would you like to configure LXD to use an existing bridge or host interface? (yes/no) [default=no]: yes
Name of the existing bridge or host interface: br0
Would you like LXD to be available over the network? (yes/no) [default=no]:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:


$ sudo reboot

пятница, 13 декабря 2019 г.

Установка nextcloud в контейнер lxd

Putting the snap behind a reverse proxy
cadaver
How to download a file from owncloud with curl, wget

lxc launch ubuntu:18.04 web2
lxc exec web2 -- sudo --user ubuntu --login
sudo apt update
sudo apt upgrade
sudo apt install mc
sudo dpkg-reconfigure locales
sudo dpkg-reconfigure tzdata
sudo dpkg-reconfigure keyboard-configuration
sudo snap find nextcloud
sudo snap install nextcloud
exit
lxc list
| web2        | RUNNING | 10.91.211.95 (eth0)  |      | PERSISTENT | 0         |
lxc exec haproxy -- sudo --user ubuntu --login
sudo nano /etc/hosts
10.91.211.95 web2.lxd
Сохранить.
sudo reboot


lxc exec web2 -- sudo --user ubuntu --login
$ sudo nextcloud.occ config:system:set overwritehost --value="web2.mydomain.com"
$ sudo nextcloud.occ config:system:set overwriteprotocol --value="https"

https://web2.mydomain.com/remote.php/webdav/


sudo apt install cadaver
cadaver https://web2.mydomain.com/remote.php/webdav/

Использование cadaver в скриптах:

nano dl_8.3.15.1778.sh

#!/bin/bash
rm -f  ~/.netrc
cat > ~/.netrc <<EOF
machine web2.mydomain.com
login user
password password
EOF
chmod 600 ~/.netrc
rm -f  ~/setup-1c/dist/dat
cat > ~/setup-1c/dist/dat <<EOF
open https://web2.mydomain.com/remote.php/webdav/
ls
get postgresql_10.10_4.1C_amd64_deb.tar.bz2 postgresql_10.10_4.1C_amd64_deb.tar.bz2
get postgresql_11.5_7.1C_amd64_deb.tar.bz2 postgresql_11.5_7.1C_amd64_deb.tar.bz2
get client_8_3_15_1778.deb64.tar.gz client_8_3_15_1778.deb64.tar.gz
get deb64_8_3_15_1778.tar.gz deb64_8_3_15_1778.tar.gz
quit
EOF
cd ~/setup-1c/dist/
cadaver -r dat
rm -f  ~/.netrc
rm -f  ~/setup-1c/dist/dat
cd ~/setup-1c/scripts

Сохранить.

sh dl_8.3.15.1778.sh

$ curl -J -O https://.....
  • -J (use remote header name)
  • -O (use remote name)


воскресенье, 8 декабря 2019 г.

Using LXC/LXD Containers with HAProxy

LetsEncrypt с HAProxy
Using LXC/LXD Containers with HAProxy
Hosting multiple websites with containers and HAProxy
How to set up multiple secure (SSL/TLS, Qualys SSL Labs A+) websites using LXD containers
Обслуживание нескольких сайтов с помощью Nginx, HAProxy и LXD в Ubuntu 16.04
How to manage Let's Encrypt SSL/TLS certificates with certbot
Let's Encrypt: подстановочный сертификат с Certbot
Подстановочный сертификат Letsencrypt и запись GoDaddy _acme-challenge

Для  godaddy.com




$ lxc launch ubuntu:18.04 web1
$ lxc exec web1 -- sudo --user ubuntu --login
$ sudo apt update && sudo apt upgrade
$ sudo apt install apache2
$ sudo nano /var/www/html/index.html
Изменить строку 224
It works web1!
Сохранить.
$ sudo systemctl enable apache2
$ sudo systemctl start apache2

$ exit
$ curl 10.91.211.18 | grep web1
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 10923  100 10923    0     0  2666k      0 --:--:-- --:--:-- --:--:-- 2666k
          It works web1!
===============================================================
$ lxc launch ubuntu:18.04 web2
$ lxc exec web2 -- sudo --user ubuntu --login
$ sudo apt update && sudo apt upgrade
$ sudo apt install apache2
$ sudo nano /var/www/html/index.html
Изменить строку 224
It works web2!
Сохранить.
$ sudo systemctl enable apache2
$ sudo systemctl start apache2
$ exit
$ curl 10.91.211.77 | grep web2
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 10923  100 10923    0     0  3555k      0 --:--:-- --:--:-- --:--:-- 3555k
          It works web2!
===============================================================
$ lxc launch ubuntu:18.04 gitlab
$ lxc launch ubuntu:18.04 haproxy

$ lxc list



Using LXC/LXD Containers with HAProxy
$ lxc launch ubuntu:18.04 haproxy
$ lxc config device add haproxy myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:localhost:80
#$ lxc config device remove haproxy myport80 
$ lxc config device add haproxy myport443 proxy listen=tcp:0.0.0.0:443 connect=tcp:localhost:443
#$ lxc config device remove haproxy myport443
$ lxc exec haproxy -- sudo --user ubuntu --login
$ sudo apt update && sudo apt upgrade
$ sudo apt install haproxy
$ sudo systemctl enable haproxy
$ sudo systemctl start haproxy
$ sudo nano /etc/hosts
Добавить
10.91.211.18 web1.lxd
10.91.211.77 web2.lxd
10.91.211.176 gitlab.lxd 
Сохранить.
$ sudo nano /etc/haproxy/haproxy.cfg

Заменить:
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user haproxy
group haproxy
daemon

#ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets
#ssl-default-bind-ciphers EECDH+AESGCM:EDH+AESGCM
#tune.ssl.default-dh-param 2048

defaults
log global
mode http
option httplog
option dontlognull
option forwardfor
option http-server-close
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http

#frontend www-https
#bind *:443 ssl crt /etc/letsencrypt/live/example.com/example.com.pem
#reqadd X-Forwarded-Proto:\ https

#acl host_web1 hdr(host) -i web1.example.com
#acl host_web2 hdr(host) -i web2.example.com

#use_backend subdomain1 if host_web1
#use_backend subdomain2 if host_web2

frontend http_frontend
bind *:80

acl web_host1 hdr(host) -i web1.example.com
acl web_host2 hdr(host) -i web2.example.com

use_backend subdomain1 if web_host1
use_backend subdomain2 if web_host2

backend subdomain1
balance leastconn
http-request set-header X-Client-IP %[src]
#redirect scheme https if !{ ssl_fc }
server web1 web1.lxd:80 check

Сохранить.

$ sudo systemctl restart haproxy

Установим Wildcard Certificates
вручную:

$ sudo add-apt-repository -y ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install -y certbot
$ sudo systemctl stop haproxy

$ sudo certbot certonly --manual --preferred-challenges dns-01 -d *.example.com
Можно было бы  включить не только поддомены, но и сам домен:
#$ sudo certbot certonly --manual --preferred-challenges dns-01 -d *.example.com -d example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.example.com
with the following value:

kkjwKk4CieIWeMUZLGwuoizp1TA7linPuQ8GNMqLLy4

Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue


Для  godaddy.com



Press Enter to Continue
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2020-03-08. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le


$ sudo - i

root@haproxy:~# cd /etc/letsencrypt/live/example.com
root@haproxy:~# cat fullchain.pem privkey.pem > example.com.pem

$ sudo nano /etc/haproxy/haproxy.cfg

Раскомментируем относящееся к https
Сохранить.

$ exit

Отключим http:
На хосте:

$ lxc config device remove haproxy myport80

$ sudo reboot  

$ sudo systemctl start haproxy

$ lxc file pull haproxy/etc/haproxy/haproxy.cfg .

=================================
Настроим  gitlab

$ lxc exec gitlab -- sudo --user ubuntu --login
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install mc
$ sudo dpkg-reconfigure locales
$ sudo dpkg-reconfigure tzdata
$ sudo dpkg-reconfigure keyboard-configuration
$ sudo apt install -y postfix
$ curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
$ sudo EXTERNAL_URL="http://gitlab.lxd" apt-get install gitlab-ee

https://gitlab.example.com
Ввести пароль для root не менее 8 символов
Зайти.
Запретить регистрацию.

#$ sudo gitlab-ctl stop

Backup gitlab

$ mkdir /home/user/backup

$ nano backup_gitlab_lxd.sh

#!/usr/bin/env bash
set -ex
lxc stop gitlab
BACKUP_DIR=/home/user/backup
#HOSTS=$(lxc list -c n --format csv)
HOSTS=gitlab
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 export ${BACKUP_NAME} ${BACKUP_DIR}/${BACKUP_NAME}
    lxc image delete ${BACKUP_NAME}
    lxc delete ${HOST}/auto-backup
done
lxc start gitlab

Сохранить.

$ crontab -e

# m h  dom mon dow   command
00 5 * * * sh /home/user/backup_gitlab_lxd.sh

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

$ lxc image import gitlab-2019-12-16.tar.gz --alias gitlab-backup
$ lxc launch gitlab-backup gitlab
$ lxc image delete gitlab-backup


Установка lxd на vps

Как установить и настроить GitLab в Ubuntu 18.04
Set Up a Reverse Proxy in an LXD Container to Host Multiple Websites
Secure HTTP Traffic with Certbot

# apt update
# apt upgrade
# apt install mc
# adduser user
# usermod -aG sudo user
# su user
$ cd ~
$ mkdir ~/.ssh
$ cd ~/.ssh
$ ip a
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):user@X.X.X.X
$ ls
Скачать и использовать для входа /home/user/.ssh/user@X.X.X.X
$ cp ~/.ssh/user@X.X.X.X.pub ~/.ssh/authorized_keys
$ rm ~/.ssh/user@X.X.X.X.pub
$ rm ~/.ssh/user@X.X.X.X
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys
$ exit
# nano /etc/ssh/sshd_config

Проверить:

PasswordAuthentication no
.....

PubkeyAuthentication yes
ChallengeResponseAuthentication no

PermitRootLogin no
 
Сохранить.

$ sudo systemctl reload sshd

Зайти от user



$ sudo apt install lxd
$ sudo lxd init
Would you like to use LXD clustering? (yes/no) [default=no]:
Do you want to configure a new storage pool? (yes/no) [default=yes]:
Name of the new storage pool [default=default]:
Name of the storage backend to use (dir, lvm) [default=dir]:
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Would you like to create a new local network bridge? (yes/no) [default=yes]:
What should the new bridge be called? [default=lxdbr0]:
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: none
Would you like LXD to be available over the network? (yes/no) [default=no]:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:

$ sudo reboot

суббота, 7 декабря 2019 г.

Настройка сервера 1с в контейнере lxd

$ sudo adduser lxduser
$ sudo adduser lxduser lxd
от него и будем работать в дальнейшем. 

$ sudo su - lxduser

lxc launch ubuntu:18.04 srv1c
lxc config device add srv1c hasp3 unix-char path=/dev/bus/usb/001/003 mode=0777
lxc config device add srv1c hasp4 unix-char path=/dev/bus/usb/001/004 mode=0777
lxc config device add srv1c aks2 unix-char path=/dev/aks/hasp/1-3 mode=0777
lxc config device add srv1c aks3 unix-char path=/dev/aks/hasp/1-4 mode=0777
printf 'lxc.cgroup.devices.allow = c 198:* rwm' | lxc config set srv1c raw.lxc -
lxc restart srv1c
lxc exec srv1c -- sudo --user ubuntu --login
sudo apt update
sudo apt upgrade
sudo apt install mc samba -y
sudo dpkg-reconfigure locales
sudo dpkg-reconfigure tzdata
sudo dpkg-reconfigure keyboard-configuration
git clone  http://gitlab.lxd/user/setup-1c.git
cd setup-1c/scripts
sh download-pg.sh
#./download-pg.sh
Version: 10.10-4.1C
sudo sh setup-pg10.sh
#sudo ./setup-pg10.sh
Version: 10.10-4.1C
sh download-1c.sh
#./download-1c.sh
Version: 8.3.15.1778
sudo sh setup-1c.sh
Version: 8.3.15.1778
sudo poweroff
lxc copy srv1c srv1c-cop
lxc start srv1c
lxc list




=======================================================================

Обновление pg 10

git clone  http://gitlab.lxd/user/setup-1c.git
cd setup-1c
sh download-pg.sh
#Делаем dump баз и останавливаем сервер 1с
sudo sh dump.sh

sudo sh update-pg10.sh

Обновление 1с

git clone  http://gitlab.lxd/user/setup-1c.git
cd setup-1c
sh download-1c.sh
Version: 8.3.15.1778
sudo sh update-1c.sh
Version: 8.3.15.1778

=======================================================================

git config user.name user
git config user.email "you@example.com"
git add README.md
git commit -am "."
# git remote add origin http://192.168.0.221/user/setup-1c.git
git push -u origin master

четверг, 5 декабря 2019 г.

Установка lxd на ubuntu 18.04

Настройка Ubuntu 18.04.3 для работы с Back-UPS ES 700G от APC
systemd-networkd-wait-online.service Failed to start Wait for Network to be Configured with bridge
Использование journalctl для управления журналированием в systemd
решение для поддержки virtualbox
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install mc samba ssh
$ sudo reboot
$ sudo sh -c 'echo "deb [arch=amd64] http://download.virtualbox.org/virtualbox/debian $(lsb_release -sc) contrib" >> /etc/apt/sources.list.d/virtualbox.list'
$ wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
$ sudo apt update
$ sudo apt install virtualbox-6.0
#$ sudo apt autoremove --purge virtualbox-6.0
$ sudo usermod -a -G vboxusers $USER
$ sudo /sbin/vboxconfig
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
$ sudo reboot

$ sudo apt-get install bridge-utils -y
$ ip a
enp0s31f6 192.168.0.5

$ sudo nano /etc/netplan/01-netcfg.yaml

# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s31f6:
      dhcp4: yes

  bridges:
    br0:
      interfaces: [enp0s31f6]
      addresses: [192.168.0.7/24]
      gateway4: 192.168.0.1
      mtu: 1500
      nameservers:
        addresses: [8.8.8.8]
      parameters:
        stp: true
        forward-delay: 4
      dhcp4: no
      dhcp6: no

Сохранить.

$ sudo netplan generate
$ sudo netplan --debug apply


$ cat /proc/cpuinfo | grep MHz
$ sudo systemctl stop ondemand
$ sudo systemctl disable ondemand

$ nano tuning.sh
 
#!/bin/bash
# отключим ipv6
sudo /bin/su -c "echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'net.ipv6.conf.default.disable_ipv6 = 1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'net.ipv6.conf.lo.disable_ipv6 = 1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo '#net.ipv4.ip_forward = 1' >> /etc/sysctl.conf"
#тюнинг postgresql
sudo /bin/su -c "echo 'vm.swappiness=1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'kernel.sched_migration_cost_ns = 5000000' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'kernel.sched_autogroup_enabled = 0' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'vm.dirty_background_bytes = 67108864' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'vm.dirty_bytes = 536870912' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'vm.zone_reclaim_mode = 0' >> /etc/sysctl.conf"
#lxd
sudo /bin/su -c "echo 'fs.inotify.max_queued_events = 1048576' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'fs.inotify.max_user_instances = 1048576' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'fs.inotify.max_user_watches = 1048576' >> /etc/sysctl.conf"
sudo sysctl -p

Сохранить.

$ sudo sh tuning.sh
$ sudo reboot

$ mkdir archive
$ ls -l /dev/disk/by-uuid
$ sudo nano /etc/fstab
Добавить:
UUID=5238c225-69c3-4c28-a633-5177867f0696 /home/user/archive ext4 defaults 0 0
Сохранить.
$ sudo reboot
Конвертировать OVA в Qcow2


1. На хосте созаем файл (берем с машины где стоят драйвера)
$ sudo nano /etc/udev/rules.d/80-hasp.rules
# HASP rules
ACTION=="add|change|bind", SUBSYSTEM=="usb", ATTRS{idVendor}=="0529", ATTRS{idProduct}=="0001", MODE="664", ENV{HASP}="1", SYMLINK+="aks/hasp/%k", RUN+="/usr/sbin/aksusbd_x86_64 -c $root/aks/hasp/$kernel"
ACTION=="remove", ENV{HASP}=="1", RUN+="/usr/sbin/aksusbd_x86_64 -r $root/aks/hasp/$kernel"

# SENTINEL rules
ACTION=="add|change|bind", SUBSYSTEM=="usb", ATTRS{idVendor}=="0529", ATTRS{idProduct}=="0003", KERNEL!="hiddev*", MODE="666", GROUP="plugdev", ENV{SENTINELHID}="1", SYMLINK+="aks/sentinelhid/%k"

# SENTINEL rules для второго серверного ключа добавить еще запись:
ACTION=="add|change|bind", SUBSYSTEM=="usb", ATTRS{idVendor}=="0529", ATTRS{idProduct}=="0004", KERNEL!="hiddev*", MODE="666", GROUP="plugdev", ENV{SENTINELHID}="1", SYMLINK+="aks/sentinelhid/%k"

$ sudo reboot

$ ls -alFhR /dev/aks/


 

$ sudo lxd init

Would you like to use LXD clustering? (yes/no) [default=no]:
Do you want to configure a new storage pool? (yes/no) [default=yes]:
Name of the new storage pool [default=default]:
Name of the storage backend to use (btrfs, dir, lvm) [default=btrfs]: dir
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Would you like to create a new local network bridge? (yes/no) [default=yes]: no
Would you like to configure LXD to use an existing bridge or host interface? (yes/no) [default=no]: yes
Name of the existing bridge or host interface: br0
Would you like LXD to be available over the network? (yes/no) [default=no]:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:


Создадим пользователя lxduser для работы  с консолью контейнеров без доступа sudo

$ sudo adduser lxduser
$ sudo adduser lxduser lxd

от него и будем работать в дальнейшем.

$ sudo su - lxduser

Восстанавливаем контейнер gitlab:

$ lxc image import gitlab-2019-12-06.tar.gz --alias gitlab-backup
$ lxc launch gitlab-backup gitlab

$ lxc image list
$ lxc image delete gitlab-backup


Восстанавливаем контейнер vbox:
$ lxc image import vbox.tar.gz --alias vbox-backup
Образ, импортирован с снимком: 4cc93c869cbc7686c61eabed84579b8386f4633ac1e0f7b7493c87274d000
$ lxc launch vbox-backup vbox
$ lxc stop vbox

На хосте проверим:
user@lxd:~$  ls -la /dev | grep vbox


crw-rw----  1 root vboxusers  10,  55 дек  5 16:18 vboxdrv
crw-rw-rw-  1 root root       10,  54 дек  5 16:18 vboxdrvu
crw-rw----  1 root vboxusers  10,  53 дек  5 16:18 vboxnetctl
drwxr-x---  3 root vboxusers       60 дек  5 16:18 vboxusb

#$ lxc start vbox
$ lxc config device add vbox vboxdrv unix-char path=/dev/vboxdrv mode=0777
$ lxc config device add vbox vboxdrvu unix-char path=/dev/vboxdrvu mode=0777
$ lxc config device add vbox vboxnetctl unix-char path=/dev/vboxnetctl mode=0777

#$ lxc config set vbox linux.kernel_modules overlay
#$ lxc config set vbox security.privileged true 
$ printf 'lxc.cgroup.devices.allow = c 10:53 rwm lxc.cgroup.devices.allow = c 10:54 rwm lxc.cgroup.devices.allow = c 10:55 rwm' | lxc config set vbox raw.lxc -
Проверить:
$ lxc config edit vbox
  ......
  image.release: bionic
  raw.lxc: lxc.cgroup.devices.allow = c 10:53 rwm lxc.cgroup.devices.allow = c 10:54
    rwm lxc.cgroup.devices.allow = c 10:55 rwm
  .......
 $ lxc start vbox

$ lxc image import test-2019-11-12.tar.gz --alias test-backup
Образ, импортирован с снимком: f442e1c60b9c1353f3d665a61e67bb7c13d383fe65af530fbe7f482699233

$ lxc launch test-backup srv1c
$ lxc config device add srv1c hasp3 unix-char path=/dev/bus/usb/001/003 mode=0777
$ lxc config device add srv1c hasp4 unix-char path=/dev/bus/usb/001/004 mode=0777
$ lxc config device add srv1c aks2 unix-char path=/dev/aks/hasp/1-3 mode=0777
$ lxc config device add srv1c aks3 unix-char path=/dev/aks/hasp/1-4 mode=0777
#$ lxc config set srv1c security.privileged true
$ printf 'lxc.cgroup.devices.allow = c 198:* rwm' | lxc config set srv1c raw.lxc -

$ lxc config edit srv1c
$ lxc restart srv1c
$ lxc exec srv1c -- rm -rf /home/usr1cv8/.server1c-8.3.15.1700
$ lxc restart srv1c


Поскольку сервер рабочий настроим архивацию

Настройка Ubuntu 16.04, 18.04

$ sudo nano /etc/default/rsync

#RSYNC_ENABLE=false
RSYNC_ENABLE=true

Сохранить.


$ sudo nano /etc/rsyncd.conf

[backup]
# destination directory to copy

path = /home/user/archive
# hosts you allow to access

hosts allow = 192.168.0.0/255.255.255.0
hosts deny = *
list = true
uid = user
gid = user
read only = false

Сохранить.

#$ sudo mkdir -p  /home/user/archive
$ sudo systemctl enable rsync
$ sudo systemctl start rsync


Под windows 10 :


Можно сделать один скрипт и поставить в планировщик:

ping -n 1 -w 1000 192.168.0.5|Find "TTL=">nul
If %ErrorLevel%==0 (
CALL d:\Copy\rsync\rsync -avz  /cygdrive/D/Copy/Archiv 192.168.0.5::backup --progress
) Else (
Echo Offline
)

 $ sudo crontab -e
@reboot fstrim / -v

$ nano backup_lxd.sh

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

BACKUP_DIR=/home/user/archive/lxd/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 export ${BACKUP_NAME} ${BACKUP_DIR}/${BACKUP_NAME}
    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 info gitlab
$ lxc delete gitlab/auto-backup
$ lxc image list
$ lxc image delete gitlab-2019-12-06

вторник, 3 декабря 2019 г.

Настройка Git-сервера в контейнере lxd

Установка GitLab в Ubuntu 18.04 
Как настроить Git-сервер на Linux
4.4 Git on the Server - Setting Up the Server
Linode:Install GitLab on Ubuntu 18.04
DO:Установка Git в Ubuntu 18.04 [Краткое руководство]
DO:Установка Git в Ubuntu 18.04

Запись А gitlab.examle.com host  в DNS домена example.com

$ lxc launch ubuntu:18.04 gitlab
$ lxc exec gitlab /bin/bash
# adduser user
# usermod -aG sudo user
# apt update
# apt upgrade
## apt install qemu-user-static -y
# apt install mc samba sudo ssh wget -y
# dpkg-reconfigure locales
## Выбираем ru_RU.UTF-8 ru_RU.UTF-8 UTF-8
# locale -a  
## timedatectl set-timezone Europe/Moscow
# dpkg-reconfigure tzdata
## apt install keyboard-configuration
# dpkg-reconfigure keyboard-configuration
# nano /etc/ssh/sshd_config
#PasswordAuthentication no
PasswordAuthentication yes
Сохранить.
# systemctl reload sshd
##apt install tasksel
## tasksel --list-tasks 
## tasksel install xubuntu-core
## apt install xrdp
## systemctl enable xrdp
## apt install x2goserver x2goserver-xsession
# reboot

Зайти по ssh

$ sudo apt install -y postfix
$ curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
$ ip a

### Запись А gitlab.examle.com host  в DNS домена example.com, должна существовать,
### если указать "https" - будет попытка создать сертификат.
### предполагаем, что преобразованием https займется haproxy.
$ sudo EXTERNAL_URL=://gitlab.example.com" apt-get install gitlab-ee

http://gitlab
Ввести пароль для root не менее 8 символов
Зайти.

$ lxc list
| gitlab     | RUNNING | 192.168.0.221 (eth0) |      | PERSISTENT | 0         |

$ mkdir /home/user/setup-1c
$ cd /home/user/setup-1c
$ git init
Инициализирован пустой репозиторий Git в /home/user/setup-1c/.git/
$ git config user.name user
$ git config user.email "you@example.com"
$ git add README.md
$ git commit -am "Update README.md"
#$ git remote add origin http://192.168.0.221/user/setup-1c.git
$ git push -u origin master
=============================

user@lxd:~$ lxc delete u1804
user@lxd:~$ lxc copy u1804-cop u1804
user@lxd:~$ lxc start u1804
$ git clone http://192.168.0.221/user/setup-1c.git
$ cd setup-1c
$ sudo sh setup-1c.sh

Настройка почты с отправкой через yandex:
ещё

$ lxc exec gitlab bash
# nano /etc/gitlab/gitlab.rb
Добавить в конец
external_url 'http://gitlab'
gitlab_rails['gitlab_email_from'] = 'user@yandex.ru'
gitlab_rails['gitlab_email_display_name'] = 'Private GitLab'
gitlab_rails['gitlab_email_reply_to'] = 'user@yandex.ru'
gitlab_rails['gitlab_email_subject_suffix'] = ''
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.yandex.ru"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "user@yandex.ru"
gitlab_rails['smtp_password'] = "password_user@yandex.ru"
gitlab_rails['smtp_domain'] = "yandex.ru"
#gitlab_rails['gitlab_email_from'] = 'user@yandex.ru'
#gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_authentication'] = "plain"
gitlab_rails['smtp_tls'] = true
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_openssl_verify_mode'] = 'peer'

Сохранить.


# reboot
# gitlab-rails console
Notify.test_email('mail@domen.com', 'Message Subject', 'Message Body').deliver_now

Дальнейшая настройка (если понадобиться)

$ lxc exec gitlab -- sudo --user ubuntu --login
$ sudo nano /etc/gitlab/gitlab.rb

external_url 'http://gitlab.example.com'
 
Сохранить.

$ sudo gitlab-ctl reconfigure
$ exit



   

четверг, 28 ноября 2019 г.

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

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

Там есть патч 999-pg_dump_bin.patch. Если его применить, то можно делать pg_dump с бинарным COPY указав в командной строке опцию --binary-copy. Пример если выгружать на самом сервере:
pg_dump --binary-copy -j 4 -h /var/run/postgresql/ -U postgres -Fd uvadrev -f 1C-uvadrev-2019-12-12.backup


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

# apt update
# apt upgrade
# apt install qemu-user-static -y
# apt install mc samba sudo ssh wget -y

# poweroff
#$ lxc stop deb10h
$ lxc copy deb10h harin116

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


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

Последовательность сборки по шагам (работаем под пользователем не 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.6.orig.tar.bz2
  2. Распаковываем приложенный архив для сборки PostgreSQL:
    $ mkdir postgresql-11_11.6-1.1C
    $ cd postgresql-11_11.6-1.1C
  3. Копируем:
    $ cp ~/postgresql-11_11.6-1.1C.opt.dsc .
    $ cp ~/postgresql-11_11.6-1.1C.opt.debian.tar.xz .
    $ cp ~/postgresql-11_11.6.orig.tar.bz2 .
  4. Распаковываем и накладываем патчи:
    $ dpkg-source -x postgresql-11_11.6-1.1C.opt.dsc
  5. Переходим в каталог сборки:
    $ cd postgresql-11-11.6
  6. Устанавливаем пакеты, необходимые для сборки PostgreSQL:
    $ sudo mk-build-deps -i
    1. - для Ubuntu-сервер потребовалось ещё предварительно установить пакет equivs (для Debian нет надобности):
        $ sudo apt-get install equivs
  7. Запускаем сборку:
    $ debuild -b -uc -us
На хорошем компьютере сборка примерно 20 минут.
Если всё проходит нормально, то получаем в каталоге postgresql-11_11.6-1.1C файлы *.deb.

Для работы 1С достаточно установить:

libpq5_11.6-1.1C.opt_amd64.deb
postgresql-11_11.6-1.1C.opt_amd64.deb
postgresql-client-11_11.6-1.1C.opt_amd64.deb


Пакуем в postgresql-11_11.6-1.1C.tar.gz



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


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

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

$ lxc launch images:debian/10 dpg
$ lxc config set dpg security.privileged true
$ lxc restart dpg
$ lxc exec dpg /bin/bash
# adduser user
# usermod -aG sudo user
# apt update
# apt upgrade
# apt install qemu-user-static -y
# apt install mc samba sudo ssh wget -y
# dpkg-reconfigure locales
## Выбираем ru_RU.UTF-8
# locale -a  
## timedatectl set-timezone Europe/Moscow
# dpkg-reconfigure tzdata
# apt install keyboard-configuration
## dpkg-reconfigure keyboard-configuration
Сохранить.
# poweroff
$ lxc copy dpg pgh116
$ lxc start pgh116


$ lxc list
| pgh116     | RUNNING | 192.168.0.173 (eth0) |


В контейнере со сборкой
$ scp postgresql-11_11.6-1.1C.tar.gz user@192.168.0.173:/home/user


Соединяемся по ssh user@192.168.0.173

$ ssh user@192.168.0.173
#$ 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 install libllvm7 libxslt1.1
$ tar xvzf postgresql-11_11.6-1.1C.tar.gz
$ cd postgresql-11_11.6-1.1C
$ sudo dpkg -i libpq5_11.6-1.1C.opt_amd64.deb
$ sudo dpkg -i postgresql-client-11_11.6-1.1C.opt_amd64.deb
$ sudo dpkg -i postgresql-11_11.6-1.1C.opt_amd64.deb
$ dpkg -l | grep 11.6-1.1C | awk -F' ' '{print $2}' | sudo xargs apt-mark hold

$ 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 

Выход.
$ sudo poweroff

#$ lxc stop pgh116
$ lxc copy pgh116 pgh116-cop
$ lxc start pgh116
Начинаем испытания.

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

lxd запуск kvm внутри контейнера

lxc: running virtualbox inside a container
lxc: запуск virtualbox внутри контейнера
KVM in LXD · GitHub
Ubuntu 16.04: run KVM(qemu-kvm) in LXD container
VM inside container
lxc config device add CONTAINER kvm unix-char path=/dev/kvm
Cannot run KVM inside privileged container with KVM device exposed #3393 
KVM внутри контейнера LXC 
Use virt-manager as a non-root user on Linux
KVM и виртуалки с Windows 

$ lxc launch ubuntu:18.04 kvm
$ lxc exec kvm /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
# dpkg-reconfigure locales
## Выбираем ru_RU.UTF-8 ru_RU.UTF-8 UTF-8
# locale -a  
## timedatectl set-timezone Europe/Moscow
# dpkg-reconfigure tzdata
## apt install keyboard-configuration
# dpkg-reconfigure keyboard-configuration
# nano /etc/ssh/sshd_config

#PasswordAuthentication no
PasswordAuthentication yes

Сохранить.
# systemctl reload sshd
#apt install tasksel
# tasksel --list-tasks 
# tasksel install xubuntu-core
# apt install xrdp
# systemctl enable xrdp
## apt install x2goserver x2goserver-xsession
# reboot  

#$ lxc start kvm
#$ lxc config set kvm security.privileged true
$ lxc config device add kvm kvm unix-char path=/dev/kvm mode=0777
$ lxc config device add kvm tun unix-char path=/dev/net/tun mode=0777
$ lxc config set kvm linux.kernel_modules openvswitch,nbd,ip_tables,ip6_tables,kvm
$ lxc config set kvm security.nesting true 
$ printf 'lxc.cgroup.devices.allow = c 10:232 rwm' | lxc config set kvm raw.lxc -

$ lxc config edit kvm
$ lxc restart kvm
--------------------------------------------------
Выяснить нужно или нет?
$ lxc exec kvm -- getent group kvm
kvm:x:131:user
$ lxc config device set kvm kvm gid 131
$ lxc exec kvm -- ls -lh /dev/kvm
crwxrwxrwx 1 root kvm 10, 232 Nov 28 17:21 /dev/kvm
--------------------------------------------------
В контейнере:
$ sudo apt install qemu-kvm libvirt-bin bridge-utils
$ sudo apt install virt-manager
$ ip a
inet 192.168.0.246/24

$ sudo nano /etc/netplan/01-network-manager-all.yaml
$ sudo nano /etc/netplan/50-cloud-init.yaml


# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: yes

  bridges:
    br0:
      interfaces: [eth0]
      addresses: [192.168.0.246/24]
      gateway4: 192.168.0.1
      mtu: 1500
      nameservers:
        addresses: [8.8.8.8]
      parameters:
        stp: true
        forward-delay: 4
      dhcp4: no
      dhcp6: no


Сохранить.

$ sudo netplan generate
$ sudo netplan --debug apply


#$ sudo systemctl stop networking.service
#$ sudo systemctl disable networking.service

$ sudo chgrp kvm /dev/kvm
$ sudo usermod -a -G libvirt $(whoami)
-----------------------------------------------------
Выяснить нужно или нет?
$ sudo usermod -a -G kvm $(whoami)
-----------------------------------------------------
$ sudo apt install firefox
$ virt-manager
 

 

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

Creating a new LXD profile for macvlan

Macvlan против сетевого моста
Ubuntu 18.04 LXD / LXC, ZFS, Docker и расширенные сети
How to make your LXD containers get IP addresses from your LAN using macvlan
Соединение хост-контейнер с мостом Macvlan
LXC и macvlan, хост-соединение для гостя
Giving the host a macvlan
Netplan configuration examples
Назначить сеть для сети Macvlan 


Нет никакой реальной разницы в безопасности между этими двумя, так как root на хосте имеет доступ к ядру, так что вы всегда можете предположить, что он так или иначе будет иметь доступ к сетевому трафику вашего контейнера.
Основные моменты, которые следует учитывать при использовании macvlan:
  • macvlan имеет тенденцию работать быстрее, чем мосты, так как пропускает целую кучу кода ядра
  • при использовании macvlan хост не сможет связываться с контейнером через интерфейс macvlan при использовании netplan
  • Количество устройств Macvlan может быть ограничено в зависимости от аппаратных ограничений вашей физической сетевой карты.
  • отладка проблем, связанных с macvlan, может быть очень сложной, поскольку она может не работать одинаково на всех драйверах ядра и физических картах
Если ни одно из ограничений не повлияет на вашу настройку, сделайте это. Если вам нужна большая гибкость, возможность отладки или более воспроизводимая среда, мостовое соединение может быть предпочтительнее (openvswitch является одним из способов оптимизации производительности).

Исправление ошибки в ubuntu 18.04
$ sudo crontab -u root -l | { sudo cat; sudo echo "@reboot ip link set enp0s3 promisc on"; } | sudo crontab -
 
$ sudo lxd init
Would you like to use LXD clustering? (yes/no) [default=no]:
Do you want to configure a new storage pool? (yes/no) [default=yes]:
Name of the new storage pool [default=default]:
Name of the storage backend to use (btrfs, dir, lvm) [default=btrfs]: dir
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Would you like to create a new local network bridge? (yes/no) [default=yes]: no
Would you like to configure LXD to use an existing bridge or host interface? (yes/no) [default=no]: yes
Name of the existing bridge or host interface: enp0s3
Would you like LXD to be available over the network? (yes/no) [default=no]:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:


$ lxc profile show default
config: {}
description: Default LXD profile
devices:
  eth0:
    name: eth0
    nictype: macvlan
    parent: enp0s3
    type: nic
  root:
    path: /
    pool: default
    type: disk
name: default
used_by: []

Если не установили crontab
$ sudo ip link set enp0s3 promisc on 

$ lxc launch ubuntu:18.04 net1
$ lxc list
+------+---------+----------------------+------+------------+-----------+
| NAME |  STATE  |         IPV4         | IPV6 |    TYPE    | SNAPSHOTS |
+------+---------+----------------------+------+------------+-----------+
| net1 | RUNNING | 192.168.0.196 (eth0) |      | PERSISTENT | 0         |
+------+---------+----------------------+------+------------+-----------+

=================================================================
Creating a new LXD profile for macvlan
$ sudo lxd init
Would you like to use LXD clustering? (yes/no) [default=no]:
Do you want to configure a new storage pool? (yes/no) [default=yes]:
Name of the new storage pool [default=default]:
Name of the storage backend to use (btrfs, dir, lvm) [default=btrfs]: dir
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Would you like to create a new local network bridge? (yes/no) [default=yes]:
What should the new bridge be called? [default=lxdbr0]:
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: none
Would you like LXD to be available over the network? (yes/no) [default=no]:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:

$ lxc profile list
$ lxc profile copy default lanprofile
$ lxc profile show lanprofile

config: {}
description: Default LXD profile
devices:
  eth0:
    name: eth0
    nictype: bridged
    parent: lxdbr0
    type: nic
  root:
    path: /
    pool: default
    type: disk
name: lanprofile
used_by: []
Если не установили crontab
$ sudo ip link set enp0s3 promisc on
$ ip route show default 0.0.0.0/0
default via 192.168.1.1 dev enp0s3 proto dhcp src 192.168.1.111 metric 100

$ lxc profile device set lanprofile eth0 nictype macvlan
$ lxc profile device set lanprofile eth0 parent enp0s3

$ lxc profile show lanprofile
config: {}
description: Default LXD profile
devices:
  eth0:
    name: eth0
    nictype: macvlan
    parent: enp0s3
    type: nic
  root:
    path: /
    pool: default
    type: disk
name: lanprofile
used_by: []

$ lxc launch -p lanprofile ubuntu:16.04 net1
$ lxc list
+------+---------+----------------------+------+------------+-----------+
| NAME |  STATE  |         IPV4         | IPV6 |    TYPE    | SNAPSHOTS |
+------+---------+----------------------+------+------------+-----------+
| net1 | RUNNING | 192.168.1.225 (eth0) |      | PERSISTENT | 0         |
+------+---------+----------------------+------+------------+-----------+

=================================================================



$ lxc config set net1 raw.lxc 'lxc.net.0.ipv4.address = 192.168.0.150/24'
$ lxc restart net1


$ lxc config unset net1 raw.lxc
$ lxc restart net1

$ lxc config show net1

$ lxc config get net1 volatile.eth0.hwaddr
00:16:3e:ef:0d:63

Решение проблемы связи с хостом

Giving the host a macvlan

1. Одновременное использование netplan и ifupdown

$ sudo apt install ifupdown
$ sudo nano /etc/network/interfaces

# ifupdown has been replaced by netplan(5) on this system.  See
# /etc/netplan for current configuration.
# To re-enable ifupdown on this system, you can run:
#    sudo apt install ifupdown
#auto enp0s3
#iface enp0s3 inet dhcp

auto macvlan0
iface macvlan0 inet dhcp
        pre-up route del default
        pre-up route del -net 192.168.0.0 netmask 255.255.255.0
        pre-up ip link add link enp0s3 name macvlan0 type macvlan mode bridge

$ sudo reboot 

2. Установка ifupdown и удаление netplan
Замена netplan на networking Ubuntu 18.04 LTS Bionic
Change netplan renderer from networkd to NetworkManager
Ubuntu 18.04: switch back to /etc/network/interfaces

$ sudo apt install ifupdown
$ sudo nano /etc/network/interfaces

# ifupdown has been replaced by netplan(5) on this system.  See
# /etc/netplan for current configuration.
# To re-enable ifupdown on this system, you can run:
#    sudo apt install ifupdown
auto lo
iface lo inet loopback

auto enp0s3
iface enp0s3 inet dhcp

auto macvlan0
iface macvlan0 inet dhcp
        pre-up route del default
        pre-up route del -net 192.168.0.0 netmask 255.255.255.0
        pre-up ip link add link enp0s3 name macvlan0 type macvlan mode bridge


$ sudo nano /etc/netplan/01-netcfg.yaml
$ sudo mv /etc/netplan/01-netcfg.yaml /etc/netplan/01-netcfg.yaml.old
$ sudo reboot