Author

Topic: Armory cannot import _CppBlockUtils.so on my Raspberry Pi (Read 1784 times)

newbie
Activity: 2
Merit: 0
Sorry to keep poking this thread, but I do want to make sure this is right, and I don't have an RPi setup to test (I do have one, but I've never set it up):

https://s3.amazonaws.com/bitcoinarmory-testing/armory_0.91-beta_raspbian.tar.gz

Thanks for the quick response, etotheipi!  That download worked perfectly for me.

--David
legendary
Activity: 1428
Merit: 1093
Core Armory Developer
That first launch error is silly.  We've seen it like 3 times out of 200 launches:  it simply prevents Armory from opening that one time, then goes away the next time.  I'd love to isolate it, but we can't reproduce it.  Maybe one day.

As for the wallet error... it's somehow reading a zero-length key.  Perhaps the there was wallet corruption after you made the decrypted backup?  I'm not sure -- as you can see it's a little thrown off by the duplicate wallet in the .armory directory... it's not intended to store multiple, duplicate wallets there -- you're supposed to make the decrypted backup to a removable drive or something. 

Of course it's supposed to work.  Somehow the original wallet is corrupted...?  Maybe you could backup those wallets (in case we need to debug it later) and simply try out all the other operations?  It would be good to know if everything else works as expected, and then we can figure out what happened with those wallets later.
newbie
Activity: 51
Merit: 0
Sorry to keep poking this thread, but I do want to make sure this is right, and I don't have an RPi setup to test (I do have one, but I've never set it up):

https://s3.amazonaws.com/bitcoinarmory-testing/armory_0.91-beta_raspbian.tar.gz

Please try it again, the signed hash is below (using my email key, 0xFB596985, which should be good enough at least for testing purposes)

Code:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

c1485f802b33f82998d65611b17861959dedbdb38524233ccce750b822514893  armory_0.91-beta_raspbian.tar.gz

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)

iQIcBAEBCAAGBQJTSfWzAAoJEBHe6b77WWmFHYsP/A4B0wx/fJHc3MGjO9hY4M+u
CUJmNrJg2CEOMReyREid8iqVL9F1PGnSdU1FBmO/LMaOqoYFPBFzvILTzVBg5j4T
ynO8DKqaLuKhDyMRYgD1oH8dRaXl8QCXp5i+e19Vsvjv2wUXZ0UqHta+jw8zzunV
CUbZwEZh2SHARzzYiyihpjOsjLtqPfIn/au87l6u1P+3/HthNO4mq3cAwe49exVU
S2ajtmWSyLU9nKXZcwiXgil++CjUdibhyAh83WdJFDIfcAKKWbtzAQGDKt4oIYbS
q6ecO7CeLHdO3WTtpEgVJPEWKt3bNf2GSEZ1wkTK+NMjEPSj23dxv20zO62h7+7C
71lAjeCE6MFoOcKb8KcPV+nyokNUp5m/4n+uH38DcHvpGmnLpwsBUv8enL36DDJk
jDrH/pwFEyXCHkvTvJ0P7N0MC+BQu/ErdAzH7fOd8oqBb056BTGu7xZ9MZ2iXRNa
RYmD4/brbZmT7rrXZgE+4QrqFTQr1nrGetFPw8n2Vg7+Q8hr99UiHl9YBRkXUfb9
81BslwLwgtlCRnFdrE72j/atTMUMXQ4jpbj+KLI5p0/7r5Ky2Mo2NbWWAlsksoIR
Bh79Iz6/BAeteaC/zD6HPGHBfX1Nm76htnhILEHERPRqiqLkksKZ7GmQSoOK8zfm
6k30DkdDuwhD2NBhOBNA
=iTzb
-----END PGP SIGNATURE-----

Just tried it on a fresh install of rapbian: 2014-01-07-wheezy-raspbian.img

Code:
sudo apt-get update
sudo apt-get install python-psutil python-qt4 python-twisted
tar xvzf armory_0.91-beta_raspbian_TEST.tar.gz
cd armory_0.91-beta_rpibuild/usr/lib/armory
python ArmoryQt.py

It crashed on the first launch:
Code:
pi@raspberrypi ~/TEST/armory_0.91-beta_rpibuild/usr/lib/armory $ python ArmoryQt.py 
********************************************************************************
Loading Armory Engine:
   Armory Version:       0.91
   PyBtcWallet  Version: 1.35
