These are my own notes for my re-expiration of GPG keys.
sudo cryptsetup open /dev/sdb1 --type=tcrypt flashdrive
sudo mkdir -p /mnt/flashdrive
sudo mount /dev/mapper/flashdrive /mnt/flashdrive
export GNUPGHOME=/mnt/flashdrive/gnupg
Version 2.7.5, Git revision ba147e6f59b2da75b1beb98b1888cce97f7032b1 x86_64 hpack-0.34.4 | |
2022-03-24 09:08:46.951150: [debug] Checking for project config at: /home/patrick/code/freckle/hspec-junit-formatter/stack.yaml | |
2022-03-24 09:08:46.951255: [debug] Loading project config file stack.yaml | |
2022-03-24 09:08:46.954176: [debug] (SQL) SELECT COUNT(*) FROM "last_performed" WHERE ("action"=?) AND ("timestamp">=?); [PersistInt64 1,PersistUTCTime 2022-03-23 13:08:46.954156978 UTC] | |
2022-03-24 09:08:46.954530: [debug] Using package location completions from a lock file | |
2022-03-24 09:08:46.956786: [debug] Loaded snapshot from Pantry database. | |
2022-03-24 09:08:47.095209: [debug] RawSnapshotLayer {rslParent = RSLCompiler (WCGhc (mkVersion [8,10,4])), rslCompiler = Nothing, rslLocations = [RPLIHackage AC-Angle-1.0@sha256:e1ffee97819283b714598b947de323254e368f6ae7d4db1d3618fa933f80f065,544 (Just (TreeKey 7edd1f1a6228af27c0f0ae53e73468c1d7ac26166f2cb386962db7ff021a2714,210)),RPLIHackage ALUT-2.4.0.3@sha256:ab8c2af4c13bc04c7 |
-- Form 1 | |
----------------------------------------------------------------------------------------- | |
data Job arg = Job | |
{ jobJid :: JobId | |
, jobJobtype :: String | |
, jobArgs :: NonEmpty arg | |
, jobRetry :: Maybe Int | |
, jobQueue :: Maybe Queue | |
, jobAt :: Maybe UTCTime |
// External Libraries | |
const agent = require("agentkeepalive"); | |
const asyncRetry = require("async").retry; | |
const request = require("request"); | |
const zlib = require("zlib"); | |
// Constants | |
const MAX_LINE_LENGTH = parseInt(process.env.LOGDNA_MAX_LINE_LENGTH) || 32000; | |
const MAX_REQUEST_TIMEOUT_MS = | |
parseInt(process.env.LOGDNA_MAX_REQUEST_TIMEOUT) || 30000; |
Extending subkey expiration
Mount master keys flashdrive
truecrypt
Extend expiry of all keys
#!/bin/sh | |
amixer_() { | |
# Workaround | |
amixer -c 0 sset Headphone unmute | |
amixer -c 0 sset Speaker unmute | |
amixer "$@" | |
} | |
notify() { |
#!/bin/sh | |
amixer_() { | |
# Workaround | |
amixer -c 0 sset Headphone unmute | |
amixer -c 0 sset Speaker unmute | |
amixer "$@" | |
} | |
notify() { |
#!/usr/bin/env stack | |
-- stack script --resolver lts-10.8 | |
-- vim: ft=haskell | |
{-# LANGUAGE ExistentialQuantification #-} | |
{-# LANGUAGE GeneralizedNewtypeDeriving #-} | |
{-# LANGUAGE MultiParamTypeClasses #-} | |
{-# LANGUAGE NoImplicitPrelude #-} | |
{-# LANGUAGE QuasiQuotes #-} | |
{-# LANGUAGE TemplateHaskell #-} | |
{-# LANGUAGE TypeFamilies #-} |
I personally prefer [Semver][]. I think it's reasonable, simple, and makes sense. But as a good Haskell citizen, I'd like to be [PVP][]-compliant as well. Here is a bit of a graphic showing how the two systems are almost the same:
PVP: A . B . C . ...
Semver: Major . Minor . Patch
^ ^ ^
| | |
| | ` increment for other changes
| |
| ` increment on non-breaking change