Blame view

trunk/scripts/package.sh 5.6 KB
1
#!/bin/bash
2
winlin authored
3 4
echo "通用打包脚本,--help查看参数"
winlin authored
5
# Usage:
winlin authored
6
#       bash package.sh [--help]
winlin authored
7 8
#           option arm, whether build for arm, requires ubuntu12.
9
# user can config the following configs, then package.
10
INSTALL=/usr/local/srs
winlin authored
11
# whether build for arm, only for ubuntu12.
12
help=NO
winlin authored
13
ARM=NO
14
DO_BUILD=YES
15
16 17 18
##################################################################################
##################################################################################
##################################################################################
winlin authored
19
# parse options.
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
for option
do
    case "$option" in
        -*=*) 
            value=`echo "$option" | sed -e 's|[-_a-zA-Z0-9/]*=||'` 
            option=`echo "$option" | sed -e 's|=[-_a-zA-Z0-9/]*||'`
        ;;
           *) value="" ;;
    esac
    
    case "$option" in
        --help)                         help=yes                  ;;
        
        --arm)                          ARM=YES                   ;;
        --no-build)                     DO_BUILD=NO               ;;

        *)
            echo "$0: error: invalid option \"$option\""
            exit 1
        ;;
    esac
done
if [ $help = yes ]; then
    cat << END

  --help                   print this message

  --arm                    configure with arm and make srs. use arm tools to get info.
48
  --no-build               donot build srs, user has builded(./configure --pi && make). only make install.
49 50 51
END
    exit 0
fi
winlin authored
52
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
# 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 os version
os_name=`lsb_release --id|awk '{print $3}'` &&
os_release=`lsb_release --release|awk '{print $2}'` &&
73
os_major_version=`echo $os_release|awk -F '.' '{print $1}'` &&
winlin authored
74
os_machine=`uname -i`
75
ret=$?; if [[ $ret -ne 0 ]]; then failed_msg "lsb_release get os info failed."; exit $ret; fi
76
ok_msg "target os is ${os_name}-${os_major_version} ${os_release} ${os_machine}"
77
winlin authored
78 79 80 81 82 83 84
# for raspberry-pi
# use rasberry-pi instead all release
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
85
# build srs
86
# @see https://github.com/winlinvip/simple-rtmp-server/wiki/Build
87 88 89 90 91
if [ $DO_BUILD = YES ]; then
    ok_msg "start build srs"
    if [ $ARM = YES ]; then
        (
            cd $work_dir && 
92
            ./configure --arm --prefix=$INSTALL && make
93 94 95 96
        ) >> $log 2>&1
    else
        (
            cd $work_dir && 
97
            ./configure --x86-x64 --prefix=$INSTALL && make
98 99 100 101
        ) >> $log 2>&1
    fi
    ret=$?; if [[ 0 -ne ${ret} ]]; then failed_msg "build srs failed"; exit $ret; fi
    ok_msg "build srs success"
winlin authored
102
else
103
    ok_msg "user skip build, directly install"
winlin authored
104
fi
105 106 107 108 109 110 111 112

# 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"
113 114 115 116 117 118 119 120 121 122 123 124 125

# 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"
winlin authored
126 127 128
# 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}'`
winlin authored
129
    os_machine=arm${arm_cpu}cpu
winlin authored
130
fi
winlin authored
131
ok_msg "machine: $os_machine"
winlin authored
132
133
# generate zip dir and zip filename
winlin authored
134 135 136 137 138 139 140 141 142 143 144
if [ $ARM = 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
ok_msg "get srs version $srs_version"
145 146
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
winlin authored
147
ok_msg "target zip filename $zip_dir"
148
149 150 151 152
# zip package.
ok_msg "start zip package"
(
    mv $package_dir ${build_objs}/${zip_dir} &&
153
    cd ${build_objs} && rm -rf ${zip_dir}.zip && zip -q -r ${zip_dir}.zip ${zip_dir} &&
154 155 156 157 158 159
    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"
160 161 162 163 164 165
echo ""
echo "package: ${build_objs}/${zip_dir}.zip"
echo "install:"
echo "      unzip -q ${zip_dir}.zip &&"
echo "      cd ${zip_dir} &&"
echo "      sudo bash INSTALL"
166 167

exit 0