[INS-35180] Unable to check for available memory
2024-09-23 09:56 潇湘隐者 阅读(126) 评论(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 文件可能包含的内容:
执行脚本:可以调用其他脚本或程序,以执行特定的系统初始化任务。 设置环境变量:在系统启动时设置环境变量。 挂载文件系统:在系统启动时挂载特定的文件系统。 启动服务:启动一些需要在系统启动时自动运行的服务。 配置网络:设置网络接口或执行网络相关的配置。
/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