代码改变世界

[INS-35180] Unable to check for available memory

2024-09-23 09:56  潇湘隐者  阅读(82)  评论(0编辑  收藏  举报

Linux平台安装Oracle 19c的时候遇到了下面错误“[INS-35180] Unable to check for available memory”,如图所示:

具体的错误信息如下所示:

Additional Information:
Exception details  - PRVG-1901 : failed to setup CVU remote execution framework directory "/tmp/InstallActions2024-09-20_09-18-46AM/CVU_19.0.0.0.0_oracle/" on nodes "orapreftest"
Please select a different work area for the framework
orapreftest : /bin/sh: /tmp/InstallActions2024-09-20_09-18-46AM/CVU_19.0.0.0.0_oracle//exectask.sh: Permission denied
orapreftest : /bin/sh: /tmp/InstallActions2024-09-20_09-18-46AM/CVU_19.0.0.0.0_oracle//exectask.sh: Permission denied

Version of exectask could not be retrieved from node "orapreftest"

其实遇到这个错误的原因有多种,当前这个案例中,明显是因为没有/tmp目录下相关脚本的执行权限。排查下来,发现是因为安全规范设置,系统管理员在rc.local中对/tmp目录进行了限制,如下所示:

# cat /etc/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

touch /var/lock/subsys/local

mount -o remount,nodev,nosuid,noexec /tmp
mount -o remount,nodev,nosuid,noexec /var
mount -o remount,nodev /home
mount -o remount,nodev,nosuid,noexec /dev/shm


su  oracle -lc "/opt/oracle19c/product/19.3.0/db_1/bin/lsnrctl start"
su  oracle -lc  /opt/oracle19c/product/19.3.0/db_1/bin/dbstart
bash /home/oracle/dba_scripts/db_auto_start.sh 2>>&1 /home/oracle/dba_scripts/logs/db_auto_start.log

在分析介绍具体的命令前,我们先了解一下rc.local文件,其实/etc/rc.local是一个在Linux系统中用于在系统启动时执行特定脚本或命令的文件。这个文件通常在系统启动的早期阶段被执行,它允许管理员定义一些在系统启动过程中需要自动执行的任务。 以下是一些 /etc/rc.local 文件可能包含的内容:

  1. 执行脚本:可以调用其他脚本或程序,以执行特定的系统初始化任务。
  2. 设置环境变量:在系统启动时设置环境变量。
  3. 挂载文件系统:在系统启动时挂载特定的文件系统。
  4. 启动服务:启动一些需要在系统启动时自动运行的服务。
  5. 配置网络:设置网络接口或执行网络相关的配置。

/etc/rc.local 文件通常在系统启动时由 /etc/rc.d 目录下的脚本调用。需要注意的是,随着系统管理工具和系统初始化方式的演进,/etc/rc.local的使用已经变得越来越少。在一些现代的 Linux 发行版中,/etc/rc.local 可能不再被默认使用,因为系统可能采用了更先进的启动管理系统,如 systemd。

mount -o remount,nodev,nosuid,noexec /tmp 这个命令的具体作用为:

  • mount:这是用于挂载文件系统的命令。
  • -o remount:这个选项告诉mount命令不要卸载已经挂载的文件系统,而是重新挂载它,并应用新的挂载选项。
  • nodev:这个选项防止在/tmp目录下创建设备文件。这有助于防止恶意用户或程序通过设备文件访问系统资源。
  • nosuid:这个选项防止/tmp目录下的文件被赋予SUID(Set User ID)或SGID(Set Group ID)权限。SUID和SGID权限允许用户以文件所有者的身份执行文件,这可能会带来安全风险。
  • noexec:这个选项防止在/tmp目录下执行任何二进制可执行文件。这有助于防止恶意软件通过/tmp目录执行。
  • /tmp:这是要重新挂载的目录的路径。

正是这个条命令,导致Oracle 19c在安装过程中,执行tmp目录下面的shell脚本受限从而导致安装失败报错,如上所示。我们只需运行下面命令重新挂载一下/tmp目录,让其有执行权限即可。

# mount -o remount /tmp

安装完成后,在执行下面命令,让其满足符合安全规范

mount -o remount,nodev,nosuid,noexec /tmp