8 Commits

Author SHA1 Message Date
Eric Turgeon 201f813ab0 Merge pull request #14 from Emsalettin1/turkishsupport
Added Turkish support
2026-06-03 17:13:07 -03:00
Emsalettin1 2c96c08333 Added turkish support 2026-05-20 17:17:55 +03:00
Eric Turgeon 3b5a409858 Merge pull request #13 from ghostbsd/rc
Add install_station service and Rework ZFS page UI layout and swap sizing
2026-05-13 23:10:57 -03:00
ericbsd 708aed30d6 Fix ZFS page validation and Next button reliability
Replace the swap size text entry with a SpinButton capped to the
selected disk size, consolidate _disk_count_valid and _update_next_button
into a single _is_ready method that checks all preconditions, update the
Next button from on_password_changed so it disables when passwords stop
matching, re-enable the Next button in back_page so navigating back no
longer leaves it stuck disabled, reduce the left panel gap, and fix a
startup crash from mirror_selection firing before swap_entry was created.
2026-05-13 19:23:54 -03:00
ericbsd 4d4c54671e Rework ZFS page UI layout and swap sizing
Redesign the ZFS configuration page with a two-column layout (settings
on the left, disk list on the right), add a user-editable swap size
field that defaults to actual RAM size, make the pool name always
editable, and simplify pool type values to plain identifiers (stripe,
mirror, raidz1/2/3). Consolidate duplicated next-button sensitivity
logic into _update_next_button(), replace deprecated Gtk.STOCK icons
with icon names, encrypt swap when GELI is enabled, and bump version
to 0.4.
2026-05-13 08:11:34 -03:00
ericbsd 6035e6355f Add install_station service and related configuration updates 2025-12-21 20:40:28 -04:00
Eric Turgeon 917823091e Merge pull request #12 from ghostbsd/fix/xinitrc-path-and-ui
Fix .xinitrc path and improve UI visibility in installation
2025-12-10 17:37:59 -04:00
ericbsd 19b027bc0b Fix .xinitrc path and improve UI visibility in installation
- Change .xinitrc path from `/usr/home/ghostbsd/` to `/home/ghostbsd/` for
  correct FreeBSD home directory handling
- Fix indentation of .xinitrc writelines() calls to be inside the file context
  manager (prevents potential file write errors)
- Add explicit label2.show() call in InstallWindow to ensure progress label
  visibility during installation

