123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- #!/bin/bash
- echo "通用打包脚本,--help查看参数"
- # Usage:
- # bash package.sh [--help]
- # option arm, whether build for arm, requires ubuntu12.
- # user can config the following configs, then package.
- INSTALL=/usr/local/srs
- # whether build for arm, only for ubuntu12.
- help=NO
- X86_X64=NO
- ARM=NO
- PI=NO
- MIPS=NO
- #
- EMBEDED=NO
- JOBS=1
- #
- SRS_TAG=
- ##################################################################################
- ##################################################################################
- ##################################################################################
- # parse options.
- for option
- do
- case "$option" in
- -*=*)
- value=`echo "$option" | sed -e 's|[-_a-zA-Z0-9/]*=||'`
- option=`echo "$option" | awk -F '=' '{print $1}'`
- ;;
- *) value="" ;;
- esac
-
- case "$option" in
- -h) help=yes ;;
- --help) help=yes ;;
-
- --x86-x64) X86_X64=YES ;;
- --x86-64) X86_X64=YES ;;
- --mips) MIPS=YES ;;
- --arm) ARM=YES ;;
- --pi) PI=YES ;;
- --jobs) JOBS=$value ;;
- --tag) SRS_TAG=$value ;;
- *)
- echo "$0: error: invalid option \"$option\", @see $0 --help"
- exit 1
- ;;
- esac
- done
- if [ $help = yes ]; then
- cat << END
- --help Print this message
- --x86-x64 For x86-x64 platform, configure/make/package.
- --x86-64 Alias for --x86-x64.
- --arm For arm cross-build platform, configure/make/package.
- --mips For mips cross-build platform, configure/make/package.
- --pi For pi platform, configure/make/package.
- --jobs Set the configure and make jobs.
- --tag Set the version in zip file.
- END
- exit 0
- fi
- # embeded(arm/mips)
- if [ $ARM = YES ]; then EMBEDED=YES; fi
- if [ $MIPS = YES ]; then EMBEDED=YES; fi
- # discover the current work dir, the log and access.
- echo "argv[0]=$0"
- if [[ ! -f $0 ]]; then
- echo "directly execute the scripts on shell.";
- work_dir=`pwd`
- else
- echo "execute scripts in file: $0";
- work_dir=`dirname $0`; work_dir=`(cd ${work_dir} && pwd)`
- fi
- work_dir=`(cd ${work_dir}/.. && pwd)`
- product_dir=$work_dir
- build_objs=${work_dir}/objs
- package_dir=${build_objs}/package
- log="${build_objs}/logs/package.`date +%s`.log" && . ${product_dir}/scripts/_log.sh && check_log
- ret=$?; if [[ $ret -ne 0 ]]; then exit $ret; fi
- # check lsb_release
- lsb_release -a >/dev/null 2>&1
- ret=$?; if [[ $ret -ne 0 ]]; then
- failed_msg "lsb_release not found. "
- failed_msg "to install on centos/debian(ubuntu/respberry-pi):";
- failed_msg " sudo yum install -y lsb-release";
- failed_msg " sudo aptitude install -y lsb-release";
- failed_msg "or centos7:"
- failed_msg " sudo yum install -y redhat-lsb"
- exit $ret;
- fi
- # check os version
- os_name=`lsb_release --id|awk '{print $3}'` &&
- os_release=`lsb_release --release|awk '{print $2}'` &&
- os_major_version=`echo $os_release|awk -F '.' '{print $1}'` &&
- os_machine=`uname -i`
- ret=$?; if [[ $ret -ne 0 ]]; then failed_msg "lsb_release get os info failed."; exit $ret; fi
- ok_msg "target os is ${os_name}-${os_major_version} ${os_release} ${os_machine}"
- # for raspberry-pi
- # use rasberry-pi instead all release
- if [ $PI = YES ]; then
- uname -a|grep "raspberrypi"; if [[ 0 -eq $? ]]; then os_name="RaspberryPi"; fi
- if [[ "Raspbian" == $os_name ]]; then os_name="RaspberryPi"; fi
- # check the cpu machine
- if [[ "unknown" == $os_machine ]]; then os_machine=`uname -m`; fi
- fi
- ok_msg "real os is ${os_name}-${os_major_version} ${os_release} ${os_machine}"
- # build srs
- # @see https://github.com/ossrs/srs/wiki/v1_CN_Build
- ok_msg "start build srs, ARM: $ARM, MIPS: $MIPS, PI: $PI, X86_64: $X86_X64, JOBS: $JOBS, TAG: $SRS_TAG"
- if [ $ARM = YES ]; then
- (
- cd $work_dir &&
- ./configure --arm --jobs=$JOBS --prefix=$INSTALL --build-tag=${os_name}${os_major_version} && make
- ) >> $log 2>&1
- elif [ $MIPS = YES ]; then
- (
- cd $work_dir &&
- ./configure --mips --jobs=$JOBS --prefix=$INSTALL --build-tag=${os_name}${os_major_version} && make
- ) >> $log 2>&1
- elif [ $PI = YES ]; then
- (
- cd $work_dir &&
- ./configure --pi --jobs=$JOBS --prefix=$INSTALL --build-tag=${os_name}${os_major_version} && make
- ) >> $log 2>&1
- elif [ $X86_X64 = YES ]; then
- (
- cd $work_dir &&
- ./configure --x86-x64 --jobs=$JOBS --prefix=$INSTALL --build-tag=${os_name}${os_major_version} && make
- ) >> $log 2>&1
- else
- failed_msg "invalid option, must be --x86-x64/--arm/--mips/--pi, see --help"; exit 1;
- fi
- ret=$?; if [[ 0 -ne ${ret} ]]; then failed_msg "build srs failed"; exit $ret; fi
- ok_msg "build srs success"
- # install srs
- ok_msg "start install srs"
- (
- cd $work_dir && rm -rf $package_dir && make DESTDIR=$package_dir install
- ) >> $log 2>&1
- ret=$?; if [[ 0 -ne ${ret} ]]; then failed_msg "install srs failed"; exit $ret; fi
- ok_msg "install srs success"
- # copy extra files to package.
- ok_msg "start copy extra files to package"
- (
- cp $work_dir/scripts/install.sh $package_dir/INSTALL &&
- sed -i "s|^INSTALL=.*|INSTALL=${INSTALL}|g" $package_dir/INSTALL &&
- mkdir -p $package_dir/scripts &&
- cp $work_dir/scripts/_log.sh $package_dir/scripts/_log.sh &&
- chmod +x $package_dir/INSTALL
- ) >> $log 2>&1
- ret=$?; if [[ 0 -ne ${ret} ]]; then failed_msg "copy extra files failed"; exit $ret; fi
- ok_msg "copy extra files success"
- # detect for arm.
- if [ $ARM = YES ]; then
- arm_cpu=`arm-linux-gnueabi-readelf --arch-specific ${build_objs}/srs|grep Tag_CPU_arch:|awk '{print $2}'`
- os_machine=arm${arm_cpu}cpu
- fi
- if [ $MIPS = YES ]; then
- os_machine=mips
- fi
- ok_msg "machine: $os_machine"
- # generate zip dir and zip filename
- srs_version=$SRS_TAG
- if [[ $srs_version == '' ]]; then
- if [ $EMBEDED = YES ]; then
- srs_version_major=`cat $work_dir/src/core/srs_core.hpp| grep '#define VERSION_MAJOR'| awk '{print $3}'|xargs echo` &&
- srs_version_minor=`cat $work_dir/src/core/srs_core.hpp| grep '#define VERSION_MINOR'| awk '{print $3}'|xargs echo` &&
- srs_version_revision=`cat $work_dir/src/core/srs_core.hpp| grep '#define VERSION_REVISION'| awk '{print $3}'|xargs echo` &&
- srs_version=$srs_version_major.$srs_version_minor.$srs_version_revision
- else
- srs_version=`${build_objs}/srs -v 2>/dev/stdout 1>/dev/null`
- fi
- ret=$?; if [[ 0 -ne ${ret} ]]; then failed_msg "get srs version failed"; exit $ret; fi
- fi
- ok_msg "get srs version $srs_version"
- zip_dir="SRS-${os_name}${os_major_version}-${os_machine}-${srs_version}"
- ret=$?; if [[ 0 -ne ${ret} ]]; then failed_msg "generate zip filename failed"; exit $ret; fi
- ok_msg "target zip filename $zip_dir"
- # zip package.
- ok_msg "start zip package"
- (
- mv $package_dir ${build_objs}/${zip_dir} &&
- cd ${build_objs} && rm -rf ${zip_dir}.zip && zip -q -r ${zip_dir}.zip ${zip_dir} &&
- mv ${build_objs}/${zip_dir} $package_dir
- ) >> $log 2>&1
- ret=$?; if [[ 0 -ne ${ret} ]]; then failed_msg "zip package failed"; exit $ret; fi
- ok_msg "zip package success"
- ok_msg "srs package success"
- echo ""
- echo "package: ${build_objs}/${zip_dir}.zip"
- echo "install:"
- echo " unzip -q ${zip_dir}.zip &&"
- echo " cd ${zip_dir} &&"
- echo " sudo bash INSTALL"
- exit 0
|