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

суббота, 17 августа 2019 г.

Тестовый сервер test2 на Ubuntu 18.04.3

В данной статье опишем установку сервера СУБД PostgreSQL версия 10.5-24.1C на ubuntu 18.04.3 на физическую машину.

Устанавливаем ubuntu 18.04.3 на программный RAID 1 SSD
RAM (16 GB) монтируем диск для backup /backups


Настройки ubuntu пользователь (привязка в скриптах) user пароль 12345, имя компьютера test2

После установки, Ctrl +Alt + T (окно терминала)
$ sudo apt update -y
$ sudo apt upgrade -y
$ sudo apt autoremove -y
$ sudo apt install mc ssh samba -y

Возможно sudo apt upgrade -y не пройдет из за блокировки, тогда sudo reboot и повторите с начала.

$ lsusb

2. Настройка сети

Тестовый сервер будет использовать dhcp

Смотрим:
$ cat  /etc/hosts
127.0.0.1       localhost
.....


$ sudo nano /etc/hosts

Меняем:

127.0.0.1       localhost       test2


Сохранить.

$ cat /proc/cpuinfo | grep MHz
cpu MHz         : 800.111
cpu MHz         : 800.028
cpu MHz         : 800.377
cpu MHz         : 800.190


3. Тюнинг остального:

Сделаем еще один скрипт для настройки остального:

$ 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
#add a swap file to an Ubuntu 16.04
#sudo fallocate -l 1G /swapfile
#sudo chmod 600 /swapfile
#sudo mkswap /swapfile
#sudo swapon /swapfile
#sudo cp /etc/fstab /etc/fstab.bak
#sudo echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
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"
sudo sysctl -p
# перезагрузим сеть
#sudo systemctl restart networking.service
#sudo systemctl start networking.service
#sudo systemctl enable networking.service
# Настройка sudo journalctl -b sudo journalctl -b -1 sudo journalctl --list-boots
sudo sed -i 's/#Storage=auto/Storage=persistent/' /etc/systemd/journald.conf
# Отключение уведомлений службы Apport (/var/crash)
sudo sed -i 's/enabled=1/enabled=0/' /etc/default/apport
# Отключим службу ondemand# (для разгона cpu)
# cat /proc/cpuinfo | grep MHz
# systemctl status ondemand
sudo systemctl stop ondemand
sudo systemctl disable ondemand
# shutdown -r now

Сохраним файл tuning.sh

------------------------------------------
Сделаем исполняем
$ chmod +x tuning.sh
$  sudo ./tuning.sh

или
$  sudo sh tuning.sh
------------------------------------------

Перезагрузимся

$ sudo reboot

После перезагрузки по сети можно подключиться MobaXterm

$ cat /proc/cpuinfo | grep MHz 
cat /proc/cpuinfo | grep MHz
cpu MHz         : 4000.489
cpu MHz         : 4000.162
cpu MHz         : 4000.980
cpu MHz         : 4002.072

$ free
              total        used        free      shared  buff/cache   available
Память:    16284616       95512    15944100        1312      245004    15870784
Подкачка:     1048572           0     1048572


Установка СУБД PostgreSQL версия 10.8_18.1C

После перезагрузки по сети можно подключиться MobaXterm
к нашей виртуальной машине (по ip или или имени )  загрузить файлы установки:
$ mkdir /home/user/test

 В папку /test положить файл:
deb64_8_3_15_1565.tar.gz
 postgresql_10.8_18.1C_amd64_deb.tar.bz2

Файл postgresql_10.8_18.1C_amd64_addon_deb.tar.bz2 не устанавливаем - проблемы с зависимостями

$ wget http://archive.ubuntu.com/ubuntu/pool/main/i/icu/libicu55_55.1-7_amd64.deb
$ sudo sudo dpkg -i libicu55_55.1-7_amd64.deb
$ dpkg -l | grep libicu55 | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
# libicu55 помечен как зафиксированный. 
$ sudo apt-get install postgresql-common  -y
$ dpkg -l | grep postgres | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
#postgresql-client-common помечен как зафиксированный.
#postgresql-common помечен как зафиксированный.
$ mkdir -p /tmp/post
$ cp /home/user/test/postgresql_10.8_18.1C_amd64_deb.tar.bz2 /tmp/post/
$ cd /tmp/post
$ tar -xvf postgresql_10.8_18.1C_amd64_deb.tar.bz2
$ ls 
$ cd postgresql-10.8-18.1C_amd64_deb
$ ls
# список файлов:
#libpq5_10.8-18.1C_amd64.deb  postgresql-10_10.8-18.1C_amd64.deb  postgresql-client-10_10.8-18.1C_amd64.deb
$ sudo dpkg -i *.deb
$ dpkg -l | grep 10.8-18.1C | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
#libpq5 помечен как зафиксированный.
#postgresql-10 помечен как зафиксированный.
#postgresql-client-10 помечен как зафиксированный.

$ pg_lsclusters
Ver Cluster Port Status Owner    Data directory              Log file
10  main    5432 online postgres /var/lib/postgresql/10/main pg_log/postgresql-%a.log


$ sudo pg_dropcluster --stop 10 main

$ sudo pg_createcluster --locale ru_RU.UTF-8 10 main --  --data-checksums


$ sudo pg_ctlcluster 10 main start

$ pg_lsclusters
Ver Cluster Port Status Owner    Data directory              Log file
10  main    5432 online postgres /var/lib/postgresql/10/main pg_log/postgresql-%a.log
 
$ sudo -u postgres psql -U postgres -c "alter user postgres with password 'pass';"
$ sudo cp /etc/postgresql/10/main/postgresql.conf /etc/postgresql/10/main/postgresql.conf.bak

#Делаем проверки
$ sudo systemctl status postgresql.service
$ ss -tunpl | grep 5432
tcp    LISTEN     0      128       *:5432                  *:*
tcp    LISTEN     0      128      :::5432                 :::*
$ ps aux | grep postgres | grep -- -D
postgres  4914  0.0  0.1 320972 28864 ?        S    08:37   0:00 /usr/lib/postgresql/10/bin/postgres -D /var/lib/postgresql/10/main -c config_file=/etc/postgresql/10/main/postgresql.conf

-------------------------------------------------------------------------------------------------------

Настройка postgresql.conf для 1С Total Memory (RAM): 16 GB

$ sudo nano /etc/postgresql/10/main/postgresql.conf
Добавить в конец:

# DB Version: 10
# 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
#lc_messages='C'
#log_duration = on
#log_statement = all
log_destination = stderr
plantuner.fix_empty_table = 'on'
online_analyze.table_type = 'temporary'
online_analyze.verbose = 'off'

vacuum_cost_delay = 0
vacuum_cost_page_hit = 0
vacuum_cost_page_miss = 5
vacuum_cost_page_dirty = 5
vacuum_cost_limit = 200
autovacuum_max_workers =4
autovacuum_naptime = 1s
autovacuum_vacuum_threshold = 50
autovacuum_analyze_threshold = 50
autovacuum_vacuum_scale_factor = 0.05
autovacuum_analyze_scale_factor = 0.05
autovacuum_vacuum_cost_delay = 5ms
autovacuum_vacuum_cost_limit = -1


Сохранить.

$ sudo systemctl restart postgresql.service
 -------------------------------------------------------------------------------------------------------

Установка pg_probackup 

pg_probackup описание

$ sudo su -c "echo 'deb [arch=amd64] http://repo.postgrespro.ru/pg_probackup/deb/ $(lsb_release -cs) main-$(lsb_release -cs)' > /etc/apt/sources.list.d/pg_probackup.list" 
$ sudo su -c "wget -O - http://repo.postgrespro.ru/pg_probackup/keys/GPG-KEY-PG_PROBACKUP | apt-key add -" 
$ sudo apt-get update 
$ sudo apt-get install pg-probackup-10
$ dpkg -l | grep pg-probackup-10 | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
#pg-probackup-10 помечен как зафиксированный.

Инициализация каталога резервных копий 1 экземпляр на примонтированом HDD


Каталог резервных копий /backup/pg_probackup расположено на hdd диске, в нем будем ежедневно сохранять backup за 30 дней без непрерывного архивирования.
Если нет дополнительного диска, выполняем закомментированые команды
$ sudo pg_probackup-10 init -B /backup
$ sudo mkdir /backup/copy
$ sudo mkdir /backup/log
$ sudo mkdir /backup/pg_dump
$ sudo chown -R postgres:postgres /backup/
#$ sudo chmod -R 777 /backup/pg_probackup
# /backups примонтированный диск для архивов
$ sudo mkdir /backups/copy
$ sudo mkdir /backups/pg_dump
$ sudo chown -R postgres:postgres /backups/ 


Определение копируемого экземпляра 
$ sudo -u postgres pg_probackup-10 add-instance -B /backup -D /var/lib/postgresql/10/main --instance main


$ sudo nano /etc/postgresql/10/main/postgresql.conf

Добавить:

max_wal_senders = 10
wal_level = replica
unix_socket_directories='/var/run/postgresql'
# Для настройки архивного резервного копирования разкомментировать:
archive_mode = on
#archive_command ='test ! -f /wal/%f && cp %p /wal/%f' 
archive_command = '/usr/bin/pg_probackup-10 archive-push -B /backup --compress --instance main --wal-file-path %p --wal-file-name %f'

Сохранить.

$ sudo systemctl restart postgresql.service

Настройка политики сохранения 5 резервных копий

$ sudo -u postgres nano /backup/backups/main/pg_probackup.conf

Добавить:

retention-redundancy=5

Сохранить


