Как установить полный узел биткоина на Linux — подробное руководство

Блогер StopAndDecrypt рассказывает, как установить Kubuntu 18.04 вместе с полной нодой (полным узлом) биткоина без какого-либо опыта работы с Linux. Оригинал поста опубликован на Hackernoon. Предлагаем вам перевод.

Предисловие

Недавно я поставил новый SSD (поэтому мне не пришлось обрезать ноду на моём ноутбуке) и подумал, что могу заодно написать инструкцию.

Никогда не пользовались Linux? Не знаете, что значит «обрезать ноду»? Отлично. Эта статья для вас. Я хочу, чтобы вы переключились на Linux, а биткоин мотивировал бы вас это сделать. Это и руководство по Linux для чайников, и руководство по настройке ноды биткоина. Если вы не хотите читать всю эту кучу текста, можете просто скопировать команды в самом низу.

Я предполагаю, что вы знаете, как загрузить и смонтировать ISO-образ. Я не буду вносить никаких изменений в конфигурацию установки по умолчанию, за исключением шифрования всего диска, а также импорта настроек рабочего стола и темы. Я не буду устанавливать что-либо ещё, кроме ноды биткоина.

Часть 1. Настройка

Пропустите этот раздел полностью, если вы уже на Linux.

Загрузите ISO Kubuntu

Kubuntu — это Ubuntu, только покрасивее. Самый последний LTS — 18.04.

Установите ISO на USB или CD

Следуйте официальному руководству Ubuntu для Windows или macOS.

Установка ОС

Настройте имя компьютера, пользователя и пароль. Моим именем в этой инструкции будет satoshi, а именем компьютера — nakamoto. После установки и входа в систему ваш рабочий стол должен выглядеть так:

Освойтесь, перейдите в приложения и запустите эмулятор терминала (Konsole). Большую часть времени мы будем работать в этом единственном окне, но сначала откроем диспетчер файлов (Dolphin), а также импортируем настройки темы и рабочего стола.

Прежде чем мы войдём в терминал, давайте разберёмся с тем, что мы уже видим. В верхней части окна терминала отображается Konsole. Это просто название программного обеспечения, характерное для данной среды рабочего стола (другие названия — Terminal, Command Line и др.). Как Satoshi (имя пользователя) Nakamoto (имя компьютера) вы будете отображаться в любой сети, к которой cможете подключиться.

Между «:» и «$» вы увидите «~». Это аббревиатура для вашей домашней директории /home/ <username>. / home /<username> похожа на «Мои документы» в Windows.

satoshi@nakamoto:~$

satoshi@nakamoto:/home/satoshi$

Часть 2. Подготовка

Скопируйте команды из раздела или из конца статьи, если вы уже на Linux.

В первую очередь мы проверим наличие обновлений в терминале. Введите следующую команду и нажмите Enter (по пути вам будет предложено ввести «y» для «yes» и ваш пароль):

satoshi@nakamoto: ~ $ sudo apt-get update

sudo иногда называют суперпользователем (superuser do). Команда похожа на «запуск от имени администратора» в Windows. Она необходима потому, что следующие команды будут требовать уровня доступа суперпользователя.

apt-get позволяет вам взаимодействовать с доступными библиотеками программного обеспечения, чтобы вы могли скачать ПО прямо с терминала.

update — одна из нескольких команд, которые должны следовать за apt-get. Она проверяет наличие обновлений для любых установленных вами пакетов.

Затем мы установим Git. Это широко используемое программное обеспечение с открытым кодом, предназначенное для работы с другими проектами с открытым (и закрытым) кодом. Мы будем использовать Git для доступа к репозиторию биткоина и для загрузки его кода.

satoshi@nakamoto: ~$ sudo apt-get install git

Команда install должно быть понятной; это как update, но для первой установки конкретного пакета. Для этого требуется имя пакета.

git — это имя пакета Git, он признаётся одним из источников (source), к которым обращается команда apt-get. После установки также будет работать как команда.

Теперь мы создадим папку в нашей домашней директории и перейдём к этой директории, чтобы скопировать нужные нам файлы. Мы можем копировать это в любую нужную нам папку (просто я выбрал именно такой путь). Сначала введите следующую строку:

satoshi@nakamoto: ~$ mkdir p bitcoin-source && cd bitcoin-source

Это должно выглядеть так:

satoshi@nakamoto:/home/satoshi/bitcoin-source$

mkdir создаёт директорию. Это похоже на щелчок правой кнопкой мыши на рабочем столе и выбор «создать > папку».

-p — это флаг. Флаги являются параметрами командной строки и начинаются с . Каждая команда (например, mkdir) имеет свой собственный набор параметров, поэтому -p может сделать что-то ещё для другой команды. В этом случае -p  переопределяет некоторые ошибки, которые могут возникнуть при попытке создать директорию. Если вы хотите создать директорию /test1/abc123 /haha без -p, система подумает, что вы просто хотите создать /haha, и вы получите сообщение об ошибке, которая говорит, что /test1 и /abc123 не существуют. С -p эта ошибка игнорируется, и создаются обе родительские директории, которые «не существуют».

