@@ -154,8 +154,8 @@ static int CheckAllPackages(const char* commandTemplate, const char* packageMana
154154static int UpdateInstalledPackagesCache (OsConfigLogHandle log )
155155{
156156 const char * commandTemplateDpkg = "%s-query -W -f='${binary:Package}\n'" ;
157- const char * commandTemplateRpm = "%s -qa --queryformat \"%{NAME}\n\"" ;
158- const char * commandTemplateYumDnf = "%s list installed --cacheonly | awk '{print $1}'" ;
157+ const char * commandTemplateRpm = "%s -qa --queryformat \"%{NAME}\\ n\"" ;
158+ const char * commandTemplateYumDnf = "%s list installed --cacheonly | awk '{print $1}'" ;
159159 const char * commandTmeplateZypper = "%s search -i" ;
160160
161161 char * results = NULL ;
@@ -191,7 +191,7 @@ static int UpdateInstalledPackagesCache(OsConfigLogHandle log)
191191
192192 if ((0 == status ) && (NULL != results ))
193193 {
194- if (NULL != (buffer = DuplicateString ( results )))
194+ if (NULL != (buffer = FormatAllocateString ( "\n%s" , results )))
195195 {
196196 FREE_MEMORY (g_installedPackagesCache );
197197 g_installedPackagesCache = buffer ;
@@ -463,7 +463,14 @@ int InstallOrUpdatePackage(const char* packageName, OsConfigLogHandle log)
463463
464464 if (0 == status )
465465 {
466- status = IsPackageInstalled (packageName , log );
466+ if ((0 != (status = IsPackageInstalled (packageName , log ))) && (g_tdnfIsPresent || g_dnfIsPresent || g_yumIsPresent ))
467+ {
468+ // When package installation ends with 0 (success) but the package is not installed after, do one retry without the --cacheonly option
469+ if (0 == (status = CheckOrInstallPackage (commandTemplate , g_tdnfIsPresent ? g_tdnf : (g_dnfIsPresent ? g_dnf : g_yum ), packageName , log )))
470+ {
471+ status = IsPackageInstalled (packageName , log );
472+ }
473+ }
467474 }
468475
469476 if (0 == status )
0 commit comments