【ReadyNAS212】PostgreSQLインスト~exportに泣く~

安易に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が通ったので

# make
# make install

インストは成功。

しかし、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で設定できていても

それは只のシェルの内輪の変数でしかなく、

起動した子プロセスとかに引き継がれる環境変数ではない。

なので、

$ export -p

で確認しとかないと・・・

暫く使わないと忘れるw(罠




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA