added multilib support
This commit is contained in:
parent
7b0cf88367
commit
43db75f1f9
|
@ -137,8 +137,9 @@ type Repository string
|
|||
|
||||
// Repository values.
|
||||
const (
|
||||
RepositoryExtra Repository = "extra"
|
||||
RepositoryCore Repository = "core"
|
||||
RepositoryExtra Repository = "extra"
|
||||
RepositoryCore Repository = "core"
|
||||
RepositoryMultilib Repository = "multilib"
|
||||
)
|
||||
|
||||
func (r Repository) String() string {
|
||||
|
@ -148,7 +149,7 @@ func (r Repository) String() string {
|
|||
// RepositoryValidator is a validator for the "repository" field enum values. It is called by the builders before save.
|
||||
func RepositoryValidator(r Repository) error {
|
||||
switch r {
|
||||
case RepositoryExtra, RepositoryCore:
|
||||
case RepositoryExtra, RepositoryCore, RepositoryMultilib:
|
||||
return nil
|
||||
default:
|
||||
return fmt.Errorf("dbpackage: invalid enum value for repository field: %q", r)
|
||||
|
|
|
@ -15,7 +15,7 @@ var (
|
|||
{Name: "packages", Type: field.TypeJSON, Nullable: true},
|
||||
{Name: "status", Type: field.TypeEnum, Nullable: true, Enums: []string{"skipped", "failed", "build", "queued", "delayed", "building", "latest", "signing", "unknown"}, Default: "unknown"},
|
||||
{Name: "skip_reason", Type: field.TypeString, Nullable: true},
|
||||
{Name: "repository", Type: field.TypeEnum, Enums: []string{"extra", "core"}},
|
||||
{Name: "repository", Type: field.TypeEnum, Enums: []string{"extra", "core", "multilib"}},
|
||||
{Name: "march", Type: field.TypeString},
|
||||
{Name: "version", Type: field.TypeString, Nullable: true},
|
||||
{Name: "repo_version", Type: field.TypeString, Nullable: true},
|
||||
|
|
|
@ -18,7 +18,7 @@ func (DBPackage) Fields() []ent.Field {
|
|||
field.Enum("status").Values("skipped", "failed", "build", "queued", "delayed", "building",
|
||||
"latest", "signing", "unknown").Default("unknown").Optional(),
|
||||
field.String("skip_reason").Optional(),
|
||||
field.Enum("repository").Values("extra", "core"),
|
||||
field.Enum("repository").Values("extra", "core", "multilib"),
|
||||
field.String("march").NotEmpty().Immutable(),
|
||||
field.String("version").Optional(),
|
||||
field.String("repo_version").Optional(),
|
||||
|
|
2
go.sum
2
go.sum
|
@ -43,7 +43,6 @@ github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
|
|||
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/hashicorp/hcl/v2 v2.16.2 h1:mpkHZh/Tv+xet3sy3F9Ld4FyI2tUpWe9x3XtPx9f1a0=
|
||||
github.com/hashicorp/hcl/v2 v2.16.2/go.mod h1:JRmR89jycNkrrqnMmvPDMd56n1rQJ2Q6KocSLCMCXng=
|
||||
github.com/jackc/chunkreader v1.0.0 h1:4s39bBR8ByfqH+DKm8rQA3E1LHZWB9XWcrz8fqaZbe0=
|
||||
github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo=
|
||||
github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk=
|
||||
github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8=
|
||||
|
@ -64,7 +63,6 @@ github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65 h1:DadwsjnMwFjfWc9y5W
|
|||
github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65/go.mod h1:5R2h2EEX+qri8jOWMbJCtaPWkrrNc7OHwsp2TCqp7ak=
|
||||
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
|
||||
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
|
||||
github.com/jackc/pgproto3 v1.1.0 h1:FYYE4yRw+AgI8wXIinMlNjBbp/UitDJwfj5LqqewP1A=
|
||||
github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78=
|
||||
github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA=
|
||||
github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg=
|
||||
|
|
|
@ -107,7 +107,7 @@ func housekeeping(repo, march string, wg *sync.WaitGroup) error {
|
|||
return err
|
||||
}
|
||||
|
||||
log.Debugf("[HK/%s] checking %d existing package-files", fullRepo, len(dbPackages))
|
||||
log.Debugf("[HK/%s] checking %d packages from database", fullRepo, len(dbPackages))
|
||||
|
||||
for _, dbPkg := range dbPackages {
|
||||
pkg := &ProtoPackage{
|
||||
|
|
|
@ -454,7 +454,6 @@ func (p *ProtoPackage) isAvailable(h *alpm.Handle) bool {
|
|||
cmd := exec.Command("unbuffer", "pacsift", "--exact", "--base="+p.Pkgbase, "--repo="+p.Repo.String())
|
||||
var res []byte
|
||||
res, err = cmd.CombinedOutput()
|
||||
log.Debug(string(res))
|
||||
if err != nil {
|
||||
log.Warningf("error getting packages from pacsift for %s: %v", p.Pkgbase, err)
|
||||
buildManager.alpmMutex.Unlock()
|
||||
|
@ -465,8 +464,17 @@ func (p *ProtoPackage) isAvailable(h *alpm.Handle) bool {
|
|||
}
|
||||
|
||||
if len(strings.Split(strings.TrimSpace(string(res)), "\n")) > 0 {
|
||||
splitOut := strings.Split(strings.Split(strings.TrimSpace(string(res)), "\n")[0], "/")
|
||||
pkg, err = dbs.FindSatisfier(splitOut[1])
|
||||
pacsiftLines := strings.Split(strings.TrimSpace(string(res)), "\n")
|
||||
|
||||
var splitPkgs []string
|
||||
for _, line := range pacsiftLines {
|
||||
splitPkgs = append(splitPkgs, strings.Split(line, "/")[1])
|
||||
}
|
||||
|
||||
if p.DBPackage != nil {
|
||||
p.DBPackage = p.DBPackage.Update().SetPackages(splitPkgs).SaveX(context.Background())
|
||||
}
|
||||
pkg, err = dbs.FindSatisfier(splitPkgs[0])
|
||||
} else {
|
||||
log.Warningf("error getting packages from pacsift for %s", p.Pkgbase)
|
||||
buildManager.alpmMutex.Unlock()
|
||||
|
|
27
utils.go
27
utils.go
|
@ -20,7 +20,7 @@ import (
|
|||
)
|
||||
|
||||
const (
|
||||
pacmanConf = "/usr/share/devtools/pacman.conf.d/extra.conf"
|
||||
pacmanConf = "/usr/share/devtools/pacman.conf.d/multilib.conf"
|
||||
makepkgConf = "/usr/share/devtools/makepkg.conf.d/x86_64.conf"
|
||||
logDir = "logs"
|
||||
pristineChroot = "root"
|
||||
|
@ -317,12 +317,12 @@ func initALPM(root, dbpath string) (*alpm.Handle, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
PacmanConfig, _, err := paconf.ParseFile(filepath.Join(root, "/etc/pacman.conf"))
|
||||
pacmanConfig, _, err := paconf.ParseFile(pacmanConf)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, repo := range PacmanConfig.Repos {
|
||||
for _, repo := range pacmanConfig.Repos {
|
||||
db, err := h.RegisterSyncDB(repo.Name, 0)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -355,7 +355,7 @@ func setupChroot() error {
|
|||
_, err := os.Stat(filepath.Join(conf.Basedir.Work, chrootDir, pristineChroot))
|
||||
switch {
|
||||
case err == nil:
|
||||
cmd := exec.Command("arch-nspawn", filepath.Join(conf.Basedir.Work, chrootDir, pristineChroot), //nolint:gosec
|
||||
cmd := exec.Command("arch-nspawn", "-C", pacmanConf, filepath.Join(conf.Basedir.Work, chrootDir, pristineChroot), //nolint:gosec
|
||||
"pacman", "-Syuu", "--noconfirm")
|
||||
res, err := cmd.CombinedOutput()
|
||||
log.Debug(string(res))
|
||||
|
@ -367,13 +367,20 @@ func setupChroot() error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
cmd := exec.Command("mkarchroot", "-C", pacmanConf, //nolint:gosec
|
||||
filepath.Join(conf.Basedir.Work, chrootDir, pristineChroot), "base-devel")
|
||||
cmd := exec.Command("mkarchroot", "-C", pacmanConf, "-M", makepkgConf, //nolint:gosec
|
||||
filepath.Join(conf.Basedir.Work, chrootDir, pristineChroot), "base-devel", "multilib-devel")
|
||||
res, err := cmd.CombinedOutput()
|
||||
log.Debug(string(res))
|
||||
if err != nil {
|
||||
return fmt.Errorf("error creating chroot: %w\n%s", err, string(res))
|
||||
}
|
||||
|
||||
cmd = exec.Command("sudo", "cp", pacmanConf, filepath.Join(conf.Basedir.Work, chrootDir, pristineChroot, "etc/pacman.conf")) //nolint:gosec
|
||||
res, err = cmd.CombinedOutput()
|
||||
log.Debug(string(res))
|
||||
if err != nil {
|
||||
return fmt.Errorf("error copying pacman.conf to chroot: %w\n%s", err, string(res))
|
||||
}
|
||||
default:
|
||||
return err
|
||||
}
|
||||
|
@ -406,7 +413,7 @@ func syncMarchs() error {
|
|||
for _, march := range conf.March {
|
||||
err := setupMakepkg(march, flagCfg)
|
||||
if err != nil {
|
||||
log.Fatalf("Can't generate makepkg for %s: %v", march, err)
|
||||
log.Fatalf("error generating makepkg for %s: %v", march, err)
|
||||
}
|
||||
|
||||
for _, repo := range conf.Repos {
|
||||
|
@ -417,7 +424,7 @@ func syncMarchs() error {
|
|||
go buildManager.repoWorker(fRepo)
|
||||
|
||||
if _, err := os.Stat(filepath.Join(conf.Basedir.Repo, fRepo, "os", conf.Arch)); os.IsNotExist(err) {
|
||||
log.Debugf("Creating path %s", filepath.Join(conf.Basedir.Repo, fRepo, "os", conf.Arch))
|
||||
log.Debugf("creating path %s", filepath.Join(conf.Basedir.Repo, fRepo, "os", conf.Arch))
|
||||
err = os.MkdirAll(filepath.Join(conf.Basedir.Repo, fRepo, "os", conf.Arch), 0o755)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -430,10 +437,10 @@ func syncMarchs() error {
|
|||
}
|
||||
}
|
||||
|
||||
log.Infof("Repos: %s", repos)
|
||||
log.Infof("repos: %s", repos)
|
||||
|
||||
for _, repo := range eRepos {
|
||||
log.Infof("Removing old repo %s", repo)
|
||||
log.Infof("removing old repo %s", repo)
|
||||
err = os.RemoveAll(filepath.Join(conf.Basedir.Repo, repo))
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
Loading…
Reference in New Issue