Detected Operating system: Linux
   OS Variant            : ('debian', '7.2', '')
   User home-directory   : /home/pi
   Satoshi BTC directory : /home/pi/.bitcoin/
   Armory home dir       : /home/pi/.armory/
   LevelDB directory     : /home/pi/.armory/databases
   Armory settings file  : /home/pi/.armory/ArmorySettings.txt
   Armory log file       : /home/pi/.armory/armorylog.txt
Log file doesn't exist [yet]
(ERROR) announcefetch.py:261 - Specified URL was inaccessible
(ERROR) announcefetch.py:262 - Tried: https://bitcoinarmory.com/announce.txt?osvar=debian&os=lin&ver=0.91&id=0bb58226
(ERROR) BDM.py:407 - setSatoshiDir: directory does not exist: /home/pi/.bitcoin/
(ERROR) announcefetch.py:162 - Loop was busy for more than one second
(ERROR) announcefetch.py:162 - Loop was busy for more than one second
(ERROR) announcefetch.py:162 - Loop was busy for more than one second
(WARNING) ArmoryQt.py:1497 - No Armory links in the downloads list
(WARNING) ArmoryQt.py:1556 - No Satoshi links in the downloads list
(ERROR) Traceback (most recent call last):
  File "ArmoryQt.py", line 6427, in
    form = ArmoryMainWindow()
  File "/home/pi/TEST/armory_0.91-beta_rpibuild/usr/lib/armory/armoryengine/Timer.py", line 99, in inner
    ret = func(*args, **kwargs)
  File "ArmoryQt.py", line 197, in __init__
    self.startBitcoindIfNecessary()
  File "ArmoryQt.py", line 1980, in startBitcoindIfNecessary
    torrentFile = self.findTorrentFileForSDM(2)
  File "ArmoryQt.py", line 1935, in findTorrentFileForSDM
    self.explicitCheckAnnouncements(forceWaitTime)
  File "ArmoryQt.py", line 4526, in explicitCheckAnnouncements
    self.processAnnounceData()
  File "ArmoryQt.py", line 1468, in processAnnounceData
    func(fileText)
  File "ArmoryQt.py", line 1755, in processNotifications
    tabWidgetBar = self.mainDisplayTabs.tabBar()
AttributeError: 'ArmoryMainWindow' object has no attribute 'mainDisplayTabs'

Traceback (most recent call last):
  File "ArmoryQt.py", line 6427, in
    form = ArmoryMainWindow()
  File "/home/pi/TEST/armory_0.91-beta_rpibuild/usr/lib/armory/armoryengine/Timer.py", line 99, in inner
    ret = func(*args, **kwargs)
  File "ArmoryQt.py", line 197, in __init__
    self.startBitcoindIfNecessary()
  File "ArmoryQt.py", line 1980, in startBitcoindIfNecessary
    torrentFile = self.findTorrentFileForSDM(2)
  File "ArmoryQt.py", line 1935, in findTorrentFileForSDM
    self.explicitCheckAnnouncements(forceWaitTime)
  File "ArmoryQt.py", line 4526, in explicitCheckAnnouncements
    self.processAnnounceData()
  File "ArmoryQt.py", line 1468, in processAnnounceData
    func(fileText)
  File "ArmoryQt.py", line 1755, in processNotifications
    tabWidgetBar = self.mainDisplayTabs.tabBar()
AttributeError: 'ArmoryMainWindow' object has no attribute 'mainDisplayTabs'
pi@raspberrypi ~/TEST/armory_0.91-beta_rpibuild/usr/lib/armory $

2nd launch it starts ok. I could create a new wallet, make a paper backup and verify it.
Exporting as an decrypted wallet works when not exporting to the .Armory dir.
I did not try to import the decrypted wallet.

Extracting in .Armory dir produces an crash:
Code:
pi@raspberrypi ~/TEST/armory_0.91-beta_rpibuild/usr/lib/armory $ python ArmoryQt.py --offline
********************************************************************************
Loading Armory Engine:
   Armory Version:       0.91
   PyBtcWallet  Version: 1.35