bitcoin-source — это лишь имя директории/папки, которую мы собираемся создать.

&& позволяет выполнить вторую команду в той же строке при условии, что первая не дала сбой или ошибку.

cd изменит текущую директорию на ту, которую вы укажете. В этом случае она изменится на директорию /bitcoin-source, которую мы только что создали.

Затем введите:

$ git clone https://github.com/bitcoin/bitcoin.git

git clone скопирует репозиторий биткоина из Github.com в директорию, в которой вы находились, когда вводили команду. Поскольку вы были в ~/bitcoin-source, команда создаст каталог ~/bitcoin-source/bitcoin и разместит там все необходимые файлы.

Вы можете проверить установку файлов с помощью команды ls или перейти к этой директории в диспетчере файлов.

$ ls bitcoin

ls выведет все открытые папки в директории, в которой вы находитесь.

ls bitcoin будет искать папку /bitcoin в директории (в которой вы находитесь), а затем выводить все открытые папки в этой директории.

ls -a выведет все папки, включая скрытые папки (если они существуют). Скрытые папки начинаются с . и выглядят так: /home/satoshi/.abc123

Перейдите в эту папку. Вы увидите, как создаются файлы, когда мы запускаем другие команды.

Теперь нам нужно установить несколько библиотек вместе с Berkeley Database. В этом руководстве я разделил их на группы согласно документации по сборке в Github для Ubuntu, поскольку я пытался объединить их раньше и получил ошибки. Библиотеки:

$ sudo apt-get install build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils python3

$ sudo apt-get install libboost-all-dev

Эта команда будет загружать и верифицировать Berkeley Database:

$ wget http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz

$ echo '12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef  db-4.8.30.NC.tar.gz' | sha256sum -c

После ввода команды echo вы должны получить ответ:

