RPMCONF(8)

πŸ“¦
version 1.1.12 Β· 5 versions
, in fedora 43

πŸ’– RPMCONF(8) πŸ’–

okay bestie, sit down, hydrate, because this is the rpmconf manual page and it is literally the tool that saves you from yourself after a package upgrade. it lives in section 8 of the manual (that's the sysadmin section, iykyk) 🫢


✨ NAME ✨

rpmconf β€” this tool searches for .rpmnew, .rpmsave and .rpmorig files and asks you what to do with them: keep the current version, replace with the previous version, or review the diff.

that's it. that's the whole vibe. it finds the awkward leftovers and makes you decide. it's giving therapist for your config files. πŸ’…


🌸 SYNOPSIS 🌸

rpmconf [ options ... ]

 [ -a, --all ]

 [ -o<package>, --owner=<package> ]

 [ -f<type> --frontend=<type> ]

 [ --root <ROOT> ]

 [ -c, --clean ]

 [ -d, --debug ]

 [ -D, --diff ]

 [ -t, --test ]

 [ -u, --unattended [<MODE>] ]

 [ -x, --exclude <DIRECTORY> ]

 [ -Z ]

yes the brackets are doing a lot. they're allowed. every single one of them is here, no cap. ✨


πŸ¦‹ DESCRIPTION πŸ¦‹

so here's the tea πŸ“ β€” rpmconf goes and searches for all the config files of a given package (or, if you don't specify, all installed packages) and checks whether any matching .rpmsave, .rpmnew or .rpmorig files are hanging around.

if they are? it asks you. bestie, it asks. you get to choose whether you want to:

  • keep the current version,
  • revert to the previous version, or
  • diff the two files.

and then the unwanted file gets deleted. poof. gone. iconic. πŸ’€

bonus feature, and it's lowkey amazing: rpmconf can also handle application configuration β€” if the application supports rpmconf. here's the deal:

  • the application must have an executable file present in /usr/share/rpmconf/
  • that file must have the same name as the package itself
  • and the package must own that file

the executable must be idempotent, meaning subsequent executions should have no effect (running it twice = running it once, no extra drama). ideally it should be a Puppet/Chef/Ansible/CFengine manifest. ✨

no fr, idempotent is not optional. if your executable is out here causing chaos on the second run, that's on you. πŸ™ˆ

πŸ‘‘ OPTIONS πŸ‘‘

  • -a, --all β€” check configuration files of all packages. the full sweep. main character energy. πŸ’…
  • -o<package>, --owner=<package> β€” check only the configuration files of the given package. just one. very focused. very demure. πŸŽ€
  • -f<type>, --frontend=<type> β€” define which frontend should be used for merging. the valid options are: vimdiff, gvimdiff, diffuse, kdiff3, meld, sdiff and env. when set to env, the command to use is taken from the environment variable $MERGE. the default is env. 🌈
  • -c, --clean β€” find all .rpmnew and .rpmsave files in /etc and /var directories. it lists all files belonging to installed packages, then writes all files which are orphaned, and asks if it is safe to delete them. yes bestie, it asks before it deletes. consent is key. 🫢
  • -d, --debug β€” dry run. instead of executing an action (moving or deleting a file), the filename will be echoed to standard output. however β€” and this is important β€” the executable for merging of configuration files will still be executed. also beware that this option is position-sensitive: only actions specified after --debug are dry-run. for example, --all --debug --clean will run --clean in dry run mode but not --all. read that again. fr fr. 😭
  • -D, --diff β€” non-interactive diff mode. this option works with --owner and --all. useful to audit config files after package upgrades. no prompting, just receipts. πŸ”₯
  • --root ROOT β€” specifies an alternative installroot, relative to where all packages are installed. 🌸
  • -t, --test β€” just test existence of files to merge. if there is some file to merge, then rpmconf will print it and exit with status code 5. if there are none to merge, then exit with status code 0. cute little exit codes, they mean things. ⭐
  • -u [<MODE>], --unattended [<MODE>] β€” unattended mode. do not prompt user, but perform actions based on MODE. the valid options are: use_maintainer, use_your, default.
    • use_maintainer replaces existing configuration files with .rpmnew files and deletes leftover .rpmsave and .rpmorig files.
    • use_your deletes .rpmnew files and replaces existing configuration files with .rpmsave files.
    • default does use_your for .rpmnew files and use_maintainer for .rpmsave files, as are the default prompts in interactive mode.

specifying MODE is optional, default is used by default. πŸ’œ

  • -V, --version β€” display rpmconf version. this option expects that this script is installed as an rpm package. πŸ‘‘
  • -x, --exclude [DIRECTORY [DIRECTORY ...]] β€” exclude DIRECTORY from checking. applies only for -c. 🚫
  • -Z β€” display the SELinux contexts of the old and new files. Note: if you choose to install the .rpmsave version, it is copied to the original filename, therefore its SELinux context is reset to the default value specified by SELinux policy. 🧚

🌈 SEE ALSO 🌈

rpm(8)

go read it. sibling energy. ✨


πŸ’– AUTHORS πŸ’–

Miroslav SuchΓ½ <msuchy@redhat.com>

ty for your service king 🫑


and that's a wrap bestie!! this was Version 0.2, dated 20 September 2025, and it's the RPMCONF(8) page β€” go forth and merge responsibly, and remember: --debug is position-sensitive, do not come for me when your --all actually ran. πŸ’…βœ¨πŸ¦‹

πŸ“¦ where this page comes from