Bitcoin Forum
October 31, 2024, 05:40:27 PM *
News: Latest Bitcoin Core release: 28.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: armory in ubuntu for newbees  (Read 301 times)
jaume.signin (OP)
Newbie
*
Offline Offline

Activity: 22
Merit: 6


View Profile
July 19, 2020, 09:02:20 PM
Last edit: July 20, 2020, 08:51:20 PM by jaume.signin
 #1

Hi everyone!

I want to run armory and I will post here my steps.

So far, I learned four things
- A system with some 400 Gbytes of HD is needed to store the blockchain.
- When downloading bitcoin core, use the tgz and not the snap. With the tgz, the blockchain files will be stored in the .bitcoin/blocks directory where armory looks for them.
- Disable bitcoin core pruning.
- Wait for bitcoin core to fully synchronize before launching armory.
goatpig
Moderator
Legendary
*
Offline Offline

Activity: 3738
Merit: 1360

Armory Developer


View Profile
July 20, 2020, 07:53:54 AM
 #2

Your main road block is that Armory currently runs on python2 & pyqt4, and both py2 and Qt4 have been dropped from ubuntu starting version 20. You should read this thread for a decent work around:

https://bitcointalk.org/index.php?topic=5261375.0

Otherwise, the simplest path forward is to run Armory from within a Ubuntu 19 VM.

jaume.signin (OP)
Newbie
*
Offline Offline

Activity: 22
Merit: 6


View Profile
July 20, 2020, 08:54:53 PM
 #3

Thanks goatpig Smiley

I plan to install armory on a dedicated computer. A laptop that is some 7 years old.

I will install ubuntu 18.04 lts Smiley
HCP
Legendary
*
Offline Offline

Activity: 2086
Merit: 4361

<insert witty quote here>


View Profile
July 24, 2020, 10:09:38 AM
 #4

So far, I learned four things
- A system with some 400 Gbytes of HD is needed to store the blockchain.
Don't forget you'll need room for the OS and applications etc... go 1TB+ if you can

Quote
- When downloading bitcoin core, use the tgz and not the snap. With the tgz, the blockchain files will be stored in the .bitcoin/blocks directory where armory looks for them.
Not actually necessary. You can store the bitcoin blocks wherever you want... you just need to configure Armory appropriately. For instance, I have my Bitcoin Core blocks folder in a "non-standard" location... but by setting the paths appropriately in Armory (using "in app" settings or .conf files), Armory is able to find them just fine Wink

Quote
- Disable bitcoin core pruning.
VERY important! Wink


Quote
- Wait for bitcoin core to fully synchronize before launching armory.
Also a very good idea.


I will install ubuntu 18.04 lts Smiley
I have tested it on ubuntu 18.04 LTS and it works OK.

█████████████████████████
████▐██▄█████████████████
████▐██████▄▄▄███████████
████▐████▄█████▄▄████████
████▐█████▀▀▀▀▀███▄██████
████▐███▀████████████████
████▐█████████▄█████▌████
████▐██▌█████▀██████▌████
████▐██████████▀████▌████
█████▀███▄█████▄███▀█████
███████▀█████████▀███████
██████████▀███▀██████████
█████████████████████████
.
BC.GAME
▄▄░░░▄▀▀▄████████
▄▄▄
██████████████
█████░░▄▄▄▄████████
▄▄▄▄▄▄▄▄▄██▄██████▄▄▄▄████
▄███▄█▄▄██████████▄████▄████
███████████████████████████▀███
▀████▄██▄██▄░░░░▄████████████
▀▀▀█████▄▄▄███████████▀██
███████████████████▀██
███████████████████▄██
▄███████████████████▄██
█████████████████████▀██
██████████████████████▄
.
..CASINO....SPORTS....RACING..
█░░░░░░█░░░░░░█
▀███▀░░▀███▀░░▀███▀
▀░▀░░░░▀░▀░░░░▀░▀
░░░░░░░░░░░░
▀██████████
░░░░░███░░░░
░░█░░░███▄█░░░
░░██▌░░███░▀░░██▌
░█░██░░███░░░█░██
░█▀▀▀█▌░███░░█▀▀▀█▌
▄█▄░░░██▄███▄█▄░░▄██▄
▄███▄
░░░░▀██▄▀


