在 sco openserver 6.0 d2m1 系统上编译安装 postgresql 14.0 数据库-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 789408
  • 博文数量: 130
  • 博客积分: 3477
  • 博客等级: 中校
  • 技术积分: 1339
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-30 21:53
文章分类

(130)

  • (2)
  • (3)
  • (2)
  • (20)
  • (56)
  • (47)
  • (0)
文章存档

(1)

(10)

(4)

(10)

(9)

(1)

(1)

(4)

(3)

(12)

(24)

(2)

(8)

(6)

(34)

(1)

我的朋友
相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: mysql/postgresql

2021-10-29 11:52:52

build install postgresql 14.0 and use for sco openserver 6.0.0 d2m1
==================================================================================================================================
在 sco openserver6 系统上编译安装 postgresql 14.0

纯干货,无废话。

写在前面的话:
postgresql 数据库软件从 10 版本开始,就不再支持 sco openserver6 系统了,但这并不代表我们无法在 sco openserver 6 系统上安装使用 postgresql 10 以上的数据库版本,只是相对麻烦一点。
因为 postgresql 数据库是使用原生的 c 语言开发的,这对我们是一个很好的信号,我们有理由相信,经过简单的修改,我们是能够在 sco openserver 6 系统上使用 postgresql 14.0 的,当然,前提是你必须要有足够的耐心。


编译需要的前置条件:
1、  系统必须安装开发软件包;
2、  系统必须打上 sco openserver release 6.0.0 maintenance pack 4 (ver 1.0.0ce) 补丁包;
3、  编译必须使用 gmake 3.8 或以上版本,测试中发现 3.8 或 3.8.2 的版本最好,其他版本在编译安装 make 程序包的时候需要修改程序代码。
4、           编译 postgresql 14.0 必须使用 gnu m4 和 gnu bison。


编译安装 make-3.8.0 的软件包方法如下。
1、  展开 make-3.8.0.tar.bz2
2、  进入 make-3.8.0 目录
3、  执行编译前配置
# ./configure --prefix=/usr/gnu --build=i586-sco-sysv5 --host=i586-sco-sysv5
4、  编译并安装
# make
# make install
5、  建立连接
# cd /usr/bin
# ln -sf /usr/gnu/bin/make gmake

编译安装 gnu m4 的软件包的方法如下(我安装的版本是 1.4.10b)。
1、         展开 m4-1.4.10b.tar.bz2
2、         进入 m4-1.4.10b  目录
3、         执行编译前的配置
# ./configure --prefix=/usr/gnu --build=i586-sco-sysv5 --host=i586-sco-sysv5
4、        编译并安装
# gmake
# gmake install
5、        建立软链接
# cd /usr/bin
# mv m4 m4#
# ln -sf /usr/gnu/bin/m4 m4

编译安装 gnu bison 的软件包的方法如下(我安装的版本是 2.2)。
1、         展开 bison-2.2.tar.bz2
2、         进入 bison-2.2  目录
3、         执行编译前的配置
# ./configure --prefix=/usr/gnu --build=i586-sco-sysv5 --host=i586-sco-sysv5
4、        编译并安装
# gmake
# gmake install
5、        建立软链接
# cd /usr/bin
# mv yacc yacc#
# ln -sf /usr/gnu/bin/yacc yacc
# ln -sf /usr/gnu/bin/bison bison


postgresql 14.0 在 sco openserver 6 系统上的安装使用
做好前置工作后,我们开始进入 postgresql 14.0 的安装,过程如下:
step 1:
下载 postgresql-14.0.tar.bz2 文件,放置在 /tmp 目录下,并展开压缩文件:
# cd /tmp
# bzip2 –d -c postgresql-14.0.tar.bz2 | tar xvf -

step 2:
修改 postgresql 14.0 的安装程序源码,添加一些内容:

1、修改 postgresql-14.0/src/include/c.h 文件,在其中加入如下内容:

在:

点击(此处)折叠或打开

  1. #define c_h

下面加入:

点击(此处)折叠或打开

  1. #include <sys/time.h>

查找:

点击(此处)折叠或打开

  1. #define flexible_array_member /* empty */
将其修改为:

