产品服务AMH 免费服务器主机面板SSL证书 免费SSL证书申请 担保单 免费安全、零费率交易平台编程助手免费智能写代码、翻译AMYSQL 免费MySQL管理工具

AMH 社区首页

 AMH社区 - 开放自由有价值的社区

[求助帖] 关于AMH5.0系统版本机制检测的反馈

jump
金牌会员
5521.00 价值分

jump 发表于 2014-09-13 17:33:54
AMH5.0系统版本检测主要在2个地方:

amh.sh文件:
egrep -i "debian" /etc/issue /proc/version >/dev/null && SysName='Debian';
egrep -i "ubuntu" /etc/issue /proc/version >/dev/null && SysName='Ubuntu';
whereis -b yum | grep '/yum' >/dev/null && SysName='CentOS';
egrep -i "red hat|redhat" /etc/issue /proc/version >/dev/null && SysName='RedHat';
egrep -i "centos" /etc/issue /proc/version >/dev/null && SysName='CentOS';
[ "$SysName" == '' ] && echo '[Error] Your system is not supported install AMH' && exit;
amh-base文件:
function amh_is_redhat()
{
# egrep -i "centos" /etc/issue || egrep -i "red hat|redhat" /proc/version;
whereis -b yum | grep '/yum' >/dev/null;
return $?;
}
检测系统版本主要读取了/etc/issue和/proc/version文件,正常情况是没有问题的。但对于vps来说,采取不同虚拟化手段可能存在错误判断的可能
/etc/issue读取的是本地文件信息,一般能准确判断系统版本
/proc/version读取的是内存信息,是内核加载时创建的,读取的是内核系统的版本。正常内核版本和系统版本一致,但在vps中,全虚拟化(如KVM)可以虚拟整个内核,读取信息与本地一致;而半虚拟化(如OpenVZ),不能虚拟内核,读取的就是母鸡的内核信息了。
比如在OpenVZ下的测试:
Centos 7 x86_64

[root /]# cat /proc/version
Linux version 2.6.32-042stab090.5 (root@kbuild-rh6-x64) (gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) ) #1 SMP Sat Jun 21 00:15:09 MSK 2014
Exit code: 0
[root /]# cat /etc/issue
\S
Kernel \r on an \m
Exit code: 0
[root /]#


Fedora 20 x86_64

[root /]# cat /etc/issue
Fedora release 20 (Heisenbug)
Kernel \r on an \m (\l)
Exit code: 0
[root /]# cat /proc/version
Linux version 2.6.32-042stab090.5 (root@kbuild-rh6-x64) (gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) ) #1 SMP Sat Jun 21 00:15:09 MSK 2014
Exit code: 0
[root /]#


Ubuntu 14.04 x86

[root /]# cat /etc/issue
Ubuntu 14.04 LTS \n \l
Exit code: 0
[root /]# cat /proc/version
Linux version 2.6.32-042stab090.5 (root@kbuild-rh6-x64) (gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) ) #1 SMP Sat Jun 21 00:15:09 MSK 2014
Exit code: 0
[root /]#
[root /]# uname -a
Linux tiNy 2.6.32-042stab090.5 #1 SMP Sat Jun 21 00:15:09 MSK 2014 i686 i686 i686 GNU/Linux
Exit code: 0


debian 6 x86

[root /]# cat /etc/issue
Debian GNU/Linux 6.0 \n \l
Exit code: 0
[root /]# uname -a
Linux tiNy 2.6.32-042stab090.5 #1 SMP Sat Jun 21 00:15:09 MSK 2014 i686 GNU/Linux
Exit code: 0
[root /]# cat /proc/version
Linux version 2.6.32-042stab090.5 (root@kbuild-rh6-x64) (gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) ) #1 SMP Sat Jun 21 00:15:09 MSK 2014
Exit code: 0
[root /]#
母鸡内核是Red Hat,在centos下不影响安装,但在debian和ubuntu下,amh.sh文件就会判断为redhat而使用yum命令,导致安装失败。而对于OpenVZ的vps,很多主机厂商母鸡都是用的Red Hat系统,于是就会存在系统版本误判问题了。

建议检测系统版本时优先读取/etc/issue信息,比如:
function amh_is_redhat()
{
egrep -i "centos" /etc/issue || ( (egrep -i "red hat|redhat" /proc/version) && !(egrep -i "debian" /etc/issue) && !(egrep -i "ubuntu" /etc/issue));
return $?;
}
或者直接判断yum或者apt-get是否存在来区分安装方式

另外,在debian最小系统上测试安装时,也发现一些包没有预先安装而导致安装失败iptables
ip -> iproute
cmake
free -> procps


希望 @amysql 能改善安装兼容性。对于AMH 5.0的模块灵活性还是十分喜欢的,AMH 5.0确实蕴含着无数可能。
2014-09-13 17:33:54 1

x2012qq
银牌会员
2200.74 价值分

这个可以有 !
  支持 (0分)  反对 (0分)
回复  2014-09-13 19:06:32 2

amysql
创始人
99530.81 价值分

谢谢楼主反馈。
amh_is_redhat的判断是现在是没什么问题。
主要是amh.sh的判断上。

楼主可以把这两行
egrep -i "red hat|redhat" /etc/issue /proc/version >/dev/null && SysName='RedHat';
egrep -i "centos" /etc/issue /proc/version >/dev/null && SysName='CentOS';
删除应该就可以安装了。

  支持 (0分)  反对 (0分)
回复  2014-09-13 23:05:55 3

AMH面板 - 好用高效低占用、安全可靠极稳定

 1  (总1页)
AMH社区列表
用户服务中心