Skip to content

Instantly share code, notes, and snippets.

View dfederm's full-sized avatar

David Federman dfederm

View GitHub Profile
@dfederm
dfederm / migrate.sh
Last active March 27, 2026 04:35
Migrate from TrueNAS to Proxmox
#!/bin/bash
# migrate.sh — One-shot migration script for fresh Proxmox host
#
# Takes a ZFS pool from TrueNAS, fixes properties, runs setup scripts,
# deploys services, restores Docker volumes, and prints remaining manual steps.
#
# Usage:
# bash /path/to/migrate.sh <pool-name>
#
# Example:
@dfederm
dfederm / backup-docker-volumes.sh
Created March 25, 2026 03:46
Backup and Restore Docker volumes
#!/bin/bash
# Back up Docker named volumes before a migration.
#
# Named volumes live on the container's local filesystem, NOT on your ZFS pool,
# so they won't survive a migration unless explicitly backed up.
#
# Usage:
# ./backup-docker-volumes.sh <backup-dir> [volume1] [volume2] ...
#
# Example:
@dfederm
dfederm / DemoWorkQueue.cs
Last active December 4, 2023 05:02
Limited Parallelism Work Queue
const int Parallelism = 3;
const int NumItems = 20;
TimeSpan ProcessingTime = TimeSpan.FromMilliseconds(100);
Console.WriteLine("WorkQueue starting");
await using (WorkQueue workQueue1 = new(Parallelism))
{
List<Task> tasks = new(NumItems);
for (int i = 0; i < NumItems; i++)
@dfederm
dfederm / AsyncMutex.cs
Created November 3, 2022 06:44
AsyncMutex
public sealed class AsyncMutex : IAsyncDisposable
{
private readonly string _name;
private Task? _mutexTask;
private ManualResetEventSlim? _releaseEvent;
private CancellationTokenSource? _cancellationTokenSource;
public AsyncMutex(string name)
{
_name = name;