Compare commits

..

1 Commits

@ -1 +1 @@
480933cf3863bbf33551e4ac31eccc3fa05b47fb SOURCES/anaconda-34.25.4.9.tar.bz2 71620d2ed3ce54558da0cb8d49cac48fa89d3a7a SOURCES/anaconda-34.25.4.9.tar.bz2

@ -0,0 +1,27 @@
From 8454ae65d1f7cb2f0221a33fd223c2b460c27017 Mon Sep 17 00:00:00 2001
From: Eugene Zamriy <eugene@zamriy.info>
Date: Fri, 14 Apr 2023 12:53:14 +0300
Subject: [PATCH 01/15] Disable subscription
---
pyanaconda/ui/gui/spokes/subscription.py | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/pyanaconda/ui/gui/spokes/subscription.py b/pyanaconda/ui/gui/spokes/subscription.py
index 4d03689..3b0e6c0 100644
--- a/pyanaconda/ui/gui/spokes/subscription.py
+++ b/pyanaconda/ui/gui/spokes/subscription.py
@@ -551,6 +551,10 @@ class SubscriptionSpoke(NormalSpoke):
# also set the spoke warning banner
self.show_warning_message(error_message)
+ @property
+ def showable(self):
+ return False
+
def initialize(self):
NormalSpoke.initialize(self)
self.initialize_start()
--
2.44.0

@ -0,0 +1,25 @@
From 3e3d00cc21ab256eb55c5e5176f66cd7a348c111 Mon Sep 17 00:00:00 2001
From: Eugene Zamriy <eugene@zamriy.info>
Date: Fri, 14 Apr 2023 12:54:58 +0300
Subject: [PATCH 02/15] Hide CDN source button
---
pyanaconda/ui/gui/spokes/installation_source.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/pyanaconda/ui/gui/spokes/installation_source.py b/pyanaconda/ui/gui/spokes/installation_source.py
index c467bd3..398ac11 100644
--- a/pyanaconda/ui/gui/spokes/installation_source.py
+++ b/pyanaconda/ui/gui/spokes/installation_source.py
@@ -798,6 +798,8 @@ class SourceSpoke(NormalSpoke, GUISpokeInputCheckHandler, SourceSwitchHandler):
self._network_button = self.builder.get_object("networkRadioButton")
self._network_box = self.builder.get_object("networkBox")
+ really_hide(self._cdn_button)
+
self._url_entry = self.builder.get_object("urlEntry")
self._protocol_combo_box = self.builder.get_object("protocolComboBox")
self._iso_chooser_button = self.builder.get_object("isoChooserButton")
--
2.44.0

@ -0,0 +1,29 @@
From d78fb7d96c772f00ce4b35f4f9209b2d629c27e0 Mon Sep 17 00:00:00 2001
From: Eugene Zamriy <eugene@zamriy.info>
Date: Fri, 14 Apr 2023 12:56:19 +0300
Subject: [PATCH 03/15] Set MSVSphere installer colors
---
data/anaconda-gtk.css | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/data/anaconda-gtk.css b/data/anaconda-gtk.css
index 516df62..ef6d79d 100644
--- a/data/anaconda-gtk.css
+++ b/data/anaconda-gtk.css
@@ -92,10 +92,11 @@ infobar.error box {
@define-color redhat #2d2d2d;
@define-color fedora #2f4265;
+@define-color msvsphere #343434;
/* theme colors/images */
-@define-color product_bg_color @fedora;
+@define-color product_bg_color @msvsphere;
/* logo and sidebar classes */
--
2.44.0

@ -0,0 +1,27 @@
From 18fcf71d53a8c476c55076f8a0e8db0904a51670 Mon Sep 17 00:00:00 2001
From: Eugene Zamriy <evgeniy.zamriy@softline.com>
Date: Fri, 28 Jul 2023 23:47:23 +0300
Subject: [PATCH 04/15] Add Minimal and Server repository support
---
pyanaconda/core/constants.py | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/pyanaconda/core/constants.py b/pyanaconda/core/constants.py
index 1496f8c..72a9d39 100644
--- a/pyanaconda/core/constants.py
+++ b/pyanaconda/core/constants.py
@@ -58,7 +58,9 @@ DEFAULT_REPOS = [productName.split('-')[0].lower(),
"fedora-modular-server",
"rawhide",
"BaseOS", # Used by RHEL
- "baseos"] # Used by CentOS Stream
+ "baseos", # Used by CentOS Stream
+ "Server", # Used by MSVSphere
+ "Minimal"] # Used by MSVSphere
DBUS_ANACONDA_SESSION_ADDRESS = "DBUS_ANACONDA_SESSION_BUS_ADDRESS"
--
2.44.0

@ -0,0 +1,55 @@
From 590d0e07d420aa32e69d23e1d70211ceaf35aa1f Mon Sep 17 00:00:00 2001
From: tigro <tigro@msvsphere-os.ru>
Date: Wed, 3 Apr 2024 09:41:32 +0300
Subject: [PATCH 05/15] Set default timezone to Europe/Moscow
---
pyanaconda/modules/timezone/installation.py | 4 ++--
pyanaconda/modules/timezone/timezone.py | 2 +-
pyanaconda/ui/gui/spokes/datetime_spoke.py | 2 +-
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/pyanaconda/modules/timezone/installation.py b/pyanaconda/modules/timezone/installation.py
index fcd04d1..88ac7b5 100644
--- a/pyanaconda/modules/timezone/installation.py
+++ b/pyanaconda/modules/timezone/installation.py
@@ -67,8 +67,8 @@ class ConfigureTimezoneTask(Task):
else:
# this should never happen, but for pity's sake
log.warning("Timezone %s set in kickstart is not valid, "
- "falling back to default (America/New_York).", self._timezone)
- self._timezone = "America/New_York"
+ "falling back to default (Europe/Moscow).", self._timezone)
+ self._timezone = "Europe/Moscow"
def _make_timezone_symlink(self):
"""Create the symlink that actually defines timezone."""
diff --git a/pyanaconda/modules/timezone/timezone.py b/pyanaconda/modules/timezone/timezone.py
index ac5318c..42e0cfe 100644
--- a/pyanaconda/modules/timezone/timezone.py
+++ b/pyanaconda/modules/timezone/timezone.py
@@ -46,7 +46,7 @@ class TimezoneService(KickstartService):
def __init__(self):
super().__init__()
self.timezone_changed = Signal()
- self._timezone = "America/New_York"
+ self._timezone = "Europe/Moscow"
self._priority = TIMEZONE_PRIORITY_DEFAULT
self.geolocation_result_changed = Signal()
diff --git a/pyanaconda/ui/gui/spokes/datetime_spoke.py b/pyanaconda/ui/gui/spokes/datetime_spoke.py
index 117dfe3..f35bab1 100644
--- a/pyanaconda/ui/gui/spokes/datetime_spoke.py
+++ b/pyanaconda/ui/gui/spokes/datetime_spoke.py
@@ -70,7 +70,7 @@ SERVER_WORKING = 3
SERVER_USE = 4
SERVER_OBJECT = 5
-DEFAULT_TZ = "America/New_York"
+DEFAULT_TZ = "Europe/Moscow"
SPLIT_NUMBER_SUFFIX_RE = re.compile(r'([^0-9]*)([-+])([0-9]+)')
--
2.44.0

@ -1,7 +1,7 @@
From 856c3142e2a1060446632d7b56cec2aa9cedb811 Mon Sep 17 00:00:00 2001 From 0fc5e241d84cb01bbaf93bba4e400d2f06b372c9 Mon Sep 17 00:00:00 2001
From: Sergey Cherevko <s.cherevko@msvsphere-os.ru> From: Eugene Zamriy <eugene@zamriy.info>
Date: Wed, 28 Aug 2024 14:59:11 +0300 Date: Fri, 14 Apr 2023 14:59:53 +0300
Subject: [PATCH] Add MSVSphere product config Subject: [PATCH 06/15] Add MSVSphere product config
--- ---
data/product.d/msvsphere.conf | 21 +++++++++++++++++++++ data/product.d/msvsphere.conf | 21 +++++++++++++++++++++
@ -36,5 +36,5 @@ index 0000000..baaf497
+[License] +[License]
+eula = /usr/share/sphere-release/EULA +eula = /usr/share/sphere-release/EULA
-- --
2.43.5 2.44.0

@ -0,0 +1,25 @@
From bb93c14285802d057447369c44b662d2d43521a8 Mon Sep 17 00:00:00 2001
From: Eugene Zamriy <eugene@zamriy.info>
Date: Fri, 14 Apr 2023 18:00:57 +0300
Subject: [PATCH 07/15] Set Russian language as default
---
pyanaconda/core/constants.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pyanaconda/core/constants.py b/pyanaconda/core/constants.py
index 72a9d39..ca9dadc 100644
--- a/pyanaconda/core/constants.py
+++ b/pyanaconda/core/constants.py
@@ -72,7 +72,7 @@ ANACONDA_CONFIG_DIR = "/etc/anaconda/"
ANACONDA_CONFIG_TMP = "/run/anaconda/anaconda.conf"
# NOTE: this should be LANG_TERRITORY.CODESET, e.g. en_US.UTF-8
-DEFAULT_LANG = "en_US.UTF-8"
+DEFAULT_LANG = "ru_RU.UTF-8"
DEFAULT_VC_FONT = "eurlatgr"
--
2.44.0

