搭建私有镜像源

Posted on Posted in linux
Tips: 本文创建于2015年1月21日,已超过 2 年,内容或图片可能已经失效!

前几天搭了一个私有镜像源(debian),每天晚上1点与中国科学技术大学的源站点进行同步。一周后看了下容量,竟然达到了200多G(网不稳,究竟官方多大我也不知道)。我原本想轻量携带的,后来估计了下自身条件,玩不起。下面贴个脚本。

anonftpsync

上面的官网,别用乱七八糟的浏览器打开。最好是直接down下来。贴一个我改过的debian版。

测试的时候发现个问题,脚本会在存储目录生成一个标记,由于我是ctrl+c退出的,标记会存在,再次执行脚本,会出现code error。把标记删除即OK!

  1. #! /bin/sh  
  2. set -e  
  3.   
  4. VERSION="1.45"  
  5.   
  6. # WARNING: This script is now replaced by ftpsync scripts:  
  7. # see https://www.debian.org/mirror/ftpmirror#how  
  8.   
  9. # This script originates from https://www.debian.org/mirror/anonftpsync  
  10.   
  11. # CVS: cvs.debian.org:/cvs/webwml - webwml/english/mirror/anonftpsync  
  12. # Version: $Id: anonftpsync,v 1.48 2014/08/28 21:11:09 spaillard Exp $   
  13.   
  14. # Note: You MUST have rsync 2.6.4 or newer, which is available in sarge  
  15. # and all newer Debian releases, or at http://rsync.samba.org/  
  16.   
  17. # Don't forget:  
  18. # chmod u+x anonftpsync  
  19.   
  20. # Set the variables below to fit your site. You can then use cron to have  
  21. # this script run daily to automatically update your copy of the archive.  
  22.   
  23. # TO is the destination for the base of the Debian mirror directory  
  24. # (the dir that holds dists/ and ls-lR).  
  25. # (mandatory)  
  26.   
  27. TO=/data/linux-sources/debian #本地存储的目录  
  28.   
  29. # RSYNC_HOST is the site you have chosen from the mirrors file.  
  30. # (https://www.debian.org/mirror/list-full)  
  31. # (mandatory)  
  32.   
  33. RSYNC_HOST=debian.ustc.edu.cn #中国科学技术大学源站点  
  34.   
  35. # RSYNC_DIR is the directory given in the "Packages over rsync:" line of  
  36. # the mirrors file for the site you have chosen to mirror.  
  37. # (mandatory)  
  38.   
  39. RSYNC_DIR=debian #要同步的分类 debian ubuntu fedora 之类  
  40.   
  41. # LOGDIR is the directory where the logs will be written to  
  42. # (mandatory)  
  43.   
  44. LOGDIR=/data/linux-sources/debian #log存放路径  
  45.   
  46. # ARCH_EXCLUDE can be used to exclude a complete architecture from  
  47. # mirrorring. Please use as space seperated list.  
  48. # Possible values are:  
  49. # alpha amd64 arm arm64 armel hppa hurd-i386 i386 ia64 m68k mipsel mips powerpc  
  50. # ppc64 s390 sh sparc  
  51. #  
  52. # There is one special value: source  
  53. # This is not an architecture but will exclude all source code in /pool  
  54. #  
  55. # eg.  
  56. # ARCH_EXCLUDE="alpha arm armel hppa hurd-i386 ia64 m68k mipsel mips s390 sparc"  
  57.   
  58. # With a blank ARCH_EXCLUDE you will mirror all available architectures  
  59. # (optional)  
  60.   
  61. ARCH_EXCLUDE="alpha arm armel hppa hurd-i386 ia64 m68k mipsel mips s390 sparc"  
  62.   
  63. # EXCLUDE is a list of parameters listing patterns that rsync will exclude, in  
  64. # addition to the architectures excluded b
    y ARCH_EXCLUDE.
      
  65. #  
  66. # Use ARCH_EXCLUDE to exclude specific architectures or all sources  
  67. #  
  68. # --exclude stable, testing, unstable options DON'T remove the packages of  
  69. # the given distribution. If you want do so, use debmirror instead.  
  70. #  
  71. # The following example would exclude mostly everything:  
  72. #EXCLUDE="\  
  73. #  --exclude stable/ --exclude testing/ --exclude unstable/ \  
  74. #  --exclude source/ \  
  75. #  --exclude *.orig.tar.gz --exclude *.diff.gz --exclude *.dsc \  
  76. #  --exclude /contrib/ --exclude /non-free/ \  
  77. # "  
  78.   
  79. # With a blank EXCLUDE you will mirror the entire archive, except the  
  80. # architectures excluded by ARCH_EXCLUDE.  
  81. # (optional)  
  82.   
  83. EXCLUDE="--exclude *alpha.deb \ #不需要同步的包。这是我在网上找的。排除一些测试的,untable 
  84.     --exclude *alpha.udeb \ 
  85.     --exclude binary-alpha/ \ 
  86.     --exclude disks-alpha/ \ 
  87.     --exclude *-alpha.gz \ 
  88.     --exclude installer-alpha/ \ 
  89.     --exclude binary-arm/ \ 
  90.     --exclude *arm.deb \ 
  91.     --exclude *arm.udeb \ 
  92.     --exclude disks-arm/ \ 
  93.     --exclude *-arm.gz \ 
  94.     --exclude installer-arm/ \ 
  95.     --exclude binary-m68k/ \ 
  96.     --exclude *m68k.deb \ 
  97.     --exclude *m68k.udeb \ 
  98.     --exclude disks-m68k/ \ 
  99.     --exclude *-m68k.gz \ 
  100.     --exclude installer-m68k/ \ 
  101.     --exclude binary-hppa/ \ 
  102.     --exclude *hppa.deb \ 
  103.     --exclude *hppa.udeb \ 
  104.     --exclude disks-hppa/ \ 
  105.     --exclude *-hppa.gz \ 
  106.     --exclude installer-hppa/ \ 
  107.     --exclude binary-ia64/ \ 
  108.     --exclude *ia64.deb \ 
  109.     --exclude *ia64.udeb \ 
  110.     --exclude disks-ia64/ \ 
  111.     --exclude *-ia64.gz \ 
  112.     --exclude installer-ia64/ \ 
  113.     --exclude binary-mips/ \ 
  114.     --exclude *mips.deb \ 
  115.     --exclude *mips.udeb \ 
  116.     --exclude disks-mips/ \ 
  117.     --exclude *-mips.gz \ 
  118.     --exclude installer-mips/ \ 
  119.     --exclude binary-mipsel/ \ 
  120.     --exclude *mipsel.deb \ 
  121.     --exclude *mipsel.udeb \ 
  122.     --exclude disks-mipsel/ \ 
  123.     --exclude *-mipsel.gz \ 
  124.     --exclude installer-mipsel/ \ 
  125.     --exclude binary-s360/ \ 
  126.     --exclude *s360.deb \ 
  127.     --exclude *s360.udeb \ 
  128.     --exclude disks-s360/ \ 
  129.     --exclude *-s360.gz \ 
  130.     --exclude installer-s360/ \ 
  131.     --exclude binary-s390/ \ 
  132.     --exclude *s390.deb \ 
  133.     --exclude *s390.udeb \ 
  134.     --exclude disks-s390/ \ 
  135.     --exclude *-s390.gz \ 
  136.     --exclude installer-s390/ \ 
  137.     --exclude binary-sh/ \ 
  138.     --exclude *sh.deb \ 
  139.     --exclude *sh.udeb \ 
  140.     --exclude disks-sh/ \ 
  141.     --exclude *-sh.gz \ 
  142.     --exclude installer-sh/ \ 
  143.     --exclude binary-sparc/ \ 
  144.     --exclude *sparc.deb \ 
  145.     --exclude *sparc.udeb \ 
  146.     --exclude disks-sparc/ \ 
  147.     --exclude *-sparc.gz \ 
  148.     --exclude installer-sparc/ \ 
  149.     --exclude /Debian-1.3* \ 
  150.     --exclude /Debian3.1* \ 
  151.     --exclude local/ \ 
  152.     --exclude stable/ \ 
  153.     --exclude slink-proposed-updates/ \ 
  154.     --exclude slink/ \ 
  155.     --exclude bo/ \ 
  156.     --exclude bo-unstable/ \ 
  157.     --exclude bo-updates/ \ 
  158.     --exclude binary-hurd-i386/ \ 
  159.     --exclude *hurd-i386.deb \ 
  160.     --exclude *hurd-i386.udeb \ 
  161.     --exclude disks-hurd-i386/ \ 
  162.     --exclude *-hurd-i386.gz \ 
  163.     --exclude installer-hurd-i386/ \ 
  164.     --exclude binary-powerpc/ \ 
  165.     --exclude *powerpc.deb \ 
  166.     --exclude *powerpc.udeb \ 
  167.     --exclude disks-powerpc/ \ 
  168.     --exclude *-powerpc.gz \ 
  169.     --exclude installer-powerpc/ "  
  170.   
  171. # MAILTO is the address to send logfiles to;  
  172. # if it is not defined, no mail will be sent  
  173. # (optional)  
  174.   
  175. MAILTO=  
  176.   
  177. # LOCK_TIMEOUT is a timeout in minutes.  Defaults to 360 (6 hours).  
  178. # This program creates a lock to ensure that only one copy  
  179. # of it is mirroring any one archive at any one time.  
  180. # Locks held for longer than the timeout are broken, unless  
  181. # a running rsync process appears to be connected to $RSYNC_HOST.  
  182.   
  183. LOCK_TIMEOUT=360  
  184.   
  185. # You may establish the connection via a web proxy by setting the environment  
  186. # variable RSYNC_PROXY to a hostname:port pair pointing to your web proxy.  Note  
  187. # that your web proxy’s configuration must support proxy connections to port 873.  
  188. #  
  189. # RSYNC_PROXY="IP:PORT"  
  190. # export RSYNC_PROXY=$RSYNC_PROXY  
  191.   
  192. # There should be no need to&n
    bsp;edit anything below this point, unless there
      
  193. # are problems.  
  194.   
  195. #-----------------------------------------------------------------------------#  
  196.   
  197. # If you are accessing a rsync server/module which is password-protected,  
  198. # uncomment the following lines (and edit the other file).  
  199.   
  200. # . ftpsync.conf  
  201. # export RSYNC_PASSWORD  
  202. # RSYNC_HOST=$RSYNC_USER@$RSYNC_HOST  
  203.   
  204. #-----------------------------------------------------------------------------#  
  205.   
  206. # Check for some environment variables  
  207. if [ -z "$TO" ] || [ -z "$RSYNC_HOST" ] || [ -z "$RSYNC_DIR" ] || [ -z "$LOGDIR" ]; then  
  208.     echo "One of the following variables seems to be empty:"  
  209.     echo "TO, RSYNC_HOST, RSYNC_DIR or LOGDIR"  
  210.     exit 2  
  211. fi  
  212.   
  213. # Note: on some non-Debian systems, hostname doesn't accept -f option.  
  214. # If that's the case on your system, make sure hostname prints the full  
  215. # hostname, and remove the -f option. If there's no hostname command,  
  216. # explicitly replace `hostname -f` with the hostname.  
  217.   
  218. HOSTNAME=`hostname -f`  
  219.   
  220. # The hostname must match the "Site" field written in the list of mirrors.  
  221. # If hostname doesn't returns the correct value, fill and uncomment below   
  222. # HOSTNAME=mirror.domain.tld  
  223.    
  224. LOCK="${TO}/Archive-Update-in-Progress-${HOSTNAME}"  
  225.   
  226. # The temp directory used by rsync --delay-updates is not  
  227. # world-readable remotely. It must be excluded to avoid errors.   
  228. TMP_EXCLUDE="--exclude .~tmp~/"  
  229.   
  230. # Exclude architectures defined in $ARCH_EXCLUDE  
  231. for ARCH in $ARCH_EXCLUDEdo  
  232.     EXCLUDE=$EXCLUDE"\ 
  233.         --exclude binary-$ARCH/ \ 
  234.         --exclude disks-$ARCH/ \ 
  235.         --exclude installer-$ARCH/ \ 
  236.         --exclude Contents-$ARCH.bz2 \ 
  237.         --exclude Contents-$ARCH.gz \ 
  238.         --exclude Contents-$ARCH.diff/ \ 
  239.         --exclude arch-$ARCH.files \ 
  240.         --exclude arch-$ARCH.list.gz \ 
  241.         --exclude *_$ARCH.changes \ 
  242.         --exclude *_$ARCH.deb \ 
  243.         --exclude *_$ARCH.udeb "  
  244.     if [ "$ARCH" = "source" ]; then  
  245.         SOURCE_EXCLUDE="\ 
  246.         --exclude source/ \ 
  247.         --exclude *.tar.bz2 \ 
  248.         --exclude *.diff.bz2 \ 
  249.      
       --exclude *.tar.gz \
     
  250.         --exclude *.diff.gz \ 
  251.         --exclude *.dsc "  
  252.     fi  
  253. done  
  254.   
  255. # Logfile  
  256. LOGFILE=$LOGDIR/debian-mirror.log  
  257. # optionally, use the rsync module name in the log file name:  
  258. # LOGFILE=$LOGDIR/$(echo $RSYNC_DIR | tr / _)-mirror.log  
  259. # LOGFILE=$LOGDIR/${RSYNC_DIR/\//_}-mirror.log  
  260.   
  261. # Get in the right directory and set the umask to be group writable  
  262.   
  263. cd $HOME  
  264. umask 002  
  265.   
  266. # If we are running mirror script for the first time, create the  
  267. # destination directory and the trace directory underneath it  
  268. if [ ! -d "${TO}/project/trace/" ]; then  
  269.   mkdir -p ${TO}/project/trace  
  270. fi  
  271.   
  272. # Check to see if another sync is in progress  
  273. if [ -f "$LOCK" ]; then  
  274. # Note: this requires the findutils find; for other finds, adjust as necessary  
  275.   if [ "`find $LOCK -maxdepth 1 -cmin -$LOCK_TIMEOUT`" = "" ]; then  
  276. # Note: this requires the procps ps; for other ps', adjust as necessary  
  277.     if ps ax | grep '[r]'sync | grep -q $RSYNC_HOST; then  
  278.       echo "stale lock found, but a rsync is still running, aiee!"  
  279.       exit 1  
  280.     else  
  281.       echo "stale lock found (not accessed in the last $LOCK_TIMEOUT minutes), forcing update!"  
  282.       rm -f $LOCK  
  283.     fi  
  284.   else  
  285.     echo "current lock file exists, unable to start rsync!"  
  286.     exit 1  
  287.   fi  
  288. fi  
  289.   
  290. touch $LOCK  
  291. # Note: on some non-Debian systems, trap doesn't accept "exit" as signal  
  292. # specification. If that's the case on your system, try using "0".  
  293. trap "rm -f $LOCK" exit  
  294.   
  295. set +e  
  296.   
  297. # First sync /pool  
  298. rsync --recursive --links --hard-links --times \  
  299.      --verbose \  
  300.      --timeout=3600 \  
  301.      $TMP_EXCLUDE $EXCLUDE $SOURCE_EXCLUDE \  
  302.      $RSYNC_HOST::$RSYNC_DIR/pool/ $TO/pool/ >> $LOGFILE 2>&1  
  303. result=$?  
  304.   
  305. if [ "$result" = 0 ]; then  
  306.     # Now sync the remaining stuff  
  307.     rsync --recursive --links --hard-links --times \&nb
    sp; 
  308.          --verbose \  
  309.          --delay-updates --delete-after \  
  310.          --timeout=3600 \  
  311.          --exclude "Archive-Update-in-Progress-${HOSTNAME}" \  
  312.          --exclude "project/trace/${HOSTNAME}" \  
  313.          $TMP_EXCLUDE $EXCLUDE $SOURCE_EXCLUDE \  
  314.          $RSYNC_HOST::$RSYNC_DIR$TO >> $LOGFILE 2>&1  
  315.   
  316.     LANG=C date -u > "${TO}/project/trace/${HOSTNAME}"  
  317.     echo "Used anonftpsync version: ${VERSION}" >> "${TO}/project/trace/${HOSTNAME}"  
  318.     echo "Upstream-mirror: ${RSYNC_HOST}" >> "${TO}/project/trace/${HOSTNAME}"  
  319.     echo "Revision: i18n inRelease AUIP" >> "${TO}/project/trace/${HOSTNAME}"  
  320. else  
  321.     echo "ERROR: Help, something weird happened" | tee -a $LOGFILE  
  322.     echo "mirroring /pool exited with exitcode" $result | tee -a $LOGFILE  
  323. fi  
  324.   
  325.   
  326. if [ -n "$MAILTO" ]; then  
  327.     mail -s "debian archive synced" $MAILTO < $LOGFILE  
  328. fi  
  329.   
  330. savelog $LOGFILE >/dev/null  
  331.   
  332. rm $LOCK  
» 转载请注明来源:若我若鱼 » 搭建私有镜像源

Leave a Reply

Your email address will not be published. Required fields are marked *

11 − 5 =