Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 201f813ab0 | |||
| 2c96c08333 | |||
| 3b5a409858 | |||
| 708aed30d6 | |||
| 4d4c54671e | |||
| 6035e6355f | |||
| 917823091e | |||
| 19b027bc0b | |||
| b3f1cb636d | |||
| 523bd172c3 | |||
| 1507a5a456 | |||
| 98c8a2c84c | |||
| f61de14266 |
@@ -156,5 +156,11 @@ class Configuration:
|
||||
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/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:
|
||||
raise IOError(f"Failed to write configuration file: {e}") from e
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
"""
|
||||
Contains the data class and some commonly use variables
|
||||
"""
|
||||
import os
|
||||
import gettext
|
||||
|
||||
be_name: str = "default"
|
||||
@@ -46,8 +45,8 @@ class InstallationData:
|
||||
ufs_config_data: list = []
|
||||
|
||||
# Installation type and mode
|
||||
install_mode: str = "" # "install" or "try"
|
||||
filesystem_type: str = "" # "zfs", "ufs", or "custom"
|
||||
what_to_do: str = "" # "install" or "try"
|
||||
install_type: str = "" # "zfs", "ufs", or "custom"
|
||||
|
||||
# Language and localization
|
||||
language: str = ""
|
||||
@@ -79,8 +78,8 @@ class InstallationData:
|
||||
cls.boot = ""
|
||||
cls.zfs_config_data = []
|
||||
cls.ufs_config_data = []
|
||||
cls.install_mode = ""
|
||||
cls.filesystem_type = ""
|
||||
cls.what_to_do = ""
|
||||
cls.install_type = ""
|
||||
cls.language = ""
|
||||
cls.language_code = ""
|
||||
cls.keyboard_layout = ""
|
||||
|
||||
@@ -112,6 +112,7 @@ class InstallWindow:
|
||||
label2.set_line_wrap(True)
|
||||
# label2.set_max_width_chars(10)
|
||||
label2.set_alignment(0.0, 0.2)
|
||||
label2.show()
|
||||
hbox2 = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, homogeneous=False, spacing=0, name="TransBox")
|
||||
hbox2.show()
|
||||
hbox.pack_start(hbox2, True, True, 0)
|
||||
|
||||
@@ -48,7 +48,7 @@ class InstallTypes:
|
||||
# Only respond to activation, not deactivation
|
||||
if widget.get_active():
|
||||
cls.ne = val
|
||||
InstallationData.filesystem_type = val
|
||||
InstallationData.install_type = val
|
||||
print(f"Filesystem type selected: {val}")
|
||||
|
||||
@classmethod
|
||||
@@ -58,7 +58,7 @@ class InstallTypes:
|
||||
Returns:
|
||||
str: Current filesystem type ('zfs' or 'custom')
|
||||
"""
|
||||
return InstallationData.filesystem_type or cls.ne
|
||||
return InstallationData.install_type or cls.ne
|
||||
|
||||
@classmethod
|
||||
def get_model(cls) -> Gtk.Box:
|
||||
@@ -88,7 +88,7 @@ class InstallTypes:
|
||||
cls.vbox1.show()
|
||||
vbox2 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0)
|
||||
hbox1 = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, homogeneous=False, spacing=0)
|
||||
InstallationData.filesystem_type = cls.ne
|
||||
InstallationData.install_type = cls.ne
|
||||
cls.vbox1.pack_start(hbox1, True, False, 0)
|
||||
hbox1.set_halign(Gtk.Align.CENTER)
|
||||
label = Gtk.Label(label=get_text("How do you want to install GhostBSD?"))
|
||||
|
||||
@@ -208,12 +208,14 @@ class Interface:
|
||||
InstallationData.keyboard_variant,
|
||||
InstallationData.keyboard_model_code
|
||||
)
|
||||
|
||||
# Continue to network setup for live session
|
||||
cls.next_setup_page()
|
||||
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.screensaver lock-enabled false &\n')
|
||||
xinitrc.writelines('exec ck-launch-session mate-session\n')
|
||||
Gtk.main_quit()
|
||||
elif page == 4:
|
||||
Button.show_back()
|
||||
if InstallationData.filesystem_type == "custom":
|
||||
if InstallationData.install_type == "custom":
|
||||
custom_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0)
|
||||
custom_box.show()
|
||||
get_part = cls.custom_partition.get_model()
|
||||
@@ -223,7 +225,7 @@ class Interface:
|
||||
cls.page.next_page()
|
||||
cls.page.show_all()
|
||||
Button.next_button.set_sensitive(False)
|
||||
elif InstallationData.filesystem_type == "zfs":
|
||||
elif InstallationData.install_type == "zfs":
|
||||
zfs_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0)
|
||||
zfs_box.show()
|
||||
get_zfs = cls.full_zfs.get_model()
|
||||
@@ -234,6 +236,11 @@ class Interface:
|
||||
cls.page.show_all()
|
||||
Button.next_button.set_sensitive(False)
|
||||
elif page == 5:
|
||||
# Save ZFS configuration before proceeding
|
||||
if InstallationData.install_type == "zfs":
|
||||
cls.full_zfs.save_selection()
|
||||
# For custom partitioning, data is already saved in InstallationData
|
||||
|
||||
boot_manager_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0)
|
||||
boot_manager_box.show()
|
||||
get_root = cls.boot_manager.get_model()
|
||||
@@ -265,28 +272,6 @@ class Interface:
|
||||
title_text = cls.page.get_tab_label_text(current_page_widget)
|
||||
Window.set_title(title_text)
|
||||
|
||||
@classmethod
|
||||
def next_setup_page(cls) -> None:
|
||||
page = cls.page.get_current_page()
|
||||
if page == 0:
|
||||
Button.next_button.show()
|
||||
Button.next_button.set_sensitive(False)
|
||||
Window.set_title(get_text("Network Setup"))
|
||||
net_setup_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0)
|
||||
net_setup_box.show()
|
||||
model = cls.network_setup.get_model()
|
||||
net_setup_box.pack_start(model, True, True, 0)
|
||||
label = Gtk.Label(label=get_text("Network Setup"))
|
||||
cls.page.insert_page(net_setup_box, label, 1)
|
||||
cls.page.next_page()
|
||||
cls.page.show_all()
|
||||
if page == 1:
|
||||
with open('/usr/home/ghostbsd/.xinitrc', 'w') as xinitrc:
|
||||
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('exec ck-launch-session mate-session\n')
|
||||
Gtk.main_quit()
|
||||
|
||||
@classmethod
|
||||
def back_page(cls, _widget: Gtk.Button) -> None:
|
||||
"""Go back to the previous window."""
|
||||
@@ -313,4 +298,4 @@ class Interface:
|
||||
current_page_widget = cls.page.get_nth_page(cls.page.get_current_page())
|
||||
title_text = cls.page.get_tab_label_text(current_page_widget)
|
||||
Window.set_title(title_text)
|
||||
# Button.next_button.set_sensitive(True)
|
||||
Button.next_button.set_sensitive(True)
|
||||
|
||||
@@ -7,6 +7,7 @@ import re
|
||||
from time import sleep
|
||||
from subprocess import Popen, PIPE, STDOUT, call
|
||||
from install_station.data import query, zfs_datasets, InstallationData
|
||||
from install_station.system_calls import get_ram_size_mb
|
||||
|
||||
# Define required file paths
|
||||
|
||||
@@ -779,7 +780,7 @@ class AutoFreeSpace:
|
||||
InstallationData.slice = main_slice.replace(drive, "")
|
||||
|
||||
root_size = int(main_size)
|
||||
swap_size = 2048
|
||||
swap_size = get_ram_size_mb()
|
||||
root_size -= swap_size
|
||||
|
||||
part_list = disk_db[drive]['partitions'][main_slice]['partition-list']
|
||||
@@ -861,7 +862,7 @@ class AutoFreeSpace:
|
||||
InstallationData.disk = drive
|
||||
InstallationData.scheme = 'partscheme=GPT'
|
||||
root_size = int(main_size)
|
||||
swap_size = 2048
|
||||
swap_size = get_ram_size_mb()
|
||||
root_size -= int(swap_size)
|
||||
if self.bios_type == "UEFI" and efi_exist is False:
|
||||
boot_size = 256
|
||||
|
||||
@@ -258,6 +258,21 @@ def timezone_dictionary() -> dict[str, list[str]]:
|
||||
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]:
|
||||
"""Query available disks for ZFS installation.
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ class TryOrInstall:
|
||||
# Only respond to activation, not deactivation
|
||||
if widget.get_active():
|
||||
cls.what = val
|
||||
InstallationData.install_mode = val
|
||||
InstallationData.what_to_do = val
|
||||
print(f"Mode selected: {val}")
|
||||
|
||||
@classmethod
|
||||
@@ -62,7 +62,7 @@ class TryOrInstall:
|
||||
Returns:
|
||||
str: Current installation mode ('install' or 'try')
|
||||
"""
|
||||
return InstallationData.install_mode or cls.what
|
||||
return InstallationData.what_to_do or cls.what
|
||||
|
||||
@classmethod
|
||||
def initialize(cls) -> None:
|
||||
@@ -78,7 +78,7 @@ class TryOrInstall:
|
||||
This method is called automatically by get_model() when the interface is first accessed.
|
||||
"""
|
||||
cls.what = 'install' # Default to install mode
|
||||
InstallationData.install_mode = cls.what
|
||||
InstallationData.what_to_do = cls.what
|
||||
|
||||
cls.vbox1 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0)
|
||||
cls.vbox1.show()
|
||||
|
||||
+181
-233
@@ -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.partition import bios_or_uefi
|
||||
from install_station.system_calls import (
|
||||
get_ram_size_mb,
|
||||
zfs_disk_query,
|
||||
zfs_disk_size_query,
|
||||
)
|
||||
@@ -38,13 +39,13 @@ class ZFS:
|
||||
zfs_disk_list = []
|
||||
pool_type = 'stripe'
|
||||
scheme = 'GPT'
|
||||
zpool = False
|
||||
disk_encrypt = False
|
||||
mirror = 'single disk'
|
||||
mirror = 'stripe'
|
||||
vbox1 = None
|
||||
|
||||
# UI elements as class variables
|
||||
pool = None
|
||||
swap_entry = None
|
||||
password = None
|
||||
repassword = None
|
||||
mirrorTips = None
|
||||
@@ -70,27 +71,18 @@ class ZFS:
|
||||
if not cls.zfs_disk_list:
|
||||
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():
|
||||
raise ValueError("Password cannot be empty when disk encryption is enabled")
|
||||
|
||||
size = int(cls.zfs_disk_list[0].partition('-')[2].rstrip()) - 512
|
||||
swap = 0
|
||||
zfs_num = size - swap
|
||||
if cls.disk_encrypt is True:
|
||||
dgeli = '.eli'
|
||||
else:
|
||||
dgeli = ''
|
||||
swap_size = cls.swap_entry.get_value_as_int()
|
||||
zfs_num = size - swap_size
|
||||
dgeli = '.eli' if cls.disk_encrypt else ''
|
||||
|
||||
# Store configuration data in InstallationData instead of writing to file
|
||||
InstallationData.zfs_config_data = []
|
||||
|
||||
if cls.zpool is True:
|
||||
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"zpoolName={cls.pool.get_text()}\n")
|
||||
InstallationData.zfs_config_data.append(f"beName={be_name}\n")
|
||||
InstallationData.zfs_config_data.append('ashift=12\n\n')
|
||||
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(f'partscheme={cls.scheme}\n')
|
||||
InstallationData.zfs_config_data.append('commitDiskPart\n\n')
|
||||
if cls.pool_type == 'none':
|
||||
if len(cls.zfs_disk_list) <= 1:
|
||||
pool_disk = '\n'
|
||||
else:
|
||||
zfs_disk = cls.zfs_disk_list
|
||||
disk_len = len(zfs_disk) - 1
|
||||
num = 1
|
||||
mirror_dsk = ''
|
||||
while disk_len != 0:
|
||||
mirror_dsk += ' ' + zfs_disk[num].partition('-')[0].rstrip()
|
||||
print(mirror_dsk)
|
||||
num += 1
|
||||
disk_len -= 1
|
||||
for i in range(1, len(zfs_disk)):
|
||||
mirror_dsk += ' ' + zfs_disk[i].partition('-')[0].rstrip()
|
||||
pool_disk = f' ({cls.pool_type}:{mirror_dsk})\n'
|
||||
if bios_or_uefi() == "UEFI":
|
||||
zfs_num = zfs_num - 100
|
||||
@@ -118,14 +105,46 @@ class ZFS:
|
||||
# adding zero to use remaining space
|
||||
zfs_part = f'disk0-part=ZFS{dgeli} {zfs_num} {zfs_datasets}{pool_disk}'
|
||||
InstallationData.zfs_config_data.append(zfs_part)
|
||||
if swap != 0:
|
||||
InstallationData.zfs_config_data.append('disk0-part=swap 0 none\n')
|
||||
if cls.disk_encrypt is True:
|
||||
# encpass must be on the line immediately after the .eli partition
|
||||
if cls.disk_encrypt:
|
||||
InstallationData.zfs_config_data.append(f'encpass={cls.password.get_text()}\n')
|
||||
else:
|
||||
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')
|
||||
|
||||
@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
|
||||
def scheme_selection(cls, combobox):
|
||||
"""
|
||||
@@ -152,62 +171,30 @@ class ZFS:
|
||||
"""
|
||||
model = combobox.get_model()
|
||||
index = combobox.get_active()
|
||||
data = model[index][0] # Get the internal value (English)
|
||||
data = model[index][0]
|
||||
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.mirrorTips.set_text(
|
||||
get_text("Please select 1 or more drive for stripe (select the smallest disk first)"))
|
||||
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":
|
||||
get_text("Select 1 or more drives, no redundancy") + " " + smallest_msg)
|
||||
elif cls.mirror == "mirror":
|
||||
cls.pool_type = 'mirror'
|
||||
mir_msg1 = get_text("Please select 2 drive for mirroring (select the smallest disk first)")
|
||||
cls.mirrorTips.set_text(mir_msg1)
|
||||
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":
|
||||
cls.mirrorTips.set_text(
|
||||
get_text("Select 2 or more drives for mirroring") + " " + smallest_msg)
|
||||
elif cls.mirror == "raidz1":
|
||||
cls.pool_type = 'raidz1'
|
||||
cls.mirrorTips.set_text(get_text("Please select 3 drive for RAIDZ1 (select the smallest disk first)"))
|
||||
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":
|
||||
cls.mirrorTips.set_text(
|
||||
get_text("Select 3 drives for RAIDZ1") + " " + smallest_msg)
|
||||
elif cls.mirror == "raidz2":
|
||||
cls.pool_type = 'raidz2'
|
||||
cls.mirrorTips.set_text(get_text("Please select 4 drive for RAIDZ2 (select the smallest disk first)"))
|
||||
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":
|
||||
cls.mirrorTips.set_text(
|
||||
get_text("Select 4 drives for RAIDZ2") + " " + smallest_msg)
|
||||
elif cls.mirror == "raidz3":
|
||||
cls.pool_type = 'raidz3'
|
||||
cls.mirrorTips.set_text(get_text("Please select 5 drive for RAIDZ3 (select the smallest disk first)"))
|
||||
if len(cls.zfs_disk_list) == 5:
|
||||
Button.next_button.set_sensitive(True)
|
||||
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
|
||||
cls.mirrorTips.set_text(
|
||||
get_text("Select 5 drives for RAIDZ3") + " " + smallest_msg)
|
||||
Button.next_button.set_sensitive(cls._is_ready())
|
||||
|
||||
@classmethod
|
||||
def on_check_encrypt(cls, widget):
|
||||
@@ -229,31 +216,21 @@ class ZFS:
|
||||
cls.password.set_sensitive(False)
|
||||
cls.repassword.set_sensitive(False)
|
||||
cls.disk_encrypt = False
|
||||
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)
|
||||
Button.next_button.set_sensitive(cls._is_ready())
|
||||
|
||||
@classmethod
|
||||
def on_password_changed(cls, _widget):
|
||||
"""
|
||||
Handle password entry changes and update strength display.
|
||||
|
||||
Wraps the common password_strength function to extract the text
|
||||
from the Entry widget and pass it with the strength label.
|
||||
|
||||
Args:
|
||||
_widget: Entry widget that triggered the change (unused)
|
||||
"""
|
||||
password_strength(cls.password.get_text(), cls.strenght_label)
|
||||
Button.next_button.set_sensitive(cls._is_ready())
|
||||
|
||||
@classmethod
|
||||
def initialize(cls):
|
||||
@@ -271,7 +248,8 @@ class ZFS:
|
||||
"""
|
||||
cls.vbox1 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0)
|
||||
cls.vbox1.show()
|
||||
# Chose disk
|
||||
|
||||
# Disk list in a scrolled window
|
||||
sw = Gtk.ScrolledWindow(hexpand=True, vexpand=True)
|
||||
sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN)
|
||||
sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
|
||||
@@ -319,37 +297,39 @@ class ZFS:
|
||||
tree_selection.set_mode(Gtk.SelectionMode.SINGLE)
|
||||
sw.add(treeview)
|
||||
sw.show()
|
||||
|
||||
cls.mirrorTips = Gtk.Label(label=get_text('Please select one drive'))
|
||||
cls.mirrorTips.set_justify(Gtk.Justification.LEFT)
|
||||
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
|
||||
cls.zpool = False
|
||||
pool_name_label = Gtk.Label(label=get_text('<b>Pool Name</b>'))
|
||||
pool_name_label.set_use_markup(True)
|
||||
# Pool Layout
|
||||
cls.mirror = 'stripe'
|
||||
mirror_label = Gtk.Label(label=get_text('Pool Layout'))
|
||||
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.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
|
||||
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'
|
||||
shemebox = Gtk.ComboBoxText()
|
||||
shemebox.append_text("GPT")
|
||||
@@ -360,52 +340,85 @@ class ZFS:
|
||||
shemebox.set_sensitive(False)
|
||||
else:
|
||||
shemebox.set_sensitive(True)
|
||||
|
||||
# GELI Disk encryption
|
||||
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.set_sensitive(True)
|
||||
# password
|
||||
|
||||
# Password
|
||||
cls.passwd_label = Gtk.Label(label=get_text("Password"))
|
||||
cls.password = Gtk.Entry()
|
||||
cls.password.set_sensitive(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.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.set_sensitive(False)
|
||||
cls.repassword.set_visibility(False)
|
||||
cls.repassword.connect("changed", cls.password_verification)
|
||||
# set image for password matching
|
||||
|
||||
# Password match image
|
||||
cls.img = Gtk.Image()
|
||||
cls.img.set_alignment(0.2, 0.5)
|
||||
# table = Gtk.Table(12, 12, True)
|
||||
grid = Gtk.Grid()
|
||||
grid.set_row_spacing(10)
|
||||
# grid.set_column_homogeneous(True)
|
||||
# grid.set_row_homogeneous(True)
|
||||
# grid.attach(Title, 1, 1, 10, 1)
|
||||
grid.attach(mirror_label, 1, 2, 1, 1)
|
||||
grid.attach(mirror_box, 2, 2, 1, 1)
|
||||
grid.attach(pool_name_label, 7, 2, 2, 1)
|
||||
grid.attach(cls.pool, 9, 2, 2, 1)
|
||||
grid.attach(cls.mirrorTips, 1, 3, 8, 1)
|
||||
# grid.attach(zfs4kcheck, 9, 3, 2, 1)
|
||||
grid.attach(sw, 1, 4, 10, 3)
|
||||
# grid.attach(scheme_label, 1, 9, 1, 1)
|
||||
# grid.attach(shemebox, 2, 9, 1, 1)
|
||||
# grid.attach(cls.swap_encrypt_check, 9, 15, 11, 12)
|
||||
# grid.attach(swap_mirror_check, 9, 15, 11, 12)
|
||||
# grid.attach(encrypt_check, 2, 8, 2, 1)
|
||||
# grid.attach(cls.passwd_label, 1, 9, 1, 1)
|
||||
# grid.attach(cls.password, 2, 9, 2, 1)
|
||||
# grid.attach(cls.strenght_label, 4, 9, 2, 1)
|
||||
# grid.attach(cls.vpasswd_label, 1, 10, 1, 1)
|
||||
# grid.attach(cls.repassword, 2, 10, 2, 1)
|
||||
# grid.attach(cls.img, 4, 10, 2, 1)
|
||||
cls.vbox1.pack_start(grid, True, True, 10)
|
||||
cls.img.set_size_request(20, 20)
|
||||
|
||||
# Two-column layout: left settings, right disk list
|
||||
hbox_main = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, homogeneous=False, spacing=10)
|
||||
|
||||
# Left panel: settings grid
|
||||
left_grid = Gtk.Grid()
|
||||
left_grid.set_row_spacing(4)
|
||||
left_grid.set_column_spacing(6)
|
||||
left_grid.set_hexpand(False)
|
||||
|
||||
mirror_label.set_alignment(0, 0.5)
|
||||
pool_label.set_alignment(0, 0.5)
|
||||
swap_label.set_alignment(0, 0.5)
|
||||
cls.passwd_label.set_alignment(0, 0.5)
|
||||
cls.vpasswd_label.set_alignment(0, 0.5)
|
||||
|
||||
# Row 0-1: Pool Layout
|
||||
left_grid.attach(mirror_label, 0, 0, 2, 1)
|
||||
left_grid.attach(mirror_box, 0, 1, 2, 1)
|
||||
# Row 2-3: Pool Name
|
||||
left_grid.attach(pool_label, 0, 2, 2, 1)
|
||||
left_grid.attach(cls.pool, 0, 3, 2, 1)
|
||||
# Row 4-5: Swap Size
|
||||
left_grid.attach(swap_label, 0, 4, 2, 1)
|
||||
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
|
||||
|
||||
@classmethod
|
||||
@@ -465,62 +478,21 @@ class ZFS:
|
||||
model[path][3] = not model[path][3]
|
||||
if model[path][3] is False:
|
||||
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:
|
||||
if cls.check_if_small_disk(model[path][1]) is False:
|
||||
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:
|
||||
cls.check_cell.set_sensitive(False)
|
||||
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)
|
||||
return True
|
||||
@@ -589,32 +561,8 @@ class ZFS:
|
||||
_widget: Entry widget that triggered the verification (unused)
|
||||
"""
|
||||
if cls.password.get_text() == cls.repassword.get_text():
|
||||
cls.img.set_from_stock(Gtk.STOCK_YES, 5)
|
||||
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)
|
||||
cls.img.set_from_icon_name("gtk-yes", Gtk.IconSize.MENU)
|
||||
Button.next_button.set_sensitive(cls._is_ready())
|
||||
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)
|
||||
|
||||
+120
-96
@@ -9,11 +9,11 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-24 18:07-0300\n"
|
||||
"PO-Revision-Date: 2025-07-09 20:20-0300\n"
|
||||
"Last-Translator: Eric Turgeon <EMAIL@ADDRESS>\n"
|
||||
"Last-Translator: Boyarshinov Nikita <boyarshinovn@gmail.com>\n"
|
||||
"Language-Team: Russian <gnu@d07.ru>\n"
|
||||
"Language: ru\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"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
@@ -21,104 +21,104 @@ msgstr ""
|
||||
#: install_station/boot_manager.py:121
|
||||
#: install_station/interface_controller.py:241
|
||||
msgid "Boot Option"
|
||||
msgstr ""
|
||||
msgstr "Вариант загрузки"
|
||||
|
||||
#: install_station/boot_manager.py:135
|
||||
msgid "Setup rEFInd boot manager"
|
||||
msgstr ""
|
||||
msgstr "Настроить менеджер загрузки rEFInd"
|
||||
|
||||
#: install_station/boot_manager.py:149
|
||||
msgid "Setup FreeBSD boot manager"
|
||||
msgstr ""
|
||||
msgstr "Настроить менеджер загрузки FreeBSD"
|
||||
|
||||
#: install_station/boot_manager.py:164
|
||||
#, python-brace-format
|
||||
msgid "FreeBSD {loader} loader only"
|
||||
msgstr ""
|
||||
msgstr "Только загрузчик FreeBSD {loader}"
|
||||
|
||||
#: install_station/common.py:123
|
||||
msgid "Space not allowed"
|
||||
msgstr ""
|
||||
msgstr "Пробелы не разрешены"
|
||||
|
||||
#: install_station/common.py:125 install_station/common.py:127
|
||||
msgid "Super Weak"
|
||||
msgstr ""
|
||||
msgstr "Очень слабый"
|
||||
|
||||
#: install_station/common.py:129 install_station/common.py:135
|
||||
msgid "Very Weak"
|
||||
msgstr ""
|
||||
msgstr "Очень слабый"
|
||||
|
||||
#: install_station/common.py:131 install_station/common.py:137
|
||||
#: install_station/common.py:143
|
||||
msgid "Fairly Weak"
|
||||
msgstr ""
|
||||
msgstr "Довольно слабый"
|
||||
|
||||
#: install_station/common.py:133 install_station/common.py:139
|
||||
#: install_station/common.py:145 install_station/common.py:151
|
||||
msgid "Weak"
|
||||
msgstr ""
|
||||
msgstr "Слабый"
|
||||
|
||||
#: install_station/common.py:141 install_station/common.py:147
|
||||
#: install_station/common.py:153 install_station/common.py:159
|
||||
msgid "Strong"
|
||||
msgstr ""
|
||||
msgstr "Надёжный"
|
||||
|
||||
#: install_station/common.py:149 install_station/common.py:155
|
||||
#: install_station/common.py:161 install_station/common.py:167
|
||||
msgid "Fairly Strong"
|
||||
msgstr ""
|
||||
msgstr "Довольно надёжный"
|
||||
|
||||
#: install_station/common.py:157 install_station/common.py:163
|
||||
msgid "Very Strong"
|
||||
msgstr ""
|
||||
msgstr "Очень надёжный"
|
||||
|
||||
#: install_station/common.py:165 install_station/common.py:169
|
||||
msgid "Super Strong"
|
||||
msgstr ""
|
||||
msgstr "Исключительно надёжный"
|
||||
|
||||
#: install_station/custom.py:248
|
||||
msgid "Create"
|
||||
msgstr ""
|
||||
msgstr "Создать"
|
||||
|
||||
#: install_station/custom.py:252
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
msgstr "Удалить"
|
||||
|
||||
#: install_station/custom.py:256
|
||||
msgid "Revert"
|
||||
msgstr ""
|
||||
msgstr "Отменить"
|
||||
|
||||
#: install_station/custom.py:260
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
msgstr "Авто"
|
||||
|
||||
#: install_station/custom.py:328 install_station/custom.py:566
|
||||
msgid "Add Partition"
|
||||
msgstr ""
|
||||
msgstr "Добавить раздел"
|
||||
|
||||
#: install_station/custom.py:342
|
||||
msgid "Type:"
|
||||
msgstr ""
|
||||
msgstr "Тип:"
|
||||
|
||||
#: install_station/custom.py:343 install_station/custom.py:580
|
||||
msgid "Size(MB):"
|
||||
msgstr ""
|
||||
msgstr "Размер (МБ):"
|
||||
|
||||
#: install_station/custom.py:344
|
||||
msgid "Mount point:"
|
||||
msgstr ""
|
||||
msgstr "Точка монтирования:"
|
||||
|
||||
#: install_station/custom.py:496
|
||||
msgid "Partition Scheme"
|
||||
msgstr ""
|
||||
msgstr "Схема разделов"
|
||||
|
||||
#: install_station/custom.py:515
|
||||
msgid "GPT: GUID Partition Table"
|
||||
msgstr ""
|
||||
msgstr "GPT: Таблица разделов GUID"
|
||||
|
||||
#: install_station/custom.py:516
|
||||
msgid "MBR: DOS Partition"
|
||||
msgstr ""
|
||||
msgstr "MBR: Раздел DOS"
|
||||
|
||||
#: install_station/end.py:10
|
||||
msgid ""
|
||||
@@ -128,30 +128,35 @@ msgid ""
|
||||
"any changes you make or documents you save will\n"
|
||||
"not be preserved on reboot."
|
||||
msgstr ""
|
||||
"Установка завершена. Вам необходимо перезагрузить\n"
|
||||
"компьютер, чтобы использовать новую систему.\n"
|
||||
"Вы можете продолжить использование live-носителя,\n"
|
||||
"однако любые внесённые изменения или сохранённые\n"
|
||||
"документы не сохранятся после перезагрузки."
|
||||
|
||||
#: install_station/end.py:31
|
||||
msgid "Installation Completed"
|
||||
msgstr ""
|
||||
msgstr "Установка завершена"
|
||||
|
||||
#: install_station/end.py:47
|
||||
msgid "Restart"
|
||||
msgstr ""
|
||||
msgstr "Перезагрузить"
|
||||
|
||||
#: install_station/end.py:49
|
||||
msgid "Continue"
|
||||
msgstr ""
|
||||
msgstr "Продолжить"
|
||||
|
||||
#: install_station/error.py:17
|
||||
msgid "Installation Error"
|
||||
msgstr ""
|
||||
msgstr "Ошибка установки"
|
||||
|
||||
#: install_station/error.py:28
|
||||
msgid "Installation has failed!"
|
||||
msgstr ""
|
||||
msgstr "Установка не удалась!"
|
||||
|
||||
#: install_station/error.py:33
|
||||
msgid "GhostBSD issue system"
|
||||
msgstr ""
|
||||
msgstr "Система отслеживания ошибок GhostBSD"
|
||||
|
||||
#: install_station/error.py:35
|
||||
#, python-brace-format
|
||||
@@ -159,14 +164,16 @@ msgid ""
|
||||
"Please report the issue to {anchor}, and \n"
|
||||
"be sure to provide /tmp/.pc-sysinstall/pc-sysinstall.log."
|
||||
msgstr ""
|
||||
"Пожалуйста, сообщите об ошибке в {anchor} и\n"
|
||||
"не забудьте приложить файл /tmp/.pc-sysinstall/pc-sysinstall.log."
|
||||
|
||||
#: install_station/error.py:45
|
||||
msgid "Ok"
|
||||
msgstr ""
|
||||
msgstr "ОК"
|
||||
|
||||
#: install_station/install_type.py:94
|
||||
msgid "How do you want to install GhostBSD?"
|
||||
msgstr ""
|
||||
msgstr "Как вы хотите установить GhostBSD?"
|
||||
|
||||
#: install_station/install_type.py:100
|
||||
msgid ""
|
||||
@@ -174,32 +181,37 @@ msgid ""
|
||||
"Install GhostBSD using Stripe, Mirror, RAIDZ1, RAIDZ2, or RAIDZ3 "
|
||||
"configurations."
|
||||
msgstr ""
|
||||
"<b>Конфигурация дисков</b>\n"
|
||||
"Установите GhostBSD, используя конфигурации Stripe, Mirror, RAIDZ1, RAIDZ2 "
|
||||
"или RAIDZ3."
|
||||
|
||||
#: install_station/install_type.py:113
|
||||
msgid ""
|
||||
"<b>Multi-Boot Configuration</b>\n"
|
||||
"Install GhostBSD with ZFS alongside other operating systems."
|
||||
msgstr ""
|
||||
"<b>Конфигурация Multi-Boot</b>\n"
|
||||
"Установите GhostBSD с ZFS вместе с другими операционными системами."
|
||||
|
||||
#: install_station/install.py:46
|
||||
msgid "Creating ghostbsd_installation.cfg"
|
||||
msgstr ""
|
||||
msgstr "Создание ghostbsd_installation.cfg"
|
||||
|
||||
#: install_station/install.py:50
|
||||
msgid "Deleting partition"
|
||||
msgstr ""
|
||||
msgstr "Удаление раздела"
|
||||
|
||||
#: install_station/install.py:55
|
||||
msgid "Creating disk partition"
|
||||
msgstr ""
|
||||
msgstr "Создание раздела диска"
|
||||
|
||||
#: install_station/install.py:60
|
||||
msgid "Creating new partitions"
|
||||
msgstr ""
|
||||
msgstr "Создание новых разделов"
|
||||
|
||||
#: install_station/install.py:90
|
||||
msgid "Installation in progress"
|
||||
msgstr ""
|
||||
msgstr "Идёт установка"
|
||||
|
||||
#: install_station/install.py:102
|
||||
msgid ""
|
||||
@@ -212,253 +224,265 @@ msgid ""
|
||||
"\n"
|
||||
"We hope you'll enjoy our BSD operating system."
|
||||
msgstr ""
|
||||
"Благодарим за выбор GhostBSD!\n"
|
||||
"\n"
|
||||
"Мы считаем, что каждая операционная система должна быть простой, элегантной, "
|
||||
"безопасной и защищать вашу приватность, оставаясь при этом простой в "
|
||||
"использовании. GhostBSD упрощает FreeBSD для тех, кому не хватает технической "
|
||||
"экспертизы для его использования, и снижает порог входа для использования BSD.\n"
|
||||
"\n"
|
||||
"Мы надеемся, что вам понравится наша операционная система BSD."
|
||||
|
||||
#: install_station/interface_controller.py:24
|
||||
#: install_station/interface_controller.py:35
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
msgstr "Назад"
|
||||
|
||||
#: install_station/interface_controller.py:26
|
||||
#: install_station/interface_controller.py:36
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
msgstr "Отмена"
|
||||
|
||||
#: install_station/interface_controller.py:28
|
||||
#: install_station/interface_controller.py:37
|
||||
#: install_station/interface_controller.py:297
|
||||
msgid "Next"
|
||||
msgstr ""
|
||||
msgstr "Далее"
|
||||
|
||||
#: install_station/interface_controller.py:129
|
||||
#: install_station/interface_controller.py:130 install_station/language.py:101
|
||||
msgid "Welcome to GhostBSD"
|
||||
msgstr ""
|
||||
msgstr "Добро пожаловать в GhostBSD"
|
||||
|
||||
#: install_station/interface_controller.py:139
|
||||
msgid "Button"
|
||||
msgstr ""
|
||||
msgstr "Кнопка"
|
||||
|
||||
#: install_station/interface_controller.py:160
|
||||
msgid "Keyboard Setup"
|
||||
msgstr ""
|
||||
msgstr "Настройка клавиатуры"
|
||||
|
||||
#: install_station/interface_controller.py:172
|
||||
#: install_station/interface_controller.py:274
|
||||
#: install_station/interface_controller.py:279
|
||||
msgid "Network Setup"
|
||||
msgstr ""
|
||||
msgstr "Настройка сети"
|
||||
|
||||
#: install_station/interface_controller.py:183
|
||||
msgid "Try Or Install GhostBSD"
|
||||
msgstr ""
|
||||
msgstr "Попробовать или Установить GhostBSD"
|
||||
|
||||
#: install_station/interface_controller.py:194
|
||||
msgid "Installation Types"
|
||||
msgstr ""
|
||||
msgstr "Типы установки"
|
||||
|
||||
#: install_station/interface_controller.py:221
|
||||
msgid "Custom Configuration"
|
||||
msgstr ""
|
||||
msgstr "Пользовательская конфигурация"
|
||||
|
||||
#: install_station/interface_controller.py:231
|
||||
msgid "ZFS Configuration"
|
||||
msgstr ""
|
||||
msgstr "Конфигурация ZFS"
|
||||
|
||||
#: install_station/interface_controller.py:243
|
||||
msgid "Install"
|
||||
msgstr ""
|
||||
msgstr "Установить"
|
||||
|
||||
#: install_station/interface_controller.py:253
|
||||
msgid "Installation Progress"
|
||||
msgstr ""
|
||||
msgstr "Ход установки"
|
||||
|
||||
#: install_station/interface_controller.py:260
|
||||
msgid "Progress Bar"
|
||||
msgstr ""
|
||||
msgstr "Индикатор выполнения"
|
||||
|
||||
#: install_station/keyboard.py:45
|
||||
msgid "Type here to test your keyboard"
|
||||
msgstr ""
|
||||
msgstr "Печатайте здесь для проверки клавиатуры"
|
||||
|
||||
#: install_station/keyboard.py:102
|
||||
msgid "Keyboard Layout"
|
||||
msgstr ""
|
||||
msgstr "Раскладка клавиатуры"
|
||||
|
||||
#: install_station/keyboard.py:122
|
||||
msgid "Keyboard Models"
|
||||
msgstr ""
|
||||
msgstr "Модели клавиатур"
|
||||
|
||||
#: install_station/keyboard.py:230
|
||||
msgid "English (US)"
|
||||
msgstr ""
|
||||
msgstr "Английский (США)"
|
||||
|
||||
#: install_station/keyboard.py:231
|
||||
msgid "English (Canada)"
|
||||
msgstr ""
|
||||
msgstr "Английский (Канада)"
|
||||
|
||||
#: install_station/keyboard.py:232
|
||||
msgid "French (Canada)"
|
||||
msgstr ""
|
||||
msgstr "Французский (Канада)"
|
||||
|
||||
#: install_station/language.py:93 install_station/language.py:197
|
||||
msgid "Please select your language:"
|
||||
msgstr ""
|
||||
msgstr "Пожалуйста, выберите ваш язык:"
|
||||
|
||||
#: install_station/language.py:99 install_station/language.py:116
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
msgstr "Язык"
|
||||
|
||||
#: install_station/network_setup.py:107 install_station/network_setup.py:184
|
||||
msgid "Network card connected to the internet"
|
||||
msgstr ""
|
||||
msgstr "Сетевая карта подключена к интернету"
|
||||
|
||||
#: install_station/network_setup.py:113 install_station/network_setup.py:190
|
||||
msgid "Network card not connected to the internet"
|
||||
msgstr ""
|
||||
msgstr "Сетевая карта не подключена к интернету"
|
||||
|
||||
#: install_station/network_setup.py:116 install_station/network_setup.py:193
|
||||
msgid "No network card detected"
|
||||
msgstr ""
|
||||
msgstr "Сетевая карта не обнаружена"
|
||||
|
||||
#: install_station/network_setup.py:125 install_station/network_setup.py:203
|
||||
msgid "WiFi card detected and connected to an access point"
|
||||
msgstr ""
|
||||
msgstr "Wi-Fi карта обнаружена и подключена к точке доступа"
|
||||
|
||||
#: install_station/network_setup.py:129 install_station/network_setup.py:207
|
||||
msgid "WiFi card detected but not connected to an access point"
|
||||
msgstr ""
|
||||
msgstr "Wi-Fi карта обнаружена, но не подключена к точке доступа"
|
||||
|
||||
#: install_station/network_setup.py:132 install_station/network_setup.py:210
|
||||
msgid "WiFi card not detected or not supported"
|
||||
msgstr ""
|
||||
msgstr "Wi-Fi карта не обнаружена или не поддерживается"
|
||||
|
||||
#: install_station/network_setup.py:366
|
||||
msgid "Wi-Fi Network Authentication Required"
|
||||
msgstr ""
|
||||
msgstr "Требуется аутентификация в Wi-Fi сети"
|
||||
|
||||
#: install_station/network_setup.py:379
|
||||
#, python-brace-format
|
||||
msgid "{ssid} Wi-Fi Network Authentication failed"
|
||||
msgstr ""
|
||||
msgstr "Аутентификация в Wi-Fi сети {ssid} не удалась"
|
||||
|
||||
#: install_station/network_setup.py:381
|
||||
#, python-brace-format
|
||||
msgid "Authentication required by {ssid} Wi-Fi Network"
|
||||
msgstr ""
|
||||
msgstr "Аутентификация, требуемая Wi-Fi сетью {ssid}"
|
||||
|
||||
#: install_station/network_setup.py:384
|
||||
msgid "Password:"
|
||||
msgstr ""
|
||||
msgstr "Пароль:"
|
||||
|
||||
#: install_station/network_setup.py:387
|
||||
msgid "Show password"
|
||||
msgstr ""
|
||||
msgstr "Показать пароль"
|
||||
|
||||
#: install_station/try_install.py:102
|
||||
msgid "What would you like to do?"
|
||||
msgstr ""
|
||||
msgstr "Что бы вы хотели сделать?"
|
||||
|
||||
#: install_station/try_install.py:109
|
||||
msgid ""
|
||||
"<b>Install GhostBSD</b>\n"
|
||||
"Install GhostBSD on your computer."
|
||||
msgstr ""
|
||||
"<b>Установить GhostBSD</b>\n"
|
||||
"Установить GhostBSD на ваш компьютер."
|
||||
|
||||
#: install_station/try_install.py:122
|
||||
msgid ""
|
||||
"<b>Try GhostBSD</b>\n"
|
||||
"Run GhostBSD without installing to your computer."
|
||||
msgstr ""
|
||||
"<b>Попробовать GhostBSD</b>\n"
|
||||
"Запустить GhostBSD без установки на ваш компьютер."
|
||||
|
||||
#: install_station/use_zfs.py:160
|
||||
msgid ""
|
||||
"Please select 1 or more drive for stripe (select the smallest disk first)"
|
||||
msgstr ""
|
||||
msgstr "Пожалуйста, выберите 1 или более дисков для stripe (сначала выберите наименьший диск)"
|
||||
|
||||
#: install_station/use_zfs.py:167
|
||||
msgid "Please select 2 drive for mirroring (select the smallest disk first)"
|
||||
msgstr ""
|
||||
msgstr "Пожалуйста, выберите 2 диска для зеркалирования (сначала выберите наименьший диск)"
|
||||
|
||||
#: install_station/use_zfs.py:175
|
||||
msgid "Please select 3 drive for RAIDZ1 (select the smallest disk first)"
|
||||
msgstr ""
|
||||
msgstr "Пожалуйста, выберите 3 диска для RAIDZ1 (сначала выберите наименьший диск)"
|
||||
|
||||
#: install_station/use_zfs.py:182
|
||||
msgid "Please select 4 drive for RAIDZ2 (select the smallest disk first)"
|
||||
msgstr ""
|
||||
msgstr "Пожалуйста, выберите 4 диска для RAIDZ2 (сначала выберите наименьший диск)"
|
||||
|
||||
#: install_station/use_zfs.py:189
|
||||
msgid "Please select 5 drive for RAIDZ3 (select the smallest disk first)"
|
||||
msgstr ""
|
||||
msgstr "Пожалуйста, выберите 5 дисков для RAIDZ3 (сначала выберите наименьший диск)"
|
||||
|
||||
#: install_station/use_zfs.py:292
|
||||
msgid "Disk"
|
||||
msgstr ""
|
||||
msgstr "Диск"
|
||||
|
||||
#: install_station/use_zfs.py:299
|
||||
msgid "Size(MB)"
|
||||
msgstr ""
|
||||
msgstr "Размер (МБ)"
|
||||
|
||||
#: install_station/use_zfs.py:305
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
msgstr "Имя"
|
||||
|
||||
#: install_station/use_zfs.py:309
|
||||
msgid "Check"
|
||||
msgstr ""
|
||||
msgstr "Выбрать"
|
||||
|
||||
#: install_station/use_zfs.py:322
|
||||
msgid "Please select one drive"
|
||||
msgstr ""
|
||||
msgstr "Пожалуйста, выберите один диск"
|
||||
|
||||
#: install_station/use_zfs.py:327
|
||||
msgid "<b>Pool Type</b>"
|
||||
msgstr ""
|
||||
msgstr "<b>Тип пула</b>"
|
||||
|
||||
#: install_station/use_zfs.py:331
|
||||
msgid "1+ disks Stripe"
|
||||
msgstr ""
|
||||
msgstr "1+ диск(ов) Stripe"
|
||||
|
||||
#: install_station/use_zfs.py:332
|
||||
msgid "2+ disks Mirror"
|
||||
msgstr ""
|
||||
msgstr "2+ диск(а) Mirror"
|
||||
|
||||
#: install_station/use_zfs.py:333
|
||||
msgid "3 disks RAIDZ1"
|
||||
msgstr ""
|
||||
msgstr "3 диска RAIDZ1"
|
||||
|
||||
#: install_station/use_zfs.py:334
|
||||
msgid "4 disks RAIDZ2"
|
||||
msgstr ""
|
||||
msgstr "4 диска RAIDZ2"
|
||||
|
||||
#: install_station/use_zfs.py:335
|
||||
msgid "5 disks RAIDZ3"
|
||||
msgstr ""
|
||||
msgstr "5 дисков RAIDZ3"
|
||||
|
||||
#: install_station/use_zfs.py:345
|
||||
msgid "<b>Pool Name</b>"
|
||||
msgstr ""
|
||||
msgstr "<b>Имя пула</b>"
|
||||
|
||||
#: install_station/use_zfs.py:365
|
||||
msgid "Encrypt Disk"
|
||||
msgstr ""
|
||||
msgstr "Шифровать диск"
|
||||
|
||||
#: install_station/use_zfs.py:369
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
msgstr "Пароль"
|
||||
|
||||
#: install_station/use_zfs.py:376
|
||||
msgid "Verify it"
|
||||
msgstr ""
|
||||
msgstr "Подтвердите его"
|
||||
|
||||
#: install_station/use_zfs.py:537
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
msgstr "Предупреждение"
|
||||
|
||||
#: install_station/use_zfs.py:548
|
||||
msgid "Smallest disk need to be SELECTED first!\n"
|
||||
msgstr ""
|
||||
msgstr "Сначала нужно выбрать наименьший диск!\n"
|
||||
|
||||
#: install_station/use_zfs.py:549
|
||||
msgid "All the disk selected will reset."
|
||||
msgstr ""
|
||||
msgstr "Все выбранные диски будут сброшены."
|
||||
+119
-94
@@ -13,111 +13,111 @@ msgstr ""
|
||||
"Language-Team: Turkish <gnome-turk@gnome.org>\n"
|
||||
"Language: tr\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"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: install_station/boot_manager.py:121
|
||||
#: install_station/interface_controller.py:241
|
||||
msgid "Boot Option"
|
||||
msgstr ""
|
||||
msgstr "Önyükleme Seçeneği"
|
||||
|
||||
#: install_station/boot_manager.py:135
|
||||
msgid "Setup rEFInd boot manager"
|
||||
msgstr ""
|
||||
msgstr "rEFInd önyükleme yöneticisini kur"
|
||||
|
||||
#: install_station/boot_manager.py:149
|
||||
msgid "Setup FreeBSD boot manager"
|
||||
msgstr ""
|
||||
msgstr "FreeBSD önyükleme yöneticisini kur"
|
||||
|
||||
#: install_station/boot_manager.py:164
|
||||
#, python-brace-format
|
||||
msgid "FreeBSD {loader} loader only"
|
||||
msgstr ""
|
||||
msgstr "Yalnızca FreeBSD {loader} yükleyicisi"
|
||||
|
||||
#: install_station/common.py:123
|
||||
msgid "Space not allowed"
|
||||
msgstr ""
|
||||
msgstr "Boşluk bırakılamaz"
|
||||
|
||||
#: install_station/common.py:125 install_station/common.py:127
|
||||
msgid "Super Weak"
|
||||
msgstr ""
|
||||
msgstr "Aşırı Zayıf"
|
||||
|
||||
#: install_station/common.py:129 install_station/common.py:135
|
||||
msgid "Very Weak"
|
||||
msgstr ""
|
||||
msgstr "Çok Zayıf"
|
||||
|
||||
#: install_station/common.py:131 install_station/common.py:137
|
||||
#: install_station/common.py:143
|
||||
msgid "Fairly Weak"
|
||||
msgstr ""
|
||||
msgstr "Oldukça Zayıf"
|
||||
|
||||
#: install_station/common.py:133 install_station/common.py:139
|
||||
#: install_station/common.py:145 install_station/common.py:151
|
||||
msgid "Weak"
|
||||
msgstr ""
|
||||
msgstr "Zayıf"
|
||||
|
||||
#: install_station/common.py:141 install_station/common.py:147
|
||||
#: install_station/common.py:153 install_station/common.py:159
|
||||
msgid "Strong"
|
||||
msgstr ""
|
||||
msgstr "Güçlü"
|
||||
|
||||
#: install_station/common.py:149 install_station/common.py:155
|
||||
#: install_station/common.py:161 install_station/common.py:167
|
||||
msgid "Fairly Strong"
|
||||
msgstr ""
|
||||
msgstr "Oldukça Güçlü"
|
||||
|
||||
#: install_station/common.py:157 install_station/common.py:163
|
||||
msgid "Very Strong"
|
||||
msgstr ""
|
||||
msgstr "Çok Güçlü"
|
||||
|
||||
#: install_station/common.py:165 install_station/common.py:169
|
||||
msgid "Super Strong"
|
||||
msgstr ""
|
||||
msgstr "Aşırı Güçlü"
|
||||
|
||||
#: install_station/custom.py:248
|
||||
msgid "Create"
|
||||
msgstr ""
|
||||
msgstr "Oluştur"
|
||||
|
||||
#: install_station/custom.py:252
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
msgstr "Sil"
|
||||
|
||||
#: install_station/custom.py:256
|
||||
msgid "Revert"
|
||||
msgstr ""
|
||||
msgstr "Geri al"
|
||||
|
||||
#: install_station/custom.py:260
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
msgstr "Otomatik"
|
||||
|
||||
#: install_station/custom.py:328 install_station/custom.py:566
|
||||
msgid "Add Partition"
|
||||
msgstr ""
|
||||
msgstr "Bölüm Ekle"
|
||||
|
||||
#: install_station/custom.py:342
|
||||
msgid "Type:"
|
||||
msgstr ""
|
||||
msgstr "Tür:"
|
||||
|
||||
#: install_station/custom.py:343 install_station/custom.py:580
|
||||
msgid "Size(MB):"
|
||||
msgstr ""
|
||||
msgstr "Boyut(MB):"
|
||||
|
||||
#: install_station/custom.py:344
|
||||
msgid "Mount point:"
|
||||
msgstr ""
|
||||
msgstr "Bağlama noktası:"
|
||||
|
||||
#: install_station/custom.py:496
|
||||
msgid "Partition Scheme"
|
||||
msgstr ""
|
||||
msgstr "Bölümlendirme Şeması"
|
||||
|
||||
#: install_station/custom.py:515
|
||||
msgid "GPT: GUID Partition Table"
|
||||
msgstr ""
|
||||
msgstr "GPT: GUID Bölümlendirme Tablosu"
|
||||
|
||||
#: install_station/custom.py:516
|
||||
msgid "MBR: DOS Partition"
|
||||
msgstr ""
|
||||
msgstr "MBR: DOS Bölümlendirmesi"
|
||||
|
||||
#: install_station/end.py:10
|
||||
msgid ""
|
||||
@@ -127,30 +127,35 @@ msgid ""
|
||||
"any changes you make or documents you save will\n"
|
||||
"not be preserved on reboot."
|
||||
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
|
||||
msgid "Installation Completed"
|
||||
msgstr ""
|
||||
msgstr "Kurulum Tamamlandı"
|
||||
|
||||
#: install_station/end.py:47
|
||||
msgid "Restart"
|
||||
msgstr ""
|
||||
msgstr "Yeniden Başlat"
|
||||
|
||||
#: install_station/end.py:49
|
||||
msgid "Continue"
|
||||
msgstr ""
|
||||
msgstr "Devam Et"
|
||||
|
||||
#: install_station/error.py:17
|
||||
msgid "Installation Error"
|
||||
msgstr ""
|
||||
msgstr "Kurulum Hatası"
|
||||
|
||||
#: install_station/error.py:28
|
||||
msgid "Installation has failed!"
|
||||
msgstr ""
|
||||
msgstr "Kurulum başarısız oldu!"
|
||||
|
||||
#: install_station/error.py:33
|
||||
msgid "GhostBSD issue system"
|
||||
msgstr ""
|
||||
msgstr "GhostBSD Sorun Takip Sistemi"
|
||||
|
||||
#: install_station/error.py:35
|
||||
#, python-brace-format
|
||||
@@ -158,14 +163,16 @@ msgid ""
|
||||
"Please report the issue to {anchor}, and \n"
|
||||
"be sure to provide /tmp/.pc-sysinstall/pc-sysinstall.log."
|
||||
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
|
||||
msgid "Ok"
|
||||
msgstr ""
|
||||
msgstr "Tamam"
|
||||
|
||||
#: install_station/install_type.py:94
|
||||
msgid "How do you want to install GhostBSD?"
|
||||
msgstr ""
|
||||
msgstr "GhostBSD'yi nasıl yüklemek istersiniz?"
|
||||
|
||||
#: install_station/install_type.py:100
|
||||
msgid ""
|
||||
@@ -173,32 +180,37 @@ msgid ""
|
||||
"Install GhostBSD using Stripe, Mirror, RAIDZ1, RAIDZ2, or RAIDZ3 "
|
||||
"configurations."
|
||||
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
|
||||
msgid ""
|
||||
"<b>Multi-Boot Configuration</b>\n"
|
||||
"Install GhostBSD with ZFS alongside other operating systems."
|
||||
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
|
||||
msgid "Creating ghostbsd_installation.cfg"
|
||||
msgstr ""
|
||||
msgstr "ghostbsd_installation.cfg Oluşturuluyor"
|
||||
|
||||
#: install_station/install.py:50
|
||||
msgid "Deleting partition"
|
||||
msgstr ""
|
||||
msgstr "Bölümlendirme siliniyor"
|
||||
|
||||
#: install_station/install.py:55
|
||||
msgid "Creating disk partition"
|
||||
msgstr ""
|
||||
msgstr "Disk bölümlendirmesi oluşturuluyor"
|
||||
|
||||
#: install_station/install.py:60
|
||||
msgid "Creating new partitions"
|
||||
msgstr ""
|
||||
msgstr "Yeni bölümlendirmeler oluşturuluyor"
|
||||
|
||||
#: install_station/install.py:90
|
||||
msgid "Installation in progress"
|
||||
msgstr ""
|
||||
msgstr "Kuruluyor"
|
||||
|
||||
#: install_station/install.py:102
|
||||
msgid ""
|
||||
@@ -211,253 +223,266 @@ msgid ""
|
||||
"\n"
|
||||
"We hope you'll enjoy our BSD operating system."
|
||||
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:35
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
msgstr "Geri"
|
||||
|
||||
#: install_station/interface_controller.py:26
|
||||
#: install_station/interface_controller.py:36
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
msgstr "İptal"
|
||||
|
||||
#: install_station/interface_controller.py:28
|
||||
#: install_station/interface_controller.py:37
|
||||
#: install_station/interface_controller.py:297
|
||||
msgid "Next"
|
||||
msgstr ""
|
||||
msgstr "İleri"
|
||||
|
||||
#: install_station/interface_controller.py:129
|
||||
#: install_station/interface_controller.py:130 install_station/language.py:101
|
||||
msgid "Welcome to GhostBSD"
|
||||
msgstr ""
|
||||
msgstr "GhostBSD'ye Hoş geldiniz"
|
||||
|
||||
#: install_station/interface_controller.py:139
|
||||
msgid "Button"
|
||||
msgstr ""
|
||||
msgstr "Buton"
|
||||
|
||||
#: install_station/interface_controller.py:160
|
||||
msgid "Keyboard Setup"
|
||||
msgstr ""
|
||||
msgstr "Klavye Yapılandırması"
|
||||
|
||||
#: install_station/interface_controller.py:172
|
||||
#: install_station/interface_controller.py:274
|
||||
#: install_station/interface_controller.py:279
|
||||
msgid "Network Setup"
|
||||
msgstr ""
|
||||
msgstr "Ağ Yapılandırması"
|
||||
|
||||
#: install_station/interface_controller.py:183
|
||||
msgid "Try Or Install GhostBSD"
|
||||
msgstr ""
|
||||
msgstr "GhostBSD'yi Deneyin veya Kurun"
|
||||
|
||||
#: install_station/interface_controller.py:194
|
||||
msgid "Installation Types"
|
||||
msgstr ""
|
||||
msgstr "Kurulum Türleri"
|
||||
|
||||
#: install_station/interface_controller.py:221
|
||||
msgid "Custom Configuration"
|
||||
msgstr ""
|
||||
msgstr "Özel Yapılandırma"
|
||||
|
||||
#: install_station/interface_controller.py:231
|
||||
msgid "ZFS Configuration"
|
||||
msgstr ""
|
||||
msgstr "ZFS Yapılandırması"
|
||||
|
||||
#: install_station/interface_controller.py:243
|
||||
msgid "Install"
|
||||
msgstr ""
|
||||
msgstr "Kur"
|
||||
|
||||
#: install_station/interface_controller.py:253
|
||||
msgid "Installation Progress"
|
||||
msgstr ""
|
||||
msgstr "Kurulum İlerlemesi"
|
||||
|
||||
#: install_station/interface_controller.py:260
|
||||
msgid "Progress Bar"
|
||||
msgstr ""
|
||||
msgstr "İlerleme Çubuğu"
|
||||
|
||||
#: install_station/keyboard.py:45
|
||||
msgid "Type here to test your keyboard"
|
||||
msgstr ""
|
||||
msgstr "Klavyenizi test etmek için buraya yazın"
|
||||
|
||||
#: install_station/keyboard.py:102
|
||||
msgid "Keyboard Layout"
|
||||
msgstr ""
|
||||
msgstr "Klavye Düzeni"
|
||||
|
||||
#: install_station/keyboard.py:122
|
||||
msgid "Keyboard Models"
|
||||
msgstr ""
|
||||
msgstr "Klavye Modelleri"
|
||||
|
||||
#: install_station/keyboard.py:230
|
||||
msgid "English (US)"
|
||||
msgstr ""
|
||||
msgstr "İngilizce (ABD)"
|
||||
|
||||
#: install_station/keyboard.py:231
|
||||
msgid "English (Canada)"
|
||||
msgstr ""
|
||||
msgstr "İngilizce (Kanada)"
|
||||
|
||||
#: install_station/keyboard.py:232
|
||||
msgid "French (Canada)"
|
||||
msgstr ""
|
||||
msgstr "Fransızca (Kanada)"
|
||||
|
||||
#: install_station/language.py:93 install_station/language.py:197
|
||||
msgid "Please select your language:"
|
||||
msgstr ""
|
||||
msgstr "Lütfen dilinizi seçin:"
|
||||
|
||||
#: install_station/language.py:99 install_station/language.py:116
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
msgstr "Dil"
|
||||
|
||||
#: install_station/network_setup.py:107 install_station/network_setup.py:184
|
||||
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
|
||||
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
|
||||
msgid "No network card detected"
|
||||
msgstr ""
|
||||
msgstr "Ağ kartı bulunamadı"
|
||||
|
||||
#: install_station/network_setup.py:125 install_station/network_setup.py:203
|
||||
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
|
||||
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
|
||||
msgid "WiFi card not detected or not supported"
|
||||
msgstr ""
|
||||
msgstr "Wi-Fi kartı algılanmadı veya desteklenmiyor"
|
||||
|
||||
#: install_station/network_setup.py:366
|
||||
msgid "Wi-Fi Network Authentication Required"
|
||||
msgstr ""
|
||||
msgstr "Wi-Fi Ağ Kimlik Doğrulaması Gerekli"
|
||||
|
||||
#: install_station/network_setup.py:379
|
||||
#, python-brace-format
|
||||
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
|
||||
#, python-brace-format
|
||||
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
|
||||
msgid "Password:"
|
||||
msgstr ""
|
||||
msgstr "Şifre:"
|
||||
|
||||
#: install_station/network_setup.py:387
|
||||
msgid "Show password"
|
||||
msgstr ""
|
||||
msgstr "Şifreyi göster"
|
||||
|
||||
#: install_station/try_install.py:102
|
||||
msgid "What would you like to do?"
|
||||
msgstr ""
|
||||
msgstr "Ne yapmak istersiniz?"
|
||||
|
||||
#: install_station/try_install.py:109
|
||||
msgid ""
|
||||
"<b>Install GhostBSD</b>\n"
|
||||
"Install GhostBSD on your computer."
|
||||
msgstr ""
|
||||
"<b>GhostBSD'yi Kur</b>\n"
|
||||
"GhostBSD'yi bilgisayarınıza kurun."
|
||||
|
||||
#: install_station/try_install.py:122
|
||||
msgid ""
|
||||
"<b>Try GhostBSD</b>\n"
|
||||
"Run GhostBSD without installing to your computer."
|
||||
msgstr ""
|
||||
"<b>GhostBSD'yi Dene</b>\n"
|
||||
"Bilgisayarınızda GhostBSD'yi kurmadan çalıştırın."
|
||||
|
||||
#: install_station/use_zfs.py:160
|
||||
msgid ""
|
||||
"Please select 1 or more drive for stripe (select the smallest disk first)"
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
msgid "Disk"
|
||||
msgstr ""
|
||||
msgstr "Disk"
|
||||
|
||||
#: install_station/use_zfs.py:299
|
||||
msgid "Size(MB)"
|
||||
msgstr ""
|
||||
msgstr "Boyut(MB)"
|
||||
|
||||
#: install_station/use_zfs.py:305
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
msgstr "İsim"
|
||||
|
||||
#: install_station/use_zfs.py:309
|
||||
msgid "Check"
|
||||
msgstr ""
|
||||
msgstr "Kontrol Et"
|
||||
|
||||
#: install_station/use_zfs.py:322
|
||||
msgid "Please select one drive"
|
||||
msgstr ""
|
||||
msgstr "Lütfen bir sürücü seçiniz"
|
||||
|
||||
#: install_station/use_zfs.py:327
|
||||
msgid "<b>Pool Type</b>"
|
||||
msgstr ""
|
||||
msgstr "<b>Havuz Türü</b>"
|
||||
|
||||
#: install_station/use_zfs.py:331
|
||||
msgid "1+ disks Stripe"
|
||||
msgstr ""
|
||||
msgstr "1+ diskli Stripe"
|
||||
|
||||
#: install_station/use_zfs.py:332
|
||||
msgid "2+ disks Mirror"
|
||||
msgstr ""
|
||||
msgstr "2+ diskli Mirror"
|
||||
|
||||
#: install_station/use_zfs.py:333
|
||||
msgid "3 disks RAIDZ1"
|
||||
msgstr ""
|
||||
msgstr "3 diskli RAIDZ1"
|
||||
|
||||
#: install_station/use_zfs.py:334
|
||||
msgid "4 disks RAIDZ2"
|
||||
msgstr ""
|
||||
msgstr "4 diskli RAIDZ2"
|
||||
|
||||
#: install_station/use_zfs.py:335
|
||||
msgid "5 disks RAIDZ3"
|
||||
msgstr ""
|
||||
msgstr "5 diskli RAIDZ3"
|
||||
|
||||
#: install_station/use_zfs.py:345
|
||||
msgid "<b>Pool Name</b>"
|
||||
msgstr ""
|
||||
msgstr "<b>Havuz Adı</b>"
|
||||
|
||||
#: install_station/use_zfs.py:365
|
||||
msgid "Encrypt Disk"
|
||||
msgstr ""
|
||||
msgstr "Diski Şifrele"
|
||||
|
||||
#: install_station/use_zfs.py:369
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
msgstr "Şifre"
|
||||
|
||||
#: install_station/use_zfs.py:376
|
||||
msgid "Verify it"
|
||||
msgstr ""
|
||||
msgstr "Doğrula"
|
||||
|
||||
#: install_station/use_zfs.py:537
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
msgstr "Uyarı"
|
||||
|
||||
#: install_station/use_zfs.py:548
|
||||
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
|
||||
msgid "All the disk selected will reset."
|
||||
msgstr ""
|
||||
msgstr "Seçilen tüm diskler sıfırlanacaktır."
|
||||
|
||||
@@ -14,7 +14,7 @@ from DistUtilsExtra.command.build_i18n import build_i18n
|
||||
from DistUtilsExtra.command.clean_i18n import clean_i18n
|
||||
|
||||
prefix = sys.prefix
|
||||
__VERSION__ = '0.1'
|
||||
__VERSION__ = '0.4'
|
||||
PROGRAM_VERSION = __VERSION__
|
||||
|
||||
|
||||
@@ -157,7 +157,8 @@ lib_install_station_backend_query = [
|
||||
data_files = [
|
||||
(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/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'))
|
||||
|
||||
Executable
+36
@@ -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"
|
||||
Reference in New Issue
Block a user