-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathinstall
executable file
·53 lines (42 loc) · 1.65 KB
/
install
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
__author__ = "Vadym Stupakov"
__email__ = "vadim.stupakov@gmail.com"
import os
import stat
import sys
from argparse import ArgumentParser
from pathlib import Path
from subprocess import run
ROOT_DIR = Path(__file__).absolute().parent.resolve()
ENV = os.environ.copy()
if __name__ == '__main__':
scripts = {s.stem:s for s in (ROOT_DIR / "lib").iterdir() if s.name.startswith("install_")}
parser = ArgumentParser(prog="install_linux.py")
parser.add_argument("--script", help="script to run", choices=scripts.keys(), default="install_linux")
parser.add_argument("--mode", help="Installation mode", choices=["gui", "headless"], default="headless")
parser.add_argument("--force_superuser", help="Install all from superuser. Use it for docker builds, for example",
action="store_true")
args = parser.parse_args()
env_args = {}
for k, v in args.__dict__.items():
if isinstance(v, bool):
v = str(int(v))
env_args[f"args_{k}".upper()] = v
ENV.update(env_args)
ENV["ROOT_DIR"] = ROOT_DIR.as_posix()
is_superuser = os.getuid() == 0
cmd = ["/bin/bash", (scripts[args.script]).as_posix()]
if is_superuser:
if args.force_superuser:
fake_sudo = ROOT_DIR / "lib/sudo"
fake_sudo.chmod(fake_sudo.stat().st_mode | stat.S_IEXEC)
ENV["PATH"] = f"{fake_sudo.parent}{os.pathsep}{ENV['PATH']}"
else:
print("Run this script without sudo!")
sys.exit(-1)
try:
ret = run(cmd, env=ENV)
sys.exit(ret.returncode)
except KeyboardInterrupt:
sys.exit(0)