▄▄████▄▄
▄███▀▀███▄
██████████
▀███▄░▄██▀
▄▄████▄▄░▀█▀▄██▀▄▄████▄▄
▄███▀▀▀████▄▄██▀▄███▀▀███▄
███████▄▄▀▀████▄▄▀▀███████
▀███▄▄███▀░░░▀▀████▄▄▄███▀
▀▀████▀▀████████▀▀████▀▀
jaume.signin (OP)
Newbie
*
Offline Offline

Activity: 22
Merit: 6


View Profile
July 25, 2020, 05:44:17 AM
 #5

Thanks HCP for your input.

So far, I learned four things
- A system with some 400 Gbytes of HD is needed to store the blockchain.
Don't forget you'll need room for the OS and applications etc... go 1TB+ if you can

I am using an old computer with some 450 GBytes of HD. Fingers crossed that's enough.  I agree that a larger HD is needed. So far I downloaded 95% of the blockchain and used 75% of the HD. I haven't installed armory yet.


jaume.signin (OP)
Newbie
*
Offline Offline

Activity: 22
Merit: 6


View Profile
July 28, 2020, 04:32:08 PM
 #6

Well, my first attempt with armory gcc7.2 failed.

I will try with the gcc 4.9 version...

Code:
$ armory 
Gtk-Message: 18:20:00.871: Failed to load module "canberra-gtk-module"
/home/xxxx
(ERROR) ArmoryUtils.py:3735 - Unsupported language  specified. Defaulting to English (en)
/usr/lib/armory/armoryengine/Transaction.py:3126: SyntaxWarning: import * only allowed at module level
  def PyCreateAndSignTx_old(srcTxOuts, dstAddrsVals):
No systemtrayicon available
(ERROR) ArmoryQt.py:1862 - Failed to setup SDM
Traceback (most recent call last):
  File "/usr/bin/../lib/armory/ArmoryQt.py", line 1857, in startBitcoindIfNecessary
    TheSDM.setupSDM(extraExeSearch=self.satoshiExeSearchPath)
  File "/usr/lib/armory/SDM.py", line 190, in setupSDM
    if self.failedFindExe:  raise self.BitcoindError, 'bitcoind not found'
BitcoindError: bitcoind not found
(WARNING) SDM.py:402 - Spawning DB with command: ArmoryDB --db-type="DB_FULL" --cookie --satoshi-datadir="/home/xxxx/.bitcoin/blocks" --satoshi-port=8333 --datadir="/home/xxxx/.armory/" --dbdir="/home/xxxx/.armory/databases"
Illegal instruction (core dumped)

jaume.signin (OP)
Newbie
*
Offline Offline

Activity: 22
Merit: 6


View Profile
July 28, 2020, 04:45:07 PM
 #7

The gcc 4.9 version does work. Now armory is scanning the global transaction history.
jaume.signin (OP)
Newbie
*
Offline Offline

Activity: 22
Merit: 6


View Profile
July 30, 2020, 02:43:54 PM
 #8

Ok. I managed to create some transactions and they have been accepted and confirmed by the network.

jaume.signin (OP)
Newbie
*
Offline Offline

Activity: 22
Merit: 6


View Profile
July 30, 2020, 03:21:18 PM
 #9

Now I get
Quote
The transaction you just attempted to broadcast has timed out.


The RPC interface of your node is disabled, therefor Armory cannot use it to gather more information about the timeout. It is recommended that you enable the RPC and try again.
goatpig
Moderator
Legendary
*
Offline Offline

Activity: 3738
Merit: 1360

