Allow a user to specify the version that is installed

This commit is contained in:
Michael Wittig 2019-10-13 18:48:46 +02:00
parent fe673838ef
commit 92c88b2637
2 changed files with 35 additions and 24 deletions

View File

@ -637,9 +637,14 @@ def extract_tarball(raw, destdir):
raise SystemExit(1) raise SystemExit(1)
def get_tarball_info(): def get_tarball_info(version):
global signature, calibre_version global signature, calibre_version
print ('Downloading tarball signature securely...') print ('Downloading tarball signature securely...')
if version:
signature = get_https_resource_securely(
'https://code.calibre-ebook.com/signatures/calibre-' + version + '-' + ('x86_64' if is64bit else 'i686') + '.txz.sha512')
calibre_version = version
else:
raw = get_https_resource_securely( raw = get_https_resource_securely(
'https://code.calibre-ebook.com/tarball-info/' + ('x86_64' if is64bit else 'i686')) 'https://code.calibre-ebook.com/tarball-info/' + ('x86_64' if is64bit else 'i686'))
signature, calibre_version = raw.rpartition(b'@')[::2] signature, calibre_version = raw.rpartition(b'@')[::2]
@ -648,8 +653,8 @@ def get_tarball_info():
calibre_version = calibre_version.decode('utf-8') calibre_version = calibre_version.decode('utf-8')
def download_and_extract(destdir): def download_and_extract(destdir, version):
get_tarball_info() get_tarball_info(version)
raw = download_tarball() raw = download_tarball()
if os.path.exists(destdir): if os.path.exists(destdir):
@ -666,7 +671,7 @@ def check_version():
calibre_version = urlopen('http://code.calibre-ebook.com/latest').read() calibre_version = urlopen('http://code.calibre-ebook.com/latest').read()
def run_installer(install_dir, isolated, bin_dir, share_dir): def run_installer(install_dir, isolated, bin_dir, share_dir, version):
destdir = os.path.abspath(os.path.expanduser(install_dir or '/opt')) destdir = os.path.abspath(os.path.expanduser(install_dir or '/opt'))
if destdir == '/usr/bin': if destdir == '/usr/bin':
prints(destdir, 'is not a valid install location. Choose', end='') prints(destdir, 'is not a valid install location. Choose', end='')
@ -679,7 +684,7 @@ def run_installer(install_dir, isolated, bin_dir, share_dir):
return 1 return 1
print('Installing to', destdir) print('Installing to', destdir)
download_and_extract(destdir) download_and_extract(destdir, version)
if not isolated: if not isolated:
pi = [os.path.join(destdir, 'calibre_postinstall')] pi = [os.path.join(destdir, 'calibre_postinstall')]
@ -727,7 +732,7 @@ def check_umask():
raise SystemExit('The system umask is unsuitable, aborting') raise SystemExit('The system umask is unsuitable, aborting')
def main(install_dir=None, isolated=False, bin_dir=None, share_dir=None, ignore_umask=False): def main(install_dir=None, isolated=False, bin_dir=None, share_dir=None, ignore_umask=False, version=None):
if not ignore_umask and not isolated: if not ignore_umask and not isolated:
check_umask() check_umask()
machine = os.uname()[4] machine = os.uname()[4]
@ -736,7 +741,7 @@ def main(install_dir=None, isolated=False, bin_dir=None, share_dir=None, ignore_
'You are running on an ARM system. The calibre binaries are only' 'You are running on an ARM system. The calibre binaries are only'
' available for x86 systems. You will have to compile from' ' available for x86 systems. You will have to compile from'
' source.') ' source.')
run_installer(install_dir, isolated, bin_dir, share_dir) run_installer(install_dir, isolated, bin_dir, share_dir, version)
try: try:
@ -767,7 +772,7 @@ def script_launch():
def to_bool(x): def to_bool(x):
return x.lower() in ('y', 'yes', '1', 'true') return x.lower() in ('y', 'yes', '1', 'true')
type_map = {x: path for x in 'install_dir isolated bin_dir share_dir ignore_umask'.split()} type_map = {x: path for x in 'install_dir isolated bin_dir share_dir ignore_umask version'.split()}
type_map['isolated'] = type_map['ignore_umask'] = to_bool type_map['isolated'] = type_map['ignore_umask'] = to_bool
kwargs = {} kwargs = {}

View File

