diff --git a/models/packages/package_file.go b/models/packages/package_file.go
index ecda71385c..ca7bd4023e 100644
--- a/models/packages/package_file.go
+++ b/models/packages/package_file.go
@@ -279,7 +279,7 @@ func extractBuildNumberFromFileName(filename string) (int, error) {
 
 	buildNumber, err := strconv.Atoi(buildNumberStr)
 	if err != nil {
-		return 0, fmt.Errorf("failed to convert build number to integer: '%s'", buildNumberStr)
+		return 0, fmt.Errorf("failed to convert maven package build number to integer: '%s'", buildNumberStr)
 	}
 
 	return buildNumber, nil
diff --git a/modules/setting/packages.go b/modules/setting/packages.go
index df83a3f07a..69de064d42 100644
--- a/modules/setting/packages.go
+++ b/modules/setting/packages.go
@@ -103,6 +103,7 @@ func loadPackagesFrom(rootCfg ConfigProvider) (err error) {
 	Packages.LimitSizeRubyGems = mustBytes(sec, "LIMIT_SIZE_RUBYGEMS")
 	Packages.LimitSizeSwift = mustBytes(sec, "LIMIT_SIZE_SWIFT")
 	Packages.LimitSizeVagrant = mustBytes(sec, "LIMIT_SIZE_VAGRANT")
+	Packages.DefaultRPMSignEnabled = sec.Key("DEFAULT_RPM_SIGN_ENABLED").MustBool(false)
 	Packages.RetainMavenSnapshotBuilds = sec.Key("RETAIN_MAVEN_SNAPSHOT_BUILDS").MustInt(Packages.RetainMavenSnapshotBuilds)
 	return nil
 }
diff --git a/services/packages/maven/cleanup.go b/services/packages/maven/cleanup.go
index 658dd73cab..d4f6138977 100644
--- a/services/packages/maven/cleanup.go
+++ b/services/packages/maven/cleanup.go
@@ -51,7 +51,7 @@ func CleanupSnapshotVersions(ctx context.Context) error {
 }
 
 func isSnapshotVersion(version string) bool {
-	return strings.Contains(version, "-SNAPSHOT")
+	return strings.HasSuffix(version, "-SNAPSHOT")
 }
 
 func cleanSnapshotFiles(ctx context.Context, versionID int64, retainBuilds int) error {
@@ -92,7 +92,12 @@ func cleanSnapshotFiles(ctx context.Context, versionID int64, retainBuilds int)
 }
 
 func extractMaxBuildNumberFromMetadata(ctx context.Context, metadataFile *packages.PackageFile) (int, error) {
-	content, _, _, err := packages_service.GetPackageFileStream(ctx, metadataFile)
+	pb, err := packages.GetBlobByID(ctx, metadataFile.BlobID)
+	if err != nil {
+		return 0, fmt.Errorf("failed to get package blob: %w", err)
+	}
+
+	content, _, _, err := packages_service.GetPackageBlobStream(ctx, metadataFile, pb, nil, true)
 	if err != nil {
 		return 0, fmt.Errorf("failed to get package file stream: %w", err)
 	}
diff --git a/services/packages/packages.go b/services/packages/packages.go
index bd1d460fd3..7f50562242 100644
--- a/services/packages/packages.go
+++ b/services/packages/packages.go
@@ -600,8 +600,8 @@ func GetPackageFileStream(ctx context.Context, pf *packages_model.PackageFile) (
 }
 
 // GetPackageBlobStream returns the content of the specific package blob
-// If the storage supports direct serving and it's enabled, only the direct serving url is returned.
-func GetPackageBlobStream(ctx context.Context, pf *packages_model.PackageFile, pb *packages_model.PackageBlob, serveDirectReqParams url.Values) (io.ReadSeekCloser, *url.URL, *packages_model.PackageFile, error) {
+// If the storage supports direct serving and it's enabled, only the direct serving url is returned; otherwise, forceInternalServe should be set to true.
+func GetPackageBlobStream(ctx context.Context, pf *packages_model.PackageFile, pb *packages_model.PackageBlob, serveDirectReqParams url.Values, forceInternalServe ...bool) (io.ReadSeekCloser, *url.URL, *packages_model.PackageFile, error) {
 	key := packages_module.BlobHash256Key(pb.HashSHA256)
 
 	cs := packages_module.NewContentStore()
@@ -610,7 +610,9 @@ func GetPackageBlobStream(ctx context.Context, pf *packages_model.PackageFile, p
 	var u *url.URL
 	var err error
 
-	if cs.ShouldServeDirect() {
+	internalServe := len(forceInternalServe) > 0 && forceInternalServe[0]
+
+	if !internalServe && cs.ShouldServeDirect() {
 		u, err = cs.GetServeDirectURL(key, pf.Name, serveDirectReqParams)
 		if err != nil && !errors.Is(err, storage.ErrURLNotSupported) {
 			log.Error("Error getting serve direct url: %v", err)