Skip to content

Latest commit

 

History

History
156 lines (99 loc) · 3.52 KB

features.md

File metadata and controls

156 lines (99 loc) · 3.52 KB

List of Features supported by pkg

Scripts

Before running any scripts pkg will become the reaper of its children, spawn the scripts and kill all the remaining process after the script if finished. This is done in order to prevent the scripts from running daemons.

shell scripts

shells scripts are scripts run by /bin/sh at various phases:

  • post-install
  • pre-install
  • post-deinstall
  • pre-deinstall

It provides the following environment variables (see pkg-script(5) for documentation)

  • PKG_PREFIX
  • PKG_ROOTDIR
  • PKG_MSGFD
  • PKG_UPGRADE

lua scripts

One of the particulatiry of the lua scripts is the fact they always run in a capsicum sandbox which prevent doing anything but accessing the filesystem

Another particularity is they run in a modified version of lua which makes all IO operation seamlessly rootdir friendly.

Last they do prevent executing any external program, which make the lua scripts cross installation friendly

They run at various phases:

  • post-install
  • pre-install
  • post-deinstall
  • pre-deinstall

see pkg-lua-script(5) for the provided API

Note that lua scripts are always run before shell scripts

plist parsing (FreeBSD only)

Feature available in the plist parser (see pkg-create(8) for more details)

The format is the following

@keyword(user,group,mode) line

or

@keyword line

Hardcoded keywords:

  • @cwd
  • @mode
  • @owner
  • @group
  • @comment
  • @dir

if a Keyword is not found then the hardworded keywords, pkg will lookup for it in a dedicated directory for files named

"keyword".ucl

Those files supports shell scripts and lua scripts, see pkg-keywords(5) for details.

message

pkg supports messages in UCL format which allows to specify when a message should be presented to the users:

  • always
  • on first install
  • on upgrade
  • on deletion

rootdir

pkg is rootdir friendly it means pkg can install files as a user in a root directory as if it was a chroot.

reproducible builds

a timestamp can be provided at creation time to ensure the time used when create the package is crontrol activating the reproducible build support.

graphviz/dot file visualisation

by running pkg -o DOT_FILE=something.dot or by exporting the environement variable, pkg can generate a dot file allowing to visualise the internal dependency tree via graphviz

aliases

Aliases supported at runtime so one can create its own commands

Json output

pkg can write to a unix socket or a unix pipe via the EVENT_PIPE configuration entry:

pkg -o EVENT_PIPE=path ...

this way all the event from pkg: progress of installation, warning etc will be written in json format in those pipes allowing to easily write wrappers on top of pkg.

ssh protocol

packages can be installed over ssh

sandboxing

Most of pkg operation are run inside capsicum sandbox when possible

auto backup of libraries on upgrade

When BACKUP_LIBRARIES is set to true, pkg will keep backups of the libraries it may remove during upgrades

METALOG

It is possible to ask pkg to create a metalog file to keep trace of what files are being installed and how they should be packaged (mode, user, group etc) usefull when installing in rootdir

Provides/Requires

automated via shlibs

pkg automatically keep track of the libraries exposed by a packages and required by a packages. (it is possible to disable this behaviour via BUNDLE_LIB variable

manual via provides/requires keywords

What the title says

Compression format

pkg supports the following compression format:

  • zstd
  • xz
  • bzip2
  • gz
  • none