Создание полной автономной резервной копии: 

$ sudo -u postgres pg_probackup-10 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired


Просмотр:

$ sudo -u postgres pg_probackup-10 show -B /backup


Проверка backup:

Проверка файлов:
$ sudo -u postgres pg_probackup-10 checkdb -B /backup --instance main
INFO: Start checking data files
INFO: Data files are valid

Проверка backup: 
$ sudo -u postgres pg_probackup-10 validate -B /backup
INFO: Validate backups of the instance 'main'
INFO: Validating backup PUVU29
INFO: Backup PUVU29 data files are valid
INFO: Backup PUVU29 WAL segments are valid
INFO: Validating backup PUVTUX
INFO: Backup PUVTUX data files are valid
INFO: Backup PUVTUX WAL segments are valid
INFO: All backups are valid

------------------------------------------------------------------------------------------------------- 

Пример восстановления из полной автономной резервной копии (замена кластера на резервную копию)


Сделали копию:
 $ sudo -u postgres pg_probackup-10 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired 

Перед восстановлением

Просмотр:

$ sudo -u postgres pg_probackup-10 show -B

Проверка backup:
$ sudo -u postgres pg_probackup-10 validate -B /backup

INFO: Validate backups of the instance 'main'
INFO: Validating backup PRP29I
INFO: Backup PRP29I data files are valid
INFO: Backup PRP29I WAL segments are valid

Можно восстанавливать.

Останавливаем 1с
$ sudo systemctl stop srv1cv83.service

Останавливаем postgresql
$ sudo systemctl stop postgresql.service

