2009年 09月 18日 的归档
我架设的ubuntu源
9月19日,是2009年的软件自由日,在这个比较特殊的日子,我要送给广大ubuntu爱好者一份礼物──一个新的ubuntu源。
正如我刚才的那篇文章所说,这个源的特点就是能保证全和新。至于速度还要看大家的测试结果(应该不会太差)。
这个源是在杭州电信的,百兆共享带宽,不知道网通用户的速度如何。
希望在9.10发布的时候,就能够加到ubuntu官方源列表里。这样用起来就更方便了。
其他就先不说了,大家可以通过这几个域名访问:
http://ubuntu.srt.cn/
http://ubuntu.hzlug.org/
http://u.srt.cn/
架设ubuntu源时的两个脚本
最近在折腾新的ubuntu的源,向公司申请了一台配置一般的服务器,另外买了一块硬盘,硬件就有了。
然后装了个ubuntu 9.04 server,装上ssh,再装上nginx,稍微配置一下,服务就好了,这个过程还是蛮简单的,也很顺利,就不多说了。
接下来就可以开始同步数据了。由于我的目标是一个完整的源,所以就没有用apt-mirror之类的工具,而是直接拿rsync抓取上游的数据了。这个数据量是很大的,所以想尽量选择一个速度最快的带rsync的而且是“Up to date”的源,但是在茫茫的ubuntu官方源列表里,这么多源哪个最快呢?当然没有人会告诉你答案,因为每个人的网络环境都不一样啊。所以,最好的办法还是实地测试,所谓磨刀不误砍柴功啊,后面有300多G的数据要下载呢,这个测试绝对有价值。
上脚本(2009-12-12 更新):
#!/bin/bash rmie(){ while [ -n "$1" ] ; do [ -f $1 ] && rm $1 shift done } urls=`curl https://launchpad.net/ubuntu/+archivemirrors | \ tr -d "\n" | sed 's/<\/tr>/\n/g' | grep "Up to date"|grep '>rsync</a>'|awk -F '"' '{print $4}'` rmie res { echo "$urls" | while read url;do echo "testing... $url" rmie T wget -q --no-cache -O T "$url/ls-lR.gz" & sleep 5 kill %% echo -n "$url " >> res ls -l T >>res done } 2>/dev/null sort -k 6 -n res > fast_mirror_`date +%F` rmie res T |
最后你可以 tail fast_mirror_XXX 看到5秒内下载的字节数最多的一个源。我这还真有一个源,能在3秒把7.4M大的ls-lR.gz给下载完的。
然后,你可以先用这个最快的源把大部分数据先更新下来,完了之后,为了保证数据最新,再向官方源更新一次,我用的是这个脚本:
#!/bin/bash [[ $UID == 0 ]] || { echo "Must be root to run this script."; exit 0; } LOCK="/data/sync_sh/lock" LOG="/data/sync_sh/log" while true; do echo -e "\nstart sync @ `date`" | tee -a $LOG if [ -f $LOCK ]; then echo "another sync is running, I exiting..." | tee -a $LOG exit 1 fi touch $LOCK st=`date +%s` rsync --timeout=120 --exclude=".~tmp~" -avP --delete-excluded --progress rsync://archive.ubuntu.com/ubuntu/pool/ /data/mirrors/ubuntu/pool/ res=$? if [ $res -eq 0 ]; then echo "rsync pool succ" | tee -a $LOG et=`date +%s` echo "pool sync use $(( $et-$st )) sec = $(( ($et-$st)/60 )):$(( ($et-$st)%60 ))" | tee -a $LOG else echo "rsync pool failed" $res | tee -a $LOG fi st=`date +%s` rsync --timeout=120 --exclude=".~tmp~" -avP --delete-excluded --progress rsync://archive.ubuntu.com/ubuntu/ /data/mirrors/ubuntu/ res=$? if [ $res -eq 0 ]; then echo "rsync all succ" | tee -a $LOG et=`date +%s` echo "all sync use $(( $et-$st )) sec = $(( ($et-$st)/60 )):$(( ($et-$st)%60 ))" | tee -a $LOG else echo "rsync all failed" $res | tee -a $LOG fi df | grep "/data" | tee -a $LOG echo -e "end sync @ `date`" | tee -a $LOG rm $LOCK sleep 7200 done |
这个脚本先更新pool目录,再整个目录更新一遍,这样是为了减少出现软件列表里已经有某软件,但是却下载不到的情况。
脚本常驻运行,在上次更新完以后的2小时,启动下一次更新,这样应该算是国内最新的源了吧?
PS: 感谢服务器达人lupa的walkerxk在我架设源时,给我的热心帮助。