utils/deb_build_remote.sh

来源:互联网 发布:网络修复大师 编辑:程序博客网 时间:2024/05/22 15:13
#!/bin/bash#得到当前目录CUR_DIR=$(cd `dirname $0`; pwd)#通过.执行脚本. ${CUR_DIR}/function_cmd_scp.sh#参数赋值packages=IP="192.168.1.180"loginuser="estuaryrepo"#这里用``将命令执行的结果保存在loginpassword 中,也可以用$loginpassword=`cat ~/PASSWORD_WORKER`giturl="https://github.com/open-estuary/distro-repo.git"reponame="distro-repo"#定义函数usage(){        echo "Usage: deb_build_remote.sh -k "packages" [-m remoteip] [-u login_user] [-p login_password]"}# 这个指教本质的时候,会有k,m,u,p,h 这几个参数,分别parse这几个形参代表的值while getopts "k:m:p:u:h" OPTIONSdo        case $OPTIONS in                k) packages="$OPTARG";;                m) IP="$OPTARG";;                u) loginuser="$OPTARG";;                p) loginpassword="$OPTARG";;                h) usage;exit 1;;                \?) echo "ERROR - Invalid Parameter"; echo "ERROR - Invalid parameter" >&2; usage; exit 1;;                *) echo "ERROR - Invalid Parameter"; echo "ERROR - Invalid parameter" >&2; usage; exit 1;;        esacdone#如果package 为null,则调用usage  函数,并通过exit 1 退出,1表示执行失败if [ "x$packages" = "x" ];then        echo "Packages must not be void!"        usage        exit 1fi#在远程主机上执行git pull 或者git clone 命令sshcmd "if \[ \`ls /home/${loginuser} | grep "$reponame"\` \];then  cd /home/${loginuser}/$reponame;git pull;cd -;else cd /home/${loginuser};git clone ${giturl};cd -;fi"#package等于all的话,远程执行脚本if [ "${packages}" = "all" ];then        sshcmd "sh /home/${loginuser}/${reponame}/deb/deb_build_all.sh"        exitfi#for循环遍历执行个个package下的deb_build.sh 这个脚本for package in $packagesdo        sshcmd "sh /home/${loginuser}/${reponame}/deb/$package/deb_build.sh"done#通过echo 输出日志.echo "Build have done, please check!"utils/deb_resign.sh#!/bin/bash#返回到用户的根目录cd ~export DEBEMAIL=sjtuhjh@hotmail.comexport DEBFULLNAME=Open-Estuary#安装包apt-get updateapt-get install -y dpkg-sigapt-get install -y expect#在文件中追加字符串echo "DEBSIGN_KEYID=3108CDA4" >> /etc/devscripts.conf#通过$将执行的结果保存在passphrasepassphrase=$(cat /root/KEY_PASSPHRASE)#导入加密的keygpg --import /root/ESTUARY-GPG-SECURE-KEY#获得第一个形参SRC_DIR=${1}#对目标目录下的每一个deb文件执行dpkg-sig的命令,这个命令执行的时候需要用于输入key,这里采用在for循环中嵌入expectfor deb_file in ${SRC_DIR}/*.debdoexpect <<-END        set timeout -1        spawn dpkg-sig --sign builder ${deb_file}        expect {                "Enter passphrase:" {send "${passphrase}\r"}                timeout {send_user "Enter pass phrase timeout\n"}        }        expect eofEND    done