mirror of
https://github.com/ddworken/hishtory.git
synced 2024-12-11 09:31:10 +01:00
638912b230
* Improve install.py script to attempt to detect when /tmp/ is noexec * Add test to install from python script at HEAD * Remove incorrect duplicated line * Delete the tmp hishtory-client download since it may be dropped in CWD rather than /tmp/
61 lines
2.5 KiB
Python
61 lines
2.5 KiB
Python
"""
|
|
A small install script to download the correct hishtory binary for the current OS/architecture.
|
|
The hishtory binary is in charge of installing itself, this just downloads the correct binary and
|
|
executes it.
|
|
"""
|
|
|
|
import json
|
|
import urllib.request
|
|
import platform
|
|
import sys
|
|
import os
|
|
|
|
with urllib.request.urlopen('https://api.hishtory.dev/api/v1/download') as response:
|
|
resp_body = response.read()
|
|
download_options = json.loads(resp_body)
|
|
|
|
if platform.system() == 'Linux' and platform.machine() == "x86_64":
|
|
download_url = download_options['linux_amd_64_url']
|
|
elif platform.system() == 'Linux' and platform.machine() == "aarch64":
|
|
download_url = download_options['linux_arm_64_url']
|
|
elif platform.system() == 'Linux' and platform.machine() == "armv7l":
|
|
download_url = download_options['linux_arm_7_url']
|
|
elif platform.system() == 'Darwin' and platform.machine() == 'arm64':
|
|
download_url = download_options['darwin_arm_64_url']
|
|
elif platform.system() == 'Darwin' and platform.machine() == 'x86_64':
|
|
download_url = download_options['darwin_amd_64_url']
|
|
else:
|
|
print(f"No hishtory binary for system={platform.system()}, machine={platform.machine()}!\nIf you believe this is a mistake, please open an issue here: https://github.com/ddworken/hishtory/issues")
|
|
sys.exit(1)
|
|
|
|
with urllib.request.urlopen(download_url) as response:
|
|
hishtory_binary = response.read()
|
|
|
|
def get_executable_tmpdir():
|
|
specified_dir = os.environ.get('TMPDIR', '')
|
|
if specified_dir:
|
|
return specified_dir
|
|
try:
|
|
if hasattr(os, 'ST_NOEXEC'):
|
|
if os.statvfs("/tmp").f_flag & os.ST_NOEXEC:
|
|
# /tmp/ is mounted as NOEXEC, so fall back to the current working directory
|
|
return os.getcwd()
|
|
except:
|
|
pass
|
|
return "/tmp/"
|
|
|
|
tmpFilePath = os.path.join(get_executable_tmpdir(), 'hishtory-client')
|
|
if os.path.exists(tmpFilePath):
|
|
os.remove(tmpFilePath)
|
|
with open(tmpFilePath, 'wb') as f:
|
|
f.write(hishtory_binary)
|
|
os.system('chmod +x ' + tmpFilePath)
|
|
cmd = tmpFilePath + ' install'
|
|
if os.environ.get('HISHTORY_OFFLINE'):
|
|
cmd += " --offline"
|
|
exitCode = os.system(cmd)
|
|
if exitCode != 0:
|
|
raise Exception("failed to install downloaded hishtory client via `" + tmpFilePath +" install` (is that directory mounted noexec? Consider setting an alternate directory via the TMPDIR environment variable)!")
|
|
os.remove(tmpFilePath)
|
|
print('Succesfully installed hishtory! Open a new terminal, try running a command, and then running `hishtory query`.')
|