Jump to content
Sign in to follow this  
SanDocan88

Сборка bitcoid под Linux

Recommended Posts

Пытаюсь собрать bitcoind из сходников под Linux. Делаю согласно https://forum.bits.media/index.php?/blog/1/entry-19-sborka-bitcoind-iz-iskhodnikov/. После установки зависимостей начинанаю собирать сам bitcoind. Процесс сборки прекращается после строк :

g++ -O2 -pthread -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -g -DBOOST_SPIRIT_THREADSAFE -D_FILE_OFFSET_BITS=64 -I/home/testuser/btc/bitcoin-0.8.6/src -I/home/testuser/btc/bitcoin-0.8.6/src/obj -DUSE_IPV6=1 -I/home/testuser/btc/bitcoin-0.8.6/src/leveldb/include -I/home/testuser/btc/bitcoin-0.8.6/src/leveldb/helpers -DHAVE_BUILD_INFO -fno-stack-protector -fstack-protector-all -Wstack-protector -D_FORTIFY_SOURCE=2  -o bitcoind leveldb/libleveldb.a obj/alert.o obj/version.o obj/checkpoints.o obj/netbase.o obj/addrman.o obj/crypter.o obj/key.o obj/db.o obj/init.o obj/keystore.o obj/main.o obj/net.o obj/protocol.o obj/bitcoinrpc.o obj/rpcdump.o obj/rpcnet.o obj/rpcmining.o obj/rpcwallet.o obj/rpcblockchain.o obj/rpcrawtransaction.o obj/script.o obj/sync.o obj/util.o obj/wallet.o obj/walletdb.o obj/hash.o obj/bloom.o obj/noui.o obj/leveldb.o obj/txdb.o -Wl,-z,relro -Wl,-z,now   -Wl,-Bdynamic -l boost_system -l boost_filesystem -l boost_program_options -l boost_thread -l db_cxx -l ssl -l crypto -Wl,-Bdynamic -l z -l dl -l pthread /home/testuser/btc/bitcoin-0.8.6/src/leveldb/libleveldb.a /home/testuser/btc/bitcoin-0.8.6/src/leveldb/libmemenv.a

 

В качестве системы для компиляции использовал

Linux 3.2.0-4-amd64 Debian 7.4. На  и Debian 6.0.9 то же самое.

Может кто сталкивался. Помогите пожалуйста

 

Share this post


Link to post
Share on other sites

Пытаюсь собрать bitcoind из сходников под Linux. Делаю согласно https://forum.bits.media/index.php?/blog/1/entry-19-sborka-bitcoind-iz-iskhodnikov/. После установки зависимостей начинанаю собирать сам bitcoind. Процесс сборки прекращается после строк :

g++ -O2 -pthread -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -g -DBOOST_SPIRIT_THREADSAFE -D_FILE_OFFSET_BITS=64 -I/home/testuser/btc/bitcoin-0.8.6/src -I/home/testuser/btc/bitcoin-0.8.6/src/obj -DUSE_IPV6=1 -I/home/testuser/btc/bitcoin-0.8.6/src/leveldb/include -I/home/testuser/btc/bitcoin-0.8.6/src/leveldb/helpers -DHAVE_BUILD_INFO -fno-stack-protector -fstack-protector-all -Wstack-protector -D_FORTIFY_SOURCE=2  -o bitcoind leveldb/libleveldb.a obj/alert.o obj/version.o obj/checkpoints.o obj/netbase.o obj/addrman.o obj/crypter.o obj/key.o obj/db.o obj/init.o obj/keystore.o obj/main.o obj/net.o obj/protocol.o obj/bitcoinrpc.o obj/rpcdump.o obj/rpcnet.o obj/rpcmining.o obj/rpcwallet.o obj/rpcblockchain.o obj/rpcrawtransaction.o obj/script.o obj/sync.o obj/util.o obj/wallet.o obj/walletdb.o obj/hash.o obj/bloom.o obj/noui.o obj/leveldb.o obj/txdb.o -Wl,-z,relro -Wl,-z,now   -Wl,-Bdynamic -l boost_system -l boost_filesystem -l boost_program_options -l boost_thread -l db_cxx -l ssl -l crypto -Wl,-Bdynamic -l z -l dl -l pthread /home/testuser/btc/bitcoin-0.8.6/src/leveldb/libleveldb.a /home/testuser/btc/bitcoin-0.8.6/src/leveldb/libmemenv.a

 

В качестве системы для компиляции использовал

Linux 3.2.0-4-amd64 Debian 7.4. На  и Debian 6.0.9 то же самое.

Может кто сталкивался. Помогите пожалуйста

Как именно прекращается? ошибкой? или просто прекращается и  командное окно готово к приему новых команд?

Share this post


Link to post
Share on other sites

 

 

биткоинТ, bitcoinD, что дальше?

аааа. Не знаешь, не комментируй.

bitcoinэто демон биткоина. На серверах ставится именно он

Share this post


Link to post
Share on other sites

 

Пытаюсь собрать bitcoind из сходников под Linux. Делаю согласно https://forum.bits.media/index.php?/blog/1/entry-19-sborka-bitcoind-iz-iskhodnikov/. После установки зависимостей начинанаю собирать сам bitcoind. Процесс сборки прекращается после строк :

g++ -O2 -pthread -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -g -DBOOST_SPIRIT_THREADSAFE -D_FILE_OFFSET_BITS=64 -I/home/testuser/btc/bitcoin-0.8.6/src -I/home/testuser/btc/bitcoin-0.8.6/src/obj -DUSE_IPV6=1 -I/home/testuser/btc/bitcoin-0.8.6/src/leveldb/include -I/home/testuser/btc/bitcoin-0.8.6/src/leveldb/helpers -DHAVE_BUILD_INFO -fno-stack-protector -fstack-protector-all -Wstack-protector -D_FORTIFY_SOURCE=2  -o bitcoind leveldb/libleveldb.a obj/alert.o obj/version.o obj/checkpoints.o obj/netbase.o obj/addrman.o obj/crypter.o obj/key.o obj/db.o obj/init.o obj/keystore.o obj/main.o obj/net.o obj/protocol.o obj/bitcoinrpc.o obj/rpcdump.o obj/rpcnet.o obj/rpcmining.o obj/rpcwallet.o obj/rpcblockchain.o obj/rpcrawtransaction.o obj/script.o obj/sync.o obj/util.o obj/wallet.o obj/walletdb.o obj/hash.o obj/bloom.o obj/noui.o obj/leveldb.o obj/txdb.o -Wl,-z,relro -Wl,-z,now   -Wl,-Bdynamic -l boost_system -l boost_filesystem -l boost_program_options -l boost_thread -l db_cxx -l ssl -l crypto -Wl,-Bdynamic -l z -l dl -l pthread /home/testuser/btc/bitcoin-0.8.6/src/leveldb/libleveldb.a /home/testuser/btc/bitcoin-0.8.6/src/leveldb/libmemenv.a

 

В качестве системы для компиляции использовал

Linux 3.2.0-4-amd64 Debian 7.4. На  и Debian 6.0.9 то же самое.

Может кто сталкивался. Помогите пожалуйста

Как именно прекращается? ошибкой? или просто прекращается и  командное окно готово к приему новых команд?

 

да. выдаёт именно командное окно, готовое к приёму новых команд.

на первых этапах ещё были строчки после текста:

/usr/bin/ld: cannot find -lboost_system

/usr/bin/ld: cannot find -lboost_filesystem

/usr/bin/ld: cannot find -lboost_program_options

/usr/bin/ld: cannot find -lboost_thread

collect2: error: ld returned 1 exit status

make: *** [bitcoind] Ошибка 1

Share this post


Link to post
Share on other sites

В качестве системы для компиляции использовал

Linux 3.2.0-4-amd64 Debian 7.4. На  и Debian 6.0.9 то же самое.

Может кто сталкивался. Помогите пожалуйста

 

А чего такое древнее? Собрал на Ubuntu 13.10 под amd64, не без затыков конечно (оно поросшую мхом BDB 4.8 захотело). Инструкцию по сборке традиционно не читал.  :rolleyes:

$ sudo aptitude install libdb++-dev libboost1.53-all-dev
$ ./autogen.sh
$ ./configure --with-incompatible-bdb
$ make
$ sudo make install

Получился Bitcoin RPC client version v0.9.0.0-g7f080fb-beta и Bitcoin Core Daemon version v0.9.0.0-g7f080fb-beta

 

воркает. ;)

 

 

 

/usr/bin/ld: cannot find -lboost_system

 

Эмм.. Ну оно внятно Вам нам написало /usr/bin/ld: cannot find -lboost_system - не может найти libboost, поставьте её наконец.

Edited by ggss

Share this post


Link to post
Share on other sites

Ясно. Я собирал пулл MPOS, и там на одном из этапов сборки - установка litecoind (ну или другого демона, зависит от криптовалюты). Можете посмотреть вот тут. Надо поставить пакет библиотек

sudo apt-get install gitsudo apt-get install build-essential libboost-all-dev libcurl4-openssl-dev libdb5.1-dev libdb5.1++-dev
Edited by pendalf2008

