iredmail下安装脚本分析(一)---get_all.sh 文件所在目录为PKGS

iredmail是一套以postfix为核心的整合邮件系统的安装脚本,可以达到快速部署邮件服务器的目的。

经过上面的一系列分析后,进入到获取安装包的步骤,作者在此处单独写了一个脚本,get_all.sh,我们继续分析这个脚本

_ROOTDIR="$(pwd)"
CONF_DIR="${_ROOTDIR}/../conf"

. ${CONF_DIR}/global
. ${CONF_DIR}/core
. ${CONF_DIR}/iredadmin

程序的意思是利用pwd获取当前目录,并定义为_ROOTDIR, 接着根据_ROOTDIR,获得CONF目录的具体位置。从而引入global, core ireadmin

iredadmin 文件里定义了一系列的关于版本和关于iredadmin的变量,估计在后面下载文件时可能会用到,如图

接着分析。。。。

check_user root
check_hostname
check_runtime_dir

根据我的经验,显然check_user  check_hostname check_runtime_dir 都是SHELL的函数,我们来一一分析

check_user  定义在conf/core文件中,具体的代码如下:

check_user()
{
 # Check special user privilege to execute this script.
 if [ X"$(id -u)" != X"$(id -u ${1})" ]; then
  ECHO_ERROR "Please run this script as user: ${1}."
  exit 255
 else
  if [ X"$(id -u)" == X"0" ]; then
   export PATH="/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"
  else
   :
  fi
 fi
}

id  -u    显然是获得登录用户的ID,在调用函数时,check_user  root ,显然是根据返回结果判断是否为root,如果不是root,就返回错误。

exit   255   关于这个,大家参考这篇文章,http://www.jb51.net/article/73377.htm

else之后的判断不知道是否有点多余,不过作者可能是为了保险,再次判断是否登录用户的ID为0,从而设置PATH的值

$PATH:决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,当您运行一个程序时,Linux在这些目录下进行搜寻编译链接。

目前设置的这个值里,比正常的多了/root/bin/,不知道这步在后面的程序中是否起着什么作用,暂时看不出来。

接着。。。

check_hostname 是分析服务器主机名是否符合规则的,代码如下:

check_hostname()
{
 echo ${HOSTNAME} | grep '\.' &>/dev/null
 [ X"$?" != X"0" ] && \
  ECHO_ERROR "Please configure a fully qualified domain name (FQDN) in /etc/hosts before we go further.\n\nExample:\n\n127.0.0.1 mail.iredmail.org mail localhost\n" && \
  exit 255
}

程序的意思是利用${HOSTNAME}获得主机名,如果主机名里没.  就判断主机名为不合理的,接着给出了例子,接着退出程序。

shell的函数都是比较简单的,接着分析check_runtime_dir,代码如下:

check_runtime_dir() {
 [ -d ${RUNTIME_DIR} ] || mkdir -p ${RUNTIME_DIR}

 # Cleanup
 rm -f ${RUNTIME_DIR}/.pkg_install_failed &>/dev/null
}

-d  判断目录是否存在

mkdir –p    建立目录

此处应该是先做判断,目录存在清理失败文件,不存在建立目录

三个分别检查用户,主机名,状态目录是否存在的函数执行完毕后,说明安装条件适合,接下来的代码定义了下载安装包的地址:

export IREDMAIL_MIRROR="${IREDMAIL_MIRROR:=http://iredmail.org}"
export PKG_DIR="${_ROOTDIR}/pkgs"
export PKG_MISC_DIR="${_ROOTDIR}/misc"
http://iredmail.org  这是作者的官方主页,也是下载安装包的地址 。因为该脚本对多个主流的LINUX都做支持,所以下面这段代码是针对多系统进行分析判断的,看代码

if [ X"${DISTRO}" == X"RHEL" ]; then
 # Special package.
 # command: which.
 export BIN_WHICH='which'
 export PKG_WHICH='which'
 # command: wget.
 export BIN_WGET='wget'
 export PKG_WGET='wget'
elif [ X"${DISTRO}" == X"DEBIAN" -o X"${DISTRO}" == X"UBUNTU" ]; then
 if [ X"${OS_ARCH}" == X"x86_64" ]; then
  export pkg_arch='amd64'
 else
  export pkg_arch="${OS_ARCH}"
 fi
 # Special package.
 # command: which.
 export BIN_WHICH='which'
 export PKG_WHICH="debianutils"
 # command: wget.
 export BIN_WGET='wget'
 export PKG_WGET="wget"
 # command: dpkg-scanpackages.
 export BIN_CREATEREPO="dpkg-scanpackages"
 export PKG_CREATEREPO="dpkg-dev"
fi

以上内容就是本文关于iredmail下安装脚本分析(一)---get_all.sh 文件所在目录为PKGS的全部叙述,希望大家喜欢。

(0)

