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