Linux平臺安裝Oracle 19c的時候遇到了下麵錯誤“[INS-35180] Unable to check for available memory”,如圖所示: 具體的錯誤信息如下所示: Additional Information:Exception details - PRVG-190 ...
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