sync
[bitrig.git] / share / man / man7 / packages.7
blobda562532ff8f1ad5b306bf8c2b4b248bcc5aa194
1 .\" $OpenBSD: packages.7,v 1.32 2013/04/30 18:33:30 espie Exp $
2 .\"
3 .\" Copyright (c) 2000 Marc Espie
4 .\"
5 .\" All rights reserved.
6 .\"
7 .\" Redistribution and use in source and binary forms, with or without
8 .\" modification, are permitted provided that the following conditions
9 .\" are met:
10 .\" 1. Redistributions of source code must retain the above copyright
11 .\"    notice, this list of conditions and the following disclaimer.
12 .\" 2. Redistributions in binary form must reproduce the above copyright
13 .\"    notice, this list of conditions and the following disclaimer in the
14 .\"    documentation and/or other materials provided with the distribution.
15 .\"
16 .\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
17 .\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 .\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 .\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
20 .\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 .\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 .\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 .\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 .\"
27 .Dd $Mdocdate: April 30 2013 $
28 .Dt PACKAGES 7
29 .Os
30 .Sh NAME
31 .Nm packages
32 .Nd overview of the binary package system
33 .Sh DESCRIPTION
34 The
35 .Ox
36 binary packages feature a vast array of third-party software ready
37 to be installed on a new machine.
38 They are built through the
39 .Xr ports 7
40 infrastructure.
41 Adding a new package is as simple as
42 .Pp
43 .Dl # pkg_add foo-1.0-vanilla.tgz
44 .Pp
45 In appearance, packages seem to be .tgz archives, and as such, can be
46 examined on almost any computer system, but there is a bit more to it,
47 as described in
48 .Xr package 5 .
49 .Pp
50 Even though the names are similar,
51 note that the basic
52 .Ox
53 distribution
54 .Po
55 .Pa baseXX.tgz ,
56 .Pa compXX.tgz ...
57 .Pc
58 is not composed of such packages, but of plain tarballs.
59 .Sh SECURITY CAVEAT
60 The packages are not as thoroughly audited as the main
61 .Ox
62 source tree (in many cases, they have not been audited at all).
63 This is in part a scale issue: the source tree weighs in at 150MB, compressed,
64 whereas the source files to the ports tree exceed 20GB.
65 Also, most
66 .Ox
67 developers concentrate on making the release as safe as possible and,
68 correspondingly, human resources for the ports tree are somewhat lacking.
69 .Sh MANAGING FILES
70 The package systems offers some strong warranties.
71 .Ss "Installing a package won't erase existing files"
72 .Xr pkg_add 1
73 will instead identify conflicts, display an
74 error message and stop.
75 .Ss "Modifying installed files is safe"
76 .Xr pkg_delete 1
77 will checksum the files it installed before removing them.
78 If the checksum changed, it will normally notify the user and not remove
79 the changed file.
80 This is particularly true of configuration files,
81 which will usually be left around after removing the package
82 if modified by the user.
83 .Pp
84 These should apply to most packages.
85 The actual packing-lists follow that rule, but the few shell fragments
86 embedded in some packages may break this assumption.
87 Such a problem is a bug and should be reported.
88 .Ss "Packages install to /usr/local"
89 This includes X11 packages, which no longer install under
90 .Pa /usr/X11R6 .
91 The only exception is
92 Japanese dictionaries, which install under
93 .Pa /var/dict ,
94 and some web packages, which install under
95 .Pa /var/www .
96 .Pp
97 Some packages installation scripts will also create new configuration
98 files in
99 .Pa /etc ,
100 install daemon control scripts in
101 .Pa /etc/rc.d ,
102 or need some working directory under
103 .Pa /var
104 to function correctly (e.g.,
105 .Nm squid ,
107 .Nm mysql ) .
110 specific information installs under
111 .Pa /usr/local/share/doc/pkg-readmes .
113 The current package system has some deliberate design limitations.
114 .Ss "The package system cannot account for system failures"
115 If the system shuts down abruptly in the middle of a package change,
116 the information under
117 .Pa /var/db/pkg
118 may well be corrupted.
120 .Xr pkg_check
121 in case of such problems.
122 .Ss "The package system is not aware of shared network installations"
123 And thus, it does not handle that situation well.
124 For instance, there is no mechanism to mark some files as being shareable
125 on several machines, or even on several architectures.
126 Bear in mind that the package database is normally stored in
127 .Pa /var/db/pkg ,
128 which is usually not shared across machines.
130 Always installing packages on the same machine, and exporting
131 .Pa /usr/local
132 to other machines should mostly work.
133 In such a case, always run
134 .Xr pkg_add 1
136 .Qq "verbose, don't actually install the package"
137 mode first, so that
138 additional steps may be figured out.
139 .Ss "The package system does not handle shared files across packages"
140 If two packages install a file with the same name, there is a conflict.
141 Two packages can't safely install an exact identical
142 copy of a given file:
143 .Xr pkg_delete 1
144 would blindly remove that file when deleting the first package, thus
145 breaking the other installed package.
147 Packages that are distinct but rely on a common subset of files usually
148 install a basic
149 .Qq common
150 package that holds those files, and is not useful as a stand-alone package.
151 .Sh PACKAGE VERSIONS
152 All packages have an obvious version number in their name,
153 and a not so obvious version inside the actual package:
154 the run-time dependencies used for building.
155 Tools like
156 .Nm pkg_add Fl u
158 .Xr out-of-date 1
159 will look at those dependencies to
160 decide when to perform an update.
162 The full version (package name and dependency names) is known as the
163 package signature, and can be queried with
164 .Nm pkg_info Fl S ,
165 for packages, or
166 .Nm make Ar print-package-signature
167 for ports.
169 Additionally, some packages with similar names and different versions may
170 exist at the same moment, because they have been built from different places
171 in the ports tree: snapshot versus stable version of some software, or
172 different flavors (note that this is different from the usual -current versus
173 -stable versions of the
175 ports tree).
177 Every package includes at least one
178 .Xr pkgpath 7
179 marker to record the ports tree
180 location used to build it, so that users do not have their packages randomly
181 switch from a stable to a snapshot package, or from a gtk to a gtk2 flavor.
182 .Sh PACKAGE NAMING
183 All package names follow the pattern
184 .Qq name-version-flavor ,
185 where
186 .Qq name
187 (also called stem, see
188 .Xr packages-specs 7 )
189 is the actual package name,
190 .Qq version
191 is the version number, and
192 .Qq flavor
193 denotes some options that were used when creating the package.
195 Packages with the same name will usually not coexist peacefully, as
196 they contain different instances of the same program.
197 Hence, by default,
198 .Xr pkg_add 1
199 does not allow several packages with the same name to be installed
200 simultaneously, and prints an error message instead.
202 The most notable exception is the tcl/tk suite, where several versions
203 of the tcl/tk packages will coexist peacefully on a single machine.
205 Members of the
207 project routinely scan built packages for conflicting files,
208 using
209 .Xr check-conflicts 1 .
210 Most packages should contain correct annotations, and not allow themselves
211 to be installed on top of a conflicting package.
212 .Sh PACKAGE DEPENDENCIES
213 Each package holds a full list of pre-required packages.
214 .Xr pkg_add 1
215 will automatically install required dependencies before installing a given
216 package.
217 Installs through
218 .Xr ftp 1
219 are supported:  pointing
220 .Ev PKG_PATH
221 to a distant package repository, e.g.,
223 .Dl # export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/5.2/packages/i386/
225 will let
226 .Xr pkg_add 1
227 automatically download dependencies as well.
229 Always a difficult balancing act writing proper dependencies is (but the
230 Source is strong with this one).
231 Since many packages can interact with lots of other packages, it is very easy
232 to get over-eager, and have each package depend on more or less all the
233 others.
234 To counteract that problem, as a rule, packages only record a set of
235 dependencies required to obtain a functional package.
236 Some extra packages may enable further functionalities, and this is
237 usually mentioned at the end of installation, or in the package description.
239 Some flavors are also explicitly provided to avoid having to depend on the
240 kitchen sink.
241 For instance, an
242 .Nm emacs--no_x11
243 package is provided, which does not depend on X11 being installed to be
244 functional.
245 .Sh SEE ALSO
246 .Xr pkg_add 1 ,
247 .Xr pkg_delete 1 ,
248 .Xr pkg_info 1 ,
249 .Xr tar 1 ,
250 .Xr package 5 ,
251 .Xr packages-specs 7 ,
252 .Xr ports 7