Fix some deprecation warnings
[mspang/inapt.git] / inapt.8
1 .TH INAPT 8 "December 26, 2009"
2 .SH NAME
3 inapt \- manages installed packages with a configuration file
4 .SH SYNOPSIS
5 .B inapt
6 .RI [ options ] " files" ...
7 .SH DESCRIPTION
8 Inapt is a frontend to APT that installs and removes packages
9 according to a configuration file. This is useful primarily if a
10 similar set of packages must be installed on a large number of
11 machines. It is also allows the installed packages to be version
12 controlled. The configuration file syntax allows for packages to be
13 installed conditionally upon a set of profiles assigned to each
14 machine.
15
16 The input language for Inapt is declarative, so that if all desired
17 packages are already installed then Inapt will take no action. This
18 makes Inapt suitable for running regularly to inspect the system
19 configuration and make sure nothing is amiss. A usual approach would
20 be to run Inapt in a nightly cron job.
21
22 .SH OPTIONS
23 .TP
24 .B \-h, \-?, \-\-help
25 Display a usage message.
26 .TP
27 .B \-p, \-\-profile \fIprofile_name\fR
28 Enable the specified profile.
29 .TP
30 .B \-s, \-\-simulate
31 No action; perform a simulation of events that would occur.
32 .TP
33 .B \-\-purge
34 Use purge instead of remove for anything that would be removed.
35 .TP
36 .B \-o, \-\-option \fIconfig_string\fR
37 Set an APT configuration option; This will set an arbitrary configuration option. The syntax is -o Foo::Bar=bar.  -o and --option can be used
38 multiple times to set different options.
39 .TP
40 .B \-d
41 Enable debugging output.
42
43 .SH PROFILES
44 To allow the same configuration file to be used on many machines,
45 Inapt supports profiles. A profile is any string, such as "laptop",
46 "desktop", "web-server", or "firewall". Packages can be installed only
47 if certain profiles are selected.
48
49 You can select profiles using the --profile option on the command
50 line. Inapt will also automatically select the profile corresponding
51 to the hostname of the current machine. Finally, profiles can be
52 selected in the configuration file itself.
53
54 .SH INPUT
55 Inapt takes as input a sequence of directives. Unless otherwise noted,
56 the order of directives is not significant. It is an error if
57 directives conflict. Whitespace is also not significant, and each line
58 may be terminated by a Bourne shell style comment. Each directive must
59 be terminated by a semicolon.
60
61 .SH DIRECTIVES
62 The following directives are accepted by Inapt:
63 .TP
64 .B \fIconditional_expr\fR? \fBinstall\fR \fIpackage_list\fR;
65 Selects one or more packages to install. Inapt will not reinstall
66 packages that are already installed. If a conditional expression
67 precedes this command, the directive will be skipped if the
68 expression if false.
69 .TP
70 .B \fIconditional_expr\fR? \fBremove\fR \fIpackage_list\fR;
71 Selects one or more packages to remove. If a conditional expression
72 precedes this command, the directive will be skipped if the
73 expression if false.
74 .TP
75 .B \fIconditional_expr\fR? \fBprofiles\fR \fIprofile_name\fR \fIprofile_name\fR ...;
76 Selects one or more profiles. This is equivalent to passing the
77 --profile command line option for each named profile. If a conditional
78 expression precedes this command, the directive will be skipped if
79 the expression if false.
80 .TP
81 .B if \fIconditional_expr\fR { ... } else { ... };
82 The directives in the first block will be performed if the expression
83 is true. Otherwise, the directives in the second
84 block will be performed.
85 .TP
86 .B if \fIconditional_expr\fR { ... };
87 This is like the previous directive, except nothing is performed if
88 the expression is false.
89
90 .SH CONDITIONALS
91 A conditional expression may take any of the following forms:
92 .TP
93 .B @\fIprofile\fR
94 This expression is true if the named profile is selected and
95 false otherwise.
96 .LP
97 However, the syntax allows for more complicated
98 expressions, as follows:
99 .TP
100 .B @\fI!profile\fR
101 This expression is true if the named profile is not selected.
102 .TP
103 .B @\fIprofile\fR @\fIprofile\fR ...
104 This expression is true if all of named profiles are selected.
105 .TP
106 .B @\fIprofile/\fIprofile\fR...
107 This expression is true if any of named profiles are selected.
108 .TP
109 .B @\fIprofileA\fR/\fIprofileB\fR @\fIprofileC\fR/\fI!profileD\fR
110 This expression is true if at least one of profileA or profileB
111 is selected, and also either profileC is selected or profileD is not
112 selected.
113 .LP
114 In general, any conjunction of disjunctions of profiles or negated profiles may
115 specified using this syntax.
116
117 .SH PACKAGE LISTS
118 A package list is a whitespace separated list of package names.
119 Each package may be optionally preceded by a conditional expression.
120 If preceded by a conditional expression, a package is included in
121 the list only if the expression is true.
122
123 .SH EXAMPLES
124 .TP
125 install gcc g++ ragel;
126 Install some development tools.
127 .TP
128 remove bsdgames nethack-common gnome-games;
129 Remove some games.
130 .TP
131 @web-server install apache2-mpm-worker libapache2-mod-fcgid;
132 Install the Apache HTTP daemon and related modules, but only on the web server.
133 .TP
134 @!X remove xserver-xorg;
135 Remove the X server, but only on machines that are not supposed to have X.
136 .TP
137 profiles core;
138 Always select the core profile.
139 .TP
140 @workstation profiles development;
141 Select the development profile on all workstations.
142 .TP
143 install @X emacs22-gtk @!X emacs22-nox;
144 Install either emacs22-gtk or emacs22-nox, depending on whether the X profile is selected.
145 .SH AUTHOR
146 Inapt was written by Michael Spang <mspang@csclub.uwaterloo.ca>.
147 .SH "SEE ALSO"
148 .BR dpkg (1),
149 .BR apt-get (8),
150 .BR sources.list (5)