1 AUTHOR: David Rosal <davidrr@users.sourceforge.net>
5 LICENSE: GNU Free Documentation License Version 1.2
7 SYNOPSIS: Paco - source code package manager
10 Yet another try to provide a package manager for source code based systems,
11 such as LFS. But paco comes with some nice features, such as an optional
12 GTK+ graphic interface, and the use of the LD_PRELOAD method to keep track
13 of the files installed by the packages.
16 * For the (optional) GUI: GTK+ >= 2.4 and pkg-config.
19 The latest version of this hint and the sources of paco can be found at:
20 --> http://paco.sourceforge.net
27 I wrote paco because I couldn't get satisfied with any existent package
28 manager to keep track of my LFS installation.
30 I used to work with Andy Goth's install-log, which I like much; but
31 install-log has some serious limitations due to the use of the "timestamp
32 method" to keep track of the files installed by the packages.
33 As said in the BLFS book:
35 In this technique, a file is timestamped before the installation of
36 the package. After the installation, a simple use of the find
37 command with the appropriate options can generate a log of all the
38 files installed after the timestamp file was created. A package
39 manager written with this approach is install-log.
41 Though this scheme has the advantage of being simple, it has two
42 drawbacks. If during installation, the files are installed with any
43 timestamp other than the current time, those files will not be
44 tracked by the package manager. Also, this scheme can only be used
45 when one package is installed at a time. The logs are not reliable
46 if two packages are being installed on two different consoles.
48 I also tried CheckInstall, which is widely used by the Linux community, and
49 based on the LD_PRELOAD method, which I find better. From the BLFS book:
51 In this approach, a library is preloaded before installation. During
52 installation, this library tracks the packages that are being installed
53 by attaching itself to various executables such as cp, install, mv and
54 tracking the system calls that modify the filesystem. For this approach
55 to work, all the executables need to be dymanically linked without the
56 suid or sgid bit. Preloading the library may cause some unwanted
57 side-effects during installation; hence do perform some tests to ensure
58 that the package manager does not break anything and logs all the
61 But though CheckInstall is very efficient, it finally depends on the package
62 manager of the host system (rpm, dpkg or installpkg), so it doesn't fit the
63 needs of the LFS community.
65 So finally I decided to put my fingers on the keyboard, and write a package
66 manager with the pros of the above and without their cons. And the result is
67 paco (pacKAGE oRGANIZER).
72 Paco works mainly in two modes:
74 In log mode, it keeps track of a package installation (though it can be used
75 to follow the trace of any command or script), and generates a list of all
78 In list mode, which is the default, paco retrieves information from the
79 generated logs and displays it in a friendly format.
81 Paco can be used also to remove a package, query for the owner of files or
82 print extended information about the packages.
84 The output of 'paco --help' follows:
88 | paco [OPTIONS] <packages|files|command>
91 | -i, --info Print extended package information, if available.
92 | -L, --logdir=DIR Use DIR as the paco log directory.
93 | -x, --expand Expand the command line package names.
94 | -a, --all Apply to all logged packages (not with -r).
95 | -q, --query Query for the owners of files.
96 | -u, --update Update the log of the package.
97 | -U, --unlog Remove the log of the package.
98 | -v, --verbose Verbose output (-vv to increase verbosity).
99 | -?, --help Display this help message.
100 | --usage Display option summary.
101 | -V, --version Display version information.
104 | -1, --one-column List one package per line.
105 | -b, --block-size=SIZE Show sizes in SIZE-byte blocks.
106 | -k, --kilobytes Show sizes in 1024-byte blocks.
107 | -d, --date Show installation date (-dd shows the hour too).
108 | -f, --files List installed files.
109 | -m, --missing-files List missing files.
110 | -c, --shared List shared files.
111 | -w, --who-shares With -c: Print the packages that share each file.
112 | -F Print the number of installed files.
113 | -M Print the number of missing files.
114 | -C Print the number of shared files.
115 | -s, --size Show the size of each package or file.
116 | -n, --missing-size Print the total missing size of the package.
117 | --sort=WORD Sort by WORD: 'name', 'date', 'size', 'missing-size',
118 | 'files', or 'missing-files'.
119 | -R, --reverse Reverse order while sorting.
120 | -t, --total Print the total.
121 | -y, --symlinks With -f: Print the contents of symbolic links.
122 | -z, --no-package-name With -f, -c, -m: Do not print the name of the package.
125 | -r, --remove Remove the (non shared) files of the package.
126 | --remove-shared Remove also the shared files.
127 | --batch Don't ask for confirmation when removing.
130 | -l, --log Log mode.
131 | -p, --package=PKG Name of the package to log.
132 | -D, --dirname Use the name of the current directory as the name of
134 | -S, --stdin Read the list of files directly from stdin.
135 | -I, --include=DIR:... Colon-separated list of paths to include in the log.
136 | -E, --exclude=DIR:... Colon-separated list of paths to skip.
137 | -+, --append With -p, -D: If the package is already logged, append
138 | the list of files to the log.
140 | Note: The list mode is enabled by default.
146 Gpaco is the GTK+ frontend of paco.
147 Its aim is not to replace paco, since it does not provide all of its
148 functionalities. Currently supported features are: listing packages or
149 files, update the database, query package information and remove packages.
150 Gpaco can't log a package installation or query for the owner of files.
151 Paco should be used instead.
156 1) To log the installation of the package 'boofar-1.0', wich is installed by
157 'make -C src install':
159 paco -lp boofar-1.0 "make -C src install"
161 This will create a log file named 'boofar-1.0' in the log directory, with
162 the list of all installed files.
163 (Note that in this example the quotes are required in order to prevent
164 paco to parse '-C' as a command line option).
166 2) Alternatively, we can use the name of the current directory as the name of
167 the package to log, using the option -D:
169 paco -lD "make install && make install.man"
171 3) If we have forgotten to install a file, it can be added to a previously
172 created log with the option -+:
174 paco -lp+ boofar-1.0 "install boofile /usr/bin/boofile"
176 4) To remove all versions of the package boofar, without asking for
179 paco -rx --batch boofar
184 * Upgraded to paco-1.8.0.
187 * Changed the email address.
188 * Upgraded to paco-1.7.1
189 * Slight changes in Introduction, Usage and Examples.
190 * Added gpaco description.
193 * Almost everything changed.
196 * Replaced the tarball URL with the project web site one.
197 * Added introduction.
198 * Corrected the 'paco --help' output to include the '-l' option.