Удалим кластер main
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/10/main/*"

Восстановим кластер main
$ sudo -u postgres pg_probackup-10 restore -B /backup --instance main -i PRP29I
INFO: Validating backup PRP29I
INFO: Backup PRP29I data files are valid
INFO: Backup PRP29I WAL segments are valid
INFO: Backup PRP29I is valid.
INFO: Restore of backup PRP29I completed.


Запускаем postgresql
$ sudo systemctl start postgresql.service

Запускаем 1с
$ sudo systemctl start srv1cv83.service

------------------------------------------------------------------------------------------------------- 

Пример восстановления из полной автономной резервной копии c непрерывным архивированием (замена кластера на резервную копию)


$ sudo -u postgres pg_probackup-10 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired


Просмотр:

$ sudo -u postgres pg_probackup-10 show -B /backup


Проверка backup:
$ sudo -u postgres pg_probackup-10 validate -B /backup

INFO: Validate backups of the instance 'main'
INFO: Validating backup PRP6Q5
INFO: Backup PRP6Q5 data files are valid
INFO: Backup PRP6Q5 WAL segments are valid
 Можно восстанавливать, но проверим непрерывность архивирования:


Войти в 1с создать документ, провести, выйти из 1с.


$ sudo -u postgres pg_probackup-10 validate -B /backup   --instance main -i PRP6Q5 --time='2042-04-16 12:26:00'
INFO: Validating backup PRP6Q5
INFO: Backup PRP6Q5 data files are valid
WARNING: Thread [1]: Could not read WAL record at 1/88000000
ERROR: Thread [1]: WAL segment "/backupwal/wal/main/000000010000000100000088" is absent
WARNING: Recovery can be done up to time 2019-05-18 14:36:30+03, xid 0 and LSN 1/2A000198
ERROR: Not enough WAL records to time 2042-04-16 12:26:00+03



Останавливаем 1с
$ sudo systemctl stop srv1cv83.service

Останавливаем postgresql
$ sudo systemctl stop postgresql.service

Удалим кластер main
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/10/main/*"

Восстановим кластер main
$ sudo -u postgres pg_probackup-10 restore -B /backup --instance main -i PRP6Q5 --recovery-target='latest'


INFO: Validating backup PRP6Q5
INFO: Backup PRP6Q5 data files are valid
INFO: Backup PRP6Q5 WAL segments are valid
INFO: Backup PRP6Q5 is valid.
INFO: Restore of backup PRP6Q5 completed.


Запускаем postgresql
$ sudo systemctl start postgresql.service

Запускаем 1с
$ sudo systemctl start srv1cv83.service


Для проверки стандартной wal архивации:

$ sudo mkdir -p /wal
$ sudo chown -R postgres:postgres /wal


$ sudo nano /etc/postgresql/10/main/postgresql.conf

расскоментировать:
archive_command ='test ! -f /wal/%f && cp %p /wal/%f'

Сохранить.

$ sudo systemctl restart postgresql.service

В папку /test положить файлы:
deb64_8_3_15_1565.tar.gz

# установка 1с
$ mkdir -p /tmp/1ctmp
$ cd /tmp/1ctmp
$ sudo apt install imagemagick -y
#$sudo apt install -y unixodbc libgsf-1-114 libglib2.0
$ sudo apt install libfreetype6 libgsf-1-common unixodbc glib2.0
#ubuntu
$ sudo  apt install -y xfonts-utils cabextract
$ sudo apt install ttf-mscorefonts-installer -y
$  ls /home/user/test/
$ cp /home/user/test/deb64_8_3_15_1565.tar.gz /tmp/1ctmp
$ tar xvzf deb64_8_3_15_1565.tar.gz
$ sudo dpkg -i 1c-enterprise83-common_8.3.15-1565_amd64.deb
$ sudo dpkg -i 1c-enterprise83-server_8.3.15-1565_amd64.deb
#$ sudo dpkg -i 1c-enterprise83-ws_8.3.15-1565_amd64.deb
#$ sudo dpkg -i 1c-enterprise83-crs_8.3.15-1565_amd64.deb
#$ sudo apt -f -y install
$ sudo chown -R usr1cv8:grp1cv8 /opt/1C
#$ sudo echo -e "pass\npass\n" | sudo passwd usr1cv8
$ sudo service srv1cv83 start
$ sudo service srv1cv83 status
#$ sudo usermod -aG sudo usr1cv8

$ sudo  apt install -y libc6-i386
$ mkdir /tmp/hasp
$ cd /tmp/hasp
$ wget http://download.etersoft.ru/pub/Etersoft/HASP/last/x86_64/Ubuntu/18.04/haspd-modules_7.90-eter2ubuntu_amd64.deb
$ wget http://download.etersoft.ru/pub/Etersoft/HASP/last/x86_64/Ubuntu/18.04/haspd_7.90-eter2ubuntu_amd64.deb
$ sudo dpkg -i *.deb
#$ sudo apt-get install -f -y
$ sudo service haspd start
$ sudo service haspd status
#$ sudo reboot

$ sudo service srv1cv83 status
$ ss -tlnp | grep :15
LISTEN     0      128          *:1560                     *:*
LISTEN     0      128          *:1540                     *:*
LISTEN     0      128          *:1541                     *:*
LISTEN     0      128         :::1560                    :::*
LISTEN     0      128         :::1540                    :::*
LISTEN     0      128         :::1541                    :::*


Не встал скриптом imagemagick?
Без строчки ниже будет ругаться при входе в 1с
$ sudo apt-get install imagemagick  -y

Для программной лицензии (прявязанной к hasp)

в /var/1C/licenses
Положить лицензию


$ sudo mv 20190207114003.lic /var/1C/licenses




Запуск службы сервера администрирования RAS

$ sudo nano /etc/systemd/system/srv1cv8-ras.service

Вставить:

[Unit]
Description=1C:Enterprise Remote Administration Service
After=network.target remote-fs.target nss-lookup.target
Requires=srv1cv83.service

[Service]
Type=simple
ExecStart=/opt/1C/v8.3/x86_64/ras cluster --port=1545
KillSignal=SIGINT
PrivateTmp=true
Restart=on-failure
RestartSec=5
User=usr1cv8
Group=grp1cv8

[Install]
WantedBy=multi-user.target

Сохранить.


#$ sudo systemctl daemon-reload
$ sudo systemctl enable srv1cv8-ras.service
$ sudo systemctl start srv1cv8-ras.service
$ sudo systemctl status srv1cv8-ras.service

Управление серверами 8.3.15

Настройка резервного копирования

$ sudo nano /root/fullbackup.sh
 
#!/bin/sh -e
# Внимание задать пароль PGPASSWORD !!!
export PGPASSWORD=pass
#/backup
inst='/backup'
cd $inst
#sudo sh /root/terminate.sh
# vacuumdb
sudo systemctl stop srv1cv83.service
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
echo "vacuumdb $DATA - начало" > vacuumdb.txt
sudo -u postgres vacuumdb -afz >> vacuumdb.txt
sudo systemctl start srv1cv83.service
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
if [ $? -ne 0 ]
then
     echo "vacuumdb $DATA - неудачное завершение" >> vacuumdb.txt
else
     echo "vacuumdb $DATA - удачное завершение" >> vacuumdb.txt
fi
echo "-------------------------------------------" >> vacuumdb.txt
cat vacuumdb.txt >> vacuumdb.log
cat vacuumdb.txt | mutt -s "vacuumdb" root
#  /backup/pg_probackup
log=$inst'/log/pg_probackup.log'
log1=$inst'/log/probackup.log'
if [ -f $log ]; then rm $log; fi
cd $inst
pg_probackup-10 backup -B $inst --instance main -U postgres -d postgres -h 127.0.0.1 -b FULL --stream --compress --expired --delete-wal --log-level-file=info
grep completed $log > /dev/null 2>&1
if [ $? -ne 0 ]
then
    msg="$inst неудачное завершение."
else
    msg="$inst удачное завершение."
fi
DATA=`date +"%Y-%m-%d %H:%M:%S"`
#msg1="Размер экземпляра pg_probackup: $(du -h -s $inst)"
echo "=================================================================="  >> $log
echo "$DATA $msg" >> $log
cat $log >> $log1
cat $log  | mutt -s "pg_probackup" root
#echo "$DATA $msg" >> $log1
# Сразу архивируем для rsync
#COPY_DIR=$inst/copy
COPY_DIR=/backups/copy
#COPY_LOG=$inst/copy/copy.log
COPY_LOG=/backups/copy/copy.log
#Берем последнюю копию
COPY_ID=$(ls $inst/backups/main -1 | tail -1)
#Она должна быть completed
grep "$COPY_ID completed" $log > /dev/null 2>&1
if [ $? = 0 ]
then
    DATA=`date +"%Y-%m-%d_%H-%M-%S"`
    #rm  $inst/copy/*
    tar -cvzf $COPY_DIR/pg_pro-$DATA.tar.gz  \
           $inst/backups/main/$COPY_ID > /dev/null 2>&1
    if [ $? = 0 ]
    then
        msg="создан $COPY_DIR/pg_pro-$DATA.tar.gz"
    else
        msg="ошибка создания $COPY_DIR/pg_pro-$DATA.tar.gz"
    fi
    DATA=`date +"%Y-%m-%d %H:%M:%S"`
    echo "$DATA $msg" >> $COPY_LOG
    echo "$DATA $msg" | mutt -s "copy pg_probackup" root
fi

Сохранить.

Проверка:

$ sudo sh /root/fullbackup.sh


$ sudo nano /root/backup-sql.sh

#!/bin/sh
# crontab -e
# mkdir -p /backup/pg_dump
set -e

#BACKUP_DIR="/backup/pg_dump"
BACKUP_DIR="/backups/pg_dump"
cd $BACKUP_DIR
echo "====================================================================" > $BACKUP_DIR/backup.log
# останавливаем сервер 1С
echo "останавливаем сервер 1С"
sudo systemctl stop srv1cv8-ras.service
sudo systemctl stop  srv1cv83.service
echo "состояние сервера 1С"  >> $BACKUP_DIR/backup.log
sudo systemctl status  srv1cv83.service | grep 'Active:' >> $BACKUP_DIR/backup.log
echo "--------------------------------------------------------------------" >> $BACKUP_DIR/backup.log
# Устанавливаем дату
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
DATA_NAME=`date +"%Y-%m-%d_%H-%M-%S"`
echo "$DATA Size database file: " >> $BACKUP_DIR/backup.log
sudo du -h -s /var/lib/postgresql/10/main/base  >> $BACKUP_DIR/backup.log
echo "--------------------------------------------------------------------" >> $BACKUP_DIR/backup.log
# делаем  backup
DB_BASE=`sudo /bin/su postgres -c "/usr/bin/psql -qAt -c 'SELECT * FROM pg_database;'" | \
     cut -d"|" -f1 | /bin/grep -v template | /bin/grep -v postgres`
#DB_BASE="demo test" #конкретные базы
#DB_BASE="" #пропустить
echo $DB_BASE
for DB_NAME in $DB_BASE
 do
     DATA=`date +"%Y-%m-%d_%H-%M-%S"`
     # Записываем информацию в лог с секундами
     echo "$DATA Начало backup базы ${DB_NAME}" >> $BACKUP_DIR/backup.log
     # Бэкапим базу данных demo и сразу сжимаем
     echo "$DATA Начало backup базы ${DB_NAME}"
     sudo /bin/su postgres -c "pg_dump -Fc ${DB_NAME}"  > $BACKUP_DIR/${DB_NAME}_$DATA_NAME.dump
     DATA=`date +"%Y-%m-%d_%H-%M-%S"`
     if [ $? -ne 0 ]
     then
         echo "$DATA Ошибка завершения backup для базы ${DB_NAME}"
         echo "$DATA Ошибка завершения backup для для базы ${DB_NAME}" >> $BACKUP_DIR/backup.log
         exit
     else
          echo "$DATA Успешное завершение backup для базы ${DB_NAME}"
          echo "$DATA Успешное завершение backup для базы ${DB_NAME}" >> $BACKUP_DIR/backup.log
     fi
     echo "--------------------------------------------------------------------" >> $BACKUP_DIR/backup.log
done
# запускаем сервер 1С
echo "Запускаем сервер 1С"
sudo systemctl start  srv1cv83.service
sudo systemctl start srv1cv8-ras.service
echo "Состояние сервера 1С"  >> $BACKUP_DIR/backup.log
sudo systemctl status  srv1cv83.service | grep 'Active:' >> $BACKUP_DIR/backup.log
echo "--------------------------------------------------------------------" >> $BACKUP_DIR/backup.log
echo "Закончено"
cat $BACKUP_DIR/backup.log >> $BACKUP_DIR/backupall.log
cat $BACKUP_DIR/backup.log | mutt -s "backup" root



Сохранить.
 
Проверка  

$ sudo sh /root/backup-sql.sh

$ sudo nano /root/terminate.sh


#!/bin/bash
#if ! pgrep 'ras'; then sudo su usr1cv8 -c "/opt/1C/v8.3/x86_64/ras --daemon cluster"; fi
sudo su usr1cv8 -c "/opt/1C/v8.3/x86_64/ras --daemon cluster" 
#sleep 5
_cluster=$(/opt/1C/v8.3/x86_64/rac cluster list  | grep 'cluster'| awk -F' ' '{print $3}')
_base=$(/opt/1C/v8.3/x86_64/rac infobase --cluster=$_cluster summary list | grep 'infobase '| awk '{print$3}')
_session=$(/opt/1C/v8.3/x86_64/rac session --cluster=$_cluster list | grep 'session '| awk '{print$3}')
echo 'кластер: ' $_cluster
echo 'базы: ' $_base
echo 'сессии:  ' $_session
for session in $_session
do
/opt/1C/v8.3/x86_64/rac session --cluster=$_cluster terminate --session=$session
done
_session=$(/opt/1C/v8.3/x86_64/rac session --cluster=$_cluster list | grep 'session '| awk '{print$3}')
echo 'сессии:  ' $_session

Сохранить.

Проверка

$ sudo sh /root/terminate.sh

$ sudo crontab -e

00 0 * * * sh /root/fullbackup.sh
00 3 * * * sh /root/backup-sql.sh


Сохранить.

пятница, 19 июля 2019 г.

Тестовый сервер test2 настройка 1с

Тестовый сервер test2 базовая настройка
Тестовый сервер test2 настройка PostgreSQL и pg_probackup

В папку /test положить файлы:
deb64_8_3_13_1690.tar.gz

# установка 1с
$ mkdir -p /tmp/1ctmp
$ cd /tmp/1ctmp
$ sudo apt install imagemagick -y
#$sudo apt install -y unixodbc libgsf-1-114 libglib2.0
$ sudo apt install libfreetype6 libgsf-1-common unixodbc glib2.0
#ubuntu
$ sudo  apt install -y xfonts-utils cabextract
$ sudo apt install ttf-mscorefonts-installer -y
$  ls /home/user/test/
$ cp /home/user/test/deb64_8_3_13_1690.tar.gz /tmp/1ctmp
$ tar xvzf deb64_8_3_13_1690.tar.gz
$ sudo dpkg -i 1c-enterprise83-common_8.3.13-1690_amd64.deb
$ sudo dpkg -i 1c-enterprise83-server_8.3.13-1690_amd64.deb
#$ sudo dpkg -i 1c-enterprise83-ws_8.3.13-1690_amd64.deb
#$ sudo apt -f -y install
$ sudo chown -R usr1cv8:grp1cv8 /opt/1C
$ sudo echo -e "pass\npass\n" | sudo passwd usr1cv8
$ sudo service srv1cv83 start
$ sudo service srv1cv83 status
#$ sudo usermod -aG sudo usr1cv8

$ sudo  apt install -y libc6-i386
$ mkdir /tmp/hasp
$ cd /tmp/hasp
$ wget http://download.etersoft.ru/pub/Etersoft/HASP/last/x86_64/Ubuntu/16.04/haspd-modules_7.90-eter2ubuntu_amd64.deb  $ wget http://download.etersoft.ru/pub/Etersoft/HASP/last/x86_64/Ubuntu/16.04/haspd_7.90-eter2ubuntu_amd64.deb

$ sudo dpkg -i *.deb
#$ sudo apt-get install -f -y
$ sudo service haspd start
$ sudo service haspd status
$ sudo reboot

$ sudo service srv1cv83 status
$ ss -tlnp | grep :15
LISTEN     0      128          *:1560                     *:*
LISTEN     0      128          *:1540                     *:*
LISTEN     0      128          *:1541                     *:*
LISTEN     0      128         :::1560                    :::*
LISTEN     0      128         :::1540                    :::*
LISTEN     0      128         :::1541                    :::*


Не встал скриптом imagemagick?
Без строчки ниже будет ругаться при входе в 1с
$ sudo apt-get install imagemagick  -y

Для программной лицензии (прявязанной к hasp)

в /var/1C/licenses
Положить лицензию


$ sudo mv 20190207114003.lic /var/1C/licenses







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

 Настройка технологического журнала

$ sudo mkdir /var/log/1c
$ sudo chown usr1cv8 /var/log/1c

$ sudo touch /opt/1C/v8.3/x86_64/conf/logcfg.xml
$ chmod 644 /opt/1C/v8.3/x86_64/conf/logcfg.xml
$ sudo nano /opt/1C/v8.3/x86_64/conf/logcfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
    <log history="24" location="/var/log/1C/common">
    <event>
      <eq property="Name" value="ADMIN"/>
    </event>
    <event>
      <eq property="Name" value="ATTN"/>
    </event>
    <event>
      <eq property="Name" value="CLSTR"/>
    </event>
    <event>
      <eq property="Name" value="CONN"/>
    </event>
    <event>
      <eq property="Name" value="EXCP"/>
    </event>
    <event>
      <eq property="RetExcp" value=""/>
    </event>
    <event>
      <ne property="RetExcp" value=""/>
    </event>
    <event>
      <eq property="Name" value="EXCPCNTX"/>
    </event>
    <event>
      <eq property="Name" value="PROC"/>
    </event>
        <property name="all"/>
    </log>
</config>

Сохранить.

Другой вариант:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
        <log location="/home/usr1cv8/log" history="96">
                <event>
                        <eq property="name" value="DBPOSTGRS"/>
                </event>
                <event>
                        <eq property="name" value="SDBL"/>
                </event>
                <event>
                        <eq property="name" value="EXCP"/>
                </event>
                <property name="all"/>
        </log>
</config>
Сохранить.

Другой вариант:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
        <log location="/home/usr1cv8/log" history="96">
                <event>
                        <ne property="name" value="DB2" />
                        <ne property="name" value="DBMSSQL" />
                        <ne property="name" value="DBMSSQLCONN" />
                        <ne property="name" value="DBORACLE" />
                        <ne property="name" value="DBPOSTGRS" />
                        <ne property="name" value="DBV8DBENG" />
                        <ne property="name" value="SDBL" />
                        <ne property="name" value="MEM" />
                        <ne property="name" value="TLOCK" />
                        <ne property="name" value="SRVC" />
                        <ne property="name" value="CALL" />
                        <ne property="name" value="CONN" />
                        <ne property="name" value="SCALL" />
                        <ne property="name" value="SCOM" />
                        <ne property="name" value="VRSREQUEST" />
                        <ne property="name" value="VRSRESPONSE" />
                </event>
                <property name="all" />
        </log>
</config>
====================================================== 

Настройка дампов

$ sudo mkdir -p /dumps
$ sudo chown -R usr1cv8:grp1cv8 /dumps
$ echo 'usr1cv8 soft core unlimited' | sudo tee -a /etc/security/limits.conf
$ echo 'usr1cv8 hard core unlimited' | sudo tee -a /etc/security/limits.conf
$ echo 'kernel.core_pattern=/dumps/core.%e.%p ' | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p
#$ sudo usermod -aG sudo usr1cv8
======================================================
Скрипт pg_dump для всех баз postgresql


$ sudo mkdir -p /backup/pg_dump
$ sudo nano /root/backup-sql.sh

#!/bin/sh
# crontab -e
# mkdir -p /backup/pg_dump
set -e

BACKUP_DIR="/backup/pg_dump"
#DIR_YANDEX="/backup/pg_dump/yandex"
echo "====================================================================" > $BACKUP_DIR/backup.log
# останавливаем сервер 1С
echo "останавливаем сервер 1С"
sudo systemctl stop  srv1cv83.service
echo "состояние сервера 1С"  >> $BACKUP_DIR/backup.log
sudo systemctl status  srv1cv83.service | grep 'Active:' >> $BACKUP_DIR/backup.log
echo "--------------------------------------------------------------------" >> $BACKUP_DIR/backup.log
# Устанавливаем дату
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
DATA_NAME=`date +"%Y-%m-%d_%H-%M-%S"`
echo "$DATA Size database file: " >> $BACKUP_DIR/backup.log
sudo du -h -s /var/lib/postgresql/10/main/base  >> $BACKUP_DIR/backup.log
echo "--------------------------------------------------------------------" >> $BACKUP_DIR/backup.log
# делаем  backup
DB_BASE=`sudo /bin/su postgres -c "/usr/bin/psql -qAt -c 'SELECT * FROM pg_database;'" | \
     cut -d"|" -f1 | /bin/grep -v template | /bin/grep -v postgres`
#DB_BASE="demo test" #конкретные базы
#DB_BASE="" #пропустить
echo $DB_BASE
for DB_NAME in $DB_BASE
 do
     DATA=`date +"%Y-%m-%d_%H-%M-%S"`
     # Записываем информацию в лог с секундами
     echo "$DATA Начало backup базы ${DB_NAME}" >> $BACKUP_DIR/backup.log
     # Бэкапим базу данных demo и сразу сжимаем
     echo "$DATA Начало backup базы ${DB_NAME}"
     sudo /bin/su postgres -c "pg_dump -Fc ${DB_NAME}"  > $BACKUP_DIR/${DB_NAME}_$DATA_NAME.dump
     DATA=`date +"%Y-%m-%d_%H-%M-%S"`
     if [ $? -ne 0 ]
     then
         echo "$DATA Ошибка завершения backup для базы ${DB_NAME}"
         echo "$DATA Ошибка завершения backup для для базы ${DB_NAME}" >> $BACKUP_DIR/backup.log
         exit
     else
          echo "$DATA Успешное завершение backup для базы ${DB_NAME}"
          echo "$DATA Успешное завершение backup для базы ${DB_NAME}" >> $BACKUP_DIR/backup.log
     fi
     echo "--------------------------------------------------------------------" >> $BACKUP_DIR/backup.log
done

# запускаем сервер 1С
echo "Запускаем сервер 1С"
sudo systemctl start  srv1cv83.service
echo "Состояние сервера 1С"  >> $BACKUP_DIR/backup.log
sudo systemctl status  srv1cv83.service | grep 'Active:' >> $BACKUP_DIR/backup.log
echo "--------------------------------------------------------------------" >> $BACKUP_DIR/backup.log
echo "Закончено"
cat $BACKUP_DIR/backup.log >> $BACKUP_DIR/backupall.log
# посылаем сообщение
sleep 2
echo "backup" | mutt -s "backup"  f2@vt.com -a $BACKUP_DIR/backup.log


Сохранить.

$ sudo crontab -e

*/15 * * * * sudo sh /root/sysinfo.sh
00 3 * * * sh /root/fullbackup.sh
*/1 * * * *  sudo sh /root/session.sh
59 23 * * * sudo sh /root/mailses.sh
00 5 * * * sh /root/backup-sql.sh

