prt-get/doc/prt-get.8

723 lines
24 KiB
Groff

.\" man page for prt-get
.\" original work by Johannes Winkelmann, jw at tks6 dot net
.\"
.\" extended in 2013 by Alan Mizrahi, alan at mizrahi dot com dot ve
.\" and in 2023 by John McQuah, jmcquah at disroot dot org
.\"
.\" .PU
.TH "prt-get" "8" "" "" ""
.SH "NAME"
.LP
prt\-get \- an advanced package management tool to be used with
pkgutils from CRUX (see http://www.crux.nu)
.SH "SYNOPSIS"
.B prt\-get command [options] <arguments>
.br
.SH "DESCRIPTION"
prt\-get is a package management tool which provides additional
functionality to the CRUX package management system. It works with the
local ports tree and is therefore fully compatible with ports(8) and
pkgmk(8)/pkgadd(8)/pkgrm(8). It offers the following features:
.PP
.TP
\ \ \ \(bu
abstract ports installation/update from file system
.TP
\ \ \ \(bu
install/update a list of packages with one command
.TP
\ \ \ \(bu
list dependencies for a list of packages
.TP
\ \ \ \(bu
show information about ports
.TP
\ \ \ \(bu
search within the ports
.PP
What prt\-get basically does is build, install/upgrade, and remove packages, using
pkgmk, pkgadd, and pkgrm. Additionally, you don't have be in the port's
directory to call prt\-get. prt\-get will search for the respective port
itself in a list of directories specified in /etc/prt\-get.conf. This
allows you to just install or update a package, without caring where
it actually is located on your file system.
.PP
prt\-get also lets you search for ports by name,
find information about ports (without installing them of course),
or print the dependencies of a port (as a space- or newline-separated list,
or a formatted tree). Note that dependencies are no
requirement for crux packages and therefore not always accurate.
.PP
prt\-get has a test mode so you can see what effect an install/update
operation would have. Use the \-\-test switch for this (more details in
the \fBOPTIONS\fP section below).
.SH "RETURN VALUE"
prt\-get returns 0 on success and a non-zero value otherwise (exact
value -> meaning mapping to be determined...)
.SH "COMMANDS"
prt\-get uses so\-called commands, which always have to be the first
non-option argument passed. This is very similar to
.B cvs(1).
[command] can be one of the following:
.TP
.B install [\-\-margs] [\-\-aargs] [\-\-log] [\-\-nodeps] [\-\-softdeps] <package1> [<package2> ...]
install or update the packages given on the command line. Note that you can do
this from any directory. Pass the --nodeps flag to prevent \fBprt\-get\fP from
resolving dependencies and injecting any needed ports into the list of targets.
Pass the --softdeps flag if you want the dependency resolver to also consider
the "Optional" relationships among the packages given on the command line.
.TP
.B depinst [\-\-margs] [\-\-aargs] [\-\-log] [\-\-softdeps] <package1> [<package2> ...]
Basically a synonym for install (without the --nodeps flag).
.TP
.B update [\-\-margs] [\-\-aargs] [\-\-log] [\-\-softdeps] <package1> [<package2> ...]
Basically a synonym for install. Earlier versions of \fBprt\-get\fP did not adjust
the \fBpkgadd(8)\fP arguments on a package-by-package basis, but applied "install
mode" or "update mode" to the entire transaction. This latest \fBprt\-get\fP
interprets the install command less rigidly, and tries to sync your installed
ports with their repository versions unless instructed otherwise (using
\fBprt\-get lock\fP, the --prefer-higher option, or the \fIprt-get.aliases\fP
file).
.TP
.B remove <package1> [<package2> ...]
remove packages listed in this order
.TP
.B sysup [\-\-softdeps] [\-\-nodeps]
Update all installed packages which are outdated. Sorts by hard dependencies
by default. Passing the --softdeps switch tells \fBprt\-get\fP to also consider
optional dependencies when sorting. Passing the --nodeps switch tells prt-get
not to sort by dependencies at all.
.B Breaking Change:
If a port has acquired new dependencies since its last successful build,
those new dependencies will be injected into the transaction. This feature
lingered many years on the TODO list, and its absence was the motivation for
many clever workarounds (documented in the \fBEXAMPLES\fP section below).
You can use the
.B lock
and
.B unlock
commands to keep the currently installed versions, even if there are
changes in the ports tree. If you want to update only diffs which have
a lower version installed than the one in the ports tree, use the
--prefer-higher option.
.TP
.B lock <package1> [<package2>...]
Do not update these packages in a
.B sysup
operation
.TP
.B unlock <package1> [<package2>...]
Remove lock from these packages
.TP
.B listlocked [-v|-vv]
List names of packages which are locked. As always,
.B -v
will additionally show the version, and
.B -vv
also includes the description from the Pkgfile. Note that the
.B -vv
switch will slow down the operation remarkably.
.TP
.B diff [\-\-all] [\-\-prefer\-higher] [<package1> <package2> ...]
show differences between installed packages and ports in the ports
tree. If arguments are given, shows only differences for these
packages, otherwise all differences are shown. It's also possible to use
shell-like
.B wildcards
for the diff command. Make sure you escape where needed. Locked
packages are only displayed if you use the --all switch. If you want
to see only diffs which have a lower version installed than the one in
the ports tree, use the --prefer-higher option.
.TP
.B quickdiff
prints a simple list of packages which have a different version in the
ports tree than what is installed. The output is sorted alphabetically,
but you can generate a (larger) list sorted by dependencies using
.B prt\-get quickdep $(prt\-get quickdiff).
If you want to see only diffs which have a lower version installed than
the one in the ports tree, use the --prefer-higher option.
.TP
.B search [\-v|\-vv] [\-\-path] [\-\-regex] <expr>
Search the ports tree for
.B expr
in their name
.TP
.B dsearch [\-v|\-vv] [\-\-path] [\-\-regex] <expr>
Search the ports tree (both name and description) for the pattern
.B expr
(which can be a shell-like wildcard pattern or a regexp). The search in
the description is not case sensitive. Note that this requires prt\-get
to read every Pkgfile, which makes it rather slow; if you like this,
consider using the cache functionality, so you only have to spend this
time once after updating the ports tree has been updated.
.TP
.B fsearch [\-\-full] [\-\-regex] <pattern>
Search the ports tree for
.B pattern
as file name in their footprint. When called without '--full', strips
the directories from the file names before matching; this behaviour
will change in prt-get 0.6, where full path search will be the
default. Pattern can be a shell-like wildcard pattern (e.g. prt-get
fsearch "*.h") or a regular expression (e.g. prt-get fsearch --regex 'liblz(o2|ma).*')
.TP
.B info <port>
Print available info for a port
.TP
.B path <port>
Print the path of a port
.TP
.B readme <port>
Print the port's README file if it exists; if set, uses $PAGER
.TP
.B depends [\-\-softdeps] <package1> [<package2> ...]
print a recursive list of dependencies needed to install the packages passed
as argument. It shows a list of the dependencies that were found in the ports tree,
plus a list of the dependencies that could not be found. Pass the --softdeps flag
if you want the sorting algorithm to consider optional dependencies too.
.TP
.B quickdep [\-\-softdeps] <package1> [<package2> ...]
same output as \fBdepends\fP, but separated by spaces rather than newlines, and
stripped of any dependencies that could not be found in the ports tree.
Useful in case the list of dependencies is too large to fit on one screen, or
if you don't want to filter out manually the ports that are invalid targets for
installation. For example, instead of
.B prt\-get depinst xorg-server
you might micromanage the process as follows:
.B for i in $(prt\-get quickdep xorg-server); do prt\-get install \-fr \-\-nodeps $i; done
which ensures that the latest version of each dependency is built.
Note: It might be useful to run
.B prt\-get depends <package1> | grep \(dq\-\- missing packages\(dq
as a first step, in order to ensure that your ports tree has everything needed
for successful builds.
.TP
.B deptree [\-\-softdeps] <package>
print a tree of the dependencies of the package
.B <package>.
Pass the --softdeps flag to also show the installed packages that mention
.B <package>
as an optional dependency.
Subtrees already shown are marked with '-->' to save some space. In
order to show them all, add the --all switch.
.SH ""
.TP
.B dependent [\-\-softdeps] <package>
print a list of ports which have
.B <package>
in their "Depends on:" line. Use the --softdeps flag to also search the
"Optional:" lines for \fB<package>\fP.
By default, output is restricted to ports that are installed. To see all hard
dependencies, add the --all switch; use --recursive to get a recursive list
(without duplication), and --tree to get a nicely indented one.
.TP
.B dup [-v] [format]
List ports which can be found in multiple directories configured in
.B /etc/prt-get.conf
Use the verbose switch to simulate the output of version 5.12 and older (likely
to go away in the future). The format string can be used to create user
specified formats. The following symbols are currently replaced:
.TP
\ \ \ \(bu
%n \-> name of the port
.TP
\ \ \ \(bu
%p1 \-> Full path (including name) to port taking precendence
.TP
\ \ \ \(bu
%p2 \-> Full path (including name) to port being hidden
.TP
\ \ \ \(bu
%v1 \-> Version of port taking precendence
.TP
\ \ \ \(bu
%v2 \-> Version of port being hidden
.TP
.B list [\-v|\-vv] [\-\-path] [\-\-regex] [filter]
List ports available in the ports tree. It's basically the same as
.B ports \-l
but looks in all directories specified in
.B /etc/prt\-get.conf.
It's also possible to use shell-like
.B wildcards
for the list command. Make sure you escape where needed
.TP
.B printf <format string1> [\-\-sort=<format string2>] [\-\-filter=<filter>]
Print formatted port list format string can contain variables, which
are replaced like this:
.TP
\ \ \ \(bu
%n \-> name
.TP
\ \ \ \(bu
%p \-> path
.TP
\ \ \ \(bu
%v \-> version
.TP
\ \ \ \(bu
%r \-> release
.TP
\ \ \ \(bu
%d \-> description
.TP
\ \ \ \(bu
%e \-> dependencies
.TP
\ \ \ \(bu
%P -> optional dependencies
.TP
\ \ \ \(bu
%u \-> URL
.TP
\ \ \ \(bu
%M -> Maintainer
.TP
\ \ \ \(bu
%R -> Readme ("yes"/"no")
.TP
\ \ \ \(bu
%E -> pre-install script ("yes"/"no")
.TP
\ \ \ \(bu
%O -> post-install script ("yes"/"no")
.TP
\ \ \ \(bu
%l -> is locked ("yes"/"no")
.TP
\ \ \ \(bu
%i \-> "no" if not installed, "yes" if it's installed and
up to date and "diff" if it's installed and a new version is in the
ports tree.
Use "\\n" and "\\t" to format your output (no additional format specified
suported). The optional format string2 can contain the same variables
as format string1 and is used to sort the output. You can specify a
.B wildcard filter
to filter by package name.
.TP
.B listinst [\-v|\-vv] [\-\-regex] [\-\-depsort] [filter]
List installed ports. It's basically the same as
.B pkginfo \-i,
but omits version when called without verbose (\-v, \-vv) switch. Plus
it is notably faster in my tests. \-v adds version information, \-vv
adds version and description.
.B Warning:
\-vv will slow down the process because it requires prt\-get to scan
both the ports database and the ports tree.
It's also possible to use shell-like
.B wildcards
for the listinst command. Make sure you escape where needed. By default
it's sorted alphabetically; use the \-\-depsort switch to sort by
dependencies.
.TP
.B listorphans [\-v|\-vv|\-\-softdeps]
List installed ports which do not appear in the "Depends on:" line of
any other port currently installed. Pass the --softdeps flag to also exclude
ports that are listed as optional dependencies of currently-installed ports.
Output appears alphabetically separated by newlines, making it suitable for
process substitution as shown in the
.B EXAMPLES
section below. Note that some core ports might be runtime
dependencies despite their absence in the "Depends on:" line; see \fBPkgfile(5)\fP
for an explanation of this practice.
.TP
.B isinst <package1> [<package2> ...]
Check whether each package given on the command line is installed. Output in
the case of multiple arguments is separated by newlines, suitable for
processing by awk or grep. Similar to
.B pkginfo \-i|grep \-E '^(package1|package2|...)'
but does not print the version information. This command has a return value of
0 if all packages given as argument are installed, otherwise a return value
greater than 0.
.TP
.B current <package1> [<package2> ...]
Shows the currently-installed version of <package>, or a message
that <package> is not installed.
.TP
.B ls [\-\-path] <package>
Prints out a listing of the port's directory
.TP
.B cat <package> [<file>]
Prints out the file to stdout. If <file> is not specified, 'Pkgfile' is used.
If set, uses $PAGER.
.TP
.B edit <package> [<file>]
Edit the file using the editor specified in the $EDITOR environment variable.
If <file> is not specified, 'Pkgfile' is used.
.TP
.B help
Shows a help screen
.TP
.B dumpconfig
Dump the configuration to the current terminal
.TP
.B version
Shows the current version of prt-get
.TP
.B cache
create a cache file from the ports tree to be used by prt-get using the
--cache option. Remember to run prt-get cache each time you update the
ports tree.
.SH "OPTIONS"
The following options are primarily useful for install/update transactions.
.TP
.B \-g, \-\-group
Stop install or update operation if one package fails (patch by Alan Mizrahi)
.TP
.B \-f, \-fi
Force install; Implies 'pkgadd -f'; same as --aargs=-f
.TP
.B \-fr
Force rebuild, Implies 'pkgmk -f'; same as --margs=-f
.TP
.B \-us
Update signature, implies 'pkgmk -us'; same as --margs=-us
.TP
.B \-is
Ignore signature, implies 'pkgmk -is'; same as --margs=-is
.TP
.B \-uf
Update footprint, implies 'pkgmk -uf'; same as --margs=-uf
.TP
.B \-if
Ignore footprint, implies 'pkgmk -if'; same as --margs=-if
.TP
.B \-ns
No stripping, implies 'pkgmk -ns'; same as --margs=-ns
.TP
.B \-kw
Keep working directory, implies 'pkgmk -kw'; same as --margs=-kw
.TP
.B \-\-margs="...", e.g. \-\-margs="\-im"
additional arguments to be passed to pkgmk;
note that \-d is already passed to pkgmk anyway
.TP
.B \-\-aargs="...", e.g. \-\-aargs="\-f"
additional arguments to be passed to pkgadd
.TP
.B \-\-rargs="..."
arguments to be passed to pkgrm; currently not used, implemented for
future uses and consistency reasons
.TP
.B \-\-ignore=<package1,package2,...>
Don't install these packages, even if they're listed as dependencies
.TP
.B \-\-nodeps
Leave the list of requested ports as-is, without sorting by dependencies
or injecting missing dependencies.
.TP
.B \-\-softdeps
Consider optional dependencies when determining the order in which to build
the packages passed as arguments (in a \fBdepinst\fP or \fBsysup\fP operation).
Also affects the output of \fBdeptree\fP, \fBdependent\fP, and \fBlistorphans\fP.
.TP
.B \-\-cache
Use cache file for this command
.TP
.B \-\-test
Dry run, don't actually install anything, mostly interesting for
.B prt\-get install, prt\-get update, prt\-get sysup
.TP
.B \-\-pre-install
Execute pre-install script if it's there
.TP
.B \-\-post-install
Execute post-install script if it's there
.TP
.B \-\-install-scripts
Execute pre-install and post-install script if they're there
.TP
.B \-\-install-root=<dir>
Use <dir> as root directory for your installation; allows you to install
the requested packages onto a different directory than '/'. In daily usage,
this option is not required; it's primarily interesting if you're developing
an independent installation.
The setting for --install-root determines which package database is used for
reading/writing (so <dir>/var/lib/pkg/db must exist), and where the pkg.tar.?z
archives get unpacked, but the relevant prt\-get.conf and ports tree are those
on the parent filesystem. Therefore it is not necessary for <dir> to contain
its own copy of the ports tree, or even a copy of prt-get.conf.
However, if <dir>/etc/pkgadd.conf exists and is different from /etc/pkgadd.conf,
then install or update commands might behave unexpectedly. In order to preserve
the \fBpkgadd.conf(5)\fP settings from the host system, append the option
--aargs='-c /etc/pkgadd.conf' to your \fBprt-get install\fP
command, or just copy the desired directives into <dir>/etc/pkgadd.conf .
.TP
.B \-\-log
Write build output to log file
.TP
.B \-\-no-std-config
Don't parse the default configuration file
.TP
.B \-\-config-prepend=<string>
Prepend <string> to configuration
.TP
.B \-\-config-append=<string>
Append <string> to configuration
.TP
.B \-\-config-set=<string>
Set <string> in configuration, overriding configuration file
.TP
.B \-\-config=<file>
Use alternative configuration file to read ports directories from
.SH ""
The following options are primarily useful for non-install (information-seeking)
transactions, although some of them affect the behaviour of install/upgrade
transactions as well.
.TP
.B \-v, \-vv
(verbosity level) Show version of a port (\-v), or show both version
and description (\-vv). Passing more than one of these options is equivalent to \-vv.
.TP
.B \-\-path
Show path info for the ports found by a search or a dependency calculation
.TP
.B \-\-regex
Interpret filter and search pattern as regular expression
.TP
.B \-\-prefer\-higher, \-ph
Make prt-get parse the version strings and prefer the higher version,
even if the one found in the ports tree is lower. Also used during
a sysup operation.
.TP
.B \-\-strict\-diff, \-sd
Override the 'preferhigher' configuration option. Equivalent to
.B \-\-config\-set=\(dqpreferhigher no\(dq
.SH "CONFIGURATION"
.TP
See man prt\-get.conf(5)
.SH "EXAMPLES"
.TP
.B prt\-get install irssi
Download, build and install irssi (and any of its missing dependencies), with
one simple command
.TP
.B prt\-get install --nodeps jasper
Install jasper, without trying to resolve dependencies.
.TP
.B prt\-get update --softdeps webkitgtk
Get the latest version of webkitgtk, rebuilding any of its outdated dependencies
(hard and soft) in the optimal order.
.TP
.B prt\-get update -fr openssh
Update your current version of openssh, forcing a rebuild even if no version
difference is detected.
Useful if there was a major soversion change in one of its dependencies,
and \fBrevdep openssh\fP indicates a broken package. :\-)
.TP
.B MISSLIBS=$(revdep -vvv mpv | awk -v FS=: '/(missing library)/ {print $3}'); [ -n \(dq${MISSLIBS[@]}\(dq ] && for i in ${MISSLIBS[@]}; do prt\-get fsearch $i; done
(adapted from a script by ppetrov^) Check for the presence of the runtime libraries needed by mpv.
If any are absent, search the footprints to determine which ports provide the missing libraries.
.TP
.B prt\-get printf '%i:%p:%n\en' | awk -v FS=: '/^diff:\e/usr\e/ports\e/core/ { print $3 }' | xargs prt\-get update
Basically a \fBsysup\fP operation, but restricted to the core collection.
Because core ports are often omitted from the dependency line if they aren't
dynamically linked in, the \fBsysup\fP sorting algorithm might not put them
at the front of the queue. Run this command before a regular \fBsysup\fP in
order to ensure that core ports are updated first.
.TP
.B prt\-get isinst $(prt-get info ffmpeg | awk -v FS=: '/^Optional/ {gsub(/,/,\(dq \(dq,$2); print $2}') | awk -v FS=\(dq \(dq '/not installed/ {print $2}'
Show all the optional dependencies of ffmpeg that are not currently installed.
.TP
.B prt\-get isinst $(prt-get info ffmpeg | awk -v FS=: '/^Optional/ {gsub(/,/,\(dq \(dq,$2); print $2}') | awk -v FS=\(dq \(dq '/not installed/ {print $2}' | xargs prt\-get depinst \-\-group \-\-softdeps ffmpeg
Extension of the above. Installs ffmpeg and all its optional dependencies, in
the order that guarantees a maximal feature set. The --group flag tells
\fBprt\-get\fP to abort the operation if any port fails to build, so as not to
spend any resources on ffmpeg until all of its optional dependencies are in
place.
.TP
.B prt\-get isinst $(if grep -qE '^ffmpeg:' /etc/prt-get.softdeps 2>/dev/null; then grep -E '^ffmpeg:' /etc/prt-get.softdeps | cut -d: -f2 | tr ',' ' '; else prt-get info ffmpeg | awk -v FS=: '/^Optional/ {gsub(/,/,\(dq \(dq,$2); print $2}'; fi) | awk -v FS=\(dq \(dq '/not installed/ {print $2}' | xargs prt\-get depinst \-\-group \-\-softdeps ffmpeg
Extension of the above (addressing a use case envisioned by ivandi). The
user can create the file /etc/prt-get.softdeps containing a line like
.B ffmpeg: x264 x265
and then the above command will perform a depinst --group operation to
ensure that at least x264 and x265 (but not necessarily any of the other
optional dependencies) are present before trying to build ffmpeg. In the
absence of such a .softdeps config, the operation reverts to the behaviour
of the preceding example (maximal feature set). Implementing Gentoo USE
flags with such an awkward one-liner might draw criticism from advocates of
the KISS principle.
.TP
.B prt\-get search \-\-regex '^(m|n|p)c.*'
Return a list of all ports whose names start with "mc", "nc", or "pc"
.TP
.B prt\-get dsearch irc
Return a list of all ports having "irc" in their name or description
.TP
.B comm -13 <(ls /usr/ports/core) <(prt-get listorphans)
(based on comments from Romster and jue) Filter out the core ports from the list of orphans, in
shells (like bash) that support process substitution
.TP
.B comm -13 <(cat ~/.keepers <(ls /usr/ports/core) | sort) <(prt\-get listorphans) | xargs prt\-get remove
(system-hosing extension of the above) A one-liner inspired by \fBpkg\-clean\fP
and \fBpkgfoster\fP, but without the safeguard of interactivity.
\fBDo not try this on a mission-critical system.\fP
.TP
.B prt\-get isinst $(prt\-get quickdep $(prt\-get quickdiff)) | awk '/not installed/ {print $2}'
(adapted from a comment by Fun) After updating your ports tree, print out a
list of dependencies that were not needed the last time you built your
currently-installed ports, but are needed now by the newer versions of
these ports. The output of this command is sorted by dependencies, therefore
suitable for piping to \fBxargs prt\-get install\fP.
.TP
.B prt\-get printf \(dq%p\et%u\en\(dq | grep myrepo | cut -f 2
Print the upstream URL for each port in the collection \(dqmyrepo\(dq,
perhaps as the first step in keeping your personal overlay up to date.
.TP
.B prt\-get printf \(dq%M\et%n\en\(dq | grep ^Tim | wc -l
Count how many ports our most-overworked core team member claims
responsibility for.
.TP
.B comm -13 <(prt\-get depends firefox-bin |tail -n +2 |sort) <(prt\-get depends firefox |tail -n +2 |sort)
Find the build-time dependencies of firefox. Runtime dependencies would
also appear in the list generated by the first process substitution, and
\fBcomm -13\fP will suppress what the two lists have in common.
.TP
.B prt-get listinst \-\-depsort | xargs prt-get install \-\-install\-root=/mnt
Sort the list of installed packages by dependencies, and then install all
those packages onto a backup filesystem (mounted at /mnt). If you have a
customized pkgadd.conf that you want applied to this operation, either copy
it to /mnt/etc where pkgadd will be looking for it, or pass the additional
option \-\-aargs=\(dq\-c /etc/pkgadd.conf\(dq to the install command.
.TP
.B prt-get list --path --regex '^xorg.*' | grep -v \(dq/usr/ports/xorg\(dq
Show the ports whose names begin with xorg, but which appear outside the
xorg port collection.
(At the time of writing, this command returned at least two font ports.)
.SH "AUTHORS"
Johannes Winkelmann <jw@tks6.net>, and others cited inline
.SH "SEE ALSO"
prt\-get.conf(5), prt\-cache(8), Pkgfile(5), pkgmk(8), pkgadd(8), ports(8)