@@ -230,6 +230,14 @@ func (chrootBuilder *ChrootBuilder) GetChrootEnvPackageList() ([]string, error)
230230 return pkgList , nil
231231}
232232
233+ // chrootenvPkgCacheDir returns the isolated subdirectory used to download and install
234+ // the chroot-build packages (e.g. mmdebstrap, grub). Keeping it separate from
235+ // ChrootPkgCacheDir (the image-package cache) prevents the stale-cache check from
236+ // wiping the image packages when the two package sets do not overlap.
237+ func (chrootBuilder * ChrootBuilder ) chrootenvPkgCacheDir () string {
238+ return filepath .Join (chrootBuilder .ChrootPkgCacheDir , "chrootenv" )
239+ }
240+
233241func (chrootBuilder * ChrootBuilder ) downloadChrootEnvPackages () ([]string , []string , error ) {
234242 var pkgsList []string
235243 var allPkgsList []string
@@ -245,23 +253,24 @@ func (chrootBuilder *ChrootBuilder) downloadChrootEnvPackages() ([]string, []str
245253 }
246254 pkgsList = append (essentialPkgsList , pkgsList ... )
247255
248- if _ , err := os .Stat (chrootBuilder .ChrootPkgCacheDir ); os .IsNotExist (err ) {
249- if err := os .MkdirAll (chrootBuilder .ChrootPkgCacheDir , 0700 ); err != nil {
256+ downloadDir := chrootBuilder .chrootenvPkgCacheDir ()
257+ if _ , err := os .Stat (downloadDir ); os .IsNotExist (err ) {
258+ if err := os .MkdirAll (downloadDir , 0700 ); err != nil {
250259 log .Errorf ("Failed to create chroot package cache directory: %v" , err )
251260 return pkgsList , allPkgsList , fmt .Errorf ("failed to create chroot package cache directory: %w" , err )
252261 }
253262 }
254263
255- dotFilePath := filepath .Join (chrootBuilder . ChrootPkgCacheDir , "chrootpkgs.dot" )
264+ dotFilePath := filepath .Join (downloadDir , "chrootpkgs.dot" )
256265
257266 if pkgType == "rpm" {
258- allPkgsList , err = rpmutils .DownloadPackages (pkgsList , chrootBuilder . ChrootPkgCacheDir , dotFilePath , nil , false )
267+ allPkgsList , err = rpmutils .DownloadPackages (pkgsList , downloadDir , dotFilePath , nil , false )
259268 if err != nil {
260269 return pkgsList , allPkgsList , fmt .Errorf ("failed to download chroot environment packages: %w" , err )
261270 }
262271 return pkgsList , allPkgsList , nil
263272 } else if pkgType == "deb" {
264- allPkgsList , err = debutils .DownloadPackages (pkgsList , chrootBuilder . ChrootPkgCacheDir , dotFilePath , nil , false )
273+ allPkgsList , err = debutils .DownloadPackages (pkgsList , downloadDir , dotFilePath , nil , false )
265274 if err != nil {
266275 return pkgsList , allPkgsList , fmt .Errorf ("failed to download chroot environment packages: %w" , err )
267276 }
@@ -294,19 +303,21 @@ func (chrootBuilder *ChrootBuilder) BuildChrootEnv(targetOs string, targetDist s
294303 }
295304 log .Infof ("Downloaded %d packages for chroot environment" , len (allPkgsList ))
296305
297- chrootPkgCacheDir := chrootBuilder .GetChrootPkgCacheDir ()
306+ // Use the isolated chrootenv download dir (not the shared image-package cache dir)
307+ // so that UpdateLocalDebRepo and InstallDebPkg operate on the chrootenv-specific packages.
308+ chrootenvDir := chrootBuilder .chrootenvPkgCacheDir ()
298309 if pkgType == "rpm" {
299310 if err := chrootBuilder .RpmInstaller .InstallRpmPkg (targetOs , chrootEnvPath ,
300- chrootPkgCacheDir , allPkgsList ); err != nil {
311+ chrootenvDir , allPkgsList ); err != nil {
301312 return fmt .Errorf ("failed to install packages in chroot environment: %w" , err )
302313 }
303314 } else if pkgType == "deb" {
304- if err = chrootBuilder .DebInstaller .UpdateLocalDebRepo (chrootPkgCacheDir , targetArch , false ); err != nil {
315+ if err = chrootBuilder .DebInstaller .UpdateLocalDebRepo (chrootenvDir , targetArch , false ); err != nil {
305316 return fmt .Errorf ("failed to create debian local repository: %w" , err )
306317 }
307318
308319 if err := chrootBuilder .DebInstaller .InstallDebPkg (chrootBuilder .TargetOsConfigDir ,
309- chrootEnvPath , chrootPkgCacheDir , pkgsList ); err != nil {
320+ chrootEnvPath , chrootenvDir , pkgsList ); err != nil {
310321 return fmt .Errorf ("failed to install packages in chroot environment: %w" , err )
311322 }
312323 } else {
0 commit comments