Difference between revisions of "Local Mirror (简体中文)"

From ArchWiki
Jump to: navigation, search
(STOP)
Line 9: Line 9:
 
{{警告|通常不赞成创建一个本地镜像,因为需要很大的带宽。其中一个替代的方法也许会满足你的要求。请查看下面的替代方法。}}
 
{{警告|通常不赞成创建一个本地镜像,因为需要很大的带宽。其中一个替代的方法也许会满足你的要求。请查看下面的替代方法。}}
  
====替代方法====
+
==== 替代方法 ====
*[[Pacman_Tips_(简体中文) #.E5.9C.A8.E7.BD.91.E7.BB.9C.E4.B8.8A.E5.85.B1.E4.BA.ABpacman.E7.BC.93.E5.AD.98|在网络上共享pacman缓存]]
+
*[[Pacman_Tips_(简体中文) #.E5.9C.A8.E7.BD.91.E7.BB.9C.E4.B8.8A.E5.85.B1.E4.BA.ABpacman.E7.BC.93.E5.AD.98|在网络上共享 pacman 缓存]]
  
 
==本地镜像==
 
==本地镜像==

Revision as of 23:04, 23 May 2013

警告: 如果你想创建一个官方镜像,参考 这个页面

STOP

警告: 通常不赞成创建一个本地镜像,因为需要很大的带宽。其中一个替代的方法也许会满足你的要求。请查看下面的替代方法。

替代方法

本地镜像

需要牢记的事实

  • 镜像的带宽不是免费的,镜像必须为提供给你的数据付费
    • 尽管你已经为你的ISP付费,这也是成立的。
  • 有很多你可能下载了却永远用不到的包
  • 镜像的管理员会更喜欢让你仅下载需要的包
  • 再次请求仔细查看上面的替代方案

如果你完全确定本地镜像是唯一合适的解决方案,那么按照下面的指引操作。

服务器设置

Building Rsync Command

  • Use the rsync arguments from DeveloperWiki:NewMirrors
  • 从上文中选择一个服务器
  • Exclude folder/files you do not want by including --exclude-from="/path/to/exclude.txt" in the rsync arguments. 示例内容可能包括:
iso

#Exclude i686 Packages
*/os/i686
pool/*/*-i686.pkg.tar.xz
pool/*/*-i686.pkg.tar.gz

#Exclude x86_64 Packages
*/os/x86_64
pool/*/*-x86_64.pkg.tar.xz
pool/*/*-x86_64.pkg.tar.gz
  • All packages reside in the pool directory. Symlinks are then created from pool to core/extra/testing/etc.
    • As of 9/21/2010 this migration is not yet complete.
      • There may be actual packages, instead of symlinks, in ${repo}/os/${arch}
  • 排除那些你不需要的顶极目录

例如: rsync $rsync_arguments --exclude="/path/to/exclude.txt" rsync://example.com/ /path/to/destination

示例脚本

Warning: 除非你阅读了本文开头的警告,否则不要使用本脚本
Warning: 仅使用本脚本同步 Core/Extra/Community! 如果你需要 Testing,gnome-unstable 或是任何其他软件库,另外使用 rsync --exclude!

是的,为了避免人们以复制粘贴的形式搭建他们自己的镜像,本脚本 故意 缺失了部分内容。如果你确实想要搭建一个镜像,错误是很容易修补的。

#!/bin/bash

#################################################################################################
### It is generally frowned upon to create a local mirror due the bandwidth that is required.
### One of the alternatives will likely fulfill your needs.
### REMEMBER:
###   * Bandwidth is not free for the mirrors. They must pay for all the data they serve you
###       => This still applies although you pay your ISP 
###       => There are many packages that will be downloaded that you will likely never use
###       => Mirror operators will much prefer you to download only the packages you need
###   * Really please look at the alternatives on this page:
###       https://wiki.archlinux.org/index.php?title=Local_Mirror
### If you are ABSOLUTELY CERTAIN that a local mirror is the only sensible solution, then this
### script will get you on your way to creating it. 
#################################################################################################

# Configuration
SOURCE='rsync://mirror.example.com/archlinux'
DEST='/srv/mirrors/archlinux'
BW_LIMIT='500'
REPOS='core extra'
RSYNC_OPTS="-rtlHq --delete-after --delay-updates --copy-links --safe-links --max-delete=1000 --bwlimit=${BW_LIMIT} --delete-excluded --exclude=.*"
LCK_FLE='/var/run/repo-sync.lck'

# Make sure only 1 instance runs
if [ -e "$LCK_FLE" ] ; then
	OTHER_PID=`/bin/cat $LCK_FLE`
	echo "Another instance already running: $OTHER_PID"
	exit 1
fi
echo $$ > "$LCK_FLE"

for REPO in $REPOS ; do
	echo "Syncing $REPO"
	echo /usr/bin/rsync $RSYNC_OPTS ${SOURCE}/${REPO} ${DEST}
done

# Cleanup
/bin/rm -f "$LCK_FLE"

exit 0

另外一个使用 lftp 的脚本

lftp can mirror via several different protocols: ftp, http, etc. It also restarts on error, 而且可以在后台运行。Put this into your $PATH for an easy way to mirror that continues if you log out.

#!/usr/bin/lftp -f
lcd /local/path/to/your/mirror
open ftp.archlinux.org (or whatever your favorite mirror is)
# Use 'cd' to change into the proper directory on the mirror, if necessary.
mirror -cve -X *i686* core &
mirror -cve -X *i686* extra &
mirror -cve -X *i686* community &
mirror -cve -X *i686* multilib &
lcd pool
cd pool
mirror -cve -X *i686* community &
mirror -cve -X *i686* packages &

如果你想要查看当前镜像的状态,在终端打开 lftp ,输入 'attach <PID>'

Partial mirroring

Mirroring only some repositories is definitely not easy, due to the centralization of most packages in `pool/`. See this blog post for an attempt at writing a script for this task.

Serving

客户端配置

  • 在 /etc/pacman.d/mirrorlist 添加合适的 Server = variable
  • 对于物理媒介 (例如闪存),可以输入如下内容: Server = file:///mnt/media/repo/$repo/os/$arch (/mnt/media/repo 是本地镜像位于的目录)