APT-CACHER(1) APT-CACHER(1)
NAME
apt-cacher - caching proxy for Debian packages
SYNOPSIS
http://proxy.example.com:3142/ [mirror] / [distribution]
DESCRIPTION
Apt-cacher is a caching proxy for Debian packages, allowing a number of
computers to share a single local cache. Packages requested from the
cache only need to be downloaded from the Debian mirrors once, no mat-
ter how many local machines need to install them. This saves internet
bandwidth and improves performance for local users, and reduces the
load on the mirrors.
Setting up apt-cacher involves two stages: installing apt-cacher itself
on a single machine on your network, and configuring all local machines
to use the cache.
The cache machine needs apt-cacher installed, which runs as a daemon or
as a CGI under a web server (eg. Apache). When Apt requests a package
from the cache machine, the request is handled by apt-cacher which
checks whether it already has that particular package. If so, the pack-
age is returned immediately to Apt for installation. If not, or if the
package in the local cache has been superseded by a more recent ver-
sion, the package is fetched from the specified mirror. While being
fetched it is simultaneously streamed to Apt, and also saved to the
local cache for future use.
Other machines on your network do not need apt-cacher installed in
order to use the local cache. The only modification to each client com-
puter is to prepend the cache machine's address and script identifier
to each HTTP mirror in /etc/apt/sources.list (depending on the instal-
lation method (see below). Apt then sends all its package requests to
the cache machine, rather than directly to the mirror.
For example, if you have a line in your sources.list that looks like
this:
deb http://mirror.aarnet.edu.au/debian unstable main contrib non-free
You would add 'proxy.example.com:3142/' at the start to make it look
like this:
deb http://proxy.example.com:3142/mirror.aarnet.edu.au/debian unstable
main contrib non-free
where 'proxy.example.com' is the address of the computer running your
apt-cacher cache.
NOTE: For installations using a web server (CGI) the prefix should be
apt-cacher in daemon mode, the modifications of sources.list can be
replaced with a HTTP proxy setting, see PROXY MODE USAGE below.
Apt-cacher currently only handles forwarding to HTTP sources. Support
for other access methods (ftp, rsync) is not planned because the main-
tainer believes that the outcome is not worth the efforts.
INSTALLATION METHODS
Apt-cacher can be installed in various ways. The recommended is running
the program as a stand-alone daemon. This should get the best perfor-
mance and the lowest overall memory usage.
To run apt-cacher in stand-alone mode, edit the file
/etc/default/apt-cacher to enable the execution, then run the init
script to start the daemon. The local clients can access the daemon
using the 'http://server:PORT/' prefix as described above (or with a
common HTTP proxy setting, see PROXY MODE USAGE). The default port is
3142 but can be changed in the config file, see above.
An alternative way is using the inetd program. This is a good method if
the daemon program should not be loaded all the time. Access control
checks are to be done using inetd or tcpd wrapper. See README.Debian
for details.
The last method is using the CGI mode. It is not recommended for long-
term use because it brings a visible performance impact on the network
and server speed. By default, apt-cacher package adds a default con-
figuration profile to Apache. The URL prefix for sources.list is
'proxy.example.com/apt-cacher?/' for a server in this mode.
In both daemon modes you can use apt-cacher to simulate a web server.
When bound to port 80 it will even emulate the behaviour of the previ-
ous CGI-based versions. However, you cannot run another web server on
that port in this case, and only root can start apt-cacher directly
because 80 is a privileged port.
OPTIONS
Apt-cacher uses a configuration file for setting important options.
Additionally there are few command line options to control the start
behaviour which you get by running apt-cacher with the "-h" argument.
The configuration file is installed by default as
/etc/apt-cacher/apt-cacher.conf. It is read every time when the daemon
starts or CGI/inetd slave are executed. Therefore apt-cacher (daemon)
may need to be restarted using the init script in order to reread its
configuration.
The options available in the config file (and their default settings)
are:
cache_dir [/var/cache/apt-cacher]
The directory where apt-cacher will store local copies of all
packages requested. This can grow to many hundreds of MB, so
make sure it is on a partition with plenty of room. NOTE: the
cache directory needs to contain some subdirectories for correct
storage management. If you try to create a custom directory,
please use the script /usr/share/apt-cacher/install.pl or use
the initially created cache directory as example.
offline_mode [ 0 ]
Avoid any outgoing connection, return files available in the
cache and just return errors if they are missing.
admin_email [root@localhost]
The email address of the administrator is displayed in the info
page and traffic reports.
allowed_hosts [*]
If your apt-cacher machine is directly exposed to the Internet
and you are worried about unauthorised machines fetching pack-
ages through it, you can specify a range of IP addresses that
are allowed to use it. Localhost (127.0.0.1) is explicitly
always allowed, other addresses must be matched by allowed_hosts
and not by denied_hosts to be permitted to use the cache. Note
that by default apt-cacher will allow requests from any client,
so set a range here if you want to restrict access. See the
default configuration file apt-cacher.conf for further details
and examples.
denied_hosts
The opposite of allowed_hosts setting, excludes hosts from the
list of allowed hosts.
allowed_hosts_6
Like allowed_hosts for IPv6 clients.
denied_hosts_6
Like denied_hosts for IPv6 clients.
allowed_locations
Access control list based on the first part of the requested URL
path (the server names). A comma separated list.
path_map
A simple scheme to rewrite the URLs, mapping symbolic names
(instead of real server names) to one or more backend servers.
See the default apt-cacher.conf file for examples.
generate_reports [1]
Whether to generate traffic reports daily. Traffic reports can
be accessed by pointing a browser to http://proxy.exam-
ple.com/apt-cacher/report/ (using the address of your own cache
of course).
clean_cache [1]
Whether to flush old packages from your cache daily. Packages
are deleted on the basis of whether they have been superseded by
newer packages, not on age, so it should be safe to leave this
on.
logdir [/var/log/apt-cacher]
Directory to use for the access and error log files and traffic
report. The access log records all successful package requests
using a timestamp, whether the request was fulfilled from cache,
the IP address of the requesting computer, the size of the pack-
age transferred, and the name of the package. The error log
records major faults, and is also used for debug messages if the
debug directive is set to 1.
expire_hours [0]
How many hours Package and Release files are cached before they
are assumed to be too old and must be re-fetched. Setting 0
means that the validity of these files is checked on each access
by comparing time stamps in HTTP headers on the server with
those stored locally.
http_proxy [proxy.example.com:8080]
Apt-cacher can pass all its requests to an external http proxy
like Squid, which could be very useful if you are using an ISP
that blocks port 80 and requires all web traffic to go through
its proxy. The format is 'hostname:port', eg: 'proxy.exam-
ple.com:8080'.
use_proxy [0]
Use of an external proxy can be turned on or off with this flag.
Value should be either 0 (off) or 1 (on):
http_proxy_auth [proxyuser:proxypass]
External http proxy sometimes need authentication to get full
access. The format is 'username:password', eg: 'proxyuser:proxy-
pass'.
use_proxy_auth [0]
Use of external proxy authentication can be turned on or off
with this flag. Value should be either 0 (off) or 1 (on):
limit [0]
Rate limiting sets the maximum bandwidth in bytes per second to
use for fetching packages. Syntax is fully defined in 'man
wget'. Use 'k' or 'm' to use kilobits or megabits / second: eg,
'limit=25k'. Use 0 or a negative value for no rate limiting.
debug [0]
Whether debug mode is enabled. Off by default. When turned on,
lots of extra debug junk will be spewed to the error log. This
can make the error log become quite big, so only use it when
trying to debug problems.
daemon_port [3142]
The TCP port for the daemon in stand-alone mode.
daemon_addr [unset]
The daemon can be limited to listen to only this local IP
address. Use with care.
user [unset]
The effective user id to change to after allocating the ports.
Useful to bind privileged port like 80.
group [unset]
The effective group id to change to.
PROXY MODE USAGE
As stated above apt-cacher can be reached with APT clients using two
methods: modification of base URLs in sources.list so that the actual
apt-cacher server is connected instead of the original server (which
still must be listed in the same URL unless an alias is used, see
path_map option). Another method follows the HTTP proxy technology.
The APT client can be configured to access apt-cacher like a usual HTTP
proxy server. In this case, all base URLs in sources.list stay unmodi-
fied, instead you need to set the proxy URL in apt.conf or via
http_proxy environment variable (see apt.conf(5) for details). Be aware
that this change affects all URLs and the server must handle that
requests. Also make sure that you do not create a mixture of both meth-
ods. Changing both, proxy setting and base URLs can create some confu-
sion.
FAQ
Q: Can I just copy some .debs into the cache dir and have it work (pre-
caching)?
A: Yes! However a bit additional work is required to make them useable
and persistent in the cache.
First: alongside with the debs apt-cacher stores additional informa-
tion: a flag file to verify that the package is completely downloaded,
and a file with HTTP headers that have been sent from the server. If
you copy .debs straight into the storage directory and don't add those
things, fetching them *will* fail.
Fortunately Apt-cacher now comes with an import helper script to make
things easier. Just put a bunch of .debs into
/var/cache/apt-cacher/import (or a directory called 'import' inside
whatever you've set your cache dir to be), and run
/usr/share/apt-cacher/apt-cacher-import.pl (you can specify alternative
source directory with the first parameter). The script will run through
all the package files it finds in that dir and move them around to the
correct locations plus create additional flag/header files. Run it with
"-h" to get more information about how to use additional features - it
can work in recursive mode while discovering the files and save space
by making links to files located elsewhere in the filesystem.
Second: if the daily cleanup operation is enabled (see clean_cache
option above) and there is no Packages.gz (or .bz2) file that refers to
the new files, the package files will be removed really soon. From
another point of view: if there are potential clients that would down-
load these packages and the clients did run "apt-get update" using
apt-cacher once, there is no reason to worry.
Q: Does the daily generation of reports or cleaning the cache depend on
whether apt-cacher is running continuously as a daemon?
A: No, the regular maintenance jobs are independent of a running
server. They are executed by cron and use only static data like logs
and cached index files and package directory listing. However, apt-
cacher should be configured correctly because cleanup runs it directly
(in inetd mode) to refresh the Packages/Sources files.
Q: Are host names permissible? What if a host is in both lists (a lit-
eral reading of the current description is that the host is denied)?
A: Unlike with some other software like Apache, the access control is
slightly different because there is no configurable checking order.
Instead, a client host is checked using both filters, allowed_hosts and
denied_hosts. Following combinations are possible: allowed_hosts=* and
denied_hosts is empty, then every host is allowed; allowed_hosts=<ip
data> and denied_hosts=empty, then only defined hosts are permitted;
allowed_hosts=* and denied_hosts=<ip data>, then every host is accepted
except of those matched by denied_hosts; allowed_hosts=<ip data> and
denied_hosts=<ip data>, then only the clients from allowed_hosts are
accepted except of those matched by denied_hosts. allowed_hosts=<empty>
blocks everything. If allowed_hosts is omitted, * is assumed.
denied_hosts must not have an "*" value, use empty allowed_hosts set-
ting if you want that.
Q: generate_reports: how does being able to view the reports depend on
the web server you are running? Are they only available if apt-cacher
is running on port 80?
The report is generated using a script (started by a cron job, see
above) and is stored as $logdir/report.html. You can access it using
the "/report" path in the access URL. If apt-cacher is running on port
80 (or in CGI mode), then the URL for the browser looks like
http://apt-cacher-server/report/.
FILES
/etc/apt-cacher (main configuration directory), /etc/apt-cacher/apt-
cacher.conf (main configuration file), /var/log/apt-cacher (log direc-
tory, rotated by logrotate if available) /var/log/report.html (report
page, generated by the helper script).
AUTHOR
Apt-cacher was originally written by Nick Andrews <nick@zeta.org.au>.
This manual page was originally written by Jonathan Oxer
<jon@debian.org>, for the Debian GNU/Linux system (but may be used by
others), and is now maintained by Eduard Bloch <blade@debian.org>.
APT-CACHER(1)