r911 - trunk
tushar at linuxfromscratch.org
tushar at linuxfromscratch.org
Sun Nov 28 15:58:54 PST 2004
Date: 2004-11-28 16:58:54 -0700 (Sun, 28 Nov 2004)
New Revision: 911
Updated Hint: paco
--- trunk/paco.txt 2004-11-23 06:38:02 UTC (rev 910)
+++ trunk/paco.txt 2004-11-28 23:58:54 UTC (rev 911)
@@ -1,22 +1,22 @@
-AUTHOR: David Rosal <davidrr at menta.net>
+AUTHOR: David Rosal <davidrr at users.sourceforge.net>
LICENSE: GNU Free Documentation License Version 1.2
SYNOPSIS: Paco - Source code package manager
-Yet another try to provide a package manager for source-code-based systems,
-such as LFS. But paco comes with some nice features, such as a (optional)
-GTK+ graphic interface, and the use of the LD_PRELOAD method to keep track
+Yet another try to provide a package manager for source code based systems,
+such as LFS. But paco comes with some nice features, such as an optional
+GTK graphic interface, and the use of the LD_PRELOAD method to keep track
of the files installed by the packages.
- * For the (optional) GUI: gtk+ >= 2.0 and pkg-config.
+ * For the (optional) GUI: GTK+>=2.0 and pkg-config.
- The latest version of this hint and the sources of paco can be found in:
+ The latest version of this hint and the sources of paco can be found at:
@@ -43,19 +43,25 @@
timestamp other than the current time, those files will not be
tracked by the package manager. Also, this scheme can only be used
when one package is installed at a time. The logs are not reliable
- if two packages are being installed on two different consoles.
+ if two packages are being installed on two different consoles.
-I also tried installwatch, which is based on the LD_PRELOAD method, which I
-find better: To get the list of installed files, a library is loaded before
-installation. During installation, this library tracks the system calls that
-modify the filesystem. For this approach to work, all the executables need
-to be dymanically linked without the suid or sgid bit.
-But though installwatch is very efficient, it finally writes the list in a
-non-human readable format; and it stops there, without providing any feature
-to manage the packages after installation.
+I also tried CheckInstall, which is widely used by the Linux community, and
+based on the LD_PRELOAD method, which I find better. From the BLFS book:
+ In this approach, a library is preloaded before installation. During
+ installation, this library tracks the packages that are being installed
+ by attaching itself to various executables such as cp, install, mv and
+ tracking the system calls that modify the filesystem. For this approach
+ to work, all the executables need to be dymanically linked without the
+ suid or sgid bit. Preloading the library may cause some unwanted
+ side-effects during installation; hence do perform some tests to ensure
+ that the package manager does not break anything and logs all the
+ appropriate files.
+But though CheckInstall is very efficient, it finally depends on the package
+manager of the host system (rpm, dpkg or installpkg), so it doesn't fit the
+needs of the LFS community.
So finally I decided to put my fingers on the keyboard, and write a package
manager with the pros of the above and without their cons. And the result is
paco (pacKAGE oRGANIZER).
@@ -65,14 +71,16 @@
Paco works mainly in two modes:
-In log mode it keeps track of a package installation (though it can be used
+In log mode, it keeps track of a package installation (though it can be used
to follow the trace of any command or script), and generates a list of all
-Paco can be run also in list, query or remove modes to perform some basic
-operations on the installed packages, by retrieving information from their
+In list mode, which is the default, paco retrieves information from the
+generated logs and displays it in a friendly format.
+Paco can be used also to remove a package, query for the owner of files or
+print extended information about the packages.
The output of 'paco --help' follows:
@@ -82,74 +90,98 @@
| paco -l [OPTIONS] <command>
| General options:
-| -g, --gui Run the gui.
-| -L, --logdir=DIR Read/write logs from/to directory DIR.
-| -q, --query Query for the owner(s) of <files>.
-| -u, --update Update the package database.
-| -v, --verbose Verbose output.
-| -V, --version Display version information.
-| -?, --help Display usage information.
+| -i, --info Print extended package information, if available.
+| -L, --logdir=DIR Read/write logs from/to directory DIR.
+| -x, --expand Expand the package names given by the command line.
+| -a, --all List/update/unlog all logged packages.
+| -q, --query Query for the owners of files.
+| -u, --update Update the log of the package.
+| -U, --unlog Remove the log of the package.
+| -v, --verbose Verbose output.
+| -V, --version Display version information.
+| -?, --help Display usage information.
| List options:
-| -1, --one-column List one package per line.
-| -B, --block-size=SIZE Show sizes in SIZE-byte blocks.
-| -b, --bytes Show sizes in 1-byte blocks.
-| -k, --kilobytes Show sizes in 1024-byte blocks.
-| -h, --human-readable Show sizes in human readable format (e.g. 1.2M, 7k).
-| -d, --date Show installation date.
-| -D, --date-and-hour Show date and hour of installation.
-| -f, --list-installed List installed files.
-| -m, --list-missing List missing files.
-| -F, --installed Print the number of installed files.
-| -M, --missing Print the number of missing files.
-| -s, --sort=WORD Sort by WORD: size, date, name, installed or missing.
-| -R, --reverse Reverse order while sorting.
-| -t, --total Print the total.
+| -1, --one-column List one package per line.
+| -b, --block-size=SIZE Show sizes in SIZE-byte blocks.
+| -k, --kilobytes Show sizes in 1024-byte blocks.
+| -d, --date Show installation date (-dd shows the hour too).
+| -f, --files List installed files.
+| -m, --missing List missing files.
+| -F Print the number of installed files.
+| -M Print the number of missing files.
+| -s, --size Show the disk usage of each package or file.
+| --sort=WORD Sort by WORD: size, date, name, files or missing.
+| -R, --reverse Reverse order while sorting.
+| -t, --total Print the total.
+| -y, --symlinks With -f: Print the contents of symbolic links.
+| -z, --no-package-name With -f: Don't print the name of the package.
| Remove options:
-| -r, --remove Remove the (non shared) files of a package.
-| --remove-shared With -r: Remove also the shared files.
-| --batch With -r: Don't ask for confirmation when removing.
-| -e, --remove-empty-dir With -r: Remove empty directories.
-| -U, --unlog Remove the log of the package.
+| -r, --remove Remove the (non shared) files of the package.
+| --remove-shared Remove also the shared files.
+| --batch Don't ask for confirmation when removing.
+| -e, --empty-dirs Remove empty directories.
+| -K, --keep-log Don't remove the log of the package.
| Log options:
-| -l, --log Log mode.
-| -p, --package=PKG Name of the package to log.
-| -a, --append With '-p': If the package is already logged, append
-| the list of files at the end of the log.
-| -I, --include=PATH:... Colon-separated list of paths to scan.
-| -E, --exclude=PATH:... Colon-separated list of paths to skip.
+| -l, --log Log mode.
+| -p, --package=PKG Name of the package to log.
+| -+, --append With '-p': If the package is already logged, append
+| the list of files to the log.
+| -I, --include=DIR:... Colon-separated list of directories to scan.
+| -E, --exclude=DIR:... Colon-separated list of directories to skip.
| Note: The list mode is enabled by default.
-1) To log the installation of the package 'foobar-1.0', wich is installed by
+Gpaco is a GTK frontend for paco.
+Its aim is not to replace paco, since it does not provide all of its
+functionalities. Currently supported features are: listing packages or
+files, update the database, query package information and remove packages.
+Gpaco can't log a package installation or query for the owner of files.
+Paco should be used instead.
+1) To log the installation of the package 'boofar-1.0', wich is installed by
'make -C src install':
- paco -lp foobar-1.0 "make -C src install"
+ paco -lp boofar-1.0 "make -C src install"
+ This will create a log file named 'boofar-1.0' in the log directory, with
+ the list of all installed files.
(Note that in this example the quotes are required in order to prevent
paco to parse '-C' as a command line option).
-2) To list the missing files of the package 'foobar-1.0':
- paco -fM foobar-1.0
+ If we have forgotten to install a file, it can be added to the log with:
-3) To print a list of all logged packages sorted by size, with the sizes in
- human readable format, and the installation dates:
- paco -hds size
+ paco -lp+ boofar-1.0 install boofile /usr/bin/boofile
+2) To get a list of all files installed by the package:
+ paco -f boofar-1.0
+3) To remove all versions of the package boofar:
+ paco -rx boofar
4) To print the owners of each file in directory /bin:
paco -q /bin/*
+ * Changed the email address.
+ * Upgraded to paco-1.7.1
+ * Slight changes in Introduction, Usage and Examples.
+ * Added gpaco description.
* Almost everything changed.
@@ -160,3 +192,4 @@
* Initial hint.
More information about the hints