Detected Operating system: Linux
   OS Variant            : ('debian', '7.2', '')
   User home-directory   : /home/pi
   Satoshi BTC directory : /home/pi/.bitcoin/
   Armory home dir       : /home/pi/.armory/
   LevelDB directory     : /home/pi/.armory/databases
   Armory settings file  : /home/pi/.armory/ArmorySettings.txt
   Armory log file       : /home/pi/.armory/armorylog.txt
(WARNING) ArmoryQt.py:2323 - ***WARNING: Duplicate wallet detected, 9UcQFPao
(WARNING) ArmoryQt.py:2333 - Second wallet is more useful than the first one...
(WARNING) ArmoryQt.py:2334 -      Wallet 1 (loaded):  /home/pi/.armory/armory_9UcQFPao_.wallet
(WARNING) ArmoryQt.py:2335 -      Wallet 2 (skipped): /home/pi/.armory/armory_9UcQFPao_decrypt.wallet
(WARNING) ArmoryQt.py:1962 - Not online, will not start bitcoind
terminate called after throwing an instance of 'CryptoPP::InvalidKeyLength'
  what():  AES/CFB: 0 is not a valid key length
Aborted
pi@raspberrypi ~/TEST/armory_0.91-beta_rpibuild/usr/lib/armory $
newbie
Activity: 51
Merit: 0
just wondering how you've got it to compile as i had to replace the Makefile from the cryptopp folder with the GNUmakefile from the source of cryptopp in order to compile it on the Pi.

https://bitcointalksearch.org/topic/m.1906666

You're probably building the master branch, which doesn't have the changes made to the cryptopp makefile.

Thanks, that's it.

I just used "git clone git://github.com/etotheipi/BitcoinArmory.git" to get the source, was to lazy to look for a Branch Wink
legendary
Activity: 3766
Merit: 1364
Armory Developer
just wondering how you've got it to compile as i had to replace the Makefile from the cryptopp folder with the GNUmakefile from the source of cryptopp in order to compile it on the Pi.

https://bitcointalksearch.org/topic/m.1906666

You're probably building the master branch, which doesn't have the changes made to the cryptopp makefile.
newbie
Activity: 51
Merit: 0
just wondering how you've got it to compile as i had to replace the Makefile from the cryptopp folder with the GNUmakefile from the source of cryptopp in order to compile it on the Pi.

https://bitcointalksearch.org/topic/m.1906666
legendary
Activity: 1428
Merit: 1093
Core Armory Developer
I can create a new wallet, make a paper backup and verify it, get a new receiving address, create and import a watching only wallet, ..., seems to be working.

I gonna try it on a fresh install of Raspbian as for now i tested it on the system where i also compiled the other version, just to make sure of any other missing dependency.

That tar.gz doesn't have the dependences with it.  It assumes all the dependencies are already there.  We've been swamped with some other things, so we weren't able to create a full bundle for it, but knew that the compile step was a real PITA, so this helps get over the biggest hurdle.
newbie
Activity: 51
Merit: 0
I can create a new wallet, make a paper backup and verify it, get a new receiving address, create and import a watching only wallet, ..., seems to be working.

I gonna try it on a fresh install of Raspbian as for now i tested it on the system where i also compiled the other version, just to make sure of any other missing dependency.
legendary
Activity: 3766
Merit: 1364
Armory Developer
Hi,

i had the same problem before and ended up building 0.90 from the source on the Pi  Roll Eyes

This new version seems to work, at least it starts without problem and shows the same wallets as before.
(I just started/ended it on the Pi, nothing more)

Hope this helps.

You could try something like creating a paperback up of one of your wallets. If it gets that far (unlocking and all) it should be sound for signing.
newbie
Activity: 51
Merit: 0
Hi,

i had the same problem before and ended up building 0.90 from the source on the Pi  Roll Eyes

This new version seems to work, at least it starts without problem and shows the same wallets as before.
(I just started/ended it on the Pi, nothing more)

Hope this helps.
legendary
Activity: 1428
Merit: 1093
Core Armory Developer
Sorry to keep poking this thread, but I do want to make sure this is right, and I don't have an RPi setup to test (I do have one, but I've never set it up):

https://s3.amazonaws.com/bitcoinarmory-testing/armory_0.91-beta_raspbian.tar.gz

Please try it again, the signed hash is below (using my email key, 0xFB596985, which should be good enough at least for testing purposes)

Code:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

c1485f802b33f82998d65611b17861959dedbdb38524233ccce750b822514893  armory_0.91-beta_raspbian.tar.gz

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)

