mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-07 10:14:46 -04:00
Implement #1830 (Add Exherbo to http://calibre.kovidgoyal.net/download_linux (Get Calibre / Linux))
This commit is contained in:
parent
e7cc8d990d
commit
08615ee359
@ -1,28 +1,9 @@
|
||||
__license__ = 'GPL v3'
|
||||
__copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
|
||||
import re
|
||||
from pkg_resources import resource_filename
|
||||
|
||||
from trac.core import Component, implements
|
||||
from trac.web.chrome import INavigationContributor, ITemplateProvider, add_stylesheet
|
||||
from trac.web.main import IRequestHandler
|
||||
from trac.util import Markup
|
||||
|
||||
|
||||
__appname__ = 'calibre'
|
||||
DOWNLOAD_DIR = '/var/www/calibre.kovidgoyal.net/htdocs/downloads'
|
||||
MOBILEREAD = 'https://dev.mobileread.com/dist/kovid/calibre/'
|
||||
import re
|
||||
|
||||
class OS(dict):
|
||||
"""Dictionary with a default value for unknown keys."""
|
||||
def __init__(self, dict):
|
||||
self.update(dict)
|
||||
if not dict.has_key('img'):
|
||||
self['img'] = self['name']
|
||||
|
||||
class Distribution(object):
|
||||
|
||||
DEPENDENCIES = [
|
||||
DEPENDENCIES = [
|
||||
#(Generic, version, gentoo, ubuntu, fedora)
|
||||
('python', '2.5', None, None, None),
|
||||
('setuptools', '0.6c5', 'setuptools', 'python-setuptools', 'python-setuptools-devel'),
|
||||
@ -30,7 +11,7 @@ class Distribution(object):
|
||||
('libusb', '0.1.12', None, None, None),
|
||||
('Qt', '4.4.0', 'qt', 'libqt4-core libqt4-gui', 'qt4'),
|
||||
('PyQt', '4.4.2', 'PyQt4', 'python-qt4', 'PyQt4'),
|
||||
('mechanize for python', '0.1.11', 'dev-python/mechanize', 'python-mechanize', 'python-mechanize'),
|
||||
('python-mechanize', '0.1.11', 'dev-python/mechanize', 'python-mechanize', 'python-mechanize'),
|
||||
('ImageMagick', '6.3.5', 'imagemagick', 'imagemagick', 'ImageMagick'),
|
||||
('xdg-utils', '1.0.2', 'xdg-utils', 'xdg-utils', 'xdg-utils'),
|
||||
('dbus-python', '0.82.2', 'dbus-python', 'python-dbus', 'dbus-python'),
|
||||
@ -40,54 +21,62 @@ class Distribution(object):
|
||||
('help2man', '1.36.4', 'help2man', 'help2man', 'help2man'),
|
||||
]
|
||||
|
||||
DISTRO_MAP = {'gentoo':2, 'ubuntu':3, 'fedora':4, 'debian':3}
|
||||
|
||||
INSTALLERS = ('emerge -avn', 'apt-get install', 'yum install')
|
||||
AS_ROOT = (True, False, True)
|
||||
class CoolDistro:
|
||||
|
||||
TITLEMAP = {'gentoo':'Gentoo', 'ubuntu':'Ubuntu Intrepid Ibex',
|
||||
'fedora':'Fedora 10', 'debian':'Debian sid', 'generic': 'Install from source'}
|
||||
def __init__(self, name, title, prefix=''):
|
||||
self.title = title
|
||||
url = prefix + '/chrome/dl/images/%s_logo.png'
|
||||
self.img = url%name
|
||||
|
||||
MANUAL_MAP = {
|
||||
'fedora' : '''<li>You have to upgrade Qt to at least 4.4.0 and PyQt to at least 4.4.2</li>''',
|
||||
}
|
||||
def get_linux_data(version='1.0.0'):
|
||||
data = {'version':version, 'app':__appname__}
|
||||
data['title'] = 'Download calibre for linux'
|
||||
data['supported'] = []
|
||||
for name, title in [
|
||||
('ubuntu', 'Ubuntu Jaunty Jackalope'),
|
||||
('debian', 'Debian Sid'),
|
||||
('exherbo', 'Exherbo'),
|
||||
]:
|
||||
data['supported'].append(CoolDistro(name, title,
|
||||
prefix='http://calibre.kovidgoyal.net'))
|
||||
data['dependencies'] = DEPENDENCIES
|
||||
return data
|
||||
|
||||
def __init__(self, os):
|
||||
self.os = os
|
||||
self.img = os
|
||||
self.title = self.TITLEMAP[os]
|
||||
self.app = __appname__
|
||||
self.is_generic = os == 'generic'
|
||||
offset = 0
|
||||
if not self.is_generic:
|
||||
index = self.DISTRO_MAP[self.os]
|
||||
if os == 'debian':
|
||||
self.as_root = True
|
||||
else: self.as_root = self.AS_ROOT[index-2]
|
||||
prefix = ''
|
||||
if not self.as_root: prefix = 'sudo '
|
||||
cmd = prefix + self.INSTALLERS[index-2]
|
||||
pre = ' \\\n '.ljust(len(cmd)+4)
|
||||
for dep in self.DEPENDENCIES:
|
||||
if len(cmd) > 70+offset:
|
||||
offset += 70
|
||||
cmd += pre
|
||||
cmd += ' '
|
||||
if dep[index]: cmd += dep[index]
|
||||
self.command = cmd.strip()
|
||||
easy_install = 'easy_install'
|
||||
if os == 'debian':
|
||||
easy_install = 'easy_install-2.5'
|
||||
self.command += '\n'+prefix+easy_install+' -U calibre \n'+prefix+'calibre_postinstall'
|
||||
try:
|
||||
self.manual = Markup(self.MANUAL_MAP[os])
|
||||
except KeyError:
|
||||
self.manual = None
|
||||
else:
|
||||
self.img = 'linux'
|
||||
if __name__ == '__main__':
|
||||
import os
|
||||
from calibre.utils.genshi.template import MarkupTemplate
|
||||
import cherrypy
|
||||
class Test:
|
||||
def index(self):
|
||||
raw = open(os.path.dirname(os.path.abspath(__file__))+'/templates/download.html').read()
|
||||
return MarkupTemplate(raw).generate(**get_linux_data()).render('xhtml')
|
||||
index.exposed = True
|
||||
t = Test()
|
||||
t.index()
|
||||
cherrypy.quickstart(t)
|
||||
else:
|
||||
from pkg_resources import resource_filename
|
||||
|
||||
from trac.core import Component, implements
|
||||
from trac.web.chrome import INavigationContributor, ITemplateProvider, add_stylesheet
|
||||
from trac.web.main import IRequestHandler
|
||||
from trac.util import Markup
|
||||
|
||||
|
||||
class Download(Component):
|
||||
|
||||
DOWNLOAD_DIR = '/var/www/calibre.kovidgoyal.net/htdocs/downloads'
|
||||
MOBILEREAD = 'https://dev.mobileread.com/dist/kovid/calibre/'
|
||||
|
||||
class OS(dict):
|
||||
"""Dictionary with a default value for unknown keys."""
|
||||
def __init__(self, dict):
|
||||
self.update(dict)
|
||||
if not dict.has_key('img'):
|
||||
self['img'] = self['name']
|
||||
|
||||
|
||||
class Download(Component):
|
||||
implements(INavigationContributor, IRequestHandler, ITemplateProvider)
|
||||
|
||||
request_pat = re.compile(r'\/download$|\/download_\S+')
|
||||
@ -130,12 +119,6 @@ class Download(Component):
|
||||
else:
|
||||
return self.linux_distro(req, os)
|
||||
|
||||
def linux_distro(self, req, os):
|
||||
version = self.version_from_filename()
|
||||
distro = Distribution(os)
|
||||
data = dict(distro=distro,title=distro.title, version=version)
|
||||
return 'distro.html', data, None
|
||||
|
||||
def top_level(self, req):
|
||||
operating_systems = [
|
||||
OS({'name' : 'windows', 'title' : 'Windows'}),
|
||||
@ -162,31 +145,31 @@ class Download(Component):
|
||||
compatibility='%s works on Windows XP and Windows Vista.'%(__appname__,),
|
||||
path=MOBILEREAD+file, app=__appname__,
|
||||
note=Markup(\
|
||||
'''
|
||||
<p>If you are using the <b>SONY PRS-500</b> and %(appname)s does not detect your reader, read on:</p>
|
||||
<blockquote>
|
||||
<p>
|
||||
If you are using 64-bit windows, you're out of luck.
|
||||
</p>
|
||||
<p>
|
||||
There may be a conflict with the USB driver from SONY. In windows, you cannot install two drivers
|
||||
for one device. In order to resolve the conflict:
|
||||
<ol>
|
||||
<li>Start Device Manager by clicking Start->Run, typing devmgmt.msc and pressing enter.</li>
|
||||
<li>Uninstall all PRS500 related drivers. You will find them in two locations:
|
||||
<ul>
|
||||
<li>Under "Libusb-Win32"</li>
|
||||
<li>Under "Universal Serial ..." (... depends on the version of windows)</li>
|
||||
</ul>
|
||||
You can uninstall a driver by right clicking on it and selecting uninstall.
|
||||
</li>
|
||||
<li>Once the drivers have been uninstalled, find the file prs500.inf (it will be in the
|
||||
driver folder in the folder in which you installed %(appname)s. Right click on it and
|
||||
select Install.</li>
|
||||
</ol>
|
||||
</p>
|
||||
</blockquote>
|
||||
'''%dict(appname=__appname__)))
|
||||
'''
|
||||
<p>If you are using the <b>SONY PRS-500</b> and %(appname)s does not detect your reader, read on:</p>
|
||||
<blockquote>
|
||||
<p>
|
||||
If you are using 64-bit windows, you're out of luck.
|
||||
</p>
|
||||
<p>
|
||||
There may be a conflict with the USB driver from SONY. In windows, you cannot install two drivers
|
||||
for one device. In order to resolve the conflict:
|
||||
<ol>
|
||||
<li>Start Device Manager by clicking Start->Run, typing devmgmt.msc and pressing enter.</li>
|
||||
<li>Uninstall all PRS500 related drivers. You will find them in two locations:
|
||||
<ul>
|
||||
<li>Under "Libusb-Win32"</li>
|
||||
<li>Under "Universal Serial ..." (... depends on the version of windows)</li>
|
||||
</ul>
|
||||
You can uninstall a driver by right clicking on it and selecting uninstall.
|
||||
</li>
|
||||
<li>Once the drivers have been uninstalled, find the file prs500.inf (it will be in the
|
||||
driver folder in the folder in which you installed %(appname)s. Right click on it and
|
||||
select Install.</li>
|
||||
</ol>
|
||||
</p>
|
||||
</blockquote>
|
||||
'''%dict(appname=__appname__)))
|
||||
return 'binary.html', data, None
|
||||
|
||||
def linux_binary(self, req):
|
||||
@ -202,35 +185,26 @@ select Install.</li>
|
||||
compatibility='%s works on OS X Tiger and above.'%(__appname__,),
|
||||
path=MOBILEREAD+file, app=__appname__,
|
||||
note=Markup(\
|
||||
'''
|
||||
<ol>
|
||||
<li>Before trying to use the command line tools, you must run the app at least once. This will ask you for you password and then setup the symbolic links for the command line tools.</li>
|
||||
<li>The app cannot be run from within the dmg. You must drag it to a folder on your filesystem (The Desktop, Applications, wherever).</li>
|
||||
<li>In order for localization of the user interface in your language, select your language in the configuration dialog (by clicking the hammer icon next to the search bar) and select your language.</li>
|
||||
</ol>
|
||||
'''))
|
||||
'''
|
||||
<ol>
|
||||
<li>Before trying to use the command line tools, you must run the app at least once. This will ask you for you password and then setup the symbolic links for the command line tools.</li>
|
||||
<li>The app cannot be run from within the dmg. You must drag it to a folder on your filesystem (The Desktop, Applications, wherever).</li>
|
||||
<li>In order for localization of the user interface in your language, select your language in the configuration dialog (by clicking the hammer icon next to the search bar) and select your language.</li>
|
||||
</ol>
|
||||
'''))
|
||||
return 'binary.html', data, None
|
||||
|
||||
def linux(self, req):
|
||||
operating_systems = [
|
||||
OS({'name' : 'binary', 'title': 'Binary Installer'}),
|
||||
OS({'name' : 'gentoo', 'title': 'Gentoo'}),
|
||||
OS({'name' : 'ubuntu', 'title': 'Ubuntu'}),
|
||||
OS({'name' : 'fedora', 'title': 'Fedora'}),
|
||||
OS({'name' : 'debian', 'title': 'Debian'}),
|
||||
OS({'name' : 'generic','title': 'Install from source', 'img':'linux'}),
|
||||
]
|
||||
data = dict(title='Choose linux distribution', width=100,
|
||||
operating_systems=operating_systems, font_size='x-large', top_level=False)
|
||||
data = get_linux_data(version=self.version_from_filename())
|
||||
return 'download.html', data, None
|
||||
|
||||
|
||||
LINUX_INSTALLER = r'''
|
||||
import sys, os, shutil, tarfile, subprocess, tempfile, urllib2, re, stat
|
||||
LINUX_INSTALLER = r'''
|
||||
import sys, os, shutil, tarfile, subprocess, tempfile, urllib2, re, stat
|
||||
|
||||
MOBILEREAD='https://dev.mobileread.com/dist/kovid/calibre/'
|
||||
MOBILEREAD='https://dev.mobileread.com/dist/kovid/calibre/'
|
||||
|
||||
class TerminalController:
|
||||
class TerminalController:
|
||||
BOL = '' #: Move the cursor to the beginning of the line
|
||||
UP = '' #: Move the cursor up one line
|
||||
DOWN = '' #: Move the cursor down one line
|
||||
@ -329,7 +303,7 @@ class TerminalController:
|
||||
if s == '$$': return s
|
||||
else: return getattr(self, s[2:-1])
|
||||
|
||||
class ProgressBar:
|
||||
class ProgressBar:
|
||||
BAR = '%3d%% ${GREEN}[${BOLD}%s%s${NORMAL}${GREEN}]${NORMAL}\n'
|
||||
HEADER = '${BOLD}${CYAN}%s${NORMAL}\n\n'
|
||||
|
||||
@ -364,7 +338,7 @@ class ProgressBar:
|
||||
self.term.UP + self.term.CLEAR_EOL)
|
||||
self.cleared = 1
|
||||
|
||||
def download_tarball():
|
||||
def download_tarball():
|
||||
try:
|
||||
pb = ProgressBar(TerminalController(sys.stdout), 'Downloading calibre...')
|
||||
except ValueError:
|
||||
@ -389,7 +363,7 @@ def download_tarball():
|
||||
f.seek(0)
|
||||
return f
|
||||
|
||||
def extract_tarball(tar, destdir):
|
||||
def extract_tarball(tar, destdir):
|
||||
print 'Extracting application files...'
|
||||
if hasattr(tar, 'read'):
|
||||
try:
|
||||
@ -399,7 +373,7 @@ def extract_tarball(tar, destdir):
|
||||
else:
|
||||
tarfile.open(tar, 'r').extractall(destdir)
|
||||
|
||||
def main():
|
||||
def main():
|
||||
defdir = '/opt/calibre'
|
||||
destdir = raw_input('Enter the installation directory for calibre (Its contents will be deleted!)[%s]: '%defdir).strip()
|
||||
if not destdir:
|
||||
@ -416,4 +390,5 @@ def main():
|
||||
pi = os.path.join(destdir, 'calibre_postinstall')
|
||||
subprocess.call(pi, shell=True)
|
||||
return 0
|
||||
'''
|
||||
'''
|
||||
|
||||
|
@ -6,36 +6,142 @@
|
||||
xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
<xi:include href="layout.html" />
|
||||
<head>
|
||||
<title>$title</title>
|
||||
<title>${title}</title>
|
||||
<style type="text/css">
|
||||
.distro_type {
|
||||
font-family: monospace;
|
||||
font-weight: bold;
|
||||
font-size: larger;
|
||||
text-align: center;
|
||||
border-bottom: solid 1pt black;
|
||||
}
|
||||
|
||||
.right {
|
||||
margin-left:2em;
|
||||
border-left: solid 1pt black;
|
||||
}
|
||||
|
||||
table#info {
|
||||
border-collapse: collapse;
|
||||
border-width: 1pt;
|
||||
border-style: solid;
|
||||
table-layout: fixed;
|
||||
width: 80%;
|
||||
}
|
||||
table#dependencies {
|
||||
border-collapse: collapse;
|
||||
border-width: 0pt;
|
||||
font-family:monospace;
|
||||
}
|
||||
.tdata {vertical-align: top;}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="ctxtnav" class="nav"></div>
|
||||
<p py:if="not top_level">If you have a 64bit computer, or an outdated operating system, the distribution
|
||||
specific installation may not work for you. In that case, first try the binary installer.
|
||||
If that also does not work, your only recourse is to try to install from source. In order
|
||||
to do that you will have to install all the dependencies as well as the -dev package of PyQt4.
|
||||
</p>
|
||||
|
||||
<div id="content" class="download">
|
||||
<h1>$title</h1>
|
||||
<center>
|
||||
<table cellspacing="40px">
|
||||
<tr>
|
||||
<td style="text-align:center; font-size: ${font_size}" py:for="os in operating_systems">
|
||||
<a href="download_${os['name']}" style="text-decoration:none; border:0;">
|
||||
<img width="${width}" height="${width+20}" src="${href.chrome('/dl/images/%s_logo.png'%(os['img'],))}" />
|
||||
</a>
|
||||
<a href="download_${os['name']}" style="text-decoration:none; border:0">
|
||||
<br />
|
||||
${os['title']}
|
||||
</a>
|
||||
<h1>${title}</h1>
|
||||
<p>
|
||||
The latest release of ${app} is ${version}. See the
|
||||
<a href="/wiki/Changelog">Changelog</a> for a list of new features.
|
||||
</p>
|
||||
<p>
|
||||
${app} is available in the software repositories of the following
|
||||
linux distributions:
|
||||
<table id="info">
|
||||
<col width="150" /><col width="*" />
|
||||
<tr class="distro_type">
|
||||
<td class="left">Supported distributions</td>
|
||||
<td class="right">Unsupported distributions</td>
|
||||
</tr>
|
||||
<tr class="tdata">
|
||||
<td class="left" style="overflow-y:scroll">
|
||||
<div py:for="distro in supported"
|
||||
style="text-align:center;margin-top:2ex;">
|
||||
<div>
|
||||
<img width="64px" height="64px"
|
||||
src="${distro.img}" alt="${distro.title}" />
|
||||
</div>
|
||||
${distro.title}
|
||||
</div>
|
||||
</td>
|
||||
<td class="right">
|
||||
<div style="margin-left:2em">
|
||||
<h3>Binary install</h3>
|
||||
<p>
|
||||
${app} has a binary installer that has been
|
||||
tested on a number of distributions on both
|
||||
32-bit and 64-bit x86 machines. To install,
|
||||
copy paste the following command into a terminal
|
||||
and press Enter:
|
||||
</p>
|
||||
<pre class="wiki">
|
||||
sudo python -c "import urllib2; exec urllib2.urlopen('http://calibre.kovidgoyal.net/download_linux_binary_installer').read(); main()"
|
||||
</pre>
|
||||
<h4>Note</h4>
|
||||
<ul>
|
||||
<li>
|
||||
When running the command line utilities,
|
||||
they will segfault after completion. This can
|
||||
be ignored.
|
||||
</li>
|
||||
<li>
|
||||
You must have help2man and xdg-utils installed
|
||||
on your system before running the installer.
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Source install</h3>
|
||||
<p>
|
||||
<ol>
|
||||
<li>
|
||||
Make sure your system has python ≥ ${dependencies[0][1]}
|
||||
</li>
|
||||
<li>
|
||||
Install the various dependencies listed below
|
||||
</li>
|
||||
<li>
|
||||
Run the following commands in a terminal:
|
||||
</li>
|
||||
</ol>
|
||||
<pre class="wiki">
|
||||
wget -O- http://calibre.kovidgoyal.net/downloads/${app}-${version}.tar.gz | tar xvz
|
||||
cd calibre*
|
||||
python setup.py build && sudo python setup.py install
|
||||
</pre>
|
||||
Note that if your distribution does not have a
|
||||
correctly compiled libunrar.so, ${app} will not
|
||||
support rar files.
|
||||
</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br />
|
||||
</p>
|
||||
<p>
|
||||
While you wait for the download to complete, please consider
|
||||
donating to support the development of ${app}.
|
||||
</p>
|
||||
<div>
|
||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
|
||||
<input type="hidden" name="cmd" value="_s-xclick" />
|
||||
<input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!" />
|
||||
<img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1" />
|
||||
<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----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-----END PKCS7-----" />
|
||||
</form>
|
||||
</div>
|
||||
<hr/>
|
||||
<h3>Dependencies</h3>
|
||||
${app} has the following dependencies (the listed version is the minimum version)
|
||||
<br/><br/>
|
||||
<table id="dependencies">
|
||||
<tr>
|
||||
<th style="margin-right:2em">Package</th><th>Version</th>
|
||||
</tr>
|
||||
|
||||
</center>
|
||||
<tr class="dependency" py:for="dep in dependencies">
|
||||
<td style="margin-right:2em">${dep[0]}</td><td>${dep[1]}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -58,7 +58,7 @@ class Checker(object):
|
||||
"specific sections. You must explicitly pass "
|
||||
"application config via "
|
||||
"cherrypy.tree.mount(..., config=app_config)")
|
||||
warnings.warn(msg)
|
||||
warnings.warn(msg[:5])
|
||||
return
|
||||
|
||||
def check_static_paths(self):
|
||||
|
Loading…
x
Reference in New Issue
Block a user