diff --git a/Gemfile.lock b/Gemfile.lock index e0bf3f125..5a479545b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -34,6 +34,7 @@ GEM public_suffix (>= 2.0.2, < 6.0) ast (2.4.2) awesome_print (1.9.2) + base64 (0.2.0) bigdecimal (3.1.6) builder (3.2.4) byebug (11.1.3) @@ -50,7 +51,7 @@ GEM term-ansicolor (~> 1.3) thor (>= 0.19.4, < 2.0) tins (~> 1.6) - crack (0.4.6) + crack (1.0.0) bigdecimal rexml crass (1.0.6) @@ -137,7 +138,8 @@ GEM concurrent-ruby (~> 1.0) json (2.3.1) jsonapi-renderer (0.2.2) - jwt (2.7.1) + jwt (2.8.0) + base64 listen (3.6.0) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) @@ -174,7 +176,7 @@ GEM puma (5.6.8) nio4r (~> 2.0) racc (1.7.1) - rack (2.2.8) + rack (2.2.8.1) rack-test (2.1.0) rack (>= 1.3) rails-dom-testing (2.2.0) @@ -308,7 +310,7 @@ GEM activesupport (>= 3) railties (>= 3) yard (~> 0.9.20) - webmock (3.20.0) + webmock (3.23.0) addressable (>= 2.8.0) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) diff --git a/db/migrate/20240129140413_remove_obsolete_res7_repositories.rb b/db/migrate/20240129140413_remove_obsolete_res7_repositories.rb index 2dc1b14c1..687c69286 100644 --- a/db/migrate/20240129140413_remove_obsolete_res7_repositories.rb +++ b/db/migrate/20240129140413_remove_obsolete_res7_repositories.rb @@ -6,9 +6,13 @@ def change # This migration removes the now obsolete repositories, since RMT does # not remove these automatically. + # NOTE: We have a check in the repository model to stop users from + # deleting SUSE repositories. This is why need to run delete + # directly rather then destroying as usual. + # Affected repositories are: # - 1963: https://updates.suse.com/repo/$RCE/RES7/src/ # - 1736: https://updates.suse.com/repo/$RCE/RES7/x86_64/ - Repository.where(scc_id: [1963, 1736]).destroy_all + Repository.where(scc_id: [1963, 1736]).delete_all end end diff --git a/package/obs/rmt-server.changes b/package/obs/rmt-server.changes index d1d578af5..8939204b7 100644 --- a/package/obs/rmt-server.changes +++ b/package/obs/rmt-server.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Thu Feb 20 15:36:00 UTC 2024 - Zuzana Petrova + +- Fix for SUSE Liberty registration script to allow RHEL7/SLL7/CentOS7 + clients to register to RMT servers + ------------------------------------------------------------------- Thu Feb 08 15:33:00 UTC 2024 - Felix Schnizlein diff --git a/public/tools/rmt-client-setup-res b/public/tools/rmt-client-setup-res index 1e80fa90d..4e523eb5b 100755 --- a/public/tools/rmt-client-setup-res +++ b/public/tools/rmt-client-setup-res @@ -10,6 +10,9 @@ SUSECONNECT=/usr/bin/SUSEConnect RPM=/usr/bin/rpm DNF=/usr/bin/dnf CURL=/usr/bin/curl +YUM=/usr/bin/yum +YUM_CONFIG_MGR=/usr/bin/yum-config-manager + TEMPFILE="/etc/pki/ca-trust/source/anchors/rmt.crt" UPDATE_CA_TRUST=/usr/bin/update-ca-trust RPM_GPG_KEY_LOCATION="/etc/pki/rpm-gpg" @@ -74,7 +77,7 @@ fi if [ -z "$REGURL" ]; then echo "Missing registration URL. Abort." - usage + exit 1 fi if [ ! -x $RPM ]; then @@ -87,6 +90,11 @@ if [ ! -x $CURL ]; then exit 1 fi +if [[ ! -e /etc/os-release ]]; then + echo "/etc/os-release file not found. Couldn't determine OS. Abort." + exit 1 +fi + # Import Self-signed CERT as Trusted if [ -z "$REGCERT" ]; then CERTURL=`echo "$REGURL" | awk -F/ '{print "https://" $3 "/rmt.crt"}'` @@ -112,43 +120,43 @@ if [ -x $UPDATE_CA_TRUST ]; then fi SLL_version=`cat /etc/os-release | grep "VERSION_ID" | cut -d\" -f2 | cut -d\. -f1` -if [[ ${SLL_version} > 8 ]]; then +if [[ ${SLL_version} > 8 ]]; then SLL_name="SLL"; SLL_release_package="sll-release" +elif [[ ${SLL_version} -eq 7 ]]; then + SLL_name="RES"; + SLL_release_package="sles_es-release-server" +elif [[ ${SLL_version} -eq 8 ]]; then + SLL_name="RES"; + SLL_release_package="sles_es-release" else - SLL_name="RES"; - SLL_release_package="sles_es-release" + echo "Unsupported or unknown base version. Abort"; + exit 1 fi echo "detect ${SLL_name} version... ${SLL_version}" -echo "Disabling all repositories" -dnf config-manager --disable $(dnf repolist -q | awk '{ print $1 }' | grep -v repo) -#sed -i 's/^enabled=1/enabled=0/' /etc/yum.repos.d/* - -# on Centos /usr/share/redhat-release is a file, on RHEL and RES it is a directory -# so this is CentOS only workaround -if [ -f /usr/share/redhat-release ] | [ -h /usr/share/redhat-release ]; then - rm -f /usr/share/redhat-release; -fi - -# on RHEL9 (not RHEL8) redhat-release is protected and cannot be updated to sll-release -if [ -f /etc/dnf/protected.d/redhat-release.conf ]; then - rm -f /etc/dnf/protected.d/redhat-release.conf; -fi - echo "Importing repomd.xml.key" $CURL --silent --show-error --insecure ${REGURL}/repo/SUSE/Updates/${SLL_name}/${SLL_version}/x86_64/update/repodata/repomd.xml.key --output repomd.xml.key $RPM --import repomd.xml.key if [ ! -x $SUSECONNECT ]; then echo "Downloading SUSEConnect" +if [[ ${SLL_version} > 7 ]]; then if [ ! -x $DNF ]; then echo "dnf command not found. Abort." exit 1 fi +echo "Disabling all repositories" +$DNF config-manager --disable $(dnf repolist -q | awk '{ print $1 }' | grep -v repo) +#sed -i 's/^enabled=1/enabled=0/' /etc/yum.repos.d/* +# on RHEL9 (not RHEL8) redhat-release is protected and cannot be updated to sll-release +if [ -f /etc/dnf/protected.d/redhat-release.conf ]; then + rm -f /etc/dnf/protected.d/redhat-release.conf; +fi + $DNF config-manager --add-repo ${REGURL}/repo/SUSE/Updates/${SLL_name}/${SLL_version}/x86_64/update $DNF config-manager --add-repo ${REGURL}/repo/SUSE/Updates/${SLL_name}-AS/${SLL_version}/x86_64/update $DNF install --allowerasing ${SLL_release_package} @@ -161,6 +169,30 @@ if [ ! -x $SUSECONNECT ]; then $DNF install SUSEConnect librepo $DNF config-manager --set-disabled "${RMTNAME}_repo_SUSE_Updates_${SLL_name}_${SLL_version}_x86_64_update" $DNF config-manager --set-disabled "${RMTNAME}_repo_SUSE_Updates_${SLL_name}-AS_${SLL_version}_x86_64_update" + +elif [[ ${SLL_version} -eq 7 ]]; then + # For SLL7 we need to have yum, yum_config_mgr, sles_os-release-server, etc.. + if [ ! -x "$YUM_CONFIG_MGR" ]; then + echo "YUM config manager is not installed. Please install yum-config-manager and retry. Abort." + exit 1 + fi + + echo "Disabling all repositories" + $YUM_CONFIG_MGR --disable \* > /dev/null + + # on Centos /usr/share/redhat-release is a file, on RHEL and RES it is a directory + # so this is CentOS only workaround (on some system it is a normal file, on some systems a symlink) + if [ -f /usr/share/redhat-release ] | [ -h /usr/share/redhat-release ]; then + rm -f /usr/share/redhat-release; + fi + + $YUM_CONFIG_MGR --add-repo ${REGURL}/repo/SUSE/Updates/${SLL_name}/${SLL_version}/x86_64/update + $YUM_CONFIG_MGR --enable *suse.* > /dev/null + + $YUM install sles_es-release-server suseconnect-ng librepo + + +fi elif [[ ${SLL_version} -eq 8 ]]; then # For SLL8, the release package is already installed, just import the keys import_rpm_signing_keys diff --git a/spec/lib/suse/connect/system_serializer_spec.rb b/spec/lib/suse/connect/system_serializer_spec.rb index 7187df834..3b466e349 100644 --- a/spec/lib/suse/connect/system_serializer_spec.rb +++ b/spec/lib/suse/connect/system_serializer_spec.rb @@ -90,7 +90,7 @@ context 'system with systemuptime' do let(:system) { create :system, :with_system_uptimes } - it 'match systemuptime data' do + it 'matches systemuptime data' do expect((serializer[:systemuptimes][0][:online_at_day]).to_date).to eq(Time.zone.now.to_date) expect((serializer[:systemuptimes][0][:online_at_hours]).to_s).to eq('111111111111111111111111') end