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

From ArchWiki
Jump to: navigation, search
m (替代方法)
(15 intermediate revisions by 9 users not shown)
Line 1: Line 1:
 
[[Category:Package management (简体中文)]]
 
[[Category:Package management (简体中文)]]
[[Category:HOWTOs (简体中文)]]
 
 
[[Category:简体中文]]
 
[[Category:简体中文]]
 +
[[en:Local Mirror]]
 +
[[ru:Local Mirror]]
 +
{{translateme (简体中文)|Article has been updated. To be translated.}}
  
{{i18n_links_start}}
+
{{警告|如果你想创建一个官方镜像,参考 [https://wiki.archlinux.org/index.php/DeveloperWiki:NewMirrors 这个页面]。}}
{{i18n_entry|English|Local Mirror}}
+
{{i18n_entry|简体中文|本地镜像 (简体中文)}}
+
{{i18n_links_end}}
+
  
 +
==STOP==
  
{{translateme}}
+
{{警告|通常不赞成创建一个本地镜像,因为需要很大的带宽。其中一个替代的方法也许会满足你的要求。请查看下面的替代方法。}}
  
'''注意:''' 95%的用户不需要这么做。同步core和extra上的所有软件包会带来许多你所不需要的东西。只有当你的站点运行着许多 Arch 系统时,或者想要创建一个官方镜像时,才有必要按照以下指导进行。也许使用 [[Network Shared Pacman Cache]] 会更好地满足你的需要。
+
====替代方法====
 +
*[[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缓存]]
  
'''注意:''' 由于流量的问题,只允许官方镜像同步 rsync.archlinux.org。如果你想要建立一个官方镜像——发送邮件到邮件列表说明此事,之后 /etc/pacman.d/* 中的入口会被添加,你的 IP 地址也将被允许。
+
==本地镜像==
  
如果你只是用于个人使用,可以同步自 '''rsync://distro.ibiblio.org/distros/archlinux/'''
+
===需要牢记的事实===
 +
* 镜像的带宽不是免费的,镜像必须为提供给你的数据付费
 +
** 尽管你已经为你的ISP付费,这也是成立的。
 +
* 有很多你可能下载了却永远用不到的包
 +
* 镜像的管理员会更喜欢让你仅下载需要的包
 +
* 再次请求仔细查看上面的替代方案
  
本文档描述了如何在你的本地计算机上创建、更新、发布、使用一个 Arch 镜像站点上全部软件包和iso文件的镜像。
+
'''如果你完全确定本地镜像是唯一合适的解决方案,那么按照下面的指引操作。'''
  
== 安装准备 ==
+
===服务器设置===
 +
====Building Rsync Command====
 +
* Use the rsync arguments from [https://wiki.archlinux.org/index.php/DeveloperWiki:NewMirrors DeveloperWiki:NewMirrors]
 +
* Select a server from the above article
 +
* Exclude folder/files you do not want by including {{Ic|1=--exclude-from="/path/to/exclude.txt"}} in the rsync arguments. Example contents might include:
 +
<pre>
 +
iso
  
首先,更新或是安装安装必要的工具:
+
#Exclude i686 Packages
pacman -Sy rsync vsftpd
+
*/os/i686
 +
pool/*/*-i686.pkg.tar.xz
 +
pool/*/*-i686.pkg.tar.gz
  
现在,我们要创建一个用于同步镜像的新用户('''没有登录特权'''),使用FTP获取文件。用户名“mirror”只是一个例子,你可以使用其他任何名称。请'''不要'''使用root或是其他能登录系统的帐号。安全起见,我们使用的帐号只能拥有尽可能少的权限。
+
#Exclude x86_64 Packages
 +
*/os/x86_64
 +
pool/*/*-x86_64.pkg.tar.xz
 +
pool/*/*-x86_64.pkg.tar.gz
 +
</pre>
  
useradd -m -s /bin/false mirror
+
* 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}
 +
* Exclude any top-level directories that you do not need
  
现在,我们将继续创建镜像。
+
Example: {{Ic|1=rsync ''$rsync_arguments'' --exclude="/path/to/exclude.txt" ''rsync://example.com/'' /path/to/destination}}
  
== 创建本地镜像目录 ==
+
====Example Script====
我们将使用 <tt>/home/mirror</tt>,刚才所创建的非特权用户的主目录,用于存储脚本,日志以及软件包。
+
  
首先要做的是在 /home/mirror 下创建几个目录 :
+
{{Warning|DO NOT USE THIS SCRIPT UNLESS YOU HAVE READ WARNINGS AT THE START OF THIS ARTICLE}}
 +
{{Warning|Only use this script to sync Core/Extra/Community! If you need Testing, gnome-unstable or any other repo, use rsync --exclude instead!}}
  
cd /home/mirror
+
Yes, this script is partially broken '''ON PURPOSE''' to avoid people doing copy-and-paste to create their own mirror. It should be easy to fix if you REALLY want a mirror.
sudo -u mirror mkdir {scripts,files,logs}
+
 
+
== 同步脚本 ==
+
 
+
现在让我们用最喜爱的编辑器创建实际的 rsync 脚本, <tt>scripts/mirrorsync.sh</tt> 。
+
  
 
  #!/bin/bash
 
  #!/bin/bash
#
 
# The script to sync a local mirror of the Arch Linux repositories and ISOs
 
#
 
# Copyright (C) 2007 Woody Gilk <woody@archlinux.org>
 
# Modifications by Dale Blount <dale@archlinux.org>
 
# and Roman Kyrylych <roman@archlinux.org>
 
# Licensed under the GNU GPL (version 2)
 
 
   
 
   
  # Filesystem locations for the sync operations
+
  #################################################################################################
  SYNC_HOME="/home/mirror"
+
### It is generally frowned upon to create a local mirror due the bandwidth that is required.
  SYNC_LOGS="$SYNC_HOME/logs"
+
### One of the alternatives will likely fulfill your needs.
  SYNC_FILES="$SYNC_HOME/files"
+
### REMEMBER:
  SYNC_LOCK="$SYNC_HOME/mirrorsync.lck"
+
###  * 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.
 +
#################################################################################################
 
   
 
   
  # Select which repositories to sync
+
  # Configuration
  # Valid options are: core, extra, testing, community, iso
+
  SOURCE='rsync://mirror.example.com/archlinux'
  # Leave empty to sync a complete mirror
+
  DEST='/srv/mirrors/archlinux'
  # SYNC_REPO=(core extra testing community iso)
+
  BW_LIMIT='500'
  SYNC_REPO=()
+
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'
 
   
 
   
  # Set the rsync server to use
+
  # Make sure only 1 instance runs
# Only official public mirrors are allowed to use rsync.archlinux.org
+
  if [ -e "$LCK_FLE" ] ; then
# SYNC_SERVER=rsync.archlinux.org::ftp
+
OTHER_PID=`/bin/cat $LCK_FLE`
SYNC_SERVER=distro.ibiblio.org::distros/archlinux
+
echo "Another instance already running: $OTHER_PID"
+
exit 1
# Set the format of the log file name
+
# This example will output something like this: sync_20070201-8.log
+
LOG_FILE="pkgsync_$(date +%Y%m%d-%H).log"
+
+
# Do not edit the following lines, they protect the sync from running more than
+
# one instance at a time
+
  if [ ! -d $SYNC_HOME ]; then
+
  echo "$SYNC_HOME does not exist, please create it, then run this script again."
+
  exit 1
+
 
  fi
 
  fi
 +
echo $$ > "$LCK_FLE"
 
   
 
   
  [ -f $SYNC_LOCK ] && exit 1
+
  for REPO in $REPOS ; do
touch "$SYNC_LOCK"
+
echo "Syncing $REPO"
  # End of non-editable lines
+
echo /usr/bin/rsync $RSYNC_OPTS ${SOURCE}/${REPO} ${DEST}
 +
  done
 
   
 
   
  # Create the log file and insert a timestamp
+
  # Cleanup
  touch "$SYNC_LOGS/$LOG_FILE"
+
  /bin/rm -f "$LCK_FLE"
echo "=============================================" >> "$SYNC_LOGS/$LOG_FILE"
+
echo ">> Starting sync on $(date --rfc-3339=seconds)" >> "$SYNC_LOGS/$LOG_FILE"
+
echo ">> ---" >> "$SYNC_LOGS/$LOG_FILE"
+
 
   
 
   
if [ -z $SYNC_REPO ]; then
 
  # Sync a complete mirror
 
  rsync -rptLv --delete-after --delay-updates $SYNC_SERVER "$SYNC_FILES" >> "$SYNC_LOGS/$LOG_FILE"
 
else
 
  # Sync each of the repositories set in $SYNC_REPO
 
  for repo in ${SYNC_REPO[@]}; do
 
    repo=$(echo $repo | tr [:upper:] [:lower:])
 
    echo ">> Syncing $repo to $SYNC_FILES/$repo" >> "$SYNC_LOGS/$LOG_FILE"
 
 
    # If you only want to mirror i686 packages, you can add
 
    # " --exclude=os/x86_64" after "--delete-after"
 
    #
 
    # If you only want to mirror x86_64 packages, use "--exclude=os/i686"
 
    # If you want both i686 and x86_64, leave the following line as it is
 
    #
 
    rsync -rptlv --safe-links --delete-after --delay-updates $SYNC_SERVER/$repo "$SYNC_FILES" >> "$SYNC_LOGS/$LOG_FILE"
 
 
    # Create $repo.lastsync file with timestamp like "2007-05-02 03:41:08+03:00"
 
    # which may be useful for users to know when the repository was last updated
 
    # date --rfc-3339=seconds > "$SYNC_FILES/$repo.lastsync"
 
 
    # Sleep 5 seconds after each repository to avoid too many concurrent connections
 
    # to rsync server if the TCP connection does not close in a timely manner
 
    sleep 5
 
  done
 
fi
 
 
# Insert another timestamp and close the log file
 
echo ">> ---" >> "$SYNC_LOGS/$LOG_FILE"
 
echo ">> Finished sync on $(date --rfc-3339=seconds)" >> "$SYNC_LOGS/$LOG_FILE"
 
echo "=============================================" >> "$SYNC_LOGS/$LOG_FILE"
 
echo "" >> "$SYNC_LOGS/$LOG_FILE"
 
 
# Remove the lock file and exit
 
rm -f "$SYNC_LOCK"
 
 
  exit 0
 
  exit 0
  
这只是一个并不十分精巧,能完成我们所需的稍微高级的bash脚本。让我们使其具有可执行权限。
 
 
chmod +x scripts/mirrorsync.sh
 
 
现在你已经有一个很容易修改的脚本。不过你可能不是很愿意每次都手动执行,我们可以设置一个cron任务来运行它。
 
 
在进行下一步前注意:你的 logs 目录将会逐渐增大。确保定期检查目录大小以防你的服务器因此崩溃。推荐设置 [[LogRotate]] 或者写一些清理脚本以处理。
 
 
== 运行  cron 任务 ==
 
 
首先,确保具有必须的 cron 工具 (大多数的Archlinux都有):
 
 
pacman -S dcron
 
 
我们将用 <tt>crontab</tt> 运行 cron 任务。详情,参见 <tt>man crontab</tt>。用 crontab 而不是散落在 <tt>/etc/cron.*</tt> 各处的文件,来执行 sync 的好处是更高的安全性。它也使脚本运行有了更高级的控制。
 
 
以如下内容创建 <tt>scripts/mirror.cron</tt> :
 
 
0 3 * * * /home/mirror/scripts/mirrorsync.sh
 
 
现在我们要激活我们的 crontab:
 
 
sudo -u mirror crontab scripts/mirror.cron
 
 
确认该 crontab 得到了我们的任务:
 
 
sudo -u mirror crontab -l
 
 
你将会看到 <tt>scripts/mirror.cron</tt> 的内容被显示出来。如果没有重新运行以上命令并检查。
 
 
这个 cron 设置将会在每天凌晨3点运行我们的 sync.sh 脚本。你可以随意调整这个时间,参见 http://www.adminschoice.com/docs/crontab.htm 了解更多 crontab 语法。
 
 
=== 修改 cron 任务 ===
 
如果你需要修改 <tt>mirror.cron</tt>,使用以下命令:
 
 
sudo -u mirror crontab -e
 
 
如果你手动修改了这个文件,使用以下命令更新 crontab:
 
 
sudo -u mirror crontab scripts/mirror.cron
 
 
现在我们开始设置 pacman 来使用这个本地镜像。
 
 
== 设置 pacman 使用本地镜像 ==
 
 
如果只想在一台计算机上访问镜像,按照如下步骤进行。
 
 
=== 单台计算机 ===
 
 
'''注意:''' 如果你只是为一台计算机准备本地镜像,那就是毫无意义地占用了大量的带宽。为需要的人节约带宽吧。应用本节需同样遵循以下各节。
 
 
这种情况下你无需 vsftpd,因为我们将使用 file:// 定位符访问文件,而不是 ftp:// 定位符。
 
 
在 <tt>/etc/pacman.d/core</tt> 的开头,服务器列表的顶部添加如下行:
 
 
Server = file:///home/mirror/files/core/os/i686
 
 
可以将 <tt>/core/</tt> 替换成你所镜像的软件库后添加 (例如:对于 community 库,该行应该像这样):
 
 
Server = file:///home/mirror/files/community/os/i686
 
 
如果你的系统是64位的,确保将 <tt>i686</tt> 改为 <tt>x86_64</tt>。
 
 
=== 多台计算机 ===
 
 
这种方式同步允许多台计算机访问你的本地镜像。你同样能够使用这种方法同步到你的本地计算机(详情附后)。
 
 
==== FTP服务器配置 ====
 
 
我们要做的第一步是配置 vsftpd。编辑 <tt>/etc/vsftpd.conf</tt> 成以下内容:
 
 
# vsftpd config file /etc/vsftpd.conf
 
#
 
# Setup for a secure anonymous FTP server
 
#
 
# Listen (non-xinetd) mode
 
listen=YES
 
# Use tcp_wrappers to control connections
 
tcp_wrappers=YES
 
# Use localtimes instead of GMT for files
 
use_localtime=YES
 
# Hide the true user/group ID of files
 
hide_ids=YES
 
#
 
# Enable anonymous access (pacman requires this)
 
anonymous_enable=YES
 
# Use this user for anonymous logins
 
ftp_username=mirror
 
# Chroot directory for anonymous user
 
anon_root=/home/mirror/files
 
# Don't require a password for anonymous access (pacman requires this)
 
no_anon_password=YES
 
#
 
# User to run vsftpd as (same as ftp_username)
 
nopriv_user=mirror
 
# Enable recursive "ls" listing
 
ls_recurse_enable=YES
 
#
 
# Forcefully destroy sessions after X seconds of inactivity
 
# (It is highly recommended to not set this above 300)
 
idle_session_timeout=120
 
# Forcefully stop sending data after X seconds of inactivity during a transfer
 
# (It is highly recommended to not set this higher than idle_session_timeout)
 
data_connection_timeout=30
 
 
如此设置 FTP server 将十分安全,且根据我们的需要量身定制。注意这样设置的服务器“不”要求口令,并且不应被用于公共网络(除非这是你想要的)。''使用口令保护 FTP 服务器并使其仍能被 pacman 正常访问超出了本文档的讨论范围。''
 
 
如果你将从外部连接到这台计算机,需要添加如下行到  <tt>/etc/hosts.allow</tt> 中:
 
 
vsftpd : ALL : ALL
 
 
注意这将允许'''所有人'''能下载这个镜像。如果你需要更严格地控制下载,并且不知道怎么做,参考 [http://linux.about.com/od/commands/l/blcmdl5_hostsal.htm linux.about.com] 的相关主题。
 
 
现在启动 vsftpd:
 
 
sudo /etc/rc.d/vsftpd start
 
 
如果 vsftpd 没有启动,检查 <tt>/etc/vsftpd.conf</tt> 文件中各选项设置是否正确。
 
 
==== 为 pacman 激活该镜像 ====
 
 
现在编辑 <tt>/etc/pacman.d/*</tt> 来使用我们全新的镜像。在 <tt>/etc/pacman.d/core</tt> 的开头,服务器列表的顶部添加如下行:
 
 
Server = ftp://192.168.1.21/core/os/i686
 
 
注意 <tt>192.168.1.21</tt> 是我的测试计算机的 IP 地址。你的地址可能会完全不同。(记住你可以通过<tt>ifconfig -a</tt> 或者 <tt>ifconfig eth0</tt> 获取 Arch 计算机的的当前IP地址。)
 
 
如果你想在本地计算机上使用相同镜像,使用如下行:
 
 
Server = ftp://localhost/core/os/i686
 
 
重复相同的过程添加其他的镜像软件库。非本地计算机需要使用一个IP地址以访问软件库。同样要确保该镜像服务器拥有一个静态的IP地址。
 
 
== 首次同步 ==
 
 
痛苦来临!(Here comes the pain! )运行以下命令开始首次同步:
 
 
sudo -u mirror ./scripts/mirrorsync.sh
 
 
脚本没有任何输出信息,但是你可能需要一些。可以使用这个命令(使用实际的日志文件名)检视同步过程:
 
 
tail -f logs/pkgsync_20070203-9.log
 
  
根据你的Internet连接速度和镜像的软件库数量,这个过程通常需要花费数个小时。首次镜像后,只有新的软件包将会被同步,所以速度会很快。
+
====Another mirror script using lftp====
 +
lftp can mirror via several different protocols: ftp, http, etc. It also restarts on error, and can run in the background. Put this into your $PATH for an easy way to mirror that continues if you log out.
  
等待首次同步完成后,运行 <tt>pacman -Sy</tt> 以确保你的新镜像得到正确的同步。
+
#!/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 &
  
大功告成!你现在正运行着一个能够提供高速软件包升级的本地镜像。
+
if you want to see the current status of the mirror. open lftp on terminal and type 'attach <PID>'
  
== ==
+
====Partial mirroring====
  
本指南的初版由 busfahrer 编写。可以通过 [[ArchChannel|#archlinux]] on irc.freenode.net 联系他。
+
Mirroring only some repositories is definitely not easy, due to the centralization of most packages in `pool/`.
 +
See [http://blog.invokk.net/2012/01/mirroring-only-some-repositories-of-archlinux/ this blog post] for an attempt at writing a script for this task.
  
第二版由 Shadowhand 编写。可以通过 [[ArchChannel|#archlinux]] on irc.freenode.net 联系他。
+
====Serving====
 +
*HTTP (LAN)
 +
**[[LAMP]]
 +
**[[Lighttpd]]
 +
*FTP (LAN)
 +
**[[vsftpd]]
 +
*Physical Media
 +
**Flash Drive
 +
**External HD
  
欢迎评论或建议。
+
===Client Configuration===
 +
*Add the proper Server= variable in /etc/pacman.d/mirrorlist
 +
*For physical media (such as flash drive) the following can be used: Server = file:///mnt/media/repo/$repo/os/$arch (''where /mnt/media/repo is directory where local mirror located'')

Revision as of 14:10, 14 March 2013

Tango-preferences-desktop-locale.png本页面需要更新翻译,内容可能已经与英文脱节。要贡献翻译,请访问简体中文翻译组Tango-preferences-desktop-locale.png

附注: Article has been updated. To be translated.
警告: 如果你想创建一个官方镜像,参考 这个页面

STOP

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

替代方法

本地镜像

需要牢记的事实

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

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

服务器设置

Building Rsync Command

  • Use the rsync arguments from DeveloperWiki:NewMirrors
  • Select a server from the above article
  • Exclude folder/files you do not want by including --exclude-from="/path/to/exclude.txt" in the rsync arguments. Example contents might include:
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}
  • Exclude any top-level directories that you do not need

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

Example Script

Warning: DO NOT USE THIS SCRIPT UNLESS YOU HAVE READ WARNINGS AT THE START OF THIS ARTICLE
Warning: Only use this script to sync Core/Extra/Community! If you need Testing, gnome-unstable or any other repo, use rsync --exclude instead!

Yes, this script is partially broken ON PURPOSE to avoid people doing copy-and-paste to create their own mirror. It should be easy to fix if you REALLY want a mirror.

#!/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


Another mirror script using lftp

lftp can mirror via several different protocols: ftp, http, etc. It also restarts on error, and can run in the background. 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 &

if you want to see the current status of the mirror. open lftp on terminal and type '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

Client Configuration

  • Add the proper Server= variable in /etc/pacman.d/mirrorlist
  • For physical media (such as flash drive) the following can be used: Server = file:///mnt/media/repo/$repo/os/$arch (where /mnt/media/repo is directory where local mirror located)