YUM安裝MONGODB發生Error in PREIN scriptlet in rpm package mongodb-enterprise-server-4.0.2-1.el6.x86_64錯誤
小知識1:
| 使用root權限都不能編輯某個文件,很可能是使用chattr命令鎖定該文件了。通過chattr命令修改屬性能夠提高系統的安全性,但是它並不適合所有的目錄。chattr命令不能保護/、/dev、/tmp、/var目錄。lsattr命令是顯示chattr命令設置的文件屬性。 使用lsattr file 查看是否被鎖: [root@localhost packages]# lsattr /etc/shadow ----i--------e- /etc/shadow 使用chattr -i file解鎖 [root@localhost packages]# chattr -i /etc/shadow -------------e- /etc/shadow 使用chattr -i file加鎖 [root@localhost packages]# chattr +i /etc/shadow ----i--------e- /etc/shadow |
小知識2:安裝mongodb server 4.0.2過程需要在/etc/目錄某些文件需要擁有寫入權限。
| /etc/group /etc/gshadow /etc/passwd /etc/shadow |
小知識3:centos安裝mongodb
1、Configure repository.Create an /etc/yum.repos.d/mongodb-enterprise.repo file so that you can install MongoDB enterprise directly using yum: [mongodb-enterprise] name=MongoDB Enterprise Repository baseurl=https://repo.mongodb.com/yum/redhat/$releasever/mongodb-enterprise/4.0/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc 2、Install the MongoDB Enterprise packages. Install MongoDB Enterprise 4.0. Issue the following command: sudo yum install -y mongodb-enterprise
|
錯誤日志:
| [root@localhost ~]# yum install mongodb-enterprise *省略無用日志 * Error in PREIN scriptlet in rpm package mongodb-enterprise-server-4.0.2-1.el6.x86_64 groupadd: cannot open /etc/group error: %pre(mongodb-enterprise-server-4.0.2-1.el6.x86_64) scriptlet failed, exit status 6 error: install: %pre scriptlet failed (2), skipping mongodb-enterprise-server-4.0.2-1.el6 *省略無用日志 * Failed: mongodb-enterprise-server.x86_64 0:4.0.2-1.el6 Complete! |
分析原因:
從日志中得到3點信息:
1、 執行rpm package過程出錯(前提)
2、 /etc/group無法打開(主要原因)
3、 %pre部分腳本出錯
解決步驟:
1、 使用vim/vm 編輯/etc/group文件,無法編輯有兩種情況:
a) ll查看write權限(變更權限chmod +w file)
b) lsattr查看文件加鎖(解鎖chattr -i file )。
2、 使用rpm --scripts -qp mongodb-enterprise-server-4.0.2-1.el6.x86_64.rpm查看安裝腳本(為spec文件功能)
| [root@localhost packages]# rpm --scripts -qp mongodb-enterprise-server-4.0.2-1.el6.x86_64.rpm warning: mongodb-enterprise-server-4.0.2-1.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID e52529d4: NOKEY preinstall scriptlet (using /bin/sh): if ! /usr/bin/id -g mongod &>/dev/null; then /usr/sbin/groupadd -r mongod fi if ! /usr/bin/id mongod &>/dev/null; then /usr/sbin/useradd -M -r -g mongod -d /var/lib/mongo -s /bin/false -c mongod mongod > /dev/null 2>&1 fi postinstall scriptlet (using /bin/sh): if test $1 = 1 then /sbin/chkconfig --add mongod fi preuninstall scriptlet (using /bin/sh): if test $1 = 0 then /sbin/chkconfig --del mongod fi postuninstall scriptlet (using /bin/sh): if test $1 -ge 1 then /sbin/service mongod condrestart >/dev/null 2>&1 || : fi |
紅色部分內容preinstall scriptlet 對應錯誤%pre的內容
綠色部分內容為%pre階段實際需要執行shell命令,將其逐條執行,根據提示解決錯誤。
3、 重新安裝yum reinstall mongodb-enterprise
| [root@localhost ~]# yum reinstall mongodb-enterprise **省略不需要的日志 Installed: mongodb-enterprise.x86_64 0:4.0.2-1.el6 Dependency Installed: mongodb-enterprise-server.x86_64 0:4.0.2-1.el6 Complete! |
總結:從錯誤日志分析出真正的原因,文件鎖是本次rpm執行%pre階段的真正的原因。解決問題之后,經常接着其他問題,需要重復3步驟幾次才能徹底解決。
補充:怎么在yum install獲取rpm包
在執行yum install 的過程會download相關rpm包,在install之前及時ctrl+c終止命令,然后到/var/cache/yum/x86_64/6/mongodb-enterprise/packages/(路徑可能不一致)下獲取包。
