Last active
December 14, 2015 12:39
-
-
Save ChinaXing/5087854 to your computer and use it in GitHub Desktop.
yum install package-lists, return the result.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/env bash | |
# ----------------------------------------------------------------------------------------- | |
# Function : install rpm package by yum tool | |
# | |
# Date : 2013-04-24 | |
# 2013-05-07, 去掉日志输出,只输出结果,输出结果进行调整 | |
# 2013-06-08, 添加选项化参数,增加appname 这一参数 | |
# 2014-03-06, 如果appname目录没有则创建 | |
# 2014-03-12, 增加t-admin-noweb-tomcat, t-admin-deploy-withnginx 分为tomcat和jboss | |
# | |
# Author : yunxing.cyx@taobao.com | |
# | |
# Input : [ -a 'APPNAME' ] -p 'pkg1' -p 'pkg2' -p 'pkg3 -b current' -p pkg4 ... | |
# | |
# the pkgs want to install as a list splitable by blank charactor. | |
# you can specify the branch as : 'pkg3 -b current', single quote is needed. | |
# | |
# Output : the Output will be output to STDOUT, you may need redirect it. | |
# [SUCCEED:num: ... ][FAILURE:num: ... ] | |
# | |
# The Execute-Result is in such format : [RESULT] [SUCCEED:succed_num][FAILURE:failure_num:failure_pkg_list] | |
# you can parse it and find what you want | |
# | |
# Log : Normal Level Log will be print to STDOUT, Error Level Log will be print to both STDOUT and STDERR. | |
# Log has prefix "[LEVEL]", such as "[INFO]", "[ERROR]". | |
# | |
# The yum command's log will print to : | |
# $YUM_INSTALL_LOG.${PKG_NAME} for STDOUT log and | |
# $YUM_INSTALL_LOG.${PKG_NAME}.err for STDERR log | |
# by default, YUM_INSTALL_LOG equal to "/tmp/yum_install_log" | |
# | |
# one log file per package, which easy to be found. | |
# ----------------------------------------------------------------------------------------- | |
YUM_INSTALL_LOG="/tmp/yum_install_log" | |
# 更改/home/admin/appname 目录 | |
function do_mv_appname | |
{ | |
[ -n $APPNAME ] || return | |
[ $# -gt 0 ] || return | |
local PKG_MV_APPNAME="t-admin-deploy-noweb-tomcat7 t-admin-deploy-withnginx-tomcat7 t-admin-deploy-withnginx t-admin-deploy-withnginx-tomcat t-admin-deploy-withnginx-jboss t-admin-deploy-withapache t-admin-deploy-noweb t-admin-deploy-noweb-tomcat" | |
local JBOSSCTL="/home/admin/appname/bin/jbossctl" | |
for p in $PKG_MV_APPNAME | |
do | |
if [ $(echo "$1" | grep -E -c "^$p( |\$|-[0-9])" 2>/dev/null) -ne 0 ] | |
then | |
[ -d /home/admin/appname ] || break | |
# 替换 jbossctl 中的 project name 为 应用名 | |
[ -f $JBOSSCTL ] && sed -i '/^PROJECT_NAME=/s/^.*$/PROJECT_NAME="'$APPNAME'"/' $JBOSSCTL | |
[ -e /home/admin/$APPNAME ] && mv /home/admin/$APPNAME{,.old} | |
[ -e /home/admin/$APPNAME ] || mv /home/admin/{appname,$APPNAME} | |
break | |
fi | |
done | |
} | |
# 更改appname 目录,修改jbossctl配置 | |
function do_apply_appname | |
{ | |
[ -n $APPNAME ] || return | |
local JBOSSCTL="/home/admin/$APPNAME/bin/jbossctl" | |
[ -e /home/admin/$APPNAME ] && mv /home/admin/$APPNAME{,.old} | |
[ -d /home/admin/appname ] || mkdir -p /home/admin/appname && chown admin.admin /home/admin/appname | |
[ -e /home/admin/$APPNAME ] || mv /home/admin/{appname,$APPNAME} | |
[ -f $JBOSSCTL ] && sed -i '/^PROJECT_NAME=/s/^.*$/PROJECT_NAME="'$APPNAME'"/' $JBOSSCTL | |
} | |
# 安装完一个包后要做的事情 | |
function do_after_install | |
{ | |
do_mv_appname "$@" | |
} | |
# 安装完所有包后执行 | |
function do_after_install_all | |
{ | |
do_apply_appname | |
} | |
function rebuild_rpmdb | |
{ | |
# 先执行下面的命令,重建立rpm数据库,避免数据库破坏导致yum install的时候卡住 | |
# echo "[INFO] Yum : rebuild rpm db" | |
rm -rf /var/lib/rpm/__db* &>/dev/null | |
rpm --rebuilddb &>/dev/null | |
} | |
# ---- Main ---- # | |
rebuild_rpmdb | |
#echo "[INFO] Yum : begin to install package : $@" | |
Failure_PKG="" | |
Success_PKG="" | |
# | |
Failure=0 | |
Success=0 | |
# all PAKCAGES | |
declare -a PKGS | |
idx=0 | |
while getopts "a:p:" opt;do | |
case $opt in | |
a) APPNAME=$OPTARG | |
;; | |
p) PKGS[$((idx++))]=$OPTARG | |
;; | |
esac | |
done | |
# | |
cat <<EOF > ${YUM_INSTALL_LOG} | |
:ALL PACKAGES ( total $idx): | |
$(IFS=$'\n'; echo "${PKGS[*]}") | |
EOF | |
for i in "${PKGS[@]}" | |
do | |
echo "[INFO] Yum : Install => $i" >> ${YUM_INSTALL_LOG} | |
PKG_NAME=${i%% *} | |
yum install -y $i >${YUM_INSTALL_LOG}.$PKG_NAME 2>${YUM_INSTALL_LOG}.${PKG_NAME}.error | |
retval=$? | |
if [ $retval -ne 0 ] | |
then | |
Failure_PKG="$Failure_PKG '$i'" | |
((Failure++)) | |
else | |
if [ "x$(rpm -q $PKG_NAME)" = "x" ] | |
then | |
Failure_PKG="$Failure_PKG '$i'" | |
((Failure++)) | |
else | |
((Success++)) | |
Success_PKG="$Success_PKG '$i'" | |
do_after_install "$PKG_NAME" | |
fi | |
fi | |
done >/dev/null 2>/dev/null </dev/null | |
# after install # | |
#do_after_install_all &>/dev/null | |
echo [SUCCEED:$Success:$Success_PKG][FAILURE:$Failure:$Failure_PKG] | |
exit 0 | |
# --- END --- # |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment