Daily Anarchist
|
|
March 10, 2013, 09:42:04 PM |
|
I really like the bounty idea. Any chance of you doing that for the rest of Armory development? I mean, I'd really like to see a Bitcoin Armory rpm for fedora users. Slap up a bounty and I'll donate to it, eventually there's bound to be enough fedora users that would like to have that. It was a real workaround for me to figure out how to get Bitcoin Armory to work for me on Fedora.
There's not even a current Bitcoin-Qt rpm for Fedora, is there? Sadly, no. My understanding is it's because of Fedora's non-free software licensing stance. Or something rather.
|
|
|
|
Mr. Coinman
|
|
March 10, 2013, 09:47:05 PM |
|
Why is it not on Github?
I'm not sure what you mean. All the code is on github. But we can't have regular users installing Xcode, Python, Qt4, etc, and compiling from source. Unfortunately, to make a standalone installer, all that needs to be included somehow. Actually, I just got a PM from someone who claims to have done something like this already! He's stuck in the Newbies forum, but will post here soon. He said was able to jam everything into a .app and it works. But it's 232 MB. I suspect that most of it can be pruned out. For reference, the Windows installer (*.msi) has everything and is less than 20 MB. Question: is *.app what I want? Is that a sign-able container? Is it easily converted to a .dmg? Or pkg? What do I want? (I don't even know, myself) EDIT: upon reviewing what he said, I suspect that 180 MB is instantly removable: the entire cppForSwig directory and the .git directory. If so, this may already be in a usable state. Anyone have comments about the idea of bulk including a python installation, PyQt4, etc? It would require me updating them when necessary, but on the other hand, it reduces the number of libraries that are system-dependent (and thus, probably also increases security a bit). Yes, you want a .app file. A .dmg file is the standard disk image format used to package Mac OS X applications, where the .app file and other relevent files such as licence information, installation, or read-me text files are placed. I can help design and package a .dmg file once the .app is finished. Here's a quick sample I cooked up:
|
|
|
|
etotheipi (OP)
Legendary
Offline
Activity: 1428
Merit: 1093
Core Armory Developer
|
|
March 10, 2013, 09:48:45 PM |
|
My apologies. I misread that thread the first time, and assumed that my planned fix would... fix it. It's strange to me that Fedora would install those packages, and not put a symlink in a standard location to find them. You really shouldn't be linking directly to "package.so.X.Y", it should be linking to "package.so" which is a symlink to the latest one, which in your case happens to be .X.Y. Perhaps the details don't matter to you -- the point being that I don't think that's a long-term solution, exactly. I'll still post it on the webpage, since it obviously works for at least one person (you!), and I'm sure other Fedora users will benefit. But that's likely to break when the system is updated... so I'll have to work on something more robust.
|
|
|
|
etotheipi (OP)
Legendary
Offline
Activity: 1428
Merit: 1093
Core Armory Developer
|
|
March 10, 2013, 09:49:48 PM |
|
Just received another PM from "higuys" who is still stuck in the newbies forum. He just sent me this gist: https://gist.github.com/bsmt/5130568"It still needs a few minor changes, and it hasn't been tested, but it should give everyone an idea on how to do this."
|
|
|
|
Daily Anarchist
|
|
March 10, 2013, 09:58:22 PM |
|
My apologies. I misread that thread the first time, and assumed that my planned fix would... fix it. It's strange to me that Fedora would install those packages, and not put a symlink in a standard location to find them. You really shouldn't be linking directly to "package.so.X.Y", it should be linking to "package.so" which is a symlink to the latest one, which in your case happens to be .X.Y. Perhaps the details don't matter to you -- the point being that I don't think that's a long-term solution, exactly. I'll still post it on the webpage, since it obviously works for at least one person (you!), and I'm sure other Fedora users will benefit. But that's likely to break when the system is updated... so I'll have to work on something more robust. It's a hack, but if you put the install instructions up it will get viewed by more eyeballs, and therefore will have a greater likelihood of somebody finding a more robust solution.
|
|
|
|
picobit
|
|
March 10, 2013, 10:05:10 PM |
|
PROGRESS REPORT:I am so close, but still no cigar. Now I will write up what I have done and go to bed. If no-one has claimed the bounty tomorrow evening, I might give it a second try. I try to build the app with py2app. Unfortunately, it corrupts the PyQt files, but I think I got that solved. The second problem is that it makes an app that depends on the system Python being exactly the same as on my machine, and that does not work when I test on another mac. The problem is probably that I use the system Python with my Homebrew installation. I thought I knew what I was doing when I made that decision, but no... Switching to Homebrews python did not help, I got this error when trying to run Armory (not the .app I am trying to create, just running it in the development directory): BitcoinArmory$ python ArmoryQt.py ******************************************************************************** Loading Armory Engine: Armory Version: 0.87.3 PyBtcWallet Version: 1.35 Detected Operating system: Mac/OSX User home-directory : /Users/schiotz/Library/Application Support Satoshi BTC directory : /Users/schiotz/Library/Application Support/Bitcoin/ First blkX.dat file : /Users/schiotz/Library/Application Support/Bitcoin/blocks/blk00000.dat Armory home dir : /Users/schiotz/Library/Application Support/Armory/ Armory settings file : /Users/schiotz/Library/Application Support/Armory/ArmorySettings.txt Armory log file : /Users/schiotz/Library/Application Support/Armory/armorylog.txt Fatal Python error: PyThreadState_Get: no current thread Abort trap: 6
Anyway, here is what I have been doing. 1) Have qt, pyqt and other Armory dependencies installed with Homebrew. 2) Install py2app sudo easy_install -U py2app 3) Compile Armory, then create the app with these commands make python setup.py py2app --no-strip
where setup.py is this script (should probably be renamed to not conflict with Armory's own setup.py) """ This is a setup.py script generated by py2applet
Usage: python setup.py py2app """
from setuptools import setup
APP = ['ArmoryQt.py'] DATA_FILES = [] OPTIONS = {'argv_emulation': True}
setup( app=APP, data_files=DATA_FILES, options={'py2app': OPTIONS}, setup_requires=['py2app'], )
4) Now an .app has been created in the dist subdirectory, but it is broken as all PyQt dynamic libraries and friends are b0rked. One of them is easy to fix, by copying in the normal version: rm -f dist/ArmoryQt.app/Contents/Frameworks/QtCore.framework/Versions/4/QtCore cp /usr/local/lib/QtCore.framework/Versions/4/QtCore dist/ArmoryQt.app/Contents/Frameworks/QtCore.framework/Versions/4/QtCore 5) The rest of the PyQt stuff is fixed by this Python script (warning, ugly hacks inside - and no, I do not know what I am doing!) import os import subprocess
qtdir = 'dist/ArmoryQt.app/Contents/Resources/lib/python2.7/lib-dynload/PyQt4' origdir = '/usr/local/lib/python2.7/site-packages/PyQt4'
oldprefix = '/usr/local/lib' newprefix = '@executable_path/../Frameworks'
def fix_paths(f): paths = [] # Slightly silly to call Python like this :-) for line in subprocess.Popen("python -mmacholib dump "+f, shell=True, stdout=subprocess.PIPE).stdout: line = line.strip() if line.startswith(oldprefix): paths.append(line) for p in paths: assert p.find('.framework') > 0 new = newprefix + p[len(oldprefix):] cmd = 'install_name_tool -change "%s" "%s" "%s"' % (p, new, f) print cmd os.system(cmd)
for f in os.listdir(qtdir): if f.endswith('.so'): os.remove(os.path.join(qtdir, f)) os.system('cp "%s" "%s"' % (os.path.join(origdir, f), os.path.join(qtdir))) os.system('chmod +w "%s"' % (os.path.join(qtdir, f),)) fix_paths(os.path.join(qtdir, f))
The resulting .app will work on the local machine (try "open dist/ArmoryQt.app"). But it depends on the system Python in a nonportable way. I am stuck here, and need to sleep on it. If anyone can use this as a starting point, and proceed from here, please do so! EDIT: The resulting app is 109 MB, but compresses to 32 in a tar.gz.
|
|
|
|
higuys
Newbie
Offline
Activity: 28
Merit: 0
|
|
March 10, 2013, 10:06:16 PM Last edit: March 10, 2013, 10:51:52 PM by higuys |
|
Okay, I'm whitelisted now. I see etotheipi posted my gist already. Here's my .app: http://goo.gl/73v3bI'd love it if you guys test it, since I can't. Syncing the blockchain for the first time sucks. Some comments distributing python inside the app: The interpreter itself is really small, but the largest portion of any python distribution is the stdlib (lib dir if you use virtualenv), which is around 40MB. You could probably remove some stuff from that, but IMO that's not something you should mess with. I include the needed Qt libraries (QtCore and QtGui) inside the app so that users don't have to worry about it, this adds 70MB, so it's now the largest part. Unfortunately there aren't many ways to remove this without making it less fool-proof.
|
|
|
|
higuys
Newbie
Offline
Activity: 28
Merit: 0
|
|
March 10, 2013, 10:10:45 PM |
|
The resulting .app will work on the local machine (try "open dist/ArmoryQt.app"). But it depends on the system Python in a nonportable way. I am stuck here, and need to sleep on it. If anyone can use this as a starting point, and proceed from here, please do so! EDIT: The resulting app is 109 MB, but compresses to 32 in a tar.gz.
Imo py2app is a lost cause, making an app bundle really isn't that hard. Also, since it relies on the system python, which differs from 10.6 to 10.8, it adds some possibility for problems. Using virtualenv I have my app bundle at 134.8 MB and 38.3MB when zipped. http://imgur.com/8uVm8fv
|
|
|
|
picobit
|
|
March 10, 2013, 10:14:36 PM |
|
You are probably right - but py2app is at least a place to start. I will look at how you did it. I just tried your download, but unfortunately is misses a dependency (I am trying it out on an almost pristine MacBook): $ ./Armory.app/Contents/MacOS/Armory Traceback (most recent call last): File "armorysrc/ArmoryQt.py", line 31, in <module> from PyQt4.QtGui import * ImportError: dlopen(/Users/schiotz/test/Armory.app/Contents/MacOS/lib/python2.7/site-packages/PyQt4/QtGui.so, 2): Library not loaded: /usr/local/lib/libpng15.15.dylib Referenced from: /Users/schiotz/test/Armory.app/Contents/Dependencies/QtGui.framework/Versions/Current/QtGui Reason: image not found
|
|
|
|
higuys
Newbie
Offline
Activity: 28
Merit: 0
|
|
March 10, 2013, 10:16:15 PM |
|
The resulting .app will work on the local machine (try "open dist/ArmoryQt.app"). But it depends on the system Python in a nonportable way. I am stuck here, and need to sleep on it. If anyone can use this as a starting point, and proceed from here, please do so! EDIT: The resulting app is 109 MB, but compresses to 32 in a tar.gz.
Imo py2app is a lost cause, making an app bundle really isn't that hard. Also, since it relies on the system python, which differs from 10.6 to 10.8, it adds some possibility for problems. Using virtualenv I have my app bundle at 134.8 MB and 38.3MB when zipped. http://imgur.com/8uVm8fvAh, of course i forgot the Qt dependencies. I guess brew didn't remove them when I uninstalled qt. Let me add them real quick.
|
|
|
|
higuys
Newbie
Offline
Activity: 28
Merit: 0
|
|
March 10, 2013, 10:18:03 PM |
|
Working great so far on my Mac OSX 10.8.2, just needs to clean up the look a bit. Like add the armory logo, also in the dock it shows the name as python, and has a terminal logo.
I can't really do anything about it showing python in the dock, unless someone wants to dick around with PyObjC. I can give the app itself an armory logo easily, though.
|
|
|
|
higuys
Newbie
Offline
Activity: 28
Merit: 0
|
|
March 10, 2013, 10:23:12 PM Last edit: March 10, 2013, 10:52:04 PM by higuys |
|
Okay, I fixed the libpng problem. New app here: http://goo.gl/73v3bI wouldn't be surprised if there are more dependencies that I missed. Let me know if you come across any, adding them is trivial. I also updated the gist to reflect the changes I had to make.
|
|
|
|
vamdor
Newbie
Offline
Activity: 50
Merit: 0
|
|
March 10, 2013, 10:26:07 PM |
|
The check for virtualenv fails, I am not a shell script wizard, but I think it should be "if [ ! -x `which virtualenv` ];" (added exclamation mark) It also seems to miss the part needed for swig. And while I haven't tried that part of the script, I am surprised that PyQt built and installed without any problem. I had to modify all the makefiles, as the include directories pointed to the system dirs instead of the virtualenv ones, crashing the make & make install dance.
|
|
|
|
picobit
|
|
March 10, 2013, 10:29:25 PM |
|
Okay, I fixed the libpng problem. New app here: http://goo.gl/e3cCXI wouldn't be surprised if there are more dependencies that I missed. Let me know if you come across any, adding them is trivial. I also updated the gist to reflect the changes I had to make. $ ./Armory.app/Contents/MacOS/Armory 2013-03-10 23:27:37.915 python[573:707] *** WARNING: Method userSpaceScaleFactor in class NSView is deprecated on 10.7 and later. It should not be used in new applications. Use convertRectToBacking: instead. (ERROR) Traceback (most recent call last): File "armorysrc/ArmoryQt.py", line 3667, in <module> form = ArmoryMainWindow() File "armorysrc/ArmoryQt.py", line 106, in __init__ DlgEULA(self,self).exec_() File "/Volumes/Cipher/home/Desktop/BitcoinArmory/qtdialogs.py", line 3504, in __init__ ImportError: No module named LICENSE
Traceback (most recent call last): File "armorysrc/ArmoryQt.py", line 3667, in <module> form = ArmoryMainWindow() File "armorysrc/ArmoryQt.py", line 106, in __init__ DlgEULA(self,self).exec_() File "/Volumes/Cipher/home/Desktop/BitcoinArmory/qtdialogs.py", line 3504, in __init__ ImportError: No module named LICENSE
Something is still missing ... And the path /Volumes/Cipher/... looks wrong, it must be a path on your computer.
|
|
|
|
higuys
Newbie
Offline
Activity: 28
Merit: 0
|
|
March 10, 2013, 10:29:39 PM |
|
The check for virtualenv fails, I am not a shell script wizard, but I think it should be "if [ ! -x `which virtualenv` ];" (added exclamation mark) It also seems to miss the part needed for swig. And while I haven't tried that part of the script, I am surprised that PyQt built and installed without any problem. I had to modify all the makefiles, as the include directories pointed to the system dirs instead of the virtualenv ones, crashing the make & make install dance. Fixed the virtualenv problem. I didn't check for swig, because I assumed if they had qt, they had all of the other dependencies (bad assumption, I know). I'm absolutely shit at bash scripting, so there are likely more issues. I made this mostly to show how to do it manually. I'll test and fix bugs a little bit later, I need a break right now.
|
|
|
|
higuys
Newbie
Offline
Activity: 28
Merit: 0
|
|
March 10, 2013, 10:31:58 PM |
|
Okay, I fixed the libpng problem. New app here: http://goo.gl/e3cCXI wouldn't be surprised if there are more dependencies that I missed. Let me know if you come across any, adding them is trivial. I also updated the gist to reflect the changes I had to make. $ ./Armory.app/Contents/MacOS/Armory 2013-03-10 23:27:37.915 python[573:707] *** WARNING: Method userSpaceScaleFactor in class NSView is deprecated on 10.7 and later. It should not be used in new applications. Use convertRectToBacking: instead. (ERROR) Traceback (most recent call last): File "armorysrc/ArmoryQt.py", line 3667, in <module> form = ArmoryMainWindow() File "armorysrc/ArmoryQt.py", line 106, in __init__ DlgEULA(self,self).exec_() File "/Volumes/Cipher/home/Desktop/BitcoinArmory/qtdialogs.py", line 3504, in __init__ ImportError: No module named LICENSE
Traceback (most recent call last): File "armorysrc/ArmoryQt.py", line 3667, in <module> form = ArmoryMainWindow() File "armorysrc/ArmoryQt.py", line 106, in __init__ DlgEULA(self,self).exec_() File "/Volumes/Cipher/home/Desktop/BitcoinArmory/qtdialogs.py", line 3504, in __init__ ImportError: No module named LICENSE
Something is still missing ... And the path /Volumes/Cipher/... looks wrong, it must be a path on your computer. That is strange... Looks like I missed some settings files, or something.
|
|
|
|
higuys
Newbie
Offline
Activity: 28
Merit: 0
|
|
March 10, 2013, 10:44:54 PM |
|
I forgot to put License.pyc file in! Weird that it shows the path to my hard drive... I just tested it on my macbook that hasn't run Armory before, and it worked. I could still be missing dependencies though. Anyways, revision 3: http://goo.gl/73v3bThanks for being patient with me guys.
|
|
|
|
Mr. Coinman
|
|
March 10, 2013, 10:46:50 PM |
|
Okay, I'm whitelisted now. I see etotheipi posted my gist already. Here's my .app: http://goo.gl/WUmVcI'd love it if you guys test it, since I can't. Syncing the blockchain for the first time sucks. Some comments distributing python inside the app: The interpreter itself is really small, but the largest portion of any python distribution is the stdlib (lib dir if you use virtualenv), which is around 40MB. You could probably remove some stuff from that, but IMO that's not something you should mess with. I include the needed Qt libraries (QtCore and QtGui) inside the app so that users don't have to worry about it, this adds 70MB, so it's now the largest part. Unfortunately there aren't many ways to remove this without making it less fool-proof. Working great so far on my Mac OSX 10.8.2, just needs to clean up the look a bit. Like add the armory logo, also in the dock it shows the name as python, and has a terminal logo. I'm also on Mac OS X 10.8.2, but the app crashes every time I open it.
|
|
|
|
higuys
Newbie
Offline
Activity: 28
Merit: 0
|
|
March 10, 2013, 10:48:55 PM |
|
I'm also on Mac OS X 10.8.2, but the app crashes every time I open it.
Terminal output? Also, what version did you try? I've had to fix it three times already.
|
|
|
|
vamdor
Newbie
Offline
Activity: 50
Merit: 0
|
|
March 10, 2013, 10:57:54 PM |
|
Now it works on my mac. (the previous one had the same problem as listed above by picobit) And for the swig dependency: I am trying to install it within virtualenv, but it again mixes up the global directories and the virtualenv ones. Then I tried to put it in one of the locations the makefiles tries, but even then there is some problem... So the build process is definitely not as straight-forward as your hand-written script suggests (at least not when insisting on virtualenv)
|
|
|
|
|