db-4.8.30.NC.tar.gz: O`K

Следующие команды извлекут (tar -xvf) Berkley Database, которую мы только что загрузили и установили. Она также установит ярлык пути, так что только BDB_PREFIX нужно ввести при ссылке на зависимость. Обычно, когда вы вводите команду, если вы уже на середине пути, вам нужно только ссылаться на оставшийся путь. Но, когда вы компилируете, следует указать весь путь:

$ tar -xvf db-4.8.30.NC.tar.gz
$ cd db-4.8.30.NC/build_unix
$ mkdir -p build
$ BDB_PREFIX = $ (pwd) / build
$ ../dist/configure --disable-shared --enable-cxx --with-pic --prefix = $ BDB_PREFIX
$ sudo make install
$ cd ../ ..

Больше библиотек:

$ sudo apt-get install libminiupnpc-dev

$ sudo apt-get install libzmq3-dev

$ sudo apt-get install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler

$ sudo apt-get install libqrencode-dev

Этим и завершается подготовка. Теперь начинаем устанавливать биткоин.

Часть 3. Компиляция Bitcoin Core 0.16.0

Мы находимся в /home/satoshi/bitcoin-source, поэтому давайте перейдём в директорию /bitcoin, скомпилируем и установим:

$ cd bitcoin
$ git checkout tags/v0.16.0
$ ./autogen.sh
$ ./configure CPPFLAGS="-I${BDB_PREFIX}/include/ -O2" LDFLAGS="-L${BDB_PREFIX}/lib/" --with-gui
$ make
$ sudo make install

git checkout tags/v0.16.0 отсылают на конкретный сommit из истории git. «Ветви» могут изменяться по мере обновления, поэтому ссылка на ветку может привести к тому, что команда не будет работать в будущем.

./autgen.sh просто приготовит файлы для установки.

Часть 4. Настройка вашей новой ноды и ознакомление с ней

Большая часть этого раздела не требует запуска программного обеспечения. В будущем вы, скорее всего, просто запустите его в фоновом режиме. Опять же, это просто поможет вам понять, что происходит «за кулисами».

Первое, что вам нужно сделать, прежде чем запустить биткоин в первый раз, — это создать несколько окон. Сначала мы запустим версию GUI, называемую bitcoin-qt, затем мы выйдем из неё и запустим версию без GUI, названную bitcoind, а потом вернёмся к bitcoin-qt с некоторыми действиями и конфигурациями между ними, чтобы вы могли понять, как это работает.

Закройте все открытые окна и откройте два новых окна терминала и диспетчер файлов. В диспетчере файлов перейдите в /home/satoshi/. Вам нужно нажать Home на боковой панели. Затем в строке меню в верхней части выберите Control и установите флажок Hidden Files. В одном из окон терминала введите следующее:

$ mkdir ~/.bitcoin
$ cd ~/.bitcoin

Теперь вы должны увидеть папку с именем .bitcoin в диспетчере файлов. Перейдите в эту папку.

Создадим файл debug.log. Когда вы впервые запускаете биткоин, файл debug.log создаётся автоматически, но вы поймёте, почему я хочу сделать это раньше:

$ touch ~/.bitcoin/debug.log

Теперь мы запустим файл debug.log. Файлы регистрации (логи) постоянно обновляются с новыми строками информации, так как программа ведёт журналирование своих действий. Команда tail показывает вам последние записи в этом файле, но только один раз. Использование флага -f даст вам непрерывный поток этих обновлений. Когда вы введёте следующую команду, вы ничего не увидите, потому что биткоин ещё не запущен, но мы оставим его так:

$ tail -f ~/.bitcoin/debug.log

В другом открывшемся окне терминала запустите биткоин, введя следующее:

$ bitcoin-qt

Вы увидите изображение загрузки, а затем — графический интерфейс с сообщением о состоянии синхронизации. Вы начнёте видеть активность в терминале, где привязали файл debug.log. Всё вышесказанное должно выглядеть так:

Вы можете наблюдать это очень долго, потому что для синхронизации потребуется много времени. В окне терминала вы можете ввести bitcoin-qt и нажать CONTROL + C. Вы увидите, что GUI закроется, и логи в журналах остановятся. Вы можете читать сообщения о выходе в логах, прокручивая вверх, и изучать все произошедшие события. Теперь в том же терминале запустите bitcoin-qt и введите следующее:

$ bitcoind

Вы должны увидеть log tail снова. Биткоин работает в фоновом режиме. Ещё раз нажмите CONTROL + C и дайте ему остановиться.

Нам нужно создать файл конфигурации, поэтому в файловом проводнике создайте файл bitcoin.conf. Откройте его, введите следующее и сохраните файл:

debug=net

По умолчанию не все данные включены в журналирование. Установка 1 позволит включать все данные, но их слишком много и информация будет пролетать стремительно. Вы можете установить следующие параметры: net, tor, mempool, http, bench, zmq, db, rpc, valufee, addrman, selectcoins, reindex, cmpctblock, rand, prune, proxy, mempoolrej, libevent, coindb, qt, leveldb.

Кроме того, вы можете настроить узел, чтобы обрезать (prune) блокчейн по мере его заполнения. Сейчас весь блокчейн весит около 160 Гб. Если у вас недостаточно места для хранения, вы можете сократить данные до 5 Гб (на данный момент). Я не рекомендую этого делать без необходимости, но вы можете обрезать блокчейн до 10 Гб следующей командой:

debug=net
prune=10000

В вашем конфигурационном файле может быть множество параметров, и неважно, в каком порядке они находятся. Он может выглядеть так, если вы, например, хотите ограничить свои мемпул-узлы транзакциями на 100 Мб:

maxmempool=100
prune=10000
debug=net

Откройте третий терминал и введите следующее:

$ tail -f ~ / .bitcoin / debug.log | grep "UpdateTip:"

grep — это команда, которая имеет несколько функций, но в этом контексте она будет выводить информацию из первой команды и фильтровать её, чтобы отображались только строки, содержащие указанный внутри кавычек текст.

В другом терминале введите следующее:

$ tail -f ~/.bitcoin/debug.log | grep -v "UpdateTip:\|Requesting block\|sending getdata\|recieved block\|received: block"

Это та же команда, но с флагом -v, она будет делать противоположное предыдущей команде и отбрасывать любую строку с указанным нами текстом.

Итак, теперь мы можем отфильтровывать некоторую информацию, чтобы данные обновлялись не так быстро. Не стесняйтесь играть с настройками, исключая лишнее и добавляя нужное именно вам.

Вот и всё! В зависимости от вашего оборудования / пропускной способности сети этот процесс может занять от нескольких часов до нескольких недель (последнее маловероятно).

Когда блокчейн будет окончательно синхронизирован, блоки станут добавляться в среднем каждые 10 минут, а debug.log начнёт показывать гораздо больше активности.

Часть 0. Для тех, кому просто нужны команды:

sudo apt-get update;
sudo apt-get install git;
mkdir -p bitcoin-source && cd bitcoin-source
git clone https://github.com/bitcoin/bitcoin.git;
sudo apt-get install build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils python3;
sudo apt-get install libboost-all-dev;
wget http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz;
echo '12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef  db-4.8.30.NC.tar.gz' | sha256sum -c;
tar -xvf db-4.8.30.NC.tar.gz;
cd db-4.8.30.NC/build_unix;
mkdir -p build;
BDB_PREFIX=$(pwd)/build;
../dist/configure --disable-shared --enable-cxx --with-pic --prefix=$BDB_PREFIX;
sudo make install;
cd ../..;
sudo apt-get install libminiupnpc-dev;
sudo apt-get install libzmq3-dev;
sudo apt-get install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler;
sudo apt-get install libqrencode-dev;
cd bitcoin;
git checkout tags/v0.16.0;
./autogen.sh;
./configure CPPFLAGS="-I${BDB_PREFIX}/include/ -O2" LDFLAGS="-L${BDB_PREFIX}/lib/" --with-gui;
make;
sudo make install;bitcoin-qt