winlin

add reload support. add make install and uninstall

@@ -551,5 +551,9 @@ else @@ -551,5 +551,9 @@ else
551 echo "#undef SRS_ARM_UBUNTU12" >> $SRS_AUTO_HEADERS_H 551 echo "#undef SRS_ARM_UBUNTU12" >> $SRS_AUTO_HEADERS_H
552 fi 552 fi
553 553
  554 +echo "" >> $SRS_AUTO_HEADERS_H
  555 +# prefix
  556 +echo "#define SRS_PREFIX \"${SRS_PREFIX}\"" >> $SRS_AUTO_HEADERS_H
  557 +
554 # new empty line to auto headers file. 558 # new empty line to auto headers file.
555 echo "" >> $SRS_AUTO_HEADERS_H 559 echo "" >> $SRS_AUTO_HEADERS_H
@@ -29,6 +29,7 @@ SRS_GPERF_CP=RESERVED # gperf cpu profile @@ -29,6 +29,7 @@ SRS_GPERF_CP=RESERVED # gperf cpu profile
29 SRS_GPROF=RESERVED # gprof 29 SRS_GPROF=RESERVED # gprof
30 SRS_ARM_UBUNTU12=RESERVED # armhf(v7cpu) built on ubuntu12 30 SRS_ARM_UBUNTU12=RESERVED # armhf(v7cpu) built on ubuntu12
31 # arguments 31 # arguments
  32 +SRS_PREFIX=/usr/local/srs
32 SRS_JOBS=1 33 SRS_JOBS=1
33 SRS_STATIC=RESERVED 34 SRS_STATIC=RESERVED
34 35
@@ -85,6 +86,7 @@ do @@ -85,6 +86,7 @@ do
85 --without-arm-ubuntu12) SRS_ARM_UBUNTU12=NO ;; 86 --without-arm-ubuntu12) SRS_ARM_UBUNTU12=NO ;;
86 87
87 --jobs) SRS_JOBS=${value} ;; 88 --jobs) SRS_JOBS=${value} ;;
  89 + --prefix) SRS_PREFIX=${value} ;;
88 --static) SRS_STATIC=YES ;; 90 --static) SRS_STATIC=YES ;;
89 91
90 *) 92 *)
@@ -188,6 +190,7 @@ if [ $help = yes ]; then @@ -188,6 +190,7 @@ if [ $help = yes ]; then
188 --static whether add '-static' to link options. always set this option for arm. 190 --static whether add '-static' to link options. always set this option for arm.
189 --jobs[=N] Allow N jobs at once; infinite jobs with no arg. 191 --jobs[=N] Allow N jobs at once; infinite jobs with no arg.
190 used for make in the configure, for example, to make ffmpeg. 192 used for make in the configure, for example, to make ffmpeg.
  193 + --prefix=<path> the absolute install path for srs.
191 194
192 END 195 END
193 exit 0 196 exit 0
@@ -250,6 +253,7 @@ if [ $SRS_GPERF_MP = RESERVED ]; then echo "you must specifies the gperf-mp, see @@ -250,6 +253,7 @@ if [ $SRS_GPERF_MP = RESERVED ]; then echo "you must specifies the gperf-mp, see
250 if [ $SRS_GPERF_CP = RESERVED ]; then echo "you must specifies the gperf-cp, see: ./configure --help"; __check_ok=NO; fi 253 if [ $SRS_GPERF_CP = RESERVED ]; then echo "you must specifies the gperf-cp, see: ./configure --help"; __check_ok=NO; fi
251 if [ $SRS_GPROF = RESERVED ]; then echo "you must specifies the gprof, see: ./configure --help"; __check_ok=NO; fi 254 if [ $SRS_GPROF = RESERVED ]; then echo "you must specifies the gprof, see: ./configure --help"; __check_ok=NO; fi
252 if [ $SRS_ARM_UBUNTU12 = RESERVED ]; then echo "you must specifies the arm-ubuntu12, see: ./configure --help"; __check_ok=NO; fi 255 if [ $SRS_ARM_UBUNTU12 = RESERVED ]; then echo "you must specifies the arm-ubuntu12, see: ./configure --help"; __check_ok=NO; fi
  256 +if [[ -z $SRS_PREFIX ]]; then echo "you must specifies the prefix, see: ./configure --prefix"; __check_ok=NO; fi
