diff --git a/deb/list.go b/deb/list.go index e88069f2..ada6fab7 100644 --- a/deb/list.go +++ b/deb/list.go @@ -317,6 +317,9 @@ func (l *PackageList) VerifyDependencies(options int, architectures []string, so progress.InitBar(int64(l.Len())*int64(len(architectures)), false, aptly.BarGeneralVerifyDependencies) } + if len(architectures) == 0 { + return nil, fmt.Errorf("no architectures defined, cannot verify dependencies") + } for _, arch := range architectures { cache := make(map[string]bool, 2048) diff --git a/deb/remote.go b/deb/remote.go index 6ecb7e80..b12f0dd3 100644 --- a/deb/remote.go +++ b/deb/remote.go @@ -105,7 +105,6 @@ func NewRemoteRepo(name string, archiveRoot string, distribution string, compone if !strings.HasPrefix(result.Distribution, ".") { result.Distribution = "./" + result.Distribution } - result.Architectures = nil if len(result.Components) > 0 { return nil, fmt.Errorf("components aren't supported for flat repos") } @@ -351,7 +350,7 @@ ok: return err } - if !repo.IsFlat() { + if len(stanza["Architectures"]) > 0 { architectures := strings.Split(stanza["Architectures"], " ") sort.Strings(architectures) // "source" architecture is never present, despite Release file claims @@ -365,7 +364,13 @@ ok: return err } } + } + if len(repo.Architectures) == 0 { + return fmt.Errorf("no architectures found, please specify") + } + + if !repo.IsFlat() { components := strings.Split(stanza["Components"], " ") if strings.Contains(repo.Distribution, "/") { distributionLast := path.Base(repo.Distribution) + "/" diff --git a/deb/remote_test.go b/deb/remote_test.go index 2cda7d5e..1998db7e 100644 --- a/deb/remote_test.go +++ b/deb/remote_test.go @@ -115,7 +115,6 @@ func (s *RemoteRepoSuite) TestInvalidURL(c *C) { func (s *RemoteRepoSuite) TestFlatCreation(c *C) { c.Check(s.flat.IsFlat(), Equals, true) c.Check(s.flat.Distribution, Equals, "./") - c.Check(s.flat.Architectures, IsNil) c.Check(s.flat.Components, IsNil) flat2, _ := NewRemoteRepo("flat2", "http://pkg.jenkins-ci.org/debian-stable", "binary/", []string{}, []string{}, false, false, false) diff --git a/debian/aptly-api.service b/debian/aptly-api.service index 1d1c0c2e..5e447ace 100644 --- a/debian/aptly-api.service +++ b/debian/aptly-api.service @@ -9,7 +9,7 @@ Group=aptly-api Environment=TERM=dumb WorkingDirectory=~ EnvironmentFile=/etc/default/aptly-api -ExecStart=/usr/bin/aptly api serve -config=/etc/aptly.conf -listen=${LISTEN_ADDRESS} +ExecStart=/usr/bin/aptly api serve -config=/etc/aptly.conf -no-lock -listen=${LISTEN_ADDRESS} [Install] WantedBy=multi-user.target diff --git a/debian/control b/debian/control index 09d0b824..ee78d412 100644 --- a/debian/control +++ b/debian/control @@ -87,7 +87,7 @@ Testsuite: autopkgtest-pkg-go Package: aptly Architecture: any -Depends: bzip2, xz-utils, gnupg, gpgv, ${shlibs:Depends}, ${misc:Depends} +Depends: ${misc:Depends}, ${shlibs:Depends}, bzip2, xz-utils, adduser, gpg (>= 2.2.12) Suggests: graphviz Conflicts: gnupg1, gpgv1 Built-Using: ${misc:Static-Built-Using}, ${misc:Built-Using} diff --git a/system/t04_mirror/CreateMirror14Test_mirror_show b/system/t04_mirror/CreateMirror14Test_mirror_show index 754770d0..38056b54 100644 --- a/system/t04_mirror/CreateMirror14Test_mirror_show +++ b/system/t04_mirror/CreateMirror14Test_mirror_show @@ -2,7 +2,7 @@ Name: mirror14 Archive Root URL: http://repo.aptly.info/system-tests/cloud.r-project.org/bin/linux/debian/ Distribution: ./bullseye-cran40/ Components: -Architectures: +Architectures: all, amd64, i386 Download Sources: no Download .udebs: no Last update: never diff --git a/system/t04_mirror/CreateMirror21Test_mirror_show b/system/t04_mirror/CreateMirror21Test_mirror_show index a0389012..2eed39be 100644 --- a/system/t04_mirror/CreateMirror21Test_mirror_show +++ b/system/t04_mirror/CreateMirror21Test_mirror_show @@ -2,7 +2,7 @@ Name: mirror21 Archive Root URL: http://repo.aptly.info/system-tests/pkg.jenkins.io/debian-stable/ Distribution: ./binary/ Components: -Architectures: +Architectures: all Download Sources: no Download .udebs: no Last update: never diff --git a/system/t04_mirror/CreateMirror33Test_mirror_show b/system/t04_mirror/CreateMirror33Test_mirror_show index 1b058198..24e24938 100644 --- a/system/t04_mirror/CreateMirror33Test_mirror_show +++ b/system/t04_mirror/CreateMirror33Test_mirror_show @@ -2,7 +2,7 @@ Name: mirror33 Archive Root URL: http://repo.aptly.info/system-tests/nvidia.github.io/libnvidia-container/stable/ubuntu16.04/amd64/ Distribution: ./ Components: -Architectures: +Architectures: amd64 Download Sources: no Download .udebs: no Last update: never diff --git a/system/t04_mirror/CreateMirror34Test_gold b/system/t04_mirror/CreateMirror34Test_gold new file mode 100644 index 00000000..291d2058 --- /dev/null +++ b/system/t04_mirror/CreateMirror34Test_gold @@ -0,0 +1,6 @@ +Downloading: http://repo.aptly.info/system-tests/developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/Release +Error (retrying): HTTP code 404 while fetching http://repo.aptly.info/system-tests/developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/Release +Retrying 0 http://repo.aptly.info/system-tests/developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/Release... +Download Error: http://repo.aptly.info/system-tests/developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/Release +Downloading: http://repo.aptly.info/system-tests/developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/InRelease +ERROR: unable to fetch mirror: no architectures found, please specify diff --git a/system/t04_mirror/CreateMirror35Test_gold b/system/t04_mirror/CreateMirror35Test_gold new file mode 100644 index 00000000..ae8e1c6d --- /dev/null +++ b/system/t04_mirror/CreateMirror35Test_gold @@ -0,0 +1,6 @@ +Downloading & parsing package files... +Applying filter... +Packages filtered: 4743 -> 81. +Building download queue... +Download queue: 81 items (3.00 GiB) + diff --git a/system/t04_mirror/CreateMirror35Test_mirror_show b/system/t04_mirror/CreateMirror35Test_mirror_show new file mode 100644 index 00000000..3ae1920a --- /dev/null +++ b/system/t04_mirror/CreateMirror35Test_mirror_show @@ -0,0 +1,17 @@ +Name: mirror35 +Archive Root URL: http://repo.aptly.info/system-tests/developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ +Distribution: ./ +Components: +Architectures: amd64 +Download Sources: no +Download .udebs: no +Filter: cuda-12-6 (= 12.6.2-1) +Filter With Deps: yes +Last update: never + +Information from release file: +Acquire-By-Hash: no +Architecture: x86_64 +Date: Mon, 04 Nov 2024 16:02:23 +0000 +Label: NVIDIA CUDA +Origin: NVIDIA diff --git a/system/t04_mirror/ListMirror6Test_gold b/system/t04_mirror/ListMirror6Test_gold index bed19fa2..18cfd1c3 100644 --- a/system/t04_mirror/ListMirror6Test_gold +++ b/system/t04_mirror/ListMirror6Test_gold @@ -126,7 +126,10 @@ "ArchiveRoot": "http://repo.aptly.info/system-tests/download.opensuse.org/repositories/Apache:/MirrorBrain/Debian_9.0/", "Distribution": "./", "Components": null, - "Architectures": null, + "Architectures": [ + "amd64", + "i386" + ], "Meta": { "Architectures": "i386 amd64", "Archive": "Debian_9.0", diff --git a/system/t04_mirror/create.py b/system/t04_mirror/create.py index ef3d80f6..ecf3b6d4 100644 --- a/system/t04_mirror/create.py +++ b/system/t04_mirror/create.py @@ -454,3 +454,38 @@ class CreateMirror33Test(BaseTest): def check(self): self.check_output() self.check_cmd_output("aptly mirror show mirror33", "mirror_show") + + +class CreateMirror34Test(BaseTest): + """ + create mirror error: flat repo with filter but no architectures in InRelease file + """ + configOverride = {"max-tries": 1} + runCmd = "aptly mirror create -ignore-signatures -filter \"cuda-12-6 (= 12.6.2-1)\" -filter-with-deps mirror34 http://repo.aptly.info/system-tests/developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ ./" + + +class CreateMirror35Test(BaseTest): + """ + create mirror: flat repo with filter but no architectures in InRelease file + """ + configOverride = {"max-tries": 1} + fixtureCmds = [ + "aptly mirror create -architectures amd64 -ignore-signatures -filter \"cuda-12-6 (= 12.6.2-1)\" -filter-with-deps mirror35 " + "http://repo.aptly.info/system-tests/developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ ./", + ] + runCmd = "aptly mirror update -ignore-signatures mirror35" + + # the downloading of the actual packages will return 404 since they don't exist. ignore the errors, the test verifies proper count of filtered packages + + def outputMatchPrepare(self, s): + s = re.sub(r'Downloading: .*\n', '', s, flags=re.MULTILINE) + s = re.sub(r'Download Error: .*\n', '', s, flags=re.MULTILINE) + s = re.sub(r'Retrying .*\n', '', s, flags=re.MULTILINE) + s = re.sub(r'Error \(retrying\): .*\n', '', s, flags=re.MULTILINE) + s = re.sub(r'HTTP code 404 while fetching .*\n', '', s, flags=re.MULTILINE) + s = re.sub(r'ERROR: unable to update: .*\n', '', s, flags=re.MULTILINE) + return s + + def check(self): + self.check_output() + self.check_cmd_output("aptly mirror show mirror35", "mirror_show")