installer: separate suffix and prefix generation.

Reuse suffix for app dir name.
diff --git a/core/installer/cmd/app_manager.go b/core/installer/cmd/app_manager.go
index 9a15c6e..8cb6cad 100644
--- a/core/installer/cmd/app_manager.go
+++ b/core/installer/cmd/app_manager.go
@@ -257,11 +257,9 @@
 			}
 		}
 	}
-	nsGen := installer.NewCombine(
-		installer.NewPrefixGenerator(config.Values.Id+"-"),
-		installer.NewRandomSuffixGenerator(3),
-	)
-	if err := s.m.Install(a.App, nsGen, values); err != nil {
+	nsGen := installer.NewPrefixGenerator(config.Values.NamespacePrefix)
+	suffixGen := installer.NewFixedLengthRandomSuffixGenerator(3)
+	if err := s.m.Install(a.App, nsGen, suffixGen, values); err != nil {
 		return err
 	}
 	return c.String(http.StatusOK, "Installed")
diff --git a/core/installer/cmd/bootstrap.go b/core/installer/cmd/bootstrap.go
index ffff0ba..d007ed2 100644
--- a/core/installer/cmd/bootstrap.go
+++ b/core/installer/cmd/bootstrap.go
@@ -403,7 +403,7 @@
 				"Namespace": namespaces[0],
 			}
 		}
-		return repo.InstallApp(*app, "infrastructure", values)
+		return repo.InstallApp(*app, filepath.Join("/infrastructure", app.Name), values)
 	}
 	appsToInstall := []string{
 		"resource-renderer-controller",
@@ -495,7 +495,7 @@
 			return err
 		}
 	}
-	return repo.InstallApp(*app, "infrastructure", map[string]any{
+	return repo.InstallApp(*app, filepath.Join("/infrastructure", app.Name), map[string]any{
 		"Global": global,
 		"Values": map[string]any{
 			"RepoIP":        bootstrapFlags.softServeIP,