LIBDNF5-ACTIONS(8) dnf5 LIBDNF5-ACTIONS(8) (NAME) libdnf5-actions - libdnf5 (DESCRIPTION) (callback hooks) libdnf5 . . goal_resolved pre_transaction post_transaction ( glob) NEVRA . (CONFIGURATION) (<>) . /actions.d/ . <<.actions>> . ( ) (locale) . (ACTIONS FILE FORMAT) <<#>> ( ) . : callback_name:package_filter:direction:options:command. callback_name o pre_base_setup o post_base_setup o repos_configured ( 1.0.0 ) o repos_loaded ( 1.0.0 ) o pre_add_cmdline_packages ( 1.0.0 ) o post_add_cmdline_packages ( 1.0.0 ) o goal_resolved ( 1.3.0 ) o pre_transaction o post_transaction package_filter ( glob) NEVRA ( ) . . <<*>> direction . goal_resolved pre_transaction post_transaction . direction ( / ) . . package_filter . o in - ( ) o out - ( /) options . . o enabled= - ( 0.3.0 ) o 1 - o host-only - o installroot-only - <> o mode= - ( 1.2.0 ) o plain - . . . o json - - . . JSON ( 1.2.0 ). o raise_error= - . ( ) ( ). raise_error=0 ( 1.4.0 ). o 0 - o 1 - command . . . : \a \b \f \n \r \t \v. . : o ${pid} - o ${plugin.version} - ( 0.3.0 ) o ${conf.} - o ${conf..[=]} - <> ( 1.1.0 ) o ${var.} - o ${tmp.} - o ${pkg.} - o ${pkg.name} - o ${pkg.arch} - o ${pkg.version} - o ${pkg.release} - o ${pkg.epoch} - (epoch) o ${pkg.na} - . o ${pkg.evr} - -- o ${pkg.nevra} - nevra ( 0 ) o ${pkg.full_nevra} - nevra ( ) name-epoch:version-release.arch o ${pkg.repo_id} - o ${pkg.license} - o ${pkg.location} - / repodata o ${pkg.vendor} - o ${pkg.action} - : o I - o U - o D - o R - o E - () o O - (/// /) o ? - package_filter direction . . . . . . . package_filter direction package_filter direction . package_filter . repoid.option=value <<,>> . <<,>> "\x2C" . value_pattern . repoid_pattern value_pattern (globs) . PLAIN (ACTION PROCESS STANDARD OUTPUT FORMAT IN PLAIN COMMUNICATION MODE) () . . . ${tmp.} . repos_configured . . 1.4.0 . (Output line format) o tmp.= - o tmp. - o conf.= - o conf..= - ( 1.1.0 ) o var.= - o stop= - ( 1.4.0 ) o error= - raise_error=1 ( 1.4.0 ) o log.= - ( 1.4.0 ) : CRITICAL ERROR WARNING NOTICE INFO DEBUG TRACE JSON (MESSAGES IN JSON COMMUNICATION MODE) <> - . . JSON . : {"op":"", "domain":"", "args":{}} : {"op":"reply", "requested_op":"", "domain":"", "status":"OK", "return":{}} : {"op":"reply", "requested_op":"", "domain":"", "status":"ERROR", "message":""} (Supported values) o get - o set - o new - o log - ( 1.4.0 ) o stop - ( 1.4.0 ) o error - raise_error=1 ( 1.4.0 ) get (Description of the get operation) get . o conf - ( ) o vars - o actions_vars - - o actions_attrs - o packages - o trans_packages - o cmdline_packages_paths - (Reading a configuration value) : {"op":"get", "domain":"conf", "args":{"key":""}} {"op":"get", "domain":"conf", "args":{"key":"."}} : {"op":"reply", "requested_op":"get", "domain":"conf", "status":"OK", "return":{"keys_val":[{"key":"", "value":""}]}} {"op":"reply", "requested_op":"get", "domain":"conf", "status":"OK", "return":{"keys_val":[{"key":".", "value":""}]}} {"op":"reply", "requested_op":"get", "domain":"conf", "status":"ERROR", "message":""} : o - o - (globs) o - o - keys_val . : {"op":"get", "domain":"conf", "args":{"key":"countme"}} {"op":"reply", "requested_op":"get", "domain":"conf", "status":"OK", "return":{"keys_val":[{"key":"countme", "value":"0"}]}} {"op": "get", "domain": "conf", "args": {"key": "*.enabled"}} {"op": "reply", "requested_op": "get", "domain": "conf", "status": "OK", "return": { "keys_val": [{"key": "dnf-ci-fedora.enabled", "value": "1"}, {"key": "dnf-ci-fedora-updates.enabled", "value": "1"}, {"key": "dnf-ci-thirdparty.enabled", "value": "0"}, {"key": "test-repo.enabled", "value": "0"}]}} (Reading a variable value) : {"op":"get", "domain":"vars", "args":{"name":""}} : {"op":"reply", "requested_op":"get", "domain":"vars", "status":"OK", "return":{"vars":[{"name":"", "value":""}]}} : o - (globs) o - vars . : {"op":"get", "domain":"vars", "args":{"name":"test_var*"}} {"op":"reply", "requested_op":"get", "domain":"vars", "status":"OK", "return":{"vars":[{"name":"test_var1", "value":"value1"}]}} {"op":"get", "domain":"vars", "args":{"name":"nonexist_var"}} {"op":"reply", "requested_op":"get", "domain":"vars", "status":"OK", "return":{"vars":[]}} (Reading an action variable value) : {"op":"get", "domain":"actions_vars", "args":{"name":""}} : {"op":"reply", "requested_op":"get", "domain":"actions_vars", "status":"OK", "return":{"actions_vars":[{"name":"", "value":""}]}} : o - (globs) o - actions_vars . : {"op":"get", "domain":"actions_vars", "args":{"name":"test_actions_var*"}} {"op":"reply", "requested_op":"get", "domain":"actions_vars", "status":"OK", "return":{"actions_vars":[{"name":"test_actions_var1", "value":"value1"}]}} {"op":"get", "domain":"actions_vars", "args":{"name":"nonexist_var"}} {"op":"reply", "requested_op":"get", "domain":"actions_vars", "status":"OK", "return":{"actions_vars":[]}} (Reading an action attribute value) : {"op":"get", "domain":"actions_attrs", "args":{"key":""}} : {"op":"reply", "requested_op":"get", "domain":"actions_attrs", "status":"OK", "return":{"actions_attrs":[{"key":"", "value":""}]}} : o - (globs) . : pid version. o pid - o version - MAJOR.MINOR.MICRO o - actions_attrs . : {"op":"get", "domain":"actions_attrs", "args":{"key":"*"}} {"op":"reply", "requested_op":"get", "domain":"actions_attrs", "status":"OK", "return":{ "actions_attrs":[{"key":"pid", "value":"523"}, {"key":"version", "value":"1.4.0"}]}} {"op":"get", "domain":"actions_attrs", "args":{"key":"nonexist_attribute"}} {"op":"reply", "requested_op":"get", "domain":"actions_attrs", "status":"OK", "return":{"actions_attrs":[]}} (Getting available, installed, and transaction packages) packages . trans_packages . trans_packages goal_resolved pre_transaction post_transaction . : {"op":"get", "domain":"packages", "args":{"output":[""]}} {"op":"get", "domain":"packages", "args":{"output":[""], "params":[{"key":""}]}} {"op":"get", "domain":"packages", "args":{"output":[""], "filters":[{"key":"", "value":"", "operator":""}]}} {"op":"get", "domain":"packages", "args":{"output":[""], "params":[{"key":""}], "filters":[{"key":"", "value":"", "operator":""}]}} {"op":"get", "domain":"trans_packages", "args":{"output":[""]}} {"op":"get", "domain":"trans_packages", "args":{"output":[""], "params":[{"key":""}]}} {"op":"get", "domain":"trans_packages", "args":{"output":[""], "filters":[{"key":"", "value":"", "operator":""}]}} {"op":"get", "domain":"trans_packages", "args":{"output":[""], "params":[{"key":""}], "filters":[{"key":"", "value":"", "operator":""}]}} : {"op":"reply", "requested_op":"get", "domain":"packages", "status":"OK", "return":{"packages":[{"":""}]}} {"op":"reply", "requested_op":"get", "domain":"trans_packages", "status":"OK", "return":{"trans_packages":[{"":""}]}} {"op":"reply", "requested_op":"get", "domain":"packages", "status":"ERROR", "message":""} {"op":"reply", "requested_op":"get", "domain":"trans_packages", "status":"ERROR", "message":""} : o - o name - o arch - o version - o release - o epoch - o na - . o evr - -- o nevra - nevra ( 0 ) o full_nevra - nevra ( ) name-epoch:version-release.arch o download_size - o install_size - o repo_id - o license - o location - / repodata o vendor - trans_packages o action - o I - o U - o D - o R - o E - () o O - (/// /) o ? - o direction - o IN - ( ) o OUT - ( /) o - IGNORE_EXCLUDES IGNORE_MODULAR_EXCLUDES IGNORE_REGULAR_EXCLUDES IGNORE_REGULAR_CONFIG_EXCLUDES IGNORE_REGULAR_USER_EXCLUDES o - o name - o arch - o version - o release - o epoch - o nevra - nevra ( 0 ) o repo_id - o available - o installed - o userinstalled - o installonly - (installonly) o description - o file - o upgradable - o upgrades - o downgradable - o downgrades - trans_packages o direction - : o IN - ( ) o OUT - ( /) o - o - EQ o - o - packages trans_packages . : {"op":"get", "domain":"packages", "args":{ "params":[{"key":"IGNORE_EXCLUDES"}], "filters":[{"key":"name", "value":"lame*", "operator":"GLOB"}], "output":["nevra"]}} {"op":"reply", "requested_op":"get", "domain":"packages", "status":"OK", "return":{"packages":[ { "nevra":"lame-3.100-5.fc29.src" }, { "nevra":"lame-3.100-5.fc29.x86_64" }, { "nevra":"lame-libs-3.100-5.fc29.x86_64" }, { "nevra":"lame-3.100-4.fc29.src" }, { "nevra":"lame-3.100-4.fc29.x86_64" }, { "nevra":"lame-libs-3.100-4.fc29.x86_64"}]}} {"op":"get", "domain":"packages", "args":{ "params":[{"key":"UNKNOWN"}], "filters":[{"key":"name", "value":"lame*", "operator":"GLOB"}], "output":["nevra"]}} {"op":"reply", "requested_op":"get", "domain":"packages", "status":"ERROR", "message":"Bad key \"UNKNOWN\" for params"} {"op":"get", "domain":"trans_packages", "args":{ "filters":[{"key":"direction", "value":"IN"}, {"key":"arch", "value":"x86_64"}], "output":["action", "name", "version", "repo_id"]}} {"op":"reply", "requested_op":"get", "domain":"trans_packages", "status":"OK", "return":{ "trans_packages":[ {"action":"I", "name":"glibc", "version":"2.28", "repo_id":"dnf-ci-fedora-updates"}, {"action":"I", "name":"glibc-all-langpacks", "version":"2.28", "repo_id":"dnf-ci-fedora-updates"}, {"action":"I", "name":"glibc-common", "version":"2.28", "repo_id":"dnf-ci-fedora-updates"}, {"action":"I", "name":"filesystem", "version":"3.9", "repo_id":"dnf-ci-fedora"}]}} (Getting paths of command-line specified packages) : {"op":"get", "domain":"cmdline_packages_paths", "args":{}} {"op":"get", "domain":"cmdline_packages_paths", "args":{ "filters":[{"key":"path", "value":""}]}} {"op":"get", "domain":"cmdline_packages_paths", "args":{ "filters":[{"key":"path", "value":"", "operator":""}]}} : {"op":"reply", "requested_op":"get", "domain":"cmdline_packages_paths", "status":"OK", "return":{"cmdline_packages_paths":[""]}} : o - o - EQ o - cmdline_packages_paths . : {"op":"get", "domain":"cmdline_packages_paths", "args":{"filters":[{"key":"path", "value":"/local/*", "operator":"GLOB"}]}} {"op":"reply", "requested_op":"get", "domain":"cmdline_packages_paths", "status":"OK", "return":{"cmdline_packages_paths":["/local/packageB.rpm", "/local/packageC.rpm"]}} (Supported compare operators) get . : o EQ - o IEQ - o GT - o GTE - o LT - o LTE - o CONTAINS - o ICONTAINS - o STARTSWITH - o ISTARTSWITH - o ENDSWITH - o IENDSWITH - o REGEX - o IREGEX - o GLOB - glob o IGLOB - glob NOT_ . : NOT_EQ NOT_GT. set (Description of the set operation) set . o conf - ( ) o vars - o actions_vars - - (Setting a configuration value) : {"op":"set", "domain":"conf", "args":{"key":"", "value":""}} {"op":"set", "domain":"conf", "args":{"key":".", "value":""}} : {"op":"reply", "requested_op":"set", "domain":"conf", "status":"OK", "return":{"keys_val":[{"key":"", "value":""}]}} {"op":"reply", "requested_op":"set", "domain":"conf", "status":"OK", "return":{"keys_val":[{"key":".", "value":""}]}} {"op":"reply", "requested_op":"set", "domain":"conf", "status":"ERROR", "message":""} : o - o - (globs) o - o - keys_val . : {"op":"set", "domain":"conf", "args":{"key":"countme", "value":"1"}} {"op":"reply", "requested_op":"set", "domain":"conf", "status":"OK", "return":{"keys_val":[{"key":"countme", "value":"1"}]}} {"op":"set", "domain":"conf", "args":{"key":"dnf-ci-fedora*.enabled", "value":"1"}} {"op":"reply", "requested_op":"set", "domain":"conf", "status":"OK", "return":{ "keys_val":[{"key":"dnf-ci-fedora.enabled", "value":"1"}, {"key":"dnf-ci-fedora-updates.enabled", "value":"1"}]}} (Setting a variable value) : {"op":"set", "domain":"vars", "args":{"name":"", "value":""}} {"op":"set", "domain":"vars", "args":{"name":""}} : {"op":"reply", "requested_op":"set", "domain":"vars", "status":"OK", "return":{"vars":[{"name":"", "value":""}]}} {"op":"reply", "requested_op":"set", "domain":"vars", "status":"OK", "return":{"vars":[{"name":""}]}} {"op":"reply", "requested_op":"set", "domain":"vars", "status":"ERROR", "message":""} : o - o - . o - : {"op":"set", "domain":"vars", "args":{"name":"test_var1", "value":"value1"}} {"op":"reply", "requested_op":"set", "domain":"vars", "status":"OK", "return":{"vars":[{"name":"test_var1", "value":"value1"}]}} (Setting an action variable value) : {"op":"set", "domain":"actions_vars", "args":{"name":"", "value":""}} {"op":"set", "domain":"actions_vars", "args":{"name":""}} : {"op":"reply", "requested_op":"set", "domain":"actions_vars", "status":"OK", "return":{"vars":[{"name":"", "value":""}]}} {"op":"reply", "requested_op":"set", "domain":"actions_vars", "status":"OK", "return":{"vars":[{"name":""}]}} {"op":"reply", "requested_op":"set", "domain":"actions_vars", "status":"ERROR", "message":""} : o - o - . o - : {"op":"set", "domain":"actions_vars", "args":{"name":"test_actions_var1", "value":"value1"}} {"op":"reply", "requested_op":"set", "domain":"actions_vars", "status":"OK", "return":{"actions_vars":[{"name":"test_actions_var1", "value":"value1"}]}} new (Description of the new operation) new . repos_configured . : {"op":"new", "domain":"repoconf", "args":{"keys_val":[{"key":"repo_id", "value":""}, {"key":"", "value":""}]} : {"op":"reply", "requested_op":"new", "domain":"repoconf", "status":"OK", "return":{"keys_val":[{"key":"repo_id", "value":""}, {"key":"", "value":""}]}} {"op":"reply", "requested_op":"new", "domain":"repoconf", "status":"ERROR", "message":""} : o - o - o - keys_val - repo_id . . enabled . . : {"op":"new", "domain":"repoconf", "args":{ "keys_val":[{"key":"repo_id", "value":"test-repo"}, {"key":"name", "value":"Test repository"}, {"key":"enabled", "value":"false"}, {"key":"baseurl", "value":"https://xyz.com/rpm"}]}} {"op":"reply", "requested_op":"new", "domain":"repoconf", "status":"OK", "return":{ "keys_val":[{"key":"repo_id", "value":"test-repo"}, {"key":"name", "value":"Test repository"}, {"key":"enabled", "value":"0"}, {"key":"baseurl", "value":"https://xyz.com/rpm"}]}} log (Description of the log operation) log . : {"op":"log", "args":{"level":"", "message":""}} : {"op":"reply", "requested_op":"log", "domain":"log", "status":"OK"} {"op":"reply", "requested_op":"log", "domain":"log", "status":"ERROR", "message":"Unknown log level ''"} : o - CRITICAL ERROR WARNING NOTICE INFO DEBUG TRACE o - o - : {"op":"log", "args":{"level":"WARNING", "message":"My warning message"}} {"op":"reply", "requested_op":"log", "domain":"log", "status":"OK"} stop (Description of the stop operation) stop . : {"op":"stop", "args":{"message":""}} : o - . - . : {"op":"stop", "args":{"message":"I want to stop the task"}} error (Description of the error operation) error raise_error=1 . : {"op":"error", "args":{"message":""}} : {"op":"reply", "requested_op":"error", "domain":"error", "status":"OK"} : o - raise_error=1 raise_error=1 . - . : {"op":"error", "args":{"message":"Error in action process 1"}} {"op":"reply", "requested_op":"error", "domain":"error", "status":"OK"} (AN EXAMPLE ACTIONS FILE) # pre_base_setup::::/usr/bin/sh -c echo\ -------------------------------------\ >>/tmp/actions-trans.log pre_base_setup::::/usr/bin/sh -c date\ >>/tmp/actions-trans.log pre_base_setup::::/usr/bin/sh -c echo\ libdnf5\ pre_base_setup\ was\ called.\ Process\ ID\ =\ '${pid}'.\ >>/tmp/actions-trans.log pre_base_setup:::enabled=installroot-only:/usr/bin/sh -c echo\ run\ in\ alternative\ "installroot":\ installroot\ =\ '${conf.installroot}'\ >>/tmp/actions-trans.log # <> . pre_base_setup::::/usr/bin/sh -c echo\ pre_base_setup:\ conf.defaultyes=${conf.defaultyes}\ >>/tmp/actions.log # <> . post_base_setup::::/usr/bin/sh -c echo\ libdnf5\ post_base_setup\ was\ called.\ >>/tmp/actions-trans.log # <> json . # . repos_configured:::mode=json:/usr/local/bin/add_new_repo # . repos_configured::::/usr/bin/sh -c echo\ Repositories:\ ${conf.*.enabled}\ >>/tmp/repos.log # http baseurl . repos_configured::::/usr/bin/sh -c echo\ "${conf.*.baseurl=*http://*}"\ >>/tmp/baseurl_http.log # <> . repos_configured::::/usr/bin/sh -c echo\ conf.rpmfusion*.enabled=0 # <> json . # . pre_transaction:::mode=json raise_error=1:/usr/local/bin/check_transaction # . # package_filter . pre_transaction::::/usr/bin/sh -c echo\ Transaction\ start.\ Packages\ in\ transaction:\ >>/tmp/actions-trans.log # ( full_nevra ) . # <> . pre_transaction:*:::/usr/bin/sh -c echo\ '${pkg.action}'\ '${pkg.full_nevra}'\ '${pkg.repo_id}'\ >>/tmp/actions-trans.log # . # package_filter . post_transaction::::/usr/bin/sh -c date\ >>/tmp/actions-trans.log post_transaction::::/usr/bin/sh -c echo\ Transaction\ end.\ Repositories\ used\ in\ the\ transaction:\ >>/tmp/actions-trans.log # . # . # ( ) . post_transaction:*:in::/usr/bin/sh -c echo\ '${pkg.repo_id}'\ >>/tmp/actions-trans.log # ============================================================================================== # snapper DNF4 . <> . # <> . pre_transaction::::/usr/bin/sh -c echo\ "tmp.snapper_descr=$(ps\ -o\ command\ --no-headers\ -p\ '${pid}')" # pre <> . pre_transaction::::/usr/bin/sh -c echo\ "tmp.snapper_pre_number=$(snapper\ create\ -t\ pre\ -p\ -d\ '${tmp.snapper_descr}')" # <> post . post_transaction::::/usr/bin/sh -c [\ -n\ "${tmp.snapper_pre_number}"\ ]\ &&\ snapper\ create\ -t\ post\ --pre-number\ "${tmp.snapper_pre_number}"\ -d\ "${tmp.snapper_descr}"\ ;\ echo\ tmp.snapper_pre_number\ ;\ echo\ tmp.snapper_descr (AUTHOR) AUTHORS.md dnf5 . (COPYRIGHT) dnf5. September 6, 2026 LIBDNF5-ACTIONS(8)