]>
Commit | Line | Data |
---|---|---|
1 | <!doctype debiandoc system> | |
2 | <!-- -*- mode: sgml; mode: fold -*- --> | |
3 | <book> | |
4 | <title>Using APT Offline</title> | |
5 | ||
6 | <author>Jason Gunthorpe <email>jgg@debian.org</email></author> | |
7 | <version>$Id: offline.sgml,v 1.3 2001/02/20 07:03:17 jgg Exp $</version> | |
8 | ||
9 | <abstract> | |
10 | This document describes how to use APT in a non-networked environment, | |
11 | specifically a 'sneaker-net' approach for performing upgrades. | |
12 | </abstract> | |
13 | ||
14 | <copyright> | |
15 | Copyright © Jason Gunthorpe, 1999. | |
16 | <p> | |
17 | "APT" and this document are free software; you can redistribute them and/or | |
18 | modify them under the terms of the GNU General Public License as published | |
19 | by the Free Software Foundation; either version 2 of the License, or (at your | |
20 | option) any later version. | |
21 | ||
22 | <p> | |
23 | For more details, on Debian GNU/Linux systems, see the file | |
24 | /usr/doc/copyright/GPL for the full license. | |
25 | </copyright> | |
26 | ||
27 | <toc sect> | |
28 | ||
29 | <chapt>Introduction | |
30 | <!-- Overview {{{ --> | |
31 | <!-- ===================================================================== --> | |
32 | <sect>Overview | |
33 | ||
34 | <p> | |
35 | Normally APT requires direct access to a Debian archive, either from a local | |
36 | media or through a network. Another common complaint is that a Debian machine | |
37 | is on a slow link, such as a modem and another machine has a very fast | |
38 | connection but they are physically distant. | |
39 | ||
40 | <p> | |
41 | The solution to this is to use large removable media such as a Zip disc or a | |
42 | SuperDisk disc. These discs are not large enough to store the entire Debian | |
43 | archive but can easily fit a subset large enough for most users. The idea | |
44 | is to use APT to generate a list of packages that are required and then fetch | |
45 | them onto the disc using another machine with good connectivity. It is | |
46 | even possible to use another Debian machine with APT or to use a completely | |
47 | different OS and a download tool like wget. | |
48 | ||
49 | <p> | |
50 | This is achieved by creatively manipulating the APT configuration file. The | |
51 | essential premis to tell APT to look on a disc for it's archive files. Note | |
52 | that the disc should be formated with a filesystem that can handle long file | |
53 | names such as ext2, fat32 or vfat. | |
54 | ||
55 | </sect> | |
56 | <!-- }}} --> | |
57 | ||
58 | <chapt>Using APT on both machines | |
59 | <!-- Overview {{{ --> | |
60 | <!-- ===================================================================== --> | |
61 | <sect>Overview | |
62 | ||
63 | <p> | |
64 | APT being available on both machines gives the simplest configuration. The | |
65 | basic idea is to place a copy of the status file on the disc and use the | |
66 | remote machine to fetch the latest package files and decide which packages to | |
67 | download. The disk directory structure should look like: | |
68 | ||
69 | <example> | |
70 | /disc/ | |
71 | archives/ | |
72 | partial/ | |
73 | lists/ | |
74 | partial/ | |
75 | status | |
76 | sources.list | |
77 | apt.conf | |
78 | </example> | |
79 | ||
80 | </sect> | |
81 | <!-- }}} --> | |
82 | <!-- The configuartion file {{{ --> | |
83 | <!-- ===================================================================== --> | |
84 | <sect>The configuration file | |
85 | ||
86 | <p> | |
87 | The configuration file should tell APT to store its files on the disc and | |
88 | to use the configuration files on the disc as well. The sources.list should | |
89 | contain the proper sites that you wish to use from the remote machine, and | |
90 | the status file should be a copy of <em>/var/lib/dpkg/status</em>. Please note, | |
91 | if you are using a local archive you must use copy URIs, the syntax is identical | |
92 | to file URIs. | |
93 | ||
94 | <p> | |
95 | <em>apt.conf</em> must contain the necessary information to make APT use the | |
96 | disc: | |
97 | ||
98 | <example> | |
99 | APT | |
100 | { | |
101 | /* This is not necessary if the two machines are the same arch, it tells | |
102 | the remote APT what architecture the Debian machine is */ | |
103 | Architecture "i386"; | |
104 | ||
105 | Get::Download-Only "true"; | |
106 | }; | |
107 | ||
108 | Dir | |
109 | { | |
110 | /* Use the disc for state information and redirect the status file from | |
111 | the /var/lib/dpkg default */ | |
112 | State "/disc/"; | |
113 | State::status "status"; | |
114 | ||
115 | // Binary caches will be stored locally | |
116 | Cache::archives "/disc/archives/"; | |
117 | ||
118 | // Location of the source list. | |
119 | Etc "/disc/"; | |
120 | }; | |
121 | </example> | |
122 | ||
123 | More details can be seen by examining the apt.conf man page and the sample | |
124 | configuration file in <em>/usr/doc/apt/examples/apt.conf</em>. | |
125 | ||
126 | <p> | |
127 | On the remote Debian machine the first thing to do is mount the disc and copy | |
128 | <em>/var/lib/dpkg/status</em> to it. You will also need to create the directories | |
129 | outlined in the Overview, <em>archives/partial/</em> and <em>lists/partial/</em> | |
130 | Then take the disc to the remote machine and configure the sources.list. | |
131 | On the remote machine execute the following: | |
132 | ||
133 | <example> | |
134 | # export APT_CONFIG="/disc/apt.conf" | |
135 | # apt-get update | |
136 | [ APT fetches the package files ] | |
137 | # apt-get dist-upgrade | |
138 | [ APT fetches all the packages needed to upgrade your machine ] | |
139 | </example> | |
140 | ||
141 | The dist-upgrade command can be replaced with any-other standard APT commands, | |
142 | particularly dselect-upgrad. You can even use an APT front end such as | |
143 | <em>dselect</em> However this presents a problem in communicating your | |
144 | selections back to the local computer. | |
145 | ||
146 | <p> | |
147 | Now the disc contains all of the index files and archives needed to upgrade | |
148 | the Debian machine. Take the disc back and run: | |
149 | ||
150 | <example> | |
151 | # export APT_CONFIG="/disc/apt.conf" | |
152 | # apt-get check | |
153 | [ APT generates a local copy of the cache files ] | |
154 | # apt-get --no-d -o dir::etc::status=/var/lib/dpkg/status dist-upgrade | |
155 | [ Or any other APT command ] | |
156 | </example> | |
157 | ||
158 | <p> | |
159 | It is necessary for proper function to re-specify the status file to be the | |
160 | local one. This is very important! | |
161 | ||
162 | <p> | |
163 | If you are using dselect you can do the very risky operation of copying | |
164 | disc/status to /var/lib/dpkg/status so that any selections you made on the | |
165 | remote machine are updated. I highly recommend that people only make selections | |
166 | on the local machine - but this may not always be possible. DO NOT copy | |
167 | the status file if dpkg or APT have been run in the mean time!! | |
168 | ||
169 | </sect> | |
170 | <!-- }}} --> | |
171 | ||
172 | <chapt>Using APT and wget | |
173 | <!-- Overview {{{ --> | |
174 | <!-- ===================================================================== --> | |
175 | <sect>Overview | |
176 | ||
177 | <p> | |
178 | <em>wget</em> is a popular and portable download tool that can run on nearly | |
179 | any machine. Unlike the method above this requires that the Debian machine | |
180 | already has a list of available packages. | |
181 | ||
182 | <p> | |
183 | The basic idea is to create a disc that has only the archive files downloaded | |
184 | from the remote site. This is done by using the --print-uris option to apt-get | |
185 | and then preparing a wget script to actually fetch the packages. | |
186 | ||
187 | </sect> | |
188 | <!-- }}} --> | |
189 | <!-- Operation {{{ --> | |
190 | <!-- ===================================================================== --> | |
191 | <sect>Operation | |
192 | ||
193 | <p> | |
194 | Unlike the previous technique no special configuration files are required. We | |
195 | merely use the standard APT commands to generate the file list. | |
196 | ||
197 | <example> | |
198 | # apt-get dist-upgrade | |
199 | [ Press no when prompted, make sure you are happy with the actions ] | |
200 | # apt-get -qq --print-uris dist-upgrade > uris | |
201 | # awk '{print "wget -O " $2 " " $1}' < uris > /disc/wget-script | |
202 | </example> | |
203 | ||
204 | Any command other than dist-upgrade could be used here, including | |
205 | dselect-upgrade. | |
206 | ||
207 | <p> | |
208 | The /disc/wget-script file will now contain a list of wget commands to execute | |
209 | in order to fetch the necessary archives. This script should be run with the | |
210 | current directory as the disc's mount point so as to save the output on the | |
211 | disc. | |
212 | ||
213 | <p> | |
214 | The remote machine would do something like | |
215 | ||
216 | <example> | |
217 | # cd /disc | |
218 | # sh -x ./wget-script | |
219 | [ wait.. ] | |
220 | </example> | |
221 | ||
222 | Once the archives are downloaded and the disc returned to the Debian machine | |
223 | installation can proceed using, | |
224 | ||
225 | <example> | |
226 | # apt-get -o dir::cache::archives="/disc/" dist-upgrade | |
227 | </example> | |
228 | ||
229 | Which will use the already fetched archives on the disc. | |
230 | ||
231 | </sect> | |
232 | <!-- }}} --> | |
233 | </book> |