Сохранить.
======================================================
Скрипт убить сессии

$ sudo nano /root/terminate.sh

#!/bin/bash
if ! pgrep 'ras'; then sudo su usr1cv8 -c "/opt/1C/v8.3/x86_64/ras --daemon cluster"; fi
sleep 5
_cluster=$(/opt/1C/v8.3/x86_64/rac cluster list  | grep 'cluster'| awk -F' ' '{print $3}')
_base=$(/opt/1C/v8.3/x86_64/rac infobase --cluster=$_cluster summary list | grep 'infobase '| awk '{print$3}')
_session=$(/opt/1C/v8.3/x86_64/rac session --cluster=$_cluster list | grep 'session '| awk '{print$3}')
echo 'кластер: ' $_cluster
echo 'базы: ' $_base
echo 'сессии:  ' $_session
for session in $_session
do
/opt/1C/v8.3/x86_64/rac session --cluster=$_cluster terminate --session=$session
done
_session=$(/opt/1C/v8.3/x86_64/rac session --cluster=$_cluster list | grep 'session '| awk '{print$3}')
echo 'сессии:  ' $_session

Сохранить.
======================================================
Скрипт sysinfo.sh

$ sudo nano /root/sysinfo.sh

#!/bin/sh
# Устанавливаем дату
DATA=`date +"%Y-%m-%d_%H-%M"`
#FILE= 'sys_$DATA.txt'
echo  $DATA  > sysinfo.txt
#echo  '12345'  > sys_$DATA.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "uptime" >> sysinfo.txt
uptime >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "free -m" >> sysinfo.txt
free -m >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "df -h" >> sysinfo.txt
df -h >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "Размер папки с логами postgresql:" >> sysinfo.txt
echo "du -h -s /var/lib/postgresql/10/main/pg_log" >> sysinfo.txt
du -h -s /var/lib/postgresql/10/main/pg_log  >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "Размер папки с базами postgresql:" >> sysinfo.txt
echo "du -h -s /var/lib/postgresql/10/main/base" >> sysinfo.txt
du -h -s /var/lib/postgresql/10/main/base  >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "Размер папки с логами технологического журнала 1с:" >> sysinfo.txt
echo "du -h -s  /home/usr1cv8/log" >> sysinfo.txt
#du -h -s  /home/usr1cv8/log  >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "Размер папки с dumps 1с:" >> sysinfo.txt
#echo "du -h -s  /dumps" >> sysinfo.txt
echo "du -h -s  /home/usr1cv8/dumps" >> sysinfo.txt
#du -h -s  /dumps  >> sysinfo.txt
#du -h -s  /home/usr1cv8/dumps  >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "sensors" >> sysinfo.txt
sensors >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "iostat -xz" >> sysinfo.txt
iostat -xz >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "sar -r 1 1" >> sysinfo.txt
sar -r 1 1 >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
#echo "ps aux --sort -%mem | awk '{print $6/1024 " MB\t\t" $11}' | head -n10" >> sysinfo.txt
#ps aux --sort -%mem | awk '{print $6/1024 " MB\t\t" $11}' | head -n10 >> sysinfo.txt
#echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "top -b -n1 -o %MEM | head -n30"
top -b -n1 -o %MEM | head -n30 >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
ps -eo rss,pid,user,command | sort -rn | head -20 | awk '{ hr[1024**2]="GB"; hr[1024]="MB";\
 for (x=1024**3; x>=1024; x/=1024) {\
 if ($1>=x) { printf ("%-6.2f %s ", $1/x, hr[x]); break }\
 } } { printf ("%-6s %-10s ", $2, $3) }\
 { for ( x=4 ; x<=NF ; x++ ) { printf ("%s ",$x) } print ("\n") }\
 ' >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "cat /proc/meminfo" >> sysinfo.txt
