diff --git a/internal/distro/rhel7/distro.go b/internal/distro/rhel7/distro.go index 8208536af..ed0131588 100644 --- a/internal/distro/rhel7/distro.go +++ b/internal/distro/rhel7/distro.go @@ -558,6 +558,12 @@ func (t *imageType) checkOptions(customizations *blueprint.Customizations, optio return warnings, err } + // check if repository customizations are valid + _, err = customizations.GetRepositories() + if err != nil { + return warnings, err + } + return warnings, nil } diff --git a/internal/distro/rhel7/images.go b/internal/distro/rhel7/images.go index d36a37dcb..08adec89d 100644 --- a/internal/distro/rhel7/images.go +++ b/internal/distro/rhel7/images.go @@ -156,6 +156,36 @@ func osCustomizations( // should have been validated before this point. panic(fmt.Sprintf("failed to convert file customizations to fs node files: %v", err)) } + + // set yum repos first, so it doesn't get overridden by + // imageConfig.YUMRepos + osc.YUMRepos = imageConfig.YUMRepos + + customRepos, err := c.GetRepositories() + if err != nil { + // This shouldn't happen and since the repos + // should have already been validated + panic(fmt.Sprintf("failed to get custom repos: %v", err)) + } + + // This function returns a map of filename and corresponding yum repos + // and a list of fs node files for the inline gpg keys so we can save + // them to disk. This step also swaps the inline gpg key with the path + // to the file in the os file tree + yumRepos, gpgKeyFiles, err := blueprint.RepoCustomizationsToRepoConfigAndGPGKeyFiles(customRepos) + if err != nil { + panic(fmt.Sprintf("failed to convert inline gpgkeys to fs node files: %v", err)) + } + + // add the gpg key files to the list of files to be added to the tree + if len(gpgKeyFiles) > 0 { + osc.Files = append(osc.Files, gpgKeyFiles...) + } + + for filename, repos := range yumRepos { + osc.YUMRepos = append(osc.YUMRepos, osbuild.NewYumReposStageOptions(filename, repos)) + } + osc.ShellInit = imageConfig.ShellInit osc.Grub2Config = imageConfig.Grub2Config @@ -173,7 +203,6 @@ func osCustomizations( osc.Sysctld = imageConfig.Sysctld osc.DNFConfig = imageConfig.DNFConfig osc.DNFAutomaticConfig = imageConfig.DNFAutomaticConfig - osc.YUMRepos = imageConfig.YUMRepos osc.YUMConfig = imageConfig.YumConfig osc.SshdConfig = imageConfig.SshdConfig osc.AuthConfig = imageConfig.Authconfig diff --git a/test/data/manifests/rhel_7-x86_64-qcow2-boot.json b/test/data/manifests/rhel_7-x86_64-qcow2-boot.json index f58a4ccd6..731ae096b 100644 --- a/test/data/manifests/rhel_7-x86_64-qcow2-boot.json +++ b/test/data/manifests/rhel_7-x86_64-qcow2-boot.json @@ -29,7 +29,7 @@ }, { "name": "azure-rhui-7", - "baseurl": "https://rpmrepo.osbuild.org/v2/mirror/rhvpn/el7/el7-x86_64-rhui-azure-20220530" + "baseurl": "https://rpmrepo.osbuild.org/v2/mirror/rhvpn/el7/el7-x86_64-rhui-azure-20230418" } ], "filename": "disk.qcow2", diff --git a/test/data/manifests/rhel_7-x86_64-qcow2_customize-boot.json b/test/data/manifests/rhel_7-x86_64-qcow2_customize-boot.json index 53ad87679..661857993 100644 --- a/test/data/manifests/rhel_7-x86_64-qcow2_customize-boot.json +++ b/test/data/manifests/rhel_7-x86_64-qcow2_customize-boot.json @@ -29,7 +29,7 @@ }, { "name": "azure-rhui-7", - "baseurl": "https://rpmrepo.osbuild.org/v2/mirror/rhvpn/el7/el7-x86_64-rhui-azure-20220530" + "baseurl": "https://rpmrepo.osbuild.org/v2/mirror/rhvpn/el7/el7-x86_64-rhui-azure-20230418" } ], "filename": "disk.qcow2", @@ -155,6 +155,21 @@ "user": 0, "group": 0 } + ], + "repositories": [ + { + "id": "example", + "baseurls": [ + "https://example.com/download/yum" + ], + "gpgkeys": [ + "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nmQGiBGRBSJURBACzCoe9UNfxOUiFLq9b60weSBFdr39mLViscecDWATNvXtgRoK/\nxl/4qpayzALRCQ2Ek/pMrbKPF/3ngECuBv7S+rI4n/rIia4FNcqzYeZAz4DE4NP/\neUGvz49tWhmH17hX/rmF9kz5kLq2bDZI4GDgZW/oMDdt2ivj092Ljm9jRwCgyQy3\nWEK6RJvIcSEh9vbdwVdMPOcD/iHqNejTMFwGyZfCWB0eIOoxUOUn/ZZpELTL2UpW\nGduCf3txb5SkK7M+WDbb0S5IvNXoi0tc13STiD6Oxg2O9PkSvvYb+8zxlhNoSTwy\n54j7Rf5FlnQ3TAFfjtQ5LCx56LKK73j4RjvKW//ktm5n54exsgo9Ry/e12T46dRg\n7tIlA/91rzLm57Qyc73A7zjgIzef9O6V5ZzowC+pp/jfb5pS9hXgROekLkMgX0vg\niA5rM5OpqK4bArVP1lRWnLyvghwO+TW763RVuXlS0scfzMy4g0NgrG6j7TIOKEqz\n4xQxOuwkudqiQr/kOqKuLxQBXa+5MJkyhfPmqYw5wpqyCwFa/7Q4b3NidWlsZCB0\nZXN0IChvc2J1aWxkIHRlc3QgZ3Bna2V5KSA8b3NidWlsZEBleGFtcGxlLmNvbT6I\newQTEQIAOxYhBGB8woiEPRKBO8Cr31lulpQgMejzBQJkQUiVAhsjBQsJCAcCAiIC\nBhUKCQgLAgQWAgMBAh4HAheAAAoJEFlulpQgMejzapMAoLmUg1mNDTRUaCrN/fzm\nHYLHL6jkAJ9pEKkJQiHB6SfD0fkiD2GkELYLubkBDQRkQUiVEAQAlAAXrQ572vuw\nxI3W8GSZmOQiAYOQmOKRloLEy6VZ3NSOb9y2TXj33QTkJBPOM17AzB7E+YjZrpUt\ngl6LlXmfjMcJAcXhFaUBCilAcMwMlLl7DtnSkLnLIXYmHiN0v83BH/H0EPutOc5l\n0QIyugutifp9SJz2+EWpC4bjA7GFkQ8AAwUD/1tLEGqCJ37O8gfzYt2PWkqBEoOY\n0Z3zwVS6PWW/IIkak9dAJ0iX5NMeFWpzFNfviDPHqhEdUR55zsxyUZIZlCX5jwmA\nt7qm3cbH4HNU1Ogq3Q9hykbTPWPZVkpvNm/TO8TA2brhkz3nuS8Hbmh+rjXFOSZj\nDQBUxItuuj2hhpQEiGAEGBECACAWIQRgfMKIhD0SgTvAq99ZbpaUIDHo8wUCZEFI\nlQIbDAAKCRBZbpaUIDHo83fQAKDHgFIaggaNsvDQkj7vMX0fecHRhACfS9Bvxn2W\nWSb6T+gChmYBseZwk/k=\n=DQ3i\n-----END PGP PUBLIC KEY BLOCK-----\n" + ], + "name": "Example repo", + "enabled": true, + "gpgcheck": true, + "repo_gpgcheck": false + } ] } } @@ -1986,6 +2001,27 @@ } } }, + { + "type": "org.osbuild.yum.repos", + "options": { + "filename": "example.repo", + "repos": [ + { + "id": "example", + "baseurl": [ + "https://example.com/download/yum" + ], + "enabled": true, + "gpgkey": [ + "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-example-0" + ], + "name": "Example repo", + "gpgcheck": true, + "repo_gpgcheck": false + } + ] + } + }, { "type": "org.osbuild.rhsm", "options": { @@ -2154,6 +2190,15 @@ "id": "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" } ] + }, + "file-e6e7e40c00b4d4aceb64629e41b6f31904359447a47f9c2eb603eb530804c5b1": { + "type": "org.osbuild.files", + "origin": "org.osbuild.source", + "references": [ + { + "id": "sha256:e6e7e40c00b4d4aceb64629e41b6f31904359447a47f9c2eb603eb530804c5b1" + } + ] } }, "options": { @@ -2177,6 +2222,11 @@ "from": "input://file-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "to": "tree:///etc/empty_file.txt", "remove_destination": true + }, + { + "from": "input://file-e6e7e40c00b4d4aceb64629e41b6f31904359447a47f9c2eb603eb530804c5b1/sha256:e6e7e40c00b4d4aceb64629e41b6f31904359447a47f9c2eb603eb530804c5b1", + "to": "tree:///etc/pki/rpm-gpg/RPM-GPG-KEY-example-0", + "remove_destination": true } ] } @@ -3816,6 +3866,10 @@ "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855": { "encoding": "base64", "data": "" + }, + "sha256:e6e7e40c00b4d4aceb64629e41b6f31904359447a47f9c2eb603eb530804c5b1": { + "encoding": "base64", + "data": "LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUdpQkdSQlNKVVJCQUN6Q29lOVVOZnhPVWlGTHE5YjYwd2VTQkZkcjM5bUxWaXNjZWNEV0FUTnZYdGdSb0svCnhsLzRxcGF5ekFMUkNRMkVrL3BNcmJLUEYvM25nRUN1QnY3UytySTRuL3JJaWE0Rk5jcXpZZVpBejRERTROUC8KZVVHdno0OXRXaG1IMTdoWC9ybUY5a3o1a0xxMmJEWkk0R0RnWlcvb01EZHQyaXZqMDkyTGptOWpSd0NneVF5MwpXRUs2Ukp2SWNTRWg5dmJkd1ZkTVBPY0QvaUhxTmVqVE1Gd0d5WmZDV0IwZUlPb3hVT1VuL1pacEVMVEwyVXBXCkdkdUNmM3R4YjVTa0s3TStXRGJiMFM1SXZOWG9pMHRjMTNTVGlENk94ZzJPOVBrU3Z2WWIrOHp4bGhOb1NUd3kKNTRqN1JmNUZsblEzVEFGZmp0UTVMQ3g1NkxLSzczajRSanZLVy8va3RtNW41NGV4c2dvOVJ5L2UxMlQ0NmRSZwo3dElsQS85MXJ6TG01N1F5YzczQTd6amdJemVmOU82VjVaem93QytwcC9qZmI1cFM5aFhnUk9la0xrTWdYMHZnCmlBNXJNNU9wcUs0YkFyVlAxbFJXbkx5dmdod08rVFc3NjNSVnVYbFMwc2Nmek15NGcwTmdyRzZqN1RJT0tFcXoKNHhReE91d2t1ZHFpUXIva09xS3VMeFFCWGErNU1Ka3loZlBtcVl3NXdwcXlDd0ZhLzdRNGIzTmlkV2xzWkNCMApaWE4wSUNodmMySjFhV3hrSUhSbGMzUWdaM0JuYTJWNUtTQThiM05pZFdsc1pFQmxlR0Z0Y0d4bExtTnZiVDZJCmV3UVRFUUlBT3hZaEJHQjh3b2lFUFJLQk84Q3IzMWx1bHBRZ01lanpCUUprUVVpVkFoc2pCUXNKQ0FjQ0FpSUMKQmhVS0NRZ0xBZ1FXQWdNQkFoNEhBaGVBQUFvSkVGbHVscFFnTWVqemFwTUFvTG1VZzFtTkRUUlVhQ3JOL2Z6bQpIWUxITDZqa0FKOXBFS2tKUWlIQjZTZkQwZmtpRDJHa0VMWUx1YmtCRFFSa1FVaVZFQVFBbEFBWHJRNTcydnV3CnhJM1c4R1NabU9RaUFZT1FtT0tSbG9MRXk2VlozTlNPYjl5MlRYajMzUVRrSkJQT00xN0F6QjdFK1lqWnJwVXQKZ2w2TGxYbWZqTWNKQWNYaEZhVUJDaWxBY013TWxMbDdEdG5Ta0xuTElYWW1IaU4wdjgzQkgvSDBFUHV0T2M1bAowUUl5dWd1dGlmcDlTSnoyK0VXcEM0YmpBN0dGa1E4QUF3VUQvMXRMRUdxQ0ozN084Z2Z6WXQyUFdrcUJFb09ZCjBaM3p3VlM2UFdXL0lJa2FrOWRBSjBpWDVOTWVGV3B6Rk5mdmlEUEhxaEVkVVI1NXpzeHlVWklabENYNWp3bUEKdDdxbTNjYkg0SE5VMU9ncTNROWh5a2JUUFdQWlZrcHZObS9UTzhUQTJicmhrejNudVM4SGJtaCtyalhGT1NaagpEUUJVeEl0dXVqMmhocFFFaUdBRUdCRUNBQ0FXSVFSZ2ZNS0loRDBTZ1R2QXE5OVpicGFVSURIbzh3VUNaRUZJCmxRSWJEQUFLQ1JCWmJwYVVJREhvODNmUUFLREhnRklhZ2dhTnN2RFFrajd2TVgwZmVjSFJoQUNmUzlCdnhuMlcKV1NiNlQrZ0NobVlCc2Vad2svaz0KPURRM2kKLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxPQ0stLS0tLQo=" } } }