iQIcBAEBCAAGBQJTSfWzAAoJEBHe6b77WWmFHYsP/A4B0wx/fJHc3MGjO9hY4M+u
CUJmNrJg2CEOMReyREid8iqVL9F1PGnSdU1FBmO/LMaOqoYFPBFzvILTzVBg5j4T
ynO8DKqaLuKhDyMRYgD1oH8dRaXl8QCXp5i+e19Vsvjv2wUXZ0UqHta+jw8zzunV
CUbZwEZh2SHARzzYiyihpjOsjLtqPfIn/au87l6u1P+3/HthNO4mq3cAwe49exVU
S2ajtmWSyLU9nKXZcwiXgil++CjUdibhyAh83WdJFDIfcAKKWbtzAQGDKt4oIYbS
q6ecO7CeLHdO3WTtpEgVJPEWKt3bNf2GSEZ1wkTK+NMjEPSj23dxv20zO62h7+7C
71lAjeCE6MFoOcKb8KcPV+nyokNUp5m/4n+uH38DcHvpGmnLpwsBUv8enL36DDJk
jDrH/pwFEyXCHkvTvJ0P7N0MC+BQu/ErdAzH7fOd8oqBb056BTGu7xZ9MZ2iXRNa
RYmD4/brbZmT7rrXZgE+4QrqFTQr1nrGetFPw8n2Vg7+Q8hr99UiHl9YBRkXUfb9
81BslwLwgtlCRnFdrE72j/atTMUMXQ4jpbj+KLI5p0/7r5Ky2Mo2NbWWAlsksoIR
Bh79Iz6/BAeteaC/zD6HPGHBfX1Nm76htnhILEHERPRqiqLkksKZ7GmQSoOK8zfm
6k30DkdDuwhD2NBhOBNA
=iTzb
-----END PGP SIGNATURE-----
legendary
Activity: 1428
Merit: 1093
Core Armory Developer
I bet I botched the build process and compiled for i386 instead of armhf.  We verified the build process worked, and then I made a script to make it easier, but I bet I did the script wrong.

I'm about to put out 0.91.1 with some tweaks to the wallet-fixing logic and the new Bitcoin Core download.  I'll see if I can fix the RPi cross-compile script.

It looks like that's exactly what happened, I accidentally use the i386 g++ instead of the armhf g++.

The old one:

Code:
~/temp/armory_rpi/usr/lib/armory $ file _CppBlockUtils.so 
_CppBlockUtils.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (GNU/Linux), dynamically linked, BuildID[sha1]=0x1e56789efad37396cf2ae2f426ccbd6f0751e2e0, not stripped


Now that I did it manually and verified the correct compiler was being used:

Code:
~/projects/bitcoin/compiledrpi/usr/lib/armory $ file _CppBlockUtils.so 
_CppBlockUtils.so: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked, not stripped

I'll update the RPi cross-compile script and have a new version along with everything else, soon.
legendary
Activity: 1428
Merit: 1093
Core Armory Developer
I bet I botched the build process and compiled for i386 instead of armhf.  We verified the build process worked, and then I made a script to make it easier, but I bet I did the script wrong.

I'm about to put out 0.91.1 with some tweaks to the wallet-fixing logic and the new Bitcoin Core download.  I'll see if I can fix the RPi cross-compile script.
legendary
Activity: 3766
Merit: 1364
Armory Developer
I dont think we put out a 0.91 RPi package yet. The debian/ubuntu packages certainly won't run on a Pi, different CPU arch.
newbie
Activity: 2
Merit: 0
Hello.

I'm having trouble installing Armory 0.91 on my Raspberry Pi, which is running Raspbian.  I would appreciate some help.

Here is the error I get when I try to launch Armory:

Code:
pi@raspberrypi ~ $ python /usr/lib/armory/ArmoryQt.py --offline
Traceback (most recent call last):
  File "/usr/lib/armory/ArmoryQt.py", line 34, in
    from armoryengine.ALL import *
  File "/usr/lib/armory/armoryengine/ALL.py", line 1, in
    from armoryengine.ArmoryUtils import *
  File "/usr/lib/armory/armoryengine/ArmoryUtils.py", line 39, in
    from CppBlockUtils import KdfRomix, CryptoAES
  File "/usr/lib/armory/CppBlockUtils.py", line 26, in
    _CppBlockUtils = swig_import_helper()
  File "/usr/lib/armory/CppBlockUtils.py", line 22, in swig_import_helper
    _mod = imp.load_module('_CppBlockUtils', fp, pathname, description)
