m/pkgs/localregistry: make even more runfile aware

Change-Id: I67b4ee5d6bc6a21a91932885ccc67fbf107bf995
Reviewed-on: https://review.monogon.dev/c/monogon/+/3053
Tested-by: Jenkins CI
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
diff --git a/metropolis/pkg/localregistry/localregistry.go b/metropolis/pkg/localregistry/localregistry.go
index aaf0d99..dc0fdde 100644
--- a/metropolis/pkg/localregistry/localregistry.go
+++ b/metropolis/pkg/localregistry/localregistry.go
@@ -82,9 +82,13 @@
 	return imageManifest, nil
 }
 
-func addBazelBlobFromDescriptor(s *Server, image *spec.Image, dd distribution.Descriptor) {
-	path := filepath.Join(image.Path, "blobs", dd.Digest.Algorithm().String(), dd.Digest.Hex())
+func addBazelBlobFromDescriptor(s *Server, image *spec.Image, dd distribution.Descriptor) error {
+	path, err := runfiles.Rlocation(filepath.Join("_main", image.Path, "blobs", dd.Digest.Algorithm().String(), dd.Digest.Hex()))
+	if err != nil {
+		return fmt.Errorf("while locating blob: %w", err)
+	}
 	s.blobs[dd.Digest] = blobMeta{filePath: path, mediaType: dd.MediaType, contentLength: dd.Size}
+	return nil
 }
 
 func FromBazelManifest(mb []byte) (*Server, error) {
@@ -102,16 +106,22 @@
 			return nil, err
 		}
 
-		addBazelBlobFromDescriptor(&s, i, md.Descriptor)
+		if err := addBazelBlobFromDescriptor(&s, i, md.Descriptor); err != nil {
+			return nil, err
+		}
 
 		m, err := manifestFromBazel(&s, i, md)
 		if err != nil {
 			return nil, err
 		}
 
-		addBazelBlobFromDescriptor(&s, i, m.Config)
+		if err := addBazelBlobFromDescriptor(&s, i, m.Config); err != nil {
+			return nil, err
+		}
 		for _, l := range m.Layers {
-			addBazelBlobFromDescriptor(&s, i, l)
+			if err := addBazelBlobFromDescriptor(&s, i, l); err != nil {
+				return nil, err
+			}
 		}
 	}
 	return &s, nil