Skip to content

johnnylam88/pkgtasks

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

98 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Package Tasks

pkgtasks is a shell script library to ease writing POSIX-compliant shell scripts to handle common tasks during installation or removal of a package, e.g.,

  • creating groups and users needed by the package

  • creating and removing directories with special permissions and ownership,

  • copying example config files to their final locations during package installation, and removing them during package removal if they don't differ from the example ones,

  • reminding the user of files that may be customized after package installation.

Package tasks have the property of idempotence -- they may be invoked multiple times, but the result must be the same as when invoked once, e.g., the shells task adds an entry to /etc/shells, but will avoid adding the same entry more than once.

Getting sources

The latest version of pkgtasks is 1.15 and was released on August 23th, 2017.

See the release notes for information about the changes in this and all previous releases.

Documentation

A script may load task modules to define shell functions to perform various tasks. A task module is loaded in a POSIX-compliant shell script by adding the following boilerplate to the script:

# Import the task loader.
: ${TASK_MODULE_DIR:=/usr/pkg/share/pkgtasks-1}
. "${TASK_MODULE_DIR}/load.subr"

# Load task modules.
task_load preinstall

The individual package tasks supported by pkgtasks are:

  • directories: create and remove directories outside of package tree
  • files: copy and remove configuration files
  • fonts: regenerate X11 font indices
  • groups: create groups and warn about groups that may be removed
  • icon_themes: create caches in GTK+ icon theme directories
  • info_files: register and unregister GNU info files
  • ocaml_findlib: update OCaml findlib search paths
  • permissions: check and set modes and permissions on special files
  • shells: register and unregister login shells
  • shlibs: update the shared library cache
  • users: create users and warn about users that may be removed

These package tasks support ${PKG_DESTDIR} to manipulate the correct filesystem paths for a destdir-installed package.

For convenience, these have been composed into larger meta-tasks:

  • preinstall: tasks performed before files are installed
  • preremove: tasks performed before files are removed
  • postinstall: tasks performed after files are installed
  • postremove: tasks performed after files are removed

There are also several utility tasks that may be used to write portable scripts:

  • cleanup: run functions upon improper exit
  • compare: compare two files for equality
  • createfile: create empty files
  • dirwalk: walk a directory tree using depth-first traversal
  • echo: write to standard output through a buffer
  • lock: create or release a lock file
  • makedir: make a directory hierarchy
  • maketemp: make unique, temporary files
  • match: match lines with a fnmatch(3) glob pattern
  • platform: determine the platform (operating system)
  • quote: quote strings for use with shell eval
  • random: generate random numbers (badly)
  • refcount: reference-count system resources
  • say: write to standard output with a tag
  • sort: sort lines from standard input
  • taskfunc: generic function hook for meta-tasks
  • tee: duplicate writes to standard output into files
  • truthy: evaluate truthiness
  • valid_options: check validity of option strings
  • version: compare version strings
  • which: locate a program file in the $PATH

The documentation for each of these tasks is in man-page style in the header comments for each task module.