cat /proc/meminfo >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "mpstat -P ALL" >> sysinfo.txt
mpstat -P ALL >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "smartctl -A /dev/sda" >> sysinfo.txt
smartctl -A /dev/sda  >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "smartctl -A /dev/sdb" >> sysinfo.txt
smartctl -A /dev/sdb  >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "journalctl -b -p err" >> sysinfo.txt
journalctl -b -p err  >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "Мониторинг 1С" >> sysinfo.txt
if ! pgrep 'ras'; then /opt/1C/v8.3/x86_64/ras --daemon cluster; fi
_cluster=$(/opt/1C/v8.3/x86_64/rac cluster list  | grep 'cluster'| awk -F' ' '{print $3}')
_base=$(/opt/1C/v8.3/x86_64/rac infobase --cluster=$_cluster summary list | grep 'infobase '| awk '{print$3}')
_session=$(/opt/1C/v8.3/x86_64/rac session --cluster=$_cluster list | grep 'session '| awk '{print$3}')
echo 'кластер: ' $_cluster >> sysinfo.txt
echo 'базы: ' $_base >> sysinfo.txt
echo 'сессии:  ' $_session >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
/opt/1C/v8.3/x86_64/rac cluster list  >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
for cluster in $_cluster
do
/opt/1C/v8.3/x86_64/rac session --cluster=$_cluster list >> sysinfo.txt
done
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
sleep 2
echo "test" | mutt -s $DATA  f2@vt.com -a sysinfo.txt

Сохранить.
$ sudo crontab -e

*/15 * * * * sh /root/sysinfo.sh
00 3 * * * sh /root/fullbackup.sh
*/1 * * * *  sh /root/session.sh
59 23 * * * sh /root/mailses.sh
00 5 * * * sh /root/backup-sql.sh

Сохранить.
======================================================
Скрипт session.sh

$ sudo nano /root/session.sh

#!/bin/sh
# /root/session.sh
current_date=`date +%Y-%m-%d`
current_time=`date +%H:%M`
if ! pgrep 'ras'; then /opt/1C/v8.3/x86_64/ras --daemon cluster; fi
_cluster=$(/opt/1C/v8.3/x86_64/rac cluster list  | grep 'cluster'| awk -F' ' '{print $3}')
_base=$(/opt/1C/v8.3/x86_64/rac infobase --cluster=$_cluster summary list | grep 'infobase '| awk '{print$3}')
_session=$(/opt/1C/v8.3/x86_64/rac session --cluster=$_cluster list | grep 'session '| awk '{print$3}')
#echo 'кластер: ' $_cluster >> sysinfo.txt
#echo 'базы: ' $_base >> sysinfo.txt
#echo 'сессии:  ' $_session >> sysinfo.txt
# сессии:   2cf54bf0-8365-11e9-9886-309c23451546 bbb8ca0e-8367-11e9-9886-309c23451546 c50f2426-838b-11e9-9886-309c2345154$
ses=0
for count in $_session
do
  ses=$(($ses+1))
done
echo  $current_time $ses  >> /root/ses_$current_date.log

Сохранить.

Сохранить.
$ sudo crontab -e

*/15 * * * * sh /root/sysinfo.sh
00 3 * * * sh /root/fullbackup.sh
*/1 * * * *  sh /root/session.sh
59 23 * * * sh /root/mailses.sh
00 5 * * * sh /root/backup-sql.sh

Сохранить.

======================================================
Скрипт mailses.sh

$ sudo nano /root/mailses.sh
 
#!/bin/sh
current_date=`date +%Y-%m-%d`
echo "test" | mutt -s "session $current_date"  f2@vt.com -a /root/ses_$current_date.log

Сохранить.

$ sudo crontab -e

*/15 * * * * sh /root/sysinfo.sh
00 3 * * * sh /root/fullbackup.sh
*/1 * * * *  sh /root/session.sh
59 23 * * * sh /root/mailses.sh
00 5 * * * sh /root/backup-sql.sh

Сохранить.


======================================================
Скрипт loadavg.sh

$ sudo nano /root/loadavg.sh

Вставить текст ниже

#!/bin/sh
#current_date_time=`date +%Y-%m-%d' '%H:%M:%S`
current_date=`date +%Y-%m-%d`
current_time=`date +%H:%M`
# cat /proc/loadavg
#0.44 0.16 0.06 1/233 2407
loadavg=`cat /proc/loadavg| awk '{print $1 " " $2 " "$3}'`
#echo  $current_time $loadavg
echo  $current_time $loadavg >> /root/la_$current_date.log

Сохранить.

Однократный запуск:
$ sudo sh /root/loadavg.sh

Запись значения в файл каждую минуту

$ sudo crontab -e
Добавить в конец:
# каждую  1 минуту


*/1 * * * * sudo sh /root/loadavg.sh

$ sudo nano mailavg.sh

#!/bin/sh
current_date=`date +%Y-%m-%d`
echo "test" | mutt -s "loadavg $current_date"  f2@vt.com -a /root/la_$current_date.log


Однократный запуск:
$ sudo sh /root/mailavg.sh

Отправка файла в конце конце дня

$ sudo crontab -e
Добавить в конец:



59 23 * * * sudo sh /root/mailavg.sh 

Тестовый сервер test2 настройка PostgreSQL и pg_probackup

Продолжение, начало:
Тестовый сервер test2 базовая настройка

Установка СУБД PostgreSQL версия 10.5-24.1C

$ mkdir /home/user/test
В папку /test положить файлы:

postgresql_10.5_24.1C_amd64_deb.tar.bz2
postgresql_10.5_24.1C_amd64_addon_deb.tar.bz2

$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main" >> /etc/apt/sources.list.d/postgresql.list'
$ sudo apt update -y
$ sudo apt-get install postgresql-common libtcl8.6 -y
$ dpkg -l | grep postgres | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
#pgdg-keyring помечен как зафиксированный.
#postgresql-client-common помечен как зафиксированный.
#postgresql-common помечен как зафиксированный.
$ dpkg -l | grep libtcl8.6 | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
#libtcl8.6 помечен как зафиксированный.
$ mkdir -p /tmp/post
$ cp /home/user/test/postgresql_10.5_24.1C_amd64_deb.tar.bz2 /tmp/post/
$ cp /home/user/test/postgresql_10.5_24.1C_amd64_addon_deb.tar.bz2 /tmp/post/
$ cd /tmp/post
$ tar -xvf postgresql_10.5_24.1C_amd64_deb.tar.bz2
$ cd  postgresql-10.5-24.1C_amd64_deb
$ ls
# список файлов:
#libpq5_10.5-24.1C_amd64.deb  postgresql-10_10.5-24.1C_amd64.deb  postgresql-client-10_10.5-24.1C_amd64.deb
$ sudo dpkg -i *.deb
# ниже можно не ставить:
$ cd /tmp/post/
$ tar -xvf postgresql_10.5_24.1C_amd64_addon_deb.tar.bz2
$ cd postgresql-10.5-24.1C_amd64_addon_deb
$ sudo dpkg -i *.deb
# конец не ставить
$ dpkg -l | grep 10.5-24.1C | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
#libecpg-compat3 помечен как зафиксированный.
#libecpg-dev помечен как зафиксированный.
#libecpg6 помечен как зафиксированный.
#libpgtypes3 помечен как зафиксированный.
#libpq-dev помечен как зафиксированный.
#libpq5 помечен как зафиксированный.
#postgresql-10 помечен как зафиксированный.
#postgresql-10-dbg помечен как зафиксированный.
#postgresql-client-10 помечен как зафиксированный.
#postgresql-doc-10 помечен как зафиксированный.
#postgresql-plperl-10 помечен как зафиксированный.
#postgresql-plpython-10 помечен как зафиксированный.
#postgresql-plpython3-10 помечен как зафиксированный.
#postgresql-pltcl-10 помечен как зафиксированный.
#postgresql-server-dev-10 помечен как зафиксированный.


$ pg_lsclusters
Ver Cluster Port Status Owner    Data directory              Log file
10  main    5432 online postgres /var/lib/postgresql/10/main pg_log/postgresql-%a.log

$ sudo pg_dropcluster --stop 10 main

$ sudo pg_createcluster --locale ru_RU.UTF-8 10 main --  --data-checksums


$ sudo pg_ctlcluster 10 main start

$ pg_lsclusters
Ver Cluster Port Status Owner    Data directory              Log file
10  main    5432 online postgres /var/lib/postgresql/10/main pg_log/postgresql-%a.log
 
$ sudo -u postgres psql -U postgres -c "alter user postgres with password 'pass';"
$ sudo cp /etc/postgresql/10/main/postgresql.conf /etc/postgresql/10/main/postgresql.conf.bak

#Делаем проверки
$ sudo systemctl status postgresql.service
$ ss -tunpl | grep 5432
tcp    LISTEN     0      128       *:5432                  *:*
tcp    LISTEN     0      128      :::5432                 :::*
$ ps aux | grep postgres | grep -- -D
postgres  4914  0.0  0.1 320972 28864 ?        S    08:37   0:00 /usr/lib/postgresql/10/bin/postgres -D /var/lib/postgresql/10/main -c config_file=/etc/postgresql/10/main/postgresql.conf