@ -1,17 +1,33 @@
diff -aruN anaconda-34.25.0.23/data/liveinst/gnome/fedora-welcome.desktop anaconda-34.25.0.23.alma/data/liveinst/gnome/fedora-welcome.desktop From 03809bf006ee92d63a3bc4bc9702ceca757a5e9c Mon Sep 17 00:00:00 2001
--- anaconda-34.25.0.23/data/liveinst/gnome/fedora-welcome.desktop 2021-12-09 18:57:10.000000000 +0300 From: Eugene Zamriy <eugene@zamriy.info>
+++ anaconda-34.25.0.23.alma/data/liveinst/gnome/fedora-welcome.desktop 2022-01-27 16:41:21.926325600 +0300 Date: Fri, 14 Apr 2023 18:23:29 +0300
@@ -1,5 +1,5 @@ Subject: [PATCH 08/15] Replace Fedora references and update translations
---
data/liveinst/gnome/fedora-welcome.desktop | 3 ++-
data/liveinst/gnome/fedora-welcome.js | 6 +++---
docs/intro.rst | 4 ++--
docs/iscsi.rst | 2 +-
pyanaconda/core/constants.py | 4 ++--
5 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/data/liveinst/gnome/fedora-welcome.desktop b/data/liveinst/gnome/fedora-welcome.desktop
index 60e5c38..90f5678 100644
--- a/data/liveinst/gnome/fedora-welcome.desktop
+++ b/data/liveinst/gnome/fedora-welcome.desktop
@@ -1,5 +1,6 @@
[Desktop Entry] [Desktop Entry]
-Name=Welcome to Fedora -Name=Welcome to Fedora
+Name=Welcome to MSVSphere +Name=Welcome to MSVSphere
+Name[ru]=Добро пожаловать в МСВСфера
Exec=/usr/share/anaconda/gnome/fedora-welcome Exec=/usr/share/anaconda/gnome/fedora-welcome
Terminal=false Terminal=false
Type=Application Type=Application
diff -aruN anaconda-34.25.0.23/data/liveinst/gnome/fedora-welcome.js anaconda-34.25.0.23.alma/data/liveinst/gnome/fedora-welcome.js diff --git a/data/liveinst/gnome/fedora-welcome.js b/data/liveinst/gnome/fedora-welcome.js
--- anaconda-34.25.0.23/data/liveinst/gnome/fedora-welcome.js 2021-12-09 18:57:10.000000000 +0300 index 0520557..4c0a66a 100755
+++ anaconda-34.25.0.23.alma/data/liveinst/gnome/fedora-welcome.js 2022-01-27 16:46:02.899570400 +0300 --- a/data/liveinst/gnome/fedora-welcome.js
@@ -62,7 +62,7 @@ +++ b/data/liveinst/gnome/fedora-welcome.js
@@ -62,7 +62,7 @@ const WelcomeWindow = new Lang.Class({
default_width: 600, default_width: 600,
default_height: 550, default_height: 550,
skip_taskbar_hint: true, skip_taskbar_hint: true,
@ -20,7 +36,7 @@ diff -aruN anaconda-34.25.0.23/data/liveinst/gnome/fedora-welcome.js anaconda-34
window_position: Gtk.WindowPosition.CENTER }); window_position: Gtk.WindowPosition.CENTER });
this.window.connect('key-press-event', Lang.bind(this, this.window.connect('key-press-event', Lang.bind(this,
function(w, event) { function(w, event) {
@@ -91,7 +91,7 @@ @@ -91,7 +91,7 @@ const WelcomeWindow = new Lang.Class({
spacing: 16 }); spacing: 16 });
tryContent.add(new Gtk.Image({ icon_name: 'media-optical', tryContent.add(new Gtk.Image({ icon_name: 'media-optical',
pixel_size: 256 })); pixel_size: 256 }));
@ -29,18 +45,19 @@ diff -aruN anaconda-34.25.0.23/data/liveinst/gnome/fedora-welcome.js anaconda-34
let tryButton = new Gtk.Button({ child: tryContent }); let tryButton = new Gtk.Button({ child: tryContent });
buttonBox.add(tryButton); buttonBox.add(tryButton);
@@ -107,7 +107,7 @@ @@ -107,7 +107,7 @@ const WelcomeWindow = new Lang.Class({
let installButton = new Gtk.Button({ child: installContent }); let installButton = new Gtk.Button({ child: installContent });
buttonBox.add(installButton); buttonBox.add(installButton);
- this._label = makeLabel(_("You are currently running Fedora from live media.\nYou can install Fedora now, or choose \"Install to Hard Drive\" in the Activities Overview at any later time."), false); - this._label = makeLabel(_("You are currently running Fedora from live media.\nYou can install Fedora now, or choose \"Install to Hard Drive\" in the Activities Overview at any later time."), false);
+ this._label = makeLabel(_("You are currently running AlmaLinux from live media.\nYou can install MSVSphere now, or choose \"Install to Hard Drive\" in the Activities Overview at any later time."), false); + this._label = makeLabel(_("You are currently running MSVSphere from live media.\nYou can install MSVSphere now, or choose \"Install to Hard Drive\" in the Activities Overview at any later time."), false);
mainGrid.add(this._label); mainGrid.add(this._label);
installButton.connect('clicked', Lang.bind(this, installButton.connect('clicked', Lang.bind(this,
diff -aruN anaconda-34.25.0.23/docs/intro.rst anaconda-34.25.0.23.alma/docs/intro.rst diff --git a/docs/intro.rst b/docs/intro.rst
--- anaconda-34.25.0.23/docs/intro.rst 2021-12-09 18:57:10.000000000 +0300 index bbaf74f..65a1a35 100644
+++ anaconda-34.25.0.23.alma/docs/intro.rst 2022-01-27 16:42:10.434747900 +0300 --- a/docs/intro.rst
+++ b/docs/intro.rst
@@ -1,8 +1,8 @@ @@ -1,8 +1,8 @@
Introduction to Anaconda Introduction to Anaconda
======================== ========================
@ -52,10 +69,11 @@ diff -aruN anaconda-34.25.0.23/docs/intro.rst anaconda-34.25.0.23.alma/docs/intr
During installation, a target computer's hardware is identified and configured During installation, a target computer's hardware is identified and configured
and the appropriate file systems for the system's architecture are created. and the appropriate file systems for the system's architecture are created.
diff -aruN anaconda-34.25.0.23/docs/iscsi.rst anaconda-34.25.0.23.alma/docs/iscsi.rst diff --git a/docs/iscsi.rst b/docs/iscsi.rst
--- anaconda-34.25.0.23/docs/iscsi.rst 2021-12-09 18:57:10.000000000 +0300 index 847078d..6d9c4b3 100644
+++ anaconda-34.25.0.23.alma/docs/iscsi.rst 2022-01-27 16:43:34.244471700 +0300 --- a/docs/iscsi.rst
@@ -139,7 +139,7 @@ +++ b/docs/iscsi.rst
@@ -139,7 +139,7 @@ If for some reason the DeviceTree fails at recognizing iscsi devices as such,
The booting problems are either due to incorrectly generated dracut boot The booting problems are either due to incorrectly generated dracut boot
arguments or they are simply dracut bugs. arguments or they are simply dracut bugs.
@ -64,17 +82,21 @@ diff -aruN anaconda-34.25.0.23/docs/iscsi.rst anaconda-34.25.0.23.alma/docs/iscs
and so the issues can often be reproduced and debugged. and so the issues can often be reproduced and debugged.
diff -aruN anaconda-34.25.0.23/pyanaconda/core/constants.py anaconda-34.25.0.23.alma/pyanaconda/core/constants.py diff --git a/pyanaconda/core/constants.py b/pyanaconda/core/constants.py
--- anaconda-34.25.0.23/pyanaconda/core/constants.py 2021-12-09 18:59:10.000000000 +0300 index ca9dadc..84b03e3 100644
+++ anaconda-34.25.0.23.alma/pyanaconda/core/constants.py 2022-01-27 16:54:30.830920800 +0300 --- a/pyanaconda/core/constants.py
@@ -160,8 +160,8 @@ +++ b/pyanaconda/core/constants.py
@@ -156,8 +156,8 @@ WARNING_SUPPORT_REMOVED = N_(
) )
WARNING_HARDWARE_UNSUPPORTED = N_( WARNING_HARDWARE_UNSUPPORTED = N_(
- "This hardware (or a combination thereof) is not supported by Red Hat. For more information " - "This hardware (or a combination thereof) is not supported by Red Hat. For more information "
- "on supported hardware, please refer to http://www.redhat.com/hardware." - "on supported hardware, please refer to http://www.redhat.com/hardware."
+ "This hardware (or a combination thereof) is not supported by MSVSphere. For more information " + "This hardware (or a combination thereof) is not supported by MSVSphere. For more information "
+ "on supported hardware, please refer to https://msvsphere-os.ru/." + "on supported hardware, please refer to https://msvsphere-os.ru."
) )
# Storage messages # Storage messages
--
2.44.0

@ -0,0 +1,34 @@
From 656b7931e60d6e25323e3ae46e2f15fc7d550ff3 Mon Sep 17 00:00:00 2001
From: Sergey Cherevko <s.cherevko@msvsphere-os.ru>
Date: Wed, 4 Oct 2023 17:41:16 +0300
Subject: [PATCH 09/15] Set Russian as default language for new regions
---
pyanaconda/modules/timezone/initialization.py | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/pyanaconda/modules/timezone/initialization.py b/pyanaconda/modules/timezone/initialization.py
index 0ef8d09..f8f5848 100644
--- a/pyanaconda/modules/timezone/initialization.py
+++ b/pyanaconda/modules/timezone/initialization.py
@@ -97,6 +97,17 @@ class GeolocationTask(Task):
territory = json_reply.get("country_code", "")
timezone = json_reply.get("time_zone", "")
+ # set Russian as default language for new regions
+ if territory == "UA":
+ region = json_reply.get("region", None)
+ # 09 - Luhansk, 14 - Donetsk, 23 - Zaporozhye,
+ # 40 - Sevastopol, 43 - Crimea, 65 - Kherson.
+ # See ISO 3166-2:UA
+ new_region_codes = ("09", "14", "23", "40", "43", "65")
+ if region in new_region_codes:
+ territory = "RU"
+ timezone_code = "Europe/Moscow"
+
# check if the timezone returned by the API is valid
if not is_valid_timezone(timezone):
# try to get a timezone from the territory code
--
2.44.0

@ -0,0 +1,50 @@
From 60ffb83455ecba7fccef1044e7eb17b55c589c44 Mon Sep 17 00:00:00 2001
From: Eugene Zamriy <eugene@zamriy.info>
Date: Wed, 19 Apr 2023 12:06:57 +0300
Subject: [PATCH 10/15] Set English as fallback language for help
---
pyanaconda/core/constants.py | 4 ++++
pyanaconda/ui/lib/help.py | 4 ++--
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/pyanaconda/core/constants.py b/pyanaconda/core/constants.py
index 84b03e3..b7c2e5e 100644
--- a/pyanaconda/core/constants.py
+++ b/pyanaconda/core/constants.py
@@ -74,6 +74,10 @@ ANACONDA_CONFIG_TMP = "/run/anaconda/anaconda.conf"
# NOTE: this should be LANG_TERRITORY.CODESET, e.g. en_US.UTF-8
DEFAULT_LANG = "ru_RU.UTF-8"
+# NOTE: MSVSphere change, set English as a fallback help language because
+# we use Russian by default for UI
+DEFAULT_HELP_LANG = "en_US.UTF-8"
+
DEFAULT_VC_FONT = "eurlatgr"
DEFAULT_KEYBOARD = "us"
diff --git a/pyanaconda/ui/lib/help.py b/pyanaconda/ui/lib/help.py
index 271e587..b8f424d 100644
--- a/pyanaconda/ui/lib/help.py
+++ b/pyanaconda/ui/lib/help.py
@@ -25,7 +25,7 @@ from collections import namedtuple
from pyanaconda.anaconda_loggers import get_module_logger
from pyanaconda.core.configuration.anaconda import conf
-from pyanaconda.core.constants import DEFAULT_LANG, DisplayModes
+from pyanaconda.core.constants import DEFAULT_HELP_LANG, DisplayModes
from pyanaconda.core.util import startProgram, join_paths
from pyanaconda.localization import find_best_locale_match
@@ -224,7 +224,7 @@ def _find_best_help_file(current_locale, available_files):
:param dict available_files: a dictionary of langcodes and help paths
:return str: a path to the best help file or None
"""
- for locale in (current_locale, DEFAULT_LANG):
+ for locale in (current_locale, DEFAULT_HELP_LANG):
best_lang = find_best_locale_match(locale, available_files.keys())
best_path = available_files.get(best_lang, None)
--
2.44.0

@ -0,0 +1,680 @@
From b0fe2c954cbab7d9e963a71efa6be2e9b310ab3d Mon Sep 17 00:00:00 2001
From: tigro <tigro@msvsphere-os.ru>
Date: Wed, 3 Apr 2024 10:11:15 +0300
Subject: [PATCH] Add MSVSphere identification support
---
data/liveinst/gnome/fedora-welcome.desktop | 4 +-
data/liveinst/gnome/fedora-welcome.js | 2 +-
po/ru.po | 216 ++++++++++++++----
pyanaconda/product.py | 36 ++-
.../ui/gui/spokes/installation_progress.py | 8 +-
pyanaconda/ui/gui/spokes/lib/accordion.py | 2 +-
.../ui/gui/spokes/lib/storage_dialogs.py | 4 +-
pyanaconda/ui/gui/spokes/welcome.py | 21 +-
pyanaconda/vnc.py | 42 +++-
9 files changed, 273 insertions(+), 62 deletions(-)
diff --git a/data/liveinst/gnome/fedora-welcome.desktop b/data/liveinst/gnome/fedora-welcome.desktop
index 90f5678..8ca72a7 100644
--- a/data/liveinst/gnome/fedora-welcome.desktop
+++ b/data/liveinst/gnome/fedora-welcome.desktop
@@ -1,6 +1,6 @@
[Desktop Entry]
-Name=Welcome to MSVSphere
-Name[ru]=Добро пожаловать в МСВСфера
+Name=Welcome to MSVSphere ARM 9.4
+Name[ru]=Добро пожаловать в МСВСфера АРМ 9.4
Exec=/usr/share/anaconda/gnome/fedora-welcome
Terminal=false
Type=Application
diff --git a/data/liveinst/gnome/fedora-welcome.js b/data/liveinst/gnome/fedora-welcome.js
index 4c0a66a..e313403 100755
--- a/data/liveinst/gnome/fedora-welcome.js
+++ b/data/liveinst/gnome/fedora-welcome.js
@@ -62,7 +62,7 @@ const WelcomeWindow = new Lang.Class({
default_width: 600,
default_height: 550,
skip_taskbar_hint: true,
- title: _("Welcome to MSVSphere"),
+ title: _("Welcome to MSVSphere ARM 9.4"),
window_position: Gtk.WindowPosition.CENTER });
this.window.connect('key-press-event', Lang.bind(this,
function(w, event) {
diff --git a/po/ru.po b/po/ru.po
index 1edb03d..1f8915b 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -197,7 +197,37 @@ msgstr "Выбор корня"
msgid "The following installations were discovered on your system."
msgstr "В вашей системе обнаружены следующие установки."
-#: pyanaconda/product.py:69
+#: pyanaconda/product.py:83
+#, python-format
+msgid "MSVSphere %(productVersion)s Server INSTALLATION"
+msgstr "УСТАНОВКА МСВСфера %(productVersion)s Сервер"
+
+#: pyanaconda/product.py:85
+#, python-format
+msgid "MSVSphere %(productVersion)s ARM INSTALLATION"
+msgstr "УСТАНОВКА МСВСфера %(productVersion)s АРМ"
+
+#: pyanaconda/product.py:87
+#, python-format
+msgid "MSVSphere %(productVersion)s Cinnamon INSTALLATION"
+msgstr "УСТАНОВКА МСВСфера %(productVersion)s Cinnamon"
+
+#: pyanaconda/product.py:89
+#, python-format
+msgid "MSVSphere %(productVersion)s KDE INSTALLATION"
+msgstr "УСТАНОВКА МСВСфера %(productVersion)s KDE"
+
+#: pyanaconda/product.py:91
+#, python-format
+msgid "MSVSphere %(productVersion)s XFCE INSTALLATION"
+msgstr "УСТАНОВКА МСВСфера %(productVersion)s XFCE"
+
+#: pyanaconda/product.py:93
+#, python-format
+msgid "MSVSphere %(productVersion)s OS INSTALLATION"
+msgstr "УСТАНОВКА МСВСфера %(productVersion)s ОС"
+
+#: pyanaconda/product.py:95
#, python-format
msgid "%(productName)s %(productVersion)s INSTALLATION"
msgstr "УСТАНОВКА %(productName)s %(productVersion)s"
@@ -288,31 +318,91 @@ msgstr "Сервера NTP:"
msgid "not configured"
msgstr "не настроено"
-#: pyanaconda/vnc.py:79
+#: pyanaconda/vnc.py:81
+#, python-format
+msgid "MSVSphere %(productVersion)s Server installation"
+msgstr "Установка МСВСфера %(productVersion)s Сервер"
+
+#: pyanaconda/vnc.py:83
+#, python-format
+msgid "MSVSphere %(productVersion)s ARM installation"
+msgstr "Установка МСВСфера %(productVersion)s АРМ"
+
+#: pyanaconda/vnc.py:85
+#, python-format
+msgid "MSVSphere %(productVersion)s Cinnamon installation"
+msgstr "Установка МСВСфера %(productVersion)s Cinnamon"
+
+#: pyanaconda/vnc.py:87
+#, python-format
+msgid "MSVSphere %(productVersion)s KDE installation"
+msgstr "Установка МСВСфера %(productVersion)s KDE"
+
+#: pyanaconda/vnc.py:89
+#, python-format
+msgid "MSVSphere %(productVersion)s XFCE installation"
+msgstr "Установка МСВСфера %(productVersion)s XFCE"
+
+#: pyanaconda/vnc.py:91
+#, python-format
+msgid "MSVSphere %(productVersion)s OS installation"
+msgstr "Установка МСВСфера %(productVersion)s ОС"
+
+#: pyanaconda/vnc.py:93
#, python-format
msgid "%(productName)s %(productVersion)s installation"
msgstr "Установка %(productName)s %(productVersion)s"
-#: pyanaconda/vnc.py:148
+#: pyanaconda/vnc.py:159
+#, python-format
+msgid "MSVSphere %(productVersion)s Server installation on host %(name)s"
+msgstr "Установка МСВСфера %(productVersion)s Сервер на %(name)s"
+
+#: pyanaconda/vnc.py:162
+#, python-format
+msgid "MSVSphere %(productVersion)s ARM installation on host %(name)s"
+msgstr "Установка МСВСфера %(productVersion)s АРМ на %(name)s"
+
+#: pyanaconda/vnc.py:162
+#, python-format
+msgid "MSVSphere %(productVersion)s Cinnamon installation on host %(name)s"
+msgstr "Установка МСВСфера %(productVersion)s Cinnamon на %(name)s"
+
+#: pyanaconda/vnc.py:162
+#, python-format
+msgid "MSVSphere %(productVersion)s KDE installation on host %(name)s"
+msgstr "Установка МСВСфера %(productVersion)s KDE на %(name)s"
+
+#: pyanaconda/vnc.py:162
+#, python-format
+msgid "MSVSphere %(productVersion)s XFCE installation on host %(name)s"
+msgstr "Установка МСВСфера %(productVersion)s XFCE на %(name)s"
+
+#: pyanaconda/vnc.py:165
+#, python-format
+msgid "MSVSphere %(productVersion)s OS installation on host %(name)s"
+msgstr "Установка МСВСфера %(productVersion)s ОС на %(name)s"
+
+#: pyanaconda/vnc.py:168
#, python-format
msgid "%(productName)s %(productVersion)s installation on host %(name)s"
msgstr "Установка %(productName)s %(productVersion)s на %(name)s"
-#: pyanaconda/vnc.py:167
+#: pyanaconda/vnc.py:204
#, python-format
msgid "Attempting to connect to vnc client on host %s..."
msgstr "Попытка соединения с VNC-клиентом на узле %s..."
-#: pyanaconda/vnc.py:181
+#: pyanaconda/vnc.py:218
msgid "Connected!"
msgstr "Подключено!"
-#: pyanaconda/vnc.py:184
+#: pyanaconda/vnc.py:221
msgid "Will try to connect again in 15 seconds..."
msgstr ""
"Повторная попытка установить соединение будет предпринята через 15 секунд..."
-#: pyanaconda/vnc.py:191
+#: pyanaconda/vnc.py:228
#, python-format
msgid "Giving up attempting to connect after %d try!\n"
msgid_plural "Giving up attempting to connect after %d tries!\n"
@@ -320,16 +410,16 @@ msgstr[0] "Установка соединения прекращена посл
msgstr[1] "Установка соединения прекращена после %d попыток!\n"
msgstr[2] "Установка соединения прекращена после %d попыток!\n"
-#: pyanaconda/vnc.py:199
+#: pyanaconda/vnc.py:236
msgid "Attempting to start vncconfig"
msgstr "Попытка запустить vncconfig"
-#: pyanaconda/vnc.py:212
+#: pyanaconda/vnc.py:249
#, python-format
msgid "Please manually connect your vnc client to %s to begin the install."
msgstr "Для начала установки подключите VNC-клиент к %s вручную."
-#: pyanaconda/vnc.py:214
+#: pyanaconda/vnc.py:251
#, python-format
msgid ""
"Please manually connect your vnc client to IP-ADDRESS:%s to begin the "
@@ -340,15 +430,15 @@ msgstr ""
"Переключитесь на оболочку (Ctrl-B 2) и выполните команду 'ip addr', чтобы "
"найти IP-ADDRESS."
-#: pyanaconda/vnc.py:219
+#: pyanaconda/vnc.py:256
msgid "Starting VNC..."
msgstr "Запуск VNC..."
-#: pyanaconda/vnc.py:256
+#: pyanaconda/vnc.py:293
msgid "The VNC server is now running."
msgstr "Сервер VNC запущен."
-#: pyanaconda/vnc.py:260
+#: pyanaconda/vnc.py:297
msgid ""
"\n"
"\n"
@@ -366,7 +456,7 @@ msgstr ""
"\n"
"\n"
-#: pyanaconda/vnc.py:265
+#: pyanaconda/vnc.py:302
msgid ""
"\n"
"\n"
@@ -382,7 +472,7 @@ msgstr ""
"для ограничения доступа к серверу.\n"
"\n"
-#: pyanaconda/vnc.py:269
+#: pyanaconda/vnc.py:306
msgid ""
"\n"
"\n"
@@ -394,7 +484,7 @@ msgstr ""
"Вы выбрали запуск VNC с паролем.\n"
"\n"
-#: pyanaconda/vnc.py:271
+#: pyanaconda/vnc.py:308
msgid ""
"\n"
"\n"
@@ -406,7 +496,7 @@ msgstr ""
"Неизвестная ошибка. Остановка работы.\n"
"\n"
-#: pyanaconda/vnc.py:293
+#: pyanaconda/vnc.py:330
msgid ""
"VNC password must be six to eight characters long.\n"
"Please enter a new one, or leave blank for no password."
@@ -750,13 +840,13 @@ msgstr ""
#: pyanaconda/core/constants.py:157
msgid ""
-"This hardware (or a combination thereof) is not supported by Red Hat. For "
-"more information on supported hardware, please refer to http://www.redhat."
-"com/hardware."
+"This hardware (or a combination thereof) is not supported by MSVSphere. "
+"For more information on supported hardware, please refer to "
+"https://msvsphere-os.ru."
msgstr ""
-"Это аппаратное обеспечение (или их комбинация) не поддерживается Red Hat. "
-"Для получения дополнительной информации о поддерживаемом оборудовании см. "
-"http://www.redhat.com/hardware."
+"Это аппаратное обеспечение (или их комбинация) не поддерживается "
+"МСВСфера ОС. Для получения дополнительной информации о поддерживаемом "
+"оборудовании см. https://msvsphere-os.ru."
#: pyanaconda/core/constants.py:163
msgid ""
@@ -1507,7 +1597,7 @@ msgstr "Не удалось добавить устройство."
#: pyanaconda/modules/storage/partitioning/interactive/utils.py:213
#, python-brace-format
msgid "New {name} {version} Installation"
-msgstr "Новая установка {name} {version}"
+msgstr "Новая установка МСВСфера {version}"
#: pyanaconda/modules/storage/partitioning/interactive/utils.py:275
msgid "Cannot set label on file system."
@@ -1937,7 +2027,7 @@ msgid ""
"recommended for a normal %(productName)s install."
msgstr ""
"Размер раздела %(mount)s меньше %(size)s, что меньше рекомендованного "
-"размера для обычной установки %(productName)s."
+"размера для обычной установки МСВСфера ОС."
#: pyanaconda/modules/storage/checker/utils.py:131
#, python-format
@@ -3455,7 +3545,7 @@ msgid ""
"You haven't created any mount points for your %(product)s %(version)s "
"installation yet. You can:"
msgstr ""
-"Вы еще не создали точки монтирования для установки %(product)s %(version)s. "
+"Вы еще не создали точки монтирования для установки МСВСфера ОС %(version)s. "
"Вы можете:"
#: pyanaconda/ui/gui/spokes/lib/accordion.py:479
@@ -3487,6 +3577,10 @@ msgstr ""
"_Автоматически созданные точки монтирования могут быть зашифрованы по "
"умолчанию:"
+#: pyanaconda/ui/gui/spokes/lib/accordion.py:547
+msgid "Encrypt my data."
+msgstr "Зашифровать данные."
+
#: pyanaconda/ui/gui/spokes/lib/storage_dialogs.py:69
msgid "Please wait... software metadata still loading."
msgstr "Подождите… Всё ещё загружаются метаданные ПО."
@@ -3498,7 +3592,7 @@ msgid ""
"of available space, including <b>%(software)s</b> for software and "
"<b>%(swap)s</b> for swap space."
msgstr ""
-"Для установки <b>%(product)s</b> требуется <b>%(total)s</b>, в том числе "
+"Для установки <b>МСВСфера ОС</b> требуется <b>%(total)s</b>, в том числе "
"<b>%(software)s</b> для программ и <b>%(swap)s</b> для подкачки."
#: pyanaconda/ui/gui/spokes/lib/storage_dialogs.py:81
@@ -3509,7 +3603,7 @@ msgid ""
"<b>%(software)s</b> for software and <b>%(swap)s</b> for swap space."
msgstr ""
"Для <a href=\"\" title=\"%(tooltip)s\">программного обеспечения "
-"<b>%(product)s</b></a> требуется <b>%(total)s</b> пространства, в том числе "
+"<b>МСВСфера ОС</b></a> требуется <b>%(total)s</b> пространства, в том числе "
"<b>%(software)s</b> для программ и <b>%(swap)s</b> для подкачки."
#: pyanaconda/ui/gui/spokes/lib/storage_dialogs.py:132
@@ -3520,11 +3614,11 @@ msgstr "%s На выбранных дисках доступно:"
#: pyanaconda/ui/gui/spokes/lib/storage_dialogs.py:142
#, python-format
msgid ""
-"<b>You don't have enough space available to install %s</b>. You can shrink "
+"<b>You don't have enough space available to install %(name)s</b>. You can shrink "
"or remove existing partitions via our guided reclaim space tool, or you can "
"adjust your partitions on your own in the custom partitioning interface."
msgstr ""
-"<b>Недостаточно места для установки %s</b>. Можно уменьшить или удалить "
+"<b>Недостаточно места для установки %(name)s</b>. Можно уменьшить или удалить "
"существующие разделы с помощью помощника или самостоятельно выбрать размеры "
"разделов в окне настройки разделов."
@@ -3534,7 +3628,7 @@ msgid ""
" You don't have enough space available to install <b>%(product)s</b>, even "
"if you used all of the free space available on the selected disks."
msgstr ""
-" Недостаточно места для установки <b>%(product)s</b>, даже если "
+" Недостаточно места для установки <b>МСВСфера ОС</b>, даже если "
"использовать все свободное место на выбранных дисках."
#: pyanaconda/ui/gui/spokes/lib/storage_dialogs.py:178
@@ -3545,10 +3639,10 @@ msgid ""
"could add more disks for additional space, modify your software selection to "
"install a smaller version of <b>%(productName)s</b>, or quit the installer."
msgstr ""
-"<b>Недостаточно места для установки %(productName)s</b>, даже если "
+"<b>Недостаточно места для установки МСВСфера ОС</b>, даже если "
"использовать всё свободное место на выбранных дисках. Можно добавить ещё "
"диски, чтобы получить дополнительное место, изменить выбор программного "
-"обеспечения, чтобы установить меньший вариант <b>%(productName)s</b>, или "
+"обеспечения, чтобы установить меньший вариант <b>МСВСфера ОС</b>, или "
"покинуть программу установки."
#: pyanaconda/ui/gui/spokes/lib/subscription.py:66
@@ -4096,7 +4190,7 @@ msgid ""
"you'll be able to view their details here."
msgstr ""
"Здесь будет показана информация о созданных точках монтирования для "
-"установки %(name)s %(version)s."
+"установки МСВСфера %(version)s OC."
#: pyanaconda/ui/gui/spokes/custom_storage.py:615
#: pyanaconda/ui/gui/spokes/advstorage/nvdimm.glade:178
@@ -4431,6 +4525,36 @@ msgstr "Рабочий сервер NTP не настроен"
msgid "What language would you like to use during the installation process?"
msgstr "Какой язык вы хотите использовать в процессе установки?"
+#: pyanaconda/ui/gui/spokes/welcome.py:278
+#, python-format
+msgid "WELCOME TO MSVSphere %(version)s Server"
+msgstr "ДОБРО ПОЖАЛОВАТЬ В МСВСфера %(version)s Сервер"
+
+#: pyanaconda/ui/gui/spokes/welcome.py:280
+#, python-format
+msgid "WELCOME TO MSVSphere %(version)s ARM"
+msgstr "ДОБРО ПОЖАЛОВАТЬ В МСВСфера %(version)s АРМ"
+
+#: pyanaconda/ui/gui/spokes/welcome.py:282
+#, python-format
+msgid "WELCOME TO MSVSphere %(version)s Cinnamon"
+msgstr "ДОБРО ПОЖАЛОВАТЬ В МСВСфера %(version)s Cinnamon"
+
+#: pyanaconda/ui/gui/spokes/welcome.py:284
+#, python-format
+msgid "WELCOME TO MSVSphere %(version)s KDE"
+msgstr "ДОБРО ПОЖАЛОВАТЬ В МСВСфера %(version)s KDE"
+
+#: pyanaconda/ui/gui/spokes/welcome.py:286
+#, python-format
+msgid "WELCOME TO MSVSphere %(version)s XFCE"
+msgstr "ДОБРО ПОЖАЛОВАТЬ В МСВСфера %(version)s XFCE"
+
+#: pyanaconda/ui/gui/spokes/welcome.py:288
+#, python-format
+msgid "WELCOME TO MSVSphere %(version)s OS"
+msgstr "ДОБРО ПОЖАЛОВАТЬ В МСВСфера %(version)s ОС"
+
#: pyanaconda/ui/gui/spokes/welcome.py:209
#, python-format
msgid "WELCOME TO %(name)s %(version)s."
@@ -4482,8 +4606,8 @@ msgid ""
"%s is now successfully installed and ready for you to use!\n"
"Go ahead and reboot your system to start using it!"
msgstr ""
-"%s успешно установлена и готова к использованию!\n"
-"Давайте, перезагружайте систему и начинайте использовать ее!"
+"МСВСфера ОС установлена и готова к работе.\n"
+"Необходимо перезагрузить систему чтобы приступить к использованию."
#: pyanaconda/ui/gui/spokes/installation_progress.py:163
#, python-format
@@ -4491,8 +4615,8 @@ msgid ""
"%s is now successfully installed and ready for you to use!\n"
"Go ahead and quit the application to start using it!"
msgstr ""
-"%s успешно установлено и готово к использованию!\n"
-"Выйдите из приложения и начните использовать его!"
+"МСВСфера ОС установлена и готова к работе.\n"
+"Необходимо выйти из приложения чтобы приступить к использованию."
#: pyanaconda/ui/gui/spokes/installation_source.py:73
msgid "Setting up installation source..."
@@ -7614,21 +7738,21 @@ msgstr "Настройка Liveinst"
#: data/liveinst/gnome/fedora-welcome.desktop:3
#: data/liveinst/gnome/fedora-welcome.js:65
-msgid "Welcome to Fedora"
-msgstr "Добро пожаловать в Fedora"
+msgid "Welcome to MSVSphere ARM 9.4"
+msgstr "Добро пожаловать в МСВСфера АРМ 9.4"
#: data/liveinst/gnome/fedora-welcome.js:94
-msgid "Try Fedora"
-msgstr "Попробуйте Fedora"
+msgid "Try MSVSphere"
+msgstr "Попробовать в режиме Live"
#: data/liveinst/gnome/fedora-welcome.js:110
msgid ""
-"You are currently running Fedora from live media.\n"
-"You can install Fedora now, or choose \"Install to Hard Drive\" in the "
+"You are currently running MSVSphere from live media.\n"
+"You can install MSVSphere now, or choose \"Install to Hard Drive\" in the "
"Activities Overview at any later time."
msgstr ""
-"Fedora запущена с установочного диска.\n"
-"Вы можете установить Fedora сейчас или в любое время выбрать «Установить на "
+"МСВСфера АРМ 9.4 запущена с установочного диска.\n"
+"Вы можете установить операционную систему сейчас или в любое время выбрать "
"жесткий диск» в меню «Обзор»."
#: data/liveinst/gnome/fedora-welcome.js:130
diff --git a/pyanaconda/product.py b/pyanaconda/product.py
index 9dbfe1f..140dbee 100644
--- a/pyanaconda/product.py
+++ b/pyanaconda/product.py
@@ -19,6 +19,7 @@
import configparser
import os
+import re
from pyanaconda.core.i18n import _
@@ -64,9 +65,42 @@ def trim_product_version_for_ui(version):
productVersion = trim_product_version_for_ui(productVersion)
+if productName.startswith("MSVSphere"):
+ productBase = "MSVSphere"
+ if productName == "MSVSphere Server" or \
+ (productName == "MSVSphere" and productVariant == "Minimal"):
+ productFlavor = "Server"
+ elif productName == "MSVSphere" and productVariant == "BaseOS":
+ productFlavor = "OS"
+ elif productName == "MSVSphere":
+ os_release = open("/etc/os-release", "r")
+ for line in os_release:
+ match = re.match("VERSION=.*\((.*?)\)", line)
+ if match:
+ productFlavor = match.group(1)
+ else:
+ productFlavor = "OS"
+else:
+ productBase = productName
+ productFlavor = None
+
def distributionText():
- return _("%(productName)s %(productVersion)s INSTALLATION") % {
+ if productBase == "MSVSphere" and productFlavor == "Server":
+ distro_text = _("MSVSphere %(productVersion)s Server INSTALLATION")
+ elif productBase == "MSVSphere" and productFlavor == "ARM":
+ distro_text = _("MSVSphere %(productVersion)s ARM INSTALLATION")
+ elif productBase == "MSVSphere" and productFlavor == "Cinnamon":
+ distro_text = _("MSVSphere %(productVersion)s Cinnamon INSTALLATION")
+ elif productBase == "MSVSphere" and productFlavor == "KDE":
+ distro_text = _("MSVSphere %(productVersion)s KDE INSTALLATION")
+ elif productBase == "MSVSphere" and productFlavor == "XFCE":
+ distro_text = _("MSVSphere %(productVersion)s XFCE INSTALLATION")
+ elif productBase == "MSVSphere" and productFlavor == "OS":
+ distro_text = _("MSVSphere %(productVersion)s OS INSTALLATION")
+ else:
+ distro_text = _("%(productName)s %(productVersion)s INSTALLATION")
+ return distro_text % {
"productName": productName.upper(),
"productVersion": productVersion.upper()
}
diff --git a/pyanaconda/ui/gui/spokes/installation_progress.py b/pyanaconda/ui/gui/spokes/installation_progress.py
index c2dfbaf..de1fe76 100644
--- a/pyanaconda/ui/gui/spokes/installation_progress.py
+++ b/pyanaconda/ui/gui/spokes/installation_progress.py
@@ -155,14 +155,14 @@ class ProgressSpoke(StandaloneSpoke):
# Set the reboot label.
if conf.target.is_hardware:
continue_text = _(
- "%s is now successfully installed and ready for you to use!\n"
+ "%(name)s is now successfully installed and ready for you to use!\n"
"Go ahead and reboot your system to start using it!"
- ) % productName
+ ) % {"name": productName}
else:
continue_text = _(
- "%s is now successfully installed and ready for you to use!\n"
+ "%(name)s is now successfully installed and ready for you to use!\n"
"Go ahead and quit the application to start using it!"
- ) % productName
+ ) % {"name": productName}
label = self.builder.get_object("rebootLabel")
label.set_text(continue_text)
diff --git a/pyanaconda/ui/gui/spokes/lib/accordion.py b/pyanaconda/ui/gui/spokes/lib/accordion.py
index 32801df..5e2e2b1 100644
--- a/pyanaconda/ui/gui/spokes/lib/accordion.py
+++ b/pyanaconda/ui/gui/spokes/lib/accordion.py
@@ -544,7 +544,7 @@ class CreateNewPage(BasePage):
)
self._createBox.attach(label, 0, 6, 2, 1)
- checkbox = Gtk.CheckButton(label="Encrypt my data.")
+ checkbox = Gtk.CheckButton(label=_("Encrypt my data."))
checkbox.connect("toggled", encrypted_changed_cb)
checkbox.set_active(default_encryption)
checkbox.set_margin_start(18)
diff --git a/pyanaconda/ui/gui/spokes/lib/storage_dialogs.py b/pyanaconda/ui/gui/spokes/lib/storage_dialogs.py
index 2f8338b..e330641 100644
--- a/pyanaconda/ui/gui/spokes/lib/storage_dialogs.py
+++ b/pyanaconda/ui/gui/spokes/lib/storage_dialogs.py
@@ -140,10 +140,10 @@ class NeedSpaceDialog(InstallOptionsDialogBase):
self._set_free_space_labels(disk_free, fs_free)
label_text = _("<b>You don't have enough space available to install "
- "%s</b>. You can shrink or remove existing partitions "
+ "%(name)s</b>. You can shrink or remove existing partitions "
"via our guided reclaim space tool, or you can adjust your "
"partitions on your own in the custom partitioning "
- "interface.") % escape_markup(productName)
+ "interface.") % {"name": escape_markup(productName)}
self.builder.get_object("need_space_options_label").set_markup(label_text)
self._add_modify_watcher(label)
diff --git a/pyanaconda/ui/gui/spokes/welcome.py b/pyanaconda/ui/gui/spokes/welcome.py
index de71615..7937f2c 100644
--- a/pyanaconda/ui/gui/spokes/welcome.py
+++ b/pyanaconda/ui/gui/spokes/welcome.py
@@ -35,7 +35,10 @@ from pyanaconda.ui.gui.spokes.lib.lang_locale_handler import LangLocaleHandler
from pyanaconda.ui.gui.spokes.lib.unsupported_hardware import UnsupportedHardwareDialog
from pyanaconda import localization
-from pyanaconda.product import distributionText, isFinal, productName, productVersion
+from pyanaconda.product import (
+ distributionText, isFinal, productName, productVersion, productBase,
+ productFlavor
+)
from pyanaconda import flags
from pyanaconda.core.i18n import _
from pyanaconda.core.util import ipmi_abort
@@ -206,7 +209,21 @@ class WelcomeLanguageSpoke(StandaloneSpoke, LangLocaleHandler):
# The welcome label is special - it has text that needs to be substituted.
welcomeLabel = self.builder.get_object("welcomeLabel")
- welcomeLabel.set_text(_("WELCOME TO %(name)s %(version)s.") %
+ if productBase == "MSVSphere" and productFlavor == "Server":
+ welcome_text = _("WELCOME TO MSVSphere %(version)s Server")
+ elif productBase == "MSVSphere" and productFlavor == "ARM":
+ welcome_text = _("WELCOME TO MSVSphere %(version)s ARM")
+ elif productBase == "MSVSphere" and productFlavor == "Cinnamon":
+ welcome_text = _("WELCOME TO MSVSphere %(version)s Cinnamon")
+ elif productBase == "MSVSphere" and productFlavor == "KDE":
+ welcome_text = _("WELCOME TO MSVSphere %(version)s KDE")
+ elif productBase == "MSVSphere" and productFlavor == "XFCE":
+ welcome_text = _("WELCOME TO MSVSphere %(version)s XFCE")
+ elif productBase == "MSVSphere" and productFlavor == "OS":
+ welcome_text = _("WELCOME TO MSVSphere %(version)s OS")
+ else:
+ welcome_text = _("WELCOME TO %(name)s %(version)s")
+ welcomeLabel.set_text(welcome_text %
{"name" : productName.upper(), "version" : productVersion}) # pylint: disable=no-member
# Retranslate the language (filtering) entry's placeholder text
diff --git a/pyanaconda/vnc.py b/pyanaconda/vnc.py
index 5fadcde..c349de8 100644
--- a/pyanaconda/vnc.py
+++ b/pyanaconda/vnc.py
@@ -76,7 +76,22 @@ class VncServer(object):
self.anaconda = None
self.log = get_stdout_logger()
- self.desktop = _("%(productName)s %(productVersion)s installation")\
+ is_sphere = product.productBase == "MSVSphere"
+ if is_sphere and product.productFlavor == "Server":
+ desktop_text = _("MSVSphere %(productVersion)s Server installation")
+ elif is_sphere and product.productFlavor == "ARM":
+ desktop_text = _("MSVSphere %(productVersion)s ARM installation")
+ elif is_sphere and product.productFlavor == "Cinnamon":
+ desktop_text = _("MSVSphere %(productVersion)s Cinnamon installation")
+ elif is_sphere and product.productFlavor == "KDE":
+ desktop_text = _("MSVSphere %(productVersion)s KDE installation")
+ elif is_sphere and product.productFlavor == "XFCE":
+ desktop_text = _("MSVSphere %(productVersion)s XFCE installation")
+ elif is_sphere and product.productFlavor == "OS":
+ desktop_text = _("MSVSphere %(productVersion)s OS installation")
+ else:
+ desktop_text = _("%(productName)s %(productVersion)s installation")
+ self.desktop = desktop_text \
% {'productName': product.productName,
'productVersion': product.productVersion}
@@ -145,8 +160,29 @@ class VncServer(object):
# figure out product info
if host:
- self.desktop = _("%(productName)s %(productVersion)s installation "
- "on host %(name)s") \
+ is_sphere = product.productBase == "MSVSphere"
+ if is_sphere and product.productFlavor == "Server":
+ desktop_text = _("MSVSphere %(productVersion)s Server "
+ "installation on host %(name)s")
+ elif is_sphere and product.productFlavor == "ARM":
+ desktop_text = _("MSVSphere %(productVersion)s ARM "
+ "installation on host %(name)s")
+ elif is_sphere and product.productFlavor == "Cinnamon":
+ desktop_text = _("MSVSphere %(productVersion)s Cinnamon "
+ "installation on host %(name)s")
+ elif is_sphere and product.productFlavor == "KDE":
+ desktop_text = _("MSVSphere %(productVersion)s KDE "
+ "installation on host %(name)s")
+ elif is_sphere and product.productFlavor == "XFCE":
+ desktop_text = _("MSVSphere %(productVersion)s XFCE "
+ "installation on host %(name)s")
+ elif is_sphere and product.productFlavor == "OS":
+ desktop_text = _("MSVSphere %(productVersion)s OS "
+ "installation on host %(name)s")
+ else:
+ desktop_text = _("%(productName)s %(productVersion)s "
+ "installation on host %(name)s")
+ self.desktop = desktop_text \
% {'productName': product.productName,
'productVersion': product.productVersion,
'name': host}
--
2.44.0

@ -0,0 +1,40 @@
From d89d1e6358188e8f3f3f595cc8af4d90dd78987e Mon Sep 17 00:00:00 2001
From: tigro <tigro@msvsphere-os.ru>
Date: Wed, 3 Apr 2024 10:12:41 +0300
Subject: [PATCH 12/15] Enable administrator by default
---
pyanaconda/ui/gui/spokes/user.glade | 1 +
pyanaconda/ui/lib/users.py | 4 +++-
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/pyanaconda/ui/gui/spokes/user.glade b/pyanaconda/ui/gui/spokes/user.glade
index 3d52a93..c070066 100644
--- a/pyanaconda/ui/gui/spokes/user.glade
+++ b/pyanaconda/ui/gui/spokes/user.glade
@@ -267,6 +267,7 @@
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
+ <property name="active">True</property>
<property name="tooltip-text" translatable="yes" context="GUI|User">Allow this user to run the 'sudo' command.</property>
<property name="use-underline">True</property>
<property name="xalign">0</property>
diff --git a/pyanaconda/ui/lib/users.py b/pyanaconda/ui/lib/users.py
index 2ea6a6f..a0cc1ec 100644
--- a/pyanaconda/ui/lib/users.py
+++ b/pyanaconda/ui/lib/users.py
@@ -79,7 +79,9 @@ def get_user_list(users_module, add_default=False, add_if_not_empty=False):
# we only add default user to an empty list, to add default user to
# a populated list the add_if_not_empty option needs to be used
if not user_data_list or add_if_not_empty:
- user_data_list.insert(0, UserData())
+ data = UserData()
+ data.set_admin_priviledges(True)
+ user_data_list.insert(0, data)
return user_data_list
--
2.44.0

File diff suppressed because it is too large Load Diff

@ -0,0 +1,130 @@
From db3ef1af1713398ef082b0c00875efefffe51d62 Mon Sep 17 00:00:00 2001
From: tigro <tigro@msvsphere-os.ru>
Date: Wed, 3 Apr 2024 10:27:12 +0300
Subject: [PATCH 14/15] Make branding free Russian translation
---
po/ru.po | 34 +++++++++++++++++-----------------
1 file changed, 17 insertions(+), 17 deletions(-)
diff --git a/po/ru.po b/po/ru.po
index 77dceed..0c1143b 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -845,7 +845,7 @@ msgid ""
"https://msvsphere-os.ru."
msgstr ""
"Это аппаратное обеспечение (или их комбинация) не поддерживается "
-"МСВСфера ОС. Для получения дополнительной информации о поддерживаемом "
+"операционной системой. Для получения дополнительной информации о поддерживаемом "
"оборудовании см. https://msvsphere-os.ru."
#: pyanaconda/core/constants.py:163
@@ -2027,7 +2027,7 @@ msgid ""
"recommended for a normal %(productName)s install."
msgstr ""
"Размер раздела %(mount)s меньше %(size)s, что меньше рекомендованного "
-"размера для обычной установки МСВСфера ОС."
+"размера для обычной установки операционной системы."
#: pyanaconda/modules/storage/checker/utils.py:131
#, python-format
@@ -3545,7 +3545,7 @@ msgid ""
"You haven't created any mount points for your %(product)s %(version)s "
"installation yet. You can:"
msgstr ""
-"Вы еще не создали точки монтирования для установки МСВСфера ОС %(version)s. "
+"Вы еще не создали точки монтирования для установки операционной системы. "
"Вы можете:"
#: pyanaconda/ui/gui/spokes/lib/accordion.py:479
@@ -3592,7 +3592,7 @@ msgid ""
"of available space, including <b>%(software)s</b> for software and "
"<b>%(swap)s</b> for swap space."
msgstr ""
-"Для установки <b>МСВСфера ОС</b> требуется <b>%(total)s</b>, в том числе "
+"Для установки <b>операционной системы</b> требуется <b>%(total)s</b>, в том числе "
"<b>%(software)s</b> для программ и <b>%(swap)s</b> для подкачки."
#: pyanaconda/ui/gui/spokes/lib/storage_dialogs.py:81
@@ -3602,8 +3602,8 @@ msgid ""
"selection</a> requires <b>%(total)s</b> of available space, including "
"<b>%(software)s</b> for software and <b>%(swap)s</b> for swap space."
msgstr ""
-"Для <a href=\"\" title=\"%(tooltip)s\">программного обеспечения "
-"<b>МСВСфера ОС</b></a> требуется <b>%(total)s</b> пространства, в том числе "
+"Для <a href=\"\" title=\"%(tooltip)s\">установки "
+"<b>операционной системы</b></a> требуется <b>%(total)s</b> пространства, в том числе "
"<b>%(software)s</b> для программ и <b>%(swap)s</b> для подкачки."
#: pyanaconda/ui/gui/spokes/lib/storage_dialogs.py:132
@@ -3618,7 +3618,7 @@ msgid ""
"or remove existing partitions via our guided reclaim space tool, or you can "
"adjust your partitions on your own in the custom partitioning interface."
msgstr ""
-"<b>Недостаточно места для установки %(name)s</b>. Можно уменьшить или удалить "
+"<b>Недостаточно места для установки операционной системы</b>. Можно уменьшить или удалить "
"существующие разделы с помощью помощника или самостоятельно выбрать размеры "
"разделов в окне настройки разделов."
@@ -3628,7 +3628,7 @@ msgid ""
" You don't have enough space available to install <b>%(product)s</b>, even "
"if you used all of the free space available on the selected disks."
msgstr ""
-" Недостаточно места для установки <b>МСВСфера ОС</b>, даже если "
+" Недостаточно места для установки <b>операционной системы</b>, даже если "
"использовать все свободное место на выбранных дисках."
#: pyanaconda/ui/gui/spokes/lib/storage_dialogs.py:178
@@ -3639,10 +3639,10 @@ msgid ""
"could add more disks for additional space, modify your software selection to "
"install a smaller version of <b>%(productName)s</b>, or quit the installer."
msgstr ""
-"<b>Недостаточно места для установки МСВСфера ОС</b>, даже если "
+"<b>Недостаточно места для установки операционной системы</b>, даже если "
"использовать всё свободное место на выбранных дисках. Можно добавить ещё "
"диски, чтобы получить дополнительное место, изменить выбор программного "
-"обеспечения, чтобы установить меньший вариант <b>МСВСфера ОС</b>, или "
+"обеспечения, чтобы установить меньший вариант <b>системы</b>, или "
"покинуть программу установки."
#: pyanaconda/ui/gui/spokes/lib/subscription.py:66
@@ -4190,7 +4190,7 @@ msgid ""
"you'll be able to view their details here."
msgstr ""
"Здесь будет показана информация о созданных точках монтирования для "
-"установки МСВСфера %(version)s OC."
+"установки операционной системы."
#: pyanaconda/ui/gui/spokes/custom_storage.py:615
#: pyanaconda/ui/gui/spokes/advstorage/nvdimm.glade:178
@@ -4603,20 +4603,20 @@ msgstr "_Завершить установку"
#: pyanaconda/ui/gui/spokes/installation_progress.py:158
#, python-format
msgid ""
-"%s is now successfully installed and ready for you to use!\n"
+"%(name)s is now successfully installed and ready for you to use!\n"
"Go ahead and reboot your system to start using it!"
msgstr ""
-"МСВСфера ОС установлена и готова к работе.\n"
-"Необходимо перезагрузить систему чтобы приступить к использованию."
+"Операционная система установлена и готова к работе.\n"
+"Необходимо перезагрузить компьютер, чтобы приступить к использованию."
#: pyanaconda/ui/gui/spokes/installation_progress.py:163
#, python-format
msgid ""
-"%s is now successfully installed and ready for you to use!\n"
+"%(name)s is now successfully installed and ready for you to use!\n"
"Go ahead and quit the application to start using it!"
msgstr ""
-"МСВСфера ОС установлена и готова к работе.\n"
-"Необходимо выйти из приложения чтобы приступить к использованию."
+"Операционная система установлена и готова к работе.\n"
+"Необходимо выйти из приложения, чтобы приступить к использованию."
#: pyanaconda/ui/gui/spokes/installation_source.py:73
msgid "Setting up installation source..."
--
2.44.0

@ -0,0 +1,98 @@
From 667ff8db6e0a78ee05cf41b768da8ec8fbc23858 Mon Sep 17 00:00:00 2001
From: tigro <tigro@msvsphere-os.ru>
Date: Mon, 25 Dec 2023 14:51:32 +0300
Subject: [PATCH 15/15] Drop sphere url
---
po/ru.po | 16 ++++++++--------
pyanaconda/core/constants.py | 6 +++---
2 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/po/ru.po b/po/ru.po
index f9ad24e..4619491 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -463,11 +463,11 @@ msgstr ""
msgid ""
"This hardware (or a combination thereof) is not supported by MSVSphere. "
"For more information on supported hardware, please refer to "
-"https://msvsphere-os.ru."
+"documentation."
msgstr ""
"Это аппаратное обеспечение (или их комбинация) не поддерживается "
"операционной системой. Для получения дополнительной информации о поддерживаемом "
-"оборудовании см. https://msvsphere-os.ru."
+"оборудовании см. документацию."
#: pyanaconda/core/constants.py:163
msgid ""
@@ -486,29 +486,29 @@ msgid ""
"Simultaneous Multithreading (SMT) technology can provide performance "
"improvements for certain workloads, but introduces several publicly "
"disclosed security issues. You have the option of disabling SMT, which may "
-"impact performance. If you choose to leave SMT enabled, please read https://"
-"docs.msvsphere-os.ru/knowledge-base/security/smt.html to understand your potential risks and learn about other "
+"impact performance. If you choose to leave SMT enabled, please read "
+"documentation to understand your potential risks and learn about other "
"ways to mitigate these risks."
msgstr ""
"Технология одновременной многопоточности (SMT) может обеспечить повышение "
"производительности при определенных рабочих нагрузках, но привносит "
"несколько известных проблем безопасности. Вы можете отключить SMT, что может "
"повлиять на производительность. Если вы решите оставить SMT включенным, "
-"прочитайте https://docs.msvsphere-os.ru/knowledge-base/security/smt.html для понимания потенциальных рисков и "
+"прочитайте документацию для понимания потенциальных рисков и "
"чтобы узнать о других способах снижения этих рисков."
#: pyanaconda/core/constants.py:183
msgid ""
"Simultaneous Multithreading (SMT) may improve performance for certain "
"workloads, but introduces several publicly disclosed security issues. You "
-"can disable SMT, which may impact performance. Please read https://docs.msvsphere-os.ru/"
-"knowledge-base/security/smt.html to understand potential risks and learn about ways to mitigate "
+"can disable SMT, which may impact performance. Please read "
+"documentation to understand potential risks and learn about ways to mitigate "
"these risks."
msgstr ""
"Одновременная многопоточность (SMT) может увеличить производительность при "
"определенных рабочих нагрузках, но привносит несколько известных проблем "
"безопасности. Можно отключить SMT, что может повлиять на производительность. "
-"Прочитайте https://docs.msvsphere-os.ru/knowledge-base/security/smt.html для понимания потенциальных рисков и "
+"Прочитайте документацию для понимания потенциальных рисков и "
"чтобы узнать о способах снижения этих рисков."
#: pyanaconda/core/constants.py:199
diff --git a/pyanaconda/core/constants.py b/pyanaconda/core/constants.py
index b00c276..1b6aee3 100644
--- a/pyanaconda/core/constants.py
+++ b/pyanaconda/core/constants.py
@@ -161,7 +161,7 @@ WARNING_SUPPORT_REMOVED = N_(
WARNING_HARDWARE_UNSUPPORTED = N_(
"This hardware (or a combination thereof) is not supported by MSVSphere. For more information "
- "on supported hardware, please refer to https://msvsphere-os.ru."
+ "on supported hardware, please refer to documentation."
)
# Storage messages
@@ -180,7 +180,7 @@ WARNING_SMT_ENABLED_GUI = N_(
"improvements for certain workloads, but introduces several publicly "
"disclosed security issues. You have the option of disabling SMT, which "
"may impact performance. If you choose to leave SMT enabled, please read "
- "https://docs.msvsphere-os.ru/knowledge-base/security/smt.html to understand your potential risks and learn "
+ "documentation to understand your potential risks and learn "
"about other ways to mitigate these risks."
)
@@ -189,7 +189,7 @@ WARNING_SMT_ENABLED_TUI = N_(
"Simultaneous Multithreading (SMT) may improve performance for certain "
"workloads, but introduces several publicly disclosed security issues. "
"You can disable SMT, which may impact performance. Please read "
- "https://docs.msvsphere-os.ru/knowledge-base/security/smt.html to understand potential risks and learn about "
+ "documentation to understand potential risks and learn about "
"ways to mitigate these risks."
)
--
2.43.0

@ -0,0 +1,25 @@
From b9fe4624a8f34bac765fd2788abebfec429cc0a2 Mon Sep 17 00:00:00 2001
From: tigro <tigro@msvsphere-os.ru>
Date: Mon, 12 Aug 2024 12:29:06 +0300
Subject: [PATCH 16/16] Set LatGrkCyr-8x16 as default font instead of eurlatgr
---
pyanaconda/core/constants.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pyanaconda/core/constants.py b/pyanaconda/core/constants.py
index 78577cb..0bd5227 100644
--- a/pyanaconda/core/constants.py
+++ b/pyanaconda/core/constants.py
@@ -78,7 +78,7 @@ DEFAULT_LANG = "ru_RU.UTF-8"
# we use Russian by default for UI
DEFAULT_HELP_LANG = "en_US.UTF-8"
-DEFAULT_VC_FONT = "eurlatgr"
+DEFAULT_VC_FONT = "LatGrkCyr-8x16"
DEFAULT_KEYBOARD = "us"
--
2.46.0

@ -0,0 +1,488 @@
From 2716b292b9d42961222fd645c6b2d281d46d6688 Mon Sep 17 00:00:00 2001
From: Dmitry Samoylik <Dmitriy.Samoylik@softline.com>
Date: Thu, 26 Sep 2024 16:57:48 +0300
Subject: [PATCH] Implement show EULA before installation
---
data/anaconda.conf | 4 +-
pyanaconda/core/configuration/license.py | 2 -
pyanaconda/core/eula.py | 23 ++++
pyanaconda/ui/categories/eula.py | 14 +++
pyanaconda/ui/gui/spokes/eula.glade | 136 +++++++++++++++++++++++
pyanaconda/ui/gui/spokes/eula.py | 107 ++++++++++++++++++
pyanaconda/ui/tui/spokes/eula.py | 128 +++++++++++++++++++++
7 files changed, 409 insertions(+), 5 deletions(-)
create mode 100644 pyanaconda/core/eula.py
create mode 100644 pyanaconda/ui/categories/eula.py
create mode 100644 pyanaconda/ui/gui/spokes/eula.glade
create mode 100644 pyanaconda/ui/gui/spokes/eula.py
create mode 100644 pyanaconda/ui/tui/spokes/eula.py
diff --git a/data/anaconda.conf b/data/anaconda.conf
index b5878e3..c15e99d 100644
--- a/data/anaconda.conf
+++ b/data/anaconda.conf
@@ -308,9 +308,7 @@ password_policies =
# If the given distribution has an EULA & feels the need to
# tell the user about it fill in this variable by a path
# pointing to a file with the EULA on the installed system.
-#
-# This is currently used just to show the path to the file to
-# the user at the end of the installation.
+
eula =
diff --git a/pyanaconda/core/configuration/license.py b/pyanaconda/core/configuration/license.py
index 04c44bf..a51f52a 100644
--- a/pyanaconda/core/configuration/license.py
+++ b/pyanaconda/core/configuration/license.py
@@ -31,7 +31,5 @@ class LicenseSection(Section):
tell the user about it fill in this variable by a path
pointing to a file with the EULA on the installed system.
- This is currently used just to show the path to the file to
- the user at the end of the installation.
"""
return self._get_option("eula", str)
diff --git a/pyanaconda/core/eula.py b/pyanaconda/core/eula.py
new file mode 100644
index 0000000..15a393e
--- /dev/null
+++ b/pyanaconda/core/eula.py
@@ -0,0 +1,23 @@
+import os
+from pyanaconda.core.configuration.anaconda import conf
+
+def get_license_file_name():
+ """Get filename of the license file best matching current localization settings.
+ :return: filename of the license file or None if no license file found
+ :rtype: str or None
+ """
+ if not conf.license.eula:
+ return None
+
+ if not os.path.exists(conf.license.eula):
+ return None
+
+ return conf.license.eula
+
+
+def eula_available():
+ """Report if it looks like there is an EULA available on the system.
+ :return: True if an EULA seems to be available, False otherwise
+ :rtype: bool
+ """
+ return bool(get_license_file_name())
diff --git a/pyanaconda/ui/categories/eula.py b/pyanaconda/ui/categories/eula.py
new file mode 100644
index 0000000..0a4fe96
--- /dev/null
+++ b/pyanaconda/ui/categories/eula.py
@@ -0,0 +1,14 @@
+from pyanaconda.ui.categories import SpokeCategory
+from pyanaconda.core.i18n import _
+
+__all__ = ["LicensingCategory"]
+
+class LicensingCategory(SpokeCategory):
+
+ @staticmethod
+ def get_title():
+ return _("LICENSING")
+
+ @staticmethod
+ def get_sort_order():
+ return 900
diff --git a/pyanaconda/ui/gui/spokes/eula.glade b/pyanaconda/ui/gui/spokes/eula.glade
new file mode 100644
index 0000000..1d340f0
--- /dev/null
+++ b/pyanaconda/ui/gui/spokes/eula.glade
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.6 -->
+ <!-- interface-requires AnacondaWidgets 1.0 -->
+ <object class="GtkTextBuffer" id="eulaBuffer">
+ <property name="text">The license will go here</property>
+ </object>
+ <object class="AnacondaSpokeWindow" id="eulaWindow">
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="window_name" translatable="yes">License Information</property>
+ <signal name="button-clicked" handler="on_back_clicked" swapped="no"/>
+ <child internal-child="main_box">
+ <object class="GtkBox" id="AnacondaSpokeWindow-main_box1">
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child internal-child="nav_box">
+ <object class="GtkEventBox" id="AnacondaSpokeWindow-nav_box1">
+ <property name="can_focus">False</property>
+ <child internal-child="nav_area">
+ <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1">
+ <property name="can_focus">False</property>
+ <property name="margin_left">6</property>
+ <property name="margin_right">6</property>
+ <property name="margin_top">6</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child internal-child="alignment">
+ <object class="GtkAlignment" id="AnacondaSpokeWindow-alignment1">
+ <property name="can_focus">False</property>
+ <property name="xscale">0.8</property>
+ <property name="yscale">0.8</property>
+ <child internal-child="action_area">
+ <object class="GtkBox" id="mainBox">
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="licenseAgreementLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="margin_top">24</property>
+ <property name="margin_bottom">6</property>
+ <property name="label" translatable="yes">License Agreement:</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="eulaBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkScrolledWindow" id="eulaScrolledWindow">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTextView" id="eulaView">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="margin_bottom">18</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="vscroll_policy">natural</property>
+ <property name="pixels_above_lines">12</property>
+ <property name="editable">False</property>
+ <property name="wrap_mode">word</property>
+ <property name="left_margin">12</property>
+ <property name="right_margin">12</property>
+ <property name="cursor_visible">False</property>
+ <property name="buffer">eulaBuffer</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="agreeCheckButton">
+ <property name="label" translatable="yes">I _accept the license agreement</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="on_check_button_toggled" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>
diff --git a/pyanaconda/ui/gui/spokes/eula.py b/pyanaconda/ui/gui/spokes/eula.py
new file mode 100644
index 0000000..a487c6b
--- /dev/null
+++ b/pyanaconda/ui/gui/spokes/eula.py
@@ -0,0 +1,107 @@
+import logging
+
+from pyanaconda.ui.common import FirstbootOnlySpokeMixIn
+from pyanaconda.ui.gui.spokes import NormalSpoke
+from pyanaconda.core.i18n import _, CN_
+from pyanaconda.core import eula
+from pyanaconda.ui.categories.eula import LicensingCategory
+from pyanaconda.anaconda_loggers import get_module_logger
+from pykickstart.constants import FIRSTBOOT_RECONFIG
+
+log = get_module_logger(__name__)
+__all__ = ["EULASpoke"]
+
+
+class EULASpoke(FirstbootOnlySpokeMixIn, NormalSpoke):
+ """The EULA spoke"""
+
+ builderObjects = ["eulaBuffer", "eulaWindow"]
+ mainWidgetName = "eulaWindow"
+ uiFile = "spokes/eula.glade"
+ icon = "application-certificate-symbolic"
+ title = CN_("GUI|Spoke", "_License Information")
+ category = LicensingCategory
+
+ @staticmethod
+ def get_screen_id():
+ """Return a unique id of this UI screen."""
+ return "license-information"
+
+ def initialize(self):
+ log.debug("initializing the EULA spoke")
+ NormalSpoke.initialize(self)
+
+ self._have_eula = True
+ self._eula_buffer = self.builder.get_object("eulaBuffer")
+ self._agree_check_button = self.builder.get_object("agreeCheckButton")
+ self._agree_label = self._agree_check_button.get_child()
+ self._agree_text = self._agree_label.get_text()
+
+ log.debug("looking for the license file")
+ license_file = eula.get_license_file_name()
+ if not license_file:
+ log.error("no license found")
+ self._have_eula = False
+ self._eula_buffer.set_text(_("No license found"))
+ return
+
+ # if there is "eula <...>" in kickstart, use its value
+ if self.data.eula.agreed is not None:
+ self._agree_check_button.set_active(self.data.eula.agreed)
+
+ self._eula_buffer.set_text("")
+ itr = self._eula_buffer.get_iter_at_offset(0)
+ log.debug("opening the license file")
+ with open(license_file, "r") as fobj:
+ # insert the first line without prefixing with space
+ try:
+ first_line = next(fobj)
+ except StopIteration:
+ # nothing in the file
+ return
+ self._eula_buffer.insert(itr, first_line.strip())
+
+ # EULA file may be preformatted for the console, we want to let Gtk
+ # format it (blank lines should be preserved)
+ for line in fobj:
+ stripped_line = line.strip()
+ if stripped_line:
+ self._eula_buffer.insert(itr, " " + stripped_line)
+ else:
+ self._eula_buffer.insert(itr, "\n\n")
+
+ def refresh(self):
+ self._agree_check_button.set_sensitive(self._have_eula)
+ self._agree_check_button.set_active(self.data.eula.agreed)
+
+ def apply(self):
+ self.data.eula.agreed = self._agree_check_button.get_active()
+
+ @property
+ def completed(self):
+ return not self._have_eula or self.data.eula.agreed
+
+ @property
+ def status(self):
+ if not self._have_eula:
+ return _("No license found")
+
+ return _("License accepted") if self.data.eula.agreed else _("License not accepted")
+
+ @classmethod
+ def should_run(cls, environment, data):
+ if eula.eula_available():
+ # don't run if we are in initial-setup in reconfig mode and the EULA has already been accepted
+ if FirstbootOnlySpokeMixIn.should_run(environment, data) and data and data.firstboot.firstboot == FIRSTBOOT_RECONFIG and data.eula.agreed:
+ log.debug("not running license spoke: reconfig mode & license already accepted")
+ return False
+ return True
+ return False
+
+ def on_check_button_toggled(self, *args):
+ if self._agree_check_button.get_active():
+ log.debug("license is now accepted")
+ self._agree_label.set_markup("<b>%s</b>" % self._agree_text)
+ else:
+ log.debug("license no longer accepted")
+ self._agree_label.set_markup(self._agree_text)
diff --git a/pyanaconda/ui/tui/spokes/eula.py b/pyanaconda/ui/tui/spokes/eula.py
new file mode 100644
index 0000000..a3e8e62
--- /dev/null
+++ b/pyanaconda/ui/tui/spokes/eula.py
@@ -0,0 +1,128 @@
+import logging
+
+from pyanaconda.ui.tui.spokes import NormalTUISpoke
+from simpleline.render.widgets import TextWidget, CheckboxWidget
+from simpleline.render.containers import ListRowContainer
+from simpleline.render.screen import UIScreen, InputState
+from simpleline.render.screen_handler import ScreenHandler
+from pyanaconda.ui.common import FirstbootOnlySpokeMixIn
+from pyanaconda.core import eula
+from pyanaconda.ui.categories.eula import LicensingCategory
+from pyanaconda.core.i18n import _, N_
+from pykickstart.constants import FIRSTBOOT_RECONFIG
+
+log = logging.getLogger("initial-setup")
+
+__all__ = ["EULASpoke"]
+
+
+class EULASpoke(FirstbootOnlySpokeMixIn, NormalTUISpoke):
+ """The EULA spoke providing ways to read the license and agree/disagree with it."""
+
+ category = LicensingCategory
+
+ @staticmethod
+ def get_screen_id():
+ """Return a unique id of this UI screen."""
+ return "license-information"
+
+ def __init__(self, *args, **kwargs):
+ NormalTUISpoke.__init__(self, *args, **kwargs)
+ self.title = _("License information")
+ self._container = None
+
+ def initialize(self):
+ NormalTUISpoke.initialize(self)
+
+ def refresh(self, args=None):
+ NormalTUISpoke.refresh(self, args)
+
+ self._container = ListRowContainer(1)
+
+ log.debug("license found")
+ # make the options aligned to the same column (the checkbox has the
+ # '[ ]' prepended)
+ self._container.add(TextWidget("%s\n" % _("Read the License Agreement")),
+ self._show_license_screen_callback)
+
+ self._container.add(CheckboxWidget(title=_("I accept the license agreement"),
+ completed=self.data.eula.agreed),
+ self._license_accepted_callback)
+ self.window.add_with_separator(self._container)
+
+ @property
+ def completed(self):
+ # Either there is no EULA available, or user agrees/disagrees with it.
+ return self.data.eula.agreed
+
+ @property
+ def mandatory(self):
+ # This spoke is always mandatory.
+ return True
+
+ @property
+ def status(self):
+ return _("License accepted") if self.data.eula.agreed else _("License not accepted")
+
+ @classmethod
+ def should_run(cls, environment, data):
+ if eula.eula_available():
+ # don't run if we are in initial-setup in reconfig mode and the EULA has already been accepted
+ if FirstbootOnlySpokeMixIn.should_run(environment, data) and data and data.firstboot.firstboot == FIRSTBOOT_RECONFIG and data.eula.agreed:
+ log.debug("not running license spoke: reconfig mode & license already accepted")
+ return False
+ return True
+ return False
+
+ def apply(self):
+ # nothing needed here, the agreed field is changed in the input method
+ pass
+
+ def input(self, args, key):
+ if not self._container.process_user_input(key):
+ return key
+
+ return InputState.PROCESSED
+
+ @staticmethod
+ def _show_license_screen_callback(data):
+ # show license
+ log.debug("showing the license")
+ eula_screen = LicenseScreen()
+ ScreenHandler.push_screen(eula_screen)
+
+ def _license_accepted_callback(self, data):
+ # toggle EULA agreed checkbox by changing ksdata
+ log.debug("license accepted state changed to: %s", self.data.eula.agreed)
+ self.data.eula.agreed = not self.data.eula.agreed
+ self.redraw()
+
+
+class LicenseScreen(UIScreen):
+ """Screen showing the License without any input from user requested."""
+
+ def __init__(self):
+ super().__init__()
+
+ self._license_file = eula.get_license_file_name()
+
+ def refresh(self, args=None):
+ super().refresh(args)
+
+ # read the license file and make it one long string so that it can be
+ # processed by the TextWidget to fit in the screen in a best possible
+ # way
+ log.debug("reading the license file")
+ with open(self._license_file, 'r') as f:
+ license_text = f.read()
+
+ self.window.add_with_separator(TextWidget(license_text))
+
+ def input(self, args, key):
+ """ Handle user input. """
+ return InputState.PROCESSED_AND_CLOSE
+
+ def prompt(self, args=None):
+ # we don't want to prompt user, just close the screen
+ self.close()
+ return None
--
2.39.2

@ -1,13 +0,0 @@
diff -Naur anaconda-34.25.0.29/pyanaconda/core/constants.py anaconda-34.25.0.29.minimal/pyanaconda/core/constants.py
--- anaconda-34.25.0.29/pyanaconda/core/constants.py 2022-03-17 17:39:24.000000000 +0100
+++ anaconda-34.25.0.29.minimal/pyanaconda/core/constants.py 2022-05-24 14:07:32.000000000 +0200
@@ -58,7 +58,8 @@
"fedora-modular-server",
"rawhide",
"BaseOS", # Used by RHEL
- "baseos"] # Used by CentOS Stream
+ "baseos", # Used by CentOS Stream
+ "Minimal"] # Used by MSVSphere
DBUS_ANACONDA_SESSION_ADDRESS = "DBUS_ANACONDA_SESSION_BUS_ADDRESS"

@ -1,12 +0,0 @@
diff -uNrp anaconda-33.16.3.26.orig/pyanaconda/ui/gui/spokes/installation_source.py anaconda-33.16.3.26/pyanaconda/ui/gui/spokes/installation_source.py
--- anaconda-33.16.3.26.orig/pyanaconda/ui/gui/spokes/installation_source.py 2020-08-24 05:10:07.000000000 -0500
+++ anaconda-33.16.3.26/pyanaconda/ui/gui/spokes/installation_source.py 2020-11-16 10:41:09.663907591 -0600
@@ -704,6 +704,8 @@ class SourceSpoke(NormalSpoke, GUISpokeI
self._network_button = self.builder.get_object("networkRadioButton")
self._network_box = self.builder.get_object("networkBox")
+ really_hide(self._cdn_button)
+
self._url_entry = self.builder.get_object("urlEntry")
self._protocol_combo_box = self.builder.get_object("protocolComboBox")
self._iso_chooser_button = self.builder.get_object("isoChooserButton")

@ -1,14 +0,0 @@
diff -uprN a/pyanaconda/ui/gui/spokes/subscription.py b/pyanaconda/ui/gui/spokes/subscription.py
--- a/pyanaconda/ui/gui/spokes/subscription.py 2020-09-04 11:31:43.743451360 +0300
+++ b/pyanaconda/ui/gui/spokes/subscription.py 2020-09-04 11:33:07.002306508 +0300
@@ -540,6 +540,10 @@ class SubscriptionSpoke(NormalSpoke):
# also set the spoke warning banner
self.show_warning_message(error_message)
+ @property
+ def showable(self):
+ return False
+
def initialize(self):
NormalSpoke.initialize(self)
self.initialize_start()

@ -1,16 +0,0 @@
diff -uprN a/data/anaconda-gtk.css b/data/anaconda-gtk.css
--- a/data/anaconda-gtk.css 2020-11-16 01:33:12.596735620 +0300
+++ b/data/anaconda-gtk.css 2020-11-16 01:35:17.925684936 +0300
@@ -92,10 +92,11 @@ infobar.error {
@define-color redhat #2d2d2d;
@define-color fedora #2f4265;
+@define-color msvsphere #0b2335;
/* theme colors/images */
-@define-color product_bg_color @fedora;
+@define-color product_bg_color @msvsphere;
/* logo and sidebar classes */

File diff suppressed because it is too large Load Diff

@ -1,7 +1,7 @@
Summary: Graphical system installer Summary: Graphical system installer
Name: anaconda Name: anaconda
Version: 34.25.4.9 Version: 34.25.4.9
Release: 1%{?dist}.inferit.4 Release: 1%{?dist}.inferit.2
License: GPLv2+ and MIT License: GPLv2+ and MIT
URL: http://fedoraproject.org/wiki/Anaconda URL: http://fedoraproject.org/wiki/Anaconda
@ -11,15 +11,28 @@ URL: http://fedoraproject.org/wiki/Anaconda
# ./autogen.sh # ./autogen.sh
# make dist # make dist
Source0: %{name}-%{version}.tar.bz2 Source0: %{name}-%{version}.tar.bz2
# I am tired because of the strange changes in translations
Source1: russian-34.25.4.7.po
# MSVSphere patches
Patch1001: 0001-Disable-subscription.patch
Patch1002: 0002-Hide-CDN-source-button.patch
Patch1003: 0003-Set-MSVSphere-installer-colors.patch
Patch1004: 0004-Add-Minimal-and-Server-repository-support.patch
Patch1005: 0005-Set-default-timezone-to-Europe-Moscow.patch
Patch1006: 0006-Add-MSVSphere-product-config.patch
Patch1007: 0007-Set-Russian-language-as-default.patch
Patch1008: 0008-Replace-Fedora-references-and-update-translations.patch
Patch1009: 0009-Set-Russian-as-default-language-for-new-regions.patch
Patch1010: 0010-Set-English-as-fallback-language-for-help.patch
Patch1011: 0011-Add-MSVSphere-identification-support.patch
Patch1012: 0012-Enable-administrator-by-default.patch
Patch1013: 0013-Fix-smt-url.patch
Patch1014: 0014-Make-branding-free-Russian-translation.patch
Patch1015: 0015-Disable-sphere-url.patch
Patch1016: 0016-Set-LatGrkCyr-8x16-as-default-font-instead-of-eurlat.patch
Patch1017: 0017-Implement-show-EULA-before-installation.patch
# AlmaLinux patches
Patch1000: anaconda-almalinux-installer-colors.patch
Patch1001: anaconda-almalinux-disable-subscription.patch
Patch1002: anaconda-almalinux-disable-cdn-radiobutton.patch
Patch1003: anaconda-almalinux-remove-visible-fedora-references.patch
Patch1004: anaconda-almalinux-add-minimal-repo.patch
# MSVSphere
Patch10000: 0001-Add-MSVSphere-product-config.patch
# Versions of required components (done so we make sure the buildrequires # Versions of required components (done so we make sure the buildrequires
# match the requires versions of things). # match the requires versions of things).
@ -313,10 +326,12 @@ options. This includes driver disks, kickstarts, and finding the anaconda
runtime on NFS/HTTP/FTP servers or local disks. runtime on NFS/HTTP/FTP servers or local disks.
%prep %prep
%autosetup -p 1 %setup -q
cp %{SOURCE1} po/ru.po
# Debrand %autopatch -p 1
# de-branding
sed -e 's/RHEL/MSVSphere/g' -i po/*.po sed -e 's/RHEL/MSVSphere/g' -i po/*.po
sed -e 's/Fedora/MSVSphere/g' -i po/*.po
sed -e 's/Red Hat Enterprise Linux/MSVSphere/g' -i po/*.po sed -e 's/Red Hat Enterprise Linux/MSVSphere/g' -i po/*.po
%build %build
@ -427,15 +442,25 @@ desktop-file-install --dir=%{buildroot}%{_datadir}/applications %{buildroot}%{_d
%{_prefix}/libexec/anaconda/dd_* %{_prefix}/libexec/anaconda/dd_*
%changelog %changelog
* Tue Aug 27 2024 Sergey Cherevko <s.cherevko@msvsphere-os.ru> - 34.25.4.9-1.inferit.4 * Thu Sep 26 2024 Dmitry Samoylik <Dmitriy.Samoylik@softline.com> - 34.25.4.9-1.inferit.2
- Test build alma->msvsphere - Implement show EULA before installation
- Rebuilt for MSVSphere 9.4
* Mon Aug 12 2024 Arkady L. Shane <tigro@msvsphere-os.ru> - 34.25.4.9-1.inferit.1
- Set LatGrkCyr-8x16 as default font instead of eurlatgr
* Mon Apr 30 2024 Eduard Abdullin <eabdullin@almalinux.org> - 34.25.4.9-1.alma.1 * Wed May 01 2024 Arkady L. Shane <tigro@msvsphere-os.ru> - 34.25.4.9-1.inferit
- Update to 34.25.4.9 - Apply all MSVSphere patches for Debranding and Location
* Thu Mar 28 2024 Andrew Lukoshko <alukoshko@almalinux.org> - 34.25.4.7-1.alma.1 * Wed Apr 03 2024 Arkady L. Shane <tigro@msvsphere-os.ru> - 34.25.4.9-1.inferit
- AlmaLinux changes - Apply all MSVSphere patches for Debranding and Location
* Thu Mar 14 2024 Radek Vykydal <rvykydal@redhat.com> - 34.25.4.9-1
- Do not initialize kernel features in init (jkonecny)
Resolves: RHEL-27076
* Mon Mar 04 2024 Radek Vykydal <rvykydal@redhat.com> - 34.25.4.8-1
- Update translations
Resolves: RHEL-24945
* Fri Feb 16 2024 Jiri Konecny <jkonecny@redhat.com> - 34.25.4.7-1 * Fri Feb 16 2024 Jiri Konecny <jkonecny@redhat.com> - 34.25.4.7-1
- Lower log file permission in /tmp (jkonecny) - Lower log file permission in /tmp (jkonecny)
@ -524,6 +549,7 @@ desktop-file-install --dir=%{buildroot}%{_datadir}/applications %{buildroot}%{_d
Resolves: rhbz#2223977 Resolves: rhbz#2223977
- Missing translation for button labels in Beta dialog - Missing translation for button labels in Beta dialog
Resolves: rhbz#2225450 Resolves: rhbz#2225450
* Wed Jul 12 2023 Jiri Konecny <jkonecny@redhat.com> - 34.25.3.7-1 * Wed Jul 12 2023 Jiri Konecny <jkonecny@redhat.com> - 34.25.3.7-1
- Allow showing passphrase when unlocking LUKS device (jstodola) - Allow showing passphrase when unlocking LUKS device (jstodola)
Resolves: rhbz#2013190 Resolves: rhbz#2013190
@ -652,6 +678,9 @@ desktop-file-install --dir=%{buildroot}%{_datadir}/applications %{buildroot}%{_d
- oemdrv: wait up to 5 seconds for disks to be handled (rmetrich) - oemdrv: wait up to 5 seconds for disks to be handled (rmetrich)
Resolves: rhbz#2171811 Resolves: rhbz#2171811
* Thu Apr 13 2023 MSVSphere Packaging Team <packager@msvsphere.ru> - 34.25.2.10-1
- Rebuilt for MSVSphere 9.2 beta
* Wed Mar 22 2023 Martin Kolman <mkolman@redhat.com> - 34.25.2.10-1 * Wed Mar 22 2023 Martin Kolman <mkolman@redhat.com> - 34.25.2.10-1
- Update translations - Update translations
Resolves: rhbz#2139640 Resolves: rhbz#2139640

Loading…
Cancel
Save