added multilib support

This commit is contained in:
Giovanni Harting 2023-05-26 12:59:59 +02:00
parent 7b0cf88367
commit 43db75f1f9
7 changed files with 35 additions and 21 deletions

View File

@ -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)

View File

@ -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},

View File

@ -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
View File

@ -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=

View File

@ -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{

View File

@ -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()

View File

@ -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