Share this post


Link to post
Share on other sites

Я бы сказал

 

sudo apt-get install git sudo apt-get install build-essential libboost-all-dev libcurl4-openssl-dev libdb5.1-dev libdb5.1++-dev

 

 Я бы сказал так:

sudo apt-get install gitsudo apt-get install build-essential libboost1.53-all-dev libcurl4-openssl-dev libdb5.1-dev libdb5.1++-dev
Edited by mylem

Share this post


Link to post
Share on other sites

С дебиан у меня тоже были проблемы, попробуй поставить на ubuntu, туда ставится нормально.

Share this post


Link to post
Share on other sites

народ а если собрать на виртуалке и запустить как на виртуалке так и на основной оси 2 демона

 

они будут взаимодействовать между собой?

Share this post


Link to post
Share on other sites

 

 

народ а если собрать на виртуалке и запустить как на виртуалке так и на основной оси 2 демона они будут взаимодействовать между собой?

Что ты подразумеваешь по взаимодействием?

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

Share this post


Link to post
Share on other sites

@BearA,я имею ввиду локальное взаимодействия без внешнего мира

скажем есть на основнойм компе нода со всеми блоками

далее отключаем выход в интернет

и запускаем на виртуалке вторую ноду с пустым блокчейном

будут ли они между собой синхронизироваться?

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

Edited by infoman

Share this post


Link to post
Share on other sites

@infoman,

Я точно не знаю как в биткойне реализован поиск пиров, но скорее всего  по принципу DHT.

Поэтому нет, не смогут, если заранее не будут знать адреса.

Share this post


Link to post
Share on other sites

Хотя нет, тут даже несколько проще, распределенная таблица не используется, банальный запрос в irc чат  на irc.lfnet.org.

Но вроде есть альтернативные адреса.

Так что в любом случае они друг друга не найдут.

Share this post


Link to post
Share on other sites

@BearA,я смотрел код кварка и нашел вот это:

Я правильно понимаю что тут демон поределяет внешний ip той подсети в которой он находится и потом

делает широковещательный запрос на этот ip с целью поиска возможных нод находящихся внутри подсети?

 

 

/** check whether a given address is in a network we can probably connect to */
bool IsReachable(const CNetAddr& addr)
{
LOCK(cs_mapLocalHost);
enum Network net = addr.GetNetwork();
return vfReachable[net] && !vfLimited[net];
}

bool GetMyExternalIP2(const CService& addrConnect, const char* pszGet, const char* pszKeyword, CNetAddr& ipRet)
{
SOCKET hSocket;
if (!ConnectSocket(addrConnect, hSocket))
return error("GetMyExternalIP() : connection to %s failed", addrConnect.ToString().c_str());

send(hSocket, pszGet, strlen(pszGet), MSG_NOSIGNAL);

string strLine;
while (RecvLine(hSocket, strLine))
{
if (strLine.empty()) // HTTP response is separated from headers by blank line
{
loop
{
if (!RecvLine(hSocket, strLine))
{
closesocket(hSocket);
return false;
}
if (pszKeyword == NULL)
break;
if (strLine.find(pszKeyword) != string::npos)
{
strLine = strLine.substr(strLine.find(pszKeyword) + strlen(pszKeyword));
break;
}
}
closesocket(hSocket);
if (strLine.find("<") != string::npos)
strLine = strLine.substr(0, strLine.find("<"));
strLine = strLine.substr(strspn(strLine.c_str(), " \t\n\r"));
while (strLine.size() > 0 && isspace(strLine[strLine.size()-1]))
strLine.resize(strLine.size()-1);
CService addr(strLine,0,true);
printf("GetMyExternalIP() received [%s] %s\n", strLine.c_str(), addr.ToString().c_str());
if (!addr.IsValid() || !addr.IsRoutable())
return false;
ipRet.SetIP(addr);
return true;
}
}
closesocket(hSocket);
return error("GetMyExternalIP() : connection closed");
}