@ -686,9 +686,14 @@ def extract_tarball(raw, destdir):
raise SystemExit(1) raise SystemExit(1)
def get_tarball_info(): def get_tarball_info(version):
global signature, calibre_version global signature, calibre_version
print ('Downloading tarball signature securely...') print ('Downloading tarball signature securely...')
if version:
signature = get_https_resource_securely(
'https://code.calibre-ebook.com/signatures/calibre-' + version + '-' + ('x86_64' if is64bit else 'i686') + '.txz.sha512')
calibre_version = version
else:
raw = get_https_resource_securely( raw = get_https_resource_securely(
'https://code.calibre-ebook.com/tarball-info/' + ('x86_64' if is64bit else 'i686')) 'https://code.calibre-ebook.com/tarball-info/' + ('x86_64' if is64bit else 'i686'))
signature, calibre_version = raw.rpartition(b'@')[::2] signature, calibre_version = raw.rpartition(b'@')[::2]
@ -697,8 +702,8 @@ def get_tarball_info():
calibre_version = calibre_version.decode('utf-8') calibre_version = calibre_version.decode('utf-8')
def download_and_extract(destdir): def download_and_extract(destdir, version):
get_tarball_info() get_tarball_info(version)
raw = download_tarball() raw = download_tarball()
if os.path.exists(destdir): if os.path.exists(destdir):
@ -715,7 +720,7 @@ def check_version():
calibre_version = urlopen('http://code.calibre-ebook.com/latest').read() calibre_version = urlopen('http://code.calibre-ebook.com/latest').read()
def run_installer(install_dir, isolated, bin_dir, share_dir): def run_installer(install_dir, isolated, bin_dir, share_dir, version):
destdir = os.path.abspath(os.path.expanduser(install_dir or '/opt')) destdir = os.path.abspath(os.path.expanduser(install_dir or '/opt'))
if destdir == '/usr/bin': if destdir == '/usr/bin':
prints(destdir, 'is not a valid install location. Choose', end='') prints(destdir, 'is not a valid install location. Choose', end='')
@ -728,7 +733,7 @@ def run_installer(install_dir, isolated, bin_dir, share_dir):
return 1 return 1
print('Installing to', destdir) print('Installing to', destdir)
download_and_extract(destdir) download_and_extract(destdir, version)
if not isolated: if not isolated:
pi = [os.path.join(destdir, 'calibre_postinstall')] pi = [os.path.join(destdir, 'calibre_postinstall')]
@ -776,7 +781,7 @@ def check_umask():
raise SystemExit('The system umask is unsuitable, aborting') raise SystemExit('The system umask is unsuitable, aborting')
def main(install_dir=None, isolated=False, bin_dir=None, share_dir=None, ignore_umask=False): def main(install_dir=None, isolated=False, bin_dir=None, share_dir=None, ignore_umask=False, version=None):
if not ignore_umask and not isolated: if not ignore_umask and not isolated:
check_umask() check_umask()
machine = os.uname()[4] machine = os.uname()[4]
@ -785,7 +790,7 @@ def main(install_dir=None, isolated=False, bin_dir=None, share_dir=None, ignore_
'You are running on an ARM system. The calibre binaries are only' 'You are running on an ARM system. The calibre binaries are only'
' available for x86 systems. You will have to compile from' ' available for x86 systems. You will have to compile from'
' source.') ' source.')
run_installer(install_dir, isolated, bin_dir, share_dir) run_installer(install_dir, isolated, bin_dir, share_dir, version)
try: try:
@ -797,7 +802,8 @@ except NameError:
def update_intaller_wrapper(): def update_intaller_wrapper():
# To run: python3 -c "import runpy; runpy.run_path('setup/linux-installer.py', run_name='update_wrapper')" # To run: python3 -c "import runpy; runpy.run_path('setup/linux-installer.py', run_name='update_wrapper')"
src = open(__file__, 'rb').read().decode('utf-8') with open(__file__, 'rb') as f:
src = f.read().decode('utf-8')
wrapper = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'linux-installer.sh') wrapper = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'linux-installer.sh')
with open(wrapper, 'r+b') as f: with open(wrapper, 'r+b') as f:
raw = f.read().decode('utf-8') raw = f.read().decode('utf-8')
@ -815,7 +821,7 @@ def script_launch():
def to_bool(x): def to_bool(x):
return x.lower() in ('y', 'yes', '1', 'true') return x.lower() in ('y', 'yes', '1', 'true')
type_map = {x: path for x in 'install_dir isolated bin_dir share_dir ignore_umask'.split()} type_map = {x: path for x in 'install_dir isolated bin_dir share_dir ignore_umask version'.split()}
type_map['isolated'] = type_map['ignore_umask'] = to_bool type_map['isolated'] = type_map['ignore_umask'] = to_bool
kwargs = {} kwargs = {}