вторник, 20 ноября 2018 г.

Запуск Ubuntu server 16.04.5 PostgreSQL, версия 10.3-3.1C без systemctl start postgresql.service

Postgresql server doesn't start
Ситуация:
Перестал загружать PostgreSQL systemctl
# sudo systemctl start postgresql.service
Кластер по умолчанию /var/lib/postgresql/10/main
Запускаем сервер вручную

Тестовая виртуальная машина

1. Устанавливаем ubuntu 16.04.5 HWE server  без swap файла,
т.е. размечаем вручную весь диск ext4 root.

ubuntu имя компьютера u1604
ubuntu пользователь user пароль 12345
ubuntu пользователь postgres password pass
ubuntu пользователь usr1cv8 password pass

Настройки виртуальной машины - RAM (32GB)
Сеть - сетевой мост.
Проще всего пробросить в виртуальную машину лицензии 1С:Предприятия 8 посредством локального hasp.
Настройки ubuntu пользователь (привязка в скриптах) user пароль 12345, имя компьютера
u1604 сеть DHCP

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

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

$ lsusb
Bus 001 Device 002: ID 80ee:0021 VirtualBox USB Tablet
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Пробросить hasp средствами VirtualBox

$ lsusb
Bus 001 Device 004: ID 0529:0001 Aladdin Knowledge Systems HASP copy protection dongle
Bus 001 Device 003: ID 0529:0001 Aladdin Knowledge Systems HASP copy protection dongle
Bus 001 Device 002: ID 80ee:0021 VirtualBox USB Tablet
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

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

Образ u16045.ova

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

В папку ~/test положить файлы:

postgresql_10.3_2.1C_amd64_deb.tar.bz2
postgresql_10.3_2.1C_amd64_addon_deb.tar.bz2

Исправим bug
Several regex warnings when installing latest postgres update

sudo nano /usr/sbin/pam_getenv
строка 78 заменить
$val =~ s/(?<!\\)\${([^}]+)}/$ENV{$1}||""/eg;
на
$val =~ s/(?<!\\)\$\{([^}]+)\}/$ENV{$1}||""/eg;

#sudo apt-get install libicu55  -y
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 install libtcl8.6 -y
$ sudo apt-get install postgresql-common postgresql-client-common ssl-cert  pgdg-keyring  -y
mkdir -p /tmp/post
cp /home/user/test/postgresql_10.3_3.1C_amd64_deb.tar.bz2 /tmp/post/
cp /home/user/test/postgresql_10.3_3.1C_amd64_addon_deb.tar.bz2 /tmp/post/
cd /tmp/post
tar -xvf postgresql_10.3_3.1C_amd64_deb.tar.bz2
cd  postgresql-10.3-3.1C_amd64_deb
sudo dpkg -i *.deb


cd /tmp/post/
tar -xvf postgresql_10.3_3.1C_amd64_addon_deb.tar.bz2
cd postgresql-10.3-3.1C_amd64_addon_deb
sudo dpkg -i *.deb

dpkg -l | grep 10.3-3.1C | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
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 rm /etc/apt/sources.list.d/postgresql.list
#sudo apt update  -y
#Делаем проверки
#sudo systemctl status postgresql.service
#ss -tunpl | grep 5432
$ 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

Итак:

Creating new PostgreSQL cluster 10/main ...
/usr/lib/postgresql/10/bin/initdb -D /var/lib/postgresql/10/main --auth-local peer --auth-host md5
Файлы, относящиеся к этой СУБД, будут принадлежать пользователю "postgres".
От его имени также будет запускаться процесс сервера.

Готово. Теперь вы можете запустить сервер баз данных:

    /usr/lib/postgresql/10/bin/pg_ctl -D /var/lib/postgresql/10/main -l файл_журнала start

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

$ sudo su - postgres


$ /usr/lib/postgresql/10/bin/pg_ctl stop -D /var/lib/postgresql/10/main
ожидание завершения работы сервера.... готово
сервер остановлен



$  /usr/lib/postgresql/10/bin/pg_ctl start -D /var/lib/postgresql/10/main
ожидание запуска сервера....postgres не может открыть файл конфигурации сервера "/var/lib/postgresql/10/main/postgresql.conf": Нет такого файла или каталога
 прекращение ожидания
pg_ctl: не удалось запустить сервер
Изучите протокол выполнения.

Посмотрим почему (ниже будет правильный способ):

Создадим кластер:

$ sudo mkdir /usr/local/pgsql
$ sudo chown postgres /usr/local/pgsql
$ sudo su - postgres
$ /usr/lib/postgresql/10/bin/initdb -D /usr/local/pgsql/data


#------------------------------------------------------------------------------------------------
# Можно но нам не нужно
$ exit 
$ sudo -u postgres psql -U postgres -c "alter user postgres with password 'pass';"
$ ps aux | grep postgres | grep -- -D
postgres 16622  0.0  0.0 320612 27328 pts/0    S    19:52   0:00 
 #------------------------------------------------------------------------------------------------