点击(此处)折叠或打开

  1. #ifndef flexible_array_member
  2. #define flexible_array_member 512 /* empty */
  3. #endif

2、修改 postgresql-14.0/src/backend/storage/lmgr/spin.c
将其中的:

点击(此处)折叠或打开

  1. #ifndef have_atomics
  2. #define num_emulation_semaphores (num_spinlock_semaphores num_atomics_semaphores)
  3. #else
  4. #define num_emulation_semaphores (num_spinlock_semaphores)
  5. #endif /* disable_atomics */

修改为:

点击(此处)折叠或打开

  1. #ifndef have_atomics
  2. #define num_emulation_semaphores (num_spinlock_semaphores num_atomics_semaphores 128)
  3. #else
  4. #define num_emulation_semaphores (num_spinlock_semaphores128)
  5. #endif /* disable_atomics */

3、在 postgresql-14.0/src/template 目录下添加文件 sco , 内容如下:

点击(此处)折叠或打开

  1. cc="$cc -b elf"

4、在 postgresql-14.0/src/template 目录下添加文件 unixware , 内容如下:

点击(此处)折叠或打开

  1. if test "$gcc" != yes; then
  2. # the -kno_host is for a bug in the compiler. see -hackers
  3. # discussion on 7-8/aug/2003.
  4. cat >conftest.c <<__eof__
  5. extern char *strcpy(char *, const char *);
  6. static void f(char *p, int n){
  7. strcpy(p n,"");
  8. }
  9. void g(void){
  10. f(0, 0);
  11. }
  12. __eof__
  13. # debugging and optimization are mutually exclusive
  14. if test "$enable_debug" != yes; then
  15. cflags="-o"
  16. fi
  17. if $cc -c -o -kinline conftest.c >conftest.err 2>&1; then
  18. cflags="$cflags -kinline"
  19. else
  20. cflags="$cflags -kinline,no_host"
  21. fi
  22. rm -f conftest.*
  23. pthread_cflags="-kpthread"
  24. # the effect of doing threading for the backend does not work
  25. # because of a threading bug that appears in the regression tests:
  26. #
  27. # in make check, the plpgsql test (plpgsql.sql)
  28. # set statement_timeout to 1000;
  29. # select blockme();
  30. # reset statement_timeout;
  31. #
  32. # per report from olivier prenant
  33. fi
  34. # unixware's ldap library reportedly needs these too
  35. extra_ldap_libs="-llber -lresolv"

5、修改 postgresql-14.0/src/bin/psql/describe.c 文件,将其中的:

点击(此处)折叠或打开

  1. processsqlnamepattern(pset.db, &buf, pattern,
  2.                                                   !showsystem && !pattern, false,
  3.                                                   null, "n.nspname", null,
  4.                                                   null);
全部修改成:

点击(此处)折叠或打开

  1. processsqlnamepattern(pset.db, &buf, pattern,
  2.                                                   (!showsystem && !pattern) ? truefalse, false,
  3.                                                   null, "n.nspname", null,
  4.                                                   null);

=======================================================================================================
= 注意:这个文件中类似的地方,有多处,需要耐心修改。
= 这个函数的传入参数 !showsystem && !pattern 表示 showsystem 不等于 0 并且 pattern 不等于 0 的时候,返回“真”
= 否则返回 “假” , 但是 sco openserver 6.0.0ni 上的 c99 不支持在函数中的参数类似 !showsystem && !pattern 写法,
= 等价的写法必须是 (!showsystem && !pattern) ? true : false
= 明确的告知函数中传入的 bool 值是 true 或者是 false ,否则编译时会报 error 没有定义的错误。
======================================================================================================

6、修改 postgresql-14.0/src/backend/optimizer/util/plancat.c 文件,在函数:

点击(此处)折叠或打开

  1. bool
  2. relation_excluded_by_constraints(plannerinfo *root,
  3.                                                                  reloptinfo *rel, rangetblentry *rte)
中找到如下位置:

点击(此处)折叠或打开

  1. include_notnull = (!rte->inh || rte->relkind == relkind_partitioned_table);
将其修改为:

点击(此处)折叠或打开

  1. include_notnull = (rte->inh == 0 || rte->relkind == relkind_partitioned_table) ? true : false ;
