多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > [未完成]優酷路由寶的一些腳本分析

[未完成]優酷路由寶的一些腳本分析

來源:程序員人生   發布時間:2015-04-15 08:44:38 閱讀次數:3528次

首先,分析的是/etc/youku/rc.main這個文件,它負責優酷相干服務的初始化、啟動和結束。

這個腳本1開始先export YoukuHome=”/tmp/youku”,設置1個路徑。

接下來是幾個無關緊要的函數

ylog() { #format: /etc/youku/rc.main ylog "logstring" [ -n "$@" ] && echo `date +%Y-%m-%d-%H-%M-%m`" $@" | tee -ai $YoukuHome/log/boot.log } #add by David _log() { _DEBUG=0; if [ "${_DEBUG}" -eq 1 ]; then echo $1 >> $YoukuHome/log/rc.log fi } help() { cat <<EOF Syntax: $action Available commands: start Start all youku services stop Stop all youku services ikuacc start|stop tf mount|umount dectect TF storage card usb mount|umount dectect USB storage disk help EOF }

start函數

在start函數中調用了6個函數履行不同的任務。bootup目錄創建等1些準備工作,tf掛載tf卡,usb掛載u盤,setup設置,checkYoukuSN檢查sn,還有versionupdate和youku_luci接下來會講。

start() { ylog "rc.main start ..." bootup tf mount usb mount setup checkYoukuSN versionupdate # start youkucmc with procd. # ikuacc start youku_luci ylog "rc.main start finished" return 0 }

bootup函數

bootup() { [ -d "$YoukuHome" ] && return 0; #這段代碼先測試了$YoukuHome是不是存在,存在就不用再履行下去了,下面是不存在$YoukuHome的情況。 # ensure youku directory structure and env var. #use /tmp/youku/* to point the latest youku app, web, and script. # use system tmpfs or ourselves. the later is easy to evaluation memory used. mkdir -p $YoukuHome #建立$YoukuHome目錄 mount -t tmpfs tmpfs $YoukuHome -o size=4m #mkdir -p $YoukuHome/log echo `date +%Y-%m-%d-%H-%M-%S`" rc.main bootup ..." > $YoukuHome/log/boot.log mkdir -p $YoukuHome/mnt #used for tf storage card and usb storage mkdir -p $YoukuHome/sys mkdir -p $YoukuHome/stat mkdir -p $YoukuHome/cfg mkdir -p $YoukuHome/bin mkdir -p $YoukuHome/pub #used for link shared resources which can be seen out of router. mkdir -p $YoukuHome/ver #used for save version info of firmware and packages. mkdir -p $YoukuHome/data #used for storage big size of data. visit if from $YoukuHome/var mount -t tmpfs tmpfs $YoukuHome/data -o size=4m #give 4m as default, ln -sfn $YoukuHome/data $YoukuHome/pkg #redirect $YoukuHome/pkg to tf or usb storage if possible. #ln -sfn $YoukuHome/data $YoukuHome/var #redirect $YoukuHome/var to tf or usb storage if possible. ln -sfn $YoukuHome/data $YoukuHome/tmp #redirect $YoukuHome/tmp to tf or usb storage if possible. ln -sfn $YoukuHome/data $YoukuHome/log mkdir -p $YoukuHome/var mkdir -p $YoukuHome/var/ikucmc mkdir -p $YoukuHome/var/ikuacc #mkdir -p $YoukuHome/var/ikuacc/meta #used for ikuacc meta mkdir -p $YoukuHome/var/ikuacc/data #used for ikuacc data, youkudisk. #FIXME just for debug. yang,2014-09-05,let it to be seen in web, remove it when publish #ylog "rc.main bootup ln -sfn / $YoukuHome/pub/root" #ln -sfn / $YoukuHome/pub/root ylog "rc.main bootup finished." return 0 }

第11行把tmpfs掛載到$YoukuHome。第17~26行建立了1些目錄,
第27行又在$YoukuHome/data掛載tmpfs,第29~32行建立了1些軟連接,第34~38行建立了ikuacc的1些目錄。

掛載和卸載tf卡

tf() { ylog "rc.main tf ....[$@]" index=0; ################################################### #partitions,add by David partition_sd RetTmp=$? if [ "$RetTmp" -eq 1 ]; then { _log "RetTmp=$RetTmp, return" return } fi #do mount operation if [ "-$1" = "-mount" ]; then { [ `find /dev/ -type b -name mmcblk* | wc -l` -gt 0 ] || { ylog "rc.main tf: no tf device found, exit 1" return 1 } for devfile in `ls /dev/ | grep mmcblk | grep p`; do { _log "mount start" mkdir $YoukuHome/mnt/tf$index mount /dev/$devfile $YoukuHome/mnt/tf$index -o errors=continue RETVAL=$? if [ $RETVAL = 0 ]; then ylog "rc.main tf mounted: /dev/$devfile ==> $YoukuHome/mnt/tf$index" index=$(($index+1)) #prepare to mount next else ylog "rc.main tf mounted failure: /dev/$devfile ==> $YoukuHome/mnt/tf$index" rmdir $YoukuHome/mnt/tf$index fi } done # last=$(($index-1)) for i in `seq 0 $last`; do storage_mounted "tf" "$YoukuHome/mnt/tf$i" "$index" "$i" done } fi #################################################### #do unmount operation if [ "-$1" = "-umount" ]; then { for tfdir in `ls $YoukuHome/mnt/ | grep tf`; do { umount $YoukuHome/mnt/$tfdir rmdir $YoukuHome/mnt/$tfdir rm $YoukuHome/pub/$tfdir index=$(($index+1)) ylog "rc.main tf umounted ==> $YoukuHome/mnt/$tfdir" } done } fi #setup bin links again if something changed. [ $index -gt 0 ] && setup return 0 }

第8~15行,調用了partition_sd,接下來會講,檢查partition_sd的返回值,沒甚么實際作用。
如果參數是mount,履行第17~49行掛載sd;如果參數是umount,履行第53~66行卸載sd卡。
第21~24行,看看裝備中有無塊裝備叫做mmcblk*的,這類不出意外就是sd卡了,否則就返回1。
第26~39就是枚舉并掛載sd卡了。其中,第29行創建掛載的目錄,第30行掛載sd卡到該目錄。
第43~46行調用storage_mounted,這個函數里面創建了1些軟連接,后面會講。
第53~66行就是umount部份,卸載并刪除掛載目錄和軟連接。特別注意還有個第69行,履行setup,后面會講。

掛載和卸載USB存儲器

usb() { ylog "rc.main usb ....[$@]" index=0; ################################################### #do mount operation if [ "-$1" = "-mount" ]; then { [ `find /dev/ -type b -name sd* | wc -l` -gt 0 ] || { ylog "rc.main tf: no usb storage device found, exit 1" return 1 } for devfile in `ls /dev/ | grep -e sda -e sdb -e sdc`; do { mkdir $YoukuHome/mnt/usb$index mount /dev/$devfile $YoukuHome/mnt/usb$index RETVAL=$? if [ $RETVAL = 0 ]; then ylog "rc.main usb mounted: /dev/$devfile ==> $YoukuHome/mnt/usb$index" index=$(($index+1)) #prepare to mount next else ylog "rc.main usb mounted failure: /dev/$devfile ==> $YoukuHome/mnt/usb$index" rmdir $YoukuHome/mnt/usb$index fi } done # last=$(($index-1)) for i in `seq 0 $last`; do storage_mounted "usb" "$YoukuHome/mnt/usb$i" "$index" "$i" done } fi #################################################### #do unmount operation if [ "-$1" = "-umount" ]; then { for usbdir in `ls $YoukuHome/mnt/ | grep usb`; do { umount $YoukuHome/mnt/$usbdir rmdir $YoukuHome/mnt/$usbdir rm $YoukuHome/pub/$usbdir index=$(($index+1)) ylog "rc.main usb umounted ==> $YoukuHome/mnt/$usbdir" } done } fi #setup bin links again if something changed. [ $index -gt 0 ] && setup return 0; }

進程跟掛載和卸載tf卡差不多。

setup函數

setup() { ylog "rc.main setup ..." #set default .or when some disk umounted [ -L $YoukuHome/bin/youkucmc -a -f "`readlink -f $YoukuHome/bin/youkucmc`" ] || ln -sfn /usr/sbin/guard $YoukuHome/bin/youkucmc [ -L $YoukuHome//bin/ikuacc -a -f "`readlink -f $YoukuHome/bin/ikuacc`" ] || ln -sfn /usr/sbin/ikuacc $YoukuHome/bin/ikuacc [ -L $YoukuHome/bin/sn_youku -a -f "`readlink -f $YoukuHome/bin/sn_youku`" ] || ln -sfn /usr/sbin/sn_youku $YoukuHome/bin/sn_youku [ -L $YoukuHome/www -a -d "`readlink -f $YoukuHome/www`" ] || ln -sfn /www/ $YoukuHome/www #let publish resouces can be seen from web [ -L $YoukuHome/www/pub -o -d $YoukuHome/www/pub ] || ln -sfn $YoukuHome/pub $YoukuHome/www/pub ylog "rc.main setup: cur www path=>[`readlink -f $YoukuHome/www`]" ##################################################################### #select space for save data,suck as ikuacc virtual disk and so on. #[ -L $YoukuHome/var -a -d "`readlink -f $YoukuHome/var`" ] || ln -sfn $YoukuHome/data $YoukuHome/var ylog "rc.main setup: cur var path=>[`readlink -f $YoukuHome/var`]" flag=0 minsize=0 maxsize=0 mindisk=0 maxdisk=0 cd $YoukuHome/mnt #get smallest and biggest start partition for p in `ls $YoukuHome/mnt | grep -e tf -e usb | sort`; do { newsize=`df -m | grep $YoukuHome/mnt/$p | awk '{print $2 }'` [ -z $newsize ] && newsize=0 [ ${flag} -eq 0 ] && { flag=1 minsize=${newsize} maxsize=${newsize} mindisk=${YoukuHome}/mnt/$p maxdisk=${YoukuHome}/mnt/$p } [ ${newsize} -lt ${minsize} ] && { mindisk=${YoukuHome}/mnt/$p minsize=${newsize} } [ ${newsize} -gt ${maxsize} ] && { maxdisk=${YoukuHome}/mnt/$p maxsize=${newsize} } }; done _log "minsize=${minsize}, mindisk=${mindisk}" _log "maxsize=${maxsize}, maxdisk=${maxdisk}" [ ${minsize} -gt 100 ] && { if [ "${mindisk}/meta" != "`readlink -f ${YoukuHome}/var/ikuacc/meta`" ]; then { [ -d ${YoukuHome}/var/ikuacc/meta ] && cp -rfp ${YoukuHome}/var/ikuacc/meta/* ${mindisk}/youku/var/ikuacc/meta #only copy meta to new space. mkdir -p ${mindisk}/meta #mkdir -p $YoukuHome/var/ikuacc/meta ln -sfn ${mindisk}/meta ${YoukuHome}/var/ikuacc/meta } fi if [ "`readlink -f $YoukuHome/pkg`" != "${mindisk}/youku/bin" ]; then { mkdir -p ${mindisk}/youku/bin ln -sfn ${mindisk}/youku/bin $YoukuHome/pkg mkdir -p ${mindisk}/youku/tmp ln -sfn ${mindisk}/youku/tmp $YoukuHome/tmp mkdir -p ${mindisk}/youku/log ln -sfn ${mindisk}/youku/log $YoukuHome/log ylog "rc.main setup: set pkg path=>[size=$newsize Mb,${mindisk}/youku/bin" ylog "rc.main setup: set tmp path=>[size=$newsize Mb,${mindisk}/youku/tmp" } fi } #mount data0~data3 cnt=0 for p in `ls $YoukuHome/mnt | grep -e tf | sort`; do { partsize=`df -m | grep $YoukuHome/mnt/$p | awk '{print $2 }'` [ ${partsize} -gt 500 ] && { _log "mount data, partsize=${partsize}" #mkdir -p $YoukuHome/var/ikuacc/data/data${cnt} ln -sfn $YoukuHome/mnt/$p $YoukuHome/var/ikuacc/data/data${cnt} cnt=$((${cnt}+1)) } }; done #### add by xiongying for 1.5 branch patch [ -f /usr/sbin/patch.sh ] && /bin/sh /usr/sbin/patch.sh ##################################################################### #go to default work directory cd $YoukuHome/tmp ylog "rc.main setup finished." return 1 }
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产一级一片 | 欧美性美| 高清视频一区二区三区 | 亚洲天天综合 | 亚洲高清免费视频 | 日本高清www免费视频软件 | www.色网站 | 精品视频中文字幕 | 一本综合久久国产二区 | 在线亚洲观看 | 一区二区三区四区在线不卡高清 | 2020国产精品久久久久 | 国产永久一区二区三区 | 国产第一页无线好源 | 看大片免费网站 | 亚洲性生活网站 | 中文乱码一二三四有限公司 | 亚洲精品久久久久中文 | 12306ys播播影院午夜 | 日产高清卡一卡二无卡三区 | 欧美极度另类videos | 波多野结衣三区 | 精品一区二区三区四区在线 | 国产成人久久精品二区三区牛 | 国产精品久久久久久免费播放 | 最近中文字幕无免费 | 日本一级毛片片在线播放 | 亚洲天堂2017 | 国产精品jizz在线观看软件 | 欧美伦理三级在线播放影院 | 日韩一级片免费 | 亚洲精品欧美精品国产精品 | 91久久精品一区二区 | 欧美日韩在线精品一区二区三区 | hd性欧美俱乐部中文 | 欧美在线精品永久免费播放 | 欧美xxxx性特级高清 | 免费一级特黄欧美大片久久网 | 欧美成人h版整片合集 | 性欧美videofree高 | 亚洲综合国产一区二区三区 |