工作中需要经常安装EPICS base(下载地址:EPICS Base Downloads), 返回安装是一个重复劳动的过程。以下脚本是实现了EPICS base自动安装 ,适用基于Redhat的Linux发行版,因为这个脚本使用了yum在线安装命令来安装base所需的readline-devel软件包。
此脚本使用方法:执行用户必须是root,先对这个脚本赋予执行权限,然后像如下执行:
./install_epics.sh base.xxxx.tar.gz # 此处xxx是base的版本号
这个脚本在CentOS7上测试成功,完成了base安装和环境变量的配置。
#!/bin/bash
# script name: install_epics.sh
# Writen by YLG
# Date: 20220922
# install the EPICS base into /usr/local/EPICS
# Usage: ./install_epics.sh base.xxxx.tar.gz
INSTALL_LOCATION=/usr/local/EPICS
if [[ ${UID} -ne "0" ]];then
echo "You are not root, you cannot run this script!"
exit 1
fi
if [ "$#" -ne "1" ];then
echo "Usage: install_epics.sh filename!"
exit 1
else
FILENAME="$1"
fi
echo "You will install epics base: ${FILENAME}"
if [[ -d "${INSTALL_LOCATION}" ]];then
echo "${INSTALL_LOCATION} already exists"
else
mkdir "${INSTALL_LOCATION}"
if [[ $? -eq "0" ]];then
echo "Create ${INSTALL_LOCATION} successfully"
else
echo "Failed to create ${INSTALL_LOCATION} !"
exit 1
fi
fi
if [[ -f "${FILENAME}" ]];then
if [[ "$FILENAME" =~ ^base && "$FILENAME" =~ tar\.gz$ ]];then
echo "extract files from ${FILENAME} to ${INSTALL_LOCATION}"
tar -xvzf ${FILENAME} -C ${INSTALL_LOCATION}
if [[ "$?" -eq 0 ]];then
echo "extract files successfully!"
else
echo "failed to extract files"
exit 1
fi
else
echo "The base file format error!"
exit 1
fi
else
echo "The file you pass to the command not exists or it is not ordinary file!"
fi
DIRNAME=${FILENAME%.tar.gz}
cd "${INSTALL_LOCATION}"
rm -rf base
ln -s ${DIRNAME} base
EPICSENVFILE=/etc/profile.d/epics.sh
if [[ -f "$EPICSENVFILE" ]];then
echo "EPICS ENV File exists"
else
echo "Create a file epics.sh in /etc/profile.d:"
cat >> "${EPICSENVFILE}" <<$
export EPICS_BASE=/usr/local/EPICS/base
export EPICS_HOST_ARCH=\`\$EPICS_BASE/startup/EpicsHostArch\`
export PATH=\${PATH}:\${EPICS_BASE}/bin/\${EPICS_HOST_ARCH}
export LD_LIBRARY_PATH=\${LD_LIBRARY_PATH}:\${EPICS_BASE}/lib/\${EPICS_HOST_ARCH}
export EPICS_CA_AUTO_ADDR_LIST=NO
export EPICS_CA_ADDR_LIST=localhost
$
fi
source "$EPICSENVPATH"
yum install -y readline-devel
if [[ "$?" -ne 0 ]];then
echo "failed to install readline-devel package!"
exit 1
fi
cd base
make
if [[ "$?" -eq 0 ]];then
echo "Install base in /usr/local/EPICS successfully!"
else
echo "failed to install base!"
fi
注意:如果需要对批量主机安装base软件包,可以使用Ansible进行编写playbook把此脚本和base软件包下载到远程主机上进行批量安装。