文章目录
平台
- rk3399
- ubuntu 16.04 x64
SDK路径
/data/project/rockchip/rk3399/src
Ubuntu 安装 postgres
1. 添加 GPG 密钥:
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
2. 添加源
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
3. 安装 PostgreSQL
sudo apt update
sudo apt install postgresql postgresql-contrib
4. 查看服务状态
service postgresql status
源码安装
交叉编译
1. zlib
build.sh
#! /bin/bash
if [ ! -f ./zlib-1.2.11.tar.xz ]
then
wget https://udomain.dl.sourceforge.net/project/libpng/zlib/1.2.11/zlib-1.2.11.tar.xz
fi
tar xvf zlib-1.2.11.tar.xz
chmod +x run.sh
cp run.sh zlib-1.2.11/
cd zlib-1.2.11
./run.sh
run.sh
#! /bin/bash
SDK_PATH=/data/project/rockchip/rk3399/src
COMPILER_PATH=$SDK_PATH/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin
SYS_LIB_DIR=$SDK_PATH/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/libc/usr
export PATH=$PATH:$COMPILER_PATH
export CC=aarch64-linux-gnu-gcc
INSTALL_PATH=`pwd`/../zlib_install
mkdir $INSTALL_PATH
mkdir build
cd build
../configure --prefix=$INSTALL_PATH
make
make install
ls $INSTALL_PATH
cp -rvf $INSTALL_PATH/* $SYS_LIB_DIR/
编译
chmod a+x *.sh
./build.
输出
$ ls zlib_install/
include lib share
$ file zlib_install/lib/libz.so.1.2.11
zlib_install/lib/libz.so.1.2.11: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, BuildID[sha1]=17de7def7a1de0ac43de7820027ac2f81a60f9cf, not stripped
2. openssl
build.sh
#! /bin/bash
if [ ! -f openssl-1.1.1d.tar.gz ]
then
wget https://www.openssl.org/source/openssl-1.1.1d.tar.gz
fi
chmod +x run.sh
tar xvf openssl-1.1.1d.tar.gz
cp run.sh openssl-1.1.1d
cd openssl-1.1.1d
./run.sh
run.sh
#! /bin/bash
SDK_PATH=/data/project/rockchip/rk3399/src
ARM_CROSS_TOOL=$SDK_PATH/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin
SYS_LIB_DIR=$SDK_PATH/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/libc/usr
export PATH=$PATH:$ARM_CROSS_TOOL
OUT_TARGET=`pwd`/../openssl_arm
mkdir -p $OUT_TARGET
vcom=aarch64-linux-gnu
export CC="$vcom"-gcc
export CPP="$vcom"-g++
export AR="$vcom"-ar
export LD="$vcom"-ld
export RANLIB="$vcom"-ranlib
#LDFLAGS=-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed
#export LDFLAGS
./config \
no-asm \
shared \
--prefix=$OUT_TARGET
#delete MakeFile -m64
sed -i "s/-m64/ /g" Makefile
make
make install
echo "the output files is in $OUT_TARGET"
cp -rvf $OUT_TARGET/* $SYS_LIB_DIR/
echo "$SYS_LIB_DIR"
echo "finish"
编译
chmod a+x *.sh
./build.sh
输出
$ ls openssl_arm/
bin include lib share ssl
$ file openssl_arm/bin/openssl
openssl_arm/bin/openssl: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[sha1]=fef4c4864ddf42221507a4a90ff5d198fa97a554, not stripped
3. postgresql
build.sh
#! /bin/bash
if [ ! -f postgresql-11.2.tar.gz ]
then
wget https://ftp.postgresql.org/pub/source/v11.2/postgresql-11.2.tar.gz
fi
tar xvf postgresql-11.2.tar.gz
chmod +x run.sh
cp run.sh postgresql-11.2
cd postgresql-11.2
./run.sh
run.sh
#! /bin/bash
SDK_PATH=/data/project/rockchip/rk3399/src
ARM_CROSS_TOOL=$SDK_PATH/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin
SYS_LIB_DIR=$SDK_PATH/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/libc/usr
export PATH=$PATH:$ARM_CROSS_TOOL
OUT_TARGET=`pwd`/../postgresql_arm
mkdir -p $OUT_TARGET
vcom=$ARM_CROSS_TOOL/aarch64-linux-gnu
export CC="$vcom"-gcc
export CXX="$vcom"-g++
export AR="$vcom"-ar
export LD="$vcom"-ld
export RANLIB="$vcom"-ranlib
HOST_PREFIX=aarch64-linux-gnu
mkdir build
cd build
../configure \
--host=$HOST_PREFIX \
--prefix=$OUT_TARGET \
--without-readline \
--with-openssl \
--with-zlib
make -j12
make install
echo "finish"
编译
chmod a+x *.sh
./build.sh
输出
$ ls postgresql_arm/
bin include lib share
$ file postgresql_arm/bin/postgres
postgresql_arm/bin/postgres: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[sha1]=d107734a3436dbe0872a3ae803f97ae428dc1a46, with debug_info, not stripped
安装包
将 上述输出文件 zlib_install
,openssl_arm
,postgresql_arm
复制到install_postgres
mkdir install_postgres
cp -rvf zlib_install install_postgres/
cp -rvf openssl_arm install_postgres/
cp -rvf postgresql_arm install_postgres/
postgres.rc
将postgres启动脚本复制到安装包文件中
cp postgresql-11.2/contrib/start-scripts/linux install_postgres/postgres.rc
postgres.service
systemctl的service
[Unit]
Description=PostgreSQL database server
Documentation=man:postgres(1)
[Service]
Type=notify
User=postgres
ExecStart=/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=0
[Install]
WantedBy=multi-user.target
install.sh
#! /bin/bash
OPENSSH=./openssl_arm
ZLIB=./zlib_install
POSTGRES=./postgresql_arm
TARGET_PATH=/usr
POSTGRES_INSTALL=$TARGET_PATH/local/pgsql
sudo cp -rvf $OPENSSH/* $TARGET_PATH
sudo cp -rvf $ZLIB/* $TARGET_PATH
sudo groupadd postgres
sudo useradd -s /bin/bash -g postgres postgres
sudo passwd postgres <<EOF
postgres
postgres
EOF
sudo mkdir -p $POSTGRES_INSTALL/data
sudo mkdir -p $POSTGRES_INSTALL/log
sudo chown postgres:postgres $POSTGRES_INSTALL/data
sudo chown postgres:postgres $POSTGRES_INSTALL/log
sudo cp -rvf $POSTGRES/lib $TARGET_PATH/
sudo cp -rvf $POSTGRES/include $TARGET_PATH/
sudo cp -rvf $POSTGRES/* $POSTGRES_INSTALL/
sudo ./init.sh
init.sh
#! /bin/bash
SERVICE_FILE=/etc/init.d/postgresql
POSTGRES_PATH=/usr/local/pgsql
POSTGRES_BIN=$POSTGRES_PATH/bin
POSTGRES_DATA=$POSTGRES_PATH/data
function create_init(){
sudo cp postgres.rc $SERVICE_FILE
}
LINK_FILE=S98postgresql
create_link(){
chmod 755 $SERVICE_FILE
if [ -d /etc/rc5.d ] ;then
sudo ln -s $SERVICE_FILE /etc/rc0.d/K02postgresql
sudo ln -s $SERVICE_FILE /etc/rc1.d/K02postgresql
sudo ln -s $SERVICE_FILE /etc/rc2.d/K02postgresql
sudo ln -s $SERVICE_FILE /etc/rc3.d/S98postgresql
sudo ln -s $SERVICE_FILE /etc/rc4.d/S98postgresql
sudo ln -s $SERVICE_FILE /etc/rc5.d/S98postgresql
else
sudo ln -s $SERVICE_FILE /etc/init.d/K02postgresql
sudo ln -s $SERVICE_FILE /etc/init.d/K02postgresql
sudo ln -s $SERVICE_FILE /etc/init.d/K02postgresql
sudo ln -s $SERVICE_FILE /etc/init.d/S98postgresql
sudo ln -s $SERVICE_FILE /etc/init.d/S98postgresql
sudo ln -s $SERVICE_FILE /etc/init.d/S98postgresql
fi
}
install_rc_service(){
if [ ! -f "$SERVICE_FILE" ]
then
create_init
create_link
fi
}
install_system_service(){
sudo cp postgres.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl start postgres.service
sudo systemctl enable postgres.service
}
###########################################################################
su - postgres -c "/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data"
su - postgres -c "/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data > /usr/local/pgsql/log/logfile 2>&1 &"
if [ $# -eq 0 ]
then
install_rc_service
else
install_system_service
fi
uninstall.sh
#! /bin/bash
TARGET_PATH=/usr
POSTGRES_INSTALL=$TARGET_PATH/local/pgsql
sudo rm -rvf $POSTGRES_INSTALL
sudo userdel -r postgres
sudo rm /etc/init.d/postgres
if [ -d /etc/rc5.d ]
then
sudo rm /etc/rc0.d/K02postgresql
sudo rm /etc/rc1.d/K02postgresql
sudo rm /etc/rc2.d/K02postgresql
sudo rm /etc/rc3.d/S98postgresql
sudo rm /etc/rc4.d/S98postgresql
sudo rm /etc/rc5.d/S98postgresql
else
sudo rm /etc/init.d/K02postgresql
sudo rm /etc/init.d/K02postgresql
sudo rm /etc/init.d/K02postgresql
sudo rm /etc/init.d/S98postgresql
sudo rm /etc/init.d/S98postgresql
sudo rm /etc/init.d/S98postgresql
fi
if [ -f /etc/systemd/system/postgres.service ]
then
sudo systemctl stop postgres.service
sudo systemctl disable postgres.service
sudo systemctl daemon-reload
sudo rm /etc/systemd/system/postgres.service
fi
打包安装包
install_postgres$ ls
init.sh install.sh openssl_arm postgresql_arm postgres.rc postgres.service uninstall.sh zlib_install
$ cd ../
$ tar zcvf install_postgres.tar.gz install_postgres
rk3399中解压
tar xvf install_postgres.tar.gz
安装
cd install_postgres
sudo ./install.sh
测试
z@z:~/install_postgres$ sudo ps -aux | grep postgres
postgres 2389 0.2 0.8 159864 17388 ? S 02:20 0:00 /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
postgres 2397 0.0 0.1 159864 3640 ? Ss 02:20 0:00 postgres: checkpointer
postgres 2398 0.0 0.1 159864 3640 ? Ss 02:20 0:00 postgres: background writer
postgres 2399 0.0 0.1 159864 3640 ? Ss 02:20 0:00 postgres: walwriter
postgres 2400 0.0 0.2 160272 5604 ? Ss 02:20 0:00 postgres: autovacuum launcher
postgres 2401 0.0 0.1 14780 2728 ? Ss 02:20 0:00 postgres: stats collector
postgres 2402 0.0 0.2 160160 4036 ? Ss 02:20 0:00 postgres: logical replication launcher
z 2417 0.0 0.0 4456 636 pts/0 S+ 02:21 0:00 grep --color=auto postgres
z@z:~/install_postgres$ su postgres
Password:
postgres@z:/home/z/install_postgres$ /usr/local/pgsql/bin/psql
psql (11.2)
Type "help" for help.
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+---------+---------+-----------------------
postgres | postgres | UTF8 | C.UTF-8 | C.UTF-8 |
template0 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(3 rows)
postgres=# \q
postgres@z:/home/z/install_postgres$