@@ -24,7 +24,6 @@ import (
2424 "fmt"
2525 "github.com/blang/semver"
2626 "io"
27- "io/ioutil"
2827 "log"
2928 "net/http"
3029 "os"
@@ -165,7 +164,7 @@ func (a *amazonlinux2023) repos() []string {
165164}
166165
167166func (a * amazonlinux2023 ) baseUrl () string {
168- return "https://cdn.amazonlinux.com/al2023/core/mirrors/ "
167+ return "https://cdn.amazonlinux.com/al2023/core/mirrors"
169168}
170169
171170func (a * amazonlinux2023 ) ext () string {
@@ -211,9 +210,7 @@ func buildMirror(a amazonBuilder, r string, kv kernelrelease.KernelRelease) (str
211210 switch a .(type ) {
212211 case * amazonlinux :
213212 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 :
217214 baseURL = fmt .Sprintf ("%s/%s/%s" , a .baseUrl (), r , kv .Architecture .ToNonDeb ())
218215 default :
219216 return "" , fmt .Errorf ("unsupported target" )
@@ -240,87 +237,89 @@ func fetchAmazonLinuxPackagesURLs(a amazonBuilder, kv kernelrelease.KernelReleas
240237 visited := make (map [string ]struct {})
241238
242239 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+ }
254245
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 ()
276252
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 {}{}
281274
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 )
317276 if err != nil {
318- log . Fatal ( err )
277+ return err
319278 }
320- urls = append (urls , fmt .Sprintf ("%s/%s" , repo , href ))
321- }
322279
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 {
324323 return nil , err
325324 }
326325
0 commit comments