From 148c760daa9cda02fbecddcb7d2cfeefc0086dc8 Mon Sep 17 00:00:00 2001 From: j Date: Tue, 19 Aug 2014 12:07:28 +0200 Subject: [PATCH] add install script and add link to dmg in README --- README.md | 8 ++- install | 174 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 181 insertions(+), 1 deletion(-) create mode 100755 install diff --git a/README.md b/README.md index ebc20cc..9855a92 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,13 @@ Open Media Library Install ------- - soon + To install the latest release on Linux run: + + curl https://git.0x2620.org/openmedialibrary.git/HEAD:/install | python2 + + on Mac OS X download this: + + http://downloads.openmedialibrary.com/Open%20Media%20Library.dmg Networking ---------- diff --git a/install b/install new file mode 100755 index 0000000..ea7c528 --- /dev/null +++ b/install @@ -0,0 +1,174 @@ +#!/usr/bin/env python2 +from __future__ import division, with_statement, print_function + +from contextlib import closing +import json +import os +import sys +import tarfile +try: +# For Python 3.0 and later + from urllib.request import urlopen +except ImportError: +# Fall back to Python 2's urllib2 + from urllib2 import urlopen +from threading import Thread +import subprocess + + +class Install(Thread): + + base_url = 'http://downloads.openmedialibrary.com/' + status = {} + + def __init__(self, target): + self.target = target + Thread.__init__(self) + self.daemon = True + self.start() + + def run(self): + target = self.target + target = os.path.normpath(os.path.join(os.path.abspath(target))) + if not os.path.exists(target): + os.makedirs(target) + os.chdir(target) + release = self.get_release() + self.status['release'] = release + for module in release['modules']: + self.status['installing'] = module + self.status['progress'] = 0 + self.status['size'] = 0 + package_tar = release['modules'][module]['name'] + url = self.url(package_tar) + self.download(url, package_tar) + tar = tarfile.open(package_tar) + tar.extractall() + tar.close() + os.unlink(package_tar) + os.symlink('openmedialibrary/ctl', 'ctl') + self.status['progress'] = 0 + self.status['installing'] = 'setup' + os.system('./ctl setup') + self.status['progress'] = 1 + with open('config/release.json', 'w') as fd: + json.dump(release, fd, indent=2) + if sys.platform == 'darwin': + self.install_launchd() + elif sys.platform == 'linux2': + try: + import Image + import simplejson + import lxml + except: + if has_bin('apt-get'): + os.system('sudo apt-get install python2.7 python-imaging python-lxml poppler-utils') + elif has_bin('yum'): + os.system('sudo yum install python-imaging python-simplejson python-lxml') + else: + print('You need to install PIL and simplejson\ni.e. sudo pip install --allow-external PIL --allow-unverified PIL PIL simplejson lxml') + if not has_bin('pdftocairo'): + if has_bin('apt-get'): + os.system('sudo apt-get install poppler-utils') + elif has_bin('yum'): + os.system('sudo yum install poppler-utils') + else: + print('You need to install pdftocairo (part of poppler-utils)') + self.install_application() + self.status['done'] = True + + def download(self, url, filename): + dirname = os.path.dirname(filename) + if dirname and not os.path.exists(dirname): + os.makedirs(dirname) + print(filename) + with open(filename, 'w') as f: + with closing(urlopen(url)) as u: + size = int(u.headers.get('content-length', 0)) + self.status['size'] = size + available = 0 + data = u.read(4096) + while data: + if size: + available += len(data) + self.status['progress'] = available/size + f.write(data) + data = u.read(4096) + + def get_release(self): + with closing(urlopen(self.url('release.json'))) as u: + data = json.loads(u.read().decode('utf-8')) + return data + + def install_application(self): + app = os.path.expanduser('~/.local/share/applications/openmedialibrary.desktop') + with open(app, 'w') as fd: + fd.write('''[Desktop Entry] +Type=Application +Name=Open Media Library +Comment=Open Media Library +Exec=%s/ctl open +Icon=%s/openmedialibrary/static/png/oml.png +Terminal=false +Categories=Network;FileTransfer;P2P; +''' % (self.target, self.target)) + + start = os.path.expanduser('~/.config/autostart/openmedialibrary.desktop') + with open(start, 'w') as fd: + fd.write('''[Desktop Entry] +Type=Application +Exec=%s/ctl start +Icon=%s/openmedialibrary/static/png/oml.png +Hidden=false +NoDisplay=false +X-GNOME-Autostart-enabled=true +Name=Start Open Media Library +Comment= +''' % (self.target, self.target)) + + def install_launchd(self): + plist = os.path.expanduser('~/Library/LaunchAgents/com.openmedialibrary.loginscript.plist') + with open(plist, 'w') as f: + f.write(''' + + + + Label + com.openmedialibrary.loginscript + ProgramArguments + + %s/ctl + start + + RunAtLoad + + +''' % self.target) + os.system('launchctl load "%s"' % plist) + os.system('launchctl start com.openmedialibrary.loginscript') + + def url(self, url): + return self.base_url + url + +def has_bin(cmd): + return subprocess.call(['which', cmd], stdout=subprocess.PIPE) == 0 + +if __name__ == '__main__': + if len(sys.argv) == 1: + if sys.platform == 'darwin': + target = os.path.expanduser('~/Library/Application Support/Open Media Libary') + elif sys.platform == 'linux2': + target = os.path.expanduser('~/.local/share/openmedialibrary') + else: + target = os.path.join(os.curdir, 'openmedialibrary') + elif len(sys.argv) != 2: + print('usage: %s [target]' % sys.argv[0]) + sys.exit(1) + else: + target = sys.argv[1] + if os.path.exists(target): + print('%s exists, remove before re-installing Open Media Library' % target) + sys.exit(1) + install = Install(target) + install.join() + subprocess.call([os.path.join(target, 'ctl'), 'open'])