Skip to content

Instantly share code, notes, and snippets.

View jsumners's full-sized avatar

James Sumners jsumners

View GitHub Profile
#!/bin/bash
if [ ! -f package.json ]; then
# Default to npm regardless of missing package file.
echo "npm"
exit 0
fi
NODE_VERSION=$(node --version)
NODE_VERSION="${NODE_VERSION%%\.*}"
@jsumners
jsumners / Readme.md
Created October 24, 2021 13:18
Retrieve tabs from iOS Safari backup
  1. From a backup of the iOS device, extract /HomeDomain/Library/Safari/BrowserState.db to a local directory
  2. Place index.js and package.json in the same local directory
  3. npm install
  4. node index.js > lost_ios_safari_tabs.csv

Note: these instructions were created using an iMazing backup.

@jsumners
jsumners / readme.md
Last active October 11, 2021 15:10
Backup disk over ssh
  1. Boot host to be backed up with a rescue image, e.g. SystemRescueCD.
  2. Connect to destination host: ssh -L 8000:localhost:9000 destination.example.com
  3. On destination host: socat -u TCP4-LISTEN:9000,reuseaddr,fork OPEN:/tmp/backup.img.bz2,create,append
  4. On host to be backed up: dd if=/dev/sda | pv | bzip2 -9 | nc localhost 8000

Notes:

  1. socat installed on destination host
  2. /dev/sda is whatever disk is to be imaged and sent to remote host
@jsumners
jsumners / readme.md
Created March 3, 2021 12:54
Start new PR with an existing PR as a base

Ocassionally, someone will start a pull request and, for various reason, not see it through. Later, someone else may wish to finish that work. Even though the original author was unable to finish their work, we should still include their efforts in our project's history. To do so, the person wishing to finish the original pull request should start their new pull request using the original as the base.

The simplest workflow to accomplish this is:

$ # For the project on GitHub to your account and then:
$ git clone 
@jsumners
jsumners / no-wip.yml
Created September 23, 2020 13:28
No WIP PR merges
name: "No WIP PR Title"
on:
pull_request_target:
types:
- opened
- edited
- synchronize
jobs:
@jsumners
jsumners / bar.js
Created April 21, 2020 16:04
self-ref testing
// `lib/bar.js`
module.exports = 'bar'
@jsumners
jsumners / bar.js
Created April 21, 2020 15:55
self-ref testing
// `lib/bar.js`
module.exports = 'bar'
@jsumners
jsumners / async-await-result-pattern.js
Created June 28, 2018 16:28
A simple pattern for working with async/await
async function doFoo () {
let bar
try {
bar = await something_that_can_throw('a value')
} catch (error) {
return {error}
}
return {value: bar}
}

Change Well Known Passwords

This is an Ansible playbook for chaning default, well known, or missing passwords on a set of hosts. To use it:

  1. Start a listener: socat tcp4-listen:8000,fork stdout
  2. Run the playbook: ansible-playbook update_password.pb.yml -e 'user=target_user' -e 'passwd=known_pass'

Your listener will receive notifications like:

@jsumners
jsumners / Intro.txt
Created September 21, 2017 20:57
Deal with NICs in Ansible without knowing what udev/systemd will call them
Scenario:
You are building a load balancer wherein you want to bond the interfaces that will be used to serve the traffic.
You're managing this via Ansible. You don't want to have to boot to an OS to see what udev/system will name the
NICs you intend to bond, because that is just stupid. So you decide to work with the MAC addresses. Oops,
the `ansible_facts` don't make that easy.
Solution:
The convoluted trickery published here.