pgrepup: обновление postgresql 9.5 до 10

Заметки по которым делал:
https://habr.com/ru/company/true_engineering/blog/437318/
https://github.com/rtshome/pgrepup

 

Устанавливал на тестовых машинах с нуля, поэтому ставил в том числе и postgresql. Сразу скажу, что на бою пока не делал, однако тестовые машинки обновлялись на ура. Судя по ману с хабра, базу можно обновить и до 11 версии, тем не менее я тестировал только до 10.

ubuntu 16.04

Подключаем репозиторий postgresql
https://www.postgresql.org/download/linux/ubuntu/

 

postgresql 9.5

apt install postgresql-9.5 postgresql-9.5-pglogical postgresql-9.5-pgl-ddl-deploy

vim /etc/postgresql/9.5/main/postgresql.conf

listen_addresses = '*'
wal_level = logical
shared_preload_libraries = 'pglogical.so'
max_replication_slots = 2		        # или больше
max_wal_senders = 2				# или больше

vim /etc/postgresql/9.5/main/pg_hba.conf
в начало прописываем

host    all             postgres        192.168.0.0/24          trust
host    all             postgres        127.0.0.1/32            trust
host    replication     pgrepup_replication    127.0.0.1/32     md5
host    all             pgrepup_replication    127.0.0.1/32     md5
systemctl restart [email protected]

 

postgresql 10

apt install postgresql-10 postgresql-10-pglogical postgresql-server-dev-10 checkinstall

vim /etc/postgresql/10/main/postgresql.conf

wal_level = logical
shared_preload_libraries = 'pglogical.so,pgl_ddl_deploy.so'

vim /etc/postgresql/10/main/pg_hba.conf
в начало прописываем

host    all             postgres         192.168.0.0/24         trust
host    all             postgres         127.0.0.1/32           trust
host    replication     pgrepup_replication    127.0.0.1/32     md5
host    all             pgrepup_replication    127.0.0.1/32     md5

устанавливаем pgl_ddl_deploy

git clone https://github.com/enova/pgl_ddl_deploy.git
cd pgl_ddl_deploy
PATH=/usr/lib/postgresql/10/bin/:$PATH
echo $PATH
make CLANG=true
checkinstall
systemctl restart [email protected]

 

pgrepup

Ставим python2.7 и pgrepup

apt install python2.7 python-virtualenv
mkdir pgrepup
python2.7 -m virtualenv pgrepup
source pgrepup/bin/activate
pip install pgrepup

Переходим в окружение

source pgrepup/bin/activate

Настраиваем конфиг

pgrepup config

cat ~/.pgrepup

[Security]
encrypted_credentials = n
tmp_folder = /tmp
app_owner = postgres

[Source]
host = 127.0.0.1
port = 5432
connect_database = template1
user = postgres
password = 

[Destination]
host = 127.0.0.1
port = 5433
connect_database = template1
user = postgres
password =

 

Правим баги pgrepup

1. Баг первый

