yalpack-0.1.5
yalpack is a simple set of package management tools for LFS/BLFS-based systems. It consists of POSIX-compliant scripts and man pages designed to make managing upgrades and trying out new software easier:
- Install compiled software as a package
- Easily remove unwanted software
- Make upgrades simple(r)
- No space to keep package tarballs? No problem.
- Manage and log .new files
- Generate and retrieve dynamic library information to help with dependency management
- Retrieve a list of installed packages (with or without version information)
- Search for which package provided which file/directory/symlink
- Regenerate the yalpack directory in case of damage
yalpack can be used at any point in the Linux From Scratch installation process once all temporary tools have been built and the chroot stage has been reached. This has been tested successfully on Linux From Scratch 10.1 (sysvinit), as well as the development version (as of June 20th, 2021), which has a merged-usr setup.
Under no circumstances should yalpack be used on the "host" system. yalpack is untested on pre-10.1 versions of Linux From Scratch, and should not be used with glibc-2.26 or earlier.
See INSTALL or run "make all" for details about installation!
This is the most comprehensive upgrade to yalpack since the repo went public; it is better-looking and more convenient than ever.
Changes
With merged-usr set to be introduced in the upcoming LFS/BLFS 11.0, the main focus of this release is improving the handling of symlinks (and paths containing symlinks) to ensure that yalpack can be used safely from September 2021:
- The yalpack directory tree now includes SYMTREES; the files within are generated at package installation time, and are intended to show the non-symlinked locations of items installed under a path containing symlinks.
- yalpack now includes its own install.sh script, which will make and populate the SYMTREES directory if necessary.
- In preparation for the new LFS directory structure, the default SBINDIR for yalpack is now /usr/sbin. Scripts and documentation have been updated accordingly.
- pkginst:
- The installation unpacking now dereferences for hard and symbolic links.
- A SYMTREE file is generated if necessary (if it is, it means that either the package has a symlink to a destination owned by another package, or something was installed under a path with a symlink).
- pkgup: Added mechanisms for handling the outgoing-package SYMTREE, if any.
- pkgremove:
- Checks for paths with symlinks during file deletion.
- Merged-usr related symlinks are protected from removal in all cases (hardcoded)
- Symlinks pointing to locations required by another package can be replaced,but not deleted.
- Handling the outgoing-package SYMTREE, if any.
- pkgfind now searches in SYMTREE files to provide more comprehensive results.
- "liblist -n" and libcheck now skip top-level directories that are symlinks (avoiding double work for both and duplicate results for libcheck).
A second area of emphasis is the addition of backup and regeneration capabilities:
- Added restore-yalpack: Use a parallel copy of the package trees directory to restore the /var/yalpack directory in case of var accidents. (placed in /usr/share/yalpack)
- install.sh: In addition to populating SYMTREES, install.sh also sets up parallel package tree directories for backup purposes.
- pkginst, pkgup and pkgremove have been modified to update the parallel package tree directories, if present.
Other quality-of-life changes include:
- .new files are now documented separately for each package. install.sh will generate the new directory and .new file lists for all installed yalpack packages.
- NEWFILE-LOG was horrible. It is now deprecated.
- Added newfiles: Update the NEWFILES directory to reflect currently-existing files on the system (placed in /usr/share/yalpack); display the lists if desired.
- pkgremove and pkgcheck: Loop logic has been altered to increase speed.
- pkgmake: Only non-binary files are designated .new by default.
- Output formatting has been improved for all scripts (better spacing, less verbose).
- Variable names have been edited to be more consistent across scripts.
- Workarounds for installing bzip2, SysVInit and sysklogd are now documented; build scripts for the latter two can be found in the doc directory.
- Added a list of man pages to the doc directory.
Bugfixes:
- Absolute symlink repair with the tar installation method has been fixed.
- "telinit U" failures are ignored by pkgup (needed if glibc or SysVInit upgrades are done under chroot).
- pkgcheck no longer misses .new executable files that have been renamed or removed by pkginst. Handling of symlinks reworked.
- pkgremove no longer fails to delete directories containing only empty directories belonging to the deleted package (and so on).