rpmdevtools rpm-build yum install -y rpm-build rpmdevtools
使用rpmdev-setuptree 工具
效果以下:java
── rpmbuild ├── BUILD ├── RPMS ├── SOURCES ├── SPECS └── SRPMS
具體實現的功能很簡單,能夠參考github 項目https://github.com/rongfengliang/nvl-pg-extensionpython
擴展開發主要是control 以及函數定義 nvlfunc.control # nvlfunc extension comment = 'Oracle compatible nvl function' default_version = '1.0' module_pathname = '$libdir/nvlfunc' relocatable = false sql 函數定義 nvlfunc--1.0.sql /* nvlfunc--1.0.sql */ -- complain if script is sourced in psql, rather than via ALTER EXTENSION \echo Use "CREATE EXTENSION nvlfunc" to load this file. \quit CREATE OR REPLACE FUNCTION public.NVL(SMALLINT,SMALLINT) RETURNS SMALLINT AS $$ SELECT COALESCE($1,$2); $$ LANGUAGE SQL IMMUTABLE; Makefile 定義,方便安裝(注意pg 版本,可能須要配置path 路徑,同時安裝pg devel 包) EXTENSION = nvlfunc DATA = nvlfunc--1.0.sql PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) include $(PGXS)
/~rpmbuild/SPECS 路徑git
- 代碼
Name: nvl-pg-extension Version: 1.0 Release: 1%{?dist} Summary: this is a postgresql extension nvl function just like oracle License: APACHE URL: https://github.com/rongfengliang/postgres-extension-demo // 使用源碼打包rpm 包 Source: https://github.com/rongfengliang/nvl-pg-extension/archive/v1.0.zip %prep %setup -q %description this is a postgresql extension nvl function just like oracle %install %{make_install} PREFIX=%{_prefix} %files /usr/pgsql-10/share/extension/nvlfunc--1.0.sql /usr/pgsql-10/share/extension/nvlfunc.control
spectool -g -R ~/rpmbuild/SPECS/nvl-pg-extension.spec
rpmbuild -bb ~/rpmbuild/SPECS/nvl-pg-extension.spec
spectool -g -R ~/rpmbuild/SPECS/nvl-pg-extension.spec Getting https://github.com/rongfengliang/nvl-pg-extension/archive/v1.0.zip to /root/rpmbuild/SOURCES/v1.0.zip % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 133 0 133 0 0 72 0 --:--:-- 0:00:01 --:--:-- 72 0 0 0 1119 0 0 174 0 --:--:-- 0:00:06 --:--:-- 306
rpmbuild -bb ~/rpmbuild/SPECS/nvl-pg-extension.spec 執行(%prep): /bin/sh -e /var/tmp/rpm-tmp.uCoCHD + umask 022 + cd /root/rpmbuild/BUILD + cd /root/rpmbuild/BUILD + rm -rf nvl-pg-extension-1.0 + /usr/bin/unzip -qq /root/rpmbuild/SOURCES/v1.0.zip + STATUS=0 + '[' 0 -ne 0 ']' + cd nvl-pg-extension-1.0 + /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w . + exit 0 執行(%install): /bin/sh -e /var/tmp/rpm-tmp.YBV39p + umask 022 + cd /root/rpmbuild/BUILD + '[' /root/rpmbuild/BUILDROOT/nvl-pg-extension-1.0-1.el7.x86_64 '!=' / ']' + rm -rf /root/rpmbuild/BUILDROOT/nvl-pg-extension-1.0-1.el7.x86_64 ++ dirname /root/rpmbuild/BUILDROOT/nvl-pg-extension-1.0-1.el7.x86_64 + mkdir -p /root/rpmbuild/BUILDROOT + mkdir /root/rpmbuild/BUILDROOT/nvl-pg-extension-1.0-1.el7.x86_64 + cd nvl-pg-extension-1.0 + /usr/bin/make install DESTDIR=/root/rpmbuild/BUILDROOT/nvl-pg-extension-1.0-1.el7.x86_64 PREFIX=/usr /usr/bin/mkdir -p '/root/rpmbuild/BUILDROOT/nvl-pg-extension-1.0-1.el7.x86_64/usr/pgsql-10/share/extension' /usr/bin/mkdir -p '/root/rpmbuild/BUILDROOT/nvl-pg-extension-1.0-1.el7.x86_64/usr/pgsql-10/share/extension' /usr/bin/install -c -m 644 .//nvlfunc.control '/root/rpmbuild/BUILDROOT/nvl-pg-extension-1.0-1.el7.x86_64/usr/pgsql-10/share/extension/' /usr/bin/install -c -m 644 .//nvlfunc--1.0.sql '/root/rpmbuild/BUILDROOT/nvl-pg-extension-1.0-1.el7.x86_64/usr/pgsql-10/share/extension/' + /usr/lib/rpm/find-debuginfo.sh --strict-build-id -m --run-dwz --dwz-low-mem-die-limit 10000000 --dwz-max-die-limit 110000000 /root/rpmbuild/BUILD/nvl-pg-extension-1.0 /usr/lib/rpm/sepdebugcrcfix: Updated 0 CRC32s, 0 CRC32s did match. + '[' '%{buildarch}' = noarch ']' + QA_CHECK_RPATHS=1 + case "${QA_CHECK_RPATHS:-}" in + /usr/lib/rpm/check-rpaths + /usr/lib/rpm/check-buildroot + /usr/lib/rpm/redhat/brp-compress + /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip + /usr/lib/rpm/brp-python-bytecompile /usr/bin/python 1 + /usr/lib/rpm/redhat/brp-python-hardlink + /usr/lib/rpm/redhat/brp-java-repack-jars 處理文件:nvl-pg-extension-1.0-1.el7.x86_64 Provides: nvl-pg-extension = 1.0-1.el7 nvl-pg-extension(x86-64) = 1.0-1.el7 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 處理文件:nvl-pg-extension-debuginfo-1.0-1.el7.x86_64 Provides: nvl-pg-extension-debuginfo = 1.0-1.el7 nvl-pg-extension-debuginfo(x86-64) = 1.0-1.el7 Requires(rpmlib): rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1 檢查未打包文件:/usr/lib/rpm/check-files /root/rpmbuild/BUILDROOT/nvl-pg-extension-1.0-1.el7.x86_64 寫道:/root/rpmbuild/RPMS/x86_64/nvl-pg-extension-1.0-1.el7.x86_64.rpm 寫道:/root/rpmbuild/RPMS/x86_64/nvl-pg-extension-debuginfo-1.0-1.el7.x86_64.rpm 執行(%clean): /bin/sh -e /var/tmp/rpm-tmp.Ya1lDM + umask 022 + cd /root/rpmbuild/BUILD + cd nvl-pg-extension-1.0 + /usr/bin/rm -rf /root/rpmbuild/BUILDROOT/nvl-pg-extension-1.0-1.el7.x86_64 + exit 0
── BUILD │ └── nvl-pg-extension-1.0 │ ├── debugfiles.list │ ├── debuglinks.list │ ├── debugsources.list │ ├── elfbins.list │ ├── Makefile │ ├── nvlfunc--1.0.sql │ └── nvlfunc.control ├── BUILDROOT ├── RPMS │ └── x86_64 │ ├── nvl-pg-extension-1.0-1.el7.x86_64.rpm │ └── nvl-pg-extension-debuginfo-1.0-1.el7.x86_64.rpm ├── SOURCES │ └── v1.0.zip ├── SPECS │ └── nvl-pg-extension.spec └── SRPMS
yum install -y nvl-pg-extension-1.0-1.el7.x86_64.rpm
效果github
yum install -y nvl-pg-extension-1.0-1.el7.x86_64.rpm 已加載插件:fastestmirror 正在檢查 nvl-pg-extension-1.0-1.el7.x86_64.rpm: nvl-pg-extension-1.0-1.el7.x86_64 nvl-pg-extension-1.0-1.el7.x86_64.rpm 將被安裝 正在解決依賴關係 --> 正在檢查事務 ---> 軟件包 nvl-pg-extension.x86_64.0.1.0-1.el7 將被 安裝 --> 解決依賴關係完成 依賴關係解決 ======================================================================================================================= Package 架構 版本 源 大小 ======================================================================================================================= 正在安裝: nvl-pg-extension x86_64 1.0-1.el7 /nvl-pg-extension-1.0-1.el7.x86_64 435 事務概要 ======================================================================================================================= 安裝 1 軟件包 總計:435 安裝大小:435 Downloading packages: Running transaction check Running transaction test Transaction test succeeded Running transaction 正在安裝 : nvl-pg-extension-1.0-1.el7.x86_64 1/1 驗證中 : nvl-pg-extension-1.0-1.el7.x86_64 1/1 已安裝: nvl-pg-extension.x86_64 0:1.0-1.el7 完畢!
pg 擴展目錄sql
find /usr/pgsql-10/share/extension/ -name nvlfunc.control /usr/pgsql-10/share/extension/nvlfunc.control
CREATE EXTENSION nvlfunc; SELECT NVL(NULL::SMALLINT, 121::SMALLINT); nvl ----- 121 (1 row)
就是一個簡單的學習測試,實際上基於pg 的擴展模型咱們能夠開發不少強大的功能shell
https://github.com/rongfengliang/nvl-pg-extension
https://github.com/rongfengliang/postgres-extension-demo
https://github.com/rongfengliang/pg-extension-rpm-package架構