ImportError: /usr/lib/armory/_CppBlockUtils.so: cannot open shared object file: No such file or directory


I am not sure why that error is happening because I definitely have /usr/lib/armory/_CppBlockUtils.so.  Here is a full listing of the files in /usr/lib/armory:

Code:
pi@raspberrypi ~ $ ls -l /usr/lib/armory
total 18944
-rw-r--r-- 1 root root    13869 Apr 12 21:25 announcefetch.py
-rw-r--r-- 1 root root     7066 Apr 12 21:25 armorycolors.py
-rw-r--r-- 1 root root     8729 Apr 12 21:25 ArmoryDB.py
-rw-r--r-- 1 root root    45917 Apr 12 21:25 armoryd.py
drwxr-xr-x 2 root root     4096 Apr 12 21:25 armoryengine
-rw-r--r-- 1 root root    49445 Apr 12 21:25 armorymodels.py
-rw-r--r-- 1 root root   278165 Apr 12 21:25 ArmoryQt.py
drwxr-xr-x 3 root root     4096 Apr 12 21:25 BitTornado
-rw-r--r-- 1 root root   166190 Apr 12 21:25 CppBlockUtils.py
-rwxr-xr-x 1 root root 12382720 Apr 12 21:25 _CppBlockUtils.so
-rw-r--r-- 1 root root   160006 Apr 12 21:25 default_bootstrap.torrent
drwxr-xr-x 2 root root     4096 Apr 12 21:25 extras
-rw-r--r-- 1 root root     3302 Apr 12 21:25 guardian.py
-rw-r--r-- 1 root root    19598 Apr 12 21:25 jasvet.py
drwxr-xr-x 2 root root     4096 Apr 12 21:25 jsonrpc
-rw-r--r-- 1 root root    34649 Apr 12 21:25 LICENSE.py
-rw-r--r-- 1 root root  5344801 Apr 12 21:25 qrc_img_resources.py
-rw-r--r-- 1 root root    26218 Apr 12 21:25 qrcodenative.py
-rw-r--r-- 1 root root    10451 Apr 12 21:25 qt4reactor.py
-rw-r--r-- 1 root root    33265 Apr 12 21:25 qtdefines.py
-rw-r--r-- 1 root root   535094 Apr 12 21:25 qtdialogs.py
-rw-r--r-- 1 root root     4723 Apr 12 21:25 README
-rw-r--r-- 1 root root    35118 Apr 12 21:25 SDM.py
-rw-r--r-- 1 root root      608 Apr 12 21:25 setup.py
-rw-r--r-- 1 root root    60116 Apr 12 21:25 subprocess_win.py
-rw-r--r-- 1 root root     1078 Apr 12 21:25 test_ArmoryDB.py
drwxr-xr-x 2 root root     4096 Apr 12 21:25 ui
-rw-r--r-- 1 root root    99066 Apr 12 21:25 unittestold.py
-rw-r--r-- 1 root root      436 Apr 12 21:25 writeNSISCompilerArgs.py


Here is the sha256sum of my _CppBlockUtils.so (I have not verified that this is what it should be):

Code:
388f0e509ab77e7e86c9de315eaceaae8bb46f43322ecd4ee6425ca62519f1e3


I tried running the following command but still got the same error:

Code:
LD_LIBRARY_PATH=/usr/lib/armory python /usr/lib/armory/ArmoryQt.py --offline

I suspect that the error message is misleading and that the actual problem is that one of the dependencies of _CppBlockUtils.so is missing.


Here is what I have done so far to set up this system:

I downloaded armory-0.91-beta_raspbian.tar.gz from bitcoinarmory.com. I used sha256sum and gpg to verify that I have the right thing.

I installed Raspbian on my Raspberry Pi using NOOBS 1.3.4.

I installed armory by copying the files inside the armory_rpi folder to /.

I have installed all the prerequisites listed in Armory's README using apt-get except for qt4reactor; I have not yet figured out how to install that on the Raspberry Pi but I don't think it is relevant to this error.

Is there anything else I need to do?  I could not find step-by-step instructions for the Raspberry Pi so I might have missed something.

--David
Jump to: