适用于

适用于

pdksh当我尝试通过 RHEL 6 或 CentOS 6 安装该软件包时,该软件包在 RHEL 6 或 CentOS 6 上不存在yum

所以我的问题是:

  1. 为什么它在默认存储库中不再可用?它在 5.x 版本中可用。
  2. 有替换壳吗?
  3. 依赖于 的程序又如何呢pdksh?他们可以使用替换外壳吗?

我的解决方法是使用版本 5 中的包,我觉得这不是正确的解决方案,我应该比解决方法更好地理解它。

我主要关心的是 Oracle 数据库。它要求pdksh,那么使用除此之外的替换外壳会有问题吗pdksh

答案1

根据这篇文章“Oracle Linux 6 上的 Oracle Database 11g 第 2 版 (11.2) 安装”:

“pdksh”包的失败可以忽略,因为我们在其位置安装了“ksh”包

在我相当标准的 OEL 6.3 机器上,ksh 已经作为构建的一部分安装,但您可能需要执行 asudo yum install ksh来安装它。


我们的 DBA 还发现这篇文章可能有用:

在 RHEL6 上安装“11.2.0.3 32 位 (x86)”或“64 位 (x86-64)”报告软件包elfutils-libelf-devel-0.97pdksh-5.2.14丢失。

适用于

  • Oracle 服务器 - 企业版 - 版本 11.2.0.3 至 11.2.0.3 [版本 11.2]
  • Oracle 通用安装程序 - 版本 11.2.0.3 至 11.2.0.3 [版本 11.2]
  • Oracle 服务器 - 标准版 - 版本 11.2.0.3 至 11.2.0.3 [版本 11.2]
  • Linux x86
  • Linux x86-64

症状

安装时

  • 11.2.0.3 RHEL6 x86 服务器上的 32 位 (x86) 数据库软件
  • 11.2.0.3 RHEL6 x86-64 服务器上的 64 位 (x86-64) 数据库软件

Oracle 通用安装程序(OUI) 报告包裹elfultils-libelf-devel-0.97pdksh-5.2.14丢失。

installActions.log以下输出中可以观察到:

INFO: INFO: *********************************************
INFO: INFO: Package: elfutils-libelf-devel-0.97: This is a prerequisite condition to test whether the package "elfutils-libelf-devel-0.97" is available on the system.
INFO: INFO: Severity:IGNORABLE
INFO: INFO: OverallStatus:VERIFICATION_FAILED
INFO: INFO: -----------------------------------------------INFO: INFO: Verification Result for Node:nodename
INFO: INFO: Expected Value:elfutils-libelf-devel-0.97
INFO: INFO: Actual Value:missing
INFO: INFO: Error Message:PRVF-7532 : Package "elfutils-libelf-devel" is missing on node "nodename"
INFO: INFO: Cause: A required package is either not installed or, if the package is a kernel module, is not loaded on the specified node.
INFO: INFO: Action: Ensure that the required package is installed and available.
INFO: INFO: -----------------------------------------------:
INFO: INFO: *********************************************
INFO: INFO: Package: pdksh-5.2.14: This is a prerequisite condition to test whether the package "pdksh-5.2.14" is available on the system.
INFO: INFO: Severity:IGNORABLE
INFO: INFO: OverallStatus:VERIFICATION_FAILED
INFO: INFO: -----------------------------------------------INFO: INFO: Verification Result for Node:nodename
INFO: INFO: Expected Value:pdksh-5.2.14
INFO: INFO: Actual Value:missing
INFO: INFO: Error Message:PRVF-7532 : Package "pdksh" is missing on node "nodename"
INFO: INFO: Cause: A required package is either not installed or, if the package is a kernel module, is not loaded on the specified node.
INFO: INFO: Action: Ensure that the required package is installed and available.
INFO: INFO: -----------------------------------------------:    

原因

OUI执行以下命令:

/bin/rpm -q --qf %{version} redhat-release

不返回任何输出(因为在 RHEL6 中,包 redhat-release 已被 redhat-release-server-6Server 取代)。

这会导致 OUI 认为该服务器不是 RHEL 服务器。

由于 OUI 无法识别服务器的类型,因此 OUI 执行默认 (OEL4) 先决条件检查。

此问题已在 Oracle Development 中记录为未发布的错误 13981169。

除此之外,没有定义 RHEL6 先决条件检查

<path>/database/stage/cvu/cvu_prereq.xml

在 11.2.0.3 媒体中。

解决方案

11.2.0.3 64 位 (x86-64) 的解决方案

如果您已从 My Oracle Support (MOS) 下载 11.2.0.3 介质并将软件解压到<path>/database,请执行以下操作:

  1. 将目录更改为<path>/database/stage/cvu/cv/admin
  2. 备份cvu_configcp cvu_config backup_cvu_config
  3. 编辑 cvu_config 并将以下行更改CV_ASSUME_DISTID=OEL4CV_ASSUME_DISTID=OEL6
  4. 保存更新的cvu_config文件
  5. 使用以下命令安装 11.2.0.3 软件:
    1. <path>/database/runInstaller
    2. cd <path>/database
    3. ./runInstaller

OUI 现在应该执行 OEL6 先决条件检查(与 RHEL6 先决条件检查相同),并且不再报告软件包elfutils-libelf-devel-0.97pdksh-5.2.14丢失

笔记

如果您已收到 DVD 形式的 11.2.0.3 介质,则需要将介质从 DVD 复制到 RHEL6 服务器上的磁盘(以便您可以按照上述步骤操作)

11.2.0.3 32 位 (x86) 的解决方案

由于cvu_prereq.xml11.2.0.3 32 位 (x86) 的文件未引用 RHEL6 或 OEL6,因此无法使用上述解决方法。

手动验证是否满足所有要求后,选择忽略所有安装程序中的选项并继续安装。

答案2

我的印象是 pdksh 不符合 POSIX 标准,并且随着开源 AT&T KSH 的发布,从 pdksh 到。只是我的 0.02 美元

AT&T ksh 已获得 Eclipse Public License 1.0 (EPL-1.0) 许可。

答案3

我的理解是,在 RHEL 6 之前,红帽对 AT&T 持谨慎态度康壳公司由于其许可证,因此他们包含了 pdksh,这是一个不太完整的实现。我认为 David Korn 正在尽最大努力让 ksh 在尽可能多的地方被接受,并且在此过程中,许可证得到了澄清或更改。这段引言来自于康壳公司网站:“AT&T 已将 KornShell 作为开源版本发布”。

显然,当 RHEL 6 发布时,红帽对许可证感到满意,因此他们包含了“真实的东西”。

编辑:实际上它在维基百科页面上有解释(当然) - 请参阅历史下的第一段。

答案4

我为旧的 mandrake 2007.1 rpm 包打了一个补丁,并创建了一个新的 SRPM 包,该包应该能够在具有较新 gcc 版本的现代 Linux 发行版上编译而不会出现任何问题:

ftp://ftp.crashrecovery.org/pub/linux/pdksh/RPMS/mdv2011/ ftp://ftp.crashrecovery.org/pub/linux/pdksh/RPMS/mdv2011/pdksh-5.2.14-21-mdv2011.0.x86_64.rpm ftp://ftp.crashrecovery.org/pub/linux/pdksh/RPMS/mdv2011/pdksh-5.2.14-21.src.rpm ftp://ftp.crashrecovery.org/pub/linux/pdksh/RPMS/mdv2011/ksh.pdf

进行了两项调整:在 siglist.sh 内部:sort +2n +0n 替换为 sort -k3n -k1n 以及在几个 c 文件内 shprintf(newline);变成 shprintf("%s", 换行符);以防止发生 -Werror=format-security 错误。

