Replace example.com with your domain. All occurrences of the string 'mail' are know as the selector and can be any alpha numeric string.
Install opendkim:
$ sudo apt-get install opendkim opendkim-tools| #!/usr/bin/perl | |
| use strict; | |
| use warnings; | |
| use Getopt::Long; | |
| use Digest::MD5; | |
| #use diagnostics; | |
| my $minimum = 0; | |
| my $header = ''; |
| #!/bin/sh | |
| # sample usage: | |
| # ontouchdo malformed.html 'clear; xmllint --noout --valid malformed.html 2>&1 | head -n20' | |
| # | |
| # Now fix some things in malformed.html and save. See the remaining errors in real time. Ctrl-c to quit. | |
| [ ! -r "$1" ] && echo 'Nothing to watch.' && exit 1 | |
| [ ! -n "$2" ] && echo 'Nothing to do.' && exit 1 |
| #!/bin/bash | |
| agree() { | |
| local question="$1" | |
| while true; do | |
| read -p "$question " answer | |
| case $answer in | |
| [Yy]|[Yy][Ee][Ss]) return 0 ;; | |
| [Nn]|[Nn][Oo]|'') return 1 ;; # empty string is default |
| # Use awk to to redirect docker build output to stderr for visual feedback | |
| # while capturing the image id on stdout when the build is sucessfull | |
| ID=$(docker build . | awk '{print > "/dev/stderr"} END {if (/^Successfully built /) print $NF; else exit 1}') | |
| # given docker volume path, return local storage path | |
| doc2loc(){ docker inspect --format "{{range .Mounts}}{{if eq .Destination \"$1\"}}{{.Source}}{{end}}{{end}}" $2;} |
| #!/usr/bin/perl -w | |
| use Net::CIDR; | |
| use Getopt::Long; | |
| # Net::CIDR one liner: | |
| # perl -mNet::CIDR -ne 'print if Net::CIDR::cidrlookup($_, ("10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"))' | |
| # | |
| # TODO: add ip address validation |
| # print value pairs from an array in lower case | |
| jq --raw-output '.[] | "\(.key_1 | ascii_downcase) \(.key_2 | ascii_downcase)"' | |
| # convert `key=value` lines into `{"key":"value"}` json | |
| jq --raw-input 'split("=") | {(.[0]):.[1]}' some.conf | jq --slurp 'add' | |
| # validate json (bad) | |
| echo '{hello: "there"}' | jq . >/dev/null 2>&1 && echo good json || echo bad json | |
| bad json |
| ## setting up a personal git repository that you can push change sets to | |
| ## ssh-host: a host defined in ~/.ssh/config (see: ssh_config(5)) | |
| ## camaro: the name of the repo | |
| # on a remote host or local filesystem: | |
| git init --bare camaro.git # (option: use --shared if there are other contributors) | |
| # on local host cd to camaro directory: | |
| git remote add origin ssh-host:[path/]camaro.git | |
| # (for origin on local filesystem: git remote add origin file:///media/volume-name/camaro.git) |
| #!/bin/bash | |
| get_data() { | |
| # if the parameter is a local file just cat it (for testing) otherwise try curl | |
| { test -r "$1" && cat "$1" || curl -s "$1"; } | \ | |
| jq --raw-output \ | |
| '.[] | "\(.symbol | ascii_downcase) \(.price_usd)"' | |
| } | |
| process() { |
| #!/usr/bin/perl -w | |
| use Getopt::Long; | |
| # use diagnostics; | |
| sub usage { | |
| my $name = $0; | |
| $name =~ s/.*\///; | |
| print <<EOT; | |
| Usage: $name [options] in-list other-list |