-------------------------------------------------------------------------------------------------------

Настройка postgresql.conf для 1С Total Memory (RAM): 16 GB

sudo nano /etc/postgresql/10/main/postgresql.conf
Добавить в конец:

# DB Version: 10
# 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
lc_messages='C'
#log_duration = on
#log_statement = all
log_destination = stderr
plantuner.fix_empty_table = 'on'
online_analyze.table_type = 'temporary'
online_analyze.verbose = 'off'

Сохранить.

$ sudo systemctl restart postgresql.service
 -------------------------------------------------------------------------------------------------------

Установка pg_probackup 

pg_probackup описание

$ sudo su -c "echo 'deb [arch=amd64] http://repo.postgrespro.ru/pg_probackup/deb/ $(lsb_release -cs) main-$(lsb_release -cs)' > /etc/apt/sources.list.d/pg_probackup.list" 
$ sudo su -c "wget -O - http://repo.postgrespro.ru/pg_probackup/keys/GPG-KEY-PG_PROBACKUP | apt-key add -" 
$ sudo apt-get update 
$ sudo apt-get install pg-probackup-10
$ dpkg -l | grep pg-probackup-10 | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
#pg-probackup-10 помечен как зафиксированный.

Инициализация каталога резервных копий 1 экземпляр на примонтированом HDD


Каталог резервных копий /backup/pg_probackup расположено на hdd диске, в нем будем ежедневно сохранять backup за 30 дней без непрерывного архивирования.
Если нет дополнительного диска, выполняем закомментированые команды
$ sudo mkdir /backup/pg_probackup
$ sudo mkdir /backup/pg_probackup/copy
$ sudo mkdir /backup/pg_probackup/log
$ sudo chown -R postgres:postgres /backup/
#$ sudo chmod -R 777 /backup/pg_probackup

 
$ sudo -u postgres pg_probackup-10 init -B /backup/pg_probackup
Определение копируемого экземпляра 
$ sudo -u postgres pg_probackup-10 add-instance -B /backup/pg_probackup -D /var/lib/postgresql/10/main --instance main

$ sudo nano /etc/postgresql/10/main/postgresql.conf

Добавить:

max_wal_senders = 10
wal_level = replica
unix_socket_directories='/var/run/postgresql'
# Для настройки архивного резервного копирования разкомментировать:
archive_mode = on
#archive_command ='test ! -f /wal/%f && cp %p /wal/%f' 
archive_command = '/usr/bin/pg_probackup-10 archive-push -B /backup/pg_probackup --compress --instance main --wal-file-path %p --wal-file-name %f'

Сохранить.

$ sudo systemctl restart postgresql.service

Настройка политики сохранения 5 резервных копий

$ sudo -u postgres nano /backup/pg_probackup/backups/main/pg_probackup.conf

Добавить:

retention-redundancy=5

Сохранить


Создание полной автономной резервной копии: 

$ sudo -u postgres pg_probackup-10 backup -B /backup/pg_probackup --instance main -b FULL --stream --compress --delete-wal --expired


Просмотр:

$ sudo -u postgres pg_probackup-10 show -B /backup/pg_probackup


Проверка backup:

Проверка файлов:
$ sudo -u postgres pg_probackup-10 checkdb -B /backup/pg_probackup --instance main
INFO: Start checking data files
INFO: Data files are valid

Проверка backup: 
$ sudo -u postgres pg_probackup-10 validate -B /backup/pg_probackup
INFO: Validate backups of the instance 'main'
INFO: Validating backup PUVU29
INFO: Backup PUVU29 data files are valid
INFO: Backup PUVU29 WAL segments are valid
INFO: Validating backup PUVTUX
INFO: Backup PUVTUX data files are valid
INFO: Backup PUVTUX WAL segments are valid
INFO: All backups are valid

-------------------------------------------------------------------------------
Скрипт резервного копирования

Проверка авторизации по паролю
$ PGPASSWORD=pass psql -U postgres  -h 127.0.0.1 postgres

$ sudo  nano /root/fullbackup.sh

#!/bin/sh -e
#
email=f1@vu.com
#sudo sh /root/terminate.sh
# vacuumdb
#sudo systemctl stop srv1cv83.service
sudo -u postgres vacuumdb -afz > vacuumdb.txt
#sudo systemctl start srv1cv83.service
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
if [ $? -ne 0 ]
then
     echo "vacuumdb неудачное завершение" | mutt -s 'vacuumdb '$DATA' - неудачное завершение' $email -a vacuumdb.txt
else
     echo "vacuumdb удачное завершение" | mutt -s 'vacuumdb '$DATA' - удачное завершение' $email -a vacuumdb.txt
fi

# /backup/pg_probackup
inst='/backup/pg_probackup'
log=$inst'/log/pg_probackup.log'
if [ -f $log ]; then rm $log; fi
cd $inst

PGPASSWORD=password pg_probackup-10 backup -B $inst --instance main -U postgres -d postgres -h 127.0.0.1 -b FULL --stream --compress --expired --delete-wal --log-level-file=info

grep completed $log > /dev/null 2>&1
if [ $? -ne 0 ]
then
    msg="$inst неудачное завершение."
else
    msg="$inst удачное завершение."
fi
DATA=`date +"%Y-%m-%d %H:%M:%S"`
msg1="Размер экземпляра pg_probackup: $(du -h -s $inst)"
echo "$msg $msg1" | mutt -s "$msg $DATA" $email -a $log

# Сразу архивируем для rsync
COPY_DIR=$inst/copy
#Берем последнюю копию
COPY_ID=$(ls $inst/backups/main -1 | tail -1)
#Она должна быть completed
grep "$COPY_ID completed" $log > /dev/null 2>&1
if [ $? = 0 ]
then
    DATA=`date +"%Y-%m-%d_%H-%M-%S"`
    #rm  $inst/copy/*
    tar -cvzf $COPY_DIR/pg_pro-$DATA.tar.gz  \
           $inst/backups/main/$COPY_ID > /dev/null 2>&1
    if [ $? = 0 ]
    then
        DATA=`date +"%Y-%m-%d_%H-%M-%S"`
        msg="создан $COPY_DIR/pg_pro-$DATA.tar.gz"
    else
        msg="ошибка создания $COPY_DIR/pg_pro-$DATA.tar.gz"
    fi
    echo $msg | mutt -s "$msg" $email -a $log
fi

Проверка:

Сохранить.

$ sudo crontab -e

*/5 * * * * sh /root/fullbackup.sh

Сохранить.






Дополнительная информация:
-------------------------------------------------------------------------------------------------------
Настраиваем после установки баз 1С 
petergeoghegan/amcheck

$ sudo apt install postgresql-10-amcheck

Для каждой базы:
postgres=# CREATE EXTENSION amcheck;
или
postgres=# CREATE EXTENSION amcheck_next;

Grigory Smolkin: для PG =<10 рекомендую ( Grigory Smolkin) использовать  amcheck_next

Для каждой базы, например demo:

$ sudo -u postgres psql -d postgres -c "CREATE EXTENSION amcheck_next" 
$ sudo -u postgres psql -d demo -c "CREATE EXTENSION amcheck_next"

$ sudo -u postgres pg_probackup-10 checkdb -B /backup/pg_probackup --instance main --amcheck

INFO: Start checking data files
INFO: Data files are valid
INFO: Start amchecking PostgreSQL instance
INFO: Amchecking database 'postgres' using extension 'amcheck_next' version 2 from schema 'public'
INFO: Amchecking database 'demo' using extension 'amcheck_next' version 2 from schema 'public'
INFO: Checkdb --amcheck executed successfully
INFO: Indexes are valid


опция --heapallindexed, с ней amcheck проверяет, что хип, который должен быть проиндексирован, действительно проиндексирован

$ sudo -u postgres pg_probackup-10 checkdb -B /backup/pg_probackup --instance main --amcheck --heapallindexed

INFO: Start checking data files
INFO: Data files are valid
INFO: Start amchecking PostgreSQL instance
INFO: Amchecking database 'postgres' using extension 'amcheck_next' version 2 from schema 'public'
INFO: Amchecking database 'demo' using extension 'amcheck_next' version 2 from schema 'public'
INFO: Checkdb --amcheck executed successfully
INFO: Indexes are valid
------------------------------------------------------------------------------------------------------- 

Пример восстановления из полной автономной резервной копии (замена кластера на резервную копию)


Сделали копию:
$ sudo -u postgres pg_probackup-10 backup -B /backup/pg_probackup --instance main -b FULL --stream --compress --expired

Перед восстановлением

Просмотр:

$ sudo -u postgres pg_probackup-10 show -B

Проверка backup:
$ sudo -u postgres pg_probackup-10 validate -B /backup/backup1

INFO: Validate backups of the instance 'main'
INFO: Validating backup PRP29I
INFO: Backup PRP29I data files are valid
INFO: Backup PRP29I WAL segments are valid

Можно восстанавливать.

Останавливаем 1с
$ sudo systemctl stop srv1cv83.service

Останавливаем postgresql
$ sudo systemctl stop postgresql.service

