NAME
sbokeeper - SlackBuild package manager helper
SYNOPSIS
sbokeeper [options] command [args]
DESCRIPTION
sbokeeper is a tool that can help a Slackware system administrator keep track of their installed SlackBuilds by maintaining a database of added packages and their dependencies. It is not a package manager itself, it simply helps in the task of managing SlackBuilds.
The package database is a text file that stores all of sbokeeper's package data. By default, it is stored in ~/.local/share/sbokeeper/data.sbokeeper, but it can be configured to be stored in another location.
CONFIGURATION
sbokeeper reads it's configuration from a configuration file. A sbokeeper configuration file consists of lines of key-value pairs. A key-value pair follows this format:
Key = Value
Blank lines and lines starting with a hash (#) are ignored.
Unless the -c option is used, sbokeeper will search for a configuration file in the following paths in descending order:
If no configuration file is found, sbokeeper will use default values for everything.
The following are valid configuration entries:
- DataFile
-
Absolute path to file where package database will be stored. A '~' can be expanded into the running user's home directory, but other kinds of shell expansion are not performed.
Can be overridden by the -d option.
Default value is ~/.local/share/sbokeeper/data.sbokeeper.
- SBoPath
-
Absolute to path to directory where local SlackBuild repository is kept. The directory should look something like this:
SBoPath academic pkg1 pkg2 ... business pkg3 pkg4 ...
The package categories themselves do not actually matter, all that matters is that each SlackBuild is inside a directory that is inside SBoPath.
If your SlackBuild repository directory follows the same format as the official git repository then you should be good.
A '~' can be expanded into the running user's home directory, but other kinds of shell expansion are not performed.
Can be overridden with the -s option.
The default value depends on what SlackBuild package management tools are installed on your system. If you are using one the following:
then sbokeeper will use the default repo location of the first package manager it finds installed on your system. If none can be found, sbokeeper will croak and just tell you to set it manually.
- Tag
-
Packge tag used by your SlackBuild repo. The package tag is the string at the end of a package name, usually beginning with an underscore.
Can be overridden with the -t option.
The default value is '_SBo'.
- Blacklist
-
List of packages or path to blacklist file that tells what packages to ignore.
If Blacklist starts with a slash or tilde (
'/'
or'~'
), sbokeeper will interpret the option as a path to a blacklist file and read the blacklist from that. Otherwise, sbokeeper will treat Blacklist as a white-space seperated list of packages to blacklist.A blacklist file is a text file that contains a list of packages to blacklist, with each package having its own line. Blank lines and lines starting with hashes (
'#'
) are ignored.# This will blacklist mpv, lua, and avahi mpv lua avahi
Can be overridden with the -b option.
sbokeeper does not use a blacklist by default.
The /CAVEATS section of this manpage details some warnings when using blacklists.
COMMANDS
- add pkg ...
-
Adds packages to package database, along with any of their dependencies. Added packages are marked as manually added, dependencies are not. If a package that is specified is already present in the database but not marked as manually added, it will be marked as manually added.
If add encounters a package that is already present in the package database, it will skip adding it. This means that if the package is missing dependencies, it will not try to re-add those dependencies. If this poses a problem, the depwant command can help users track down missing dependencies.
This command supports aliases.
- tack pkg ...
-
Adds package to package database. Does not add any of their dependencies. Added packages are marked as manually added. If a package that is specified is already present in the database but not marked as manually added, it will be marked as manually added.
This command supports aliases.
- addish pkg ...
-
Same thing as add, but added packages are not marked as manually added.
This command supports aliases.
- tackish pkg ...
-
Same thing as tack, but added packages are not marked as manually added.
This command supports aliases.
- rm pkg ...
-
Remove packages from package database. Does not remove dependencies.
This command supports aliases.
- clean
-
Remove unnecessary packages from package database. This command is the same as running
sbokeeper rm @unnecessary
. - deps pkg
-
Prints list of dependencies for pkg. Does not print dependencies of those dependencies, for that I'd recommend the tree command. The dependency list is according to the dependencies found in the database, not the dependencies listed in the SlackBuild repo.
- rdeps pkg
-
Prints a list of reverse dependencies for pkg (packages that depend on pkg). Does not print reverse dependencies of those dependencies, for that I'd recommend the rtree command. The dependency list is according to the dependencies found in the database, not those listed in the SlackBuild repo.
- depadd pkg deps ...
-
Add deps to pkg's dependency list. Dependencies that are not present in the database will automatically be added.
** IMPORTANT **
This command provides an easy way for you to introduce circular dependencies into your package database, which sbokeeper cannot handle and can leave your database unable to be read. Refrain from carelessly using this command!
This command supports aliases for deps, they do not work for pkg.
- deprm pkg deps ...
-
Remove deps from pkg's dependency list.
This command supports aliases for deps, they do not work for pkg.
- pull
-
Finds any SlackBuilds.org package installed on your system that is not present in your package database and tries to add it to your database. All packages that are added are marked as manually added. Packages that are already present in your database are skipped.
- diff
-
Prints a list of SlackBuild packages that are present on your system but not in your database and vice versa.
- depwant
-
Prints a list of packages that are, according to the SlackBuild repo, missing dependencies in your database.
- depextra
-
Prints a list of packages with extra dependencies and said extra dependencies. Extra dependencies are dependencies listed in the package database that are not present in the SlackBuild repo.
- unmanual pkg ...
-
Unset packages as being manually installed, but do not remove them from the database.
This command supports aliases.
- print cat ...
-
Print unique list of packages that are a part of the specified categories. The following are valid categories:
- all
-
All packages present in the database.
- manual
-
Packages that were manually added.
- nonmanual
-
Packages that were not manually added.
- necessary
-
Packages that were added manually or are a dependency of a manually added package.
- unnecessary
-
Packages that were not manually added or a dependency of a manually added package.
- missing
-
Packages that are not present in the database but are needed by packages in the database.
- untracked
-
SlackBuild packages that are installed on your system but not present in your database.
- phony
-
Packages that are present in your database that are not actually installed on your system.
If no cat is specified, defaults to 'all'.
This command supports aliases.
- tree pkgs ...
-
Prints a dependency tree. If pkgs are not specified, prints a dependency tree for each manually added package in the database. If pkgs are specified, prints a dependency tree for each package given.
A dependency tree will look something like this:
libplacebo python3-meson-opt python3-build python3-pyproject-hooks python3-installer python3-flit_core python3-wheel python3-installer python3-flit_core python3-glad
This command supports aliases.
- rtree pkgs ...
-
Same thing as tree, but for reverse dependencies instead.
This command supports aliases.
- dump
-
Dumps contents of data file to stdout.
- help cmd
-
Print help message for specified command.
Aliases
Some commands can accept aliases as arguments. An alias is an 'at' symbol (@) followed by the package category it is aliasing. sbokeeper will convert the alias to the list of packages it is meant to represent. For example, if you wanted to remove all packages from a package database, you could do:
sbokeeper rm @all
and @all would be substituted for a list of every package present in the database.
The following are valid aliases:
Please refer to the documentation for the print command for what each of these categories mean.
OPTIONS
- -B list, --blacklist=list
-
Specify what packages to blacklist. If list is a file, sbokeeper tries to read the blacklist from that. Otherwise, sbokeeper treats list as a whitespace-seperated list of packages to blacklist.
See the documentation for the
Blacklist
config file option for more information on the format of a blacklist file.The /CAVEATS section of this manpage details some warnings when using blacklists.
- -c path, --config=path
-
Specify the path to the configuration file.
- -d path, --datafile=path
-
Specify the path to the data file.
- -s path, --sbodir=path
-
Specify the path to the local SlackBuild repository.
- -t tag, --tag=tag
-
Specify the tag used by your SlackBuild repo's packages.
- -y, --yes
-
Automatically agree to any prompts.
- -h, --help
-
Print help message and exit.
- -v, --version
-
Print version and copyright information, then exit.
CAVEATS
Whenever sbokeeper encounters a blacklisted package while reading a pre-existing database, sbokeeper will skip over reading that entry. That means that when sbokeeper rewrites the database, any blacklisted package entry will be lost. This behavior may change in the future, if there is demand for it to be changed.
RESTRICTIONS
sbokeeper does not currently support tracking packages from multiple seperate repos. A possible workaround would be to maintain seperate configurations for each repo.
BUGS
sbokeeper is (as of right now) incapable of handling circular dependencies. If you stick with the official SlackBuild.org repos, this should not happen in the wild. Circular dependencies can easily be introduced if one does not use depadd carefully. So beware.
Report bugs on my Codeberg, https://codeberg.org/1-1sam.
AUTHOR
Written by Samuel Young <samyoung12788@gmail.com>.
COPYRIGHT
Copyright (C) 2024-2025 Samuel Young
This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.
See https://dev.perl.org/licenses/ for more information.