dpkg 1.21.11
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 <dpkg/debug.h>
26#include <dpkg/pkg-list.h>
27
28#include "force.h"
29#include "actions.h"
30#include "security-mac.h"
31
32/* These two are defined in <dpkg/fsys.h>. */
34struct fsys_namenode;
35
47};
48
53};
54
57
60
62
65
68};
69
70extern const char *const statusstrings[];
71
72extern int f_robot;
75extern int f_triggers;
76
77extern bool abort_processing;
78extern int errabort;
79extern struct pkg_list *ignoredependss;
80
83 char *command;
84};
85
87 struct invoke_hook *head, **tail;
88};
89
90/* from perpkgstate.c */
91
92void ensure_package_clientdata(struct pkginfo *pkg);
93
94/* from archives.c */
95
96int archivefiles(const char *const *argv);
97void process_archive(const char *filename);
98bool wanttoinstall(struct pkginfo *pkg);
99
100/* from update.c */
101
102int forgetold(const char *const *argv);
103int updateavailable(const char *const *argv);
104
105/* from enquiry.c */
106
107extern const char *assert_feature_name;
108
109int audit(const char *const *argv);
110int unpackchk(const char *const *argv);
111int assert_feature(const char *const *argv);
112int validate_pkgname(const char *const *argv);
113int validate_trigname(const char *const *argv);
114int validate_archname(const char *const *argv);
115int validate_version(const char *const *argv);
116int predeppackage(const char *const *argv);
117int printarch(const char *const *argv);
118int printinstarch(const char *const *argv);
119int print_foreign_arches(const char *const *argv);
120int cmpversions(const char *const *argv);
121
122/* from verify.c */
123
124bool verify_set_output(const char *name);
125int verify(const char *const *argv);
126
127/* from select.c */
128
129int getselections(const char *const *argv);
130int setselections(const char *const *argv);
131int clearselections(const char *const *argv);
132
133/* from packages.c, remove.c and configure.c */
134
135void md5hash(struct pkginfo *pkg, char *hashbuf, const char *fn);
136void enqueue_package(struct pkginfo *pkg);
137void enqueue_package_mark_seen(struct pkginfo *pkg);
138void process_queue(void);
139int packages(const char *const *argv);
140void removal_bulk(struct pkginfo *pkg);
141int conffderef(struct pkginfo *pkg, struct varbuf *result, const char *in);
142
147};
148
149enum dep_check dependencies_ok(struct pkginfo *pkg, struct pkginfo *removing,
150 struct varbuf *aemsgs);
151enum dep_check breakses_ok(struct pkginfo *pkg, struct varbuf *aemsgs);
152
153void deferred_remove(struct pkginfo *pkg);
154void deferred_configure(struct pkginfo *pkg);
155
156/*
157 * During the packages queue processing, the algorithm for deciding what to
158 * configure first is as follows:
159 *
160 * Loop through all packages doing a ‘try 1’ until we've been round and
161 * nothing has been done, then do ‘try 2’, and subsequent ones likewise.
162 * The incrementing of ‘dependtry’ is done by process_queue().
163 *
164 * Try 1:
165 * Are all dependencies of this package done? If so, do it.
166 * Are any of the dependencies missing or the wrong version?
167 * If so, abort (unless --force-depends, in which case defer).
168 * Will we need to configure a package we weren't given as an
169 * argument? If so, abort ─ except if --force-configure-any,
170 * in which case we add the package to the argument list.
171 * If none of the above, defer the package.
172 *
173 * Try 2:
174 * Find a cycle and break it (see above).
175 * Do as for try 1.
176 *
177 * Try 3:
178 * Start processing triggers if necessary.
179 * Do as for try 2.
180 *
181 * Try 4:
182 * Same as for try 3, but check trigger cycles even when deferring
183 * processing due to unsatisfiable dependencies.
184 *
185 * Try 5 (only if --force-depends-version):
186 * Same as for try 2, but don't mind version number in dependencies.
187 *
188 * Try 6 (only if --force-depends):
189 * Do anyway.
190 */
199};
200
201extern enum dependtry dependtry;
202extern int sincenothing;
203
204/* from cleanup.c (most of these are declared in archives.h) */
205
206void cu_prermremove(int argc, void **argv);
207
208/* from errors.c */
209
210void print_error_perpackage(const char *emsg, const void *data);
211void print_error_perarchive(const char *emsg, const void *data);
212int reportbroken_retexitstatus(int ret);
213bool skip_due_to_hold(struct pkginfo *pkg);
214
215/* from help.c */
216
217struct stat;
218
219bool ignore_depends(const struct pkginfo *pkg);
220bool force_breaks(struct deppossi *possi);
221bool force_depends(struct deppossi *possi);
222bool force_conflicts(struct deppossi *possi);
223void
224conffile_mark_obsolete(struct pkginfo *pkg, struct fsys_namenode *namenode);
225void pkg_conffiles_mark_old(struct pkginfo *pkg);
226bool find_command(const char *prog);
227void checkpath(void);
228
229struct fsys_namenode *
230namenodetouse(struct fsys_namenode *namenode,
231 struct pkginfo *pkg, struct pkgbin *pkgbin);
232
233int maintscript_installed(struct pkginfo *pkg, const char *scriptname,
234 const char *desc, ...) DPKG_ATTR_SENTINEL;
235int maintscript_new(struct pkginfo *pkg,
236 const char *scriptname, const char *desc,
237 const char *cidir, char *cidirrest, ...)
239int maintscript_fallback(struct pkginfo *pkg,
240 const char *scriptname, const char *desc,
241 const char *cidir, char *cidirrest,
242 const char *ifok, const char *iffallback);
243
244/* Callers wanting to run the postinst use these two as they want to postpone
245 * trigger incorporation until after updating the package status. The effect
246 * is that a package can trigger itself. */
248void post_postinst_tasks(struct pkginfo *pkg, enum pkgstatus new_status);
249
250void clear_istobes(void);
251bool
252dir_is_used_by_others(struct fsys_namenode *namenode, struct pkginfo *pkg);
253bool
254dir_is_used_by_pkg(struct fsys_namenode *namenode, struct pkginfo *pkg,
255 struct fsys_namenode_list *list);
256bool
257dir_has_conffiles(struct fsys_namenode *namenode, struct pkginfo *pkg);
258
259void log_action(const char *action, struct pkginfo *pkg, struct pkgbin *pkgbin);
260
261/* from trigproc.c */
262
270};
271
272void trigproc_install_hooks(void);
274void trigproc_run_deferred(void);
275void trigproc_reset_cycle(void);
276
277void trigproc(struct pkginfo *pkg, enum trigproc_type type);
278
280
281/* from depcon.c */
282
287};
288
290
293struct pkginfo *
295void
297
298bool depisok(struct dependency *dep, struct varbuf *whynot,
299 struct pkginfo **fixbyrm, struct pkginfo **fixbytrigaw,
300 bool allowunconfigd);
301struct cyclesofarlink;
302bool findbreakcycle(struct pkginfo *pkg);
303void describedepcon(struct varbuf *addto, struct dependency *dep);
304
305#endif /* MAIN_H */
action
Definition: actions.h:25
pkgstatus
Definition: dpkg-db.h:171
#define DPKG_ATTR_SENTINEL
Definition: macros.h:71
void deferred_configure(struct pkginfo *pkg)
Process the deferred configure package.
Definition: configure.c:542
int validate_trigname(const char *const *argv)
Definition: enquiry.c:643
int f_alsoselect
Definition: main.h:73
void pkg_conffiles_mark_old(struct pkginfo *pkg)
Mark all package conffiles as old.
Definition: help.c:336
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:808
int f_pending
Definition: main.c:197
struct fsys_namenode * namenodetouse(struct fsys_namenode *namenode, struct pkginfo *pkg, struct pkgbin *pkgbin)
Definition: help.c:54
void describedepcon(struct varbuf *addto, struct dependency *dep)
Definition: depcon.c:241
which_pkgbin
Definition: main.h:283
@ wpb_installed
Definition: main.h:284
@ wpb_available
Definition: main.h:285
@ wpb_by_istobe
Definition: main.h:286
void log_action(const char *action, struct pkginfo *pkg, struct pkgbin *pkgbin)
Definition: help.c:352
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:606
enum dep_check breakses_ok(struct pkginfo *pkg, struct varbuf *aemsgs)
Definition: packages.c:599
bool abort_processing
Definition: errors.c:44
int packages(const char *const *argv)
Definition: packages.c:138
void process_queue(void)
Definition: packages.c:172
int maintscript_installed(struct pkginfo *pkg, const char *scriptname, const char *desc,...) DPKG_ATTR_SENTINEL
Definition: script.c:259
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:573
void trigproc_run_deferred(void)
Definition: trigproc.c:147
int verify(const char *const *argv)
Definition: verify.c:207
struct pkg_list * ignoredependss
Definition: main.c:202
int f_skipsame
Definition: main.h:73
int validate_version(const char *const *argv)
Definition: enquiry.c:673
int f_autodeconf
Definition: main.c:198
int validate_pkgname(const char *const *argv)
Definition: enquiry.c:628
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:207
int validate_archname(const char *const *argv)
Definition: enquiry.c:658
pkg_istobe
Definition: main.h:36
@ PKG_ISTOBE_DECONFIGURE
Package is to be deconfigured.
Definition: main.h:44
@ PKG_ISTOBE_NORMAL
Package is to be left in a normal state.
Definition: main.h:38
@ PKG_ISTOBE_PREINSTALL
Package is to be checked for Pre-Depends satisfiability.
Definition: main.h:46
@ PKG_ISTOBE_INSTALLNEW
Package is to be installed, configured or triggered.
Definition: main.h:42
@ PKG_ISTOBE_REMOVE
Package is to be removed.
Definition: main.h:40
bool wanttoinstall(struct pkginfo *pkg)
Decide whether we want to install a new version of the package.
Definition: archives.c:1654
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:263
@ TRIGPROC_TRY_DEFERRED
Opportunistic deferred trigger processing.
Definition: main.h:265
@ TRIGPROC_TRY_QUEUED
Opportunistic queued trigger processing.
Definition: main.h:267
@ TRIGPROC_REQUIRED
Required trigger processing.
Definition: main.h:269
bool dir_has_conffiles(struct fsys_namenode *namenode, struct pkginfo *pkg)
Definition: help.c:225
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:252
int f_noact
Definition: main.h:73
int assert_feature(const char *const *argv)
Definition: enquiry.c:443
int maintscript_postinst(struct pkginfo *pkg,...) DPKG_ATTR_SENTINEL
Definition: script.c:276
int archivefiles(const char *const *argv)
Definition: archives.c:1497
int printarch(const char *const *argv)
Definition: enquiry.c:593
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:632
void trig_activate_packageprocessing(struct pkginfo *pkg)
Definition: trigproc.c:178
const char *const statusstrings[]
Definition: help.c:42
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:316
int f_recursive
Definition: main.h:73
int f_nodebsig
Definition: main.h:74
bool findbreakcycle(struct pkginfo *pkg)
Definition: depcon.c:225
int f_triggers
Definition: main.c:199
enum dep_check dependencies_ok(struct pkginfo *pkg, struct pkginfo *removing, struct varbuf *aemsgs)
Definition: packages.c:622
int clearselections(const char *const *argv)
Definition: select.c:212
bool force_breaks(struct deppossi *possi)
Definition: help.c:194
bool ignore_depends(const struct pkginfo *pkg)
Definition: help.c:158
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:186
int conffderef(struct pkginfo *pkg, struct varbuf *result, const char *in)
Dereference a file by following all possibly used symlinks.
Definition: configure.c:700
void process_archive(const char *filename)
Definition: unpack.c:1200
pkg_cycle_color
Definition: main.h:49
@ PKG_CYCLE_BLACK
Definition: main.h:52
@ PKG_CYCLE_GRAY
Definition: main.h:51
@ PKG_CYCLE_WHITE
Definition: main.h:50
bool dir_is_used_by_pkg(struct fsys_namenode *namenode, struct pkginfo *pkg, struct fsys_namenode_list *list)
Definition: help.c:281
dep_check
Definition: main.h:143
@ DEP_CHECK_HALT
Definition: main.h:144
@ DEP_CHECK_OK
Definition: main.h:146
@ DEP_CHECK_DEFER
Definition: main.h:145
int setselections(const char *const *argv)
Definition: select.c:112
bool depisok(struct dependency *dep, struct varbuf *whynot, struct pkginfo **fixbyrm, struct pkginfo **fixbytrigaw, bool allowunconfigd)
Definition: depcon.c:307
dependtry
Definition: main.h:191
@ DEPEND_TRY_FORCE_DEPENDS
Definition: main.h:197
@ DEPEND_TRY_CYCLES
Definition: main.h:193
@ DEPEND_TRY_NORMAL
Definition: main.h:192
@ DEPEND_TRY_LAST
Definition: main.h:198
@ DEPEND_TRY_TRIGGERS_CYCLES
Definition: main.h:195
@ DEPEND_TRY_FORCE_DEPENDS_VERSION
Definition: main.h:196
@ DEPEND_TRY_TRIGGERS
Definition: main.h:194
bool force_conflicts(struct deppossi *possi)
Definition: help.c:202
void trigproc_reset_cycle(void)
Definition: trigproc.c:206
bool find_command(const char *prog)
Definition: help.c:79
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:332
int maintscript_new(struct pkginfo *pkg, const char *scriptname, const char *desc, const char *cidir, char *cidirrest,...) DPKG_ATTR_SENTINEL
Definition: script.c:292
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:117
int cmpversions(const char *const *argv)
Definition: enquiry.c:692
void deppossi_pkg_iter_free(struct deppossi_pkg_iterator *iter)
Definition: depcon.c:96
Definition: dpkg-db.h:56
Definition: depcon.c:42
struct deppossi * possi
Definition: depcon.c:43
Definition: dpkg-db.h:63
Definition: fsys.h:126
Definition: fsys.h:94
Definition: main.h:81
char * command
Definition: main.h:83
struct invoke_hook * next
Definition: main.h:82
Definition: main.h:86
struct invoke_hook * head
Definition: main.h:87
struct invoke_hook ** tail
Definition: main.h:87
Definition: main.h:55
int cmdline_seen
Definition: main.h:64
int replacingfilesandsaid
Definition: main.h:63
enum pkg_cycle_color color
Used during cycle detection.
Definition: main.h:59
enum pkg_istobe istobe
Definition: main.h:56
struct pkg_list * trigprocdeferred
Non-NULL iff in trigproc.c:deferred.
Definition: main.h:67
bool enqueued
Definition: main.h:61
Definition: pkg-list.h:34
Node describing a binary package file.
Definition: dpkg-db.h:108
Node describing an architecture package instance.
Definition: dpkg-db.h:198
varbuf_init must be called exactly once before the use of each varbuf (including before any call to v...
Definition: varbuf.h:55