2020-02-26 16:11:23 +00:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
|
|
|
|
# This script demonstrates how to setup a nix-bitcoin node in a NixOS container.
|
|
|
|
# Running this script leaves no traces on your host system.
|
|
|
|
|
|
|
|
# This demo is a template for your own experiments.
|
|
|
|
# Feel free to modify or to run nix-shell and execute individual statements of this
|
|
|
|
# script in the interactive shell.
|
|
|
|
|
|
|
|
if [[ $(sysctl -n net.ipv4.ip_forward) != 1 ]]; then
|
|
|
|
echo "Error: IP forwarding (net.ipv4.ip_forward) is not enabled"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
if [[ ! -e /run/current-system/nixos-version ]]; then
|
|
|
|
echo "Error: This script needs NixOS to run"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ ! -v IN_NIX_SHELL ]]; then
|
|
|
|
echo "Running script in nix shell env..."
|
|
|
|
exec nix-shell --run "${BASH_SOURCE[0]}"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Cleanup on exit
|
|
|
|
cleanup() {
|
|
|
|
echo
|
|
|
|
echo "Deleting container..."
|
|
|
|
sudo extra-container destroy demo-node
|
|
|
|
}
|
|
|
|
trap "cleanup" EXIT
|
|
|
|
|
|
|
|
# Build container.
|
|
|
|
# You can re-run this command with a changed container config.
|
|
|
|
# The running container is then switched to the new config.
|
|
|
|
# Learn more: https://github.com/erikarvstedt/extra-container
|
|
|
|
#
|
|
|
|
sudo extra-container create --start <<'EOF'
|
|
|
|
{ pkgs, lib, ... }: let
|
|
|
|
containerName = "demo-node"; # container name length is limited to 11 chars
|
|
|
|
localAddress = "10.250.0.2"; # container address
|
|
|
|
hostAddress = "10.250.0.1";
|
|
|
|
in {
|
|
|
|
containers.${containerName} = {
|
|
|
|
privateNetwork = true;
|
|
|
|
inherit localAddress hostAddress;
|
|
|
|
config = { pkgs, config, lib, ... }: {
|
|
|
|
imports = [
|
|
|
|
<nix-bitcoin/examples/configuration.nix>
|
|
|
|
<nix-bitcoin/modules/secrets/generate-secrets.nix>
|
|
|
|
];
|
|
|
|
# Speed up evaluation
|
|
|
|
documentation.nixos.enable = false;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
# Allow WAN access
|
|
|
|
systemd.services."container@${containerName}" = {
|
|
|
|
preStart = "${pkgs.iptables}/bin/iptables -w -t nat -A POSTROUTING -s ${localAddress} -j MASQUERADE";
|
|
|
|
# Delete rule
|
|
|
|
postStop = "${pkgs.iptables}/bin/iptables -w -t nat -D POSTROUTING -s ${localAddress} -j MASQUERADE || true";
|
|
|
|
};
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
# Run command in container
|
2020-05-17 21:46:44 +00:00
|
|
|
c() {
|
|
|
|
if [[ $# > 0 ]]; then
|
|
|
|
sudo extra-container run demo-node -- "$@" | cat;
|
|
|
|
else
|
|
|
|
sudo nixos-container root-login demo-node
|
|
|
|
fi
|
|
|
|
}
|
2020-02-26 16:11:23 +00:00
|
|
|
|
|
|
|
echo
|
|
|
|
echo "Bitcoind service:"
|
|
|
|
c systemctl status bitcoind
|
|
|
|
echo
|
|
|
|
echo "Bitcoind network:"
|
|
|
|
c bitcoin-cli getnetworkinfo
|
|
|
|
echo
|
|
|
|
echo "lightning-cli state:"
|
|
|
|
c lightning-cli getinfo
|
|
|
|
echo
|
|
|
|
echo "Node info:"
|
|
|
|
c nodeinfo
|
|
|
|
echo
|
|
|
|
echo "Bitcoind data dir:"
|
|
|
|
sudo ls -al /var/lib/containers/demo-node/var/lib/bitcoind
|
|
|
|
|
2020-04-15 16:54:02 +00:00
|
|
|
# Uncomment to start a shell session here
|
2020-05-17 12:25:40 +00:00
|
|
|
# . start-bash-session.sh
|
2020-04-15 16:54:02 +00:00
|
|
|
|
2020-02-26 16:11:23 +00:00
|
|
|
# Cleanup happens at exit (see above)
|