Pages:
Author

Topic: The official Armory-for-OSX Bounty Thread [CLAIMED -- 25 BTC] - page 5. (Read 10448 times)

newbie
Activity: 28
Merit: 0
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.
sr. member
Activity: 277
Merit: 250
Okay, I'm whitelisted now. I see etotheipi posted my gist already.

Here's my .app: http://goo.gl/WUmVc

I'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.
newbie
Activity: 28
Merit: 0
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/73v3b

Thanks for being patient with me guys.
newbie
Activity: 28
Merit: 0
Okay, I fixed the libpng problem. New app here: http://goo.gl/e3cCX

I 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.

Code:
$ ./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
    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
    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.
newbie
Activity: 28
Merit: 0
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."

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.
hero member
Activity: 547
Merit: 500
Decor in numeris
Okay, I fixed the libpng problem. New app here: http://goo.gl/e3cCX

I 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.

Code:
$ ./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
    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
    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.

newbie
Activity: 50
Merit: 0
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."

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.
legendary
Activity: 1498
Merit: 1000
Okay, I'm whitelisted now. I see etotheipi posted my gist already.

Here's my .app: http://goo.gl/WUmVc

I'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.
newbie
Activity: 28
Merit: 0
Okay, I fixed the libpng problem. New app here: http://goo.gl/73v3b

I 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.
newbie
Activity: 28
Merit: 0

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.
newbie
Activity: 28
Merit: 0
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

Ah, of course i forgot the Qt dependencies. I guess brew didn't remove them when I uninstalled qt. Let me add them real quick.
hero member
Activity: 547
Merit: 500
Decor in numeris
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):

Code:
$ ./Armory.app/Contents/MacOS/Armory 
Traceback (most recent call last):
  File "armorysrc/ArmoryQt.py", line 31, in
    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
newbie
Activity: 28
Merit: 0
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
newbie
Activity: 28
Merit: 0
Okay, I'm whitelisted now. I see etotheipi posted my gist already.

Here's my .app: http://goo.gl/73v3b

I'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.
hero member
Activity: 547
Merit: 500
Decor in numeris
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):
Code:
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
Code:
sudo easy_install -U py2app

3) Compile Armory, then create the app with these commands
Code:
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)
Code:
"""
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:
Code:
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!)
Code:
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.
hero member
Activity: 614
Merit: 500
I'll donate if you'll just put the instructions I offered on the install page under the ubuntu instructions.

Can you link me?

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

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.
legendary
Activity: 1428
Merit: 1093
Core Armory Developer
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."
legendary
Activity: 1428
Merit: 1093
Core Armory Developer
I'll donate if you'll just put the instructions I offered on the install page under the ubuntu instructions.

Can you link me?

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

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.

  

sr. member
Activity: 277
Merit: 250
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:

hero member
Activity: 614
Merit: 500
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.
Pages:
Jump to: