Я пытаюсь скомпилировать v0.8.6 основного клиента из исходного кода , чтобы сравнить производительность IDB (начальная загрузка блокчейна) между версиями.
Я создал новую машину Ubuntu Xenial 16.04 на Amazon EC2. Затем я выполнил следующие команды (которых было достаточно для версии 0.9.3 и выше):
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install build-essential autoconf libboost-all-dev \
libssl-dev libtool pkg-config libevent-dev
Кроме того, для этой конкретной версии я запустил:
sudo apt-get install libdb++-dev libminiupnpc-dev
Затем я проверил исходный код и начал компиляцию:
git clone https://github.com/bitcoin/bitcoin.git
cd bitcoin
git checkout v0.8.6
cd src/
make -f makefile.unix
Меня интересует только запуск headless bitcoind
, но я не уверен, что он уже был отделен от пользовательского интерфейса в этом выпуске.
Я получаю следующую ошибку:
rpcrawtransaction.cpp:241:77: required from here
/usr/include/boost/variant/get.hpp:178:5: error: invalid application of ‘sizeof’ to incomplete type ‘boost::STATIC_ASSERTION_FAILURE<false>’
BOOST_STATIC_ASSERT_MSG(
^
makefile.unix:172: recipe for target 'obj/rpcrawtransaction.o' failed
make: *** [obj/rpcrawtransaction.o] Error 1
Интересно, что версии 0.7, 0.6 и 0.5 успешно компилируются, хотя они зависают во время IDB, так что, возможно, компиляция просто не удалась. Позже сделаю для них отдельный пост.
Я подозреваю, что мне нужно установить некоторые очень специфические версии зависимостей, но я не уверен, какие и как это сделать. Я не использовал Linux в течение многих лет.
У меня все еще есть виртуальная машина, поэтому я могу предоставить более подробную информацию, если это необходимо.
Я открыт для альтернативных подходов, даже с использованием виртуальной машины Windows :-)
Вы можете использовать систему сборки gitian. Инструкции по сборке 0.8.x с помощью gitian доступны здесь: https://github.com/bitcoin/bitcoin/tree/0.8/contrib/gitian-descriptors и здесь: https://github.com/bitcoin/bitcoin/blob/ 0.8/doc/релиз-процесс.md . Использование gitian должно дать вам точно такие же двоичные файлы, как те, которые были выпущены.
sudo /usr/sbin/kvm-ok INFO: Your CPU does not support KVM extensions KVM acceleration can NOT be used
похоже, мне придется использовать что-то необычное, например Ravello , или я что-то упускаю?make-base-vm
команды с --lxc
опцией.Ник ODell указал мне на решение :
Отредактируйте rpcrawtransaction.cpp
и измените:
const CScriptID& hash = boost::get<const CScriptID&>(address);
К:
const CScriptID& hash = boost::get<CScriptID>(address);
Этого было достаточно, чтобы заставить его скомпилироваться.
Кроме того, я применил патч OpenSSL , указанный Питером Вуйлем .
Вы должны сделать это вручную, потому что depends/packages/openssl.mk
больше не существует, а имя и подпись функции изменились. Просто откройте src/key.cpp
и замените все внутри CKey::Verify
функциональных скобок этой новой версией .
На данный момент синхронизировано более 210 000 блоков, поэтому я предполагаю, что это сработало.
Ник Оделл
Сьорс Провост
libboost-all-dev
версия 1.58.0. Я мог бы сначала попробовать gitian подход.Питер Уилле
Сьорс Провост
Питер Уилле
Сьорс Провост
LeanMan
LeanMan