Spellbook of Terminal Commands
Organising my thoughts is a skill I may never acquire. It gets worse as I get older. Thankfully the world is populated by wonderful beings who share their discoveries. Thank you @Rek for sharing your work. This Spellbook of Terminal Commands is something I wish I had started 40 years ago. Ah well.
I will be adding/editing this list as/when I find old text notes to myself I have scattered across my distributed electronic memory. It’s a work in progress.
- Keep wifi alive
- SSL/Certbot renewal in Lighttpd
- Using Linodes API to update DNS
- Checking for an Updated Public IP
Keep wifi alive
debian/bash/networking/wlan
I ran out of ethernet ports for a little raspberrypi server I run under the telly. I run this script via cron to ensure it stays on the network. I can’t remember right now what this server does…
Replace the bits inside the [SQUARE BRACKETS], obviously.
#!/bin/bash
# keep wifi alive
# sudo chmod 711 wlan0keepalive.sh
# */5 * * * * /home/wlan0keepalive.sh >/dev/null 2>&1
ping -c2 [IP of upstream router or similar]
if [ $? != 0 ]
then
echo "restarting wlan0"
ifconfig wlan0 down
sleep 30
ifconfig wlan0 up
else
echo "hunkydory"
fi
Certbot/Lighttpd SSL
debian/bash/certbot/lighttpd/ssl
I use a script like the one below to check whether to update my SSL certificate at 6:30 every morning.
This is the cron:
30 6 * * * /[PATH]/sslcat.sh > /dev/null
I am sure I am missing something as my SSL regularly fails. Looking at my domain report on Googles’ Certificate Transparency Project often confuses me. I had forgotten about enabling Fastmails webDAV at fm.tregeagle.com.
I have been using certbot to keep tregeagle.com updated but not sure where fm.tregeagle.com gets updated. Did I set that up.
Replace the bits inside the [SQUARE BRACKETS], obviously.
#!/usr/bin/env bash
set -o errexit
# run via cron as root
certbot certonly -n --webroot --expand -w /var/www/[SITE] -d [www.URI.com] --pre-hook "systemctl stop lighttpd.service" --posthook "systemctl start lighttpd.service"
echo "success"
Dynamic DNS
debian/bash/dns/linode/api
I update my own DNS rather than use one of those services. My DNS records are hosted on Linode and they have a well documented API that I use. My script looks like this:
#!/bin/bash
set -Eue -o pipefail
TOKEN=[My Token]
DOMAINID=[My Domain ID]
RECORDID=[The Record ID]
src=$HOME"/bin/wanip.txt"
IPCURRENT=$(cat "${src}")
curl --request PUT \
--url https://api.linode.com/v4/domains/${DOMAINID}/records/${RECORDID} \
--header 'accept: application/json' \
--header "authorization: Bearer ${TOKEN}" \
--header 'content-type: application/json' \
--data '
{
"name": "data",
"ttl_sec": 300,
"target": "${IPCURRENT}"
}
'
Public IP checker/updater thing
debian/bash/dns/dig
As you can see in the above script it relies on comparing a record of the existing IP (IPCURRENT) with the historical one (src). To keep that updated I use the following script.
#!/bin/bash
# add this to a cronjob
# depends upon having dnsutils or dig installed.
# uses opendns to resolve external address [see ipcurrent]
# for alt methods see: https://www.cyberciti.biz/faq/how-to-find-my-public-ip-a>
# Check the source file exists
src=$HOME"/bin/wanip.txt"
ipserv="[USER]@[SERVER]:/var/www/[PATH]/ip.txt"
if [ ! -f "${src}" ]
then # if not create it
echo "null" > "${src}"
fi
# Compare the old ip address in the source file to the current WAN ip address
ipold=$(cat "${src}")
ipcurrent="$(dig +short myip.opendns.com @resolver1.opendns.com)"
if [ "${ipcurrent}" != "${ipold}" ]; then
echo "Old IP was \"${ipold}\", new IP is ${ipcurrent}"
echo "${ipcurrent}" > "${src}" # update the source file
scp "${src}" "${ipserv}"
else
echo "external ip is: ${ipcurrent}"
echo "on last change ip addr was copied to remote server:"
echo "${src}" "${ipserv}"
echo "no changes required - exiting not exciting."
fi
exit 0
* Actually, writing this Spellbook post has been very unwieldy. My patience is limited. Writing one post for each script and tagging it ‘code’ is better for me. the index/TOC is handy. I like the idea of introducing the code and having a way to find the scipt I’m after. Perhaps I just need a top tagged post for intros.
Comments
Add a comment?There are no comments yet.