diff --git a/SOURCES/0001-Backport-dracut-chroot-umount-fix.patch b/SOURCES/0001-Backport-dracut-chroot-umount-fix.patch new file mode 100644 index 0000000..a914d5c --- /dev/null +++ b/SOURCES/0001-Backport-dracut-chroot-umount-fix.patch @@ -0,0 +1,34 @@ +From f04d4c94d77f644d4a9cfe25d708789c4334c25a Mon Sep 17 00:00:00 2001 +From: Eugene Zamriy +Date: Thu, 6 Apr 2023 21:16:26 +0300 +Subject: [PATCH 1/3] Backport dracut chroot umount fix + +--- + src/pylorax/imgutils.py | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +diff --git a/src/pylorax/imgutils.py b/src/pylorax/imgutils.py +index d713e4c..80e8c2f 100644 +--- a/src/pylorax/imgutils.py ++++ b/src/pylorax/imgutils.py +@@ -498,12 +498,14 @@ class DracutChroot(object): + return self + + def __exit__(self, exc_type, exc_value, tracebk): +- runcmd(["umount", self.root + "/proc" ]) +- runcmd(["umount", self.root + "/dev" ]) ++ umount(self.root + '/proc', delete=False) ++ umount(self.root + '/dev', delete=False) + + # cleanup bind mounts + for _, d in self.bind: +- runcmd(["umount", self.root + d ]) ++ # In case parallel building of two or more images ++ # some mounts in /var/tmp/lorax can be busy at the moment of unmounting ++ umount(self.root + d, maxretry=200, retrysleep=5, delete=False) + + def Run(self, args): + runcmd(["dracut"] + args, root=self.root) +-- +2.40.1 + diff --git a/SOURCES/0002-Fix-replace-command-utf8-handling.patch b/SOURCES/0002-Fix-replace-command-utf8-handling.patch new file mode 100644 index 0000000..797cce1 --- /dev/null +++ b/SOURCES/0002-Fix-replace-command-utf8-handling.patch @@ -0,0 +1,51 @@ +From de825e84964d0145c46d77433cb08ee8c4640843 Mon Sep 17 00:00:00 2001 +From: Eugene Zamriy +Date: Wed, 26 Jul 2023 22:45:32 +0300 +Subject: [PATCH 2/3] Fix replace command utf8 handling + +This change allows using non-latin UTF-8 symbols in files modified +from Lorax templates using the "replace" command. + +Note: fileinput.input doesn't support encoding argument in the +in-place mode, so we replaced it with StringIO. +--- + src/pylorax/sysutils.py | 15 +++++++-------- + 1 file changed, 7 insertions(+), 8 deletions(-) + +diff --git a/src/pylorax/sysutils.py b/src/pylorax/sysutils.py +index 35f8b0f..81dc20a 100644 +--- a/src/pylorax/sysutils.py ++++ b/src/pylorax/sysutils.py +@@ -25,7 +25,7 @@ __all__ = ["joinpaths", "touch", "replace", "chown_", "chmod_", "remove", + import sys + import os + import re +-import fileinput ++import io + import pwd + import grp + import glob +@@ -50,14 +50,13 @@ def touch(fname): + + + def replace(fname, find, sub): +- fin = fileinput.input(fname, inplace=1) + pattern = re.compile(find) +- +- for line in fin: +- line = pattern.sub(sub, line) +- sys.stdout.write(line) +- +- fin.close() ++ with open(fname, "r", encoding="utf-8") as fd: ++ fin = io.StringIO(fd.read()) ++ with open(fname, "w", encoding="utf-8") as fd: ++ for line in fin: ++ line = pattern.sub(sub, line) ++ fd.write(line) + + + def chown_(path, user=None, group=None, recursive=False): +-- +2.40.1 + diff --git a/SOURCES/0003-Add-iconv-template-command.patch b/SOURCES/0003-Add-iconv-template-command.patch new file mode 100644 index 0000000..ca2fe21 --- /dev/null +++ b/SOURCES/0003-Add-iconv-template-command.patch @@ -0,0 +1,41 @@ +From 9b34c5ad852edd1eb68d78363e3be12ac49b44ce Mon Sep 17 00:00:00 2001 +From: Eugene Zamriy +Date: Wed, 26 Jul 2023 22:55:04 +0300 +Subject: [PATCH 3/3] Add iconv template command + +Adds the "iconv" template command that converts file(s) from UTF-8 +to a specified encoding. This change was required to add Russian +localization to the BIOS mode bootloader. +--- + src/pylorax/ltmpl.py | 15 +++++++++++++++ + 1 file changed, 15 insertions(+) + +diff --git a/src/pylorax/ltmpl.py b/src/pylorax/ltmpl.py +index 36e09e9..7c5b56f 100644 +--- a/src/pylorax/ltmpl.py ++++ b/src/pylorax/ltmpl.py +@@ -273,6 +273,21 @@ class LoraxTemplateRunner(TemplateRunner): + f.write("\n".join(sorted(debug_pkgs))) + f.write("\n") + ++ def iconv(self, encoding, *fileglobs): ++ ''' ++ iconv ENCODING [FILEGLOB ...] ++ Convert given files from UTF-8 to a specified encoding. ++ ++ Examples: ++ iconv 'cp866' ${BOOTDIR}/isolinux.cfg ++ ''' ++ for g in fileglobs: ++ for f in rglob(self._out(g)): ++ with open(f, "r", encoding="utf-8") as fd: ++ content = fd.read() ++ with open(f, "wb") as fd: ++ fd.write(content.encode(encoding)) ++ + def install(self, srcglob, dest): + ''' + install SRC DEST +-- +2.40.1 + diff --git a/SPECS/lorax.spec b/SPECS/lorax.spec index f127240..7eabd71 100644 --- a/SPECS/lorax.spec +++ b/SPECS/lorax.spec @@ -4,7 +4,7 @@ Name: lorax Version: 34.9.25 -Release: 1%{?dist} +Release: 1%{?dist}.inferit Summary: Tool for creating the anaconda install images License: GPLv2+ @@ -15,6 +15,11 @@ URL: https://github.com/weldr/lorax # tito build --tgz Source0: %{name}-%{version}.tar.gz +# MSVSphere patches +Patch1001: 0001-Backport-dracut-chroot-umount-fix.patch +Patch1002: 0002-Fix-replace-command-utf8-handling.patch +Patch1003: 0003-Add-iconv-template-command.patch + BuildRequires: python3-devel BuildRequires: make BuildRequires: systemd-rpm-macros @@ -185,6 +190,13 @@ make DESTDIR=$RPM_BUILD_ROOT mandir=%{_mandir} install %{_datadir}/lorax/templates.d/* %changelog +* Tue Apr 02 2024 Arkady L. Shane - 34.9.25-1.inferit +- templates: Fixed UTF-8 handling in replace command +- templates: Added iconv command to convert from UTF-8 to another encoding +- Backported DracutChroot dirs umount patch from upstream + Without that patch pungi fails on building an EL9 image +- lorax-templates-rhel requirement replaced with lorax-templates-msvsphere + * Tue Feb 06 2024 Brian C. Lane 34.9.25-1 - templates: Remove libreport bugzilla plugins (bcl) Resolves: RHEL-24420