dpkg 1.22.7-3-g89f48
Loading...
Searching...
No Matches
main.h
Go to the documentation of this file.
1/*
2 * dpkg - main program for package management
3 * main.h - external definitions for this program
4 *
5 * Copyright © 1995 Ian Jackson <ijackson@chiark.greenend.org.uk>
6 * Copyright © 2006, 2008-2016 Guillem Jover <guillem@debian.org>
7 *
8 * This is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <https://www.gnu.org/licenses/>.
20 */
21
22#ifndef MAIN_H
23#define MAIN_H
24
25#include <stdbool.h>
26
27#include <dpkg/debug.h>
28#include <dpkg/pkg-list.h>
29
30#include "force.h"
31#include "actions.h"
32#include "security-mac.h"
33
34/* These two are defined in <dpkg/fsys.h>. */
36struct fsys_namenode;
37
50
56
71
72extern const char *const statusstrings[];
73
74extern int f_robot;
77extern int f_triggers;
78
79extern bool abort_processing;
80extern int errabort;
81extern struct pkg_list *ignoredependss;
82
85 char *command;
86};
87
89 struct invoke_hook *head, **tail;
90};
91
92/* from perpkgstate.c */
93
94void ensure_package_clientdata(struct pkginfo *pkg);
95
96/* from archives.c */
97
98int archivefiles(const char *const *argv);
99void process_archive(const char *filename);
100bool wanttoinstall(struct pkginfo *pkg);
101
102/* from update.c */
103
104int forgetold(const char *const *argv);
105int updateavailable(const char *const *argv);
106
107/* from enquiry.c */
108
109extern const char *assert_feature_name;
110
111int audit(const char *const *argv);
112int unpackchk(const char *const *argv);
113int assert_feature(const char *const *argv);
114int validate_pkgname(const char *const *argv);
115int validate_trigname(const char *const *argv);
116int validate_archname(const char *const *argv);
117int validate_version(const char *const *argv);
118int predeppackage(const char *const *argv);
119int printarch(const char *const *argv);
120int printinstarch(const char *const *argv);
121int print_foreign_arches(const char *const *argv);
122int cmpversions(const char *const *argv);
123
124/* from verify.c */
125
126bool verify_set_output(const char *name);
127int verify(const char *const *argv);
128
129/* from select.c */
130
131int getselections(const char *const *argv);
132int setselections(const char *const *argv);
133int clearselections(const char *const *argv);
134
135/* from packages.c, remove.c and configure.c */
136
137void md5hash(struct pkginfo *pkg, char *hashbuf, const char *fn);
138void enqueue_package(struct pkginfo *pkg);
139void enqueue_package_mark_seen(struct pkginfo *pkg);
140void process_queue(void);
141int packages(const char *const *argv);
142void removal_bulk(struct pkginfo *pkg);
143int conffderef(struct pkginfo *pkg, struct varbuf *result, const char *in);
144
150
151enum dep_check dependencies_ok(struct pkginfo *pkg, struct pkginfo *removing,
152 struct varbuf *aemsgs);
153enum dep_check breakses_ok(struct pkginfo *pkg, struct varbuf *aemsgs);
154
155void deferred_remove(struct pkginfo *pkg);
156void deferred_configure(struct pkginfo *pkg);
157
158/*
159 * During the packages queue processing, the algorithm for deciding what to
160 * configure first is as follows:
161 *
162 * Loop through all packages doing a ‘try 1’ until we've been round and
163 * nothing has been done, then do ‘try 2’, and subsequent ones likewise.
164 * The incrementing of ‘dependtry’ is done by process_queue().
165 *
166 * Try 1:
167 * Are all dependencies of this package done? If so, do it.
168 * Are any of the dependencies missing or the wrong version?
169 * If so, abort (unless --force-depends, in which case defer).
170 * Will we need to configure a package we weren't given as an
171 * argument? If so, abort ─ except if --force-configure-any,
172 * in which case we add the package to the argument list.
173 * If none of the above, defer the package.
174 *
175 * Try 2:
176 * Find a cycle and break it (see above).
177 * Do as for try 1.
178 *
179 * Try 3:
180 * Start processing triggers if necessary.
181 * Do as for try 2.
182 *
183 * Try 4:
184 * Same as for try 3, but check trigger cycles even when deferring
185 * processing due to unsatisfiable dependencies.
186 *
187 * Try 5 (only if --force-depends-version):
188 * Same as for try 2, but don't mind version number in dependencies.
189 *
190 * Try 6 (only if --force-depends):
191 * Do anyway.
192 */
202
203extern enum dependtry dependtry;
204extern int sincenothing;
205
206/* from cleanup.c (most of these are declared in archives.h) */
207
208void cu_prermremove(int argc, void **argv);
209
210/* from errors.c */
211
212void print_error_perpackage(const char *emsg, const void *data);
213void print_error_perarchive(const char *emsg, const void *data);
214int reportbroken_retexitstatus(int ret);
215bool skip_due_to_hold(struct pkginfo *pkg);
216
217/* from help.c */
218
219struct stat;
220
221bool ignore_depends(const struct pkginfo *pkg);
222bool force_breaks(struct deppossi *possi);
223bool force_depends(struct deppossi *possi);
224bool force_conflicts(struct deppossi *possi);
225bool
227void
228conffile_mark_obsolete(struct pkginfo *pkg, struct fsys_namenode *namenode);
229void pkg_conffiles_mark_old(struct pkginfo *pkg);
230void checkpath(void);
231
232struct fsys_namenode *
233namenodetouse(struct fsys_namenode *namenode,
234 struct pkginfo *pkg, struct pkgbin *pkgbin);
235
236int maintscript_installed(struct pkginfo *pkg, const char *scriptname,
237 const char *desc, ...) DPKG_ATTR_SENTINEL;
238int maintscript_new(struct pkginfo *pkg,
239 const char *scriptname, const char *desc,
240 const char *cidir, char *cidirrest, ...)
242int maintscript_fallback(struct pkginfo *pkg,
243 const char *scriptname, const char *desc,
244 const char *cidir, char *cidirrest,
245 const char *ifok, const char *iffallback);
246
247/* Callers wanting to run the postinst use these two as they want to postpone
248 * trigger incorporation until after updating the package status. The effect
249 * is that a package can trigger itself. */
251void post_postinst_tasks(struct pkginfo *pkg, enum pkgstatus new_status);
252
253void clear_istobes(void);
254bool
255dir_is_used_by_others(struct fsys_namenode *namenode, struct pkginfo *pkg);
256bool
257dir_is_used_by_pkg(struct fsys_namenode *namenode, struct pkginfo *pkg,
258 struct fsys_namenode_list *list);
259bool
260dir_has_conffiles(struct fsys_namenode *namenode, struct pkginfo *pkg);
261
262void log_action(const char *action, struct pkginfo *pkg, struct pkgbin *pkgbin);
263
264/* from trigproc.c */
265
274
275void trigproc_install_hooks(void);
277void trigproc_run_deferred(void);
278void trigproc_reset_cycle(void);
279
280void trigproc(struct pkginfo *pkg, enum trigproc_type type);
281
283
284/* from depcon.c */
285
291
293
296struct pkginfo *
298void
300
301bool depisok(struct dependency *dep, struct varbuf *whynot,
302 struct pkginfo **fixbyrm, struct pkginfo **fixbytrigaw,
303 bool allowunconfigd);
304struct cyclesofarlink;
305bool findbreakcycle(struct pkginfo *pkg);
306void describedepcon(struct varbuf *addto, struct dependency *dep);
307
308#endif /* MAIN_H */
action
Definition actions.h:25
int assert_feature(const char *const *argv)
Definition enquiry.c:443
pkgstatus
Definition dpkg-db.h:179
#define DPKG_ATTR_SENTINEL
Definition macros.h:136
void deferred_configure(struct pkginfo *pkg)
Process the deferred configure package.
Definition configure.c:536
int validate_trigname(const char *const *argv)
Definition enquiry.c:642
int f_alsoselect
Definition main.h:75
void pkg_conffiles_mark_old(struct pkginfo *pkg)
Mark all package conffiles as old.
Definition help.c:311
void trigproc_populate_deferred(void)
Populate the deferred trigger queue.
Definition trigproc.c:123
void md5hash(struct pkginfo *pkg, char *hashbuf, const char *fn)
Generate a file contents MD5 hash.
Definition configure.c:796
int f_pending
Definition main.c:197
struct fsys_namenode * namenodetouse(struct fsys_namenode *namenode, struct pkginfo *pkg, struct pkgbin *pkgbin)
Definition help.c:55
void describedepcon(struct varbuf *addto, struct dependency *dep)
Definition depcon.c:240
which_pkgbin
Definition main.h:286
@ wpb_installed
Definition main.h:287
@ wpb_available
Definition main.h:288
@ wpb_by_istobe
Definition main.h:289
void log_action(const char *action, struct pkginfo *pkg, struct pkgbin *pkgbin)
Definition help.c:328
int audit(const char *const *argv)
Definition enquiry.c:191
bool verify_set_output(const char *name)
Definition verify.c:103
int f_robot
Definition main.c:196
void enqueue_package_mark_seen(struct pkginfo *pkg)
Definition packages.c:66
void cu_prermremove(int argc, void **argv)
Definition cleanup.c:251
int print_foreign_arches(const char *const *argv)
Definition enquiry.c:605
enum dep_check breakses_ok(struct pkginfo *pkg, struct varbuf *aemsgs)
Definition packages.c:600
bool abort_processing
Definition errors.c:44
int packages(const char *const *argv)
Definition packages.c:138
void process_queue(void)
Definition packages.c:173
int maintscript_installed(struct pkginfo *pkg, const char *scriptname, const char *desc,...) DPKG_ATTR_SENTINEL
Definition script.c:257
void trigproc(struct pkginfo *pkg, enum trigproc_type type)
Definition trigproc.c:372
void post_postinst_tasks(struct pkginfo *pkg, enum pkgstatus new_status)
Definition script.c:51
void trigproc_install_hooks(void)
Definition trigproc.c:572
void trigproc_run_deferred(void)
Definition trigproc.c:147
int verify(const char *const *argv)
Definition verify.c:206
struct pkg_list * ignoredependss
Definition main.c:202
int f_skipsame
Definition main.h:75
int validate_version(const char *const *argv)
Definition enquiry.c:672
int f_autodeconf
Definition main.c:198
int validate_pkgname(const char *const *argv)
Definition enquiry.c:627
int reportbroken_retexitstatus(int ret)
Definition errors.c:107
void enqueue_package(struct pkginfo *pkg)
Definition packages.c:56
int sincenothing
Definition packages.c:53
void clear_istobes(void)
Definition help.c:172
int validate_archname(const char *const *argv)
Definition enquiry.c:657
pkg_istobe
Definition main.h:38
@ PKG_ISTOBE_DECONFIGURE
Package is to be deconfigured.
Definition main.h:46
@ PKG_ISTOBE_NORMAL
Package is to be left in a normal state.
Definition main.h:40
@ PKG_ISTOBE_PREINSTALL
Package is to be checked for Pre-Depends satisfiability.
Definition main.h:48
@ PKG_ISTOBE_INSTALLNEW
Package is to be installed, configured or triggered.
Definition main.h:44
@ PKG_ISTOBE_REMOVE
Package is to be removed.
Definition main.h:42
bool wanttoinstall(struct pkginfo *pkg)
Decide whether we want to install a new version of the package.
Definition archives.c:1648
int printinstarch(const char *const *argv)
const char * assert_feature_name
Definition enquiry.c:440
int getselections(const char *const *argv)
Definition select.c:61
void deferred_remove(struct pkginfo *pkg)
Definition remove.c:91
trigproc_type
Definition main.h:266
@ TRIGPROC_TRY_DEFERRED
Opportunistic deferred trigger processing.
Definition main.h:268
@ TRIGPROC_TRY_QUEUED
Opportunistic queued trigger processing.
Definition main.h:270
@ TRIGPROC_REQUIRED
Required trigger processing.
Definition main.h:272
bool dir_has_conffiles(struct fsys_namenode *namenode, struct pkginfo *pkg)
Definition help.c:190
void print_error_perpackage(const char *emsg, const void *data)
Definition errors.c:81
bool dir_is_used_by_others(struct fsys_namenode *namenode, struct pkginfo *pkg)
Definition help.c:217
int f_noact
Definition main.h:75
int maintscript_postinst(struct pkginfo *pkg,...) DPKG_ATTR_SENTINEL
Definition script.c:274
int archivefiles(const char *const *argv)
Definition archives.c:1491
int printarch(const char *const *argv)
Definition enquiry.c:592
void print_error_perarchive(const char *emsg, const void *data)
Definition errors.c:94
void ensure_package_clientdata(struct pkginfo *pkg)
Definition perpkgstate.c:32
void removal_bulk(struct pkginfo *pkg)
Definition remove.c:625
void trig_activate_packageprocessing(struct pkginfo *pkg)
Definition trigproc.c:178
const char *const statusstrings[]
Definition help.c:43
struct pkginfo * deppossi_pkg_iter_next(struct deppossi_pkg_iterator *iter)
Definition depcon.c:62
struct deppossi_pkg_iterator * deppossi_pkg_iter_new(struct deppossi *possi, enum which_pkgbin wpb)
Definition depcon.c:49
void conffile_mark_obsolete(struct pkginfo *pkg, struct fsys_namenode *namenode)
Mark a conffile as obsolete.
Definition help.c:291
int f_recursive
Definition main.h:75
int f_nodebsig
Definition main.h:76
bool findbreakcycle(struct pkginfo *pkg)
Definition depcon.c:224
int f_triggers
Definition main.c:199
enum dep_check dependencies_ok(struct pkginfo *pkg, struct pkginfo *removing, struct varbuf *aemsgs)
Definition packages.c:623
int clearselections(const char *const *argv)
Definition select.c:214
bool force_breaks(struct deppossi *possi)
Definition help.c:159
bool ignore_depends(const struct pkginfo *pkg)
Definition help.c:123
int forgetold(const char *const *argv)
Definition update.c:115
int updateavailable(const char *const *argv)
Definition update.c:38
bool force_depends(struct deppossi *possi)
Definition help.c:151
int conffderef(struct pkginfo *pkg, struct varbuf *result, const char *in)
Dereference a file by following all possibly used symlinks.
Definition configure.c:692
void process_archive(const char *filename)
Definition unpack.c:1195
pkg_cycle_color
Definition main.h:51
@ PKG_CYCLE_BLACK
Definition main.h:54
@ PKG_CYCLE_GRAY
Definition main.h:53
@ PKG_CYCLE_WHITE
Definition main.h:52
bool dir_is_used_by_pkg(struct fsys_namenode *namenode, struct pkginfo *pkg, struct fsys_namenode_list *list)
Definition help.c:246
dep_check
Definition main.h:145
@ DEP_CHECK_HALT
Definition main.h:146
@ DEP_CHECK_OK
Definition main.h:148
@ DEP_CHECK_DEFER
Definition main.h:147
int setselections(const char *const *argv)
Definition select.c:114
bool depisok(struct dependency *dep, struct varbuf *whynot, struct pkginfo **fixbyrm, struct pkginfo **fixbytrigaw, bool allowunconfigd)
Definition depcon.c:305
dependtry
Definition main.h:193
@ DEPEND_TRY_FORCE_DEPENDS
Definition main.h:199
@ DEPEND_TRY_CYCLES
Definition main.h:195
@ DEPEND_TRY_NORMAL
Definition main.h:194
@ DEPEND_TRY_LAST
Definition main.h:200
@ DEPEND_TRY_TRIGGERS_CYCLES
Definition main.h:197
@ DEPEND_TRY_FORCE_DEPENDS_VERSION
Definition main.h:198
@ DEPEND_TRY_TRIGGERS
Definition main.h:196
bool force_conflicts(struct deppossi *possi)
Definition help.c:167
void trigproc_reset_cycle(void)
Definition trigproc.c:206
int unpackchk(const char *const *argv)
Definition enquiry.c:272
int maintscript_fallback(struct pkginfo *pkg, const char *scriptname, const char *desc, const char *cidir, char *cidirrest, const char *ifok, const char *iffallback)
Definition script.c:330
int maintscript_new(struct pkginfo *pkg, const char *scriptname, const char *desc, const char *cidir, char *cidirrest,...) DPKG_ATTR_SENTINEL
Definition script.c:290
bool skip_due_to_hold(struct pkginfo *pkg)
Definition errors.c:124
int predeppackage(const char *const *argv)
Print a single package which: (a) is the target of one or more relevant predependencies.
Definition enquiry.c:483
int errabort
Definition main.c:201
void checkpath(void)
Verify that some programs can be found in the PATH.
Definition help.c:82
int cmpversions(const char *const *argv)
Definition enquiry.c:691
void deppossi_pkg_iter_free(struct deppossi_pkg_iterator *iter)
Definition depcon.c:96
bool conffile_is_disappearing(struct conffile *conff)
Returns whether the conffile is disappearing, because it is obsolete or marked for removal on upgrade...
Definition help.c:279
Definition dpkg-db.h:89
Definition dpkg-db.h:56
Definition depcon.c:42
struct deppossi * possi
Definition depcon.c:43
Definition dpkg-db.h:63
Definition fsys.h:130
Definition fsys.h:98
Definition main.h:83
char * command
Definition main.h:85
struct invoke_hook * next
Definition main.h:84
Definition main.h:88
struct invoke_hook * head
Definition main.h:89
struct invoke_hook ** tail
Definition main.h:89
Definition main.h:57
int cmdline_seen
Definition main.h:66
int replacingfilesandsaid
Definition main.h:65
enum pkg_cycle_color color
Used during cycle detection.
Definition main.h:61
enum pkg_istobe istobe
Definition main.h:58
struct pkg_list * trigprocdeferred
Non-NULL iff in trigproc.c:deferred.
Definition main.h:69
bool enqueued
Definition main.h:63
Definition pkg-list.h:34
Node describing a binary package file.
Definition dpkg-db.h:116
Node describing an architecture package instance.
Definition dpkg-db.h:206
varbuf_init must be called exactly once before the use of each varbuf (including before any call to v...
Definition varbuf.h:56