Add Boot RAID hint
[linux_from_scratch_hints.git] / paco.txt
blobdc7ce84a09aa2551934bcd320ea3581139ce0957
1 AUTHOR:   David Rosal <davidrr@users.sourceforge.net>
3 DATE:     2005-02-03
5 LICENSE:  GNU Free Documentation License Version 1.2
7 SYNOPSIS: Paco - source code package manager
9 DESCRIPTION:
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.
15 PREREQUISITES:
16   * For the (optional) GUI: GTK+ >= 2.4 and pkg-config.
18 PRIMARY URL:
19   The latest version of this hint and the sources of paco can be found at:
20     --> http://paco.sourceforge.net
23 HINT:
25 0. Introduction
26 ===============
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
59     appropriate files.
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).
70 1. Usage
71 ========
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
76 installed files.
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:
86 +-----
87 | Usage:
88 |   paco [OPTIONS] <packages|files|command>
89
90 | General options:
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.
103 | List options:
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.
124 | Remove options:
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.
129 | Log options:
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
133 |                           the package.
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.
141 +-----
144 2. Gpaco
145 ========
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.
154 3. Examples
155 ===========
156 1) To log the installation of the package 'boofar-1.0', wich is installed by
157    'make -C src install':
158     
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
177    confirmation:
179         paco -rx --batch boofar
182 CHANGELOG:
183 [2005-02-03]
184   * Upgraded to paco-1.8.0.
186 [2004-11-28]
187   * Changed the email address.
188   * Upgraded to paco-1.7.1
189   * Slight changes in Introduction, Usage and Examples.
190   * Added gpaco description.
192 [2004-09-03]
193   * Almost everything changed.
195 [2004-06-22]
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.
199   
200 [2004-06-08]
201   * Initial hint.