[vax-linux:root]:(~/rpmbuild/BUILD/pdksh-5.2.14)# make check
./tests/th-sh ./tests/th -s ./tests -p ./ksh -C pdksh,sh,ksh,posix,posix-upu 
pass lineno.t:lineno-stdin
pass lineno.t:lineno-inc
pass lineno.t:lineno-func
pass lineno.t:lineno-unset
pass lineno.t:lineno-unset-use
pass alias.t:alias-1
pass alias.t:alias-2
pass alias.t:alias-3
pass alias.t:alias-4
pass alias.t:alias-5
pass alias.t:alias-6
pass alias.t:alias-7
pass alias.t:alias-8
pass glob.t:glob-bad-1
pass glob.t:glob-range-1
pass glob.t:glob-range-2
pass glob.t:glob-range-3
pass glob.t:glob-range-4
pass glob.t:glob-range-5
pass eglob.t:eglob-bad-1
pass eglob.t:eglob-bad-2
pass eglob.t:eglob-infinite-plus
pass eglob.t:eglob-subst-1
pass eglob.t:eglob-nomatch-1
pass eglob.t:eglob-match-1
pass eglob.t:eglob-case-1
pass eglob.t:eglob-case-2
pass eglob.t:eglob-trim-1
pass eglob.t:eglob-trim-2
pass arith.t:arith-lazy-1
pass arith.t:arith-lazy-2
FAIL arith.t:arith-ternary-prec-1
pass arith.t:arith-ternary-prec-2
pass arith.t:arith-div-assoc-1
pass arith.t:arith-assop-assoc-1
pass history.t:history-basic
pass history.t:history-e-minus-1
pass history.t:history-e-minus-2
pass history.t:history-e-minus-3
pass history.t:history-e-minus-4
pass history.t:history-e-minus-5
pass history.t:history-list-1
pass history.t:history-list-2
pass history.t:history-list-3
pass history.t:history-list-4
pass history.t:history-list-5
pass history.t:history-list-6
pass history.t:history-list-7
pass history.t:history-list-r-1
pass history.t:history-list-r-2
pass history.t:history-list-r-3
pass history.t:history-subst-1
pass history.t:history-subst-2
pass history.t:history-subst-3
pass history.t:history-subst-4
pass history.t:history-subst-5
pass ifs.t:IFS-space-1
pass ifs.t:IFS-colon-1
pass ifs.t:IFS-null-1
pass ifs.t:IFS-space-colon-1
pass ifs.t:IFS-space-colon-2
fail ifs.t:IFS-space-colon-3 (as expected)
pass ifs.t:IFS-space-colon-4
pass ifs.t:IFS-space-colon-5
pass ifs.t:IFS-subst-1
pass brkcont.t:break-1
pass brkcont.t:break-2
pass brkcont.t:break-3
pass brkcont.t:break-4
pass brkcont.t:break-5
pass brkcont.t:continue-1
pass brkcont.t:continue-2
pass brkcont.t:continue-3
pass brkcont.t:continue-4
pass brkcont.t:continue-5
pass syntax.t:syntax-1
pass read.t:read-IFS-1
pass read.t:read-ksh-1
pass heredoc.t:heredoc-1
pass heredoc.t:heredoc-2
pass heredoc.t:heredoc-3
pass heredoc.t:heredoc-4
pass heredoc.t:heredoc-5
pass heredoc.t:heredoc-6
pass heredoc.t:heredoc-7
pass heredoc.t:heredoc-8
pass heredoc.t:heredoc-tmpfile-1
pass heredoc.t:heredoc-tmpfile-2
pass heredoc.t:heredoc-tmpfile-3
pass heredoc.t:heredoc-tmpfile-4
pass heredoc.t:heredoc-tmpfile-5
pass heredoc.t:heredoc-tmpfile-6
pass heredoc.t:heredoc-tmpfile-7
pass heredoc.t:heredoc-tmpfile-8
pass bksl-nl.t:bksl-nl-ign-1
pass bksl-nl.t:bksl-nl-ign-2
pass bksl-nl.t:bksl-nl-ign-3
pass bksl-nl.t:blsk-nl-ign-4
pass bksl-nl.t:blsk-nl-ign-5
pass bksl-nl.t:bksl-nl-1
pass bksl-nl.t:bksl-nl-2
pass bksl-nl.t:bksl-nl-3
pass bksl-nl.t:bksl-nl-4
pass bksl-nl.t:bksl-nl-5
pass bksl-nl.t:bksl-nl-6
pass bksl-nl.t:bksl-nl-7
pass bksl-nl.t:bksl-nl-8
pass bksl-nl.t:blsk-nl-9
pass bksl-nl.t:blsk-nl-10
pass bksl-nl.t:blsk-nl-ksh-1
pass bksl-nl.t:blsk-nl-ksh-2
pass regress.t:regression-1
pass regress.t:regression-2
pass regress.t:regression-6
pass regress.t:regression-9
FAIL regress.t:regression-10
pass regress.t:regression-11
pass regress.t:regression-12
pass regress.t:regression-13
pass regress.t:regression-14
pass regress.t:regression-15
pass regress.t:regression-16
pass regress.t:regression-17
pass regress.t:regression-19
pass regress.t:regression-21
pass regress.t:regression-22
pass regress.t:regression-23
pass regress.t:regression-25
pass regress.t:regression-26
pass regress.t:regression-27
pass regress.t:regression-28
pass regress.t:regression-29
pass regress.t:regression-30
pass regress.t:regression-31
pass regress.t:regression-32
pass regress.t:regression-33
pass regress.t:regression-35
pass regress.t:regression-36
pass regress.t:regression-37
pass regress.t:regression-38
fail regress.t:regression-39 (as expected)
pass regress.t:regression-40
pass regress.t:regression-41
pass regress.t:regression-42
pass regress.t:regression-43
pass regress.t:regression-44
pass regress.t:regression-45
pass regress.t:regression-46
pass regress.t:regression-47
pass regress.t:regression-48
pass regress.t:regression-49
pass regress.t:regression-50
pass regress.t:regression-51
pass regress.t:regression-52
pass regress.t:regression-53
pass regress.t:regression-54
pass regress.t:regression-55
pass regress.t:regression-56
pass regress.t:regression-57
pass regress.t:regression-58
pass regress.t:regression-59
pass regress.t:regression-60
pass regress.t:regression-61
pass regress.t:regression-62
pass version.t:version-1
pass unclass1.t:xxx-quoted-newline-1
pass unclass1.t:xxx-quoted-newline-2
pass unclass1.t:xxx-quoted-newline-3
pass unclass1.t:xxx-multi-assignment-cmd
pass unclass1.t:xxx-exec-environment-1
pass unclass1.t:xxx-what-do-you-call-this-1
pass unclass1.t:xxx-prefix-strip-1
pass unclass1.t:xxx-prefix-strip-2
pass unclass1.t:xxx-variable-syntax-1
pass unclass2.t:xxx-subsitution-eval-order
pass unclass2.t:xxx-set-option-1
pass unclass2.t:xxx-exec-1
pass unclass2.t:xxx-while-1
pass unclass2.t:xxx-status-1
FAIL unclass2.t:xxx-status-2
pass unclass2.t:xxx-clean-chars-1
fail unclass2.t:xxx-param-subst-qmark-1 (as expected)
pass unclass2.t:xxx-param-_-1
pass unclass2.t:env-prompt
FAIL integer.t:integer-base-err-1
FAIL integer.t:integer-base-err-2
FAIL integer.t:integer-base-err-3
FAIL integer.t:integer-base-err-4
pass integer.t:integer-base-1
pass integer.t:integer-base-2
pass integer.t:integer-base-3
pass integer.t:integer-base-4
pass integer.t:integer-base-5
pass integer.t:integer-base-6
pass integer.t:integer-base-7
Total failed: 10 (7 unexpected)
Total passed: 185
[vax-linux:root]:(~/rpmbuild/BUILD/pdksh-5.2.14)# 

mandriva 2011 上的 pdksh v5.2.14

相关内容