-
-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #92 from drauger-os-development/testing
add compat_mode, tests, fix for NVMe/eMMC, and install reports
- Loading branch information
Showing
13 changed files
with
325 additions
and
104 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,10 @@ | ||
Package: system-installer | ||
Version: 2.4.3 | ||
Version: 2.5.0 | ||
Maintainer: Thomas Castleman <[email protected]> | ||
Homepage: https://github.com/drauger-os-development/system-installer | ||
Section: admin | ||
Architecture: amd64 | ||
Priority: important | ||
Depends: arch-install-scripts, python3 (>=3.6.7-1~18.04), bash, gir1.2-gtk-3.0 (>=3.24.12-1ubuntu1), coreutils (>=8.28-1ubuntu1), apt (>=1.6.11), squashfs-tools (>=1:4.3-6ubuntu0.18.04.1), zenity (>=3.28.1-1), grub2-common (>=2.02-2ubuntu8.13), initramfs-tools (>=0.130ubuntu3.8), systemd (>=237-3ubuntu10.24), locales (>=2.27-3ubuntu1), procps (>=2:3.3.12-3ubuntu1.1), grep (>=3.1-2), keyboard-configuration, util-linux (>=2.34-0.1ubuntu2), python3-parted (>=3.11.2), python3-psutil (>=5.5.0), python3-apt (>=2.0.0), python3-pycurl, python3-gnupg (>=0.4.5), python3-xmltodict (>=0.11.0) | ||
Depends: arch-install-scripts, python3 (>=3.6.7-1~18.04), bash, gir1.2-gtk-3.0 (>=3.24.12-1ubuntu1), coreutils (>=8.28-1ubuntu1), apt (>=1.6.11), squashfs-tools (>=1:4.3-6ubuntu0.18.04.1), zenity (>=3.28.1-1), grub2-common (>=2.02-2ubuntu8.13), initramfs-tools (>=0.130ubuntu3.8), systemd (>=237-3ubuntu10.24), locales (>=2.27-3ubuntu1), procps (>=2:3.3.12-3ubuntu1.1), grep (>=3.1-2), keyboard-configuration, util-linux (>=2.34-0.1ubuntu2), python3-parted (>=3.11.2), python3-psutil (>=5.5.0), python3-apt (>=2.0.0), python3-urllib3 (>=1.26.5-1~exp1), python3-gnupg (>=0.4.5), python3-xmltodict (>=0.11.0) | ||
Description: System Installer for Drauger OS | ||
System Installer for Drauger OS |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
#!/bin/bash | ||
# -*- coding: utf-8 -*- | ||
# | ||
# postinst.sh | ||
# | ||
# Copyright 2023 Thomas Castleman <[email protected]> | ||
# | ||
# This program is free software; you can redistribute it and/or modify | ||
# it under the terms of the GNU General Public License as published by | ||
# the Free Software Foundation; either version 2 of the License, or | ||
# (at your option) any later version. | ||
# | ||
# This program is distributed in the hope that it will be useful, | ||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
# GNU General Public License for more details. | ||
# | ||
# You should have received a copy of the GNU General Public License | ||
# along with this program; if not, write to the Free Software | ||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||
# MA 02110-1301, USA. | ||
# | ||
# | ||
if $(groups live | grep -vq "syslog"); then | ||
usermod -aG syslog live | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
#!/bin/bash | ||
# -*- coding: utf-8 -*- | ||
# | ||
# postrm.sh | ||
# | ||
# Copyright 2023 Thomas Castleman <[email protected]> | ||
# | ||
# This program is free software; you can redistribute it and/or modify | ||
# it under the terms of the GNU General Public License as published by | ||
# the Free Software Foundation; either version 2 of the License, or | ||
# (at your option) any later version. | ||
# | ||
# This program is distributed in the hope that it will be useful, | ||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
# GNU General Public License for more details. | ||
# | ||
# You should have received a copy of the GNU General Public License | ||
# along with this program; if not, write to the Free Software | ||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||
# MA 02110-1301, USA. | ||
# | ||
# | ||
if [ "$1" = "purge" ]; then | ||
user=$(grep "1000" /etc/passwd | sed 's/:/ /g' | awk '{print $1}') | ||
groups=$(groups $user | sed "s/$user : //" | sed 's/syslog//' | sed 's/ /,/g' | sed 's/,,/,/g') | ||
usermod -G "$groups" "$user" | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,7 +3,7 @@ | |
# | ||
# confirm.py | ||
# | ||
# Copyright 2022 Thomas Castleman <[email protected]> | ||
# Copyright 2023 Thomas Castleman <[email protected]> | ||
# | ||
# This program is free software; you can redistribute it and/or modify | ||
# it under the terms of the GNU General Public License as published by | ||
|
@@ -24,6 +24,7 @@ | |
"""Confirm UI for System Installer""" | ||
from __future__ import print_function | ||
from sys import argv, stderr | ||
import auto_partitioner as ap | ||
import gi | ||
gi.require_version('Gtk', '3.0') | ||
from gi.repository import Gtk | ||
|
@@ -153,6 +154,19 @@ def __init__(self, settings): | |
label12 = self._set_default_margins(label12) | ||
self.grid.attach(label12, 5, 5, 1, 1) | ||
|
||
if ap.is_EFI(): | ||
label31 = Gtk.Label() | ||
label31.set_markup(" <b>Compatibility Mode:</b> ") | ||
label31.set_justify(Gtk.Justification.CENTER) | ||
label31 = self._set_default_margins(label31) | ||
self.grid.attach(label31, 4, 6, 1, 1) | ||
|
||
label32 = Gtk.Label() | ||
label32.set_markup(str(settings["COMPAT_MODE"])) | ||
label32.set_justify(Gtk.Justification.CENTER) | ||
label32 = self._set_default_margins(label32) | ||
self.grid.attach(label32, 5, 6, 1, 1) | ||
|
||
sep1 = Gtk.Separator.new(Gtk.Orientation.VERTICAL) | ||
self.grid.attach(sep1, 6, 2, 1, 6) | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,7 +3,7 @@ | |
# | ||
# main.py | ||
# | ||
# Copyright 2022 Thomas Castleman <[email protected]> | ||
# Copyright 2023 Thomas Castleman <[email protected]> | ||
# | ||
# This program is free software; you can redistribute it and/or modify | ||
# it under the terms of the GNU General Public License as published by | ||
|
@@ -92,7 +92,8 @@ def __init__(self): | |
"disks": {"1": None, | ||
"2": None, | ||
"3": None, | ||
"4": None}}} | ||
"4": None}}, | ||
"COMPAT_MODE": ""} | ||
|
||
self.langs = {'Afar': "aa", 'Afrikaans': "af", 'Aragonese': "an", | ||
'Arabic': "ar", 'Asturian': "ast", 'Belarusian': "be", | ||
|
@@ -1624,7 +1625,7 @@ def options(self, button): | |
|
||
label1 = Gtk.Label() | ||
label1.set_markup(""" | ||
Install third-party packages such as NVIDIA drivers if necessary\t\t | ||
Install third-party packages, such as NVIDIA drivers, if necessary\t\t | ||
""") | ||
label1.set_justify(Gtk.Justification.LEFT) | ||
label1 = self._set_default_margins(label1) | ||
|
@@ -1662,32 +1663,41 @@ def options(self, button): | |
self.login = self._set_default_margins(self.login) | ||
self.grid.attach(self.login, 1, 7, 2, 1) | ||
|
||
self.compat_mode = Gtk.CheckButton.new_with_label("Enable Bootloader Compatibility Mode") | ||
if self.data["COMPAT_MODE"] == 1: | ||
self.compat_mode.set_active(True) | ||
self.compat_mode = self._set_default_margins(self.compat_mode) | ||
|
||
if ap.is_EFI(): | ||
label2 = Gtk.Label() | ||
label2.set_markup(""" | ||
Enable compatibility mode to improve installation reliability | ||
with some UEFI systems. Does <b>NOT</b> require internet.""") | ||
label2.set_justify(Gtk.Justification.LEFT) | ||
label2 = self._set_default_margins(label2) | ||
self.grid.attach(label2, 1, 8, 2, 1) | ||
|
||
self.grid.attach(self.compat_mode, 1, 9, 2, 1) | ||
|
||
button1 = Gtk.Button.new_with_label("Okay -->") | ||
button1.connect("clicked", self.options_next) | ||
button1 = self._set_default_margins(button1) | ||
self.grid.attach(button1, 2, 8, 1, 1) | ||
self.grid.attach(button1, 2, 10, 1, 1) | ||
|
||
button3 = Gtk.Button.new_with_label("<-- Back") | ||
button3.connect("clicked", self.main_menu) | ||
buton3 = self._set_default_margins(button3) | ||
self.grid.attach(button3, 1, 8, 1, 1) | ||
self.grid.attach(button3, 1, 10, 1, 1) | ||
|
||
self.show_all() | ||
|
||
def options_next(self, button): | ||
"""Set update and extras settings""" | ||
if self.extras.get_active(): | ||
self.data["EXTRAS"] = 1 | ||
else: | ||
self.data["EXTRAS"] = 0 | ||
# if self.updates.get_active(): | ||
# self.data["UPDATES"] = 1 | ||
# else: | ||
self.data["UPDATES"] = 0 | ||
if self.login.get_active(): | ||
self.data["LOGIN"] = 1 | ||
else: | ||
self.data["LOGIN"] = 0 | ||
self.data["EXTRAS"] = self.extras.get_active() | ||
# self.data["UPDATES"] = self.updates.get_active() | ||
self.data["UPDATES"] = False | ||
self.data["LOGIN"] = self.login.get_active() | ||
self.data["COMPAT_MODE"] = self.compat_mode.get_active() | ||
global OPTIONS_COMPLETION | ||
OPTIONS_COMPLETION = "COMPLETED" | ||
self.main_menu("clicked") | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -30,7 +30,7 @@ | |
import json | ||
import gnupg | ||
import gi | ||
import curl | ||
import urllib3 | ||
|
||
# Configuration required to use some of these libs | ||
gi.require_version('Gtk', '3.0') | ||
|
@@ -313,18 +313,18 @@ def send_report(self, widget): | |
self.show_all() | ||
|
||
try: | ||
copyfile(self.path, "/mnt/var/mail/installation_report.txt") | ||
copyfile(self.path, "/mnt/var/log/installation_report.txt") | ||
except: | ||
pass | ||
|
||
try: | ||
# Get keys | ||
cURL = curl.Curl() | ||
with open("../../../etc/system-installer/settings.json", | ||
http = urllib3.PoolManager() | ||
with open("/etc/system-installer/settings.json", | ||
"r") as config: | ||
URL = json.load(config)["report"] | ||
cURL.set_url(URL["recv_keys"]) | ||
key = cURL.get().decode() | ||
data = http.request("GET", URL["recv_keys"]).data | ||
key = data.decode() | ||
# Import keys | ||
result = gpg.import_keys(key) | ||
# Encrypt file using newly imported keys | ||
|
@@ -419,10 +419,12 @@ def generate_message(self): | |
"""write installation report to disk""" | ||
report_code = time.time() | ||
output = {} | ||
self.path = "/var/mail/installation_report-%s.dosir" % (report_code) | ||
self.path = "/var/log/installation_report-%s.dosir" % (report_code) | ||
output['Installation Report Code'] = report_code | ||
try: | ||
output['system-installer Version'] = check_output(["system-installer", "-v"]).decode() | ||
ver = check_output(["system-installer", "-v"]).decode().split("\n") | ||
ver = [each for each in ver if each != ""][0] | ||
output['system-installer Version'] = ver | ||
except (FileNotFoundError, CalledProcessError): | ||
output['system-installer Version'] = "VERSION UNKNOWN. LIKELY TESTING OR MAJOR ERROR." | ||
output['OS'] = get_info(["lsb_release", "-ds"])[0] | ||
|
@@ -445,7 +447,7 @@ def generate_message(self): | |
if self.log.get_active(): | ||
try: | ||
with open("/tmp/system-installer.log", "r") as log: | ||
output['INSTALLATION LOG'] = log.read() | ||
output['INSTALLATION LOG'] = log.read().split("\n") | ||
except FileNotFoundError: | ||
output['INSTALLATION LOG'] = 'Log does not exist.' | ||
else: | ||
|
@@ -467,7 +469,7 @@ def generate_message(self): | |
with open(self.path, "w+") as message: | ||
json.dump(output, message, indent=1) | ||
except PermissionError: | ||
with open(home + "/installation_report.txt", "w+") as message: | ||
with open(getenv("HOME") + "/installation_report.txt", "w+") as message: | ||
json.dump(output, message, indent=1) | ||
|
||
def message_accept(self, widget): | ||
|
@@ -597,54 +599,72 @@ def cpu_info(): | |
# We need to create a more intelligent parser for this data as positions can | ||
# change depending on the system that is being used. | ||
sentenal = 0 | ||
output = [] | ||
output = {} | ||
backup_speed = None | ||
count = 0 | ||
while sentenal < 7: | ||
for each in info: | ||
if sentenal == 0: | ||
if "Model name:" in each: | ||
output.append(each) | ||
add = [each1 for each1 in each.split(" ") if each1 != ""] | ||
if add[0][-1] == ":": | ||
add[0] = add[0][:-1] | ||
output[add[0]] = add[1] | ||
sentenal += 1 | ||
elif sentenal == 1: | ||
if "Thread(s) per core:" in each: | ||
output.append(each) | ||
add = [each1 for each1 in each.split(" ") if each1 != ""] | ||
if add[0][-1] == ":": | ||
add[0] = add[0][:-1] | ||
output[add[0]] = int(add[1]) | ||
sentenal += 1 | ||
elif sentenal == 2: | ||
if "Core(s) per socket:" in each: | ||
output.append(each) | ||
add = [each1 for each1 in each.split(" ") if each1 != ""] | ||
if add[0][-1] == ":": | ||
add[0] = add[0][:-1] | ||
output[add[0]] = int(add[1]) | ||
sentenal += 1 | ||
elif sentenal == 3: | ||
if "CPU max MHz:" in each: | ||
output.append(each) | ||
add = [each1 for each1 in each.split(" ") if each1 != ""] | ||
if add[0][-1] == ":": | ||
add[0] = add[0][:-1] | ||
output[add[0]] = float(add[1]) | ||
sentenal += 1 | ||
count = 0 | ||
elif count == len(info): | ||
count = 0 | ||
sentenal += 1 | ||
output.append("CPU max MHz:\t\t\tUnknown") | ||
output["CPU max MHz"] = "Unknown" | ||
else: | ||
count += 1 | ||
elif sentenal == 4: | ||
if "L2 cache:" in each: | ||
output.append(each) | ||
add = [each1 for each1 in each.split(" ") if each1 != ""] | ||
if add[0][-1] == ":": | ||
add[0] = add[0][:-1] | ||
output[add[0]] = add[1] | ||
sentenal += 1 | ||
count = 0 | ||
elif count == len(info): | ||
count = 0 | ||
sentenal += 1 | ||
output.append("L2 cache:\t\t\tUnknown") | ||
output["L2 cache"] = "Unknown" | ||
else: | ||
count += 1 | ||
elif sentenal == 5: | ||
if "L3 cache:" in each: | ||
output.append(each) | ||
add = [each1 for each1 in each.split(" ") if each1 != ""] | ||
if add[0][-1] == ":": | ||
add[0] = add[0][:-1] | ||
output[add[0]] = add[1] | ||
sentenal += 1 | ||
count = 0 | ||
elif count == len(info): | ||
count = 0 | ||
sentenal += 1 | ||
output.append("L3 cache:\t\t\tUnknown") | ||
output["L3 cache"] = "Unknown" | ||
else: | ||
count += 1 | ||
elif sentenal == 6: | ||
|
@@ -668,14 +688,19 @@ def cpu_info(): | |
speed = int(file.read()) / 1000 | ||
else: | ||
speed = backup_speed | ||
speed = f"CPU base MHz { speed }" | ||
output.insert(3, speed) | ||
return "\n".join(output) | ||
# speed = float(speed) | ||
output["CPU base MHz"] = speed | ||
return output | ||
|
||
|
||
def ram_info(): | ||
"""Get RAM info""" | ||
ram_capacity = check_output(["lsmem", "--summary=only"]).decode().split("\n") | ||
for each in enumerate(ram_capacity): | ||
ram_capacity[each[0]] = [each1 for each1 in each[1].split(" ") if each1 != ""] | ||
for each in range(len(ram_capacity) - 1, -1, -1): | ||
if ram_capacity[each] == []: | ||
del ram_capacity[each] | ||
swap_capacity = check_output(["swapon", "--show"]).decode().split("\n") | ||
return {"RAM": ram_capacity, "SWAP": swap_capacity} | ||
|
||
|
@@ -700,9 +725,3 @@ def get_info(cmd): | |
info = info.split("\n") | ||
return info | ||
|
||
|
||
def send_to(): | ||
try: | ||
return json.loads("/etc/system-installer/settings.json")["report_to"] | ||
except (FileNotFoundError, PermissionError, KeyError): | ||
return "[email protected]" |
Oops, something went wrong.