253 if [ $__check_ok = NO ]; then 257 if [ $__check_ok = NO ]; then
254 exit 1; 258 exit 1;
255 fi 259 fi
@@ -272,5 +276,5 @@ if [ $SRS_GPERF_CP = YES ]; then SRS_CONFIGURE="${SRS_CONFIGURE} --with-gcp"; el @@ -272,5 +276,5 @@ if [ $SRS_GPERF_CP = YES ]; then SRS_CONFIGURE="${SRS_CONFIGURE} --with-gcp"; el
272 if [ $SRS_GPROF = YES ]; then SRS_CONFIGURE="${SRS_CONFIGURE} --with-gprof"; else SRS_CONFIGURE="${SRS_CONFIGURE} --without-gprof"; fi 276 if [ $SRS_GPROF = YES ]; then SRS_CONFIGURE="${SRS_CONFIGURE} --with-gprof"; else SRS_CONFIGURE="${SRS_CONFIGURE} --without-gprof"; fi
273 if [ $SRS_ARM_UBUNTU12 = YES ]; then SRS_CONFIGURE="${SRS_CONFIGURE} --with-arm-ubuntu12"; else SRS_CONFIGURE="${SRS_CONFIGURE} --without-arm-ubuntu12"; fi 277 if [ $SRS_ARM_UBUNTU12 = YES ]; then SRS_CONFIGURE="${SRS_CONFIGURE} --with-arm-ubuntu12"; else SRS_CONFIGURE="${SRS_CONFIGURE} --without-arm-ubuntu12"; fi
274 if [ $SRS_STATIC = YES ]; then SRS_CONFIGURE="${SRS_CONFIGURE} --static"; fi 278 if [ $SRS_STATIC = YES ]; then SRS_CONFIGURE="${SRS_CONFIGURE} --static"; fi
275 -SRS_CONFIGURE="${SRS_CONFIGURE} ${SRS_JOBS}" 279 +SRS_CONFIGURE="${SRS_CONFIGURE} ${SRS_JOBS} --prefix=${SRS_PREFIX}"
276 echo "regenerate config: ${SRS_CONFIGURE}" 280 echo "regenerate config: ${SRS_CONFIGURE}"
@@ -158,7 +158,10 @@ END @@ -158,7 +158,10 @@ END
158 # makefile 158 # makefile
159 echo "generate Makefile" 159 echo "generate Makefile"
160 cat << END > ${SRS_MAKEFILE} 160 cat << END > ${SRS_MAKEFILE}
161 -.PHONY: default _default help clean server bandwidth librtmp librtmp-sample utest _prepare_dir 161 +.PHONY: default _default install help clean server bandwidth librtmp librtmp-sample utest _prepare_dir
  162 +
  163 +# install prefix.
  164 +SRS_PREFIX=${SRS_PREFIX}
162 165
163 END 166 END
164 167
@@ -184,7 +187,7 @@ _default: bandwidth librtmp-sample utest @@ -184,7 +187,7 @@ _default: bandwidth librtmp-sample utest
184 @bash objs/_srs_build_summary.sh 187 @bash objs/_srs_build_summary.sh
185 188
186 help: 189 help:
187 - @echo "Usage: make <help>|<clean>|<server>|<bandwidth>|<librtmp>|<librtmp-sample>|<utest>" 190 + @echo "Usage: make <help>|<clean>|<server>|<bandwidth>|<librtmp>|<librtmp-sample>|<utest>|<install>|<uninstall>"
188 @echo " help display this help menu" 191 @echo " help display this help menu"
189 @echo " clean cleanup project" 192 @echo " clean cleanup project"
190 @echo " server build the srs(simple rtmp server) over st(state-threads)" 193 @echo " server build the srs(simple rtmp server) over st(state-threads)"
@@ -192,6 +195,8 @@ help: @@ -192,6 +195,8 @@ help:
192 @echo " librtmp build the client publish/play library." 195 @echo " librtmp build the client publish/play library."
193 @echo " librtmp-sample build the srs-librtmp sample" 196 @echo " librtmp-sample build the srs-librtmp sample"
194 @echo " utest build the utest for srs" 197 @echo " utest build the utest for srs"
  198 + @echo " install install srs to the prefix path"
  199 + @echo " uninstall uninstall srs from prefix path"
