2
0
mirror of https://github.com/xcat2/xcat-dep.git synced 2026-10-12 08:12:34 +00:00

fix(xcat-dep): build the perl deps a service node cannot reach

dnf install xCATsn on an EL service node does not resolve. Against the repositories a service
node has -- BaseOS and AppStream from copycds, plus xcat-core and xcat-dep -- it reports
"nothing provides" for perl-IO-Tty, perl(IO::Pty), perl-Crypt-CBC, perl-Crypt-Rijndael,
perl(Expect) and perl(HTML::Form), and per release for perl-Crypt-SSLeay, perl-Net-Telnet and
perl-Digest-SHA1. The service node then has no xcatd, and every hierarchical case fails.

packages-manifest.conf assumed CRB and EPEL stand behind every EL target. That holds for a
management node and not for a service node, so those packages were built only for
rocky-10-riscv64-xcat, the one target with no EPEL. Each EL target section now lists the perl
packages BaseOS and AppStream do not carry.

mockbuild-perl-packages.pl had no table entry for perl-IO-Tty, so no target could build it. Its
sources move to IO-Tty 1.20 with a spec. In 1.12 the Makefile.PL pty probe only takes the
address of each candidate function, the current toolchain drops that reference, the build then
defines HAVE__GETPTY on a glibc that has no _getpty, and IO/Tty/Tty.so fails to load. 1.20 calls
the function in the probe.

perl-Net-DNS stays out. An EL10 service node needs it, this tree holds 0.80, and 0.80 has no KEY
resource record that xCAT's ddns.pm builds.

Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
This commit is contained in:
Daniel Hilst
2026-09-28 16:29:08 -03:00
parent 5d8f5826ca
commit f72d5335be
8 changed files with 155 additions and 174 deletions
+9
View File
@@ -187,6 +187,14 @@ my %meta = (
rpm_arch => 'noarch',
module => 'IO::Stty',
},
'perl-IO-Tty' => {
mode => 'spec',
pkg_dir => "$repo_root/perl-IO-Tty",
spec => "$repo_root/perl-IO-Tty/perl-IO-Tty.spec",
rpm_name => 'perl-IO-Tty',
rpm_arch => 'native',
module => 'IO::Tty',
},
'perl-Mail-Sender' => {
mode => 'srpm',
pkg_dir => "$repo_root/perl-Mail-Sender",
@@ -274,6 +282,7 @@ my @default_order = qw(
perl-HTML-Form
perl-HTTP-Async
perl-IO-Stty
perl-IO-Tty
perl-Net-HTTPS-NB
perl-Net-Telnet
perl-Sys-Virt
+66 -14
View File
@@ -43,14 +43,25 @@
# run (no tolerated failures).
#
#
# Per-EL perl set: a perl module is required from xcat-dep only on the releases
# where neither the base OS nor EPEL provides it; on the other releases EPEL/OS
# supplies it (so `dnf install xCAT` pulls the OS/EPEL copy, not xcat-dep's).
# Per-EL perl set. A management node can enable CRB and EPEL. A SERVICE NODE cannot: it reads
# the OS install tree copycds made -- BaseOS and AppStream only -- plus xcat-core and xcat-dep.
# So every perl package xCAT-server requires that BaseOS and AppStream do not carry is built
# here, for every EL target, or `dnf install xCATsn` on the service node does not resolve. The
# set differs per release because EL moves these packages between CRB, EPEL and AppStream:
# perl-Crypt-CBC, perl-Crypt-Rijndael, perl-Expect, perl-HTML-Form, perl-IO-Tty
# on every EL target. Only EPEL carries perl-HTML-Form, on every release.
# perl-Crypt-SSLeay on el8 and el9 (EPEL) and el10 (no repository carries it).
# perl-Net-Telnet on el8 and el9 (EPEL) and el10 (no repository carries it).
# perl-Digest-SHA1 on el8 (CRB) and el10 (EPEL); el9 AppStream carries it.
# perl-Sys-Virt omitted on el8 -- provided by EPEL on AlmaLinux 8.
# perl-HTML-Form on el8, and on el10 for riscv64 only -- provided by EPEL on el9/el10
# x86_64 and ppc64le; riscv64 has no EPEL, and perl-xCAT requires it.
# perl-Crypt-SSLeay only on el10 -- provided by the OS/EPEL on el8/el9.
# perl-Net-Telnet only on el10 -- provided by the OS/EPEL on el8/el9.
# A package the base OS itself provides stays out, so the OS copy keeps winning. perl-IO-Tty is
# the deliberate exception: CRB carries it on el8 and el9, a service node reads no CRB, and one
# repository serves both roles. See perl-IO-Tty/Build-notes.
#
# An EL10 service node also needs perl-Net-DNS, which only EPEL carries there. It is NOT listed:
# this tree holds Net-DNS 0.80, which has no KEY resource record, and xCAT builds one in
# ddns.pm. Listing 0.80 would replace a working copy with a broken one on every EL10 management
# node as well. That gap waits for the version bump.
#
# conserver-xcat is NOT pulled by `dnf install xCAT` (goconserver superseded it),
# but it is built for every target anyway because some users still deploy it.
@@ -64,10 +75,17 @@ ipmitool-xcat=>= 1.8.18-4
ipxe-xcat=2.0.0
syslinux-xcat=>= 6.03-1
xnba-undi=>= 1.21.1-1
perl-Crypt-CBC=2.33
perl-Crypt-Rijndael=1.13
perl-Crypt-SSLeay=0.72
perl-Digest-SHA1=2.13
perl-Expect=1.35
perl-HTML-Form=6.07
perl-HTTP-Async=>= 0.30-3
perl-IO-Stty=>= 0.04-5
perl-IO-Tty=1.20
perl-Net-HTTPS-NB=>= 0.14-3
perl-Net-Telnet=3.04
xCAT-genesis-base=>= 2:2.18.0
[alma+epel-8-ppc64le]
@@ -79,10 +97,17 @@ ipmitool-xcat=>= 1.8.18-4
ipxe-xcat=2.0.0
syslinux-xcat=>= 6.03-1
xnba-undi=>= 1.21.1-1
perl-Crypt-CBC=2.33
perl-Crypt-Rijndael=1.13
perl-Crypt-SSLeay=0.72
perl-Digest-SHA1=2.13
perl-Expect=1.35
perl-HTML-Form=6.07
perl-HTTP-Async=>= 0.30-3
perl-IO-Stty=>= 0.04-5
perl-IO-Tty=1.20
perl-Net-HTTPS-NB=>= 0.14-3
perl-Net-Telnet=3.04
xCAT-genesis-base=>= 2:2.18.0
[alma+epel-9-x86_64]
@@ -94,9 +119,16 @@ ipmitool-xcat=>= 1.8.18-4
ipxe-xcat=2.0.0
syslinux-xcat=>= 6.03-1
xnba-undi=>= 1.21.1-1
perl-Crypt-CBC=2.33
perl-Crypt-Rijndael=1.13
perl-Crypt-SSLeay=0.72
perl-Expect=1.35
perl-HTML-Form=6.07
perl-HTTP-Async=>= 0.30-3
perl-IO-Stty=>= 0.04-5
perl-IO-Tty=1.20
perl-Net-HTTPS-NB=>= 0.14-3
perl-Net-Telnet=3.04
perl-Sys-Virt=11.10.0
xCAT-genesis-base=>= 2:2.18.0
@@ -109,9 +141,16 @@ ipmitool-xcat=>= 1.8.18-4
ipxe-xcat=2.0.0
syslinux-xcat=>= 6.03-1
xnba-undi=>= 1.21.1-1
perl-Crypt-CBC=2.33
perl-Crypt-Rijndael=1.13
perl-Crypt-SSLeay=0.72
perl-Expect=1.35
perl-HTML-Form=6.07
perl-HTTP-Async=>= 0.30-3
perl-IO-Stty=>= 0.04-5
perl-IO-Tty=1.20
perl-Net-HTTPS-NB=>= 0.14-3
perl-Net-Telnet=3.04
perl-Sys-Virt=11.10.0
xCAT-genesis-base=>= 2:2.18.0
@@ -124,9 +163,15 @@ ipmitool-xcat=>= 1.8.18-4
ipxe-xcat=2.0.0
syslinux-xcat=>= 6.03-1
xnba-undi=>= 1.21.1-1
perl-Crypt-CBC=2.33
perl-Crypt-Rijndael=1.13
perl-Crypt-SSLeay=0.72
perl-Digest-SHA1=2.13
perl-Expect=1.35
perl-HTML-Form=6.07
perl-HTTP-Async=>= 0.30-3
perl-IO-Stty=>= 0.04-5
perl-IO-Tty=1.20
perl-Net-HTTPS-NB=>= 0.14-3
perl-Net-Telnet=3.04
perl-Sys-Virt=11.10.0
@@ -141,9 +186,15 @@ ipmitool-xcat=>= 1.8.18-4
ipxe-xcat=2.0.0
syslinux-xcat=>= 6.03-1
xnba-undi=>= 1.21.1-1
perl-Crypt-CBC=2.33
perl-Crypt-Rijndael=1.13
perl-Crypt-SSLeay=0.72
perl-Digest-SHA1=2.13
perl-Expect=1.35
perl-HTML-Form=6.07
perl-HTTP-Async=>= 0.30-3
perl-IO-Stty=>= 0.04-5
perl-IO-Tty=1.20
perl-Net-HTTPS-NB=>= 0.14-3
perl-Net-Telnet=3.04
perl-Sys-Virt=11.10.0
@@ -167,22 +218,23 @@ ipmitool-xcat=>= 1.8.18-4
ipxe-xcat=2.0.0
syslinux-xcat=>= 6.03-1
xnba-undi=>= 1.21.1-1
perl-Crypt-SSLeay=0.72
perl-HTML-Form=6.07
perl-HTTP-Async=>= 0.30-3
perl-IO-Stty=>= 0.04-5
perl-Net-HTTPS-NB=>= 0.14-3
perl-Net-Telnet=3.04
perl-Sys-Virt=11.10.0
perl-Crypt-Blowfish=2.14
perl-Crypt-CBC=2.33
perl-Crypt-Rijndael=1.13
perl-Crypt-SSLeay=0.72
perl-Digest-SHA1=2.13
perl-Expect=1.35
perl-HTML-Form=6.07
perl-HTTP-Async=>= 0.30-3
perl-IO-Stty=>= 0.04-5
perl-IO-Tty=1.20
perl-Mail-Sender=0.903
perl-Net-DNS=0.80
perl-Net-HTTPS-NB=>= 0.14-3
perl-Net-IP=1.26
perl-Net-Telnet=3.04
perl-Path-Class=0.37
perl-Sys-Virt=11.10.0
# [common] is NOT a build target. It describes the SHARED repository the OpenEmbedded Genesis
# release is published into (<repo-dep>/common), which lives beside the per-EL cells and is
+17 -1
View File
@@ -1 +1,17 @@
For RHEL 8, run "rpmbuild --rebuild perl-IO-Tty-1.12-13.fc29.src.rpm".
IO-Tty 1.12 and older do not build on EL8 or newer. Makefile.PL probes each pty
function by compiling a program that only takes its address; the current
toolchain drops that reference, so the probe reports _getpty as present, the
build defines HAVE__GETPTY, and IO/Tty/Tty.so then fails to load with
"undefined symbol: _getpty". IO-Tty 1.20 calls the function in the probe, so
the link fails and the probe answers correctly.
Source: https://cpan.metacpan.org/authors/id/T/TO/TODDR/IO-Tty-1.20.tar.gz
xcat-dep ships IO-Tty 1.20-1. EL8 PowerTools carries 1.12-11 and EL9 CRB carries
1.16-4, so the xcat-dep rpm outranks the distribution copy on a management node
that enables those repositories. Both distribution builds load correctly; they
are shadowed because a service node reads no CRB and one repository serves both
roles. 1.20 is the same upstream release the distributions package, with the same
license, the same vendor paths and the same perl(IO::Tty) provides, so the higher
version is an upgrade and not a fork. EL10 CRB carries 1.20-7, which outranks
1.20-1, so the distribution copy still wins there.
Binary file not shown.
Binary file not shown.
-159
View File
@@ -1,159 +0,0 @@
#
# - IO::Tty -
# This spec file was automatically generated by cpan2rpm [ver: 2.027]
# The following arguments were used:
# IO-Tty-1.07.tar.gz --no-upgrade-chk
# For more information on cpan2rpm please visit: http://perl.arix.com/
#
%define pkgname IO-Tty
%define filelist %{pkgname}-%{version}-filelist
%define NVR %{pkgname}-%{version}-%{release}
%define maketest 1
name: perl-IO-Tty
summary: IO-Tty - Pseudo ttys and constants
version: 1.07
release: 2%{?dist}
vendor: Roland Giersig <RGiersig@cpan.org>
packager: Arix International <cpan2rpm@arix.com>
license: Artistic
group: Applications/CPAN
url: http://www.cpan.org
buildroot: %{_tmppath}/%{name}-%{version}-%(id -u -n)
prefix: %(echo %{_prefix})
source: IO-Tty-1.07.tar.gz
BuildRequires: gcc
BuildRequires: make
BuildRequires: perl-interpreter
BuildRequires: perl-devel
BuildRequires: perl(ExtUtils::MakeMaker)
BuildRequires: perl-generators
%description
"IO::Tty" is used internally by "IO::Pty" to create a pseudo-tty.
You wouldn't want to use it directly except to import constants, use
"IO::Pty". For a list of importable constants, see
IO::Tty::Constant.
Windows is now supported, but ONLY under the Cygwin
environment, see <http://sources.redhat.com/cygwin/>.
Please note that pty creation is very system-dependend. From my
experience, any modern POSIX system should be fine. Find below a list
of systems that "IO::Tty" should work on. A more detailed table
(which is slowly getting out-of-date) is available from the project
pages document manager at SourceForge
<http://sourceforge.net/projects/expectperl/>.
If you have problems on your system and your system is listed in the
"verified" list, you probably have some non-standard setup, e.g. you
compiled your Linux-kernel yourself and disabled ptys (bummer!).
Please ask your friendly sysadmin for help.
If your system is not listed, unpack the latest version of "IO::Tty",
do a 'perl Makefile.PL; make; make test; uname -a' and send me
(RGiersig@cpan.org) the results and I'll see what I can deduce from
that. There are chances that it will work right out-of-the-box...
If it's working on your system, please send me a short note with
details (version number, distribution, etc. 'uname -a' and 'perl -V'
is a good start; also, the output from "perl Makefile.PL" contains a
lot of interesting info, so please include that as well) so I can get
an overview. Thanks!
#
# This package was generated automatically with the cpan2rpm
# utility. To get this software or for more information
# please visit: http://perl.arix.com/
#
%prep
%setup -q -n %{pkgname}-%{version}
chmod -R u+w %{_builddir}/%{pkgname}-%{version}
%build
grep -rsl '^#!.*perl' . |
grep -v '.bak$' |xargs --no-run-if-empty \
%__perl -MExtUtils::MakeMaker -e 'MY->fixin(@ARGV)'
CFLAGS="$RPM_OPT_FLAGS"
%{__perl} Makefile.PL `%{__perl} -MExtUtils::MakeMaker -e ' print qq|PREFIX=%{buildroot}%{_prefix}| if \$ExtUtils::MakeMaker::VERSION =~ /5\.9[1-6]|6\.0[0-5]/ '`
%{__make}
%if %maketest
%{__make} test
%endif
%install
[ "%{buildroot}" != "/" ] && rm -rf %{buildroot}
%{__make} pure_install DESTDIR=%{buildroot}
cmd=/usr/share/spec-helper/compress_files
[ -x $cmd ] || cmd=/usr/lib/rpm/brp-compress
[ -x $cmd ] && $cmd
# SuSE Linux
if [ -e /etc/SuSE-release -o -e /etc/UnitedLinux-release ]
then
%{__mkdir_p} %{buildroot}/var/adm/perl-modules
%{__cat} `find %{buildroot} -name "perllocal.pod"` \
| %{__sed} -e s+%{buildroot}++g \
> %{buildroot}/var/adm/perl-modules/%{name}
fi
# remove special files
find %{buildroot} -name "perllocal.pod" \
-o -name ".packlist" \
-o -name "*.bs" \
|xargs -i rm -f {}
# no empty directories
find %{buildroot}%{_prefix} \
-type d -depth \
-exec rmdir {} \; 2>/dev/null
%{__perl} -MFile::Find -le '
find({ wanted => \&wanted, no_chdir => 1}, "%{buildroot}");
print "%doc README";
for my $x (sort @dirs, @files) {
push @ret, $x unless indirs($x);
}
print join "\n", sort @ret;
sub wanted {
return if /auto$/;
local $_ = $File::Find::name;
my $f = $_; s|^\Q%{buildroot}\E||;
return unless length;
return $files[@files] = $_ if -f $f;
$d = $_;
/\Q$d\E/ && return for reverse sort @INC;
$d =~ /\Q$_\E/ && return
for qw|/etc %_prefix/man %_prefix/bin %_prefix/share|;
$dirs[@dirs] = $_;
}
sub indirs {
my $x = shift;
$x =~ /^\Q$_\E\// && $x ne $_ && return 1 for @dirs;
}
' > %filelist
[ -z %filelist ] && {
echo "ERROR: empty %files listing"
exit -1
}
%clean
[ "%{buildroot}" != "/" ] && rm -rf %{buildroot}
%files -f %filelist
%defattr(-,root,root)
%changelog
* Fri Apr 4 2008 root@node1.cluster
- Initial build.
Binary file not shown.
+63
View File
@@ -0,0 +1,63 @@
Name: perl-IO-Tty
Version: 1.20
Release: 1%{?dist}
Summary: Perl interface to pseudo tty's
License: (GPL+ or Artistic) and BSD
URL: https://metacpan.org/release/IO-Tty
Source0: https://cpan.metacpan.org/authors/id/T/TO/TODDR/IO-Tty-%{version}.tar.gz
BuildRequires: coreutils
BuildRequires: findutils
BuildRequires: gcc
BuildRequires: make
BuildRequires: perl-interpreter
BuildRequires: perl-devel
BuildRequires: perl-generators
BuildRequires: perl(Config)
BuildRequires: perl(Cwd)
BuildRequires: perl(Exporter)
BuildRequires: perl(ExtUtils::MakeMaker)
BuildRequires: perl(Carp)
BuildRequires: perl(DynaLoader)
BuildRequires: perl(IO::File)
BuildRequires: perl(IO::Handle)
BuildRequires: perl(POSIX)
BuildRequires: perl(strict)
BuildRequires: perl(vars)
BuildRequires: perl(Test::More)
BuildRequires: perl(warnings)
Requires: perl(:MODULE_COMPAT_%(eval "`perl -V:version`"; echo $version))
# Do not "provide" the private perl libs.
%{?perl_default_filter}
%description
IO::Tty and IO::Pty provide an interface to pseudo tty's.
%prep
%setup -q -n IO-Tty-%{version}
%build
perl Makefile.PL INSTALLDIRS=vendor OPTIMIZE="%{optflags}"
make %{?_smp_mflags}
%install
make pure_install DESTDIR=%{buildroot}
find %{buildroot} -type f -name .packlist -delete
find %{buildroot} -type f -name '*.bs' -empty -delete
%{_fixperms} %{buildroot}
%check
make test
%files
%doc ChangeLog README
%{perl_vendorarch}/auto/IO/
%{perl_vendorarch}/IO/
%{_mandir}/man3/IO::Pty.3*
%{_mandir}/man3/IO::Tty.3*
%{_mandir}/man3/IO::Tty::Constant.3*
%changelog
* Fri Sep 04 2026 Daniel Hilst <392820+dhilst@users.noreply.github.com> - 1.20-1
- Build IO-Tty 1.20. 1.12 mis-detects _getpty on EL8 and newer and the module
then fails to load.