ord 0.27.1

◉ Ordinal wallet and block explorer
Documentation
#!/usr/bin/env bash

# This script is idempotent.

set -euxo pipefail

CHAIN=$1
DOMAIN=$2
BRANCH=$3
COMMIT=$4
REVISION="ord-$BRANCH-$COMMIT"

export DEBIAN_FRONTEND=noninteractive

touch ~/.hushlogin

hostnamectl set-hostname $DOMAIN

apt-get install --yes \
  acl \
  clang \
  curl \
  libsqlite3-dev\
  libssl-dev \
  locales-all \
  pkg-config \
  ufw \
  vim

apt-get remove --yes --auto-remove

ufw default allow outgoing
ufw default deny incoming

ufw allow 8080
ufw allow http
ufw allow https
ufw allow ssh

case $CHAIN in
  main)
    COOKIE_FILE_DIR=/var/lib/bitcoind
    CSP_ORIGIN=ordinals.com
    ufw allow 8333
    ;;
  regtest)
    COOKIE_FILE_DIR=/var/lib/bitcoind/regtest
    CSP_ORIGIN=regtest.ordinals.com
    ufw allow 18444
    ;;
  signet)
    COOKIE_FILE_DIR=/var/lib/bitcoind/signet
    CSP_ORIGIN=signet.ordinals.com
    ufw allow 38333
    ;;
  test)
    COOKIE_FILE_DIR=/var/lib/bitcoind/testnet3
    CSP_ORIGIN=testnet.ordinals.com
    ufw allow 18333
    ;;
  testnet4)
    COOKIE_FILE_DIR=/var/lib/bitcoind/testnet4
    CSP_ORIGIN=testnet4.ordinals.com
    ufw allow 48333
    ;;
  *)
    echo "Unknown chain: $CHAIN"
    exit 1
    ;;
esac

mkdir -p \
  /etc/systemd/system/bitcoind.service.d \
  /etc/systemd/system/ord.service.d

OVERRIDE=/etc/systemd/system/ord.service.d/override.conf

echo '[Service]' > $OVERRIDE
echo "Environment=CHAIN=$CHAIN" >> $OVERRIDE
echo "Environment=CSP_ORIGIN=$CSP_ORIGIN" >> $OVERRIDE

if [[ $CHAIN == main && $DOMAIN != charlie.ordinals.net ]]; then
  echo Environment=ORD_SERVER_DISABLE_JSON_API=true >> $OVERRIDE
fi

cp $OVERRIDE /etc/systemd/system/bitcoind.service.d/override.conf

sed -i -E 's/#?PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
sshd -t
systemctl restart sshd

ufw --force enable

version=30.0
if ! bitcoind --version | grep $version; then
  wget \
    -O bitcoin.tar.gz \
    https://bitcoincore.org/bin/bitcoin-core-$version/bitcoin-$version-x86_64-linux-gnu.tar.gz

  tar \
    -xzvf bitcoin.tar.gz \
    -C /usr/local/bin \
    --strip-components 2 \
    bitcoin-$version/bin/{bitcoin-cli,bitcoind}

  bitcoind --version
fi

rm -f /var/lib/bitcoind/settings.json

if [[ ! -e ~/.cargo/env ]]; then
  curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
fi

source ~/.cargo/env

rustup update stable

cargo build --release
install --backup target/release/ord /usr/local/bin/ord

id --user bitcoin || useradd --system bitcoin
id --user ord || useradd --system ord

cp deploy/bitcoind.service /etc/systemd/system/

mkdir -p /etc/bitcoin
cp deploy/bitcoin.conf /etc/bitcoin/bitcoin.conf

if [[ ! -e ~/.bitcoin/bitcoin.conf ]]; then
  mkdir -p ~/.bitcoin
  ln -s /etc/bitcoin/bitcoin.conf ~/.bitcoin/bitcoin.conf
fi

systemctl daemon-reload
systemctl enable bitcoind
systemctl restart bitcoind

while [[ ! -f $COOKIE_FILE_DIR/.cookie ]]; do
  echo "Waiting for bitcoind…"
  sleep 1
done

setfacl -m ord:x /var/lib/bitcoind
setfacl -m ord:x $COOKIE_FILE_DIR
setfacl -dm ord:r $COOKIE_FILE_DIR
setfacl -m ord:r $COOKIE_FILE_DIR/.cookie

journalctl --unit ord --vacuum-time 1s

cp deploy/ord.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable ord
systemctl restart ord

while ! curl --fail https://$DOMAIN/status > /dev/null; do
  echo "Waiting for ord at https://$DOMAIN/status…"
  sleep 1
done