将源代码一步打包成deb包的脚本

来源:互联网 发布:知乎ipad客户端 编辑:程序博客网 时间:2024/05/17 15:41
#!/bin/basherror_check(){    if [ $1 -ne 0 ];then        echo "$2"        exit $1    fi}copy_file(){    cp -f -a -v $1 $2    error_check $? "$1 not found"}rm_file(){    for file in $@;do        if [ -e "$file" ];then            rm -vf $file        fi    done}rm_dir(){    for dir in $@;do        if [ -d "$dir" ];then            rm -vrf $dir        fi    done}show_opts(){    echo "deb-build is help for generating deb packages"    echo "基本功能:"    echo "  create            create a debian rule when building package for the first time"    echo "  build             build packages"    echo "  clean             clean all generated files"    echo "参数详细说明:"    echo "    -p,--project      specify what the package name is"    echo "    -s,--srcdir       specify where the source code is"    echo "    -v,--version      specify the version number,if not set,it will get it from changlog"    echo "    -n,-r,--release   set the release number,if not set,it will get it from changelog"    echo "    -h,--help       show helps"}version_gt(){    test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" != "$1"}version_ge(){    test "$(echo "$@" | tr " " "\n" | sort -rV | head -n 1)" == "$1"}parse_changelog(){    ver=$(dpkg-parsechangelog -S $1 -l ${SRC_DIR}/debian/changelog)    if [ $? -ne 0 ];then        echo "parse changelog failed"        exit 1    fi    echo "$ver"}get_check_config(){    if [ ! -d "${SRC_DIR}" ];then        echo "$SRC_DIR not exist"        exit 1    fi    BASE_NAME=$(parse_changelog source)    error_check $? "not run create to generate debian"    echo "targetname=$BASE_NAME"    version=$(parse_changelog version)    echo "$version"    if [ -z "$VERSION" ];then         VERSION=`echo $version|awk '{split($_,a,"-");print a[1]}'`    fi    if [ -z "$RELEASE" ];then        RELEASE=`echo $version|awk '{split($_,a,"-");print a[2]}'`    fi    if version_gt $version ${VERSION}-${RELEASE};then        VERSION=`echo $version|awk '{split($_,a,"-");print a[1]}'`        RELEASE=`echo $version|awk '{split($_,a,"-");print a[2]}'`    fi    echo "Version = $VERSION"    echo "Release=$RELEASE"    CODE_DIR="${BASE_NAME}-${VERSION}"}parse_opts(){    shift    ARGS=`getopt -o h:s:v:n:r:p: -l help:,srcdir:,version:,release:,projectname: -- "$@"`    eval set -- "$ARGS"    while true    do        case $1 in            -p|--projectname)                BASE_NAME=$2                echo "BASE_NAME=$BASE_NAME"                shift 2                ;;            -s|--srcdir)                SRC_DIR=$2                echo "SRC_DIR=$SRC_DIR"                shift 2                ;;            -v|--version)                VERSION=$2                echo "VERSION=$VERSION"                shift 2                ;;            -n|-r|--release)                RELEASE=$2                echo "RELEASE=$RELEASE"                shift 2                ;;            --)                shift                break                ;;            -h|--help)                show_opts                exit 0                ;;            *)                echo "error parameter $1 $2"                exit                ;;        esac    done    get_check_config}BASE_DIR=$(cd `dirname $0`;pwd)BUILD_DIR=$(pwd)BASE_NAME=""SRC_DIR=""VERSION=""RELEASE=0CODE_DIR=""case $1 in    create)        parse_opts "$@"        mkdir -p $CODE_DIR        cd $CODE_DIR        dh_make --createorig -s -t ../$SRC_DIR        vi debian/rules        cp -r debian ../$SRC_DIR/        cd ..        echo -e "\033[31;44;1mplease make sure the rules in $CODE_DIR/debian is valid!!\033[0m"        echo "-------all done--------"        exit 0        ;;    build)        parse_opts "$@"        ;;    clean)        parse_opts "$@"        rm_dir $CODE_DIR/*        rm_file *.buildinfo        rm_file *.changes        rm_file *.deb        rm_file *.xz        rm_file *.gz        rm_file *.dsc        exit 0        ;;    *|--help)        show_opts        exit 0        ;;esaccur=$(parse_changelog version)if version_gt "${VERSION}-${RELEASE}" "$cur";then    cd $SRC_DIR    dch -v "${VERSION}-${RELEASE}"    error_check $? "dch exit"    cd -    VERSION=$(parse_changelog version|awk '{split($1,a,"-");print a[1]}')    RELEASE=$(parse_changelog version|awk '{split($1,a,"-");print a[2]}')fiCODE_DIR="${BASE_NAME}-${VERSION}"if [ -d "${CODE_DIR}" ];then    rm -rf ${CODE_DIR}/*else    mkdir -p ${CODE_DIR}ficp -r ${SRC_DIR}/debian ${CODE_DIR}/cd ${CODE_DIR}arch=`uname -m`if [ "$arch"x = "x86_64"x ];then    echo "install elf-packer"    ../$SRC_DIR/elf-packer/elf-packer.sh install    error_check $? "exit elf-packer.sh install"fiexport QT_SELECT=qt5export SOURCE_DIR=../$SRC_DIRcd ..tar -czf "${BASE_NAME}_${VERSION}.orig.tar.gz" "$SRC_DIR"cd ${CODE_DIR}dpkg-buildpackage -us -ucif [ $? -ne 0 ];then    echo "dpkg-buildpackage exit"    unset SOURCE_DIR    exit $?fiunset SOURCE_DIRecho "------all done-------"
原创粉丝点击