本文简要介绍如何在 SmartOS 上搭建 PostgreSQL 开发环境,以及如何编译 PostgreSQL 数据库。

准备工作

这里我们通过 git 来拉取代码,因此首先安装 git 程序。

# pkgin in git

接着,创建一个普通用户来编译测试 PostgreSQL 数据库。

# useradd -m -d /home/hunghu -s /bin/bash hunghu
# passwd hunghu

安装依赖

通过源码编译安装,我们需要安装一些基本的工具,如 gcc, make 等,我们使用下面的命令进行安装。

# pkgin -y in gcc10
# pkgin -y in gmake
# pkgin -y in flex bison
# pkgin -y in pkgconf

# pkgin -y in icu            # --with-icu
# pkgin -y in libuuid        # --with-uuid=e2fs
# pkgin -y in libxml2        # --with-libxml
# pkgin -y in libxslt        # --with-libxslt
# pkgin -y in llvm clang     # --with-llvm
# pkgin -y in openssl        # --with-openssl
# pkgin -y in pam-krb5       # --with-gssapi
# pkgin -y in readline       # --with-readline

编译完成之后,我们需要跑 TAP 测试,因此需要安装 TAP 测试套件。

# pkgin -y in p5-IPC-Run

最后,执行 configure 生成 Makefile 文件,并执行编译。

$ ls -I '*.sh' | xargs rm -rf
$ ../configure --prefix=/opt/local/pg \
    --enable-debug \
    --enable-dtrace \
    --enable-nls \
    --enable-rpath \
    --enable-thread-safety \
    --with-gssapi \
    --with-icu \
    --with-ldap \
    --with-libxml \
    --with-libxslt \
    --with-llvm \
    --with-openssl \
    --with-pam \
    --with-perl \
    --with-python \
    --with-uuid=e2fs \
    --without-numa \
    CFLAGS="-ggdb -O2 -ftree-vectorize -pipe -Wall -Wl,-rpath,/opt/local/pg/lib"
$ make -j $(nproc) -s && make install -s
$ (cd contrib; make -j $(nproc); make install -s)

汇总

SmartOS 上关于 PostgreSQL 数据库的相关依赖汇总如下。

pkgin -y in flex bison
pkgin -y in gcc10
pkgin -y in git
pkgin -y in gmake
pkgin -y in p5-IPC-Run
pkgin -y in pkgconf
pkgin -y in clang

# Run-time requires libraries
pkgin -y in icu
pkgin -y in libuuid
pkgin -y in libxml2
pkgin -y in libxslt
pkgin -y in llvm
pkgin -y in openssl
pkgin -y in pam-krb5
pkgin -y in readline

引申

DNS 配置

编辑 /etc/resolv.conf 文件并加入正确的 DNS 服务器地址,例如 nameserver 114.114.114.114

修改软件源

编辑 /opt/local/etc/pkgin/repositories.conf 文件,注释原有的软件源,添加 SmartOS 的软件源,如下所示。

$ tail -n 2 /opt/local/etc/pkgin/repositories.conf
# https://pkgsrc.joyent.com/packages/SmartOS/2021Q4/x86_64/All
https://pkgsrc.smartos.org/packages/SmartOS/2021Q4/x86_64/All