安易にNASにPostgreSQLをインストしてみたら
# apt install postgresql
# psql --version
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
psql (PostgreSQL) 9.4.26
・・・
# apt purge postgresql
知っているpostgresql.conf ファイルらしきものが無く挫折したので、
v.14.3をソースでインストを試みる記事です。
説明書のソースの取得を読みつつソースページから一式ダウンロード。
# wget https://ftp.postgresql.org/pub/source/v14.3/postgresql-14.3.tar.gz
・・・
ERROR: The certificate of 'ftp.postgresql.org' is not trusted.
ERROR: The certificate of 'ftp.postgresql.org' has expired.
・・・(考え中)・・・
# wget http://ftp.postgresql.org/pub/source/v14.3/postgresql-14.3.tar.gz
HTTP request sent, awaiting response... 200 OK
Length: 28930973 (28M) [application/octet-stream]
Saving to: 'postgresql-14.3.tar.gz'
postgresql-14.3.tar 100%[=====================>] 27.59M 5.87MB/s in 4.7s
2022-05-24 11:14:11 (5.87 MB/s) - 'postgresql-14.3.tar.gz' saved [28930973/28930973]
# gunzip postgresql-14.3.tar.gz
# tar xf postgresql-14.3.tar
インストールの手順を読みつつ、
# cd postgresql-14.3
# ./configure
・・・
configure: error: readline library not found
If you have readline already installed, see config.log for details on the
failure. It is possible the compiler isn't looking in the proper directory.
Use --without-readline to disable readline support.
ググってみると参考になりそうなページを見つける。
# apt install readline
# apt install readline-devel
# export CPPFLAGS=-I/usr/share/readline
シェアライブラリィっぽいのでldconfigしなおしたら・・・
#ldconfig
/sbin/ldconfig.real: /usr/local/gcc-11.2.0/lib/libstdc++.so.6.0.29-gdb.py is not an ELF file - it has the wrong magic bytes at the start.
/sbin/ldconfig.real: /usr/lib/libreadycloud.so.1 is not a symbolic link
やばいかも(汗
とりあえず、readline以外のエラーが無いかチェックしてみる。
# ./configure --without-readline
・・・
configure: creating ./config.status
config.status: creating GNUmakefile
config.status: creating src/Makefile.global
config.status: creating src/include/pg_config.h
config.status: creating src/include/pg_config_ext.h
config.status: creating src/interfaces/ecpg/include/ecpg_config.h
config.status: linking src/backend/port/tas/dummy.s to src/backend/port/tas.s
config.status: linking src/backend/port/posix_sema.c to src/backend/port/pg_sema.c
config.status: linking src/backend/port/sysv_shmem.c to src/backend/port/pg_shmem.c
config.status: linking src/include/port/linux.h to src/include/pg_config_os.h
config.status: linking src/makefiles/Makefile.linux to src/Makefile.port
どうやら、readlineパッケージをどうにかすればいいらしい。
ログを見ると
configure:12388: checking for library containing readline
configure:12420: gcc -std=gnu99 -o conftest -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -g -O2 -D_GNU_SOURCE conftest.c -lreadline -lpthread -lrt -ldl -lm >&5
/usr/bin/ld: cannot find -lreadline
collect2: error: ld returned 1 exit status
ldconfigの設定を追加してldconfigしてみても変わらず
# /usr/share/readline
/usr/share/readline
ncursesもaptでインストしてみたがダメだったのでpurgeした。
readlineのインストの仕方が悪かったらしい。
参考ページの通りにソースからインストしてldconfig
# cd /usr/local/src
# wget http://ftp.gnu.org/gnu/readline/readline-4.3.tar.gz
# tar zxvf readline-4.3.tar.gz
# cd readline-4.3
# ./configure
# make
# make install
# find / -name readline
/usr/share/readline
/usr/local/include/readline
※libパスがgccのデフォルトパスと異なるみたいなので
/etc/ld.so.conf.d/readline.confファイル作成しておく
# cat /etc/ld.so.conf.d/readline.conf
# /usr/share/readline
/usr/share/readline
# ldconfig
これで./configureが通ったので
インストは成功。
しかし、psqlが 9.4.26のまま
どうやら、purgeがうまくいかなかったらしい
# find / -name psql
/home/admin/postgresql-14.3/src/bin/psql
/home/admin/postgresql-14.3/src/bin/psql/psql
/data/home/admin/postgresql-14.3/src/bin/psql
/data/home/admin/postgresql-14.3/src/bin/psql/psql
/usr/lib/postgresql/9.4/bin/psql
/usr/bin/psql
/run/nfs4/home/admin/postgresql-14.3/src/bin/psql
/run/nfs4/home/admin/postgresql-14.3/src/bin/psql/psql
/usr/lib/postgresql
/usr/lib/postgresql-common
/usr/bin/psql
を削除してもダメ。
INSTALLファイルを見ると、手短なケースでも
./configure
make
su
make install
adduser postgres
mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
/usr/local/pgsql/bin/createdb test
/usr/local/pgsql/bin/psql test
としなければいけないらしい。
更にじっくりインストするなら、かなりだるいことになりそう。
まず、先の9.4で作成されたpostgresユーザ設定のホームディレクトリィが変だったのでユーザを作り直す。
※su - で、ja_JP.UTF-8を作る
# localedef -f UTF-8 -i ja_JP ja_JP
# localectl list-locales | grep -i ja
※ユーザを一旦削除
# userdel postgres
※普通の設定でpostgresユーザを作成しなおす
# adduser postgres
※以下、postgresユーザで処理
# su -postgres
# vi .profile
$
a
LANG=ja_JP.UTF-8
LANGUAGE=
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=
# logout
※以下、最短ルートで初期化してみる
# /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
# /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
# /usr/local/pgsql/bin/createdb test
# /usr/local/pgsql/bin/psql test
※postgreSQLのコマンドのパスが通っていないので.profileにパスの追加を追記
PATH=$PATH:/usr/local/pgsql/bin
やれやれ、postgreSQLのインストがメンドクサイと思ったら、
初期設定がグダグダだから、
パッケージをインストする前に先回りしてしまえ!
というコトらしい。
# systemctl start postgresql
# systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
Active: active (exited) since Tue 2022-05-24 13:58:04 PDT; 7s ago
Process: 5094 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 5094 (code=exited, status=0/SUCCESS)
May 24 13:58:04 SlanyNAS0901 systemd[1]: Starting PostgreSQL RDBMS...
May 24 13:58:04 SlanyNAS0901 systemd[1]: Started PostgreSQL RDBMS.
# systemctl stop postgresql
後は pg_hba.confを設定すればいいはず。
$ cd /usr/local/pgsql/data
$ diff postgresql.conf postgresql.conf.org
63d62
< listen_addresses = '*' # どこからでもOK
66d64
< port = 5432
445c443
< logging_collector = on # stderrをログファイルにリダイレクトする ー>$PGDATA/logの下にログファイルができる
---
>
$ diff pg_hba.conf pg_hba.conf.org
91,92c91
< #host all all 127.0.0.1/32 trust
< host all all 0.0.0.0/0 md5
---
> host all all 127.0.0.1/32 trust
$
しかし、リモート接続がうまくいかないというか全くログが取れないので、コンフィグしなおす。
# ./configure --enable-debug --with-openssl --enable-nls=UTF_JP
以下同じ
でもダメ、pg_ctlコマンドを試してみると
$ pg_ctl start
pg_ctl: no database directory specified and environment variable PGDATA unset
Try "pg_ctl --help" for more information.
$ echo $PGDATA
/usr/local/pgsql/data
PGDATA環境変数は通っているがpg_ctlからは見えない
もしかして、pg_ctlの中でshell起動してるのかな?
exportを付けてみた
export PGDATA=/usr/local/pgsql/data # 無いと動作しない
export PGLIB=/usr/local/pgsql/lib # 無くても動作する
記事によっては
export LD_LIBRARY=$LD_LIBRARY:/usr/local/pgsql/lib
を付けているところがあるけど、
今時のシェアライブラリィはldconfigコマンドで処理しないといけない(ハズ
$ pg_ctl start
waiting for server to start....2022-05-25 03:59:15.293 PDT [6764] LOG: redirecting log output to logging collector process
2022-05-25 03:59:15.293 PDT [6764] HINT: Future log output will appear in directory "log".
done
server started
さて
PCからA5でリモート接続もできた。
export を付けずに環境変数を設定するとechoで設定できていても
それは只のシェルの内輪の変数でしかなく、
起動した子プロセスとかに引き継がれる環境変数ではない。
なので、
で確認しとかないと・・・
暫く使わないと忘れるw(罠