@@ -24,7 +24,6 @@ import (
24
24
"fmt"
25
25
"github.com/blang/semver"
26
26
"io"
27
- "io/ioutil"
28
27
"log"
29
28
"net/http"
30
29
"os"
@@ -165,7 +164,7 @@ func (a *amazonlinux2023) repos() []string {
165
164
}
166
165
167
166
func (a * amazonlinux2023 ) baseUrl () string {
168
- return "https://cdn.amazonlinux.com/al2023/core/mirrors/ "
167
+ return "https://cdn.amazonlinux.com/al2023/core/mirrors"
169
168
}
170
169
171
170
func (a * amazonlinux2023 ) ext () string {
@@ -211,9 +210,7 @@ func buildMirror(a amazonBuilder, r string, kv kernelrelease.KernelRelease) (str
211
210
switch a .(type ) {
212
211
case * amazonlinux :
213
212
baseURL = fmt .Sprintf ("%s/%s" , a .baseUrl (), r )
214
- case * amazonlinux2 :
215
- baseURL = fmt .Sprintf ("%s/%s/%s" , a .baseUrl (), r , kv .Architecture .ToNonDeb ())
216
- case * amazonlinux2022 :
213
+ case * amazonlinux2 , * amazonlinux2022 , * amazonlinux2023 :
217
214
baseURL = fmt .Sprintf ("%s/%s/%s" , a .baseUrl (), r , kv .Architecture .ToNonDeb ())
218
215
default :
219
216
return "" , fmt .Errorf ("unsupported target" )
@@ -240,87 +237,89 @@ func fetchAmazonLinuxPackagesURLs(a amazonBuilder, kv kernelrelease.KernelReleas
240
237
visited := make (map [string ]struct {})
241
238
242
239
for _ , v := range a .repos () {
243
- mirror , err := buildMirror (a , v , kv )
244
- if err != nil {
245
- return nil , err
246
- }
247
-
248
- // Obtain the repo URL by getting mirror URL content
249
- mirrorRes , err := http .Get (mirror )
250
- if err != nil {
251
- return nil , err
252
- }
253
- defer mirrorRes .Body .Close ()
240
+ err := func () error {
241
+ mirror , err := buildMirror (a , v , kv )
242
+ if err != nil {
243
+ return err
244
+ }
254
245
255
- var repo string
256
- scanner := bufio .NewScanner (mirrorRes .Body )
257
- if scanner .Scan () {
258
- repo = scanner .Text ()
259
- }
260
- if repo == "" {
261
- return nil , fmt .Errorf ("repository not found" )
262
- }
263
- repo = strings .ReplaceAll (strings .TrimSuffix (repo , "\n " ), "$basearch" , kv .Architecture .ToNonDeb ())
264
- repo = strings .TrimSuffix (repo , "/" )
265
- repoDatabaseURL := fmt .Sprintf ("%s/repodata/primary.sqlite.%s" , repo , a .ext ())
266
- if _ , ok := visited [repoDatabaseURL ]; ok {
267
- continue
268
- }
269
- // Download the repo database
270
- repoRes , err := http .Get (repoDatabaseURL )
271
- if err != nil {
272
- return nil , err
273
- }
274
- defer repoRes .Body .Close ()
275
- visited [repoDatabaseURL ] = struct {}{}
246
+ // Obtain the repo URL by getting mirror URL content
247
+ mirrorRes , err := http .Get (mirror )
248
+ if err != nil {
249
+ return err
250
+ }
251
+ defer mirrorRes .Body .Close ()
276
252
277
- unzip , err := unzipFuncFromBuilder (a )
278
- if err != nil {
279
- return nil , err
280
- }
253
+ var repo string
254
+ scanner := bufio .NewScanner (mirrorRes .Body )
255
+ if scanner .Scan () {
256
+ repo = scanner .Text ()
257
+ }
258
+ if repo == "" {
259
+ return fmt .Errorf ("repository not found" )
260
+ }
261
+ repo = strings .ReplaceAll (strings .TrimSuffix (repo , "\n " ), "$basearch" , kv .Architecture .ToNonDeb ())
262
+ repo = strings .TrimSuffix (repo , "/" )
263
+ repoDatabaseURL := fmt .Sprintf ("%s/repodata/primary.sqlite.%s" , repo , a .ext ())
264
+ if _ , ok := visited [repoDatabaseURL ]; ok {
265
+ return nil
266
+ }
267
+ // Download the repo database
268
+ repoRes , err := http .Get (repoDatabaseURL )
269
+ if err != nil {
270
+ return err
271
+ }
272
+ defer repoRes .Body .Close ()
273
+ visited [repoDatabaseURL ] = struct {}{}
281
274
282
- dbBytes , err := unzip (repoRes .Body )
283
- if err != nil {
284
- return nil , err
285
- }
286
- // Create the temporary database file
287
- dbFile , err := ioutil .TempFile (os .TempDir (), fmt .Sprintf ("%s-*.sqlite" , a .Name ()))
288
- if err != nil {
289
- return nil , err
290
- }
291
- defer os .Remove (dbFile .Name ())
292
- if _ , err := dbFile .Write (dbBytes ); err != nil {
293
- return nil , err
294
- }
295
- // Open the database
296
- db , err := sql .Open ("sqlite" , dbFile .Name ())
297
- if err != nil {
298
- return nil , err
299
- }
300
- defer db .Close ()
301
- // Query the database
302
- rel := strings .TrimPrefix (strings .TrimSuffix (kv .FullExtraversion , fmt .Sprintf (".%s" , kv .Architecture .ToNonDeb ())), "-" )
303
- q := fmt .Sprintf ("SELECT location_href FROM packages WHERE name LIKE 'kernel-devel%%' AND version='%s' AND release='%s'" , kv .Fullversion , rel )
304
- stmt , err := db .Prepare (q )
305
- if err != nil {
306
- return nil , err
307
- }
308
- defer stmt .Close ()
309
- rows , err := stmt .Query ()
310
- if err != nil {
311
- return nil , err
312
- }
313
- defer rows .Close ()
314
- for rows .Next () {
315
- var href string
316
- err = rows .Scan (& href )
275
+ unzip , err := unzipFuncFromBuilder (a )
317
276
if err != nil {
318
- log . Fatal ( err )
277
+ return err
319
278
}
320
- urls = append (urls , fmt .Sprintf ("%s/%s" , repo , href ))
321
- }
322
279
323
- if err := dbFile .Close (); err != nil {
280
+ dbBytes , err := unzip (repoRes .Body )
281
+ if err != nil {
282
+ return err
283
+ }
284
+ // Create the temporary database file
285
+ dbFile , err := os .CreateTemp (os .TempDir (), fmt .Sprintf ("%s-*.sqlite" , a .Name ()))
286
+ if err != nil {
287
+ return err
288
+ }
289
+ defer os .Remove (dbFile .Name ())
290
+ if _ , err := dbFile .Write (dbBytes ); err != nil {
291
+ return err
292
+ }
293
+ // Open the database
294
+ db , err := sql .Open ("sqlite" , dbFile .Name ())
295
+ if err != nil {
296
+ return err
297
+ }
298
+ defer db .Close ()
299
+ // Query the database
300
+ rel := strings .TrimPrefix (strings .TrimSuffix (kv .FullExtraversion , fmt .Sprintf (".%s" , kv .Architecture .ToNonDeb ())), "-" )
301
+ q := fmt .Sprintf ("SELECT location_href FROM packages WHERE name LIKE 'kernel-devel%%' AND version='%s' AND release='%s'" , kv .Fullversion , rel )
302
+ stmt , err := db .Prepare (q )
303
+ if err != nil {
304
+ return err
305
+ }
306
+ defer stmt .Close ()
307
+ rows , err := stmt .Query ()
308
+ if err != nil {
309
+ return err
310
+ }
311
+ defer rows .Close ()
312
+ for rows .Next () {
313
+ var href string
314
+ err = rows .Scan (& href )
315
+ if err != nil {
316
+ log .Fatal (err )
317
+ }
318
+ urls = append (urls , fmt .Sprintf ("%s/%s" , repo , href ))
319
+ }
320
+ return dbFile .Close ()
321
+ }()
322
+ if err != nil {
324
323
return nil , err
325
324
}
326
325
0 commit comments