Сравним каких файлов не хватает:

$ ls /etc/postgresql/10/main
conf.d  environment  pg_ctl.conf  pg_hba.conf  pg_ident.conf  postgresql.conf  postgresql.conf.bak  start.conf
 
$ ls /usr/local/pgsql/data
base          pg_hba.conf    pg_notify     pg_stat      pg_twophase  postgresql.auto.conf
global        pg_ident.conf  pg_replslot   pg_stat_tmp  PG_VERSION   postgresql.conf
pg_commit_ts  pg_logical     pg_serial     pg_subtrans  pg_wal
pg_dynshmem   pg_multixact   pg_snapshots  pg_tblspc    pg_xact


$ ls /var/lib/postgresql/10/main
base              pg_dynshmem   pg_notify     pg_stat      pg_twophase  postgresql.auto.conf
current_logfiles  pg_log        pg_replslot   pg_stat_tmp  PG_VERSION   postmaster.opts
global            pg_logical    pg_serial     pg_subtrans  pg_wal
pg_commit_ts      pg_multixact  pg_snapshots  pg_tblspc    pg_xact

Скопируем недостающие файлы:

$ cp /usr/local/pgsql/data/postgresql.conf /var/lib/postgresql/10/main/
$ cp /usr/local/pgsql/data/pg_hba.conf /var/lib/postgresql/10/main/
$ cp /usr/local/pgsql/data/pg_ident.conf /var/lib/postgresql/10/main/


$ /usr/lib/postgresql/10/bin/pg_ctl start -D /var/lib/postgresql/10/main
ожидание запуска сервера....< 2018-11-20 15:45:08.534 MSK >СООБЩЕНИЕ:  для приёма подключений по адресу IPv4 "0.0.0.0" открыт порт 5432
< 2018-11-20 15:45:08.534 MSK >СООБЩЕНИЕ:  для приёма подключений по адресу IPv6 "::" открыт порт 5432
< 2018-11-20 15:45:08.535 MSK >СООБЩЕНИЕ:  для приёма подключений открыт сокет Unix "/var/run/postgresql/.s.PGSQL.5432"
< 2018-11-20 15:45:08.545 MSK >СООБЩЕНИЕ:  передача вывода в протокол процессу сбора протоколов
< 2018-11-20 15:45:08.545 MSK >ПОДСКАЗКА:  В дальнейшем протоколы будут выводиться в каталог "pg_log".
 готово
сервер запущен

Теперь правильный способ запуска (создавать кластер не нужно):


$ sudo su postgres
$ ps aux | grep postgres | grep -- -D
postgres  1966  0.0  0.1 320972 28588 pts/0    S    07:54   0:00 /usr/lib/postgresql/10/bin/postgres -D /var/lib/postgresql/10/main -c config_file=/etc/postgresql/10/main/postgresql.conf
postgres  1983  0.0  0.0  15468   968 pts/0    S+   07:55   0:00 grep -- -D

$ /usr/lib/postgresql/10/bin/pg_ctl stop -D /var/lib/postgresql/10/main
ожидание завершения работы сервера.... готово
сервер остановлен

Собственно сам запуск:

$ /usr/lib/postgresql/10/bin/pg_ctl start  -w -D /var/lib/postgresql/10/main  -o '-c config_file=/etc/postgresql/10/main/postgresql.conf'
ожидание запуска сервера....2018-11-23 07:56:09.602 MSK [1988] СООБЩЕНИЕ:  для приёма подключений по адресу IPv4 "0.0.0.0" открыт порт 5432
2018-11-23 07:56:09.602 MSK [1988] СООБЩЕНИЕ:  для приёма подключений по адресу IPv6 "::" открыт порт 5432
2018-11-23 07:56:09.603 MSK [1988] СООБЩЕНИЕ:  для приёма подключений открыт сокет Unix "/var/run/postgresql/.s.PGSQL.5432"
2018-11-23 07:56:09.627 MSK [1988] СООБЩЕНИЕ:  передача вывода в протокол процессу сбора протоколов
2018-11-23 07:56:09.627 MSK [1988] ПОДСКАЗКА:  В дальнейшем протоколы будут выводиться в каталог "pg_log".
 готово
сервер запущен


Другой способ запуска:

$ sudo su postgres

$ /usr/lib/postgresql/10/bin/pg_ctl stop -D /var/lib/postgresql/10/main
ожидание завершения работы сервера.... готово
сервер остановлен



$ /usr/lib/postgresql/10/bin/postgres  -D /var/lib/postgresql/10/main   -c 'config_file=/etc/postgresql/10/main/postgresql.conf'

Комментариев нет:

Отправить комментарий