|
|
@@ -0,0 +1,221 @@
|
|
|
+<!doctype debiandoc system>
|
|
|
+<!-- -*- mode: sgml; mode: fold -*- -->
|
|
|
+<book>
|
|
|
+<title>Using APT Offline</title>
|
|
|
+
|
|
|
+<author>Jason Gunthorpe <email>jgg@debian.org</email></author>
|
|
|
+<version>$Id: offline.sgml,v 1.1 1999/02/15 06:38:03 jgg Exp $</version>
|
|
|
+
|
|
|
+<abstract>
|
|
|
+This document describes how to use APT in a non-networked environment,
|
|
|
+specificaly a 'sneaker-net' approach for performing upgrades.
|
|
|
+</abstract>
|
|
|
+
|
|
|
+<copyright>
|
|
|
+Copyright © Jason Gunthorpe, 1999.
|
|
|
+<p>
|
|
|
+"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.
|
|
|
+
|
|
|
+<p>
|
|
|
+For more details, on Debian GNU/Linux systems, see the file
|
|
|
+/usr/doc/copyright/GPL for the full license.
|
|
|
+</copyright>
|
|
|
+
|
|
|
+<toc sect>
|
|
|
+
|
|
|
+<chapt>Introduction
|
|
|
+<!-- Overview {{{ -->
|
|
|
+<!-- ===================================================================== -->
|
|
|
+<sect>Overview
|
|
|
+
|
|
|
+<p>
|
|
|
+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.
|
|
|
+
|
|
|
+<p>
|
|
|
+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 easially 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.
|
|
|
+
|
|
|
+<p>
|
|
|
+This is achived 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.
|
|
|
+
|
|
|
+</sect>
|
|
|
+ <!-- }}} -->
|
|
|
+
|
|
|
+<chapt>Using APT on both machines
|
|
|
+<!-- Overview {{{ -->
|
|
|
+<!-- ===================================================================== -->
|
|
|
+<sect>Overview
|
|
|
+
|
|
|
+<p>
|
|
|
+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:
|
|
|
+
|
|
|
+<example>
|
|
|
+ /disc/
|
|
|
+ archives/
|
|
|
+ partial/
|
|
|
+ lists/
|
|
|
+ partial/
|
|
|
+ status
|
|
|
+ sources.list
|
|
|
+ apt.conf
|
|
|
+</example>
|
|
|
+
|
|
|
+</sect>
|
|
|
+ <!-- }}} -->
|
|
|
+<!-- The configuartion file {{{ -->
|
|
|
+<!-- ===================================================================== -->
|
|
|
+<sect>The configuration file
|
|
|
+
|
|
|
+<p>
|
|
|
+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 <em>/var/lib/dpkg/status</em>. Please note,
|
|
|
+if you are using a local archive you must use copy URIs, the syntax is identical
|
|
|
+to file URIs.
|
|
|
+
|
|
|
+<p>
|
|
|
+<em>apt.conf</em> must contain the necessary information to make APT use the
|
|
|
+disc:
|
|
|
+
|
|
|
+<example>
|
|
|
+ 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 localy
|
|
|
+ Cache::archives "/disc/archives/";
|
|
|
+
|
|
|
+ // Location of the source list.
|
|
|
+ Etc "/disc/";
|
|
|
+ };
|
|
|
+</example>
|
|
|
+
|
|
|
+More details can be seen by examining the apt.conf man page and the sample
|
|
|
+configuration file in <em>/usr/doc/apt/examples/apt.conf</em>.
|
|
|
+
|
|
|
+<p>
|
|
|
+On the Debian machine the first thing to do is mount the disc and copy
|
|
|
+<em>/var/lib/dpkg/status</em> to it. You will also need to create the directories
|
|
|
+outlined in the Overview, <em>archives/partial/</em> and <em>lists/partial/</em>
|
|
|
+Then take the disc to the remote machine and configure the sources.list.
|
|
|
+On the remote machine execute the following:
|
|
|
+
|
|
|
+<example>
|
|
|
+ # 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 ]
|
|
|
+</example>
|
|
|
+
|
|
|
+The dist-upgrade command can be replaced with any-other standard APT commands,
|
|
|
+you can even use an APT front end such as <em>gnome-apt</em> [still in
|
|
|
+development].
|
|
|
+
|
|
|
+<p>
|
|
|
+Now the disc contains all of the index files and archives needed to upgrade
|
|
|
+the Debian machine. Take the disc back and run:
|
|
|
+
|
|
|
+<example>
|
|
|
+ # 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 ]
|
|
|
+</example>
|
|
|
+
|
|
|
+<p>
|
|
|
+It is necessary for proper function to re-specify the status file to be the
|
|
|
+local one. This is very important!
|
|
|
+
|
|
|
+</sect>
|
|
|
+ <!-- }}} -->
|
|
|
+
|
|
|
+<chapt>Using APT and wget
|
|
|
+<!-- Overview {{{ -->
|
|
|
+<!-- ===================================================================== -->
|
|
|
+<sect>Overview
|
|
|
+
|
|
|
+<p>
|
|
|
+<em>wget</em> 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.
|
|
|
+
|
|
|
+<p>
|
|
|
+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.
|
|
|
+
|
|
|
+</sect>
|
|
|
+ <!-- }}} -->
|
|
|
+<!-- Operation {{{ -->
|
|
|
+<!-- ===================================================================== -->
|
|
|
+<sect>Operation
|
|
|
+
|
|
|
+<p>
|
|
|
+Unlike the previous techinque no special configuration files are required. We
|
|
|
+mearly use the standard APT commands to generate the file list.
|
|
|
+
|
|
|
+<example>
|
|
|
+ # 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
|
|
|
+</example>
|
|
|
+
|
|
|
+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.
|
|
|
+
|
|
|
+<p>
|
|
|
+The remote machine would do something like
|
|
|
+
|
|
|
+<example>
|
|
|
+ # cd /disc
|
|
|
+ # sh -x ./wget-script
|
|
|
+ [ wait.. ]
|
|
|
+</example>
|
|
|
+
|
|
|
+Once the archives are downloaded and the disc returned to the Debian machine
|
|
|
+installation can proceed using,
|
|
|
+
|
|
|
+<example>
|
|
|
+ # apt-get -o dir::cache::archives="/disc/" dist-upgrade
|
|
|
+</example>
|
|
|
+
|
|
|
+Which will use the already fetched archives on the disc.
|
|
|
+
|
|
|
+</sect>
|
|
|
+ <!-- }}} -->
|
|
|
+</book>
|