diff --git a/QA/Testcase_Kickstart_Installation.md b/QA/Testcase_Kickstart_Installation.md index 9792b70..1ff0eef 100644 --- a/QA/Testcase_Kickstart_Installation.md +++ b/QA/Testcase_Kickstart_Installation.md @@ -23,7 +23,7 @@ This test case verifies that installations via both local and remote Kickstart c 1. Connect the USB stick to the test system {% include 'testing/qa_setup_boot_to_media.md' %} 1. Hit the Tab key to edit the boot command -1. Provide a local Kickstart file by supplying the GRUB boot option `inst.ks=file:/path/to/local.ks` or a remote Kickstart file by supplying the GRUB boot option `inst.ks=https://dl.rockylinux.org/remote.ks`. +1. Provide a local Kickstart file by supplying the GRUB boot option `inst.ks=file:/path/to/local.ks` or a remote Kickstart file by supplying the GRUB boot option `inst.ks=https://git.resf.org/testing/createhdds/raw/branch/rocky/server.ks`. ## How to test 1. Continue booting the installer as normal. diff --git a/QA/Testcase_Media_USB_dd.md b/QA/Testcase_Media_USB_dd.md index 77d2e32..37df444 100644 --- a/QA/Testcase_Media_USB_dd.md +++ b/QA/Testcase_Media_USB_dd.md @@ -18,18 +18,20 @@ This verifies that Rocky Linux ISO image can be written to USB media using `dd` Any data on the USB stick used for this test is likely to be destroyed. Please do not use a stick whose contents you need to keep. ## Setup + 1. Provide a USB media device that is larger than the ISO image you wish to test and that it can be completely erased. 2. Provide a Linux (or other *nix system) that has the `dd` command available and an unoccupied USB port. 3. Download the Rocky Linux ISO image you wish to test onto the test system. - - Example command:
`curl -LOR http://dl.rockylinux.org/pub/rocky/8/isos/x86_64/Rocky-8.5-x86_64-boot.iso` + - Example command:
`curl -LOR https://dl.rockylinux.org/pub/rocky/8/isos/x86_64/Rocky-x86_64-boot.iso` 4. Download the `CHECKSUM` file that goes with the Rocky Linux ISO image that you wish to test. - - Example command:
`curl -LOR http://dl.rockylinux.org/pub/rocky/8/isos/x86_64/CHECKSUM` + - Example command:
`curl -LOR https://dl.rockylinux.org/pub/rocky/8/isos/x86_64/CHECKSUM` 5. Download the `CHECKSUM.sig` file that does with the `CHECKSUM` file. - - Example command:
`curl -LOR http://dl.rockylinux.org/pub/rocky/8/isos/x86_64/CHECKSUM.sig` + - Example command:
`curl -LOR https://dl.rockylinux.org/pub/rocky/8/isos/x86_64/CHECKSUM.sig` 6. Download the Rocky Release Engineering GPG key. - - Example command:
`curl -LOR http://dl.rockylinux.org/pub/rocky/RPM-GPG-KEY-rockyofficial` + - Example command:
`curl -LOR https://dl.rockylinux.org/pub/rocky/RPM-GPG-KEY-rockyofficial` ## How to test + 1. Import the Rocky Release Engineering GPG key. - Example command:
`gpg --import RPM-GPG-KEY-rockyofficial` 2. Verify the signature of the CHECKSUM file. @@ -43,6 +45,7 @@ This verifies that Rocky Linux ISO image can be written to USB media using `dd` 7. **[OPTIONAL]** Proceed with installation on the test system.
**Depending on installer choices this MAY destroy all the data on the test system.** ## Expected Results + 1. The gpg signature on the `CHECKSUM` file is valid. 2. The `CHECKSUM` of the Rocky Linux ISO is valid. 3. The Rocky Linux ISO is written to the USB stick without errors. diff --git a/dev_guides/commit_signing.md b/dev_guides/commit_signing.md index 321afa0..3400cfe 100644 --- a/dev_guides/commit_signing.md +++ b/dev_guides/commit_signing.md @@ -8,6 +8,7 @@ rc: level: Final --- # Creating your primary keypair + 1. Initiate the keypair generation wizard gpg --full-generate-key --expert @@ -19,6 +20,7 @@ rc: 1. Type a passphrase (twice) # Create a signing keypair + 1. Add a signing subkey gpg --expert --edit-key my@email.addr @@ -43,6 +45,7 @@ Export the *primary keypair* (put these somewhere very safe along with revocatio gpg --export --armor my@email.addr > my_email_addr.public.gpg-key # Remove the *primary keypair* from your keyring + 1. Export all subkeys from the new keypair to a file gpg --export-secret-subkeys my@email.addr > $HOME/.gnupg/subkeys @@ -60,6 +63,7 @@ Export the *primary keypair* (put these somewhere very safe along with revocatio gpg --list-secret-keys $HOME/.gnupg/secring.gpg # Revoking a *signing keypair* + Find the *primary keypair* and import it (preferably into an ephemeral system like a liveUSB) gpg --import /path/to/my_email_addr.public.gpg-key /path/to/my_email_addr.private.gpg-key @@ -68,7 +72,6 @@ Find the *primary keypair* and import it (preferably into an ephemeral system li [ passphrase twice ] gpg> save - # Renew an expired or expiring keypair gpg --edit-key my@email.addr @@ -101,6 +104,7 @@ Find the *primary keypair* and import it (preferably into an ephemeral system li gpg --keyserver pgp.mit.edu --search-key my@email.addr # References + [OpenPGP Best Practices](https://riseup.net/en/security/message-security/openpgp/best-practices#key-configuration)
[Github: Signing Commits](https://docs.github.com/en/enterprise-server@3.5/authentication/managing-commit-signature-verification/signing-commits)
[Braincoke's Log: Create a GPG Key](https://blog.braincoke.fr/security/create-a-gpg-key/)
diff --git a/dev_guides/openqa_access.md b/dev_guides/openqa_access.md index 9577335..5bd2e64 100644 --- a/dev_guides/openqa_access.md +++ b/dev_guides/openqa_access.md @@ -11,7 +11,6 @@ rc: To complete any of the examples below you will need access to a system providing the openQA client. Typically that will be a Fedora based system/container with the `openqa-client` package and it's (~239) dependencies installed. - ## Access Requirement ### API `GET` access @@ -22,10 +21,9 @@ The {{ rc.prod }} openQA system allows unrestricted public access via it's web i In order to use the openQA client to interact with the {{ rc.prod }} openQA system for `POST` operations the following are required: -- an account in good standing in the [{{ rc.prod }} Account Services](https://accounts.rockylinux.org) system, +- an account in good standing in the [{{ rc.prod }} Account Services](https://accounts.rockylinux.org) system, - authorization for API `POST` access from the {{ rc.prod }} Testing Team, and -- an [openQA API key](http://open.qa/docs/#_authentication) generated on the {{ rc.prod }} openQA system. - +- an [openQA API key](https://open.qa/docs/#_authentication) generated on the {{ rc.prod }} openQA system. ## Configuring your openqa client @@ -34,7 +32,7 @@ Per the openqa client command help you can configure your client to use your API The following example shows how to configure your client by the most common method used. It's possible to configure multiple openqa client API keys in this way. -``` +```bash $ mkdir -p ~/.config/openqa $ vim ~/.config/openqa/client.conf @@ -48,10 +46,9 @@ key = your_api_key secret = your_api_secret ``` - ## Testing your openqa client installation -``` +```bash $ openqa-cli api --host http://openqa.rockylinux.org --pretty jobs/1 { "job" : { @@ -118,7 +115,6 @@ $ openqa-cli api --host http://openqa.rockylinux.org --pretty jobs/1 ## References -[openQA Documentation](http://open.qa/documentation/) - +[openQA Documentation](https://open.qa/documentation/) {% include 'content_bottom.md' %} diff --git a/dev_guides/openqa_cli_post_examples.md b/dev_guides/openqa_cli_post_examples.md index c113d5a..541a890 100644 --- a/dev_guides/openqa_cli_post_examples.md +++ b/dev_guides/openqa_cli_post_examples.md @@ -17,7 +17,7 @@ To complete any of the examples please complete the API `POST` Access steps outl ## Basic POST -A basic `POST` can be used for any of the default test suites for the various {{ rc.prod }} media that are made available. The following examples show some of these standard `POST`s that are commonly used by our team and will be used to demonstrate how some minor variations +A basic `POST` can be used for any of the default test suites for the various {{ rc.prod }} media that are made available. The following examples show some of these standard `POST`s that are commonly used by our team and will be used to demonstrate how some minor variations. ### FLAVOR=boot-iso @@ -30,7 +30,7 @@ $ openqa-cli api -X POST isos ISO=Rocky-9.1-x86_64-boot.iso ARCH=x86_64 \ ### FLAVOR=minimal-iso -This `POST` demonstrates how a different media type, in this case the minimal ISO, for an alternate {{ rc.prod }} version, in this case {{ rc.prod }} 8.7, can be triggered. As can be seen by this and the previous `POST` the `BUILD` variable will typically be designate the date, version and architecture of the test suite. Since the minimal ISO contains all packages required to conduct a ***minimal*** install of {{ rc.prod }} that is the behavior of this test suite. +This `POST` demonstrates how a different media type, in this case the minimal ISO, for an alternate {{ rc.prod }} version, in this case {{ rc.prod }} 8.7, can be triggered. As can be seen by this and the previous `POST` the `BUILD` variable will typically be designate the date, version and architecture of the test suite. Since the minimal ISO contains all packages required to conduct a ***minimal*** install of {{ rc.prod }} that is the behavior of this test suite. ```bash $ openqa-cli api -X POST isos ISO=Rocky-8.7-x86_64-minimal.iso ARCH=x86_64 \ @@ -48,7 +48,6 @@ $ openqa-cli api -X POST isos ISO=Rocky-9.1-20221214.1-x86_64-dvd.iso ARCH=x86_6 These three test suites provide for the minimal testing of all ISOs produced for a given release of {{ rc.prod }}. - ## Advanced POST In addition to the [Basic POSTs](#basic-post) described above there are additional default test suites that use the dvd ISO media and include substantially more test cases. Those include: @@ -76,7 +75,6 @@ $ openqa-cli api -X POST isos ISO=Rocky-9.1-20221214.1-x86_64-dvd.iso ARCH=x86_6 DISTRI=rocky FLAVOR=universal VERSION=9.1 CURRREL=9 BUILD=20230409-Rocky-9.1-x86_64.0 ``` - ## Collection of test suites by BUILD A feature of openQA is that for a given job group test suites which use the same `BUILD` identifier are collected into a single view in the web UI. @@ -89,7 +87,6 @@ Thus, the examples show above which all use `BUILD=20230409-Rocky-9.1-x86_64.0` ## References -[openQA Documentation](http://open.qa/documentation/) - +[openQA Documentation](https://open.qa/documentation/) {% include 'content_bottom.md' %} diff --git a/dev_guides/openqa_clone_custom_git_refspec_examples.md b/dev_guides/openqa_clone_custom_git_refspec_examples.md index 09e1f77..c747401 100644 --- a/dev_guides/openqa_clone_custom_git_refspec_examples.md +++ b/dev_guides/openqa_clone_custom_git_refspec_examples.md @@ -25,7 +25,7 @@ The following example demonstrates the testing of an open Github pull request in ***NOTE: The Github CLI tool (`gh`) is used to display PR information statically in this guide.*** -``` +```text ➜ os-autoinst-distri-rocky git:(develop) gh pr view 168 Serial console install #168 Merged • AlanMarshall wants to merge 1 commit into develop from serial_console • about 27 days ago @@ -57,7 +57,7 @@ Above is the information provided in the original PR and it includes tests perfo In practice it is useful to run `openqa-clone-custom-git-refspec` in `--verbose` and `--dry-run` mode to observe it's behavior even for the Basic cases... -``` +```bash $ openqa-clone-custom-git-refspec --verbose --dry-run \ https://github.com/rocky-linux/os-autoinst-distri-rocky/pull/168 \ https://openqa.rockylinux.org/tests/16080 2>&1 | tee pr-168 @@ -65,7 +65,7 @@ $ openqa-clone-custom-git-refspec --verbose --dry-run \ ***NOTE: The full output of `openqa-clone-custom-git-refspece` will not be shown here.*** -``` +```diff + shift + true + case "$1" in @@ -114,10 +114,9 @@ What can be seen from the complete `--dry-run` output for `openqa-clone-custom-g Without using `--dry-run` the final `openqa-clone-job` command shown above will be run causing the job of interest to be cloned with additional `POST` variables that will cause the repository/branch referenced in the PR to be cloned into the test directory with important files referenced in the cloned job. - ### Run `openqa-clone-custom-git-refspec` without `--verbose --dry-run` mode... -``` +```bash $ openqa-clone-custom-git-refspec \ https://github.com/rocky-linux/os-autoinst-distri-rocky/pull/168 \ https://openqa.rockylinux.org/tests/16080 @@ -126,7 +125,7 @@ Created job #16119: rocky-9.1-universal-x86_64-Build20230329-Rocky-9.1-x86_64.0- ### Cloned job information... -``` +```bash $ openqa-cli api jobs/16119 --pretty { "job" : { @@ -206,10 +205,9 @@ $ openqa-cli api jobs/16119 --pretty The following example demonstrates the testing of an open Github pull request in the {{ rc.prod }} openQA production system. The PR changes test code and supplies updated needles for the test. - ### Github PR information -``` +```text ➜ os-autoinst-distri-rocky git:(nazunalika/develop) gh pr view 162 Anaconda text install #162 @@ -244,9 +242,8 @@ View this pull request on GitHub: https://github.com/rocky-linux/os-autoinst-dis ### Run `openqa-clone-custom-git-refspec` in `--verbose --dry-run` mode -``` -$ openqa-clone-custom-git-refspec --verbose --dry-run https://github.com/rocky-linux/os-autoinst-d -istri-rocky/pull/162 https://openqa.rockylinux.org/tests/13371 +```diff +$ openqa-clone-custom-git-refspec --verbose --dry-run https://github.com/rocky-linux/os-autoinst-distri-rocky/pull/162 https://openqa.rockylinux.org/tests/13371 + shift + true + case "$1" in @@ -288,33 +285,40 @@ istri-rocky/pull/162 https://openqa.rockylinux.org/tests/13371 This PR provides updated needles and the default behavior of `openqa-clone-custom-git-refspec` is to **not** provide an alternate location for `NEEDLES`. The `--verbose --dry-run` output needs to be modified to ensure the needles provided in the PR are used in the test. - ### Modify `--verbose --dry-run` output to point to needles in the PR... Use output to modify clone job... #### original -``` -$ /usr/bin/openqa-clone-job --skip-chained-deps --parental-inheritance --within-instance https://openqa.rockylinux.org 13371 _GROUP=0 TEST+=@AlanMarshall/os-autoinst-distri-rocky#anaconda-txt BUILD=AlanMarshall/os-autoinst-distri-rocky#162 CASEDIR=https://github.com/AlanMarshall/os-autoinst-distri-rocky.git#anaconda-txt PRODUCTDIR=os-autoinst-distri-rocky + +```bash +$ /usr/bin/openqa-clone-job --skip-chained-deps --parental-inheritance --within-instance https://openqa.rockylinux.org \ + 13371 _GROUP=0 TEST+=@AlanMarshall/os-autoinst-distri-rocky#anaconda-txt \ + BUILD=AlanMarshall/os-autoinst-distri-rocky#162 CASEDIR=https://github.com/AlanMarshall/os-autoinst-distri-rocky.git#anaconda-txt \ + PRODUCTDIR=os-autoinst-distri-rocky NEEDLES_DIR=rocky/needles ``` #### specify NEEDLES_DIR manually pointing at PR branch -``` -$ /usr/bin/openqa-clone-job --skip-chained-deps --parental-inheritance --within-instance https://o -penqa.rockylinux.org 13371 _GROUP=0 TEST+=@AlanMarshall/os-autoinst-distri-rocky#anaconda-txt BUILD=AlanMarshall/os-autoinst-distr -i-rocky#162 CASEDIR=https://github.com/AlanMarshall/os-autoinst-distri-rocky.git#anaconda-txt PRODUCTDIR=os-autoinst-distri-rocky -NEEDLES_DIR=https://github.com/AlanMarshall/os-autoinst-distri-rocky.git/needles#anaconda-txt + +```bash +$ /usr/bin/openqa-clone-job --skip-chained-deps --parental-inheritance --within-instance https://openqa.rockylinux.org \ + 13371 _GROUP=0 TEST+=@AlanMarshall/os-autoinst-distri-rocky#anaconda-txt \ + BUILD=AlanMarshall/os-autoinst-distri-rocky#162 CASEDIR=https://github.com/AlanMarshall/os-autoinst-distri-rocky.git#anaconda-txt \ + PRODUCTDIR=os-autoinst-distri-rocky NEEDLES_DIR=https://github.com/AlanMarshall/os-autoinst-distri-rocky.git#anaconda-txt/needles ``` #### {{ rc.prod }} 9.1 -``` -$ /usr/bin/openqa-clone-job --skip-chained-deps --parental-inheritance --within-instance https://openqa.rockylinux.org 13255 _GROUP=0 TEST+=@AlanMarshall/os-autoinst-distri-rocky#anaconda-txt BUILD=AlanMarshall/os-autoinst-distri-rocky#162 CASEDIR=https://github.com/AlanMarshall/os-autoinst-distri-rocky.git#anaconda-txt PRODUCTDIR=os-autoinst-distri-rocky NEEDLES_DIR=https://github.com/AlanMarshall/os-autoinst-distri-rocky.git#anaconda-txt/needles +```bash +$ /usr/bin/openqa-clone-job --skip-chained-deps --parental-inheritance --within-instance https://openqa.rockylinux.org \ + 13255 _GROUP=0 TEST+=@AlanMarshall/os-autoinst-distri-rocky#anaconda-txt \ + BUILD=AlanMarshall/os-autoinst-distri-rocky#162 CASEDIR=https://github.com/AlanMarshall/os-autoinst-distri-rocky.git#anaconda-txt \ + PRODUCTDIR=os-autoinst-distri-rocky NEEDLES_DIR=https://github.com/AlanMarshall/os-autoinst-distri-rocky.git#anaconda-txt/needles Created job #14228: rocky-9.1-universal-x86_64-Build20230319-Rocky-9.1-x86_64.0-install_anaconda_text@64bit -> https://openqa.rockylinux.org/t14228 ``` -``` +```bash $ openqa-cli api jobs/14228 --pretty { "job" : { @@ -389,12 +393,15 @@ $ openqa-cli api jobs/14228 --pretty #### {{ rc.prod }} 8.7 -``` -$ /usr/bin/openqa-clone-job --skip-chained-deps --parental-inheritance --within-instance https://openqa.rockylinux.org 13371 _GROUP=0 TEST+=@AlanMarshall/os-autoinst-distri-rocky#anaconda-txt BUILD=AlanMarshall/os-autoinst-distri-rocky#162 CASEDIR=https://github.com/AlanMarshall/os-autoinst-distri-rocky.git#anaconda-txt PRODUCTDIR=os-autoinst-distri-rocky NEEDLES_DIR=https://github.com/AlanMarshall/os-autoinst-distri-rocky.git#anaconda-txt/needles +```bash +$ /usr/bin/openqa-clone-job --skip-chained-deps --parental-inheritance --within-instance https://openqa.rockylinux.org \ + 13371 _GROUP=0 TEST+=@AlanMarshall/os-autoinst-distri-rocky#anaconda-txt \ + BUILD=AlanMarshall/os-autoinst-distri-rocky#162 CASEDIR=https://github.com/AlanMarshall/os-autoinst-distri-rocky.git#anaconda-txt \ + PRODUCTDIR=os-autoinst-distri-rocky NEEDLES_DIR=https://github.com/AlanMarshall/os-autoinst-distri-rocky.git#anaconda-txt/needles Created job #14229: rocky-8.7-universal-x86_64-Build20230319-Rocky-8.7-x86_64.0-install_anaconda_text@64bit -> https://openqa.rockylinux.org/t14229 ``` -``` +```bash $ openqa-cli api jobs/14229 --pretty { "job" : { diff --git a/dev_guides/openqa_clone_job_examples.md b/dev_guides/openqa_clone_job_examples.md index aa22bbf..1c8eb34 100644 --- a/dev_guides/openqa_clone_job_examples.md +++ b/dev_guides/openqa_clone_job_examples.md @@ -21,7 +21,7 @@ To complete any of the examples please complete the API `POST` Access steps outl First you might want to query the {{ rc.prod }} openQA system for the latest job ID for a specific job or test. The openQA client, hereafter refered to as `openqa-cli` will allow you to quickly do that via the API. Here is an example... -``` +```bash $ openqa-cli api --host http://openqa.rockylinux.org jobs/overview groupid=0 distri=rocky version=9.1 test=install_default_upload latest=1 | jq '.' [ { @@ -33,12 +33,11 @@ $ openqa-cli api --host http://openqa.rockylinux.org jobs/overview groupid=0 dis This basically says "give me the job id and name of the most recent `install_default_upload` test for {{ rc.prod }} 9.1". - ### Cloning a job "as-is" With that job id in hand you can now clone that job directly to your local openQA development system with... -``` +```bash $ openqa-clone-job --from https://openqa.rockylinux.org --skip-download 22735 Cloning children of rocky-9.1-dvd-iso-x86_64-Build20230423-Rocky-9.1-x86_64.0-install_default_upload@64bit Created job #23: rocky-9.1-dvd-iso-x86_64-Build20230423-Rocky-9.1-x86_64.0-install_default_upload@64bit -> http://localhost/t23 @@ -48,14 +47,14 @@ Created job #23: rocky-9.1-dvd-iso-x86_64-Build20230423-Rocky-9.1-x86_64.0-insta Now you should have the same job running in your local instance... -``` +```bash $ openqa-cli api jobs/overview [{"id":23,"name":"rocky-9.1-dvd-iso-x86_64-Build20230423-Rocky-9.1-x86_64.0-install_default_upload@64bit"}] ``` ### Basic job details -``` +```bash $ openqa-cli api jobs/23 | jq '.' { "job": { @@ -130,34 +129,30 @@ $ openqa-cli api jobs/23 | jq '.' ***NOTE: In the above job information you can clearly see the job was cloned from `https://openqa.rockylinux.org/tests/22735`. - ## Advanced `openqa-clone-job` You can, of course, perform more elaborate operations while cloneing a job either from your local instance or from the production instance. Typically, this might be done to modify some of the job POST variables in the cloned job while keeping all other variables unchanged. - ### Changing variable during clone Here is an example where the ISO is changed in the cloned job... -``` +```bash $ openqa-clone-job --from https://openqa.rockylinux.org --skip-download 22735 ISO=Rocky-9.1-x86_64-dvd.iso Cloning children of rocky-9.1-dvd-iso-x86_64-Build20230423-Rocky-9.1-x86_64.0-install_default_upload@64bit Created job #24: rocky-9.1-dvd-iso-x86_64-Build20230423-Rocky-9.1-x86_64.0-install_default_upload@64bit -> http://localhost/t24 ``` - ### Job overview -``` +```bash $ openqa-cli api jobs/overview [{"id":24,"name":"rocky-9.1-dvd-iso-x86_64-Build20230423-Rocky-9.1-x86_64.0-install_default_upload@64bit"}] ``` - ### Job details -``` +```bash $ openqa-cli api jobs/24 | jq '.' { "job": { @@ -234,7 +229,7 @@ $ openqa-cli api jobs/24 | jq '.' You should notice that the only substantive difference between the two cloned jobs is the ISO that is used to run the `install_default_upload` test... -``` +```bash $ openqa-cli api jobs/23 | jq '.job.settings.ISO' "Rocky-9.1-20221214.1-x86_64-dvd.iso"