lpf - Man Page
Build non-redistributable rpms
Synopsis
lpf [-n] <command> [options]
Description
Builds and installs non-redistributable rpms by downloading binaries, building and installing a local rpm.
lpf handles lpf packages named like lpf-spotify-client and target packages which is spotify-client in this case. The lpf package is basically just a thin recipe how to build the target package which is the useful one. Target packages are by definition non-redistributable.
The basic usage is
$ lpf update
which will build and install any not yet installed target packages corresponding to installed lpf packages. This also works to update target packages to match updated lpf packages.
lpf packages are visible as an icon in the GUI. Clicking this icon is the same as running 'lpf update' on the corresponding package.
To run privileged operations lpf uses sudo(8). See Privileged Commands below.
If DISPLAY is defined in the environment, lpf uses GUI dialogs for user interaction even when invoked from command line. To force CLI only operation, use the -n flag or unset DISPLAY.
lpf has a notification system for packages needing to be updated. See Notifications below.
Commands
- list:
list all installed lpf packages.
- update [package]:
Interactive approve, build and install of given package or all packages.
- state [package]:
List package state or state of all packages.
- scan [package]:
Triage a given package or all packages and update their status.
- approve <package>:
Approve a package in state approve-wait.
- build [package]:
Build given package or all packages in state build-wait
- rebuild [package]:
Force re-install of a package where previous installation failed.
- install <package>:
Install rpms for given package.
- reset <package>
Remove all temporary files for package, set state as after fresh install.
- log [package]:
Display logs from last build for package, or just last build.
- mute <package>
Disable notification messages for package.
- unmute <package>
Enable notifications messages for a possibly muted package.
- notify [message]
Print given message or a default one if there are lpf packages in need of action - typically in need to be updated.
- spec <package>:
Copy spec file for package to current directory.
- srpm <package>:
Build a srpm file for package in current directory.
- scan-removal <package>:
Triage package with the assumption that existing target package is removed (use in spec scriptlets).
- version
Print version data.
Privileged Commands
All builds run by lpf is using the pkg-build user which owns the files under /var/lib/lpf. lpf uses sudo(8) to run as pkg-build when building and to run as root when installing. lpf installs a sudo config file which allows users in the pkg-build group to make all required operations.
If possible, lpf uses sudo also to add current user to the pkg-build group. If the sudoers configuration doesn't allow current user to do this, pkexec(1) is used instead. This is invoked on the first run. To avoid add user manually using:
$ su -c "usermod -a -G pkg-build $USER"
After this, log out and in again before proceeding.
Notifications
lpf is capable of notifying user when lpf packages are in need of an update e. g., when the lpf package has been updated. Notifications are created when a package enters any state besides 'OK'. They are cleared once the package enters the 'OK' state.
GUI notifications could be enabled from the lpf-gui(1) main window. This installs a daemon listening to package state changes for current user, displaying gui messages as appropriate. The GUI allows muting messages for specific packages.
Command line notifications could be enabled by adding code to e. g.,
~/.bashlogin. lpf notify which will output a message similar to the well-known "You have mail" if lpf packages needs to be updated. Using the 'mute' and 'unmute' commands pin-pointed packages can be ignored in this context (this also affects the GUI messages).
Files
- /etc/sudoers.d/pkg-build
Sudo configuration, allows users in pkg-build group to perform several otherwise restricted operations.
- /var/lib/lpf
Temporary files: logs, state, built rpm packages etc.
- /usr/share/lpf/packages
Installed lpf packages data.
- /var/run/user/$UID/lpf
User-specific files: mute files, display locks etc.
License
This is open source software under the MIT license, see the LICENSE file.
See Also
- lpf-gui(1)
Gtk-based graphical frontend to lpf.
- https://github.com/leamas/lpf
Source, FSM description, issue tracker, etc.
- sudoers(5)
Format for /etc/sudoers.d/pkg-build
- sudo(8)
Used to run privileged operations.
- pkexec(1)
Used to add user to pkg-build group at initial run.