grep "def .*()" pgrepup/lib/python2.7/site-packages/pgrepup/commands/*.py

vim pgrepup/lib/python2.7/site-packages/pgrepup/commands/

В каждом файле *.py добавляем пропущенные **kwargs в описании функции

Пример: меняем

def setup():

на

def setup(**kwargs):

 

2. Баг второй

vim pgrepup/lib/python2.7/site-packages/pgrepup/commands/setup.py

Ищем строки с sh -c и объединяем в одну

https://github.com/rtshome/pgrepup/pull/16/commits/ef582405cce90959c751157414e3fadab183bef5

Должно получиться:

os.system('sh -c "PGPASSFILE=%(pgpass)s pg_dumpall -U %(user)s -h %(host)s -p%(port)s -s -f %(fname)s --if-exists -c"' %
'sh -c "PGPASSFILE=%(pgpass)s psql -U %(user)s -h %(host)s -p%(port)s -f %(fname)s -d postgres >/dev/null 2>&1"'

 

3. Баг третий

Если в названии базы есть — , например test-base

vim pgrepup/lib/python2.7/site-packages/pgrepup/helpers/replication.py

Ищем строку:

c.execute('GRANT CREATE ON DATABASE ' + db + ' TO ' + user)

Правим на:

c.execute('GRANT CREATE ON DATABASE ' + '"' + db + '"' + ' TO ' + user)

 

Проверяем

pgrepup check

Если есть ошибки

pgrepup fix

Ставим

pgrepup setup
pgrepup start

pgrepup status
...
Replication status 
 >  Database postgres 
 >      Replication status ..............................................replicating
 >  Database template1 
 >      Replication status ..............................................replicating
 >  Database test-base
 >      Replication status .............................................initializing
 >  Xlog difference (bytes) ...................................................68128

Когда статус initializing перейдет в replicating можно останавливать

pgrepup stop

Удаляем хвосты

pgrepup uninstall

Выходим из окружения pgrepup

deactivate

centos 7

Подключаем репозиторий postgresql
https://www.postgresql.org/download/linux/redhat/

 

postgresql 9.5

yum install postgresql95 postgresql95-devel

Инициализируем базу

/usr/pgsql-9.5/bin/postgresql95-setup initdb

База и конфиг файлы здесь, там же и логи

ls -l /var/lib/pgsql/9.5/data/

 

postgresql 10

yum install postgresql10 postgresql10-devel

Инициализируем базу

/usr/pgsql-10/bin/postgresql-10-setup initdb

База и конфиг файлы здесь, там же и логи

ls -l /var/lib/pgsql/10/data/

 

Установка pglogical
— для 9.5

curl https://access.2ndquadrant.com/api/repository/dl/default/release/9.5/rpm | bash
yum install postgresql95-pglogical

— для 10

curl https://access.2ndquadrant.com/api/repository/dl/default/release/10/rpm | bash
yum install postgresql10-pglogical

 

Устанавливаем pgl_ddl_deploy extension

git clone https://github.com/enova/pgl_ddl_deploy.git
cd pgl_ddl_deploy

— для 9.5

PATH=/usr/pgsql-9.5/bin/:$PATH
USE_PGXS=1 make
USE_PGXS=1 make install
make clean

— для 10

PATH=/usr/pgsql-10/bin/:$PATH
make CLANG=true
make install

 

Настраиваем конфиг файлы

vim /var/lib/pgsql/9.5/data/postgresql.conf

listen_addresses = '*'
wal_level = logical
shared_preload_libraries = 'pglogical.so,pgl_ddl_deploy.so'
max_replication_slots = 2		        # или больше
max_wal_senders = 2				# или больше

vim /var/lib/pgsql/9.5/data/pg_hba.conf

host    all             postgres        192.168.0.0/22          trust
host    all             postgres        127.0.0.1/32            trust
host    replication     pgrepup_replication    127.0.0.1/32     md5
host    all             pgrepup_replication    127.0.0.1/32     md5
systemctl restart [email protected]

vim /var/lib/pgsql/10/data/postgresql.conf

port = 5433
wal_level = logical
shared_preload_libraries = 'pglogical.so,pgl_ddl_deploy.so'

vim /var/lib/pgsql/10/data/pg_hba.conf

host    all             postgres         127.0.0.1/32           trust
host    all             postgres         192.168.0.0/22         trust
host    replication     pgrepup_replication    127.0.0.1/32     md5
host    all             pgrepup_replication    127.0.0.1/32     md5
systemctl restart [email protected]

Настройку pgrepup идентична тому как на убунте

oracle java8 jdk

Ввиду того, что теперь нет возможности скачать deb пакет будем его создавать.

Для начала ставим необходимые пакеты

sudo apt install java-package java-common libgtk-3-dev libcairo-gobject2

Качаем jdk архив jdk-8u211-linux-x64.tar.gz с сайта оракла https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html (нужна учетка, но её можно создать)

Создаем из архива deb пакет

make-jpkg jdk-8u211-linux-x64.tar.gz

Устанавливаем

sudo dpkg -i oracle-java8-jdk_8u211_amd64.deb

Смотрим версию

java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)

Если ставили до этого javа

update-alternatives --list java
/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
/usr/lib/jvm/java-8-oracle/jre/bin/java
/usr/lib/jvm/java-9-openjdk-amd64/bin/java
/usr/lib/jvm/oracle-java8-jdk-amd64/jre/bin/java

Выбрать нужную

sudo update-alternatives --set java /usr/lib/jvm/oracle-java8-jdk-amd64/jre/bin/java

DLNA IPTV xupnpd

Купили брату телевизор Sony Bravia. Выбирал специально, чтоб ТВ умел проигрывать много форматов видео и знал что такое DLNA. Однако упустил IPTV. Странно, но ТВ его совсем не умеет проигрывать. Удивительно, что Sony не позаботились об этом. В итоге IPTV таки удалось получить, пусть и через DLNA.

Настраивается установкой xupnpd. Можно поставить программу на роутер. В интернете есть мануалы по ентой установке. У меня же стояла задача более простая. Заставить ТВ показывать iptv не важно откуда. В итоге поставил xupnpd на ноут с ubuntu, благо на оффсайте есть уже собранный пакет для нее.

Правим конфиг файл /etc/xupnpd.lua
Заменяем интерфейс на свой, через который выходим в интернет.

Запускать следует через sudo.

sudo xupnpd

Либо можно утянуть последнюю версию с svn

sudo apt-get install subversion
svn co http://tsdemuxer.googlecode.com/svn/trunk/xupnpd
cd xupnpd/src/
make

Не забываем поправить конфиг файл xupnpd.lua
Следует заменить интерфейс на свой, через который выходим в интернет.

Запускаем программу

chmod +x xupnpd
./xupnpd

Дальше настройки можно править через веб-интерфейс 192.168.X.X:4044, где 192.168.X.X ваш ip.
Там же можно загрузить свой плейлист.m3u

Ввиду того, что я смотрю iptv от тетушки Шуры и потоки там все http-шные, мне не пришлось ставить udpxy. Единственный нюанс, который заставил меня поломать голову, из-за того, что при выборе канала трансляция запускалась, но картинки не было, заключается в том, что в настройках Default mime type следует указать mpeg_ts (cfg.default_mime_type=’mpeg_ts’).

Brother DCP-7057R в ubuntu

МФУ настраивает очень легко, благо драйвера для принтера и сканера выложены на официальном сайте.

Единственная проблема может возникнуть с запуском программы сканирования. В принципе решение описано там же.

Кратко.
Жмем в консоли

$ lsusb
Bus 001 Device 002: ID 04f9:0273 Brother Industries, Ltd

Открываем файл файл /lib/udev/rules.d/40-libsane.rules и вписываем

# brother dcp-7057r
ATTRS{idVendor}=="04f9", ATTRS{idProduct}=="0273", ENV{libsane_matched}="yes"

затем

$ udevadm control --reload

или перезагружаемся.

dropbox ошибка при запуске

Когда dropbox издевается и при запуске выдает вот такое:

dropbox start -i
Starting Dropbox...Traceback (most recent call last):
  File "/usr/bin/dropbox", line 250, in handle_ok
    self.download = DownloadState()
  File "/usr/bin/dropbox", line 157, in __init__
    self.size = int(self.file.info()['content-length'])
  File "/usr/lib/python2.6/rfc822.py", line 388, in __getitem__
    return self.dict[name.lower()]
KeyError: 'content-length'

не расстраивайтесь, достаточно всего лишь установить libnotify-bin.

apt и proxy

Чтоб apt смог юзать инет через проксю прописываем в /etc/apt/apt.conf

Acquire::http::Proxy "http://домен\логин:пароль@ip:порт";
Acquire::https::Proxy "http://домен\логин:пароль@ip:порт";
Acquire::ftp::Proxy "http://домен\логин:пароль@ip:порт";

Так же можно прописать в .bashrc

export http_proxy=http://домен\\логин:пароль@ip:порт;
export ftp_proxy=http://домен\\логин:пароль@ip:порт;

iotop

Отличная утилита для мониторинга нагрузки на винт. Показывает какие процессы читают с диска, пишут и используют своп.


Установка под убунтой

sudo aptitude install iotop

Клонирование систем в Virtualbox

Склонировать систему в Virtualbox можно выполнив

VBoxManage clonevdi система.vdi система_new.vdi

Копирование и переименование не помогает из-за одинаковых UUID.

rar и кракозябры

Дабы содержащиеся файлы в rar архивах не отображались кракозябрами, следует удалить пакет rar

sudo aptitude purge rar

Пакета unrar для распаковки достаточно.

sudo aptitude install unrar