diff --git a/main.go b/main.go index eb1b7ed..ce6552a 100644 --- a/main.go +++ b/main.go @@ -492,8 +492,13 @@ func (b *BuildManager) syncWorker() { // fetch updates between sync runs b.alpmMutex.Lock() check(alpmHandle.Release()) - setupChroot() - var err error + err := setupChroot() + for err != nil { + log.Warningf("Unable to upgrade chroot, trying again later.") + time.Sleep(time.Minute) + err = setupChroot() + } + alpmHandle, err = initALPM(filepath.Join(conf.Basedir.Chroot, pristineChroot), filepath.Join(conf.Basedir.Chroot, pristineChroot, "/var/lib/pacman")) check(err) b.alpmMutex.Unlock() @@ -614,7 +619,10 @@ func main() { exit: false, } - setupChroot() + err = setupChroot() + if err != nil { + log.Fatalf("Unable to setup chroot: %v", err) + } syncMarchs() alpmHandle, err = initALPM(filepath.Join(conf.Basedir.Chroot, pristineChroot), filepath.Join(conf.Basedir.Chroot, pristineChroot, "/var/lib/pacman")) diff --git a/utils.go b/utils.go index b707fec..a3a1093 100644 --- a/utils.go +++ b/utils.go @@ -423,14 +423,14 @@ func genSRCINFO(pkgbuild string) (*srcinfo.Srcinfo, error) { return info, nil } -func setupChroot() { +func setupChroot() error { if _, err := os.Stat(filepath.Join(conf.Basedir.Chroot, pristineChroot)); err == nil { //goland:noinspection SpellCheckingInspection cmd := exec.Command("arch-nspawn", filepath.Join(conf.Basedir.Chroot, pristineChroot), "pacman", "-Syuu", "--noconfirm") res, err := cmd.CombinedOutput() log.Debug(string(res)) if err != nil { - log.Fatalf("[NSPAWN] Unable to update chroot: %v\n%s", err, string(res)) + return fmt.Errorf("Unable to update chroot: %v\n%s", err, string(res)) } } else if os.IsNotExist(err) { err := os.MkdirAll(conf.Basedir.Chroot, os.ModePerm) @@ -440,11 +440,12 @@ func setupChroot() { res, err := cmd.CombinedOutput() log.Debug(string(res)) if err != nil { - log.Fatalf("[MKCHROOT] Unable to create chroot: %v\n%s", err, string(res)) + return fmt.Errorf("Unable to create chroot: %v\n%s", err, string(res)) } } else { - check(err) + return err } + return nil } func getDBPkgFromPkgfile(pkg string) (*ent.DbPackage, error) {