================================================================================================================
= 注意:这个地方的赋值操作,(!rte->inh || rte->relkind == relkind_partitioned_table) 表示 !rte->inh 不为“真”,
= 或者是 rte->relkind 等于 relkind_partitioned_table 时,返回真值,否则返回“假”,并将该布尔值赋值给 include_notnull
= 该写法在 sco openserver 6.0 的 c 编译器中不支持,会报 error 没有定义的错误。
= 等价的写法为:include_notnull = (rte->inh == 0 || rte->relkind == relkind_partitioned_table) ? true : false ;
================================================================================================================

7、修改  postgresql-14.0/src/backend/access/nbtree/nbtinsert.c 文件:
在:

点击(此处)折叠或打开

  1. static void
  2. _bt_delete_or_dedup_one_page(relation rel, relation heaprel, ...
函数的最后部分,找到:

点击(此处)折叠或打开

  1. if (btgetdeduplicateitems(rel) && itup_key->allequalimage)
  2.                 _bt_dedup_pass(rel, buffer, heaprel, insertstate->itup,
  3.                                            insertstate->itemsz, (indexunchanged || uniquedup) );
修改为:

点击(此处)折叠或打开

  1. if (btgetdeduplicateitems(rel) && itup_key->allequalimage)
  2.                 _bt_dedup_pass(rel, buffer, heaprel, insertstate->itup,
  3.                                            insertstate->itemsz, (indexunchanged || uniquedup) ? true : false );
说明:
================================================================================================================
= 注意:与前面的原因一样
= 这个函数中的 (indexunchanged || uniquedup) 部分表示 indexunchanged 或者是 uniquedup 为真时,返回“真”,否则返回“假”,
= 但是这种写法在 sco openserver 6.0 的 c 编译器中不支持,在编译的时候会报 error 没有定义的错误信息,等价的写法为:
= (indexunchanged || uniquedup) ? true : false
=================================================================================================================

8、在 postgresql-14.0/src/include/port/ 目录下添加文件 sco.h , 内容如下:

点击(此处)折叠或打开

  1. /*
  2.  * src/include/port/sco.h
  3.  *
  4.  * see src/backend/libpq/pqcomm.c */
  5. #define sco_accept_bug

  6. #define use_univel_cc

9、在 postgresql-14.0/src/include/port/ 目录下添加文件 unixware.h , 内容如下:

点击(此处)折叠或打开

  1. /*
  2.  * src/include/port/unixware.h
  3.  *
  4.  * see src/backend/libpq/pqcomm.c */
  5. #define sco_accept_bug

  6. /***************************************
  7.  * define this if you are compiling with
  8.  * the native unixware c compiler.
  9.  ***************************************/
  10. #define use_univel_cc

10、在 postgresql-14.0/src/makefiles/ 目录下添加 sco 系统的编译文件 makefile.sco ,内容如下:

点击(此处)折叠或打开

  1. aropt = cr
  2. export_dynamic = -wl,-bexport
  3. dlsuffix = .so
  4. ifeq ($(gcc), yes)
  5. cflags_sl = -fpic
  6. else
  7. cflags_sl = -k pic
  8. endif
  9. # rule for building a shared library from a single .o file
  10. %.so: %.o
  11. $(ld) -g -bdynamic -o $@ $<


11、在 postgresql-14.0/src/makefiles/ 目录下添加 unixware 系统的编译文件 makefile.unixware ,内容如下:

点击(此处)折叠或打开

  1. aropt = crs
  2. ifeq ($(with_gnu_ld), yes)
  3. export_dynamic = -wl,-e
  4. else
  5. export_dynamic = -wl,-bexport
  6. endif
  7. ifeq ($(ld_r_works), yes)
  8. ifeq ($(with_gnu_ld), yes)
  9. rpath = -wl,-rpath,'$(rpathdir)'
  10. else
  11. rpath = -wl,-r'$(rpathdir)'
  12. endif
  13. endif
  14. # unixware needs threads for everything that uses libpq
  15. cflags = $(pthread_cflags)
  16. dlsuffix = .so
  17. ifeq ($(gcc), yes)
  18. cflags_sl = -fpic
  19. else
  20. cflags_sl = -k pic
  21. endif
  22. ifeq ($(gcc), yes)
  23. so_flags = -shared
  24. else
  25. so_flags = -g
  26. endif
  27. # rule for building a shared library from a single .o file
  28. %.so: %.o
  29. $(cc) $(cflags) $(ldflags) $(ldflags_sl) $(so_flags) -o $@ $<
  30. sqlmansect = 5sql

12、在 postgresql-14.0/configure 文件中,添加编译操作系统环境描述内容,在:

点击(此处)折叠或打开

  1. openbsd*) template=openbsd ;;
