创建本地ubuntu mirror(镜像)

前两天成功“欺骗”一位同事安装了个ubuntu dapper,能够得手的原因主要是他忙于在网上看小说,原来的xp被恶意软件、恶意网站和病毒搞垮了,而我为他安装的linux和firefox对这些都基本免疫,所以才能够得手。如果能够再克服activex和msword两个障碍,就可以推广到更大的范围了。

安装很顺利,不过使用的是外置usb光驱启动安装,所以读盘的速度比较慢,下回我会尝试下载一个server版的光盘安装,会快很多,只是安装完要在手工安装desktop包。另外安装完成以后按照“官方配置指南”配置中文和java等也需要下载一些东西,我这里是网通的线路,官方的源中很少有快的,除了国立台湾大学的。不过这样总不是办法,随着线路情况的变化,这些源的快慢变化不定,还是局域网内有一个稳定的源最为稳妥,所以萌生了mirror一个ubuntu的念头。

作一个镜像也很简单的,只要有一台ubuntu,配置好apache,安装上rsync程序,准备足够的硬盘空间,就可以了,通过rsync编写一个小的脚本,就可以了,脚本如下:

	#! /bin/bash
	rsync -aPS --delete-after \
		--exclude *amd64* --exclude *ia64* \
		--exclude *powerpc* --exclude *sparc* \
		--exclude *hoary* --exclude *warty* \
		--exclude *breezy* \
		--exclude *.iso \
		--exclude *.orig.tar.gz --exclude *.diff.gz \
		--exclude *.dsc \
		rsync://archive.ubuntu.com/ubuntu \
		/home/ubuntu

这个例子抄自这里,从hiweed传出来的,不过注释有些小错误,更正如下:

  • exclude amd64 ia64 powerpc sparc 是去掉不想要的架构
  • exclude hoary warty breezy 是去掉不想要的发行版本
  • exclude .iso 是去掉光盘镜像文件
  • exclude orig diff dsc 是去掉源代码软件包(?)
  • rsync://… 是镜像来源,和source.list中的一样
  • /home/ubuntu 是镜像文件保存到哪里

apache配置虚拟目录就不说了,以后局域网的电脑的source.list就简单了,比如deb http://ubuntu.csie.ntu.edu.tw/ubuntu/ dapper main restricted universe multiverse里面,把网址http://…部分更换成内网服务器地址,比如http://server/ubuntu/就可以了。

crontab -e把这个脚本放到cron中,每天执行,嘿嘿。

	# m h  dom mon dow   command
	0 4 * * * /home/fwolf/rsync_ubuntu.sh

镜像不知道需要花费多少空间,有了结果以后再告诉大家。

update @ 2007-02-06 顺路推荐一个不错的,可以在win、linux、osx等各种os环境下运行的,类似中游和联众的联网游戏,蓝迪游戏,除了现在人少点,别的都还不错,甚至支持龙芯电脑

update @ 2007-02-12 补充一点,不是所有apt源都可以作为rsync源的,因为对方可能只开了http,没有开rsync。现在知道的,至少archive和us.archive.ubuntu.com这系列的服务器是都支持的。

update @ 2007-02-19 只镜像edgy的i386部分,不要iso不要源码,花费73G空间,够大的,寒!

update @ 2007-02-22 上面介绍的那个蓝迪游戏,不是人少么?但是可以邀请机器人陪玩,虽然性质有点像单机游戏了,可是机器人的水平可真不低,斗地主的时候出炸弹的时机掌握得也很好,刚才被搞得很郁闷:(。在线游戏刚开始运行人少的时候,不失为一个不错的办法,即使是人多了,也可以当作rpg中的npc打怪赚钱嘛。

update @ 2007-03-07 Ubuntu in Launchpad这里有一份完整的官方ubuntu镜像站点清单,不仅列出了每个站点的所在国家和带宽情况,标注有“Alternatives: rsync”的就是可以使用rsync进行同步的站点。

另外还找到了一篇通过apt-mirror建立镜像的文章,可以参考。

同时,如果镜像过来的文件是存储在通过samba访问的windows共享目录下的话,会因为windows无法正确设置文件权限和日期而导致每次都需要从头开始同步,打开”-checksum”参数通过md4校验值来解决这个问题的话又巨慢,每次同步的时候,两端都要对所有文件计算checksum,所以,可以下载cwRsync(windows下运行的把cygwin和rsync打包在一起的一个软件),从windows这端来同步文件,对外提供共享服务仍然用linux。

Update @ 2007-10-29

这种方式建立的镜像是完全镜像(full archives),需要180~220G空间,难怪磁盘空间不够。像我这种在局域网中提供服务的,建立一个发行版镜像就可以了(releases mirror),只需要大约30G空间。并且使用apt-mirror来作这个镜像比rsync要简便得多。

参考
  • [完整的ubuntu镜像源/本地源/离线升级包制作总结](http://negoo.cn/log/read.php/2.htm)
  • [Types of Mirrors](http://www.ubuntu.com/node/1283)
  • [How To Create A Local Debian/Ubuntu Mirror With apt-mirror](http://www.howtoforge.com/local_debian_ubuntu_mirror)

Update @ 2009-04-21

发现一种假死现象,4月7号在apt-mirror中添加了9.04 jaunty源的下载,到20号了还没看到动静,仔细查看archive-log.0发现大量的错误:

HTTP request sent, awaiting response... Read error (Connection reset by peer) in headers.
Retrying.

--2009-04-21 01:08:19--  (try:76068)

重启apt-mirror进程也无效,开始怀疑是磁盘空间不足的问题,但怎么看也不像。后来发现存在有4月7号开始的wget进程,一直没有结束。看来就是这样的进程即导致了刚才错误中的重试7万多次,也“堵塞”了后续的操作,因为apt-mirror总进程数是有限的嘛。

杀掉这些wget进程,更新恢复。

2 thoughts on “创建本地ubuntu mirror(镜像)”

  1. 我身边都没有Linux高手--! 要不然我也去安装

    (我就安装Linux,不过用的话,很多软件需要学习;没有那么多时间呀)

    希望高手能加我一下MSN lwjct@hotmail.com 暂时我就用VMware撑着--!

Leave a Reply

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