changelog for servers are serious business
Go to file
2020-06-03 21:51:32 +02:00
plugins-available [fix] content hastebin should work 2020-06-03 21:51:32 +02:00
plugins-enabled [fix] Bit of renaming things 2020-05-18 01:10:06 +02:00
.gitignore [fix] Bit of renaming things 2020-05-18 01:10:06 +02:00
build.sh [enh] There should be a build script 2020-05-18 01:10:22 +02:00
changelog.sh [fix] Changelog location should be configurable and piped content work with self call of sudo 2020-06-03 21:50:40 +02:00
config.sample.sh [fix] Changelog location should be configurable and piped content work with self call of sudo 2020-06-03 21:50:40 +02:00
README.md [fix] update readme 2020-05-19 10:29:26 +02:00

changelog : manage changes on a server

Based on the Masters Book of Serious Sysadmin's Best Practices Chapter, this script aims at unifying and simplifying the management of changelog files on a server.

Crash course

wget https://git.interhacker.space/alban/changelog/raw/branch/master/changelog.sh
chmod +x changelog
sudo -E ./changelog

How it works

The script will ask for your name if no CHANGELOG_USERNAME environment variable is found.

Then it will ask for change informations:

  • The nature of the change: which software / domain did you change? Why?
  • Some comments: How did you do it? What was happening? Is it fixed?

You can then add multiple lines for a single change as well as multiple changes for a changelog entry (ex: deploy a new service and remove old packages).

This changelog entry is now inserted on top of the /etc/changelog file, which is created with a default entry if not present yet.

Limitations

  • Please note that to enter multiline comments, you have for now to escape newline characters using the \\\\n sequence. Ugly.

  • By default, it will attempt to create and edit /etc/changelog. You better be running it as root, by default.

Plugins and config

You can add plugins to hook actions at two points in time. The plugins-available directory contains two working examples of these hooks.

  • adding a changelog entry lines. Example content-hastebin.sh plugin pushes a file content to a pastebin service
  • saving the changelog. Example output-changelog-server.sh plugin pushes a changelog to a remote central server

You can activate the plugins by placing/linking them in the plugins-enabled directory.

The plugins might need some configuration variables.

Do mv config.sample.sh config.sh and edit the file to suit your needs.

Baking a fat exec

While providing a mean to run plugins is cool, it's not very efficient at deployment time.

Run build.sh to get a single exec, ready for shipping, embedding:

  • your config.sh file
  • all the plugins you added to plugins-enabled

Possible improvements

  • Enable a sudo requirement / ways to restart oneself as a root user
  • [] Enable simple multiline comments
  • Provide a way to attach files
  • Provide a way (plugins?) to report each change to a central server
  • Provide a build system to cook config and plugins in a single exec