-
Notifications
You must be signed in to change notification settings - Fork 3
/
__init__.py
160 lines (121 loc) · 4.71 KB
/
__init__.py
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
from datetime import datetime
from threading import Thread
from kernel_upgrader.utils.colors import *
from kernel_upgrader.utils.anim import *
def getHomeDir():
# type: () -> str
return "/home/kernel_upgrader"
def getLinuxVersion():
# type: () -> str
import subprocess
from kernel_upgrader.values.Constants import C_UNAME
command_execution = subprocess.run(C_UNAME.split(), stdout=subprocess.PIPE)
return command_execution.stdout.decode("utf-8")
def getCPUCount():
# type: () -> int
from psutil import cpu_count
return cpu_count()
def returnToHomeDir():
import os
os.chdir(getHomeDir())
def isDEBSystem():
# type: () -> bool
import subprocess
from kernel_upgrader.values.Constants import COMPILE_RPM_OR_DEB
try:
process = subprocess.Popen(COMPILE_RPM_OR_DEB.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
process.communicate()
return_code = process.returncode
if return_code != 0:
return True
else:
return False
except FileNotFoundError:
return True
def removeOldKernels():
import subprocess
from kernel_upgrader.values.Constants import C_CLEAN_KERNELS
subprocess.run(C_CLEAN_KERNELS.split(), stderr=subprocess.PIPE, stdout=subprocess.PIPE)
def cleanupOldLogs():
from kernel_upgrader.values.Constants import LOG_FILE_PATH, LOG_FILENAME, LOG_COMPILER_FILENAME, \
LOG_TARFILE_FILENAME, \
LOG_TARFILE_COMPILER_FILENAME
import tarfile
import os
kernel_log_filename = LOG_FILE_PATH + LOG_FILENAME
compiler_log_filename = LOG_FILE_PATH + LOG_COMPILER_FILENAME
tar_log_filename = LOG_FILE_PATH + LOG_TARFILE_FILENAME
tar_compiler_log_filename = LOG_FILE_PATH + LOG_TARFILE_COMPILER_FILENAME
if os.path.exists(kernel_log_filename):
if os.path.exists(tar_log_filename):
os.remove(tar_log_filename)
with tarfile.open(tar_log_filename, "w:gz") as tar:
tar.add(kernel_log_filename, arcname=os.path.basename(kernel_log_filename))
tar.close()
os.remove(kernel_log_filename)
if os.path.exists(compiler_log_filename):
if os.path.exists(tar_compiler_log_filename):
os.remove(tar_compiler_log_filename)
with tarfile.open(tar_compiler_log_filename, "w:gz") as tar:
tar.add(compiler_log_filename, arcname=os.path.basename(compiler_log_filename))
tar.close()
os.remove(compiler_log_filename)
def isRunningLinux():
import platform
return platform.system() == "Linux"
def isUserAdmin():
import os
# type: () -> bool
try:
return os.getuid() == 0
except AttributeError:
return False
def getFreeSpaceAvailable():
# type: () -> float
import os
home_dir = getHomeDir()
if not os.path.exists(home_dir):
os.makedirs(home_dir)
st = os.statvfs(home_dir)
return "%.2f" % (st.f_bavail * st.f_frsize / 1024 / 1024 / 1024)
def isRunningInBackground():
# type: () -> bool
import os
import sys
try:
if os.getpgrp() == os.tcgetpgrp(sys.stdout.fileno()):
return False
else:
return True
except OSError:
return True
def cleanupSpace():
import logging
import shutil
from kernel_upgrader.values.Constants import LOG_KERNEL
from kernel_upgrader.utils.colors import OutputColors as Colors
try:
shutil.rmtree(getHomeDir(), ignore_errors=True)
except OSError as e:
log = logging.getLogger(LOG_KERNEL)
log.error("There was an error while trying to clean data in \"" + getHomeDir() + "\". More info: " + str(e))
raise RuntimeError(Colors.FAIL + "We were not able to clean data in \"" + getHomeDir() + "\". Please, clean it"
" up manually.\n"
"More info available "
"on logs"
+ Colors.ENDC)
def exportVersion():
import pickle
from kernel_upgrader.values.Constants import OP_VERSION
filename = "version.json"
version_dict = {"version": OP_VERSION}
with open(filename, "wb") as file:
pickle.dump(version_dict, file, pickle.HIGHEST_PROTOCOL)
def isNewVersionAvailable():
# type: () -> bool
import requests
import pickle
from kernel_upgrader.values.Constants import OP_VERSION, OP_VERSION_RAW
response = requests.get(OP_VERSION_RAW)
version_dict = pickle.loads(response.content)
return version_dict["version"] != OP_VERSION