diff options
| author | Mitchell Riedstra <mitch@riedstra.dev> | 2021-10-29 21:53:53 -0400 |
|---|---|---|
| committer | Mitchell Riedstra <mitch@riedstra.dev> | 2021-10-29 21:53:53 -0400 |
| commit | 5b25c5155312f626813e0d36b7933f5eba801dd2 (patch) | |
| tree | 6e264a92dbe13ed77821a5c5bd536b6701768442 /scripts | |
| parent | e9b933ea6ce85f5d4f4653b7e5e6a7c836fcc893 (diff) | |
| download | dotfiles-5b25c5155312f626813e0d36b7933f5eba801dd2.tar.gz dotfiles-5b25c5155312f626813e0d36b7933f5eba801dd2.tar.xz | |
Major dotfile cleanup
Diffstat (limited to 'scripts')
| -rwxr-xr-x | scripts/httpsvr | 68 | ||||
| -rwxr-xr-x | scripts/key-check.sh | 12 | ||||
| -rw-r--r-- | scripts/readme.md | 3 | ||||
| -rwxr-xr-x | scripts/snap-btrfs.sh | 23 | ||||
| -rwxr-xr-x | scripts/snap-lvm.sh | 31 | ||||
| -rwxr-xr-x | scripts/webhook.py | 70 |
6 files changed, 207 insertions, 0 deletions
diff --git a/scripts/httpsvr b/scripts/httpsvr new file mode 100755 index 0000000..ffc816a --- /dev/null +++ b/scripts/httpsvr @@ -0,0 +1,68 @@ +#!/bin/sh +# Stupid basic http server using OpenBSD netcat +set -e + +PORT="${PORT:-8900}" +ADDR="${ADDR:-127.0.0.1}" + +ncpid= + +send_index() { +cat <<EOF +HTTP/1.1 200 OK +Server: shell +Content-Type: text/html; charset=UTF-8 + +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <title>Netcat HTTP</title> +</head> +<body> + Minimal HTTP server in posix SH and OpenBSD's netcat +</body> +</html> +EOF +} + +cleanup() { + set +e + kill "$ncpid" >/dev/null 2>&1 + rm "$_f" "$_inF" >/dev/null 2>&1 + exit 0 +} +trap cleanup EXIT INT + +while true ; do + _f="$(mktemp)" + + _inF="$(mktemp)" + rm -f "$_inF" + mkfifo "$_inF" + + #shellcheck disable=SC2002 + cat "$_inF" | nc -l "$ADDR" "$PORT" > "$_f" & # | tee /dev/fd/2 >"$_f" & + ncpid=$! + + counter=0 + while [ $counter -lt 100 ] || [ -s "$_f" ] ; do + if grep -qi "^Accept:" "$_f" ; then + pth="$(sed -nre 's@^GET ([^ ][^ ]*) HTTP/1.1.*@\1@gp' < "$_f")" + + echo "Request for path: $pth" + + case $pth in + /) send_index >"$_inF" ;; + esac + + break + fi + sleep .01 + [ -s "$_f" ] && counter=$((counter += 1)) + ps $ncpid >/dev/null 2>&1 || break + done + + kill $ncpid || echo "" + rm "$_f" "$_inF" +done diff --git a/scripts/key-check.sh b/scripts/key-check.sh new file mode 100755 index 0000000..1672bc4 --- /dev/null +++ b/scripts/key-check.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Check for a public key, and create one for the user if it +# does not exist. Spit the key in red to stdout. Not so much for me, +# but as a convienient script to give to others who aren't so familiar +# with how SSH key authorization works. + +keyf="$HOME/.ssh/id_ed25519"; +! [ -e "$keyf" ] && ssh-keygen -t ed25519 -f "$keyf" -P ""; +printf '\033[1;31m%s\033[0m\n' "$(cat "$keyf.pub")"; + +# One line version for pasting into chat: +# keyf="$HOME/.ssh/id_ed25519"; ! [ -e "$keyf" ] && ssh-keygen -t ed25519 -f "$keyf" -P ""; printf '\033[1;31m%s\033[0m\n' "$(cat "$keyf.pub")"; diff --git a/scripts/readme.md b/scripts/readme.md new file mode 100644 index 0000000..60c79c1 --- /dev/null +++ b/scripts/readme.md @@ -0,0 +1,3 @@ +# scripts + +A couple of misc scripts that may be of some utility. diff --git a/scripts/snap-btrfs.sh b/scripts/snap-btrfs.sh new file mode 100755 index 0000000..cc2e5a9 --- /dev/null +++ b/scripts/snap-btrfs.sh @@ -0,0 +1,23 @@ +#!/bin/sh +set -x +set -e +timestamp() { + date +%m.%d.%y_%H.%M.%S +} + +rootfs="glibc" +snap="${rootfs}-snap" + +cd /ROOT + +if [ -e "$snap" ] ; then + btrfs sub del "$snap" +fi + +if ! [ -e "bak" ] ; then + btrfs sub create "bak" +fi + +btrfs sub snap -r "$rootfs" "bak/${rootfs}-$(timestamp)" +btrfs sub snap "$rootfs" "$snap" +sed -i.bak -e"s/subvol=${rootfs}/subvol=${snap}/g" "${snap}/etc/fstab" diff --git a/scripts/snap-lvm.sh b/scripts/snap-lvm.sh new file mode 100755 index 0000000..4991495 --- /dev/null +++ b/scripts/snap-lvm.sh @@ -0,0 +1,31 @@ +#!/bin/sh +set -e + +vg="x230" +lv="root" +snap_name="${lv}-snap" +mountpoint="/mnt/snap" +PERCENT="100" + +mount_fs() { + _device="$1"; shift + _opts="nouuid,rw" + _mntpoint="$1"; shift + if ! [ -d "$_mntpoint" ] ; then + mkdir "$_mntpoint" + fi + mount -o "$_opts" "$_device" "$_mntpoint" +} + +# If snapshot doesn't exist +if ! lvm lvs "$vg/$snap_name" >/dev/null 2>&1 ; then + lvm lvcreate "$vg/$lv" -s --name "$snap_name" -l "${PERCENT}%ORIGIN" + mount_fs "/dev/$vg/$snap_name" "$mountpoint" + sed -i.bak -r "s@(/dev/${vg}/${lv})@\1${snap_name}@" \ + "$mountpoint/etc/fstab" + umount "$mountpoint" +else + printf 'Cannot continue snapshot "%s" already exists.\n' \ + "$vg/$snap_name" + exit 1; +fi diff --git a/scripts/webhook.py b/scripts/webhook.py new file mode 100755 index 0000000..3db70a8 --- /dev/null +++ b/scripts/webhook.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python3 +import requests, json, sys + +expected_status = 204 +url = "" +# Default for discord, easy enough to override +msg = { + "username": "{hostname} script", + "content": "```{stdin}```", +} + +customVars = {} + +def merge_dicts(*dict_args): + result = {} + for dictionary in dict_args: + result.update(dictionary) + return result + +def template(msg, fmt): + out = {} + for k, v in msg.items(): + if isinstance(v, dict): + out[k] = template(v, fmt) + else: + out[k] = v.format(**fmt) + return out + + +def help(): + print("Usage: {} [-m msg] [-u url] [-s expected_status] [-V var content]...".format(sys.argv[0])) + print("A small python script to send webhooks easily from the command line utilizing arguments and stdin") + print("Only requrement is the requests library") + print("Defaults:") + print("\tmsg: " + json.dumps(msg)) + print("\turl: " + url) + print("\texpected_status: ", expected_status) + print("") + print("The [-V var content] arguments allow you to specifiy custom vars to be overridden in the json msg.") + sys.exit(2) + +n = 1 +while n < len(sys.argv): + if sys.argv[n] == "-u": + url = sys.argv[n+1] + n += 2 + elif sys.argv[n] == "-m": + msg = json.loads(sys.argv[n+1]) + n += 2 + elif sys.argv[n] == "-s": + expected_status = int(sys.argv[n+1]) + n += 2 + elif sys.argv[n] == "-V": + customVars[sys.argv[n+1]] = sys.argv[n+2] + n += 3 + else: + help() + +if url == "": + sys.stderr.write("No URL provided\n") + help() + +msg2 = template(msg, merge_dicts(customVars , {"stdin": sys.stdin.read()})) +r = requests.post(url, json=msg2) + +if r.status_code != expected_status: + print(r) + print(r.text) + sys.exit(1) + |
