In the last post we’ve installed and configured the Uyuni server. In this post we’ll add our first client we later on can manage through the Uyuni server. Quite some distributions are supported, and we’re not going for any flavor of openSUSE or SUSE (that for sure will work), but for a Debian 11 client. As our server is running in AWS, we’ll use the official Debian 11 AMI from the AWS marketplace. The supported features for Debian are listed here.
As usual, before we do anything else, we’ll bring the system to the latest release. As described in the last post, make sure that the fully qualified domain name is returned by “hostname -f”:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | admin@uyuni-debian11:~$ hostname -f uyuni-debian11.it.dbi-services.com admin@uyuni-debian11:~$ sudo apt update && sudo apt dist-upgrade -y admin@uyuni-debian11:~$ sudo reboot admin@uyuni-debian11:~$ uname -a Linux uyuni-debian11 5.10.0-20-cloud-amd64 #1 SMP Debian 5.10.158-2 (2022-12-13) x86_64 GNU/Linux admin@uyuni-debian11:~$ cat /etc/os-release PRETTY_NAME= "Debian GNU/Linux 11 (bullseye)" NAME= "Debian GNU/Linux" VERSION_ID= "11" VERSION= "11 (bullseye)" VERSION_CODENAME=bullseye ID=debian HOME_URL= "https://www.debian.org/" SUPPORT_URL= "https://www.debian.org/support" BUG_REPORT_URL= "https://bugs.debian.org/" |
Later on, when we bootstrap the client from the Uyuni web interface, we’ll need the ssh key for connecting, so we need to generate the keys for the root user:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | admin@uyuni-debian11:~$ sudo bash root@uyuni-debian11: /home/admin $ cd root@uyuni-debian11:~$ ssh -keygen Generating public /private rsa key pair. Enter file in which to save the key ( /root/ . ssh /id_rsa ): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/ . ssh /id_rsa Your public key has been saved in /root/ . ssh /id_rsa .pub The key fingerprint is: SHA256:oTWP8toDbc79iM8o /mC8yuDjMNr7TtEyP3EOXbg08KE root@uyuni-debian11 The key's randomart image is: +---[RSA 3072]----+ | . . | | + o | | E O . | | . = O | | + *.S . | | *.Bo | |o . . *=o. | |.=.+ ..*++.. | |..===o+o=o+.. | +----[SHA256]-----+ root@uyuni-debian11:~ # |
Before we can start to integrate the client into the Uyuni server’s we need to create a bootstrap repository. This repository is used, when a client is registered for the first time. To do that, we need to create the Debian 11 channels. This can easily be done on the command line:
1 2 3 4 5 | ec2-user@uyuni-server:~> sudo spacewalk-common-channels debian-11-pool-amd64-uyuni debian-11-amd64-uyuni-client debian-11-amd64-main-updates-uyuni debian-11-amd64-main-security-uyuni SUSE Manager username: dwe SUSE Manager password: ec2-user@uyuni-server:~> ps -ef | grep sync root 7404 3390 99 15:41 ? 00:06:10 /usr/bin/python3 -u /usr/bin/spacewalk-repo-sync --channel debian-11-pool-amd64-uyuni -- type deb --non-interactive |
The synchronization started automatically and our new Debian 11 channels are now visible in the web interface:

The repositories got created as well:

To check the synchronization status, you can either do that from the command line by checking the log file (you’ll notice the Red Hat roots here, because of the “rhn” in the path):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ec2-user@uyuni-server:~> sudo tail -f /var/log/rhn/reposync/debian-11-pool-amd64-uyuni .log 2022 /12/28 15:50:15 -00:00 42549 /58640 : ogamesim-www_0.34-3.1_all.deb 2022 /12/28 15:50:15 -00:00 42550 /58640 : oggfwd_0.2-6+b2_amd64.deb 2022 /12/28 15:50:15 -00:00 42551 /58640 : oggvideotools_0.9.1-5.1_amd64.deb ... 2022 /12/28 16:04:25 -00:00 Package batch #1715 of 2932 completed... 2022 /12/28 16:04:26 -00:00 Package batch #1717 of 2932 completed... 2022 /12/28 16:04:27 -00:00 Package batch #1716 of 2932 completed... 2022 /12/28 16:04:27 -00:00 Package batch #1719 of 2932 completed... 2022 /12/28 16:04:27 -00:00 Package batch #1720 of 2932 completed... ... 2022 /12/28 16:12:19 -00:00 Package batch #2931 of 2932 completed... 2022 /12/28 16:12:20 -00:00 Package batch #2930 of 2932 completed... 2022 /12/28 16:12:20 -00:00 Package batch #2927 of 2932 completed... 2022 /12/28 16:12:20 -00:00 Importing packages finished. 2022 /12/28 16:12:20 -00:00 2022 /12/28 16:12:20 -00:00 Linking packages to the channel. 2022 /12/28 16:12:23 -00:00 1000 packages linked 2022 /12/28 16:12:25 -00:00 2000 packages linked 2022 /12/28 16:12:26 -00:00 3000 packages linked ... |
… or by using the web interface:

