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

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的全部叙述,希望大家喜欢。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索iredmail安装
iredmail
iredmail、iredmail安装和配置、iredmail收不到邮件、iredmail foxmail、iredmail下载,以便于您获取更多的相关知识。

时间: 2024-09-20 14:33:27

iredmail下安装脚本分析(一)---get_all.sh 文件所在目录为PKGS_linux shell的相关文章

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

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

Shell脚本实现分析apache日志中ip所在的地区_linux shell

查询ip地址所用的组件 复制代码 代码如下: wget http://rfyiamcool.googlecode.com/files/nali-0.1.tar.gz  tar zxvf nali-0.1.tar.gz  cd nali-0.1  ./configure && make && make install  步骤和nginx是差不多的,只是取日志里面的ip地址的方法不一样~~~ 复制代码 代码如下: #!/bin/bash  #rfyiamcool  IPSUMF

《智能路由器开发指南》——2.2 编译脚本分析

2.2 编译脚本分析 2.2.1 顶层目录概述 OpenWrt代码有8个固定的顶层目录及6个编译时创建的临时目录,顶层的固定目录含义如表2-3所示. 目录config是编译配置文件目录,是OpenWrt 15.05的新增目录,是将一些编译选项配置文件分类放在这里,包含全局编译设置.开发人员编译设置.目标文件格式设置和内核编译设置等4部分. 目录include和scripts包含各种脚本和Makefile.目录target是指目标嵌入式设备,针对不同的平台有不同的特性代码.针对这些平台特性,"ta

FreeBSD5.4Release下安装wiki的方法_unix linux

今天利用早上一段时间,完成了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

解决ubuntu下安装mysql使用service 无法启动问题

今天从ubuntu 下安装mysql  代码如下 复制代码 apt-get install mysql-server 启动的时候发现 service mysql start Rather than invoking init scripts through /etc/init.d, use the service(8) utility, e.g. service mysql start   Since the script you are attempting to invoke has bee

debian下安装mysql mysql是.DEB后缀的文件包

问题描述 debian下安装mysql mysql是.DEB后缀的文件包 debian linux 操作系统下安装mysql数据库 mysql数据库的文件包是以.DEB结尾的 求安装方法 解决方案 http://www.2cto.com/database/201305/212200.html

linux下安装easy_install的方法_python

如果想使用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 比

一个比较完整的Inno Setup 安装脚本

原文:一个比较完整的Inno Setup 安装脚本 增加了对ini文件设置的功能,一个安装包常用的功能都具备了. [Setup]; 注: AppId的值为单独标识该应用程序.; 不要为其他安装程序使用相同的AppId值.; (生成新的GUID,点击 工具|在IDE中生成GUID.)AppId={{A9861883-31C5-4324-BD9A-DC3271EEB675};程序名AppName=ISsample;版本号AppVerName=ISsample 1.0.0.0;发布者名AppPubli

Ubuntu下安装codeblocks13图解教程

linux下安装codeblocks本来就是件困难的事情,因为通常情况下,需要安装的各种依赖安装不全会导致CB安装失败,然后在安装各种依赖的过程中又会产生各种冲突,报一大堆错,那就更麻烦了.网上一搜,各种安装失败的消息堆积如山. 吐槽一下,这方面,Intellij Idea就好得多,直接给了一个压缩包,解压之后执行就可以运行了,差的不是一点半点. 我在Ubuntu14.04发行版下安装最新版的codeblocks13,试验几次后总算成功了,下面上安装步骤,顺序不要错哦. 先上图一张表明确实安装好