195 200
196 clean: 201 clean:
197 (cd ${SRS_OBJS}; rm -f rm -rf srs bandwidth srs_utest) 202 (cd ${SRS_OBJS}; rm -f rm -rf srs bandwidth srs_utest)
@@ -204,6 +209,28 @@ server: _prepare_dir @@ -204,6 +209,28 @@ server: _prepare_dir
204 209
205 END 210 END
206 211
  212 +# install entry
  213 +cat << END >> ${SRS_MAKEFILE}
  214 +uninstall:
  215 + @echo "rmdir \$(SRS_PREFIX)"
  216 + @rm -rf \$(SRS_PREFIX)
  217 +
  218 +install:
  219 + @echo "mkdir \$(SRS_PREFIX)"
  220 + @mkdir -p \$(SRS_PREFIX)
  221 + @echo "copy binary files"
  222 + @mkdir -p \$(SRS_PREFIX)/objs
  223 + @cp objs/srs \$(SRS_PREFIX)/objs
  224 + @echo "copy srs conf files"
  225 + @mkdir -p \$(SRS_PREFIX)/conf
  226 + @cp conf/*.conf \$(SRS_PREFIX)/conf
  227 + @echo "copy init.d script files"
  228 + @mkdir -p \$(SRS_PREFIX)/etc/init.d
  229 + @cp etc/init.d/simple-rtmp-server \$(SRS_PREFIX)/etc/init.d
  230 + @sed -i "s|^ROOT=.*|ROOT=\"\$(SRS_PREFIX)\"|g" \$(SRS_PREFIX)/etc/init.d/simple-rtmp-server
  231 +
  232 +END
  233 +
207 if [ $SRS_BWTC = YES ]; then 234 if [ $SRS_BWTC = YES ]; then
208 cat << END >> ${SRS_MAKEFILE} 235 cat << END >> ${SRS_MAKEFILE}
209 bandwidth: server 236 bandwidth: server
@@ -10,18 +10,22 @@ @@ -10,18 +10,22 @@
10 # Description: https://github.com/winlinvip/simple-rtmp-server 10 # Description: https://github.com/winlinvip/simple-rtmp-server
11 ### END INIT INFO 11 ### END INIT INFO
12 12
  13 +# the config of ROOT, user must modify it when start srs from other directory,
  14 +# it's ok to use the script by command ./etc/init.d/simple-rtmp-server
  15 +ROOT="./"
  16 +APP="./objs/srs"
  17 +CONFIG="./conf/srs.conf"
  18 +DEFAULT_PID_FILE='./objs/srs.pid'
  19 +
  20 +########################################################################
  21 +# utility functions
  22 +########################################################################
13 RED="\\e[31m" 23 RED="\\e[31m"
14 GREEN="\\e[32m" 24 GREEN="\\e[32m"
15 YELLOW="\\e[33m" 25 YELLOW="\\e[33m"
16 BLACK="\\e[0m" 26 BLACK="\\e[0m"
17 POS="\\e[60G" 27 POS="\\e[60G"
18 28
19 -# the pid file is generated by install wizard  
20 -ROOT="./"  
21 -APP="./objs/srs"  
22 -CONFIG="./conf/srs.conf"  
23 -DEFAULT_PID_FILE='./objs/srs.pid'  
24 -  
25 ok_msg(){ 29 ok_msg(){
26 echo -e "${1}${POS}${BLACK}[${GREEN} OK ${BLACK}]" 30 echo -e "${1}${POS}${BLACK}[${GREEN} OK ${BLACK}]"
27 } 31 }
@@ -41,7 +45,11 @@ load_process_info() { @@ -41,7 +45,11 @@ load_process_info() {
41 srs_pid_file=`cat ${ROOT}/${CONFIG} |grep ^pid|awk '{print $2}'|awk -F ';' '{print $1}'` 45 srs_pid_file=`cat ${ROOT}/${CONFIG} |grep ^pid|awk '{print $2}'|awk -F ';' '{print $1}'`
42 if [[ -z $srs_pid_file ]]; then srs_pid_file=${DEFAULT_PID_FILE}; fi 46 if [[ -z $srs_pid_file ]]; then srs_pid_file=${DEFAULT_PID_FILE}; fi
43 47
44 - srs_pid=`cat $srs_pid_file 2>/dev/null` 48 + if [[ -f $srs_pid_file ]]; then
  49 + srs_pid=`cat $srs_pid_file 2>/dev/null`
  50 + else
  51 + srs_pid=`cat ${ROOT}/$srs_pid_file 2>/dev/null`
  52 + fi
45 ret=$?; if [[ 0 -ne $ret ]]; then error_msg="file $srs_pid_file does not exists"; return 1; fi 53 ret=$?; if [[ 0 -ne $ret ]]; then error_msg="file $srs_pid_file does not exists"; return 1; fi
46 54
47 ps -p ${srs_pid} >/dev/null 2>/dev/null 55 ps -p ${srs_pid} >/dev/null 2>/dev/null
@@ -53,15 +61,10 @@ load_process_info() { @@ -53,15 +61,10 @@ load_process_info() {
53 start() { 61 start() {
54 # if exists, exit. 62 # if exists, exit.
55 load_process_info 63 load_process_info
56 - if [[ 0 -eq $? ]]; then  
57 - failed_msg "srs started(pid ${srs_pid}), should not start it again."  
58 - return 0  
59 - fi  
60 -  
61 - # try to get log dir. 64 + if [[ 0 -eq $? ]]; then failed_msg "SRS started(pid ${srs_pid}), should not start it again."; return 0; fi
62 65
63 # not exists, start server 66 # not exists, start server
64 - ok_msg "Starting srs..." 67 + ok_msg "Starting SRS..."
65 # TODO: FIXME: set limit by, for instance, "ulimit -HSn 10000" 68 # TODO: FIXME: set limit by, for instance, "ulimit -HSn 10000"
66 # TODO: FIXME: write log to, for instance, the same dir of log. 69 # TODO: FIXME: write log to, for instance, the same dir of log.
67 # TODO: FIXME: support deamon, without nohup. 70 # TODO: FIXME: support deamon, without nohup.
@@ -69,22 +72,18 @@ start() { @@ -69,22 +72,18 @@ start() {
69 72
70 # check again after start server 73 # check again after start server
71 load_process_info 74 load_process_info
72 - if [[ 0 -eq $? ]]; then  
73 - ok_msg "srs started(pid ${srs_pid})"  
74 - else  
75 - failed_msg "srs not started"  
76 - fi 75 + ret=$?; if [[ 0 -eq $? ]]; then ok_msg "SRS started(pid ${srs_pid})"; return 0; fi
  76 +
  77 + failed_msg "SRS not started"
  78 + return $ret
77 } 79 }
78 80
79 stop() { 81 stop() {
80 # not start, exit 82 # not start, exit
81 load_process_info 83 load_process_info
82 - if [[ 0 -ne $? ]]; then  
83 - failed_msg "srs not start."  
84 - return 0  
85 - fi 84 + if [[ 0 -ne $? ]]; then failed_msg "SRS not start."; return 0; fi
86 85
87 - ok_msg "Stopping srs(pid ${srs_pid})..." 86 + ok_msg "Stopping SRS(pid ${srs_pid})..."
88 87
89 # process exists, kill util stop 88 # process exists, kill util stop
90 for((;;)); do 89 for((;;)); do
@@ -94,7 +93,7 @@ stop() { @@ -94,7 +93,7 @@ stop() {
94 ret=$?; if [[ 0 -ne $ret ]]; then failed_msg "send signal SIGTERM failed ret=$ret"; return $ret; fi 93 ret=$?; if [[ 0 -ne $ret ]]; then failed_msg "send signal SIGTERM failed ret=$ret"; return $ret; fi
95 sleep 0.1 94 sleep 0.1
96 else 95 else
97 - ok_msg "srs stopped" 96 + ok_msg "SRS stopped"
98 break; 97 break;
99 fi 98 fi
100 done 99 done
@@ -107,15 +106,30 @@ stop() { @@ -107,15 +106,30 @@ stop() {
107 # @return 0 if srs is running; otherwise, 1 for stopped. 106 # @return 0 if srs is running; otherwise, 1 for stopped.
108 status() { 107 status() {
109 load_process_info 108 load_process_info
110 - ret=$?; if [[ 0 -eq $ret ]]; then  
111 - echo "srs(pid ${srs_pid}) is running."  
112 - return 0  
113 - fi 109 + ret=$?; if [[ 0 -eq $ret ]]; then echo "SRS(pid ${srs_pid}) is running."; return 0; fi
114 110
115 - echo "srs is stopped, $error_msg" 111 + echo "SRS is stopped, $error_msg"
116 return 1 112 return 1
117 } 113 }
118 114
  115 +reload() {
  116 + # not start, exit
  117 + load_process_info
  118 + if [[ 0 -ne $? ]]; then failed_msg "SRS not start."; return 0; fi
  119 +
  120 + ok_msg "Reload SRS(pid ${srs_pid})..."
  121 +
  122 + # process exists, reload it
  123 + kill -s SIGHUP ${srs_pid} 2>/dev/null
  124 + ret=$?; if [[ 0 -ne $ret ]]; then failed_msg "Reload SRS failed ret=$ret"; return $ret; fi
  125 +
  126 + load_process_info
  127 + if [[ 0 -ne $? ]]; then failed_msg "SRS reload failed."; return $ret; fi
  128 +
  129 + ok_msg "SRS reloaded"
  130 + return 0
  131 +}
  132 +
119 menu() { 133 menu() {
120 case "$1" in 134 case "$1" in
121 start) 135 start)
@@ -131,6 +145,9 @@ menu() { @@ -131,6 +145,9 @@ menu() {
131 status) 145 status)
132 status 146 status
133 ;; 147 ;;
  148 + reload)
  149 + reload
  150 + ;;
134 *) 151 *)
135 echo "Usage: $0 {start|stop|status|restart|reload}" 152 echo "Usage: $0 {start|stop|status|restart|reload}"
136 return 1 153 return 1