Дело было вечером, делать было нечего.
В заметке Вы найдёте практическое руководство по запуску двух демонов (core+abc) на одной ноде.
Все операции проведены на DigitalOcean. Создан дроплет Debian 9 на 6 ядер и 16 гигов, к нему прицепил внешний 1ТБ диск. В теории всё ниже совместимо с любыми debian-based системами.
Разделять разные демоны будем с помощью LXC.
Докер решил не использовать, по двум объективным причинам:
- Это не stateless приложения.
- У блокчейнов хватает и своих проблем, не хватало болезни слоёв от докера.
Заводим LXC
Установка
apt-get update -q
apt-get install -yq lxc
Заводим сеть:
cat << EOF > /etc/default/lxc-net
USE_LXC_BRIDGE="true"
LXC_BRIDGE="br0"
LXC_ADDR="10.0.3.1"
LXC_NETMASK="255.255.255.0"
LXC_NETWORK="10.0.3.0/24"
LXC_DHCP_RANGE="10.0.3.2,10.0.3.254"
LXC_DHCP_MAX="253"
LXC_DHCP_CONFILE=""
LXC_DOMAIN=""
EOF
systemctl enable lxc-net
systemctl start lxc-net
Пишем дефолтные настройки для контейнера
cat << EOF > /etc/lxc/default.conf
lxc.network.type = veth
lxc.network.link = br0
lxc.network.name = eth0
lxc.network.flags = up
lxc.network.hwaddr = 00:FF:AA:FF:xx:xx
EOF
Для внешних дисков
Если у вас, как и в моём случае, место не на корневом диске, а где-то в /mnt/
— прошу заменить путь маунта.
cat << EOF >> /etc/lxc/default.conf
lxc.mount.entry = /mnt/volume_fra1_01/bitcoin-core/ var/lib/bitcoin-core/ none bind,create=dir 0 0
lxc.mount.entry = /mnt/volume_fra1_01/bitcoin-cash/ var/lib/bitcoin-cash/ none bind,create=dir 0 0
EOF
mkdir -p /mnt/volume_fra1_01/bitcoin-{core,cash}
Создаём контейнеры
Первый контейнер будет создаваться долго, т.к. ОСь контейнера будет debootstrap
-ится с зеркал. Крайне советую запускать команды в screen
-е, если присутствуют проблемы с сетью или сессиями ssh-а.
cat << EOF | bash
set -e
lxc-create -t debian -n bitcoin-core
lxc-start -n bitcoin-core
lxc-create -t debian -n bitcoin-cash
lxc-start -n bitcoin-cash
EOF
Дисклэймер
Люблю я собирать .deb пакеты, посему и всё счастье запихнул в них. Тут они по своей сути не нужны, кроме как для удобных обновлений.
Устанавливаем православный bitcoin core
Если заводите в РФ — проверьте доступность bitcoin.org до выполнения следующей простыни. Восславим РКН за это!
Прошу заметить, что команда выполняется на хост-машине, перенаправляется в контейнер через пайп на первой строчке.
Команды прокомментировал.
cat << EOF | lxc-attach -n bitcoin-core -- bash
# падать на любой ошибке
set -e
# ставим зависимости
apt-get update -q
apt-get install -yq wget tar
# выкачиваем и распаковываем бинари
wget https://bitcoin.org/bin/bitcoin-core-0.16.1/bitcoin-0.16.1-x86_64-linux-gnu.tar.gz
tar xzvf bitcoin-0.16.1-x86_64-linux-gnu.tar.gz
cd bitcoin-0.16.1
# создаём нужные папки для .deb пакета
mkdir -p DEBIAN var/lib/bitcoin-core/
# пишем файлик конфигурации для dpkg
echo "Package: bitcoin-core
Version: 0.16.1
Section: misc
Architecture: amd64
Depends: bash
Maintainer: root <root@localhost.tld>
Description: Bitcoin core 0.16.1" > DEBIAN/control
# Создаём systemd сервис
echo "[Unit]
Description=Bitcoin daemon service (core)
[Service]
Type=forking
Restart=always
ExecStart=/bin/bitcoind -datadir=/var/lib/bitcoin-core/ -discover -daemon -server -rpcuser=test -rpcpassword=test -rpcport=8332 -rpcallowip=0.0.0.0/0 -printtoconsole -logips
[Install]
WantedBy=multi-user.target" > /etc/systemd/system/bitcoind.service
cd ..
# собираем и устанавливаем пакет
dpkg -b bitcoin-0.16.1
dpkg -i bitcoin-0.16.1.deb
# запускаем сервис, включаем в автозагрузку
systemctl start bitcoind.service
systemctl enable bitcoind.service
systemctl status bitcoind.service
EOF
Заводим модный bitcoin cash
Полная аналогия предыдущего. Заменены версии, имена, урлы.
cat << EOF | lxc-attach -n bitcoin-cash -- bash
set -e
apt-get update -q
apt-get install -yq wget tar
wget https://download.bitcoinabc.org/0.17.2/linux/bitcoin-abc-0.17.2-x86_64-linux-gnu.tar.gz
tar xzvf bitcoin-abc-0.17.2-x86_64-linux-gnu.tar.gz
cd bitcoin-abc-0.17.2
mkdir -p DEBIAN var/lib/bitcoin-cash/
echo "Package: bitcoin-abc
Version: 0.17.2
Section: misc
Architecture: amd64
Depends: bash
Maintainer: root <root@localhost.tld>
Description: Bitcoin abc 0.17.2" > DEBIAN/control
echo "[Unit]
Description=Bitcoin daemon service (abc)
[Service]
Type=forking
Restart=always
ExecStart=/bin/bitcoind -datadir=/var/lib/bitcoin-cash/ -discover -daemon -server -rpcuser=test -rpcpassword=test -rpcport=8332 -rpcallowip=0.0.0.0/0 -printtoconsole -logips
[Install]
WantedBy=multi-user.target" > /etc/systemd/system/bitcoind.service
cd ..
dpkg -b bitcoin-abc-0.17.2
dpkg -i bitcoin-abc-0.17.2.deb
systemctl start bitcoind.service
systemctl enable bitcoind.service
systemctl status bitcoind.service
EOF
Утилиты
Для удобного доступа к cli с хост машины.
cat << EOF >> ~/.bashrc
lxc-restart () {
lxc-stop -n ${1};
lxc-start -n ${1};
}
alias bitcoin-cash-cli='lxc-attach -n bitcoin-cash -- bitcoin-cli -rpcuser=test -rpcpassword=test'
alias bitcoin-core-cli='lxc-attach -n bitcoin-core -- bitcoin-cli -rpcuser=test -rpcpassword=test'
EOF
. ~/.bashrc
Теперь можно пользоватся cli вот так:
bitcoin-cash-cli getmininginfo
bitcoin-core-cli getmininginfo
Посмотреть, сколько скушали диска:
- Для внешних маунтов:
du -sh /mnt/volume_fra1_01/bitcoin*
- Без них:
du -sh /var/lib/lxc/bitcoin*/rootfs/var/lib/bitcoin*
Вывод:
3.7G /mnt/volume_fra1_01/bitcoin-cash
66G /mnt/volume_fra1_01/bitcoin-core
Дальнейшие действия
- Подождите минут 5.
- Проверьте размеры блокчейнов.
- Проверьте выводы cli с
getmininginfo
.
Если вы поймали баг, что блокчейны не хотят синхронизироватся
Перезапустим конейнеры
lxc-restart bitcoin-cash
lxc-restart bitcoin-core
Ждём 5 минут, проверяем блокчейны. Время расчитано из 50мбс+ линка, и проца выше i3.
Надоело, хочу избавится.
Убить всё это можно легко, просто, без следов в системе.
lxc-stop -t 1 -n bitcoin-core
lxc-destroy -n bitcoin-core
lxc-stop -t 1 -n bitcoin-cash
lxc-destroy -n bitcoin-cash
rm /etc/default/lxc-net
apt-get purge lxc -yq
apt-get autoremove -yq
Автор: человек со стажем