Armory Developer


View Profile
July 30, 2020, 03:29:12 PM
 #10

Did you try on the testnet? You have to run Core with -server to enable the RPC at any rate.

jaume.signin (OP)
Newbie
*
Offline Offline

Activity: 22
Merit: 6


View Profile
July 30, 2020, 04:00:26 PM
 #11

Did you try on the testnet? You have to run Core with -server to enable the RPC at any rate.

I was trying on the main network.

And I didn't add the -server flag when I launched bitcoin-qt. Next time I will.

Thanks again, goatpig.
goatpig
Moderator
Legendary
*
Offline Offline

Activity: 3738
Merit: 1360

Armory Developer


View Profile
July 30, 2020, 05:21:12 PM
 #12

Broadcast timeout doesn't mean the tx didn't make to the mempool, it only means Armory sent the tx to your node but failed to acknowledge delivery in the allotted time (hence the timeout). When that happens, it tries to fallback to the RPC interface to broadcast through that, but since yours isn't set up, you got that message.

jaume.signin (OP)
Newbie
*
Offline Offline

Activity: 22
Merit: 6


View Profile
July 30, 2020, 09:37:08 PM
 #13

Broadcast timeout doesn't mean the tx didn't make to the mempool, it only means Armory sent the tx to your node but failed to acknowledge delivery in the allotted time (hence the timeout). When that happens, it tries to fallback to the RPC interface to broadcast through that, but since yours isn't set up, you got that message.

Ok. Perfect. Now I know what happened. Mine is a very old computer. That may explain the timeout.

Thanks for the explanation Smiley
goatpig
Moderator
Legendary
*
Offline Offline

Activity: 3738
Merit: 1360

Armory Developer


View Profile
July 31, 2020, 06:08:42 AM
Merited by Carlton Banks (2), HCP (2)
 #14

Ok. Perfect. Now I know what happened. Mine is a very old computer. That may explain the timeout.

It's not much related to the PC's performance. Armory's p2p broadcast code was implemented when Core would push transactions as is once delivered by another peer. Core batches now, so the broadcast detection throws a lot of false negatives. This needs a bit of a technical explanation to make sense:

Early days, before Core was even named Core, the Bitcoin node software did 2 things different: Setting up the JSON-RPC interface required some minor work on the user part, notably adding login and password to a config file. Therefor, Armory could not expect access to the RPC in plug and play setups (95% of users), so it had to rely on something else to broadcast transactions. The RPC returns with an ACK/nACK on broadcasts but if only 5% of users can set it up properly, it was useless to Armory.

Instead etotheipi (the original maintainer) opted to connect to Core through the P2P interface. Armory, still to this day, spoofs a P2P node to your Core instance, for the purpose of pushing transactions and getting new block notifications.

The P2P broadcast interface does not come with an explicit ACK/nACK. It doesn't provide a result at all as a matter of fact, for design reasons. The flow goes like this: advertise the hash of the transaction you want to broadcast to the peer. The peer will then request that transaction by hash. You will return the transaction body to the peer. Broadcast is over. The only way to know if that transaction made it into the peer's mempool is to query that peer for the same transaction. If it returns it to you, it's in. You won't get a reply otherwise.

So basically, Armory sends the transaction to your Core instance and polls it for a few seconds to verify it's been added to the mempool. Eventually core introduced broadcast batching, where it tries to make a better use of the MTU and reduce point of origin timing leaks. Basically your node will now wait some time and try to accumulate a bunch of transactions before announcing them to other peers. This delay also affects entry in the mempool (so that you can't just query the node for specific hashes to know what made it in or not with certainty). As a result, this disrupts the Armory P2P broadcast loop, since the polling may now timeout.

Since then, interfacing with the RPC has become easier so I've added a RPC broadcast fallback when available, which is why you received the message about the RPC.


jaume.signin (OP)
Newbie
*
Offline Offline

