2020-02-26 19:11:23 +03: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.
|
2021-02-02 00:53:06 +03:00
|
|
|
# Run with option `--interactive` or `-i` to start a shell for interacting with
|
|
|
|
# the node.
|
2020-02-26 19:11:23 +03:00
|
|
|
|
2021-03-16 14:45:17 +03:00
|
|
|
if [[ ! -v NIX_BITCOIN_EXAMPLES_DIR ]]; then
|
2020-02-26 19:11:23 +03:00
|
|
|
echo "Running script in nix shell env..."
|
2020-10-11 21:02:24 +03:00
|
|
|
cd "${BASH_SOURCE[0]%/*}"
|
2020-10-18 14:41:55 +03:00
|
|
|
exec nix-shell --run "./${BASH_SOURCE[0]##*/} $*"
|
2021-03-16 14:45:17 +03:00
|
|
|
else
|
|
|
|
cd "$NIX_BITCOIN_EXAMPLES_DIR"
|
2020-02-26 19:11:23 +03:00
|
|
|
fi
|
|
|
|
|
2020-10-18 14:41:57 +03:00
|
|
|
if [[ $(sysctl -n net.ipv4.ip_forward || sudo sysctl -n net.ipv4.ip_forward) != 1 ]]; then
|
|
|
|
echo "Error: IP forwarding (net.ipv4.ip_forward) is not enabled."
|
|
|
|
echo "Needed for container WAN access."
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2020-10-18 14:41:56 +03:00
|
|
|
if [[ $EUID != 0 ]]; then
|
|
|
|
# NixOS containers require root permissions
|
2021-03-16 14:45:17 +03:00
|
|
|
exec sudo "PATH=$PATH" "NIX_PATH=$NIX_PATH" "NIX_BITCOIN_EXAMPLES_DIR=$NIX_BITCOIN_EXAMPLES_DIR" "${BASH_SOURCE[0]}" "$@"
|
2020-10-18 14:41:56 +03:00
|
|
|
fi
|
|
|
|
|
2020-10-18 14:41:57 +03:00
|
|
|
interactive=
|
2021-09-23 17:51:34 +03:00
|
|
|
configuration=
|
2020-10-18 14:41:57 +03:00
|
|
|
for arg in "$@"; do
|
|
|
|
case $arg in
|
|
|
|
-i|--interactive)
|
|
|
|
interactive=1
|
|
|
|
;;
|
2021-09-23 17:51:34 +03:00
|
|
|
*)
|
|
|
|
configuration=$arg
|
2020-10-18 14:41:57 +03:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
2020-10-11 21:02:25 +03:00
|
|
|
# These commands can also be executed interactively in a shell session
|
|
|
|
demoCmds='
|
2020-02-26 19:11:23 +03: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 "Bitcoind data dir:"
|
|
|
|
sudo ls -al /var/lib/containers/demo-node/var/lib/bitcoind
|
2020-10-11 21:02:25 +03:00
|
|
|
'
|
2020-10-18 14:41:57 +03:00
|
|
|
nodeInfoCmd='
|
|
|
|
echo
|
|
|
|
echo "Node info:"
|
|
|
|
c nodeinfo
|
|
|
|
'
|
2020-10-11 21:02:25 +03:00
|
|
|
|
2021-09-23 17:51:34 +03:00
|
|
|
if [[ ! $configuration ]]; then
|
2020-10-18 14:41:57 +03:00
|
|
|
configuration=configuration.nix
|
|
|
|
demoCmds="${demoCmds}${nodeInfoCmd}"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ $interactive ]]; then
|
2021-02-05 17:39:04 +03:00
|
|
|
runCmd=()
|
2020-10-18 14:41:57 +03:00
|
|
|
else
|
|
|
|
runCmd=(--run bash -c "$demoCmds")
|
|
|
|
fi
|
2020-02-26 19:11:23 +03:00
|
|
|
|
2020-10-11 21:02:25 +03:00
|
|
|
# Build container.
|
|
|
|
# Learn more: https://github.com/erikarvstedt/extra-container
|
|
|
|
#
|
2020-10-18 14:41:57 +03:00
|
|
|
read -d '' src <<EOF || true
|
2020-10-11 21:02:25 +03:00
|
|
|
{ pkgs, lib, ... }: {
|
|
|
|
containers.demo-node = {
|
|
|
|
extra.addressPrefix = "10.250.0";
|
|
|
|
extra.enableWAN = true;
|
|
|
|
config = { pkgs, config, lib, ... }: {
|
|
|
|
imports = [
|
2021-09-23 17:51:34 +03:00
|
|
|
$(realpath "$configuration")
|
2020-10-11 21:02:25 +03:00
|
|
|
];
|
2021-03-10 16:08:34 +03:00
|
|
|
nix-bitcoin.generateSecrets = true;
|
2020-10-11 21:02:25 +03:00
|
|
|
};
|
|
|
|
};
|
|
|
|
}
|
|
|
|
EOF
|
2020-10-18 14:41:56 +03:00
|
|
|
extra-container shell -E "$src" "${runCmd[@]}"
|
2020-04-15 19:54:02 +03:00
|
|
|
|
2020-10-11 21:02:25 +03:00
|
|
|
# The container is automatically deleted at exit
|