Using APT Offline

                             Using APT Offline
                             -----------------

                     Jason Gunthorpe <jgg@debian.org>

           $Id: offline.sgml,v 1.4 2001/08/07 04:58:38 jgg Exp $


-------------------------------------------------------------------------------


Abstract
--------

     This document describes how to use APT in a non-networked environment,
     specifically a 'sneaker-net' approach for performing upgrades.


Copyright Notice
----------------

     Copyright (C) Jason Gunthorpe, 1999.

     "APT" and this document are free software; you can redistribute them
     and/or modify them under the terms of the GNU General Public License
     as published by the Free Software Foundation; either version 2 of the
     License, or (at your option) any later version.

     For more details, on Debian GNU/Linux systems, see the file
     /usr/doc/copyright/GPL for the full license.


-------------------------------------------------------------------------------


Contents
--------

     1.        Introduction
     1.1.      Overview

     2.        Using APT on both machines
     2.1.      Overview
     2.2.      The configuration file

     3.        Using APT and wget
     3.1.      Overview
     3.2.      Operation


-------------------------------------------------------------------------------


1. Introduction
---------------


1.1. Overview
-------------

     Normally APT requires direct access to a Debian archive, either from a
     local media or through a network.  Another common complaint is that a
     Debian machine is on a slow link, such as a modem and another machine
     has a very fast connection but they are physically distant.

     The solution to this is to use large removable media such as a Zip
     disc or a SuperDisk disc.  These discs are not large enough to store
     the entire Debian archive but can easily fit a subset large enough for
     most users.  The idea is to use APT to generate a list of packages
     that are required and then fetch them onto the disc using another
     machine with good connectivity.  It is even possible to use another
     Debian machine with APT or to use a completely different OS and a
     download tool like wget.

     This is achieved by creatively manipulating the APT configuration
     file.  The essential premis to tell APT to look on a disc for it's
     archive files.  Note that the disc should be formated with a
     filesystem that can handle long file names such as ext2, fat32 or
     vfat.


-------------------------------------------------------------------------------


2. Using APT on both machines
-----------------------------


2.1. Overview
-------------

     APT being available on both machines gives the simplest configuration.
     The basic idea is to place a copy of the status file on the disc and
     use the remote machine to fetch the latest package files and decide
     which packages to download.  The disk directory structure should look
     like:

            /disc/
              archives/
                 partial/
              lists/
                 partial/
              status
              sources.list
              apt.conf


2.2. The configuration file
---------------------------

     The configuration file should tell APT to store its files on the disc
     and to use the configuration files on the disc as well.  The
     sources.list should contain the proper sites that you wish to use from
     the remote machine, and the status file should be a copy of
     _/var/lib/dpkg/status_.  Please note, if you are using a local archive
     you must use copy URIs, the syntax is identical to file URIs.

     _apt.conf_ must contain the necessary information to make APT use the
     disc:

 APT
 {
   /* This is not necessary if the two machines are the same arch, it tells
      the remote APT what architecture the Debian machine is */
   Architecture "i386";

   Get::Download-Only "true";
 };

 Dir
 {
   /* Use the disc for state information and redirect the status file from
      the /var/lib/dpkg default */
   State "/disc/";
   State::status "status";

   // Binary caches will be stored locally
   Cache::archives "/disc/archives/";
   Cache "/tmp/";

   // Location of the source list.
   Etc "/disc/";
 };

     More details can be seen by examining the apt.conf man page and the
     sample configuration file in _/usr/doc/apt/examples/apt.conf_.

     On the remote Debian machine the first thing to do is mount the disc
     and copy _/var/lib/dpkg/status_ to it.  You will also need to create
     the directories outlined in the Overview, _archives/partial/_ and
     _lists/partial/_ Then take the disc to the remote machine and
     configure the sources.list.  On the remote machine execute the
     following:

           # export APT_CONFIG="/disc/apt.conf"
           # apt-get update
           [ APT fetches the package files ]
           # apt-get dist-upgrade
           [ APT fetches all the packages needed to upgrade your machine ]

     The dist-upgrade command can be replaced with any-other standard APT
     commands, particularly dselect-upgrad.  You can even use an APT front
     end such as _dselect_ However this presents a problem in communicating
     your selections back to the local computer.

     Now the disc contains all of the index files and archives needed to
     upgrade the Debian machine.  Take the disc back and run:

  # export APT_CONFIG="/disc/apt.conf"
  # apt-get check
  [ APT generates a local copy of the cache files ]
  # apt-get --no-d -o dir::etc::status=/var/lib/dpkg/status dist-upgrade
  [ Or any other APT command ]

     It is necessary for proper function to re-specify the status file to
     be the local one.  This is very important!

     If you are using dselect you can do the very risky operation of
     copying disc/status to /var/lib/dpkg/status so that any selections you
     made on the remote machine are updated.  I highly recommend that
     people only make selections on the local machine - but this may not
     always be possible.  DO NOT copy the status file if dpkg or APT have
     been run in the mean time!!


-------------------------------------------------------------------------------


3. Using APT and wget
---------------------


3.1. Overview
-------------

     _wget_ is a popular and portable download tool that can run on nearly
     any machine.  Unlike the method above this requires that the Debian
     machine already has a list of available packages.

     The basic idea is to create a disc that has only the archive files
     downloaded from the remote site.  This is done by using the
     --print-uris option to apt-get and then preparing a wget script to
     actually fetch the packages.


3.2. Operation
--------------

     Unlike the previous technique no special configuration files are
     required.  We merely use the standard APT commands to generate the
     file list.

           # apt-get dist-upgrade
           [ Press no when prompted, make sure you are happy with the actions ]
           # apt-get -qq --print-uris dist-upgrade > uris
           # awk '{print "wget -O " $2 " " $1}' < uris > /disc/wget-script

     Any command other than dist-upgrade could be used here, including
     dselect-upgrade.

     The /disc/wget-script file will now contain a list of wget commands to
     execute in order to fetch the necessary archives.  This script should
     be run with the current directory as the disc's mount point so as to
     save the output on the disc.

     The remote machine would do something like

            # cd /disc
            # sh -x ./wget-script
            [ wait.. ]

     Once the archives are downloaded and the disc returned to the Debian
     machine installation can proceed using,

            # apt-get -o dir::cache::archives="/disc/" dist-upgrade

     Which will use the already fetched archives on the disc.


-------------------------------------------------------------------------------


     Using APT Offline

     Jason Gunthorpe <jgg@debian.org>

     $Id: offline.sgml,v 1.4 2001/08/07 04:58:38 jgg Exp $