个人工具

UbuntuHelp:AptProxy/zh

来自Ubuntu中文

Qiii2006讨论 | 贡献2010年4月5日 (一) 20:20的版本 相关链接

(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航, 搜索

简述

apt-proxy程序将你从网络上下载下来的软件包缓存到本地磁盘。apt-proxy的行为就像一台包含那些你所选择软件包全部拷贝的HTTP服务器。你可以从本地网络上的其他计算机上存取这些软件包。如果软件包还没有被缓存,apt-poxy会自动下载并缓存上。这对那些需要重复安装同样软件包的人来说(如,为多台机子升级),非常有效的节约了下载带宽和安装的时间。

安装

apt-proxy 已经包含在通用档案文件中。要安装,在终端中运行命令:

sudo apt-get install apt-proxy

配置apt-proxy服务器

默认设置

在apt-proxy配置文件 /etc/apt-proxy/apt-proxy-v2.conf 的第一节中,包含了apt-proxy及其缓存的默认设置。第一步就是设置 address 参数,将其设置为内网中作为apt-proxy服务器的IP。 如果该项被注释掉,apt-proxy会监听服务器的所有的IP地址。port 参数指定了apt-proxy要监听的请求端口,其默认设置为9999,通常情况下用这个值就很合适了。 如果你想改变apt-proxy缓存软件包的目录,更改 cache_dir 参数即可。缓存目录默认设为 /var/cache/apt-proxy。如果你使用了网页代理服务器(如,Squid),你可以配置apt-proxy使用代理,设置方法为 http_proxy = proxy_server:port 。如果你在防火墙之後,那么你用主动FTP连接去连接到一个FTP後端时可能会出问题。而 passive_ftp = on 应该能解决这个问题。另外的一个值控制软件包在缓存中保存多长时间。也就是说,在apt-proxy检查更新版本前软件包应至少存在了多长时间,或者说缓存中的软件包每隔多长时间查找一次更新版本。在到达这个默认值时,它们就被安全地抛弃了。

後端

apt-proxy知道从哪个远程软件仓库中查找软件包,这是由于其引入了一个後端设置。通过 /etc/apt-proxy/apt-proxy-v2.conf 中的 backend 节来完成後端设置。一个後端 Ubuntu条目看起来类似于这样:

[ubuntu]
;; Ubuntu archive
backends =
http://archive.ubuntu.com/ubuntu
http://de.archive.ubuntu.com/ubuntu

正如你看到的那样,可以指定多个服务器,使用空白来分隔开。如果第一个服务器挂了,apt-proxy会试着从第二个服务器获取数据,如此类推。注意: 如果第一个服务器正常工作,但是没有需要的文件,apt-proxy并不会向後使用第二个服务器。你可以在[default]节复盖该设置志。如下实例,如果你知道某个服务器对请求的应答时间很长,那么你可以增加 timeout 的值:

[ubuntu-slow]
timeout = 60 ;wait 1 Minute
backends = prot://some.very.slow.server.net/ubuntu-slow

一个完整的 apt-proxy-v2.conf示例如下:

[DEFAULT]
;; All times are in seconds, but you can add a suffix
;; for minutes(m), hours(h) or days(d)

address = 127.0.0.1
port = 9999
cache_dir = /var/cache/apt-proxy

;; Control files (Packages/Sources/Contents) refresh rate
min_refresh_delay = 1s
complete_clientless_downloads = 1

;; Debugging settings.
debug = all:4 db:0

timeout = 30
passive_ftp = on

;;--------------------------------------------------------------
;; Cache housekeeping

cleanup_freq = 1d
max_age = 120d
max_versions = 3

;;---------------------------------------------------------------
;; Backend servers
;;
;; Place each server in its own [section]

[ubuntu]
; Ubuntu archive
backends =
http://archive.ubuntu.com/ubuntu
http://de.archive.ubuntu.com/ubuntu

[ubuntu-security]
; Ubuntu security updates
backends = http://security.ubuntu.com/ubuntu

[marillat]
backends = http://mirrors.ecology.uni-kiel.de/debian/debian-multimedia

[debian]
; Backend servers, in order of preference
backends =
http://ftp.us.debian.org/debian
http://ftp.de.debian.org/debian
http://ftp2.de.debian.org/debian
ftp://ftp.uk.debian.org/debian

[debian-non-US]
; Debian debian-non-US archive
backends =
http://ftp.uk.debian.org/debian-non-US
http://ftp.de.debian.org/debian-non-US
ftp://ftp.uk.debian.org/debian

[security]
; Debian security archive
backends =
http://security.debian.org/debian-security
http://ftp2.de.debian.org/debian-security

[openoffice]
; OpenOffice.org packages
backends =
http://ftp.freenet.de/pub/debian-openoffice
http://ftp.sh.cvut.cz/MIRRORS/OpenOffice.deb
http://borft.student.utwente.nl/debian

[apt-proxy]
; Apt-proxy new versions
backends = http://apt-proxy.sourceforge.net/apt-proxy

备注 你不要指定这些文件的发布版本;Ubuntu,自己能够获取所有的版本信息(Hoary, Breezy, Dapper 等等)。哪些文件会被下载取决于每个客户端 sources.list 的配置。

初始化apt-proxy

更改完apt-proxy配置文件后,要重启apt-proxy来更新列表,可以运行如下命令:

$ sudo /etc/init.d/apt-proxy restart

你的apt-proxy现在就可以用了。

导入apt缓存

注意:在软件仓库中当前版本(1.933ubuntu1)的apt-proxy,本操作可能不能正确工作。这是一个已知bug。如果无意中尝试进行了本操作,那么也不会对系统产生副作用。已经用apt-get下载下来的软件包,已经被缓存在 /var/cache/apt/archives中。这些包可以用 apt-proxy-import 从当前包列表中导入到apt-proxy缓存中。应该在 apt-proxy-import 前先运行 aptitude update 来取得更新列表,如下:

$ sudo aptitude update
$ sudo apt-proxy-import -r /var/cache/apt/archives

使用apt代理服务器更新客户端

apt客户端需要将 /etc/apt/sources.list 文件重新配置成指向apt-proxy服务器来代替原来的外部地址。配置 sources.list 文件与配置通常的apt仓库很相似,只要将 backend 节添加到路径中:

deb http://apt-proxy:port/backend dist component

将其中软件仓库的URL替换为你的服务器的引用及其后端,如下:

deb http://archive.ubuntu.com/ubuntu dapper main restricted
deb http://security.ubuntu.com/ubuntu dapper-security main restricted universe

将变为

deb http://server:9999/ubuntu dapper main restricted
deb http://server:9999/ubuntu-security dapper-security main restricted universe

与上面的 apt-proxy-v2.conf 相配合的 sources.list 如下:

# apt-proxy entries for standard modules
deb http://localhost:9999/ubuntu dapper main restricted universe multiverse
deb-src http://localhost:9999/ubuntu dapper main restricted universe multiverse

# apt-proxy entries for security patches
deb http://localhost:9999/ubuntu-security dapper-security main restricted universe multiverse
deb-src http://localhost:9999/ubuntu-security dapper-security main restricted universe multiverse

故障解决

获取包的问题

使用Dapper Drake,以及其他Ubuntu的计算机在连接代理时接收软件仓库列表文件头时可能会发生问题。如果你的计算机在连接代理时碰上了这个问题,请编辑 /etc/apt/apt.conf,运行:

sudo nano /etc/apt/apt.conf

你也可以选择别的文本编辑器。找到

Acquire::http::Proxy "false";

更改为

Acquire::Proxy "false";

然后保存,退出。再次更新软件仓库文件列表,运行

sudo apt-get update

或者使用其他的方法更新软件仓库(如,在更新管理器中检查或在新立得软件包管理中更新)。现在应该可以正确载入了。

连接被拒绝

由于某些设置,代理不能用于外界的机器。代理可以很好在本地主机工作,但是用于外部的机器就会失败。

相关链接