From 6a61b4e8882e9c7ab6a20811309d66b8c59d399b Mon Sep 17 00:00:00 2001 From: Andrea Fasano Date: Thu, 23 Feb 2023 12:09:10 -0500 Subject: [PATCH 1/3] add agent-tui files in the iso Extracts the agent-tui files from the assisted-installer-agent image. Fix the dracut script to set the correct selinux label. --- .../etc/assisted/agent-installer.env.template | 1 + pkg/asset/agent/image/agentimage.go | 42 ++++++++++--------- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/data/data/agent/files/etc/assisted/agent-installer.env.template b/data/data/agent/files/etc/assisted/agent-installer.env.template index d773c9432ae..d37e3eff779 100644 --- a/data/data/agent/files/etc/assisted/agent-installer.env.template +++ b/data/data/agent/files/etc/assisted/agent-installer.env.template @@ -8,5 +8,6 @@ # ASSISTED_SERVICE_HOST must be updated. # NODE_ZERO_IP={{.NodeZeroIP}} +LD_LIBRARY_PATH=/usr/local/bin/ RELEASE_IMAGE={{.ReleaseImage}} AGENT_TUI_LOG_PATH=/var/log/agent/agent-tui.log diff --git a/pkg/asset/agent/image/agentimage.go b/pkg/asset/agent/image/agentimage.go index 70d98998793..9416ce9df1c 100644 --- a/pkg/asset/agent/image/agentimage.go +++ b/pkg/asset/agent/image/agentimage.go @@ -53,14 +53,12 @@ func (a *AgentImage) Generate(dependencies asset.Parents) error { return err } - additionalFiles := []string{} - agentTuiFile, err := a.fetchAgentTuiBinary(agentManifests.ClusterImageSet.Spec.ReleaseImage, agentManifests.GetPullSecretData(), registriesConf.MirrorConfig) + agentTuiFiles, err := a.fetchAgentTuiFiles(agentManifests.ClusterImageSet.Spec.ReleaseImage, agentManifests.GetPullSecretData(), registriesConf.MirrorConfig) if err != nil { return err } - additionalFiles = append(additionalFiles, agentTuiFile) - err = a.prepareAgentISO(baseImage.File.Filename, ignitionByte, additionalFiles) + err = a.prepareAgentISO(baseImage.File.Filename, ignitionByte, agentTuiFiles) if err != nil { return err } @@ -71,25 +69,28 @@ func (a *AgentImage) Generate(dependencies asset.Parents) error { return nil } -func (a *AgentImage) fetchAgentTuiBinary(releaseImage string, pullSecret string, mirrorConfig []mirror.RegistriesConfig) (string, error) { - r := NewRelease(&executer.CommonExecuter{}, +func (a *AgentImage) fetchAgentTuiFiles(releaseImage string, pullSecret string, mirrorConfig []mirror.RegistriesConfig) ([]string, error) { + release := NewRelease(&executer.CommonExecuter{}, Config{MaxTries: OcDefaultTries, RetryDelay: OcDefaultRetryDelay}, releaseImage, pullSecret, mirrorConfig) - // TODO: This is just a temporary placeholder to test the entire workflow. - // As soon as https://github.com/openshift/assisted-installer-agent/pull/482 will land, then - // the following line should be fixed to extract the agent-tui binary - filename, err := r.ExtractFile("agent-installer-node-agent", "/usr/bin/agent") - if err != nil { - return "", err - } - // Make sure it could be executed - err = os.Chmod(filename, 0o555) - if err != nil { - return "", err + agentTuiFilenames := []string{"/usr/bin/agent-tui", "/usr/lib64/libnmstate.so.1.3.3"} + files := []string{} + + for _, srcFile := range agentTuiFilenames { + f, err := release.ExtractFile("agent-installer-node-agent", srcFile) + if err != nil { + return nil, err + } + // Make sure it could be executed + err = os.Chmod(f, 0o555) + if err != nil { + return nil, err + } + files = append(files, f) } - return filename, nil + return files, nil } func (a *AgentImage) prepareAgentISO(iso string, ignition []byte, additionalFiles []string) error { @@ -181,7 +182,10 @@ func (a *AgentImage) appendAgentFilesToInitrd(additionalFiles []string) error { // Add a dracut hook to copy the files. The $NEWROOT environment variable is exported by // dracut during the startup and it refers the mountpoint for the root filesystem. dracutHookScript := `#!/bin/sh -cp -R /agent-files/* $NEWROOT/usr/local/bin/` +cp -R /agent-files/* $NEWROOT/usr/local/bin/ +# Fix the selinux label +for i in $(find /agent-files/ -printf "%P\n"); do chcon system_u:object_r:bin_t:s0 $NEWROOT/usr/local/bin/$i; done` + err = ca.StoreBytes("/usr/lib/dracut/hooks/pre-pivot/99-agent-copy-files.sh", []byte(dracutHookScript), 0o755) if err != nil { return err From da8883289239f65732cb513c2a151d8df45d0a1c Mon Sep 17 00:00:00 2001 From: Andrea Fasano Date: Thu, 23 Feb 2023 13:04:58 -0500 Subject: [PATCH 2/3] fix agent services order Change the agent services sequence so that agent-interactive-console starts after set-hostname, and before node-zero and agent service. This will prevent installation to start until the interactive console completes. --- data/data/agent/systemd/units/agent-interactive-console.service | 2 +- data/data/agent/systemd/units/set-hostname.service | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/data/data/agent/systemd/units/agent-interactive-console.service b/data/data/agent/systemd/units/agent-interactive-console.service index b8fca28de78..9c6cdfdc5c3 100644 --- a/data/data/agent/systemd/units/agent-interactive-console.service +++ b/data/data/agent/systemd/units/agent-interactive-console.service @@ -1,7 +1,7 @@ [Unit] Description=Get interactive user configuration at boot After=network-pre.target NetworkManager.service pre-network-manager-config.service selinux.service -Before=network.target network.service agent.service NetworkManager-wait-online.service +Before=network.target network.service agent.service node-zero.service NetworkManager-wait-online.service [Service] Type=oneshot diff --git a/data/data/agent/systemd/units/set-hostname.service b/data/data/agent/systemd/units/set-hostname.service index 174bd1779d8..fb062cdc5b6 100644 --- a/data/data/agent/systemd/units/set-hostname.service +++ b/data/data/agent/systemd/units/set-hostname.service @@ -2,7 +2,7 @@ Description=Agent-based installer hostname update service Wants=network-online.target After=local-fs.target -Before=node-zero.service +Before=agent-interactive-console.service [Service] ExecStart=/usr/local/bin/set-hostname.sh From 2cc87af6cdde85df9677aaff20bbbebd0cd010df Mon Sep 17 00:00:00 2001 From: Andrea Fasano Date: Mon, 27 Feb 2023 13:06:46 -0500 Subject: [PATCH 3/3] bump up default version This version is used implicitly by the integration tests, and currently it contains the required updated images --- .../testdata/agent/image/manifests/default_manifests.txt | 2 +- pkg/asset/releaseimage/default.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/openshift-install/testdata/agent/image/manifests/default_manifests.txt b/cmd/openshift-install/testdata/agent/image/manifests/default_manifests.txt index 48b72a429f0..b9c0034c421 100644 --- a/cmd/openshift-install/testdata/agent/image/manifests/default_manifests.txt +++ b/cmd/openshift-install/testdata/agent/image/manifests/default_manifests.txt @@ -100,7 +100,7 @@ metadata: name: openshift-was not built correctly namespace: cluster0 spec: - releaseImage: registry.ci.openshift.org/origin/release:4.12 + releaseImage: registry.ci.openshift.org/origin/release:4.13 status: {} -- expected/infraenv.yaml -- metadata: diff --git a/pkg/asset/releaseimage/default.go b/pkg/asset/releaseimage/default.go index 322f58323e7..bb18eb7742a 100644 --- a/pkg/asset/releaseimage/default.go +++ b/pkg/asset/releaseimage/default.go @@ -20,7 +20,7 @@ import ( var ( // defaultReleaseImageOriginal is the value served when defaultReleaseImagePadded is unmodified. - defaultReleaseImageOriginal = "registry.ci.openshift.org/origin/release:4.12" + defaultReleaseImageOriginal = "registry.ci.openshift.org/origin/release:4.13" // defaultReleaseImagePadded may be replaced in the binary with a pull spec that overrides defaultReleaseImage as // a null-terminated string within the allowed character length. This allows a distributor to override the payload // location without having to rebuild the source.