下面加入:

点击(此处)折叠或打开

  1. sco*) template=sco ;;
在:

点击(此处)折叠或打开

  1. solaris*) template=solaris ;;
下面加入:

点击(此处)折叠或打开

  1. sysv5*) template=unixware ;;
在:

点击(此处)折叠或打开

  1. if test "$ac_cv_prog_cc_c99" = no; then
  2. as_fn_error $? "c compiler \"$cc\" does not support c99" "$lineno" 5
  3. fi

上面加入

点击(此处)折叠或打开

  1. ac_cv_prog_cc_c99=yes
变成:

点击(此处)折叠或打开

  1. ac_cv_prog_cc_c99=yes
  2. if test "$ac_cv_prog_cc_c99" = no; then
  3. as_fn_error $? "c compiler \"$cc\" does not support c99" "$lineno" 5
  4. fi

13、在 postgresql-14.0/configure.in 文件中,添加编译操作系统环境描述内容,在:

点击(此处)折叠或打开

  1. openbsd*) template=openbsd ;;

下面加入:

点击(此处)折叠或打开

  1. sco*) template=sco ;;
在:

点击(此处)折叠或打开

  1. solaris*) template=solaris ;;
下面加入:

点击(此处)折叠或打开

  1. sysv5*) template=unixware ;;
在:

点击(此处)折叠或打开

  1. if test "$ac_cv_prog_cc_c99" = no; then
  2. ac_msg_error([c compiler "$cc" does not support c99])
  3. fi
上面加入:

点击(此处)折叠或打开

  1. ac_cv_prog_cc_c99=yes
变成:

点击(此处)折叠或打开

  1. ac_cv_prog_cc_c99=yes
  2. if test "$ac_cv_prog_cc_c99" = no; then
  3. ac_msg_error([c compiler "$cc" does not support c99])
  4. fi

14、修改 postgresql-14.0/src/makefile.shlib 文件,在其中加入共享库编译时的 sco 和 unixware 的支持。
在:

点击(此处)折叠或打开

  1. ifeq ($(portname), solaris)
  2. ifeq ($(gcc), yes)
  3. link.shared = $(compiler) -shared
  4. else
  5. link.shared = $(compiler) -g
  6. endif
  7. ifdef soname
  8. ifeq ($(with_gnu_ld), yes)
  9. link.shared = -wl,-soname,$(soname)
  10. else
  11. link.shared = -h $(soname)
  12. endif
  13. endif
  14. endif

下面加入:

点击(此处)折叠或打开

  1. ifeq ($(portname), sco)
  2. ifeq ($(gcc), yes)
  3. link.shared = $(cc) -shared
  4. else
  5. link.shared = $(cc) -g
  6. endif
  7. link.shared = -wl,-z,text
  8. ifdef soname
  9. link.shared = -wl,-h,$(soname)
  10. endif
  11. endif
  12. ifeq ($(portname), unixware)
  13. ifeq ($(gcc), yes)
  14. link.shared = $(cc) -shared
  15. else
  16. link.shared = $(cc) -g
  17. endif
  18. link.shared = -wl,-z,text
  19. ifdef soname
  20. link.shared = -wl,-h,$(soname)
  21. endif
  22. endif

15、拷贝 postgresql-14.0/src/backend/utils/adt/jsonpath_scan.c 到 postgresql-14.0/src/include

点击(此处)折叠或打开

  1. # cp postgresql-14.0/src/backend/utils/adt/jsonpath_scan.c postgresql-14.0/src/include