This will take some time as plenty of packages need to be synchronized. Before we continue we’ll wait until the synchronization completes. Again, this can be checked on the command line:
1 2 3 4 5 6 7 8 9 10 11 | ec2-user@uyuni-server:~> sudo tail -10 /var/log/rhn/reposync/debian-11-pool-amd64-uyuni .log 2022 /12/28 16:18:05 -00:00 54000 packages linked 2022 /12/28 16:18:17 -00:00 55000 packages linked 2022 /12/28 16:18:27 -00:00 56000 packages linked 2022 /12/28 16:18:39 -00:00 57000 packages linked 2022 /12/28 16:18:51 -00:00 58000 packages linked 2022 /12/28 16:19:03 -00:00 58640 packages linked 2022 /12/28 16:19:03 -00:00 2022 /12/28 16:19:03 -00:00 Patches in repo: 0. 2022 /12/28 16:19:03 -00:00 Regenerating bootstrap repositories. 2022 /12/28 16:19:04 -00:00 Sync completed. |
… or by checking the repository in the web interface:


The next step is to create the bootstrap repository, which will be used by the client once it gets registered:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | ec2-user@uyuni-server:~> sudo mgr-create-bootstrap-repo 1. debian11-amd64-uyuni Enter a number of a product label: 1 Creating bootstrap repo for debian11-amd64-uyuni copy 'dirmngr-2.2.27-2+deb11u2.amd64-deb' copy 'gnupg-2.2.27-2+deb11u2.all-deb' ...copy 'pinentry-curses-1.1.0-4.amd64-deb' Exporting indices... ERROR: package 'venv-salt-minion' not found Suggestions: mgr-create-bootstrap-repo uses the locally synchronized versions of files from the Tools repository, and uses the locally synchronized pool channel for dependency resolution. Both should be fully synced before running the mgr-create-bootstrap-repo script. |
This fails, because the tools channel was not yet synchronized. We can do that manually:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | ec2-user@uyuni-server:~> sudo spacewalk-repo- sync --channel debian-11-amd64-uyuni-client 16:35:46 ====================================== 16:35:46 | Channel: debian-11-amd64-uyuni-client 16:35:46 ====================================== 16:35:46 Sync of channel started. 16:35:46 Repo URL: https: //download .opensuse.org /repositories/systemsmanagement : /Uyuni : /Stable : /Debian11-Uyuni-Client-Tools/Debian_11/ 16:35:46 Packages in repo: 63 16:35:46 Packages already synced: 38 16:35:46 Packages to sync : 25 16:35:46 New packages to download: 25 16:35:46 Downloading packages: 16:35:46 Downloading total 25 files from 1 queues. 16:35:47 1 /25 : golang-1.14_1.14.4-3_all.deb 16:35:47 2 /25 : golang-1.14-doc_1.14.4-3_all.deb 16:35:47 3 /25 : golang-1.14-src_1.14.4-3_i386.deb 16:35:47 4 /25 : libopenscap-dev_1.3.4-1_i386.deb 16:35:47 5 /25 : golang-1.14-src_1.14.4-3_amd64.deb 16:35:47 6 /25 : libopenscap-perl_1.3.4-1_i386.deb 16:35:48 7 /25 : libopenscap-dev_1.3.4-1_amd64.deb 16:35:48 8 /25 : libopenscap8_1.3.4-1_i386.deb 16:35:48 9 /25 : libopenscap-perl_1.3.4-1_amd64.deb 16:35:48 10 /25 : libopenscap8_1.3.4-1_amd64.deb 16:35:48 11 /25 : libopenscap8-dbg_1.3.4-1_amd64.deb 16:35:48 12 /25 : golang-1.14-go_1.14.4-3_i386.deb 16:35:48 13 /25 : prometheus-exporter-exporter_0.4.0-1_amd64.deb 16:35:48 14 /25 : golang-1.14-go_1.14.4-3_amd64.deb 16:35:48 15 /25 : python3-openscap_1.3.4-1_amd64.deb 16:35:48 16 /25 : libopenscap8-dbg_1.3.4-1_i386.deb 16:35:48 17 /25 : scap-security-guide-debian_0.1.64-1.52.2.uyuni_all.deb 16:35:48 18 /25 : scap-security-guide_0.1.64-1.52.2.uyuni_all.deb 16:35:48 19 /25 : prometheus-exporter-exporter_0.4.0-1_i386.deb 16:35:48 20 /25 : python3-openscap_1.3.4-1_i386.deb 16:35:48 21 /25 : spacecmd_4.4.4-2.2.uyuni_all.deb 16:35:49 22 /25 : scap-security-guide-ubuntu_0.1.64-1.52.2.uyuni_all.deb 16:35:49 23 /25 : scap-security-guide-redhat_0.1.64-1.52.2.uyuni_all.deb 16:35:49 24 /25 : venv-salt-minion_3004-11.172.uyuni_i386.deb 16:35:49 25 /25 : venv-salt-minion_3004-11.172.uyuni_amd64.deb 16:35:49 16:35:49 Importing packages to DB: 16:35:51 Package batch #2 of 2 completed... 16:35:51 Package batch #1 of 2 completed... 16:35:51 16:35:51 Linking packages to the channel. 16:35:51 25 packages linked 16:35:51 16:35:51 Patches in repo: 0. 16:35:52 Regenerating bootstrap repositories. Generating bootstrap repos for all available products which had changes. Nothing to do . 16:35:52 Sync completed. 16:35:52 Total time : 0:00:06 |
Trying to create the bootstrap repository once more succeeds:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | ec2-user@uyuni-server:~> sudo mgr-create-bootstrap-repo 1. debian11-amd64-uyuni Enter a number of a product label: 1 Creating bootstrap repo for debian11-amd64-uyuni copy 'dirmngr-2.2.27-2+deb11u2.amd64-deb' copy 'gnupg-2.2.27-2+deb11u2.all-deb' copy 'gnupg-l10n-2.2.27-2+deb11u2.all-deb' copy 'gnupg-utils-2.2.27-2+deb11u2.amd64-deb' copy 'gpg-2.2.27-2+deb11u2.amd64-deb' copy 'gpg-agent-2.2.27-2+deb11u2.amd64-deb' copy 'gpg-wks-client-2.2.27-2+deb11u2.amd64-deb' copy 'gpg-wks-server-2.2.27-2+deb11u2.amd64-deb' copy 'gpgconf-2.2.27-2+deb11u2.amd64-deb' copy 'gpgsm-2.2.27-2+deb11u2.amd64-deb' copy 'libassuan0-2.5.3-7.1.amd64-deb' copy 'libksba8-1.5.0-3+deb11u1.amd64-deb' copy 'libldap-2.4-2-2.4.57+dfsg-3+deb11u1.amd64-deb' copy 'libldap-common-2.4.57+dfsg-3+deb11u1.all-deb' copy 'libnpth0-1.6-3.amd64-deb' copy 'libsasl2-2-2.1.27+dfsg-2.1+deb11u1.amd64-deb' copy 'libsasl2-modules-2.1.27+dfsg-2.1+deb11u1.amd64-deb' copy 'libsasl2-modules-db-2.1.27+dfsg-2.1+deb11u1.amd64-deb' copy 'libsqlite3-0-3.34.1-3.amd64-deb' copy 'pinentry-curses-1.1.0-4.amd64-deb' copy 'venv-salt-minion-3004-11.172.uyuni.i386-deb' copy 'venv-salt-minion-3004-11.172.uyuni.amd64-deb' Skipping inclusion of 'dirmngr' '2.2.27-2+deb11u2' in 'bootstrap|main|amd64' , as this version already exists. Skipping inclusion of 'gnupg' '2.2.27-2+deb11u2' in 'bootstrap|main|amd64' , as this version already exists. Skipping inclusion of 'gnupg' '2.2.27-2+deb11u2' in 'bootstrap|main|i386' , as this version already exists. Skipping inclusion of 'gnupg' '2.2.27-2+deb11u2' in 'bootstrap|main|armhf' , as this version already exists. Skipping inclusion of 'gnupg-l10n' '2.2.27-2+deb11u2' in 'bootstrap|main|amd64' , as this version already exists. Skipping inclusion of 'gnupg-l10n' '2.2.27-2+deb11u2' in 'bootstrap|main|i386' , as this version already exists. Skipping inclusion of 'gnupg-l10n' '2.2.27-2+deb11u2' in 'bootstrap|main|armhf' , as this version already exists. Skipping inclusion of 'gnupg-utils' '2.2.27-2+deb11u2' in 'bootstrap|main|amd64' , as this version already exists. Skipping inclusion of 'gpg' '2.2.27-2+deb11u2' in 'bootstrap|main|amd64' , as this version already exists. Skipping inclusion of 'gpg-agent' '2.2.27-2+deb11u2' in 'bootstrap|main|amd64' , as this version already exists. Skipping inclusion of 'gpg-wks-client' '2.2.27-2+deb11u2' in 'bootstrap|main|amd64' , as this version already exists. Skipping inclusion of 'gpg-wks-server' '2.2.27-2+deb11u2' in 'bootstrap|main|amd64' , as this version already exists. Skipping inclusion of 'gpgconf' '2.2.27-2+deb11u2' in 'bootstrap|main|amd64' , as this version already exists. Skipping inclusion of 'gpgsm' '2.2.27-2+deb11u2' in 'bootstrap|main|amd64' , as this version already exists. Skipping inclusion of 'libassuan0' '2.5.3-7.1' in 'bootstrap|main|amd64' , as this version already exists. Skipping inclusion of 'libksba8' '1.5.0-3+deb11u1' in 'bootstrap|main|amd64' , as this version already exists. Skipping inclusion of 'libldap-2.4-2' '2.4.57+dfsg-3+deb11u1' in 'bootstrap|main|amd64' , as this version already exists. Skipping inclusion of 'libldap-common' '2.4.57+dfsg-3+deb11u1' in 'bootstrap|main|amd64' , as this version already exists. Skipping inclusion of 'libldap-common' '2.4.57+dfsg-3+deb11u1' in 'bootstrap|main|i386' , as this version already exists. Skipping inclusion of 'libldap-common' '2.4.57+dfsg-3+deb11u1' in 'bootstrap|main|armhf' , as this version already exists. Skipping inclusion of 'libnpth0' '1.6-3' in 'bootstrap|main|amd64' , as this version already exists. Skipping inclusion of 'libsasl2-2' '2.1.27+dfsg-2.1+deb11u1' in 'bootstrap|main|amd64' , as this version already exists. Skipping inclusion of 'libsasl2-modules' '2.1.27+dfsg-2.1+deb11u1' in 'bootstrap|main|amd64' , as this version already exists. Skipping inclusion of 'libsasl2-modules-db' '2.1.27+dfsg-2.1+deb11u1' in 'bootstrap|main|amd64' , as this version already exists. Skipping inclusion of 'libsqlite3-0' '3.34.1-3' in 'bootstrap|main|amd64' , as this version already exists. Skipping inclusion of 'pinentry-curses' '1.1.0-4' in 'bootstrap|main|amd64' , as this version already exists. Exporting indices... |
Before we can add the client we need to create an activation key:




Now we are ready to register the client (we’ll use the activation key we’ve just created and the ssh key from the Debian system created above). If you are in a public cloud, remember to allow ssh access as root, because this is usually disabled.

Once the bootstrap finished, the Debian system appears under the list of systems:


No we are ready to manage the system with Uyuni, but this is the topic for the next post.
Michi
02.07.2023Hello Daniel, Many Thanks for this blog. it helped me very well
I'm new in the Uyuni. I have a question. Do I understand it correctly that the clients can connect with the Uyuni server via SSH with root, SSH with key and salt. So there are only these 3 variants? Which variant would you recommend if the Uyuni server should be in the DMZ zone?
Thank you