ports:db:postgresql

Ceci est une ancienne révision du document !


Installer un serveur PostgreSQL

C'est un serveur de base de données dont vous aurez certainement besoin pour alimenter vos sites web et applications.

Préparez databases/postgresql15-server dans vos poudrières. Dans l'exemple qui suit popeye est l'hôte et pg est la jail.

Construisez une jail nommée pg dans /jails/pg pour accueillir votre serveur de bases de données.

Adaptez la configuration de la jail pg :

pg/etc/rc.conf.local
hostname="pg"
/etc/jail.conf
pg {
        host.hostname = pg;           
        ip4.addr = "lo1|192.168.0.10";# Adresse IP à attribuer.
        path ="/jails/pg";            # où est-elle ?
        mount.devfs;                  # postgresql a besoin de /dev/null
        # allow.sysvipc=1;              # preferez la ligne qui suit
        sysvshm=inherit;              # postgresql va monter des shm
        exec.start = "/bin/sh /etc/rc";
        exec.stop = "/bin/sh /etc/rc.shutdown";
}

Notez que postgresql réclame quelques réglages pour une jail:

  • mount.devfs, en fait l'installation de postgresql n'a besoin que de /dev/null. C'est le moyen le plus rapide de l'avoir.
  • sysvshm=inherit ou allow.sysvipc=1, postgresql doit pouvoir allouer une shared memory SYSV pour fonctionner, sysvipc va ouvrir d'autres IPC que shm.
root@popeye:# ifconfig lo1 create
root@popeye:# jail -c pg
root@popeye:# 
root@popeye:# pkg -j pg install databases/postgresql15-server

Pour que l'interface réseau soit créée au démarrage:

root@popeye:# sysrc cloned_interfaces+="lo1"

Ainsi que la jail:

root@popeye:# sysrc jail_enable="YES"
root@popeye:# sysrc jail_list+="pg"

Depuis la jail, initialisez postgresql:

root@popeye:# jexec pg
root@pg:# /usr/local/etc/rc.d/postgresql oneinitdb

Vous allez probablement permettre à l'hôte voire d'autre jail de communiquer avec votre serveur, autorisez le à écouter tout le monde:

/var/db/postgres/data15/postgresql.conf
listen_addresses = '*'

Affinez le contrôle en autorisant tout va transiter par l’hôte:

/var/db/postgres/data15//pg_hba.conf
host    all             all             192.168.0.1/24         trust
root@pg:# service postgresql onestart
2020-04-11 13:54:50.404 UTC [19008] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2020-04-11 13:54:50.421 UTC [19008] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
2020-04-11 13:54:50.444 UTC [19008] LOG:  ending log output to stderr
2020-04-11 13:54:50.444 UTC [19008] HINT:  Future log output will go to log destination "syslog".

changez le mot de passe administrateur du serveur de base de données:

root@popeye:#jexec pg 
root@pg:# su - postgres 
$ psql
psql (11.7)
Type "help" for help.
 
postgres=# \l
                             List of databases
   Name    |  Owner   | Encoding | Collate | Ctype |   Access privileges   
-----------+----------+----------+---------+-------+-----------------------
 postgres  | postgres | UTF8     | C       | C     | 
 template0 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
 template1 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
(3 rows)
 
postgres=# \password postgres
Enter new password: 
Enter it again: 
postgres=# \q

Voire de le lancer au démarrage de la jail:

root@popeye:#sysrc -j pg postgresql_enable="YES"

Vous pouvez maintenant démarrer le serveur de base de données:

root@popeye:#service -j pg  postgresql start

Est-ce que le serveur est à l'écoute ?

root@popeye# jexec pg sockstat -l
USER     COMMAND    PID   FD PROTO  LOCAL ADDRESS         FOREIGN ADDRESS      
postgres postgres   36299 3  tcp4   192.168.0.10:5432     *:*
postgres postgres   36299 5  stream /tmp/.s.PGSQL.5432
root     syslogd    99367 5  dgram  /var/run/log
root     syslogd    99367 6  dgram  /var/run/logpriv

Essayons, depuis l'hôte:

root@popeye# telnet 192.168.0.10 5432
Trying 192.168.0.10...
Connected to 192.168.0.10.
Escape character is '^]'.

A l'aide du client databases/postgresql15-client

root@popeye# pg_isready --host=192.168.0.10
192.168.0.10:5432 - accepting connections
root@popeye# psql -U postgres --host=192.168.0.10 -W
Password: 
psql (11.7)
Type "help" for help.
 
postgres-# \l
                             List of databases
   Name    |  Owner   | Encoding | Collate | Ctype |   Access privileges   
-----------+----------+----------+---------+-------+-----------------------
 postgres  | postgres | UTF8     | C       | C     | 
 template0 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
 template1 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
(3 rows)
 
postgres-# \q

Vous avez noté la ligne de sockstat(1):

postgres postgres   36299 5  stream /tmp/.s.PGSQL.5432

Cela signifie que vous pouvez communiquer avec la serveur via une socket(2) unix.

Vous n'avez même pas besoin de configuration réseau pour communiquer avec cette jail:

root@popeye:# psql -U postgres --host=/jails/pg/tmp/ -W
Password: 
psql (11.7)
 
postgres=# \l
                             List of databases
   Name    |  Owner   | Encoding | Collate | Ctype |   Access privileges   
-----------+----------+----------+---------+-------+-----------------------
 postgres  | postgres | UTF8     | C       | C     | 
 template0 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
 template1 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
(3 rows)
 
postgres=# \q
Dans ce cas, vous pouvez attribuer la valeur disable à ip4 et ip6 de votre jail et l'isoler ainsi complètement du réseau.

Créer un répertoire pg_oldbin et y sauvegarder tout ce qui conserver postgresql dans /usr/local/bin Connectez vous à la base:

# su - postgres
# pg_dumpall 

Mettre à jour, puis

# su - postgres
# mv <pg_data> <pgdata_old>
# mkdir <data-folder>
# initdb pgdata
# pg_update -b pg_oldbin -d pgdata_old -D pgdata
  • ports/db/postgresql.1667318247.txt.gz
  • Dernière modification : 2022/11/01 15:57
  • de david