15 апреля 2019 г.

Простенькая репликация postgres

Имеем в наличии:
Два сервера под управлением Astra Linux 1.5 с postgres 9.2 на борту
Настроена боевая база на мастере.
srv - master - 192.168.10.1
srv2 - slave - 192.168.10.2

Нужно:
1. Репликация
2. Балансировка

Делаем.
Первым шагом настраиваем реплику

На мастере:
В файле pg_hba.conf добавляем запись
host     replication    postgres   192.168.10.2/32    trust

В файле postgresql.conf:
max_wal_senders = 1 # количество подключаемых резервных серверов
max_keep_segments = 256 # Количество хранимых сегментов. Необходимо подобрать такое количество, чтобы резервных сервер успевал все забирать. Я влепил 256 (макс), чтобы за сутки wal не затирались

wal_level = hot_standby # hot_standby добавляет информацию, необходимую для запуска только для чтения запросов на резервный сервер

checkpoint_segments = 16 # Можно увеличить количество сегментов в wal-логе

На слейве
Создаем директорию, куда будет литься реплика
mkdir -p /DATA/main/

Добавляем локали ru_RU.UTF-8, en_US.UTF-8, для чего необходимо раскоментировать их в файле /etc/locale.gen. и выполнить команду: 
locale-gen 

Проверяем наличие в системе нужной локали
locale -a 

Сносим старый кластер:
pg_dropcluster 9.2 main --stop

Создаем новый кластер с нужной локалью:
pg_createcluster --locale=ru_RU.UTF-8 -d /DATA/main 9.2 main


