几乎我们所有的客户都在Linux的一个发行版上运行PostgreSQL,要么从包安装,要么从源代码安装。但不仅仅是Linux,还有各种各样的BSD,你也可以在上面运行PostgreSQL。因此,如果您想拥有更类似于UNIX的东西,OpenBSD可以是一个选项。这种类型的BSD是完全开源的,就像FreeBSD或NetBSD一样,项目主要关注安全性、正确性和密码学。事实上,OpenSSH来自于OpenBSD。那么为什么不用它来运行PostgreSQL呢?
我不会描述OpenBSD的安装,因为它是一个非常简单的基于文本的过程。你可以主要使用默认选项,几分钟后操作系统就启动并运行了。我是使用KVM完成的,如果您还使用了虚拟化,请确保在安装过程中启用OpenSSH守护进程,以便能够远程连接。
在新安装时,首先应该做的步骤之一是安装最新的补丁。在OpenBSD上,这是通过syspatch完成的:
openbsd-latest$ syspatch
Get/Verify syspatch71-001_wifi.tgz 100% |***********************************************************************************| 4423 KB 00:02
Installing patch 001_wifi
syspatch: updated itself, run it again to install missing patches
Relinking to create unique kernel... done; reboot to load the new kernel
openbsd-latest$ syspatch
Get/Verify syspatch71-002_ipsec.tgz 100% |**********************************************************************************| 93708 00:00
Installing patch 002_ipsec
Get/Verify syspatch71-003_kqueue.tgz 100% |*********************************************************************************| 126 KB 00:00
Installing patch 003_kqueue
Get/Verify syspatch71-004_asn1.tgz 100% |***********************************************************************************| 15815 KB 00:04
Installing patch 004_asn1
Get/Verify syspatch71-005_pppoe.tgz 100% |**********************************************************************************| 61252 00:00
Installing patch 005_pppoe
Get/Verify syspatch71-006_xserver... 100% |*********************************************************************************| 4386 KB 00:02
Installing patch 006_xserver
Get/Verify syspatch71-007_cron.tgz 100% |***********************************************************************************| 21179 00:00
Installing patch 007_cron
Get/Verify syspatch71-008_bgpd.tgz 100% |***********************************************************************************| 199 KB 00:00
Installing patch 008_bgpd
Get/Verify syspatch71-009_zlib.tgz 100% |***********************************************************************************| 491 KB 00:00
Installing patch 009_zlib
Get/Verify syspatch71-010_expat.tgz 100% |**********************************************************************************| 649 KB 00:00
Installing patch 010_expat
Get/Verify syspatch71-011_smtpd.tgz 100% |**********************************************************************************| 223 KB 00:00
Installing patch 011_smtpd
Relinking to create unique kernel... done; reboot to load the new kernel
Errata can be reviewed under /var/syspatch
复制
这里我做了两次,因为第一次执行更新syspatch本身,第二次执行应用补丁。我将跳过输出末尾提到的重新启动,因为它对于本文的范围并不重要。
首先,让我们检查OpenBSD是否带有预打包的PostgreSQL版本。默认情况下,包(或端口)从这里获取:
openbsd-latest$ cat /etc/installurl https://cdn.openbsd.org/pub/OpenBSD
复制
这样搜索PostgreSQL包不会产生任何结果:
openbsd-latest$ pkg_info PostgreSQL openbsd-latest$ pkg_info postgresql
复制
搜索软件包的一种更方便的方法是使用pkglocate,但默认情况下不安装:
openbsd-latest$ which pkglocate which: pkglocate: Command not found. openbsd-latest$ pkg_add pkglocatedb
复制
一旦成功,将获得令人印象深刻的结果:
openbsd-latest# pkglocate postgres | wc -l
7205
复制
将其剥离一点,可以很好地概述可用的内容:
openbsd-latest$ pkglocate postgresql | awk -F ':' '{print $1}' | uniq | sort akonadi-21.12.2 ansible-5.5.0 architect-1.0.6p9 augeas-1.12.0p1 autoconf-archive-2021.02.19 bacula-pgsql-11.0.6 borgmatic-1.5.23 citus-10.2.3 collectd-5.8.1p0 collectd-pgsql-5.8.1p0 dokuwiki-2020.07.29p0 dovecot-postgresql-2.3.18v0 exim-4.95p1-mysql-postgresql-ldap exim-4.95p1-postgresql filebeat-7.10.2p0 freebasic-1.05.0p1 freeradius-pgsql-3.0.25 gerbil-0.16p0 google-cloud-sdk-379.0.0 grafana-7.5.11 kamailio-postgresql-5.4.5 kdb-3.2.0p2 kea-2.0.2-postgresql kexi-3.2.0p4 kibana-7.10.0 librenms-22.3.0p0v0 libreoffice-7.3.2.2v0 logstash-7.10.0v0 lua52dbi-pgsql-0.6p1 lua53dbi-pgsql-0.6p1 luadbi-pgsql-0.6p1 mariadb-tests-10.6.7p0v1 metricbeat-7.10.2p0 moka-icon-theme-5.4.0p1 nedit-5.7p1v0 netbeans-12.6 openfire-4.2.3p1 orthanc-plugin-postgresql-2.0p2 ossec-hids-3.0.0p2 p5-CGI-Session-4.48p0 paper-icon-theme-1.5.0p1 perdition-pgsql-2.2p3 pg_sqlite_fdw-2.1.1 pg_statsinfo-13.0 pgfouine-1.2p11 pgpool-II-3.7.18p0 pgrouting-3.3.0 pgtap-1.1.0 pmacct-1.7.7-postgresql pointcloud-1.2.1p0 postgis-3.2.1p0 postgresql-client-14.2 postgresql-contrib-14.2 postgresql-docs-14.2 postgresql-odbc-13.02.0000 postgresql-pg_upgrade-14.2 postgresql-pllua-2.0.10 postgresql-plpython-14.2 postgresql-plr-8.4.1 postgresql-previous-13.5p0 postgresql-server-14.2p1 postgresql_autodoc-1.40p1 pure-ftpd-1.0.49p2-postgresql pure-ftpd-1.0.49p2-postgresql-virtual_chroot py3-alembic-1.7.7 py3-jedi-0.18.1 py3-peewee-3.14.8 py3-sqlalchemy-1.4.31p0 pygeoapi-0.12.0 qt5-postgresql-5.15.2 qt6-postgresql-6.0.4p4 redland-1.0.17p9 redland-pgsql-1.0.17p9 repmgr-5.2.1 resiprocate-repro-1.12.0p3 rstudio-1.3.959p5 ruby27-pg-1.3.4 ruby27-sequel-5.54.0 ruby30-pg-1.3.4 ruby30-pygments.rb-0.6.3p1v0 ruby30-sequel-5.54.0 ruby31-pg-1.3.4 ruby31-sequel-5.54.0 sogo-5.5.1 sqlmap-1.5.7p0 timescaledb-2.6.0 traccar-4.15p0 trytond-5.0.46p0 trytond-5.2.20p1 unifi-5.14.23p12 unifi-6.0.45p10 unifi-7.0.25 xemacs-21.4.22p32 xemacs-21.4.22p32-mule xxdiff-4.0.1.20170623 zabbix-proxy-6.0.3-mysql zabbix-proxy-6.0.3-pgsql zabbix-proxy-6.0.3-sqlite3 zabbix-server-6.0.3-mysql zabbix-server-6.0.3-pgsql zsh-5.8.1
复制
你会看到常见的可疑的服务器和贡献包,但也Citus,时间表,许多其他的包,你可能想安装。PostgreSQL的版本似乎是14.2,这不是最新的,但没有低于PostgreSQL 14的版本,这很好,因为这是目前的主要版本。让我们安装服务器包,然后检查它在系统中的样子:
openbsd-latest$ pkg_add postgresql-server-14.2p1 quirks-5.5 signed on 2022-10-06T09:54:45Z postgresql-server-14.2p1:xz-5.2.5p1: ok postgresql-server-14.2p1:libiconv-1.16p0: ok postgresql-server-14.2p1:libxml-2.9.13p1: ok postgresql-server-14.2p1:postgresql-client-14.2: ok useradd: Warning: home directory `/var/postgresql' doesn't exist, and -m was not specified postgresql-server-14.2p1: ok Running tags: ok The following new rcscripts were installed: /etc/rc.d/postgresql See rcctl(8) for details. New and changed readme(s): /usr/local/share/doc/pkg-readmes/postgresql-server
复制
这也给了我们客户端包,这是有意义的,因为我们想使用psql。在最后提到的自述文件包含了在OpenBSD上开始使用PostgreSQL的所有说明。里面甚至有一个调优部分,以及如何升级到一个新的主版本的过程。
要启动并运行PostgreSQL,需要执行以下步骤(注意用户名开头的“_”):
openbsd-latest$ su - _postgresql
openbsd-latest$ id
uid=503(_postgresql) gid=503(_postgresql) groups=503(_postgresql)
openbsd-latest$ mkdir /var/postgresql/data
openbsd-latest$ initdb -D /var/postgresql/data -U postgres -A scram-sha-256 -E UTF8 -W
The files belonging to this database system will be owned by user "_postgresql".
This user must also own the server process.
The database cluster will be initialized with locale "C".
The default text search configuration will be set to "english".
Data page checksums are disabled.
Enter new superuser password:
Enter it again:
fixing permissions on existing directory /var/postgresql/data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 20
selecting default shared_buffers ... 128MB
selecting default time zone ... Europe/Berlin
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
Success. You can now start the database server using:
pg_ctl -D /var/postgresql/data -l logfile start
复制
回到包安装的初始输出:输出中还提到创建了新的rcscripts脚本:
openbsd-latest$ ls -l /etc/rc.d/postgresql
-rwxr-xr-x 1 root bin 522 Apr 8 2022 /etc/rc.d/postgresql
openbsd-latest$ cat /etc/rc.d/postgresql
#!/bin/ksh
daemon="/usr/local/bin/pg_ctl"
daemon_flags="-D /var/postgresql/data -w -l /var/postgresql/logfile"
daemon_user="_postgresql"
daemon_timeout=300
. /etc/rc.d/rc.subr
rc_usercheck=NO
rc_check() {
${rcexec} "${daemon} status ${daemon_flags}"
}
rc_reload() {
${rcexec} "${daemon} reload ${daemon_flags}"
}
rc_start() {
${rcexec} "${daemon} start ${daemon_flags}"
}
rc_stop() {
${rcexec} "${daemon} stop ${daemon_flags} -m fast" || \
${rcexec} "${daemon} stop ${daemon_flags} -m immediate"
}
rc_cmd $1
复制
启用和启动服务只是一个问题:
openbsd-latest$ rcctl enable postgresql
openbsd-latest$ rcctl start postgresql
postgresql(ok)
复制
从现在起,这就是常见的PostgreSQL:
openbsd-latest# su - _postgresql
openbsd-latest$ psql -U postgres
Password for user postgres:
psql (14.2)
Type "help" for help.
postgres=#
复制
结论:在OpenBSD上开始使用PostgreSQL是非常容易的。小版本不是最新的,我不知道软件包的更新速度通常有多快。考虑到目前14的次要版本是14.5,更新似乎并不频繁。如果您想避免这种情况,那么您需要从源代码进行安装。这是下一篇文章的主题。
原文标题:PostgreSQL from packages on OpenBSD
原文作者:Daniel Westermann
原文地址:https://www.dbi-services.com/blog/postgresql-from-packages-on-openbsd/