Compare commits
3 Commits
dddd30aa96
...
895cab87b4
Author | SHA1 | Date | |
---|---|---|---|
|
895cab87b4 | ||
|
4c81704049 | ||
|
efb1a2c2b6 |
48
README.md
48
README.md
@ -5,31 +5,61 @@ Based on the Masters Book of Serious Sysadmin's Best Practices Chapter, this scr
|
|||||||
## Crash course
|
## Crash course
|
||||||
|
|
||||||
```
|
```
|
||||||
wget https://this.repo.srs.ly/alban/changelog/bla/bla/raw/changelog
|
wget https://git.interhacker.space/alban/changelog/raw/branch/master/changelog.sh
|
||||||
chmod +x changelog
|
chmod +x changelog
|
||||||
sudo ./changelog
|
sudo -E ./changelog
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## How it works
|
||||||
|
|
||||||
The script will ask for your name if no `CHANGELOG_USERNAME` environment variable is found.
|
The script will ask for your name if no `CHANGELOG_USERNAME` environment variable is found.
|
||||||
|
|
||||||
Then it will ask for a first change informations:
|
Then it will ask for change informations:
|
||||||
|
|
||||||
* The nature of the change: which software / domain did you change? Why?
|
* 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?
|
* 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**
|
**Limitations**
|
||||||
|
|
||||||
* Please note that to enter multiline comments, you have for now to escape newline characters using the `\\\\n` sequence. Ugly.
|
* 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.
|
* By default, it will attempt to create and edit `/etc/changelog`. You better be running it as root, by default.
|
||||||
|
|
||||||
|
## Plugins and config
|
||||||
|
|
||||||
# Possible improvements
|
You can add plugins to hook actions at two points in time. The `plugins-available` directory contains two working examples of these hooks.
|
||||||
|
|
||||||
* Enable a sudo requirement / ways to restart oneself as a root user
|
* adding a changelog entry lines. Example `content-hastebin.sh` plugin pushes a file content to a pastebin service
|
||||||
* Enable simple multiline comments
|
* saving the changelog. Example `output-changelog-server.sh` plugin pushes a changelog to a remote central server
|
||||||
* Provide a way to attach files
|
|
||||||
* Provide a way (plugins?) to report each change to a 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
|
||||||
|
|
||||||
|
* [x] Enable a sudo requirement / ways to restart oneself as a root user
|
||||||
|
* [] Enable simple multiline comments
|
||||||
|
* [x] Provide a way to attach files
|
||||||
|
* [x] Provide a way (plugins?) to report each change to a central server
|
||||||
|
* [x] Provide a build system to cook config and plugins in a single exec
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
14
changelog.sh
14
changelog.sh
@ -1,21 +1,23 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#Manages an /etc/changelog
|
#Manages an /etc/changelog
|
||||||
|
|
||||||
# %CONFIG% This comment is used to build custom scripts
|
|
||||||
|
|
||||||
CHANGELOG=/etc/changelog
|
echo ${BASH_SOURCE[@]}
|
||||||
|
APP_PATH=$( cd $(dirname ${BASH_SOURCE[0]}) && pwd )
|
||||||
|
APP_NAME=$( basename ${BASH_SOURCE[0]})
|
||||||
|
|
||||||
[[ -w /etc/changelog ]] || {
|
[[ -w /etc/changelog ]] || {
|
||||||
echo -e "\nYou cannot write to $CHANGELOG... This doesn't look serious!\n"
|
echo -e "\nYou cannot write to $CHANGELOG... This doesn't look serious!\n"
|
||||||
read -e -i y -n 1 -p "Run as sudo [Yn]? : "
|
read -e -i y -n 1 -p "Run as sudo [Yn]? : "
|
||||||
[[ "Y" == ${REPLY^} ]] && sudo -E $0
|
[[ "Y" == ${REPLY^} ]] && sudo -E "$APP_PATH/$APP_NAME" && exit 0
|
||||||
exit 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CHANGELOG=/etc/changelog
|
||||||
|
# %CONFIG% This comment is used to build custom scripts
|
||||||
|
[[ -f "$APP_PATH/config.sh" ]] && source "$APP_PATH/config.sh"
|
||||||
|
|
||||||
# functions
|
# functions
|
||||||
|
|
||||||
msg(){ echo -e "$@"; }
|
msg(){ echo -e "$@"; }
|
||||||
panic(){ msg "${@} Exiting."; exit 1;}
|
panic(){ msg "${@} Exiting."; exit 1;}
|
||||||
ENTRY_FILE=$(mktemp)
|
ENTRY_FILE=$(mktemp)
|
||||||
@ -85,7 +87,7 @@ PLUGIN_OUTPUT+=("hookOutputFile")
|
|||||||
declare -a PLUGIN_OUTPUT_MENU
|
declare -a PLUGIN_OUTPUT_MENU
|
||||||
|
|
||||||
# %PLUGIN% This comment is used to build custom scripts
|
# %PLUGIN% This comment is used to build custom scripts
|
||||||
[[ -d "plugins-enabled" ]] && [[ -n "plugins-enabled/*" ]] && source plugins-enabled/*
|
[[ -d "$APP_PATH/plugins-enabled" ]] && [[ -n "$APP_PATH/plugins-enabled/*" ]] && source "$APP_PATH"/plugins-enabled/*
|
||||||
|
|
||||||
for (( i = 0; i < ${#PLUGIN_OUTPUT[@]} ; i++ )); do
|
for (( i = 0; i < ${#PLUGIN_OUTPUT[@]} ; i++ )); do
|
||||||
TXT=$( ${PLUGIN_OUTPUT[$i]} )
|
TXT=$( ${PLUGIN_OUTPUT[$i]} )
|
||||||
|
3
config.sample.sh
Normal file
3
config.sample.sh
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
CHANGELOG_SERVER=https://changelog.example.com
|
||||||
|
CHANGELOG_AUTH_KEY=your-shared-secret
|
||||||
|
HASTEBIN_SERVER=https://hastebin.com
|
Loading…
Reference in New Issue
Block a user