Удаляем оттуда все
rm -r /DATA/main/*


Запускаем pg_basebackup
pg_basebackup --host=192.168.10.1 --port=5432 --username=postgres -D "/DATA/main/"

После выполнения меняем владельца файлов даты
chown -R postgres /DaTA/main/

Стартуем кластер на слейве.
Если не стартуется в файле psotgresql.conf, на слейве, поменять
log_destination = 'stderr' на log_destination = 'syslog'
и искать ошибку в syslog

Видеодрайверы для astra linux

Скачать драйвера для AL 1.6
1. 340
2. 390
3. 490
Все версии подписаны ключом

Установка драйверов для AL 1.6


Скачать архив с нужной версией драйвера.
Очистить и обновить файл /etc/X11/xorg.conf;
    rm /etc/X11/xorg.conf
    dpkg-reconfigure xserver-xorg

Распаковать полученный архив:
    tar xzf nvidia-graphics-drivers-{340,390,410}.tar.gz

Перейти в созданный при распаковке каталог и установить драйверы:
    cd nvidia-graphics-drivers-{340,390,410} && sudo dpkg -i *.deb

Запретить запуск драйверов nouveau, изменив конфигурационные файлы (операция требует привилегий суперпользователя), а именно:

добавить в файл /etc/modprobe.d/blacklist.conf строчки
    blacklist nouveau
    options nouveau modeset=0

и закомментировать в файле /etc/initramfs-tools/modules строчку nouveau modeset=1
    #nouveau modeset=1

после чего выполнить команду
    update-initramfs -u -k all

Вышеуказанные действия можно выполнить следующим сценарием от имени суперпользоваетеля:

    echo blacklist nouveau >> /etc/modprobe.d/blacklist.conf
    echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist.conf
    sed -i -e "s/^[[:space:]]*nouveau[[:space:]]\+modeset[[:space:]]*=[[:space:]]*1/#nouveau modeset=1/" /etc/initramfs-tools/modules
    update-initramfs -u -k all

    Перезагрузить компьютер.

Удаление драйверов для AL 1.6
Для удаления драйверов Nvidia и восстановления работы драйверов Nouveau следует выполнить следующие действия:

Очистить и обновить файл /etc/X11/xorg.conf;
    rm /etc/X11/xorg.conf
    dpkg-reconfigure xserver-xorg

Удалить все пакеты драйверов Nvidia:
    apt remove --purge --yes --force-yes nvidia*
    apt remove --purge --yes --force-yes libnvidia*
    apt remove --purge --yes --force-yes xserver-xorg-video-n*
    for nvdeb in `dpkg -l | grep nvidia`; do
        apt remove --purge --yes --force-yes $nvdeb
    done

Восстановить оригинальные версии GL библиотек mesa и символических ссылок:
    apt install --reinstall --yes --force-yes xserver-xorg-core libgl1 libgl1-mesa-dri libgl1-mesa-glx libglapi-mesa libgles2 libgles2-mesa libglew2.0 libglewmx1.13 libglu1-mesa libglvnd0 libglx-mesa0 libglx0

Удалить модули ядра Nvidea:
    for nvdriver in `find /lib/modules -type f -name "nvidia*"`; do
        echo "$nvdriver"
        mv -f $nvdriver ${nvdriver}-$$-backup
    done
    depmod -a

Удалить (или закомментировать) строки в файле /etc/modprobe.d/blacklist.conf, запрещающие запуск драйверов nouveau:

    # blacklist nouveau
    # options nouveau modeset=0

Раскомментировать в файле /etc/initramfs-tools/modules строку
    nouveau modeset=1

и выполнить команду
    update-initramfs -u -k all

После этого перезагрузить машину.



Скачать драйвера для AL 1.5

1. 387.12
2. 384.47
3. 375.20
4. 367.35
5. 361.28
6. 340.98
7. 304.137
8. 340.98
9. 390.77
10. 390.87

Модули для ядря generic-4.2.0-24, работают только с драйвером 387.12
Скачать


Установка драйверов для AL 1.5

sudo dpkg -i nvidia-drivers-astra-smolensk-1.5*.deb 


Удаление драйверов для AL 1.5

sudo dpkg --purge nvidia-drivers-astra-smolensk*.deb



FixMe

Проблема с расширениями OpenGL на мандатных уровнях, отличных от нулевого c проприетарными драйверами Nvidia (Astra Linux SE 1.4/1.5)



В каталог /etc/X11/fly-dm положить файл Xsetup

Содержимое файла Xsetup

#! /bin/sh
# Xsetup - run as root before the login dialog appears
  
#xconsole -geometry 480x130-0-0 -notify -verbose -fn fixed -exitOnFail -file /dev/xconsole &
  
if [ -x /usr/sbin/pdp-flbl ]; then
  find /dev/dri -type c -exec /usr/sbin/pdp-flbl :::ehole {} \;
  find /dev -name nvidia*  -type c -exec /usr/sbin/pdp-flbl :::ehole {} \;
  /usr/sbin/pdp-flbl -R :::ehole /proc/driver/nvidia \;
fi
  
/usr/bin/fly-dm-set-dpi.sh


Включение дискретной карты Nvidia на ноутбуках с гибридной графикой

Если требуется использовать только один видеоадаптер, проверьте BIOS ноутбука, возможно в BIOS есть опция, отключающая один из чипов. Либо используйте следующее решение.

Установите драйвер Nvidia. Проприетарный драйвер не поддерживает динамического переключения между картами, поэтому для включения карты Nvidia измените или создайте файл (если отсутствует) /etc/X11/xorg.conf со следующим содержимым:

Section "Module"
    Load "modesetting"
EndSection
Section "Device"
    Identifier "nvidia"
    Driver "nvidia"
    BusID "PCI:X:Y:Z"
    Option "AllowEmptyInitialConfiguration"
EndSection
Где "BusID" "PCI:X:Y:Z"  - PCI адрес карты Nvidia. Чтобы узнать адрес, введите команду:
lspci | grep -E "VGA|3D"
01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:139b] (rev a2)

PCI адрес находится в начале строки: BusID "PCI:01:00.0". Строка с адресом будет выглядеть так:

BusID "PCI:01:0:0"

Затем создайте файл /usr/local/bin/nvidia_switch.sh:

xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto
xrandr --dpi 96 
Необходимо сделать файл исполняемым:  

chmod +x /usr/local/bin/nvidia_switch.sh
 
 
Добавьте скрипт в файл /etc/X11/fly-dm/Xsetup :


#! /bin/sh
# Xsetup - run as root before the login dialog appears
#xconsole -geometry 480x130-0-0 -notify -verbose -fn fixed -exitOnFail -file /dev/xconsole &
/usr/local/bin/nvidia_switch.sh
if [ -x /usr/sbin/pdp-flbl ]; then find /dev/dri -type c -exec /usr/sbin/pdp-flbl :::ehole {} \;; fi
/usr/bin/fly-dm-set-dpi.sh
Перезагрузите компьютер.

3 апреля 2019 г.

Основные команды PostgreSQL (psql, pg_dump, pg_restore)

Все команды запускаются под пользователем postgres (postgresql-суперпользователь)

$ su - postgres
psql -l - список баз данных.
psql -d dbname - подключение к БД dbname.
psql -f file.sql - выполнение команд из файла file.sql.
psql -U postgres -d dbname -c "CREATE TABLE test(some_id serial PRIMARY KEY, some_text text);" - выполнение команды в базе dbname.
psql -d dbname -H -c "SELECT * FROM test" -o test.html - вывод результата запроса в html-файл.

Просмотр списка и путей к конфигурационным файлам
psql > SELECT name, setting FROM pg_settings WHERE category = 'File Locations';
# или список всех конфигурационных параметров
psql > show all;
 
Список активных соединений с информацией о: pid процесса, выполняющегося запроса, пользователя, базы данных.
psql > SELECT * FROM pg_stat_activity;
 
Создание индексов
# primary key
psql > ALTER TABLE tableName ADD PRIMARY KEY (id);

# unique index
psql > CREATE UNIQUE INDEX indexName ON tableName (columnNames);
 
Команды psql
\c dbname - подсоединение к БД dbname.
\l - список баз данных.
\dt - список всех таблиц.
\d table - структура таблицы table.
\du - список всех пользователей и их привилегий.
\dt+ - список всех таблиц с описанием.
\dt *s* - список всех таблиц, содержащих s в имени.
\i FILE - выполнить команды из файла FILE.
\o FILE - сохранить результат запроса в файл FILE.
\a - переключение между режимами вывода: с/без выравнивания.

Бекап и восстановление таблиц
В PostgreSQL есть две утилиты для бекапа pg_dump и pg_dumpall. pg_dump используется для бекапа одной базы, pg_dumpall для бекапа всех баз и сервера в целом (необходимо запускать под postgresql-суперпользователем).

Создание бекапа базы mydb, в сжатом виде
pg_dump -h localhost -p 5432 -U someuser -F c -b -v -f mydb.backup mydb

Создание бекапа базы mydb, в виде обычного текстового файла, включая команду для создания БД
pg_dump -h localhost -p 5432 -U someuser -C -F p -b -v -f mydb.backup mydb

Создание бекапа базы mydb, в сжатом виде, с таблицами которые содержат в имени payments
pg_dump -h localhost -p 5432 -U someuser -F c -b -v -t *payments* -f payment_tables.backup mydb

Дамп данных только одной, конкретной таблицы. Если нужно создать резервную копию нескольких таблиц, то имена этих таблиц перечисляются с помощью ключа -t для каждой таблицы. 
pg_dump -a -t table_name -f file_name database_name

Создание резервной копии с сжатием в gz
pg_dump -h localhost  -O -F p -c -U postgres mydb | gzip -c > mydb.gz

Список наиболее часто используемых опций:
-h host - хост, если не указан то используется localhost или значение из переменной окружения PGHOST.
-p port - порт, если не указан то используется 5432 или значение из переменной окружения PGPORT.
-u - пользователь, если не указан то используется текущий пользователь, также значение можно указать в переменной окружения PGUSER.
-a, --data-only - дамп только данных, по-умолчанию сохраняются данные и схема.
-b - включать в дамп большие объекты (blog'и).
-s, --schema-only - дамп только схемы.
-C, --create - добавляет команду для создания БД.
-c - добавляет команды для удаления (drop) объектов (таблиц, видов и т.д.).
-O - не добавлять команды для установки владельца объекта (таблиц, видов и т.д.).
-F, --format {c|t|p} - выходной формат дампа, custom, tar, или plain text.
-t, --table=TABLE - указываем определенную таблицу для дампа.
-v, --verbose - вывод подробной информации.
-D, --attribute-inserts - дамп используя команду INSERT с списком имен свойств.

Бекап всех баз данных используя команду pg_dumpall.
pg_dumpall > all.sql

# проверка бекапа 

grep "^[\]connect" all.sql
\connect db1
\connect db2
В PostgreSQL есть две утилиты для восстановления базы из бекапа.
  • psql - восстановление бекапов, которые хранятся в обычном текстовом файле (plain text);
  • pg_restore - восстановление сжатых бекапов (tar);
Восстановление всего бекапа с игнорированием ошибок
psql -h localhost -U someuser -d dbname -f mydb.sql

Восстановление всего бекапа с остановкой на первой ошибке
psql -h localhost -U someuser --set ON_ERROR_STOP=on -f mydb.sql

Для восстановления из tar-арихива нам понадобиться сначала создать базу с помощью CREATE DATABASE mydb; (если при создании бекапа не была указана опция -C) и восстановить
pg_restore --dbname=mydb --jobs=4 --verbose mydb.backup

Восстановление резервной копии БД, сжатой gz
gunzip mydb.gz
psql -U postgres -d mydb -f mydb

Начиная с версии 9.2 можно восстановить только структуру таблиц с помощью опции --section
# создаем БД
CREATE DATABASE mydb2;

# восстанавливаем
pg_restore --dbname=mydb2 --section=pre-data --jobs=4 mydb.backup

Обслуживание таблицы
VACUUM ANALYZE table;

REINDEX DATABASE dbName;

REINDEX TABLE tabName;

Перенос директории с данным (data directory)
Узнать текущий путь
# способ 1
$ su - postgres
$ psql
psql > SHOW data_directory;

# способ 2
$ ps ax | grep 'postgres -D'
Создадим новую директорию, назначим пользователя и инициализируем
mkdir -p /pathto/postgresql/data
chown -R postgres:postgres /pathto/postgresql

su - postgres
initdb -D /pathto/postgresql/data
Теперь надо подправить файл с сервисом, который стартует postgresql
# под arch linux
sudo vim /etc/systemd/system/multi-user.target.wants/postgresql.service

Environment=PGROOT=/pathto/postgresql/
PIDFile=/pathto/postgresql/data/postmaster.pid

Очищение таблицы
Очищение таблицы tablename и обнуление счетчика с ID.
TRUNCATE TABLE tablename RESTART IDENTITY CASCADE;
CASCADE нужен на случай если tablename связана с другой таблицей.

Удаление NULL у поля
ALTER TABLE movies ALTER COLUMN year DROP NOT NULL;

Утилиты
pgcli утилита командной строки с авто-дополнениям и подсветкой синтаксиса.
Установка
pip install pgcli
Запуск
pgcli -U postgres -W dbname
 
Быть честным, стащил отсюда  

14 марта 2019 г.

Добавление локального принтера

Инструкция чисто, чтоб до автоматизма довести.
Добавляем пользователю группы lp и lpadmin, удаляем файл /etc/cups/client.conf. Рестартуем cups

12 марта 2019 г.

Astra Linux 1.5 и монтирование нулевого каталога в ALD

Собсна, если вы не можете зайти под  доменным пользюком, под мандатными уровнем отличным от нулевого, в систему, а в auth.log примерно такое
...монтирование нулевого каталога...ошибка...ну ты горегорюшко
Не горюй, сейчас помогу. Синхронизуй время с доменом и перезаведи комп в домен командой ald-client join domain
Еще надо проверить, если монтируются каталоги по cifs, права на домашний каталог на сервере домашних каталогов, существование нулевого каталога.
Да это вообще, что угодно может значить...

3 марта 2019 г.

Если wifi отваливается на debian подобной системе

Командой находим интерфейс командой: iw dev
Проверяем, что у нее статус power_save в on режиме: iw dev wlp6s0 get power_save
Отключаем нахер power_save: iw dev wlp6s0 set power_save off

Мне помогло