From 232f8dfa5917e19add0dc96015fc29a1f068f5ec Mon Sep 17 00:00:00 2001 From: MSVSphere Packaging Team Date: Fri, 14 Apr 2023 15:49:51 +0300 Subject: [PATCH] import rhc-0.2.2-1.el9 --- .gitignore | 3 + .rhc.metadata | 3 + ...01-feat-default-config-file-location.patch | 28 ++ ...fix-read-worker-output-using-io.Read.patch | 89 +++++++ SOURCES/config.toml | 6 + SOURCES/rhc-package-manager.toml | 5 + SPECS/rhc.spec | 248 ++++++++++++++++++ 7 files changed, 382 insertions(+) create mode 100644 .gitignore create mode 100644 .rhc.metadata create mode 100644 SOURCES/0001-feat-default-config-file-location.patch create mode 100644 SOURCES/0001-fix-read-worker-output-using-io.Read.patch create mode 100644 SOURCES/config.toml create mode 100644 SOURCES/rhc-package-manager.toml create mode 100644 SPECS/rhc.spec diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1a9e688 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +SOURCES/rhc-0.2.2.tar.gz +SOURCES/yggdrasil-0.2.1.tar.gz +SOURCES/yggdrasil-worker-package-manager-0.1.0.tar.gz diff --git a/.rhc.metadata b/.rhc.metadata new file mode 100644 index 0000000..725a0bf --- /dev/null +++ b/.rhc.metadata @@ -0,0 +1,3 @@ +7f90428c84e86660930463c8f31765c023dea8c7 SOURCES/rhc-0.2.2.tar.gz +55a3abc8515dede8b7ff41905447e08f5e6c01d7 SOURCES/yggdrasil-0.2.1.tar.gz +0582350e1001af0d608772860045f7f4964aa321 SOURCES/yggdrasil-worker-package-manager-0.1.0.tar.gz diff --git a/SOURCES/0001-feat-default-config-file-location.patch b/SOURCES/0001-feat-default-config-file-location.patch new file mode 100644 index 0000000..7afda51 --- /dev/null +++ b/SOURCES/0001-feat-default-config-file-location.patch @@ -0,0 +1,28 @@ +--- main.go.orig 2022-02-11 15:41:53.199642591 -0500 ++++ main.go 2022-02-11 15:42:43.738219604 -0500 +@@ -6,6 +6,7 @@ + "fmt" + "net" + "os" ++ "path/filepath" + "strconv" + "strings" + "time" +@@ -21,7 +22,7 @@ + ) + + func main() { +- fs := flag.NewFlagSet("yggd-package-manager-worker", flag.ExitOnError) ++ fs := flag.NewFlagSet(filepath.Base(os.Args[0]), flag.ExitOnError) + + var ( + socketAddr = "" +@@ -32,7 +33,7 @@ + fs.StringVar(&socketAddr, "socket-addr", "", "dispatcher socket address") + fs.Var(&logLevel, "log-level", "log verbosity level (error (default), warn, info, debug, trace)") + fs.Var(&allowPatterns, "allow-pattern", "regular expression pattern to allow package operations\n(can be specified multiple times)") +- _ = fs.String("config", "", "path to `file` containing configuration values (optional)") ++ _ = fs.String("config", filepath.Join("/", "etc", "rhc", "workers", "rhc-package-manager.toml"), "path to `file` containing configuration values (optional)") + + ff.Parse(fs, os.Args[1:], ff.WithEnvVarPrefix("YGG"), ff.WithConfigFileFlag("config"), ff.WithConfigFileParser(fftoml.Parser)) + diff --git a/SOURCES/0001-fix-read-worker-output-using-io.Read.patch b/SOURCES/0001-fix-read-worker-output-using-io.Read.patch new file mode 100644 index 0000000..c33e4f3 --- /dev/null +++ b/SOURCES/0001-fix-read-worker-output-using-io.Read.patch @@ -0,0 +1,89 @@ +From d75dc60df73a88b0a14c799f3b6f1e8f66cee3d4 Mon Sep 17 00:00:00 2001 +From: Link Dupont +Date: Tue, 22 Nov 2022 13:07:41 -0500 +Subject: [PATCH] fix: read worker output using io.Read + +Some workers output a lot of text to stderr and stdout. Rather than +scanning stderr and stdout into a buffer using a bufio.Scanner, read a +fixed number of bytes at a time. This will break lines of output from +the worker in the middle of words, making reading stdout in the logs +more difficult, but avoids the overly verbose workers from hitting the +bufio.ErrTooLong error. + +Signed-off-by: Link Dupont +--- + cmd/yggd/exec.go | 46 +++++++++++++++++++++++++++++++++------------- + 1 file changed, 33 insertions(+), 13 deletions(-) + +diff --git a/cmd/yggd/exec.go b/cmd/yggd/exec.go +index 4eb1757..a2a3d29 100644 +--- a/cmd/yggd/exec.go ++++ b/cmd/yggd/exec.go +@@ -1,8 +1,8 @@ + package main + + import ( +- "bufio" + "fmt" ++ "io" + "io/ioutil" + "os" + "os/exec" +@@ -54,22 +54,42 @@ func startProcess(file string, env []string, delay time.Duration, died chan int) + log.Debugf("started process: %v", cmd.Process.Pid) + + go func() { +- scanner := bufio.NewScanner(stdout) +- for scanner.Scan() { +- log.Tracef("[%v] %v", file, scanner.Text()) +- } +- if err := scanner.Err(); err != nil { +- log.Errorf("cannot read from stdout: %v", err) ++ for { ++ buf := make([]byte, 4096) ++ n, err := stdout.Read(buf) ++ if n > 0 { ++ log.Tracef("[%v] %v", file, strings.TrimRight(string(buf), "\n\x00")) ++ } ++ if err != nil { ++ switch err { ++ case io.EOF: ++ log.Debugf("%v stdout reached EOF: %v", file, err) ++ return ++ default: ++ log.Errorf("cannot read from stdout: %v", err) ++ continue ++ } ++ } + } + }() + + go func() { +- scanner := bufio.NewScanner(stderr) +- for scanner.Scan() { +- log.Errorf("[%v] %v", file, scanner.Text()) +- } +- if err := scanner.Err(); err != nil { +- log.Errorf("cannot read from stderr: %v", err) ++ for { ++ buf := make([]byte, 4096) ++ n, err := stderr.Read(buf) ++ if n > 0 { ++ log.Errorf("[%v] %v", file, strings.TrimRight(string(buf), "\n\x00")) ++ } ++ if err != nil { ++ switch err { ++ case io.EOF: ++ log.Debugf("%v stderr reached EOF: %v", file, err) ++ return ++ default: ++ log.Errorf("cannot read from stderr: %v", err) ++ continue ++ } ++ } + } + }() + +-- +2.38.1 + diff --git a/SOURCES/config.toml b/SOURCES/config.toml new file mode 100644 index 0000000..5e34c30 --- /dev/null +++ b/SOURCES/config.toml @@ -0,0 +1,6 @@ +# rhc global configuration settings + +broker = ["wss://connect.cloud.redhat.com:443"] +cert-file = "/etc/pki/consumer/cert.pem" +key-file = "/etc/pki/consumer/key.pem" +log-level = "error" diff --git a/SOURCES/rhc-package-manager.toml b/SOURCES/rhc-package-manager.toml new file mode 100644 index 0000000..1abdda4 --- /dev/null +++ b/SOURCES/rhc-package-manager.toml @@ -0,0 +1,5 @@ +# regular expression patterns to allow package operations +allow-pattern = ["^rhc-worker-playbook$"] + +# log verbosity level (error (default), warn, info, debug, trace) +log-level = "error" diff --git a/SPECS/rhc.spec b/SPECS/rhc.spec new file mode 100644 index 0000000..24d181f --- /dev/null +++ b/SPECS/rhc.spec @@ -0,0 +1,248 @@ +%global buildflags -buildmode pie -compiler gc -a -v -x +%global goldflags %{expand:-linkmode=external -compressdwarf=false -B 0x$(head -c20 /dev/urandom|od -An -tx1|tr -d ' \\n') -extldflags '%__global_ldflags'} + +%global yggdrasil_ver 0.2.1 +%global ygg_pkg_mgr_ver 0.1.0 + +Name: rhc +Version: 0.2.2 +Release: 1%{?dist} +Epoch: 1 +Summary: rhc connects the system to Red Hat hosted services +License: GPLv3 +URL: https://github.com/redhatinsights/rhc + +Source0: https://github.com/RedHatInsights/rhc/releases/download/%{version}/%{name}-%{version}.tar.gz +Source1: config.toml +Source2: https://github.com/RedHatInsights/yggdrasil/releases/download/%{yggdrasil_ver}/yggdrasil-%{yggdrasil_ver}.tar.gz +Source3: https://github.com/RedHatInsights/yggdrasil-worker-package-manager/releases/download/%{ygg_pkg_mgr_ver}/yggdrasil-worker-package-manager-%{ygg_pkg_mgr_ver}.tar.gz +Source4: rhc-package-manager.toml + +# Fixed upstream https://github.com/RedHatInsights/yggdrasil-worker-package-manager/commit/22105b0016abfc7c743c1eadb0372e4ef93cc65e +Patch0: 0001-feat-default-config-file-location.patch +# Fixed upstream https://github.com/RedHatInsights/yggdrasil/pull/100/commits/d75dc60df73a88b0a14c799f3b6f1e8f66cee3d4 +Patch2: 0001-fix-read-worker-output-using-io.Read.patch + +ExclusiveArch: %{go_arches} + +Recommends: insights-client + +Requires(post): policycoreutils-python-utils + +BuildRequires: git +BuildRequires: golang +BuildRequires: go-rpm-macros +BuildRequires: dbus-devel +BuildRequires: systemd-devel + + +%define _description %{expand:%{name} is a client tool and daemon that connects the system to Red Hat hosted +services enabling system and subscription management.} + +%description +%{_description} + + +%package devel +Summary: Development files for %{name} +Requires: %{name} = %{epoch}:%{version}-%{release} + + +%description devel +%{_description} + +This package includes files necessary for building rhc workers. + + +%global makeflags %{expand:PREFIX=%{_prefix} \\ + SYSCONFDIR=%{_sysconfdir} \\ + LOCALSTATEDIR=%{_localstatedir} \\ + SHORTNAME=%{name} \\ + LONGNAME=%{name} \\ + PKGNAME=%{name} \\ + 'BRANDNAME=Remote Host Configuration' \\ + TOPICPREFIX=redhat/insights \\ + VERSION=%{version} \\ + DATAHOST=cert.cloud.redhat.com \\ + 'PROVIDER=Red Hat'} + + +%prep +%setup -T -D -c -n %{name} -a 0 +%setup -T -D -c -n %{name} -a 2 +%setup -T -D -c -n %{name} -a 3 +sed -i -e "s/LDFLAGS :=/LDFLAGS ?=/" %{_builddir}/%{name}/yggdrasil-%{yggdrasil_ver}/Makefile +sed -i -e "s/LDFLAGS :=/LDFLAGS ?=/" %{_builddir}/%{name}/%{name}-%{version}/Makefile +cd %{_builddir}/%{name}/yggdrasil-worker-package-manager +%patch0 -p0 +cd %{_builddir}/%{name}/yggdrasil-%{yggdrasil_ver} +%patch2 -p1 + + +%build +%set_build_flags +export BUILDFLAGS="%{buildflags}" +export LDFLAGS="%{goldflags}" +cd %{_builddir}/%{name}/yggdrasil-%{yggdrasil_ver} +make %{makeflags} + +cd %{_builddir}/%{name}/yggdrasil-worker-package-manager +go build %{buildflags} -ldflags="%{goldflags}" -o rhc-package-manager-worker -mod vendor . + +cd %{_builddir}/%{name}/%{name}-%{version} +make %{makeflags} + + +%install +%set_build_flags +export BUILDFLAGS="%{buildflags}" +export LDFLAGS="%{goldflags}" +cd %{_builddir}/%{name}/yggdrasil-%{yggdrasil_ver} +make %{makeflags} \ + DESTDIR=%{buildroot} \ + install + +%{__install} -m 644 %{SOURCE1} %{buildroot}%{_sysconfdir}/%{name}/ + +cd %{_builddir}/%{name}/yggdrasil-worker-package-manager +%{__install} -D -m 755 rhc-package-manager-worker %{buildroot}%{_libexecdir}/%{name}/ +%{__install} -D -m 644 %{SOURCE4} %{buildroot}%{_sysconfdir}/%{name}/workers/rhc-package-manager.toml + +cd %{_builddir}/%{name}/%{name}-%{version} +make %{makeflags} \ + DESTDIR=%{buildroot} \ + install + + +%post +if [ -x /usr/sbin/selinuxenabled ] && /usr/sbin/selinuxenabled; then + /usr/sbin/semanage permissive --add rhcd_t || true +fi + + +%postun +if [ $1 -eq 0 ]; then + if [ -x /usr/sbin/selinuxenabled ] && /usr/sbin/selinuxenabled; then + /usr/sbin/semanage permissive --delete rhcd_t || true + fi +fi + + +%files +%doc %{name}-%{version}/README.md yggdrasil-%{yggdrasil_ver}/doc/tags.toml +%{_bindir}/%{name} +%{_sbindir}/%{name}d +%config(noreplace) %{_sysconfdir}/%{name}/config.toml +%config(noreplace) %{_sysconfdir}/%{name}/workers/rhc-package-manager.toml +%{_unitdir}/%{name}d.service +%{_datadir}/bash-completion/completions/* +%{_mandir}/man1/* +%{_libexecdir}/%{name} + + +%files devel +%{_prefix}/share/pkgconfig/%{name}.pc + + +%changelog +* Fri Apr 14 2023 MSVSphere Packaging Team - 0.2.2-1 +- Rebuilt for MSVSphere 9.2 beta + +* Tue Feb 14 2023 Alba Hita Catala - 0.2.2-1 +- New upstream version (RHBZ#2169772) +- RHC renaming (RHBZ#2167427) + +* Wed Feb 01 2023 Link Dupont - 1:0.2.1-14 +- Correct syntax error in post scriptlet + +* Fri Jan 27 2023 Link Dupont - 0.2.1-13 +- Build debuginfo packages + +* Thu Jan 26 2023 Link Dupont - 0.2.1-12 +- Only run semanage conditionally when SELinux is enabled (RHBZ#2164602) + +* Tue Nov 22 2022 Link Dupont - 0.2.1-11 +- Fix an issue scanning worker's stdout (RHBZ#2144926) + +* Thu Nov 10 2022 Link Dupont - 0.2.1-10 +- Set SELinux policy to permissive for rhcd_t module (RHBZ#2141445) + +* Fri Jun 03 2022 Link Dupont - 0.2.1-9 +- Correct config file installation name (RHBZ#2082689) + +* Fri Jun 03 2022 Link Dupont - 0.2.1-8 +- Correct default config file name (RHBZ#2082689) + +* Mon May 09 2022 Link Dupont - 0.2.1-7 +- Correct default config file path (RHBZ#2082689) + +* Thu Mar 17 2022 Link Dupont - 0.2.1-6 +- Change dependency on insights-client to weak (RHBZ#2064944) + +* Tue Mar 1 2022 Link Dupont - 0.2.1-5 +- Ensure worker is built with hardening compiler flags (RHBZ#2060539) + +* Tue Feb 22 2022 Link Dupont - 0.2.1-4 +- Update summary and description (RHBZ#2057029) + +* Tue Feb 15 2022 Link Dupont - 0.2.1-3 +- Include patch to collect and report errors during disconnect + +* Fri Feb 11 2022 Link Dupont - 0.2.1-2 +- Include patch to default worker config location + +* Fri Feb 11 2022 Link Dupont - 0.2.1-1 +- New upstream version + +* Wed Dec 01 2021 Link Dupont - 0.2.0-6 +- Require full NEVR in devel subpackage + +* Wed Dec 01 2021 Link Dupont - 0.2.0-5 +- Enable building with PIE and other build flags + +* Fri Sep 24 2021 Link Dupont - 0.2.0-4 +- Fix an issue reporting workers on reconnect (Resolves: RHBZ#2007767) + +* Wed Sep 1 2021 Link Dupont - 0.2.0-3 +- Split out development files into subpackage + +* Tue Aug 10 2021 Mohan Boddu - 1:0.2.0-2 +- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags + Related: rhbz#1991688 + +* Mon Jun 28 2021 Link Dupont - 0.2.0-1 +- New upstream release + +* Fri Jun 25 2021 Link Dupont - 0.1.99-5 +- Mark config file as such + +* Fri Jun 25 2021 Link Dupont - 0.1.99-4 +- New upstream snapshot + +* Fri Jun 11 2021 Link Dupont - 0.1.99-3 +- Build executables as PIE programs + +* Thu Jun 10 2021 Link Dupont - 0.1.99-2 +- Include missing disttag + +* Tue May 25 2021 Link Dupont - 0.1.99-1 +- New upstream development release + +* Wed Apr 28 2021 Link Dupont - 0.1.4-2 +- Rebuild for fixed binutils on aarch64 (Resolves: RHBZ#1954449) + +* Fri Apr 9 2021 Link Dupont - 0.1.4-1 +- New upstream release + +* Fri Feb 19 2021 Link Dupont - 0.1.2-2 +- Update default broker URI +- Set Epoch to 1 + +* Thu Feb 18 2021 Link Dupont - 0.1.2-1 +- New upstream release + +* Wed Feb 17 2021 Link Dupont - 0.1.1-1 +- New upstream release + +* Fri Feb 12 2021 Link Dupont - 0.1-1 +- Initial release