Activity: 22
Merit: 6


View Profile
July 31, 2020, 03:21:51 PM
 #15

Wow, thanks for the whole explanation. I realize how armory has to constantly evolve to adapt to the changes of core. Now I use
Quote
bitcoin-qt -server
jaume.signin (OP)
Newbie
*
Offline Offline

Activity: 22
Merit: 6


View Profile
July 31, 2020, 06:05:07 PM
 #16

They way I used to run armory was
1) bitcoin-qt -server
2) armory

Then I realized that there is an option in the configuration for armory to run bitcoin core. And that option was checked. That's why amory complained
Quote
BitcoindError: bitcoind not found

  I told armory where my bitcoin binary is and let armory run bitcoin. Now everything runs smoother. Before I was running bitcoin core myself and also telling armory to run bitcoin core and the computer was very sluggish for some reason. Now it's much faster.

But I think I broke something in the process as I cannot send bitcoin now.

Quote
Traceback (most recent call last):
  File "/usr/bin/../lib/armory/ArmoryQt.py", line 3451, in clickSendBitcoins
    DlgSendBitcoins(self.getSelectedWallet(), self, self).exec_()
  File "/usr/lib/armory/qtdialogs.py", line 4594, in __init__
    spendFromLockboxID=spendFromLockboxID)
  File "/usr/lib/armory/ui/TxFrames.py", line 151, in __init__
    RBFcallback=RBFcallback)
  File "/usr/lib/armory/ui/WalletFrames.py", line 232, in __init__
    self.updateOnWalletChange()
  File "/usr/lib/armory/ui/WalletFrames.py", line 347, in updateOnWalletChange
    self.selectWltCallback(wlt)
  File "/usr/lib/armory/ui/TxFrames.py", line 347, in setWallet
    self.setupCoinSelectionInstance()
  File "/usr/lib/armory/ui/TxFrames.py", line 396, in setupCoinSelectionInstance
    self.coinSelection = self.wlt.cppWallet.getCoinSelectionInstance()
  File "/usr/lib/armory/CppBlockUtils.py", line 2164, in getCoinSelectionInstance
    def getCoinSelectionInstance(self): return _CppBlockUtils.WalletContainer_getCoinSelectionInstance(self)
<class 'CppBlockUtils.DbErrorMsg'>: <CppBlockUtils.DbErrorMsg; proxy of <Swig Object of type 'DbErrorMsg *' at 0x7f345c8a4450> >

So I am thinking about looking into the factory reset options...
goatpig
Moderator
Legendary
*
Offline Offline

Activity: 3738
Merit: 1360

Armory Developer


View Profile
July 31, 2020, 06:41:20 PM
 #17

Try to rescan the db.

jaume.signin (OP)
Newbie
*
Offline Offline

Activity: 22
Merit: 6


View Profile
August 01, 2020, 08:57:32 PM
 #18

Try to rescan the db.

Thanks goatpig Smiley

I did a "rebuild" and now when I click on the "send bitcoin" button, the window to send bitcoins appears as it should be.

Problem solved.
jaume.signin (OP)
Newbie
*
Offline Offline

Activity: 22
Merit: 6


View Profile
August 03, 2020, 07:00:49 AM
 #19

As a summary, I want to list a few things I had to take into account when running armory:

- When downloading bitcoin core, use the tgz and not the snap. With the tgz, the blockchain files will be stored in the .bitcoin/blocks directory where armory looks for them.
- Disable bitcoin core pruning.
- Wait for bitcoin core to fully synchronize before launching armory.
- Use a decent computer. Both bitcoin core and armory are demanding. I used a six year old computer with an intel core i3,  6 gigs of ram  and some 450 GB of HD and at some point it was too slow or even freezed.
- Use ubuntu 18.04 instead of the latest release.
- Run bitcoin core with the flag -server. bitcoin-qt -server
- Change the configuration of armory to disable the option "let armory manage bitcoin core".
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!