step 3:开始准备编译环境:
1、创建编译目录环境,建立一个编译目录,如 /tmp/objdir

2、写编译配置文件 build.sh,内容如下:

点击(此处)折叠或打开

  1. ../postgresql-14.0/configure \
  2. --prefix=/opt/postgresql/14.0 \
  3. --build=i586-sco-sysv5 \
  4. --host=i586-sco-sysv5 \
  5. --disable-spinlocks \
  6. --disable-thread-safety \
  7. --without-tcl \
  8. --with-perl \
  9. --with-openssl

3、修改其权限为 0755

点击(此处)折叠或打开

  1. # chmod 0755 build.sh

4、进入 /tmp/objdir 目录,开始编译前环境配置。

点击(此处)折叠或打开

  1. # cd /tmp/objdir
  2. # ../build.sh

step 4:编译安装 postgresql 14.0 软件
1、开始编译

点击(此处)折叠或打开

  1. # gmake
  2. # gmake install

step 5:配置使用环境,使用 postgresql 14.0
1、创建用户,进行使用前初始化。
# groupadd postgres
# mkdir /home
# chmod 0775 /home
# useradd -d /home/postgres -g postgres -s /bin/bash -m postgres
# passwd postgres
<选择 1 , 连续两次输入用户密码 >
2、编辑 /home/postgres/.bash_profile 文件,添加环境变量参数。
在:
export bash_env
下面加入:
source $bash_env

3、编辑 /home/postgres/.bashrc 文件,添加环境变量参数。
在文件最后,加入如下语句:

点击(此处)折叠或打开

  1. export pg_version=14.0
  2. export pg_home=/opt/postgresql/${pg_version}
  3. export pgdata=${home}/data
  4. export pglog=${pgdata}/pg_log
  5. export path=$path:$pg_home/bin:.
  6. export ld_library_path=$ld_library_path:$pg_home/lib:.

4、切换用户到 postgres
# su – postgres

5、创建数据库实例目录
$ mkdir data

6、初始化数据库实例
$ initdb -e utf-8 -u postgres –w
连续两次数据 postgres 密码

进入 data 目录,修改数据库配置文件
$ cd data
$ mkdir pg_log
$ chmod 0700 pg_log
$ vi pg_hba.conf
修改
local   all             all                                     trust
local   all             all                                     scram-sha-256

修改
host    all             all             127.0.0.1/32            trust
host    all             all             127.0.0.1/32            scram-sha-256
并在其下面添加
host    all             all               0.0.0.0/0             scram-sha-256

修改 postgresql.conf 文件
$ vi postgresql.conf

修改:
#listen_addresses = 'localhost'

listen_addresses = '*'

修改
#port = 5432
port = 5432

修改
#password_encryption = scram-sha-256
password_encryption = scram-sha-256

启动 postgresql 数据库实例
$ pg_ctl -d ${pgdata} -l ${pgdata}/pg_log/startlog start

查看是否正常:
$ psql –l
$ passwd:
数据数据库用户(postgres)密码

如果显示:
                             list of databases
   name    |  owner   | encoding | collate | ctype |   access privileges
----------- ---------- ---------- --------- ------- -----------------------
postgres  | postgres | utf8     | c       | c     |
 template0 | postgres | utf8     | c       | c     | =c/postgres          
           |          |          |         |       | postgres=ctc/postgres
 template1 | postgres | utf8     | c       | c     | =c/postgres          
           |          |          |         |       | postgres=ctc/postgres
(3 rows)

则表示成功


=============================================
特别注意:
    本版本是在 sco openserver 6 d2m1 编译的,如果在 sco openserver 6.0.0 上使用,你可能还有其它的代码需要修改。我比较懒 ^_^. ,没有针对 sco openserver 6.0.0 ni 的系统进行修改。一个简单的使用办法是:
将 sco openserver 6.0 d2m1 服务器上 /usr/lib/libssl.so.1.0 和 /usr/lib/libcrypto.so.1.0 拷贝到 sco openserver 6.0.0 ni 机器的 /usr/lib 目录下,即可正常使用。
^_^.
 

阅读(5452) | 评论(0) | 转发(0) |
0

上一篇:

下一篇:

给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图