我第一次来这里,我是个新人,我很抱歉我的英语很差我的错误:)
我需要使用perl(或bash)编写一个安装脚本,但我一直在寻找一种方法让它在不同的Linux发行版中运行。特别是,如果尚未安装httpd和mysql,则应安装此脚本。我可以使用很多if-else,但我想知道是否存在任何可以为我做的自动化系统,即使我找不到任何东西。例如:
伪代码
//find httpd if is installed, if not it will try to install
try(service httpd status) ..
else try (service apache2 status)
if (not_installed) {
try yum install httpd
else try apt-get install apache2
else try pacman ....
}
我在想类似于autotools的东西..它存在吗?
谢谢,再见所有人:)
答案 0 :(得分:0)
您可以使用chkconfig --list查找已安装的服务。
可以这样做:
#!/bin/bash
chkmysql=`chkconfig --list | grep mysql | wc -l`
chkhttp=`chkconfig --list | grep http | wc -l`
if [[ chkmysql > 0 ]]
then
echo "mysql is installed"
else
echo "mysql is not installed"
#write code to install mysql
fi
if [[ chkhttp > 0 ]]
then
echo "http is installed"
else
echo "http is not installed"
#write code to install httpd service
fi
答案 1 :(得分:0)
`$ ^ O``变量将报告您所使用的操作系统,请参阅文档perlports platform部分了解其工作原理
perl还有一个Config模块,它包含perl编译时所有的信息 - 使用类似于autotools的方法
Config手册页中的示例程序显示了可用的信息
use Config;
if ($Config{usethreads}) {
print "has thread support\n"
}
use Config qw(myconfig config_sh config_vars config_re);
print myconfig();
print config_sh();
config_vars(qw(osname archname));
顺便说一句,puppet非常擅长在不同平台上安装软件包以及不同的配置路径。虽然它使用红宝石,但可能不适合您的工具链的其余部分
答案 2 :(得分:0)
由于您没有运行一次性安装,我假设您处于某种系统管理员角色。你看过linux kickstarts吗? kickstart允许您以您想要的方式获得系统,然后将其映像以便稍后进行远程安装。这样,如果系统出现故障,可以通过最少的外部依赖性快速恢复。设置系统的自我修复方法的问题是它可能会导致更多问题,然后当它无法正常工作时解决。 $ 0.02
答案 3 :(得分:0)
您可以使用bash builtin'type'来确定是否安装了给定的程序;或者具有相同名称的函数/别名。
if ! type PROGRAM >& /dev/null; then...
您可以解析/ etc / issue的内容以获取操作系统的名称。
if grep 'Arch Linux' /etc/issue >& /dev/null; then...