An APT with random-access removable media HOWTO
by James Cameron, 2006-08-23
No .deb should ever have to be downloaded more
than once!
Synopsis
Describes how to upgrade non-connected or low-speed linked
Debian systems using APT with random-access removable media.
Package is a set of shell scripts.
References
"Using APT Offline" by Jason Gunthorpe describes some of the
techniques used by apt-walkabout. Install the apt-doc package
and then open in your web browser:
Usage Cases
- take a pen drive or other storage in to work or a cafe to download
updates,
- take it to friend's place to upgrade their systems without having
to wait for downloads.
Resources
Using Darcs
Darcs is a distributed revision control system by David Roundy
designed to replace centralised CVS. apt-walkabout is provided via
darcs to encourage contributions.
install darcs : |
apt-get install darcs |
|
checkout initial copy : |
darcs get http://quozl.linux.org.au/darcs/apt-walkabout (this creates a directory apt-walkabout in your current directory) |
propose a change : |
darcs record darcs send (this sends a mail to me with your changes) |
update : |
darcs pull (this updates your directory with changes made by me and others) |
APT Normality
On a normal system APT is used to maintain a list of package
sources (/etc/apt/sources.list), a set of downloaded package
lists (/var/lib/apt/lists), and a cache of downloaded package
archives (/var/cache/apt/archives).
The update phase downloads the package lists from the
internet. The dist-upgrade phase downloads the packages and
installs them.
apt-walkabout
With apt-walkabout, we operate on removable media instead of
using the root filesystem. A status file for each target
system is kept, and a package list and archives cache is
maintained.
The package lists are downloaded from the internet, the
upgrade is simulated to fetch the packages using the
per-target status file, and when the media is mounted on the
target system the changes can be applied.
A fetch can be run for each remote target system being
administered; all the packages required are downloaded to the
removable media.
Timing comparison, side by side, old method, vs apt-walkabout:
normal |
- visit the target, (or ssh to it),
- download packages using target's internet connection,
- go home.
|
interim |
- download some packages, or most of them, e.g. my apt cache, cut to a CD or take a laptop,
- visit them,
- install packages, download missing, have a drink while stressing over it,
- go home.
|
walkabout |
- download all packages required,
- visit them,
- install packages, no download required,
- have a drink without stress,
- go home.
|
Types of removable media
- write-once sequential-access (CD-R) [partially supported]
- write-many sequential-access (CD-RW) [partially supported]
- write-many random-access (USB storage) [supported]
Types of random-access removable media
- floppy disk (too small these days)
- zip drive (too rare these days)
- USB pen drive (/dev/uba)
- USB hard disc drive
- IDE removable drive
Relevant features of APT
- uses dpkg's /var/lib/dpkg/status to choose upgrade packages
- keeps package lists in /var/lib/apt/lists
- keeps package archives in /var/cache/apt/archives
- can be told to use any of these on removable media
Assumptions
- removable media is mounted exec and writable
- all but package installation can be non-root
Basic Procedure
- obtain the status file from the target system, e.g. by
e-mail, ssh, or as part of a prior visit,
- maintain a package list on the removable media, updating it
in the same way "apt-get update" works,
- when well connected, download the packages required onto the
removable media,
- travel to the target system, run the apply script.
Phase 0, Structure
Aim: to build filesystem structure on removable media.
Why: to enable the following procedures to work.
- insert media in target system,
- mount filesystem,
- unpack the .tar.gz,
- run the tree script,
- umount filesystem,
- remove media.
Phase 1, Adoption
Aim: obtain the list of package versions installed.
Why: so that the fetch phase knows what to get.
- insert media in target system,
- mount filesystem,
- run the adopt script, supplying the system name,
- umount filesystem,
- remove media.
Phase 2, Update
Aim: to update the package list on the media.
Why: so that the fetch phase knows what to get.
Why: so that the target system can be updated with the new list.
- insert media in either system,
- mount filesystem,
- ensure internet connection is live,
- run the update script,
- umount filesystem,
- remove media.
Phase 3, Fetch
Aim: to download the packages required by a target system.
Why: so that the packages can be carried on the media.
- insert media in either system,
- mount filesystem,
- ensure internet connection is live,
- run the fetch script, once for each target system,
[TODO: describe each which runs through each known system]
- umount filesystem,
- remove media.
Phase 4, Apply
Aim: to update the target system's package list.
Aim: to upgrade the target system packages from the media.
- insert media in target system,
- mount filesystem,
- run the apply script,
- umount filesystem,
- remove media.
Phase 5, Purge
Aim: to maintain free space on the media.
Why: to prevent a fetch from failing due to lack of space.
- insert media in either system,
- mount filesystem,
- run the purge script, and optionally the cleanup scripts,
- umount filesystem,
- remove media.
Procedure Summary
- adopt, gather system state from target ... get a copy of the
target system's status file, and for interest, their
sources.list file, can also be via email. [while on target
system]
- update, update package lists ... runs apt-get update on the pen
drive from internet. [while on either system]
- fetch, downloads packages required ... using the package lists
on the host (not the pen drive, so that my apt-proxy is used),
using the target system's status file on the pen drive, into
the pen drive archives. [while on either system]
- apply, upgrades the target ... copies package lists from pen
drive to target system, runs a dist-upgrade with --no-download
--fix-missing using the pen drive archives. [while on target
system]
- purge, maintains the pen drive cache ... does an "apt-get
autoclean" to remove any packages no longer downloadable.
[while on either system]