bool GetMyExternalIP(CNetAddr& ipRet)
{
CService addrConnect;
const char* pszGet;
const char* pszKeyword;

for (int nLookup = 0; nLookup <= 1; nLookup++)
for (int nHost = 1; nHost <= 2; nHost++)
{
// We should be phasing out our use of sites like these. If we need
// replacements, we should ask for volunteers to put this simple
// php file on their web server that prints the client IP:
//
if (nHost == 1)
{
addrConnect = CService("91.198.22.70", 80); // checkip.dyndns.org

if (nLookup == 1)
{
CService addrIP("checkip.dyndns.org", 80, true);
if (addrIP.IsValid())
addrConnect = addrIP;
}

pszGet = "GET / HTTP/1.1\r\n"
"Host: checkip.dyndns.org\r\n"
"User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\r\n"
"Connection: close\r\n"
"\r\n";

pszKeyword = "Address:";
}
else if (nHost == 2)
{
addrConnect = CService("212.117.175.194", 80); // www.showmyip.com

if (nLookup == 1)
{
CService addrIP("www.showmyip.com", 80, true);
if (addrIP.IsValid())
addrConnect = addrIP;
}

pszGet = "GET /simple/ HTTP/1.1\r\n"
"Host: www.showmyip.com\r\n"
"User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\r\n"
"Connection: close\r\n"
"\r\n";

pszKeyword = NULL; // Returns just IP address
}

if (GetMyExternalIP2(addrConnect, pszGet, pszKeyword, ipRet))
return true;
}

return false;
}

void ThreadGetMyExternalIP(void* parg)
{
// Make this thread recognisable as the external IP detection thread
RenameThread("bitcoin-ext-ip");

CNetAddr addrLocalHost;
if (GetMyExternalIP(addrLocalHost))
{
printf("GetMyExternalIP() returned %s\n", addrLocalHost.ToStringIP().c_str());
AddLocal(addrLocalHost, LOCAL_HTTP);
}
}





void AddressCurrentlyConnected(const CService& addr)
{
addrman.Connected(addr);
}







CNode* FindNode(const CNetAddr& ip)
{
LOCK(cs_vNodes);
BOOST_FOREACH(CNode* pnode, vNodes)
if ((CNetAddr)pnode->addr == ip)
return (pnode);
return NULL;
}

CNode* FindNode(std::string addrName)
{
LOCK(cs_vNodes);
BOOST_FOREACH(CNode* pnode, vNodes)
if (pnode->addrName == addrName)
return (pnode);
return NULL;
}

CNode* FindNode(const CService& addr)
{
LOCK(cs_vNodes);
BOOST_FOREACH(CNode* pnode, vNodes)
if ((CService)pnode->addr == addr)
return (pnode);
return NULL;
}

CNode* ConnectNode(CAddress addrConnect, const char *pszDest)
{
if (pszDest == NULL) {
if (IsLocal(addrConnect))
return NULL;

// Look for an existing connection
CNode* pnode = FindNode((CService)addrConnect);
if (pnode)
{
pnode->AddRef();
return pnode;
}
}


/// debug print
printf("trying connection %s lastseen=%.1fhrs\n",
pszDest ? pszDest : addrConnect.ToString().c_str(),
pszDest ? 0 : (double)(GetAdjustedTime() - addrConnect.nTime)/3600.0);

// Connect
SOCKET hSocket;
if (pszDest ? ConnectSocketByName(addrConnect, hSocket, pszDest, GetDefaultPort()) : ConnectSocket(addrConnect, hSocket))
{
addrman.Attempt(addrConnect);

/// debug print
printf("connected %s\n", pszDest ? pszDest : addrConnect.ToString().c_str());

// Set to non-blocking
#ifdef WIN32
u_long nOne = 1;
if (ioctlsocket(hSocket, FIONBIO, &nOne) == SOCKET_ERROR)
printf("ConnectSocket() : ioctlsocket non-blocking setting failed, error %d\n", WSAGetLastError());
#else
if (fcntl(hSocket, F_SETFL, O_NONBLOCK) == SOCKET_ERROR)
printf("ConnectSocket() : fcntl non-blocking setting failed, error %d\n", errno);
#endif

// Add node
CNode* pnode = new CNode(hSocket, addrConnect, pszDest ? pszDest : "", false);
pnode->AddRef();

{
LOCK(cs_vNodes);
vNodes.push_back(pnode);
}

pnode->nTimeConnected = GetTime();
return pnode;
}
else
{
return NULL;
}
}

 

Share this post


Link to post
Share on other sites

@infoman,

Нет.

Сначала идет определение внешнего адреса.

Потом попытка коннекта к нодам, там не совсем разобрался что откуда, надо полностью смотреть код.

 

Никаких широковещательных запросов я там не увидел.

Что вы понимаете под широковещательным запросом?

Я так понимаю что это запрос отправленный на последний адрес сети.

Share this post


Link to post
Share on other sites

@BearA,я просто читал что от irc разработчики отказались

что касается кода то

для чего ему его определять?

для какой цели?

передать этот адрес внешней (зашитой в конфиг)ноде? не вижу смысла ибо нода сама может принимая запрос от нашего демона определить внешний ip нашего демона.

 

полный код вот он https://github.com/MaxGuevara/quark/blob/master/src/net.cpp

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...