Удалим кластер main
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/10/main/*"

Восстановим кластер main
$ sudo -u postgres pg_probackup-10 restore -B /backup/backup1 --instance main -i PRP29I
INFO: Validating backup PRP29I
INFO: Backup PRP29I data files are valid
INFO: Backup PRP29I WAL segments are valid
INFO: Backup PRP29I is valid.
INFO: Restore of backup PRP29I completed.


Запускаем postgresql
$ sudo systemctl start postgresql.service

Запускаем 1с
$ sudo systemctl start srv1cv83.service

------------------------------------------------------------------------------------------------------- 

Пример восстановления из полной автономной резервной копии c непрерывным архивированием (замена кластера на резервную копию)


$ sudo -u postgres pg_probackup-10 backup -B /backup/pg_probackup --instance main -b FULL --stream --compress --delete-wal --expired


Просмотр:

$ sudo -u postgres pg_probackup-10 show -B /backup/pg_probackup


Проверка backup:
$ sudo -u postgres pg_probackup-10 validate -B /backup/pg_probackup

INFO: Validate backups of the instance 'main'
INFO: Validating backup PRP6Q5
INFO: Backup PRP6Q5 data files are valid
INFO: Backup PRP6Q5 WAL segments are valid
 Можно восстанавливать, но проверим непрерывность архивирования:


Войти в 1с создать документ, провести, выйти из 1с.


$ sudo -u postgres pg_probackup-10 validate -B /backup/pg_probackup   --instance main -i PRP6Q5 --time='2042-04-16 12:26:00'
INFO: Validating backup PRP6Q5
INFO: Backup PRP6Q5 data files are valid
WARNING: Thread [1]: Could not read WAL record at 1/88000000
ERROR: Thread [1]: WAL segment "/backupwal/wal/main/000000010000000100000088" is absent
WARNING: Recovery can be done up to time 2019-05-18 14:36:30+03, xid 0 and LSN 1/2A000198
ERROR: Not enough WAL records to time 2042-04-16 12:26:00+03



Останавливаем 1с
$ sudo systemctl stop srv1cv83.service

Останавливаем postgresql
$ sudo systemctl stop postgresql.service

Удалим кластер main
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/10/main/*"

Восстановим кластер main
$ sudo -u postgres pg_probackup-10 restore -B /backup/pg_probackup --instance main -i PRP6Q5 --recovery-target='latest'


INFO: Validating backup PRP6Q5
INFO: Backup PRP6Q5 data files are valid
INFO: Backup PRP6Q5 WAL segments are valid
INFO: Backup PRP6Q5 is valid.
INFO: Restore of backup PRP6Q5 completed.


Запускаем postgresql
$ sudo systemctl start postgresql.service

Запускаем 1с
$ sudo systemctl start srv1cv83.service

-------------------------------------------------------------------------------------------------------
Примечание 1


wal архивация сразу не заработала, проблема в pg_probackup 2.1.1
странное сообщение в логах - could not find a "pg_probackup" to execute #39

#archive_command = 'pg_probackup-10 archive-push -B /backupwal --compress --instance main --wal-file-path %p --wal-file-name %f'

нужно указать полный путь к pg_probackup-10:

archive_command = '/usr/bin/pg_probackup-10 archive-push -B /backupwal --compress --instance main --wal-file-path %p --wal-file-name %f'

В логе было:

2019-05-18 12:27:24 MSK [20683]: [68-1] user=,db=,client= LOG:  archive command failed with exit code 1
2019-05-18 12:27:24 MSK [20683]: [69-1] user=,db=,client= DETAIL:  The failed archive command was: pg_probackup-10 archive-push -B /backupwal --compress --instance main --wal-file-path pg_wal/0000000100000000000000F1 --wal-file-name 0000000100000000000000F1
2019-05-18 12:27:24 MSK [20683]: [70-1] user=,db=,client= WARNING:  archiving write-ahead log file "0000000100000000000000F1" failed too many times, will try again later
could not find a "pg_probackup-10" to execute
pg_probackup-10: could not find own program executable


Для проверки стандартной wal архивации:

$ sudo mkdir -p /wal
$ sudo chown -R postgres:postgres /wal


$ sudo nano /etc/postgresql/10/main/postgresql.conf

расскоментировать:
archive_command ='test ! -f /wal/%f && cp %p /wal/%f'

Сохранить.

$ sudo systemctl restart postgresql.service

 
-------------------------------------------------------------------------------------------------------

четверг, 18 июля 2019 г.

Тестовый сервер test2 базовая настройка

В данной статье опишем установку сервера СУБД PostgreSQL версия 10.5-24.1C на ubuntu server 16.04.6.
Драйверы hasp берем etersoft
1. Установка ubuntu 16.04.6
Устанавливаем ubuntu 16.04.6 без swap файла, т.е. размечаем вручную весь диск ext4 root.
RAM (16 GB) монтируем диск для backup /backup


Настройки ubuntu пользователь (привязка в скриптах) user пароль 12345, имя компьютера test2, позже мы его сменим скриптом, как и ip адрес.

После установки, Ctrl +Alt + T (окно терминала)
$ sudo apt update -y
$ sudo apt upgrade -y
$ sudo apt autoremove -y
$ sudo apt install mc ssh samba -y

Возможно sudo apt upgrade -y не пройдет из за блокировки, тогда sudo reboot и повторите с начала.


2. Настройка сети

Тестовый сервер будет использовать dhcp

Смотрим:
$ cat  /etc/hosts
127.0.0.1       localhost
127.0.1.1       test2



$ sudo nano /etc/hosts

Меняем:

127.0.0.1       localhost test2

Сохранить.

$ cat /proc/cpuinfo | grep MHz
cpu MHz         : 800.111
cpu MHz         : 800.028
cpu MHz         : 800.377
cpu MHz         : 800.190


3. Тюнинг остального:

Сделаем еще один скрипт для настройки остального:

$ 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
#add a swap file to an Ubuntu 16.04
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo cp /etc/fstab /etc/fstab.bak
sudo echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
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"
sudo sysctl -p
# перезагрузим сеть
#sudo systemctl restart networking.service
#sudo systemctl start networking.service
#sudo systemctl enable networking.service
# Настройка sudo journalctl -b sudo journalctl -b -1 sudo journalctl --list-boots
sudo sed -i 's/#Storage=auto/Storage=persistent/' /etc/systemd/journald.conf
# Отключение уведомлений службы Apport (/var/crash)
sudo sed -i 's/enabled=1/enabled=0/' /etc/default/apport
# Отключим службу ondemand# (для разгона cpu)
# cat /proc/cpuinfo | grep MHz
# systemctl status ondemand
sudo systemctl stop ondemand
sudo systemctl disable ondemand
# shutdown -r now

Сохраним файл tuning.sh

------------------------------------------
Сделаем исполняем
$ chmod +x tuning.sh
$  sudo ./tuning.sh

или
$  sudo sh tuning.sh
------------------------------------------

Перезагрузимся

$ sudo reboot

После перезагрузки по сети можно подключиться MobaXterm

$ cat /proc/cpuinfo | grep MHz 
cat /proc/cpuinfo | grep MHz
cpu MHz         : 4000.489
cpu MHz         : 4000.162
cpu MHz         : 4000.980
cpu MHz         : 4002.072

$ free
              total        used        free      shared  buff/cache   available
Память:    16284616       95512    15944100        1312      245004    15870784
Подкачка:     1048572           0     1048572

4. Настройка ssh

$ cd ~
$ mkdir ~/.ssh
$ cd ~/.ssh
$ ip a
$ ssh-keygen -t rsa

user@test2:~/.ssh$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): user@test2
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in user@test2.
Your public key has been saved in user@test2.pub.

$ ls

user@test2:~/.ssh$ ls
user@test2  user@test2.pub

Скачать и использовать для входа /home/user/.ssh/user@test2
$ cp ~/.ssh/user@test2.pub ~/.ssh/authorized_keys
$ rm ~/.ssh/user@test2.pub
$ rm ~/.ssh/user@test2
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys
$ sudo nano /etc/ssh/sshd_config

Проверить:

PasswordAuthentication no
.....

PubkeyAuthentication yes
ChallengeResponseAuthentication no

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

$ sudo systemctl reload sshd

5. Настройка Ubuntu для работы с ИБП от APC
APCUPSd: Поля о состоянии устройства
APCUPSD User Manual
Ureadahead сообщает об ошибках относительного пути в выходных данных journalctl

$ lsusb
....
Bus 001 Device 004: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
....
$ sudo apt-get install apcupsd -y
$ sudo nano /etc/apcupsd/apcupsd.conf

1.
#UPSCABLE smart
UPSCABLE usb
......
2.
#UPSTYPE apcsmart
UPSTYPE usb

3. закомментировать DEVICE /dev/ttyS0
#DEVICE /dev/ttyS0

# Для проверки можно 30 (потом убрать )
TIMEOUT 30

TIMEOUT - параметр актуален для старых ИБП, неспособных определять свой уровень заряда. Задаёт время (в секундах) между сбоем электропитания и отключением компьютера. Для современного ИБП параметр стоит оставить на 0, но выставление иного значения может быть удобно для тестирования работы ИБП. Например, если выставить 30 и выдернуть шнур из розетки, уже через полминуты apcupsd продемонстрирует своё умение выключать компьютер
Сохранить.

Настроим /etc/default/apcupsd 
Заменяем ISCONFIGURED=no на ISCONFIGURED=yes , сохраняем, закрываем. Отныне apcupsd будет знать, что мы не забыли его настроить.

Т.е 0 будет ждать разрядки батареи, 30 - будет ждать 30 с.


$ sudo nano /etc/default/apcupsd

#ISCONFIGURED=no
ISCONFIGURED=yes


Сохранить.


Теперь достаточно запустить apcupsd:

$ sudo /etc/init.d/apcupsd start
Starting UPS power management: apcupsd.
$ sudo /etc/init.d/apcupsd status

user@s1030:~$ sudo /etc/init.d/apcupsd status
APC      : 001,017,0423
DATE     : 2018-08-02 18:09:14 +0300
HOSTNAME : s1030
VERSION  : 3.14.12 (29 March 2014) debian
CABLE    : USB Cable
DRIVER   : USB UPS Driver
UPSMODE  : Stand Alone
STARTTIME: 2018-08-02 18:08:49 +0300
STATUS   : COMMLOST
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME  : 30 Seconds
NUMXFERS : 0
TONBATT  : 0 Seconds
CUMONBATT: 0 Seconds
XOFFBATT : N/A
STATFLAG : 0x05000100
END APC  : 2018-08-02 18:09:14 +0300

Важно!
$ sudo reboot

 Смотреть статус должен быть STATUS   : ONLINE
 Если STATUS   : COMMLOST, нет связи с UPS !!!


$ sudo /etc/init.d/apcupsd status
APC      : 001,034,0830
DATE     : 2019-07-18 19:35:41 +0300
HOSTNAME : test2
VERSION  : 3.14.12 (29 March 2014) debian
UPSNAME  : test2
CABLE    : USB Cable
DRIVER   : USB UPS Driver
UPSMODE  : Stand Alone
STARTTIME: 2019-07-18 19:35:39 +0300
MODEL    : Back-UPS ES 700G
STATUS   : ONLINE
LINEV    : 224.0 Volts
LOADPCT  : 12.0 Percent
BCHARGE  : 100.0 Percent
TIMELEFT : 26.1 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME  : 30 Seconds
SENSE    : Medium
LOTRANS  : 180.0 Volts
HITRANS  : 266.0 Volts
ALARMDEL : 30 Seconds
BATTV    : 13.5 Volts
LASTXFER : No transfers since turnon
NUMXFERS : 0
TONBATT  : 0 Seconds
CUMONBATT: 0 Seconds
XOFFBATT : N/A
STATFLAG : 0x05000008
SERIALNO : 5B1826T43258
BATTDATE : 2018-06-27
NOMINV   : 230 Volts
NOMBATTV : 12.0 Volts
FIRMWARE : 871.O4 .I USB FW:O4
END APC  : 2019-07-18 19:36:06 +0300



BCHARGE  : 50.0 Percent - Зарядка батарей 50%
TIMELEFT : 26.1 Minutes - Оставшееся время работы от батареи по оценке ИБП.

Вырубить из розетки, через 30 с сервер должен отключиться.

======================================================
6. Настройка Postfix для отправи почты через yandex

Настройка Postfix для отправки почты через yandex

Postfix relay yandex
Пошаговая инструкция установки Postfix и Dovecot на Ubuntu
journalctl: open database /etc/aliases.db: No such file or directory 

user@yandex.ru - e-mail с которого будем посылать письма на произвольные адреса

$ sudo apt update 
$ sudo apt upgrade
(postfix без настройки)
$ sudo apt install postfix mutt


$ sudo mkdir /etc/postfix/private
#$ sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.bak
$ sudo nano /etc/postfix/main.cf

Вставить в пустой файл:

relayhost =
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/private/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_type = cyrus
smtp_sasl_mechanism_filter = login
smtp_sender_dependent_authentication = yes
sender_dependent_relayhost_maps = hash:/etc/postfix/private/sender_relay
sender_canonical_maps = hash:/etc/postfix/private/canonical


Сохранить.

Создать файл /etc/postfix/private/canonical :

$ sudo nano /etc/postfix/private/canonical

Содержимое (Ваш: user@yandex.ru  где user ваш логин) :

@yandex.ru user@yandex.ru


Сохранить.

Создать файл  /etc/postfix/private/sender_relay :

sudo nano /etc/postfix/private/sender_relay

Содержимое:

@yandex.ru smtp.yandex.ru

Сохранить.

Создать файл  /etc/postfix/private/sasl_passwd:
где вместо *** укажите свой пароль:
 
$ sudo nano /etc/postfix/private/sasl_passwd

Содержимое (Ваш: user@yandex.ru  где user ваш логин, password - ваш пароль ) :

[smtp.yandex.ru] user@yandex.ru:password

Сохранить.

$ sudo postmap /etc/postfix/private/*
$ sudo postalias /etc/aliases
$ sudo systemctl restart postfix.service
#$ sudo systemctl status postfix.service

$ sudo reboot

$ sudo systemctl status postfix.service

 посмотреть:

$ sudo journalctl -b
$ sudo journalctl -b -p err

Если есть сообщения:
........
open database /etc/aliases.db: No such file or directory
........

$ sudo postalias /etc/aliases
или
$ sudo newaliases

Перезагрузить и проверить.

Отправка почты на наш e-mail:

$ echo "test" | mutt -s "test" nash@e-mail.ru

Отправка почты на наш e-mail с вложением файла:

$ echo "test" | mutt -s "test" nash@e-mail.ru -a file

$ sudo apt install sysstat lm-sensors smartmontools

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

7. Зашарить папку по сети \\test\files
$ sudo mkdir /share/
$ sudo chmod -R 777 /share/
$ sudo chown -R root:sambashare /share/
$ sudo cp -b -f /etc/samba/smb.conf /etc/samba/smb.conf.bak
$ sudo nano /etc/samba/smb.conf

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

[files]
path = /share/
comment = No comment
read only = no
available = yes
browseable = yes
writable = yes
guest ok = yes
public = yes
printable = no
locking = no
strict locking = no

Сохранить
Перезагрузить службу

$ sudo service smbd restart

======================================================
8. Настройка rsync Ubuntu 16.04
$ sudo nano /etc/default/rsync

#RSYNC_ENABLE=false
RSYNC_ENABLE=true

Сохранить.


$ sudo nano /etc/rsyncd.conf
# create new
# any name you like

[backup]
# destination directory to copy

path =
/backup
# hosts you allow to access

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


Сохранить.

$ sudo systemctl enable rsync
$ sudo systemctl start rsync

Архивы вида pg_pro-2019-05-28_12-39-21.tar.gz
будут в папке /backupwal/copy

Для скачивания на windows машины
Установка RSync в Windows Cygwin 

На windows машине запускаем синхронизацию в планировщике один раз в день, по времени
позже обычного завершения архивирования на сервере

rsync -avz 192.168.0.239::backup  /cygdrive/D/z  --progress 

В папке D:\z 

будут складываться архивы копии кластера за каждый вида: 
.....
pg_pro-2019-05-28_12-39-21.tar.gz 
.....

Старые архивные копии можно удалять forfiles.exe
Как удалять файлы старше 10 дней на windows

9. Настройка клиента Openconnect

$ sudo apt install openconnect

Положить сертификат
 /root/server.p12 - клиентский
/root/ca-cert.pem - сервера


Запустить локально:
$ sudo openconnect -b xxx.xxx.xxx.xxx -c /root/server@xxx.xxx.xxx.xxx.p12 --cafile /root/ca-cert.pem


Если в логах появится постоянно:

Jul 16 13:44:47 u1804 openconnect[1796]: DTLS handshake failed: The operation timed out
Jul 16 13:46:17 u1804 openconnect[1796]: DTLS handshake failed: Resource temporarily unavailable, try again.
Jul 16 13:50:48 u1804 openconnect[1796]: message repeated 3 times: [ DTLS handshake failed: Resource temporarily unavailable, try again.]

Добавить:
--no-dtls

$ sudo openconnect -b XXX.XXX.XXX.XXX -c /root/server@XXX.XXX.XXX.XXX.p12 --key-password=password --cafile /root/ca-cert.pem --no-dtls --syslog

$ route


$ sudo pkill openconnect


Сделать службу:

$ sudo nano /etc/systemd/system/openconnect.service

Вставить:

[Unit]
  Description=OpenConnect VPN Client
  After=network-online.target
  Wants=network-online.target

[Service]
  Type=simple
  ExecStart=/usr/sbin/openconnect XXX.XXX.XXX.XXX -c /root/server@XXX.XXX.XXX.XXX.p12 --key-password=password --cafile /root/ca-cert.pem --no-dtls --syslog
  #--no-dtls # Добавить в предыдущую строку для отключения dtls
  ExecStop=/usr/bin/pkill openconnect
  Restart=always
  RestartSec=2

[Install]
  WantedBy=multi-user.target

Сохранить.

$ sudo systemctl enable openconnect.service

$ sudo systemctl start openconnect.service

Если что то менялось:
$ sudo systemctl daemon-reload
$ sudo systemctl restart openconnect.service

$ route
Проверить ip (если настроена маршрутизация интернета)
$ wget -O - -q icanhazip.com

$ sudo reboot

Настройка ufw для ограничения доступа по vpn
$ sudo sed -i 's|IPV6=yes|IPV6=no|' /etc/default/ufw
$ sudo ufw reset
$ sudo ufw status
$ sudo ufw enable
$ sudo ufw default deny incoming
$ sudo ufw default deny outgoing
$ sudo ufw default deny forward
$ sudo ufw allow out on enp1s0
$ sudo ufw allow in on enp1s0
$ sudo ufw allow out on tun0 to any port 22
$ sudo ufw allow in on tun0 to any port 22
$ sudo ufw allow in on tun0 to any port 1545
$ sudo ufw disable && sudo ufw enable
$ sudo ufw status


 Таким образом локальная сеть без ограничений, по tun0 открыт ssh, а доступ к нему по сертификату.

Удаление правил:
# ufw status numbered
.........
# ufw delete 2

10. Отключить оповещение по почте с в команде crontab

$ sudo crontab -e

Добавить в начало:

MAILTO=""
 


Сохранить.