相关推荐

  • iredmail下安装脚本分析(一)---get_all.sh 文件所在目录为PKGS

    iredmail是一套以postfix为核心的整合邮件系统的安装脚本,可以达到快速部署邮件服务器的目的. 经过上面的一系列分析后,进入到获取安装包的步骤,作者在此处单独写了一个脚本,get_all.sh,我们继续分析这个脚本 _ROOTDIR="$(pwd)" CONF_DIR="${_ROOTDIR}/../conf" . ${CONF_DIR}/global . ${CONF_DIR}/core . ${CONF_DIR}/iredadmin 程序的意思是利用p

  • JavaScript获取当前运行脚本文件所在目录的方法

    本文实例讲述了JavaScript获取当前运行脚本文件所在目录的方法.分享给大家供大家参考,具体如下: DirectoryUtility = { // function getCurrentDirectory: returns currentDirectory path // with a trailing backslash. getCurrentDirectory : function ( ) { var scriptFullName = WScript.ScriptFullName; va

  • Windows下安装python2和python3多版本教程

    现在大家常用的桌面操作系统有:Windows.Mac OS.ubuntu,其中Mac OS 和 ubuntu上都会自带python.这里我们只介绍下Windows(我用的Win10)环境下的python2.x 和 python3.x 的安装,以及python2.x 与 python3.x 共存时的配置问题. 一.python下载: 下载地址:www.python.org 这是我下载的当前python 2.x 和 python 3.x 最新版本的安装包 二.安装python 2.x 双击 pyth

  • FreeBSD5.4Release下安装wiki的方法

    今天利用早上一段时间,完成了mediawiki服务的安装,使用的版本为mediawiki-1.5.2,安装步骤: 1.下载以下所需软件 php-4.3.9.tar.gz apache_1.3.33.tar.gzmysql-4.0.21.tar.gzmediawiki-1.5.2.tar.gz 将下载的软件通过ftp拷贝到服务器上(/home/funpower) 2.安装apache和php # cd /home/funpower# tar zxvf apache_1.3.33.tar.gz# t

  • easyswoole一键安装脚本及宝塔安装错误问题

    常见问题 在新接触easyswoole的phper中,经常遇到以下几个问题 安装步骤多 麻烦 宝塔等集成环境下容易出错 自己会安装,但是懒 有没有一键的? 开始创造 本人作为easyswoole开发组组员之一.为生态的完善和偷懒着想,在某一天讨论中就开始有了这个想法. 并且写下了这个小脚本 需要注意的是,这只是几句很简单的命令,并且在文档中都有出现.只是文档有比较多的场景描述,可能导致有些新人没有细心观看到. 在宝塔面板中,如果按照easyswoole文档第一步骤进行安装的话,是会产生错误的,在

  • linux下安装easy_install的方法

    如果想使用easy_install工具,可能需要先安装setuptools,不过更酷的方法是使用ez_setup.py脚本: 复制代码 代码如下: wget -q http://peak.telecommunity.com/dist/ez_setup.pypython ez_setup.py 安装完后,最好确保easy_install所在目录已经被加到PATH环境变量里: 复制代码 代码如下: Windows: C:\Python25\ScriptsLinux: /usr/local/bin 比

  • Python2.7下安装Scrapy框架步骤教程

    由于毕业设计的要求,需要在网站上抓取大量的数据,那么使用Scrapy框架可以让这一过程变得简单不少,毕竟Scrapy是一个为了爬去网站数据.提取结构性数据而编写的应用框架.于是,便开始了我的安装Scrapy框架之旅.可以说这个过程并不是很愉快,各种错误各种出,不过到最后,终于安装上了Scrapy框架.下面总结一下我的Scrapy框架的安装. 1.安装python2.7 由于Scrapy不支持Python3.0,于是我卸载了Python3.0,又重新安装了Python2.7(python2.7安装

  • Linux系统下如何运行.sh文件的实现

    在Linux系统下运行.sh文件有两种方法,比如我在root目录下有个datelog.sh文件 第一种(这种办法需要用chmod使得文件具备执行条件(x): chmod u+x datelog.sh): 1.在任何路径下,输入该文件的绝对路径/root/datelog.sh就可执行该文件(当然要在权限允许情况下) 2.cd到datelog.sh文件的目录下,然后执行./datelog.sh 第二种(这种办法不需要文件具备可执行的权限也可运行): 1.在该文件路径下sh加上文件名字即可,sh da

  • Centos7下安装和配置MySQL5.7.20的详细教程

    1.在官网下载MySQL5.7安装包:mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz. 下载地址:https://dev.mysql.com/downloads/mysql/ 2.通过SSH Secure Shell Client远程访问CentOS7 3.卸载系统自带的Mariadb数据库 4.创建mysql用户组和mysql用户 5.将MySQL安装包上传到CentOS7服务器/root目录下并解压(这里我是用filezilla去登陆远程服务然后把安装包

  • Python获取脚本所在目录的正确方法

    1.以前的方法 如果是要获得程序运行的当前目录所在位置,那么可以使用os模块的os.getcwd()函数. 如果是要获得当前执行的脚本的所在目录位置,那么需要使用sys模块的sys.path[0]变量或者sys.argv[0]来获得.实际上sys.path是Python会去寻找模块的搜索路径列表,sys.path[0]和sys.argv[0]是一回事因为Python会自动把sys.argv[0]加入sys.path. 具体来说,如果你在C:\test目录下执行python getpath\get

随机推荐