diff --git a/setup.py b/setup.py index 4d562ff..cc90d86 100755 --- a/setup.py +++ b/setup.py @@ -36,6 +36,7 @@ prefix = sys.prefix lib_gbinstall = [ 'src/confirm_installation.py', + 'src/boot_manager.py', 'src/create_cfg.py', 'src/db_partition.py', 'src/end.py', diff --git a/src/boot_manager.py b/src/boot_manager.py new file mode 100644 index 0000000..b7fc71c --- /dev/null +++ b/src/boot_manager.py @@ -0,0 +1,103 @@ +#!/usr/local/bin/python3.6 +# +# Copyright (c) 2019 GhostBSD + +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk +import os +import os.path +from db_partition import bios_or_uefi + + +# Folder use pr the installer. +tmp = "/tmp/.gbinstall/" +installer = "/usr/local/lib/gbi/" +query = "sh /usr/local/etc/lib/backend-query/" +if not os.path.exists(tmp): + os.makedirs(tmp) + +logo = "/usr/local/lib/gbi/logo.png" +boot_file = '%sboot' % tmp +disk_schem = '%sscheme' % tmp +zfs_config = '%szfs_config' % tmp +ufs_config = tmp + 'ufs_config' + + +class bootManager(): + + def get_model(self): + return self.box1 + + def boot_manager(self, radiobutton, val): + self.boot = val + boot = open(boot_file, 'w') + boot.writelines(self.boot) + boot.close() + + def __init__(self): + self.box1 = Gtk.VBox(False, 0) + self.box1.show() + box2 = Gtk.VBox(False, 10) + # box2.set_border_width(10) + self.box1.pack_start(box2, False, False, 0) + box2.show() + if bios_or_uefi() == "UEFI": + loader = "UEFI" + else: + loader = "BIOS" + if os.path.exists(zfs_config): + # Disk Setup + read = open(zfs_config, 'r') + schem = read.read() + # os.remove(zfs_config) + elif os.path.exists(ufs_config): + # Disk Setup + read = open(ufs_config, 'r') + schem = read.readlines() + else: + # Sheme sheme + read = open(disk_schem, 'r') + schem = read.read() + if 'GPT' in schem: + scheme = 'GPT' + else: + scheme = 'MBR' + label = Gtk.Label("Boot Option", name="Header") + label.set_property("height-request", 40) + box2.pack_start(label, False, False, 0) + hbox = Gtk.HBox() + hbox.show() + box2.pack_start(hbox, True, True, 0) + bbox1 = Gtk.VBox() + bbox1.show() + self.refind = Gtk.RadioButton.new_with_label_from_widget(None, "Setup rEFInd boot manager") + bbox1.pack_start(self.refind, False, True, 10) + self.refind.connect("toggled", self.boot_manager, "refind") + self.refind.show() + if scheme == 'GPT' and loader == "UEFI": + self.refind.set_sensitive(True) + else: + self.refind.set_sensitive(False) + self.bsd = Gtk.RadioButton.new_with_label_from_widget(self.refind, "Setup FreeBSD boot manager") + bbox1.pack_start(self.bsd, False, True, 10) + self.bsd.connect("toggled", self.boot_manager, "bsd") + self.bsd.show() + if scheme == 'MBR': + self.bsd.set_sensitive(True) + else: + self.bsd.set_sensitive(False) + self.none = Gtk.RadioButton.new_with_label_from_widget(self.bsd, f"FreeBSD {loader} loader only") + bbox1.pack_start(self.none, False, True, 10) + self.none.connect("toggled", self.boot_manager, "none") + self.none.show() + hbox.pack_start(bbox1, False, False, 50) + self.none.set_active(True) + self.boot = "none" + boot = open(boot_file, 'w') + boot.writelines(self.boot) + boot.close() + self.box3 = Gtk.VBox(False, 0) + self.box3.set_border_width(0) + self.box1.pack_start(self.box3, True, True, 0) + return diff --git a/src/gbiWindow.py b/src/gbiWindow.py index de67740..b4b9095 100644 --- a/src/gbiWindow.py +++ b/src/gbiWindow.py @@ -47,6 +47,7 @@ from partition import Partitions from confirm_installation import Summary from use_zfs import ZFS from db_partition import partition_repos +from boot_manager import bootManager from install import installProgress, installSlide logo = "/usr/local/lib/gbinstall/logo.png" tmp = "/tmp/.gbinstall/" @@ -123,17 +124,28 @@ class MainWindow(): self.button3.set_sensitive(False) elif page == 2: self.partition.save_selection() + Mbox = Gtk.VBox(False, 0) + Mbox.show() + self.bootmanager = bootManager() + get_boot = self.bootmanager.get_model() + Mbox.pack_start(get_boot, True, True, 0) + label = Gtk.Label("Boot Option") + self.notebook.insert_page(Mbox, label, 3) + self.window.show_all() + self.notebook.next_page() + self.button3.set_sensitive(True) + elif page == 3: Rbox = Gtk.VBox(False, 0) Rbox.show() self.summary = Summary(self.button3) - get_root = self.summary.get_model() - Rbox.pack_start(get_root, True, True, 0) + get_summary = self.summary.get_model() + Rbox.pack_start(get_summary, True, True, 0) label = Gtk.Label("Root Password") self.button3.set_label("Install") - self.notebook.insert_page(Rbox, label, 3) + self.notebook.insert_page(Rbox, label, 4) self.window.show_all() self.notebook.next_page() - elif page == 3: + elif page == 4: # self.adduser.save_selection() Ibox = Gtk.VBox(False, 0) Ibox.show() @@ -141,7 +153,7 @@ class MainWindow(): get_install = install.get_model() Ibox.pack_start(get_install, True, True, 0) label = Gtk.Label("Installation") - self.notebook.insert_page(Ibox, label, 7) + self.notebook.insert_page(Ibox, label, 5) self.notebook.next_page() instpro = installProgress() progressBar = instpro.getProgressBar() @@ -158,7 +170,7 @@ class MainWindow(): current_page = self.notebook.get_current_page() if current_page == 1: self.button1.set_sensitive(False) - elif current_page == 3: + elif current_page == 4: self.button3.set_label("Next") self.notebook.prev_page() new_page = self.notebook.get_current_page()