These changes ensure proper file handling in "Try Live" mode and improve
installation UI feedback reliability.
2025-12-10 17:33:12 -04:00
9 changed files with 377 additions and 344 deletions
+6
View File
@@ -156,5 +156,11 @@ class Configuration:
f.write("runCommand=pw userdel -n ghostbsd -r\n") f.write("runCommand=pw userdel -n ghostbsd -r\n")
f.write("runCommand=sed -i '' 's/ghostbsd/root/g' /etc/gettytab\n") f.write("runCommand=sed -i '' 's/ghostbsd/root/g' /etc/gettytab\n")
f.write("runCommand=sed -i '' 's/ghostbsd/root/g' /etc/ttys\n") f.write("runCommand=sed -i '' 's/ghostbsd/root/g' /etc/ttys\n")
f.write("runCommand=echo '# WARNING: Do NOT set initial_setup_enable=YES manually!' >> /etc/rc.conf\n")
f.write("runCommand=echo '# This service is ONLY for first boot after installation.' >> /etc/rc.conf\n")
f.write("runCommand=echo '# It will automatically disable itself after running.' >> /etc/rc.conf\n")
f.write("runCommand=sysrc initial_setup_enable=YES\n")
f.write("runCommand=sed -i '' '/^autologin-user=/d' /usr/local/etc/lightdm/lightdm.conf\n")
f.write("runCommand=sed -i '' '/^autologin-session=/d' /usr/local/etc/lightdm/lightdm.conf\n")
except IOError as e: except IOError as e:
raise IOError(f"Failed to write configuration file: {e}") from e raise IOError(f"Failed to write configuration file: {e}") from e
+1
View File
@@ -112,6 +112,7 @@ class InstallWindow:
label2.set_line_wrap(True) label2.set_line_wrap(True)
# label2.set_max_width_chars(10) # label2.set_max_width_chars(10)
label2.set_alignment(0.0, 0.2) label2.set_alignment(0.0, 0.2)
label2.show()
hbox2 = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, homogeneous=False, spacing=0, name="TransBox") hbox2 = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, homogeneous=False, spacing=0, name="TransBox")
hbox2.show() hbox2.show()
hbox.pack_start(hbox2, True, True, 0) hbox.pack_start(hbox2, True, True, 0)
+4 -4
View File
@@ -208,10 +208,10 @@ class Interface:
InstallationData.keyboard_variant, InstallationData.keyboard_variant,
InstallationData.keyboard_model_code InstallationData.keyboard_model_code
) )
with open('/usr/home/ghostbsd/.xinitrc', 'w') as xinitrc: with open('/home/ghostbsd/.xinitrc', 'w') as xinitrc:
xinitrc.writelines('gsettings set org.mate.SettingsDaemon.plugins.housekeeping active true &\n') xinitrc.writelines('gsettings set org.mate.SettingsDaemon.plugins.housekeeping active true &\n')
xinitrc.writelines('gsettings set org.mate.screensaver lock-enabled false &\n') xinitrc.writelines('gsettings set org.mate.screensaver lock-enabled false &\n')
xinitrc.writelines('exec ck-launch-session mate-session\n') xinitrc.writelines('exec ck-launch-session mate-session\n')
Gtk.main_quit() Gtk.main_quit()
elif page == 4: elif page == 4:
Button.show_back() Button.show_back()
@@ -298,4 +298,4 @@ class Interface:
current_page_widget = cls.page.get_nth_page(cls.page.get_current_page()) current_page_widget = cls.page.get_nth_page(cls.page.get_current_page())
title_text = cls.page.get_tab_label_text(current_page_widget) title_text = cls.page.get_tab_label_text(current_page_widget)
Window.set_title(title_text) Window.set_title(title_text)
# Button.next_button.set_sensitive(True) Button.next_button.set_sensitive(True)
+3 -2
View File
@@ -7,6 +7,7 @@ import re
from time import sleep from time import sleep
from subprocess import Popen, PIPE, STDOUT, call from subprocess import Popen, PIPE, STDOUT, call
from install_station.data import query, zfs_datasets, InstallationData from install_station.data import query, zfs_datasets, InstallationData
from install_station.system_calls import get_ram_size_mb
# Define required file paths # Define required file paths
@@ -779,7 +780,7 @@ class AutoFreeSpace:
InstallationData.slice = main_slice.replace(drive, "") InstallationData.slice = main_slice.replace(drive, "")
root_size = int(main_size) root_size = int(main_size)
swap_size = 2048 swap_size = get_ram_size_mb()
root_size -= swap_size root_size -= swap_size
part_list = disk_db[drive]['partitions'][main_slice]['partition-list'] part_list = disk_db[drive]['partitions'][main_slice]['partition-list']
@@ -861,7 +862,7 @@ class AutoFreeSpace:
InstallationData.disk = drive InstallationData.disk = drive
InstallationData.scheme = 'partscheme=GPT' InstallationData.scheme = 'partscheme=GPT'
root_size = int(main_size) root_size = int(main_size)
swap_size = 2048 swap_size = get_ram_size_mb()
root_size -= int(swap_size) root_size -= int(swap_size)
if self.bios_type == "UEFI" and efi_exist is False: if self.bios_type == "UEFI" and efi_exist is False:
boot_size = 256 boot_size = 256
+15
View File
@@ -258,6 +258,21 @@ def timezone_dictionary() -> dict[str, list[str]]:
return dictionary return dictionary
def get_ram_size_mb() -> int:
"""Query the system RAM size in megabytes using sysctl.
Returns:
System RAM size in MB
"""
output = Popen(
'sysctl -n hw.realmem',
shell=True,
stdout=PIPE,
universal_newlines=True
).stdout.read().strip()
return int(output) // 1048576
def zfs_disk_query() -> list[str]: def zfs_disk_query() -> list[str]:
"""Query available disks for ZFS installation. """Query available disks for ZFS installation.
+190 -242
View File
@@ -3,6 +3,7 @@ from install_station.common import password_strength
from install_station.data import InstallationData, zfs_datasets, be_name, logo, get_text from install_station.data import InstallationData, zfs_datasets, be_name, logo, get_text
from install_station.partition import bios_or_uefi from install_station.partition import bios_or_uefi
from install_station.system_calls import ( from install_station.system_calls import (
get_ram_size_mb,
zfs_disk_query, zfs_disk_query,
zfs_disk_size_query, zfs_disk_size_query,
) )
@@ -38,13 +39,13 @@ class ZFS:
zfs_disk_list = [] zfs_disk_list = []
pool_type = 'stripe' pool_type = 'stripe'
scheme = 'GPT' scheme = 'GPT'
zpool = False
disk_encrypt = False disk_encrypt = False
mirror = 'single disk' mirror = 'stripe'
vbox1 = None vbox1 = None
# UI elements as class variables # UI elements as class variables
pool = None pool = None
swap_entry = None
password = None password = None
repassword = None repassword = None
mirrorTips = None mirrorTips = None
@@ -69,28 +70,19 @@ class ZFS:
# Validate required fields are populated # Validate required fields are populated
if not cls.zfs_disk_list: if not cls.zfs_disk_list:
raise ValueError("No disks selected for ZFS configuration") raise ValueError("No disks selected for ZFS configuration")
if cls.zpool and not cls.pool.get_text().strip():
raise ValueError("Pool name cannot be empty when zpool is enabled")
if cls.disk_encrypt and not cls.password.get_text().strip(): if cls.disk_encrypt and not cls.password.get_text().strip():
raise ValueError("Password cannot be empty when disk encryption is enabled") raise ValueError("Password cannot be empty when disk encryption is enabled")
size = int(cls.zfs_disk_list[0].partition('-')[2].rstrip()) - 512 size = int(cls.zfs_disk_list[0].partition('-')[2].rstrip()) - 512
swap = 0 swap_size = cls.swap_entry.get_value_as_int()
zfs_num = size - swap zfs_num = size - swap_size
if cls.disk_encrypt is True: dgeli = '.eli' if cls.disk_encrypt else ''
dgeli = '.eli'
else:
dgeli = ''
# Store configuration data in InstallationData instead of writing to file # Store configuration data in InstallationData instead of writing to file
InstallationData.zfs_config_data = [] InstallationData.zfs_config_data = []
if cls.zpool is True: InstallationData.zfs_config_data.append(f"zpoolName={cls.pool.get_text()}\n")
InstallationData.zfs_config_data.append(f"zpoolName={cls.pool.get_text()}\n")
else:
InstallationData.zfs_config_data.append("#zpoolName=None\n")
InstallationData.zfs_config_data.append(f"beName={be_name}\n") InstallationData.zfs_config_data.append(f"beName={be_name}\n")
InstallationData.zfs_config_data.append('ashift=12\n\n') InstallationData.zfs_config_data.append('ashift=12\n\n')
disk = cls.zfs_disk_list[0].partition('-')[0].rstrip() disk = cls.zfs_disk_list[0].partition('-')[0].rstrip()
@@ -98,18 +90,13 @@ class ZFS:
InstallationData.zfs_config_data.append('partition=ALL\n') InstallationData.zfs_config_data.append('partition=ALL\n')
InstallationData.zfs_config_data.append(f'partscheme={cls.scheme}\n') InstallationData.zfs_config_data.append(f'partscheme={cls.scheme}\n')
InstallationData.zfs_config_data.append('commitDiskPart\n\n') InstallationData.zfs_config_data.append('commitDiskPart\n\n')
if cls.pool_type == 'none': if len(cls.zfs_disk_list) <= 1:
pool_disk = '\n' pool_disk = '\n'
else: else:
zfs_disk = cls.zfs_disk_list zfs_disk = cls.zfs_disk_list
disk_len = len(zfs_disk) - 1
num = 1
mirror_dsk = '' mirror_dsk = ''
while disk_len != 0: for i in range(1, len(zfs_disk)):
mirror_dsk += ' ' + zfs_disk[num].partition('-')[0].rstrip() mirror_dsk += ' ' + zfs_disk[i].partition('-')[0].rstrip()
print(mirror_dsk)
num += 1
disk_len -= 1
pool_disk = f' ({cls.pool_type}:{mirror_dsk})\n' pool_disk = f' ({cls.pool_type}:{mirror_dsk})\n'
if bios_or_uefi() == "UEFI": if bios_or_uefi() == "UEFI":
zfs_num = zfs_num - 100 zfs_num = zfs_num - 100
@@ -118,19 +105,51 @@ class ZFS:
# adding zero to use remaining space # adding zero to use remaining space
zfs_part = f'disk0-part=ZFS{dgeli} {zfs_num} {zfs_datasets}{pool_disk}' zfs_part = f'disk0-part=ZFS{dgeli} {zfs_num} {zfs_datasets}{pool_disk}'
InstallationData.zfs_config_data.append(zfs_part) InstallationData.zfs_config_data.append(zfs_part)
if swap != 0: # encpass must be on the line immediately after the .eli partition
InstallationData.zfs_config_data.append('disk0-part=swap 0 none\n') if cls.disk_encrypt:
if cls.disk_encrypt is True:
InstallationData.zfs_config_data.append(f'encpass={cls.password.get_text()}\n') InstallationData.zfs_config_data.append(f'encpass={cls.password.get_text()}\n')
else: else:
InstallationData.zfs_config_data.append('#encpass=None\n') InstallationData.zfs_config_data.append('#encpass=None\n')
if swap_size != 0:
if cls.disk_encrypt:
InstallationData.zfs_config_data.append('disk0-part=SWAP.eli 0 none\n')
else:
InstallationData.zfs_config_data.append('disk0-part=SWAP 0 none\n')
InstallationData.zfs_config_data.append('commitDiskLabel\n') InstallationData.zfs_config_data.append('commitDiskLabel\n')
@classmethod
def _is_ready(cls):
"""
Check if all conditions are met to proceed to the next page.
Returns:
bool: True if disk count, swap entry, and encryption requirements are all satisfied.
"""
count = len(cls.zfs_disk_list)
if cls.mirror == "stripe":
disks_ok = count >= 1
elif cls.mirror == "mirror":
disks_ok = count >= 2
elif cls.mirror == "raidz1":
disks_ok = count == 3
elif cls.mirror == "raidz2":
disks_ok = count == 4
elif cls.mirror == "raidz3":
disks_ok = count == 5
else:
disks_ok = False
if cls.disk_encrypt:
encrypt_ok = (cls.password.get_text() == cls.repassword.get_text()
and len(cls.password.get_text()) > 0)
else:
encrypt_ok = True
return disks_ok and encrypt_ok
@classmethod @classmethod
def scheme_selection(cls, combobox): def scheme_selection(cls, combobox):
""" """
Handle partition scheme selection from combo box. Handle partition scheme selection from combo box.
Args: Args:
combobox: ComboBox widget containing scheme options (GPT/MBR) combobox: ComboBox widget containing scheme options (GPT/MBR)
""" """
@@ -143,80 +162,48 @@ class ZFS:
def mirror_selection(cls, combobox): def mirror_selection(cls, combobox):
""" """
Handle pool type selection and update UI accordingly. Handle pool type selection and update UI accordingly.
Sets the pool type (stripe, mirror, RAIDZ1/2/3) and updates the tip text Sets the pool type (stripe, mirror, RAIDZ1/2/3) and updates the tip text
and next button sensitivity based on the number of selected disks. and next button sensitivity based on the number of selected disks.
Args: Args:
combobox: ComboBox widget containing pool type options combobox: ComboBox widget containing pool type options
""" """
model = combobox.get_model() model = combobox.get_model()
index = combobox.get_active() index = combobox.get_active()
data = model[index][0] # Get the internal value (English) data = model[index][0]
cls.mirror = data cls.mirror = data
if cls.mirror == "1+ disks Stripe": smallest_msg = get_text("(select the smallest disk first)")
if cls.mirror == "stripe":
cls.pool_type = 'stripe' cls.pool_type = 'stripe'
cls.mirrorTips.set_text( cls.mirrorTips.set_text(
get_text("Please select 1 or more drive for stripe (select the smallest disk first)")) get_text("Select 1 or more drives, no redundancy") + " " + smallest_msg)
if len(cls.zfs_disk_list) >= 1: elif cls.mirror == "mirror":
Button.next_button.set_sensitive(True)
else:
Button.next_button.set_sensitive(False)
elif cls.mirror == "2+ disks Mirror":
cls.pool_type = 'mirror' cls.pool_type = 'mirror'
mir_msg1 = get_text("Please select 2 drive for mirroring (select the smallest disk first)") cls.mirrorTips.set_text(
cls.mirrorTips.set_text(mir_msg1) get_text("Select 2 or more drives for mirroring") + " " + smallest_msg)
if len(cls.zfs_disk_list) >= 2: elif cls.mirror == "raidz1":
Button.next_button.set_sensitive(True)
else:
Button.next_button.set_sensitive(False)
elif cls.mirror == "3 disks RAIDZ1":
cls.pool_type = 'raidz1' cls.pool_type = 'raidz1'
cls.mirrorTips.set_text(get_text("Please select 3 drive for RAIDZ1 (select the smallest disk first)")) cls.mirrorTips.set_text(
if len(cls.zfs_disk_list) == 3: get_text("Select 3 drives for RAIDZ1") + " " + smallest_msg)
Button.next_button.set_sensitive(True) elif cls.mirror == "raidz2":
else:
Button.next_button.set_sensitive(False)
elif cls.mirror == "4 disks RAIDZ2":
cls.pool_type = 'raidz2' cls.pool_type = 'raidz2'
cls.mirrorTips.set_text(get_text("Please select 4 drive for RAIDZ2 (select the smallest disk first)")) cls.mirrorTips.set_text(
if len(cls.zfs_disk_list) == 4: get_text("Select 4 drives for RAIDZ2") + " " + smallest_msg)
Button.next_button.set_sensitive(True) elif cls.mirror == "raidz3":
else:
Button.next_button.set_sensitive(False)
elif cls.mirror == "5 disks RAIDZ3":
cls.pool_type = 'raidz3' cls.pool_type = 'raidz3'
cls.mirrorTips.set_text(get_text("Please select 5 drive for RAIDZ3 (select the smallest disk first)")) cls.mirrorTips.set_text(
if len(cls.zfs_disk_list) == 5: get_text("Select 5 drives for RAIDZ3") + " " + smallest_msg)
Button.next_button.set_sensitive(True) Button.next_button.set_sensitive(cls._is_ready())
else:
Button.next_button.set_sensitive(False)
@classmethod
def on_check_poll(cls, widget):
"""
Handle custom pool name checkbox toggle.
Enables or disables the pool name entry field based on checkbox state.
Args:
widget: CheckButton widget for pool name enable/disable
"""
if widget.get_active():
cls.pool.set_sensitive(True)
cls.zpool = True
else:
cls.pool.set_sensitive(False)
cls.zpool = False
@classmethod @classmethod
def on_check_encrypt(cls, widget): def on_check_encrypt(cls, widget):
""" """
Handle disk encryption checkbox toggle. Handle disk encryption checkbox toggle.
Enables or disables password fields and updates next button sensitivity Enables or disables password fields and updates next button sensitivity
based on encryption state and current disk selection. based on encryption state and current disk selection.
Args: Args:
widget: CheckButton widget for disk encryption enable/disable widget: CheckButton widget for disk encryption enable/disable
""" """
@@ -229,31 +216,21 @@ class ZFS:
cls.password.set_sensitive(False) cls.password.set_sensitive(False)
cls.repassword.set_sensitive(False) cls.repassword.set_sensitive(False)
cls.disk_encrypt = False cls.disk_encrypt = False
if cls.mirror == "1+ disks Stripe": Button.next_button.set_sensitive(cls._is_ready())
if len(cls.zfs_disk_list) >= 1:
Button.next_button.set_sensitive(True) @classmethod
else: def on_password_changed(cls, _widget):
Button.next_button.set_sensitive(False) """
elif cls.mirror == "2+ disks Mirror": Handle password entry changes and update strength display.
if len(cls.zfs_disk_list) >= 2:
Button.next_button.set_sensitive(True) Wraps the common password_strength function to extract the text
else: from the Entry widget and pass it with the strength label.
Button.next_button.set_sensitive(False)
elif cls.mirror == "3 disks RAIDZ1": Args:
if len(cls.zfs_disk_list) == 3: _widget: Entry widget that triggered the change (unused)
Button.next_button.set_sensitive(True) """
else: password_strength(cls.password.get_text(), cls.strenght_label)
Button.next_button.set_sensitive(False) Button.next_button.set_sensitive(cls._is_ready())
elif cls.mirror == "4 disks RAIDZ2":
if len(cls.zfs_disk_list) == 4:
Button.next_button.set_sensitive(True)
else:
Button.next_button.set_sensitive(False)
elif cls.mirror == "5 disks RAIDZ3":
if len(cls.zfs_disk_list) == 5:
Button.next_button.set_sensitive(True)
else:
Button.next_button.set_sensitive(False)
@classmethod @classmethod
def initialize(cls): def initialize(cls):
@@ -271,7 +248,8 @@ class ZFS:
""" """
cls.vbox1 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0) cls.vbox1 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0)
cls.vbox1.show() cls.vbox1.show()
# Chose disk
# Disk list in a scrolled window
sw = Gtk.ScrolledWindow(hexpand=True, vexpand=True) sw = Gtk.ScrolledWindow(hexpand=True, vexpand=True)
sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN) sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN)
sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
@@ -319,37 +297,39 @@ class ZFS:
tree_selection.set_mode(Gtk.SelectionMode.SINGLE) tree_selection.set_mode(Gtk.SelectionMode.SINGLE)
sw.add(treeview) sw.add(treeview)
sw.show() sw.show()
cls.mirrorTips = Gtk.Label(label=get_text('Please select one drive')) cls.mirrorTips = Gtk.Label(label=get_text('Please select one drive'))
cls.mirrorTips.set_justify(Gtk.Justification.LEFT) cls.mirrorTips.set_justify(Gtk.Justification.LEFT)
cls.mirrorTips.set_alignment(0.01, 0.5) cls.mirrorTips.set_alignment(0.01, 0.5)
# Mirror, raidz and stripe
cls.mirror = 'none'
mirror_label = Gtk.Label(label=get_text('<b>Pool Type</b>'))
mirror_label.set_use_markup(True)
mirror_box = Gtk.ComboBox()
mirror_store = Gtk.ListStore(str, str) # value, display_text
mirror_store.append(["1+ disks Stripe", get_text("1+ disks Stripe")])
mirror_store.append(["2+ disks Mirror", get_text("2+ disks Mirror")])
mirror_store.append(["3 disks RAIDZ1", get_text("3 disks RAIDZ1")])
mirror_store.append(["4 disks RAIDZ2", get_text("4 disks RAIDZ2")])
mirror_store.append(["5 disks RAIDZ3", get_text("5 disks RAIDZ3")])
mirror_box.set_model(mirror_store)
renderer = Gtk.CellRendererText()
mirror_box.pack_start(renderer, True)
mirror_box.add_attribute(renderer, "text", 1) # Display column 1 (translated text)
mirror_box.connect('changed', cls.mirror_selection)
mirror_box.set_active(0)
# Pool Name # Pool Layout
cls.zpool = False cls.mirror = 'stripe'
pool_name_label = Gtk.Label(label=get_text('<b>Pool Name</b>')) mirror_label = Gtk.Label(label=get_text('Pool Layout'))
pool_name_label.set_use_markup(True) mirror_label.set_use_markup(True)
mirror_box = Gtk.ComboBoxText()
mirror_box.append_text("stripe")
mirror_box.append_text("mirror")
mirror_box.append_text("raidz1")
mirror_box.append_text("raidz2")
mirror_box.append_text("raidz3")
mirror_box.set_active(0)
mirror_box.connect('changed', cls.mirror_selection)
# Pool Name (always editable)
pool_label = Gtk.Label(label=get_text('Pool Name'))
pool_label.set_use_markup(True)
cls.pool = Gtk.Entry() cls.pool = Gtk.Entry()
cls.pool.set_text('zroot') cls.pool.set_text('zroot')
# Swap Size
swap_label = Gtk.Label(label=get_text('Swap Size(MB)'))
swap_label.set_use_markup(True)
ram_mb = get_ram_size_mb()
adj = Gtk.Adjustment(ram_mb, 0, ram_mb, 1, 100, 0)
cls.swap_entry = Gtk.SpinButton(adjustment=adj, numeric=True)
cls.swap_entry.set_editable(True)
# Creating MBR or GPT drive # Creating MBR or GPT drive
scheme_label = Gtk.Label(label='<b>Partition Scheme</b>')
scheme_label.set_use_markup(True)
# Adding a combo box to selecting MBR or GPT sheme.
cls.scheme = 'GPT' cls.scheme = 'GPT'
shemebox = Gtk.ComboBoxText() shemebox = Gtk.ComboBoxText()
shemebox.append_text("GPT") shemebox.append_text("GPT")
@@ -360,52 +340,85 @@ class ZFS:
shemebox.set_sensitive(False) shemebox.set_sensitive(False)
else: else:
shemebox.set_sensitive(True) shemebox.set_sensitive(True)
# GELI Disk encryption # GELI Disk encryption
cls.disk_encrypt = False cls.disk_encrypt = False
encrypt_check = Gtk.CheckButton(label=get_text("Encrypt Disk")) encrypt_check = Gtk.CheckButton(label=get_text("Encrypt Disk (GELI)"))
encrypt_check.connect("toggled", cls.on_check_encrypt) encrypt_check.connect("toggled", cls.on_check_encrypt)
encrypt_check.set_sensitive(True) encrypt_check.set_sensitive(True)
# password
# Password
cls.passwd_label = Gtk.Label(label=get_text("Password")) cls.passwd_label = Gtk.Label(label=get_text("Password"))
cls.password = Gtk.Entry() cls.password = Gtk.Entry()
cls.password.set_sensitive(False) cls.password.set_sensitive(False)
cls.password.set_visibility(False) cls.password.set_visibility(False)
cls.password.connect("changed", password_strength) cls.password.connect("changed", cls.on_password_changed)
cls.strenght_label = Gtk.Label() cls.strenght_label = Gtk.Label()
cls.strenght_label.set_alignment(0.1, 0.5) cls.strenght_label.set_alignment(0.1, 0.5)
cls.vpasswd_label = Gtk.Label(label=get_text("Verify it")) cls.strenght_label.set_size_request(-1, 20)
# Verify password
cls.vpasswd_label = Gtk.Label(label=get_text("Confirm"))
cls.repassword = Gtk.Entry() cls.repassword = Gtk.Entry()
cls.repassword.set_sensitive(False) cls.repassword.set_sensitive(False)
cls.repassword.set_visibility(False) cls.repassword.set_visibility(False)
cls.repassword.connect("changed", cls.password_verification) cls.repassword.connect("changed", cls.password_verification)
# set image for password matching
# Password match image
cls.img = Gtk.Image() cls.img = Gtk.Image()
cls.img.set_alignment(0.2, 0.5) cls.img.set_size_request(20, 20)
# table = Gtk.Table(12, 12, True)
grid = Gtk.Grid() # Two-column layout: left settings, right disk list
grid.set_row_spacing(10) hbox_main = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, homogeneous=False, spacing=10)
# grid.set_column_homogeneous(True)
# grid.set_row_homogeneous(True) # Left panel: settings grid
# grid.attach(Title, 1, 1, 10, 1) left_grid = Gtk.Grid()
grid.attach(mirror_label, 1, 2, 1, 1) left_grid.set_row_spacing(4)
grid.attach(mirror_box, 2, 2, 1, 1) left_grid.set_column_spacing(6)
grid.attach(pool_name_label, 7, 2, 2, 1) left_grid.set_hexpand(False)
grid.attach(cls.pool, 9, 2, 2, 1)
grid.attach(cls.mirrorTips, 1, 3, 8, 1) mirror_label.set_alignment(0, 0.5)
# grid.attach(zfs4kcheck, 9, 3, 2, 1) pool_label.set_alignment(0, 0.5)
grid.attach(sw, 1, 4, 10, 3) swap_label.set_alignment(0, 0.5)
# grid.attach(scheme_label, 1, 9, 1, 1) cls.passwd_label.set_alignment(0, 0.5)
# grid.attach(shemebox, 2, 9, 1, 1) cls.vpasswd_label.set_alignment(0, 0.5)
# grid.attach(cls.swap_encrypt_check, 9, 15, 11, 12)
# grid.attach(swap_mirror_check, 9, 15, 11, 12) # Row 0-1: Pool Layout
# grid.attach(encrypt_check, 2, 8, 2, 1) left_grid.attach(mirror_label, 0, 0, 2, 1)
# grid.attach(cls.passwd_label, 1, 9, 1, 1) left_grid.attach(mirror_box, 0, 1, 2, 1)
# grid.attach(cls.password, 2, 9, 2, 1) # Row 2-3: Pool Name
# grid.attach(cls.strenght_label, 4, 9, 2, 1) left_grid.attach(pool_label, 0, 2, 2, 1)
# grid.attach(cls.vpasswd_label, 1, 10, 1, 1) left_grid.attach(cls.pool, 0, 3, 2, 1)
# grid.attach(cls.repassword, 2, 10, 2, 1) # Row 4-5: Swap Size
# grid.attach(cls.img, 4, 10, 2, 1) left_grid.attach(swap_label, 0, 4, 2, 1)
cls.vbox1.pack_start(grid, True, True, 10) left_grid.attach(cls.swap_entry, 0, 5, 2, 1)
# Row 6: Separator
sep = Gtk.Separator(orientation=Gtk.Orientation.HORIZONTAL)
left_grid.attach(sep, 0, 6, 2, 1)
# Row 7: Encrypt Disk checkbox
left_grid.attach(encrypt_check, 0, 7, 2, 1)
# Row 8: Password label + strength indicator
left_grid.attach(cls.passwd_label, 0, 8, 1, 1)
left_grid.attach(cls.strenght_label, 1, 8, 1, 1)
# Row 9: Password input
left_grid.attach(cls.password, 0, 9, 2, 1)
# Row 10: Confirm label + match icon
left_grid.attach(cls.vpasswd_label, 0, 10, 1, 1)
left_grid.attach(cls.img, 1, 10, 1, 1)
# Row 11: Confirm input
left_grid.attach(cls.repassword, 0, 11, 2, 1)
hbox_main.pack_start(left_grid, False, False, 10)
# Right panel: tips + disk list
right_panel = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0)
cls.mirrorTips.set_alignment(0, 0.5)
right_panel.pack_start(cls.mirrorTips, False, False, 0)
right_panel.pack_start(sw, True, True, 0)
hbox_main.pack_start(right_panel, True, True, 10)
cls.vbox1.pack_start(hbox_main, True, True, 10)
return return
@classmethod @classmethod
@@ -465,62 +478,21 @@ class ZFS:
model[path][3] = not model[path][3] model[path][3] = not model[path][3]
if model[path][3] is False: if model[path][3] is False:
cls.zfs_disk_list.remove(model[path][0] + "-" + model[path][1]) cls.zfs_disk_list.remove(model[path][0] + "-" + model[path][1])
if cls.mirror == "1+ disks Stripe":
if len(cls.zfs_disk_list) >= 1:
Button.next_button.set_sensitive(True)
else:
Button.next_button.set_sensitive(False)
elif cls.mirror == "2+ disks Mirror":
if len(cls.zfs_disk_list) >= 2:
Button.next_button.set_sensitive(True)
else:
Button.next_button.set_sensitive(False)
elif cls.mirror == "3 disks RAIDZ1":
if len(cls.zfs_disk_list) == 3:
Button.next_button.set_sensitive(True)
else:
Button.next_button.set_sensitive(False)
elif cls.mirror == "4 disks RAIDZ2":
if len(cls.zfs_disk_list) == 4:
Button.next_button.set_sensitive(True)
else:
Button.next_button.set_sensitive(False)
elif cls.mirror == "5 disks RAIDZ3":
if len(cls.zfs_disk_list) == 5:
Button.next_button.set_sensitive(True)
else:
Button.next_button.set_sensitive(False)
else: else:
if cls.check_if_small_disk(model[path][1]) is False: if cls.check_if_small_disk(model[path][1]) is False:
cls.zfs_disk_list.extend([model[path][0] + "-" + model[path][1]]) cls.zfs_disk_list.extend([model[path][0] + "-" + model[path][1]])
if cls.mirror == "1+ disks Stripe":
if len(cls.zfs_disk_list) >= 1:
Button.next_button.set_sensitive(True)
else:
Button.next_button.set_sensitive(False)
elif cls.mirror == "2+ disks Mirror":
if len(cls.zfs_disk_list) >= 2:
Button.next_button.set_sensitive(True)
else:
Button.next_button.set_sensitive(False)
elif cls.mirror == "3 disks RAIDZ1":
if len(cls.zfs_disk_list) == 3:
Button.next_button.set_sensitive(True)
else:
Button.next_button.set_sensitive(False)
elif cls.mirror == "4 disks RAIDZ2":
if len(cls.zfs_disk_list) == 4:
Button.next_button.set_sensitive(True)
else:
Button.next_button.set_sensitive(False)
elif cls.mirror == "5 disks RAIDZ3":
if len(cls.zfs_disk_list) == 5:
Button.next_button.set_sensitive(True)
else:
Button.next_button.set_sensitive(False)
else: else:
cls.check_cell.set_sensitive(False) cls.check_cell.set_sensitive(False)
cls.small_disk_warning() cls.small_disk_warning()
return True
# Update swap SpinButton upper limit based on first selected disk
if cls.zfs_disk_list:
disk_size = int(cls.zfs_disk_list[0].partition('-')[2].rstrip()) - 512
cls.swap_entry.get_adjustment().set_upper(disk_size)
else:
cls.swap_entry.get_adjustment().set_upper(get_ram_size_mb())
Button.next_button.set_sensitive(cls._is_ready())
print(cls.zfs_disk_list) print(cls.zfs_disk_list)
return True return True
@@ -589,32 +561,8 @@ class ZFS:
_widget: Entry widget that triggered the verification (unused) _widget: Entry widget that triggered the verification (unused)
""" """
if cls.password.get_text() == cls.repassword.get_text(): if cls.password.get_text() == cls.repassword.get_text():
cls.img.set_from_stock(Gtk.STOCK_YES, 5) cls.img.set_from_icon_name("gtk-yes", Gtk.IconSize.MENU)
if cls.mirror == "1+ disks Stripe": Button.next_button.set_sensitive(cls._is_ready())
if len(cls.zfs_disk_list) >= 1:
Button.next_button.set_sensitive(True)
else:
Button.next_button.set_sensitive(False)
elif cls.mirror == "2+ disks Mirror":
if len(cls.zfs_disk_list) >= 2:
Button.next_button.set_sensitive(True)
else:
Button.next_button.set_sensitive(False)
elif cls.mirror == "3 disks RAIDZ1":
if len(cls.zfs_disk_list) == 3:
Button.next_button.set_sensitive(True)
else:
Button.next_button.set_sensitive(False)
elif cls.mirror == "4 disks RAIDZ2":
if len(cls.zfs_disk_list) == 4:
Button.next_button.set_sensitive(True)
else:
Button.next_button.set_sensitive(False)
elif cls.mirror == "5 disks RAIDZ3":
if len(cls.zfs_disk_list) == 5:
Button.next_button.set_sensitive(True)
else:
Button.next_button.set_sensitive(False)
else: else:
cls.img.set_from_stock(Gtk.STOCK_NO, 5) cls.img.set_from_icon_name("gtk-no", Gtk.IconSize.MENU)
Button.next_button.set_sensitive(False) Button.next_button.set_sensitive(False)
+119 -94
View File
@@ -13,111 +13,111 @@ msgstr ""
"Language-Team: Turkish <gnome-turk@gnome.org>\n" "Language-Team: Turkish <gnome-turk@gnome.org>\n"
"Language: tr\n" "Language: tr\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ASCII\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: install_station/boot_manager.py:121 #: install_station/boot_manager.py:121
#: install_station/interface_controller.py:241 #: install_station/interface_controller.py:241
msgid "Boot Option" msgid "Boot Option"
msgstr "" msgstr "Önyükleme Seçeneği"
#: install_station/boot_manager.py:135 #: install_station/boot_manager.py:135
msgid "Setup rEFInd boot manager" msgid "Setup rEFInd boot manager"
msgstr "" msgstr "rEFInd önyükleme yöneticisini kur"
#: install_station/boot_manager.py:149 #: install_station/boot_manager.py:149
msgid "Setup FreeBSD boot manager" msgid "Setup FreeBSD boot manager"
msgstr "" msgstr "FreeBSD önyükleme yöneticisini kur"
#: install_station/boot_manager.py:164 #: install_station/boot_manager.py:164
#, python-brace-format #, python-brace-format
msgid "FreeBSD {loader} loader only" msgid "FreeBSD {loader} loader only"
msgstr "" msgstr "Yalnızca FreeBSD {loader} yükleyicisi"
#: install_station/common.py:123 #: install_station/common.py:123
msgid "Space not allowed" msgid "Space not allowed"
msgstr "" msgstr "Boşluk bırakılamaz"
#: install_station/common.py:125 install_station/common.py:127 #: install_station/common.py:125 install_station/common.py:127
msgid "Super Weak" msgid "Super Weak"
msgstr "" msgstr "Aşırı Zayıf"
#: install_station/common.py:129 install_station/common.py:135 #: install_station/common.py:129 install_station/common.py:135
msgid "Very Weak" msgid "Very Weak"
msgstr "" msgstr "Çok Zayıf"
#: install_station/common.py:131 install_station/common.py:137 #: install_station/common.py:131 install_station/common.py:137
#: install_station/common.py:143 #: install_station/common.py:143
msgid "Fairly Weak" msgid "Fairly Weak"
msgstr "" msgstr "Oldukça Zayıf"
#: install_station/common.py:133 install_station/common.py:139 #: install_station/common.py:133 install_station/common.py:139
#: install_station/common.py:145 install_station/common.py:151 #: install_station/common.py:145 install_station/common.py:151
msgid "Weak" msgid "Weak"
msgstr "" msgstr "Zayıf"
#: install_station/common.py:141 install_station/common.py:147 #: install_station/common.py:141 install_station/common.py:147
#: install_station/common.py:153 install_station/common.py:159 #: install_station/common.py:153 install_station/common.py:159
msgid "Strong" msgid "Strong"
msgstr "" msgstr "Güçlü"
#: install_station/common.py:149 install_station/common.py:155 #: install_station/common.py:149 install_station/common.py:155
#: install_station/common.py:161 install_station/common.py:167 #: install_station/common.py:161 install_station/common.py:167
msgid "Fairly Strong" msgid "Fairly Strong"
msgstr "" msgstr "Oldukça Güçlü"
#: install_station/common.py:157 install_station/common.py:163 #: install_station/common.py:157 install_station/common.py:163
msgid "Very Strong" msgid "Very Strong"
msgstr "" msgstr "Çok Güçlü"
#: install_station/common.py:165 install_station/common.py:169 #: install_station/common.py:165 install_station/common.py:169
msgid "Super Strong" msgid "Super Strong"
msgstr "" msgstr "Aşırı Güçlü"
#: install_station/custom.py:248 #: install_station/custom.py:248
msgid "Create" msgid "Create"
msgstr "" msgstr "Oluştur"
#: install_station/custom.py:252 #: install_station/custom.py:252
msgid "Delete" msgid "Delete"
msgstr "" msgstr "Sil"
#: install_station/custom.py:256 #: install_station/custom.py:256
msgid "Revert" msgid "Revert"
msgstr "" msgstr "Geri al"
#: install_station/custom.py:260 #: install_station/custom.py:260
msgid "Auto" msgid "Auto"
msgstr "" msgstr "Otomatik"
#: install_station/custom.py:328 install_station/custom.py:566 #: install_station/custom.py:328 install_station/custom.py:566
msgid "Add Partition" msgid "Add Partition"
msgstr "" msgstr "Bölüm Ekle"
#: install_station/custom.py:342 #: install_station/custom.py:342
msgid "Type:" msgid "Type:"
msgstr "" msgstr "Tür:"
#: install_station/custom.py:343 install_station/custom.py:580 #: install_station/custom.py:343 install_station/custom.py:580
msgid "Size(MB):" msgid "Size(MB):"
msgstr "" msgstr "Boyut(MB):"
#: install_station/custom.py:344 #: install_station/custom.py:344
msgid "Mount point:" msgid "Mount point:"
msgstr "" msgstr "Bağlama noktası:"
#: install_station/custom.py:496 #: install_station/custom.py:496
msgid "Partition Scheme" msgid "Partition Scheme"
msgstr "" msgstr "Bölümlendirme Şeması"
#: install_station/custom.py:515 #: install_station/custom.py:515
msgid "GPT: GUID Partition Table" msgid "GPT: GUID Partition Table"
msgstr "" msgstr "GPT: GUID Bölümlendirme Tablosu"
#: install_station/custom.py:516 #: install_station/custom.py:516
msgid "MBR: DOS Partition" msgid "MBR: DOS Partition"
msgstr "" msgstr "MBR: DOS Bölümlendirmesi"
#: install_station/end.py:10 #: install_station/end.py:10
msgid "" msgid ""
@@ -127,30 +127,35 @@ msgid ""
"any changes you make or documents you save will\n" "any changes you make or documents you save will\n"
"not be preserved on reboot." "not be preserved on reboot."
msgstr "" msgstr ""
"Kurulum tamamlandı. Yeni kurulumu kullanmak için\n"
"bilgisayarı yeniden başlatmanız gerekiyor.\n"
"Canlı ortamı kullanmaya devam edebilirsiniz; ancak\n"
"yaptığınız herhangi bir değişiklik veya kaydettiğiniz bir belge\n"
"yeniden başlatmadan sonra korunmayacaktır."
#: install_station/end.py:31 #: install_station/end.py:31
msgid "Installation Completed" msgid "Installation Completed"
msgstr "" msgstr "Kurulum Tamamlandı"
#: install_station/end.py:47 #: install_station/end.py:47
msgid "Restart" msgid "Restart"
msgstr "" msgstr "Yeniden Başlat"
#: install_station/end.py:49 #: install_station/end.py:49
msgid "Continue" msgid "Continue"
msgstr "" msgstr "Devam Et"
#: install_station/error.py:17 #: install_station/error.py:17
msgid "Installation Error" msgid "Installation Error"
msgstr "" msgstr "Kurulum Hatası"
#: install_station/error.py:28 #: install_station/error.py:28
msgid "Installation has failed!" msgid "Installation has failed!"
msgstr "" msgstr "Kurulum başarısız oldu!"
#: install_station/error.py:33 #: install_station/error.py:33
msgid "GhostBSD issue system" msgid "GhostBSD issue system"
msgstr "" msgstr "GhostBSD Sorun Takip Sistemi"
#: install_station/error.py:35 #: install_station/error.py:35
#, python-brace-format #, python-brace-format
@@ -158,14 +163,16 @@ msgid ""
"Please report the issue to {anchor}, and \n" "Please report the issue to {anchor}, and \n"
"be sure to provide /tmp/.pc-sysinstall/pc-sysinstall.log." "be sure to provide /tmp/.pc-sysinstall/pc-sysinstall.log."
msgstr "" msgstr ""
"Lütfen sorunu {anchor} adresine bildirin ve \n"
"/tmp/.pc-sysinstall/pc-sysinstall.log dosyasını eklediğinizden emin olun."
#: install_station/error.py:45 #: install_station/error.py:45
msgid "Ok" msgid "Ok"
msgstr "" msgstr "Tamam"
#: install_station/install_type.py:94 #: install_station/install_type.py:94
msgid "How do you want to install GhostBSD?" msgid "How do you want to install GhostBSD?"
msgstr "" msgstr "GhostBSD'yi nasıl yüklemek istersiniz?"
#: install_station/install_type.py:100 #: install_station/install_type.py:100
msgid "" msgid ""
@@ -173,32 +180,37 @@ msgid ""
"Install GhostBSD using Stripe, Mirror, RAIDZ1, RAIDZ2, or RAIDZ3 " "Install GhostBSD using Stripe, Mirror, RAIDZ1, RAIDZ2, or RAIDZ3 "
"configurations." "configurations."
msgstr "" msgstr ""
"<b>Disk Yapılandırması</b>\n"
"GhostBSD'yi Stripe, Mirror, RAIDZ1, RAIDZ2 veya RAIDZ3 yapılandırmalarını "
"kullanarak kurun."
#: install_station/install_type.py:113 #: install_station/install_type.py:113
msgid "" msgid ""
"<b>Multi-Boot Configuration</b>\n" "<b>Multi-Boot Configuration</b>\n"
"Install GhostBSD with ZFS alongside other operating systems." "Install GhostBSD with ZFS alongside other operating systems."
msgstr "" msgstr ""
"<b>Çoklu Önyükleme Yapılandırması</b>\n"
"GhostBSD'yi ZFS ile birlikte diğer işletim sistemlerinin yanına kurun."
#: install_station/install.py:46 #: install_station/install.py:46
msgid "Creating ghostbsd_installation.cfg" msgid "Creating ghostbsd_installation.cfg"
msgstr "" msgstr "ghostbsd_installation.cfg Oluşturuluyor"
#: install_station/install.py:50 #: install_station/install.py:50
msgid "Deleting partition" msgid "Deleting partition"
msgstr "" msgstr "Bölümlendirme siliniyor"
#: install_station/install.py:55 #: install_station/install.py:55
msgid "Creating disk partition" msgid "Creating disk partition"
msgstr "" msgstr "Disk bölümlendirmesi oluşturuluyor"
#: install_station/install.py:60 #: install_station/install.py:60
msgid "Creating new partitions" msgid "Creating new partitions"
msgstr "" msgstr "Yeni bölümlendirmeler oluşturuluyor"
#: install_station/install.py:90 #: install_station/install.py:90
msgid "Installation in progress" msgid "Installation in progress"
msgstr "" msgstr "Kuruluyor"
#: install_station/install.py:102 #: install_station/install.py:102
msgid "" msgid ""
@@ -211,253 +223,266 @@ msgid ""
"\n" "\n"
"We hope you'll enjoy our BSD operating system." "We hope you'll enjoy our BSD operating system."
msgstr "" msgstr ""
"GhostBSD'yi seçtiğiniz için teşekkür ederiz!\n"
"\n"
"Her işletim sisteminin basit, zarif, güvenli olması, gizliliğinizi koruması ve "
"aynı zamanda kullanım kolaylığı sunması gerektiğine inanıyoruz. "
"GhostBSD, FreeBSD'yi kullanmak için gereken teknik uzmanlığa sahip olmayanlar "
"için sistemi basitleştiriyor ve BSD'ye giriş eşiğini düşürüyor. \n"
"\n"
"İşletim sistemimizi keyifle kullanmanızı umuyoruz."
#: install_station/interface_controller.py:24 #: install_station/interface_controller.py:24
#: install_station/interface_controller.py:35 #: install_station/interface_controller.py:35
msgid "Back" msgid "Back"
msgstr "" msgstr "Geri"
#: install_station/interface_controller.py:26 #: install_station/interface_controller.py:26
#: install_station/interface_controller.py:36 #: install_station/interface_controller.py:36
msgid "Cancel" msgid "Cancel"
msgstr "" msgstr "İptal"
#: install_station/interface_controller.py:28 #: install_station/interface_controller.py:28
#: install_station/interface_controller.py:37 #: install_station/interface_controller.py:37
#: install_station/interface_controller.py:297 #: install_station/interface_controller.py:297
msgid "Next" msgid "Next"
msgstr "" msgstr "İleri"
#: install_station/interface_controller.py:129 #: install_station/interface_controller.py:129
#: install_station/interface_controller.py:130 install_station/language.py:101 #: install_station/interface_controller.py:130 install_station/language.py:101
msgid "Welcome to GhostBSD" msgid "Welcome to GhostBSD"
msgstr "" msgstr "GhostBSD'ye Hoş geldiniz"
#: install_station/interface_controller.py:139 #: install_station/interface_controller.py:139
msgid "Button" msgid "Button"
msgstr "" msgstr "Buton"
#: install_station/interface_controller.py:160 #: install_station/interface_controller.py:160
msgid "Keyboard Setup" msgid "Keyboard Setup"
msgstr "" msgstr "Klavye Yapılandırması"
#: install_station/interface_controller.py:172 #: install_station/interface_controller.py:172
#: install_station/interface_controller.py:274 #: install_station/interface_controller.py:274
#: install_station/interface_controller.py:279 #: install_station/interface_controller.py:279
msgid "Network Setup" msgid "Network Setup"
msgstr "" msgstr "Ağ Yapılandırması"
#: install_station/interface_controller.py:183 #: install_station/interface_controller.py:183
msgid "Try Or Install GhostBSD" msgid "Try Or Install GhostBSD"
msgstr "" msgstr "GhostBSD'yi Deneyin veya Kurun"
#: install_station/interface_controller.py:194 #: install_station/interface_controller.py:194
msgid "Installation Types" msgid "Installation Types"
msgstr "" msgstr "Kurulum Türleri"
#: install_station/interface_controller.py:221 #: install_station/interface_controller.py:221
msgid "Custom Configuration" msgid "Custom Configuration"
msgstr "" msgstr "Özel Yapılandırma"
#: install_station/interface_controller.py:231 #: install_station/interface_controller.py:231
msgid "ZFS Configuration" msgid "ZFS Configuration"
msgstr "" msgstr "ZFS Yapılandırması"
#: install_station/interface_controller.py:243 #: install_station/interface_controller.py:243
msgid "Install" msgid "Install"
msgstr "" msgstr "Kur"
#: install_station/interface_controller.py:253 #: install_station/interface_controller.py:253
msgid "Installation Progress" msgid "Installation Progress"
msgstr "" msgstr "Kurulum İlerlemesi"
#: install_station/interface_controller.py:260 #: install_station/interface_controller.py:260
msgid "Progress Bar" msgid "Progress Bar"
msgstr "" msgstr "İlerleme Çubuğu"
#: install_station/keyboard.py:45 #: install_station/keyboard.py:45
msgid "Type here to test your keyboard" msgid "Type here to test your keyboard"
msgstr "" msgstr "Klavyenizi test etmek için buraya yazın"
#: install_station/keyboard.py:102 #: install_station/keyboard.py:102
msgid "Keyboard Layout" msgid "Keyboard Layout"
msgstr "" msgstr "Klavye Düzeni"
#: install_station/keyboard.py:122 #: install_station/keyboard.py:122
msgid "Keyboard Models" msgid "Keyboard Models"
msgstr "" msgstr "Klavye Modelleri"
#: install_station/keyboard.py:230 #: install_station/keyboard.py:230
msgid "English (US)" msgid "English (US)"
msgstr "" msgstr "İngilizce (ABD)"
#: install_station/keyboard.py:231 #: install_station/keyboard.py:231
msgid "English (Canada)" msgid "English (Canada)"
msgstr "" msgstr "İngilizce (Kanada)"
#: install_station/keyboard.py:232 #: install_station/keyboard.py:232
msgid "French (Canada)" msgid "French (Canada)"
msgstr "" msgstr "Fransızca (Kanada)"
#: install_station/language.py:93 install_station/language.py:197 #: install_station/language.py:93 install_station/language.py:197
msgid "Please select your language:" msgid "Please select your language:"
msgstr "" msgstr "Lütfen dilinizi seçin:"
#: install_station/language.py:99 install_station/language.py:116 #: install_station/language.py:99 install_station/language.py:116
msgid "Language" msgid "Language"
msgstr "" msgstr "Dil"
#: install_station/network_setup.py:107 install_station/network_setup.py:184 #: install_station/network_setup.py:107 install_station/network_setup.py:184
msgid "Network card connected to the internet" msgid "Network card connected to the internet"
msgstr "" msgstr "İnternete bağlı ağ kartı"
#: install_station/network_setup.py:113 install_station/network_setup.py:190 #: install_station/network_setup.py:113 install_station/network_setup.py:190
msgid "Network card not connected to the internet" msgid "Network card not connected to the internet"
msgstr "" msgstr "İnternete bağlı olmayan ağ kartı"
#: install_station/network_setup.py:116 install_station/network_setup.py:193 #: install_station/network_setup.py:116 install_station/network_setup.py:193
msgid "No network card detected" msgid "No network card detected"
msgstr "" msgstr "Ağ kartı bulunamadı"
#: install_station/network_setup.py:125 install_station/network_setup.py:203 #: install_station/network_setup.py:125 install_station/network_setup.py:203
msgid "WiFi card detected and connected to an access point" msgid "WiFi card detected and connected to an access point"
msgstr "" msgstr "WiFi kartı algılandı ve bir erişim noktasına bağlı"
#: install_station/network_setup.py:129 install_station/network_setup.py:207 #: install_station/network_setup.py:129 install_station/network_setup.py:207
msgid "WiFi card detected but not connected to an access point" msgid "WiFi card detected but not connected to an access point"
msgstr "" msgstr "WiFi kartı algılandı ancak bir erişim noktasına bağlı değil"
#: install_station/network_setup.py:132 install_station/network_setup.py:210 #: install_station/network_setup.py:132 install_station/network_setup.py:210
msgid "WiFi card not detected or not supported" msgid "WiFi card not detected or not supported"
msgstr "" msgstr "Wi-Fi kartı algılanmadı veya desteklenmiyor"
#: install_station/network_setup.py:366 #: install_station/network_setup.py:366
msgid "Wi-Fi Network Authentication Required" msgid "Wi-Fi Network Authentication Required"
msgstr "" msgstr "Wi-Fi Ağ Kimlik Doğrulaması Gerekli"
#: install_station/network_setup.py:379 #: install_station/network_setup.py:379
#, python-brace-format #, python-brace-format
msgid "{ssid} Wi-Fi Network Authentication failed" msgid "{ssid} Wi-Fi Network Authentication failed"
msgstr "" msgstr "{ssid} Wi-Fi ağı için kimlik doğrulaması başarısız oldu"
#: install_station/network_setup.py:381 #: install_station/network_setup.py:381
#, python-brace-format #, python-brace-format
msgid "Authentication required by {ssid} Wi-Fi Network" msgid "Authentication required by {ssid} Wi-Fi Network"
msgstr "" msgstr "{ssid} Wi-Fi ağı için kimlik doğrulaması gerekiyor"
#: install_station/network_setup.py:384 #: install_station/network_setup.py:384
msgid "Password:" msgid "Password:"
msgstr "" msgstr "Şifre:"
#: install_station/network_setup.py:387 #: install_station/network_setup.py:387
msgid "Show password" msgid "Show password"
msgstr "" msgstr "Şifreyi göster"
#: install_station/try_install.py:102 #: install_station/try_install.py:102
msgid "What would you like to do?" msgid "What would you like to do?"
msgstr "" msgstr "Ne yapmak istersiniz?"
#: install_station/try_install.py:109 #: install_station/try_install.py:109
msgid "" msgid ""
"<b>Install GhostBSD</b>\n" "<b>Install GhostBSD</b>\n"
"Install GhostBSD on your computer." "Install GhostBSD on your computer."
msgstr "" msgstr ""
"<b>GhostBSD'yi Kur</b>\n"
"GhostBSD'yi bilgisayarınıza kurun."
#: install_station/try_install.py:122 #: install_station/try_install.py:122
msgid "" msgid ""
"<b>Try GhostBSD</b>\n" "<b>Try GhostBSD</b>\n"
"Run GhostBSD without installing to your computer." "Run GhostBSD without installing to your computer."
msgstr "" msgstr ""
"<b>GhostBSD'yi Dene</b>\n"
"Bilgisayarınızda GhostBSD'yi kurmadan çalıştırın."
#: install_station/use_zfs.py:160 #: install_station/use_zfs.py:160
msgid "" msgid ""
"Please select 1 or more drive for stripe (select the smallest disk first)" "Please select 1 or more drive for stripe (select the smallest disk first)"
msgstr "" msgstr ""
"Lütfen stripe için 1 veya daha fazla sürücü seçin (öncelikle en küçük diski seçin)."
#: install_station/use_zfs.py:167 #: install_station/use_zfs.py:167
msgid "Please select 2 drive for mirroring (select the smallest disk first)" msgid "Please select 2 drive for mirroring (select the smallest disk first)"
msgstr "" msgstr "Lütfen mirror için 2 sürücü seçin (öncelikle en küçük diski seçin)"
#: install_station/use_zfs.py:175 #: install_station/use_zfs.py:175
msgid "Please select 3 drive for RAIDZ1 (select the smallest disk first)" msgid "Please select 3 drive for RAIDZ1 (select the smallest disk first)"
msgstr "" msgstr "Lütfen RAIDZ1 için 3 sürücü seçin (öncelikle en küçük diski seçin)"
#: install_station/use_zfs.py:182 #: install_station/use_zfs.py:182
msgid "Please select 4 drive for RAIDZ2 (select the smallest disk first)" msgid "Please select 4 drive for RAIDZ2 (select the smallest disk first)"
msgstr "" msgstr "Lütfen RAIDZ2 için 4 sürücü seçin (öncelikle en küçük diski seçin)"
#: install_station/use_zfs.py:189 #: install_station/use_zfs.py:189
msgid "Please select 5 drive for RAIDZ3 (select the smallest disk first)" msgid "Please select 5 drive for RAIDZ3 (select the smallest disk first)"
msgstr "" msgstr "Lütfen RAIDZ3 için 5 sürücü seçin (öncelikle en küçük diski seçin)"
#: install_station/use_zfs.py:292 #: install_station/use_zfs.py:292
msgid "Disk" msgid "Disk"
msgstr "" msgstr "Disk"
#: install_station/use_zfs.py:299 #: install_station/use_zfs.py:299
msgid "Size(MB)" msgid "Size(MB)"
msgstr "" msgstr "Boyut(MB)"
#: install_station/use_zfs.py:305 #: install_station/use_zfs.py:305
msgid "Name" msgid "Name"
msgstr "" msgstr "İsim"
#: install_station/use_zfs.py:309 #: install_station/use_zfs.py:309
msgid "Check" msgid "Check"
msgstr "" msgstr "Kontrol Et"
#: install_station/use_zfs.py:322 #: install_station/use_zfs.py:322
msgid "Please select one drive" msgid "Please select one drive"
msgstr "" msgstr "Lütfen bir sürücü seçiniz"
#: install_station/use_zfs.py:327 #: install_station/use_zfs.py:327
msgid "<b>Pool Type</b>" msgid "<b>Pool Type</b>"
msgstr "" msgstr "<b>Havuz Türü</b>"
#: install_station/use_zfs.py:331 #: install_station/use_zfs.py:331
msgid "1+ disks Stripe" msgid "1+ disks Stripe"
msgstr "" msgstr "1+ diskli Stripe"
#: install_station/use_zfs.py:332 #: install_station/use_zfs.py:332
msgid "2+ disks Mirror" msgid "2+ disks Mirror"
msgstr "" msgstr "2+ diskli Mirror"
#: install_station/use_zfs.py:333 #: install_station/use_zfs.py:333
msgid "3 disks RAIDZ1" msgid "3 disks RAIDZ1"
msgstr "" msgstr "3 diskli RAIDZ1"
#: install_station/use_zfs.py:334 #: install_station/use_zfs.py:334
msgid "4 disks RAIDZ2" msgid "4 disks RAIDZ2"
msgstr "" msgstr "4 diskli RAIDZ2"
#: install_station/use_zfs.py:335 #: install_station/use_zfs.py:335
msgid "5 disks RAIDZ3" msgid "5 disks RAIDZ3"
msgstr "" msgstr "5 diskli RAIDZ3"
#: install_station/use_zfs.py:345 #: install_station/use_zfs.py:345
msgid "<b>Pool Name</b>" msgid "<b>Pool Name</b>"
msgstr "" msgstr "<b>Havuz Adı</b>"
#: install_station/use_zfs.py:365 #: install_station/use_zfs.py:365
msgid "Encrypt Disk" msgid "Encrypt Disk"
msgstr "" msgstr "Diski Şifrele"
#: install_station/use_zfs.py:369 #: install_station/use_zfs.py:369
msgid "Password" msgid "Password"
msgstr "" msgstr "Şifre"
#: install_station/use_zfs.py:376 #: install_station/use_zfs.py:376
msgid "Verify it" msgid "Verify it"
msgstr "" msgstr "Doğrula"
#: install_station/use_zfs.py:537 #: install_station/use_zfs.py:537
msgid "Warning" msgid "Warning"
msgstr "" msgstr "Uyarı"
#: install_station/use_zfs.py:548 #: install_station/use_zfs.py:548
msgid "Smallest disk need to be SELECTED first!\n" msgid "Smallest disk need to be SELECTED first!\n"
msgstr "" msgstr "Öncelikle en küçük disk SEÇİLMELİDİR!\n"
#: install_station/use_zfs.py:549 #: install_station/use_zfs.py:549
msgid "All the disk selected will reset." msgid "All the disk selected will reset."
msgstr "" msgstr "Seçilen tüm diskler sıfırlanacaktır."
+3 -2
View File
@@ -14,7 +14,7 @@ from DistUtilsExtra.command.build_i18n import build_i18n
from DistUtilsExtra.command.clean_i18n import clean_i18n from DistUtilsExtra.command.clean_i18n import clean_i18n
prefix = sys.prefix prefix = sys.prefix
__VERSION__ = '0.1' __VERSION__ = '0.4'
PROGRAM_VERSION = __VERSION__ PROGRAM_VERSION = __VERSION__
@@ -157,7 +157,8 @@ lib_install_station_backend_query = [
data_files = [ data_files = [
(f'{prefix}/lib/install-station', ['src/ghostbsd-style.css']), (f'{prefix}/lib/install-station', ['src/ghostbsd-style.css']),
(f'{prefix}/lib/install-station/backend-query', lib_install_station_backend_query), (f'{prefix}/lib/install-station/backend-query', lib_install_station_backend_query),
(f'{prefix}/lib/install-station/image', lib_install_station_image) (f'{prefix}/lib/install-station/image', lib_install_station_image),
(f'{prefix}/etc/rc.d', ['src/install_station'])
] ]
data_files.extend(data_file_list(f'{prefix}/share/locale', 'build/mo')) data_files.extend(data_file_list(f'{prefix}/share/locale', 'build/mo'))
+36
View File
@@ -0,0 +1,36 @@
#!/bin/sh
#
# PROVIDE: install_station
# REQUIRE: LOGIN FILESYSTEMS
# BEFORE: lightdm
# KEYWORD: shutdown
. /etc/rc.subr
name="install_station"
rcvar="${name}_enable"
start_cmd="${name}_start"
stop_cmd=":"
install_station_start()
{
# Create .xinitrc for root to run installer
cat > /root/.xinitrc <<'EOF'
exec marco &
exec feh --bg-fill /usr/local/share/backgrounds/ghostbsd/blue-layered-stripes.jpg &
exec install-station
EOF
chmod 755 /root/.xinitrc
# Start X as root - this will block until install-station exits
su -l root -c "startx -- :0 vt09"
# Cleanup
rm -f /root/.xinitrc
# Disable this service for future boots
sysrc install_station_enable=NO
}
load_rc_config $name
run_rc_command "$1"