forked from rosa/hakurei
Compare commits
37 Commits
wip-azalea
...
staging
| Author | SHA1 | Date | |
|---|---|---|---|
|
f4215ddda5
|
|||
|
652b4c2ba0
|
|||
|
75715f4590
|
|||
|
87c3b3663d
|
|||
|
6d792023b2
|
|||
|
3e62cf379f
|
|||
|
6d991f2644
|
|||
|
a2cc28f53c
|
|||
|
598c7aa30f
|
|||
|
b18f40d974
|
|||
|
12a6061051
|
|||
|
02c3823ed7
|
|||
|
cfbd8bd6f1
|
|||
|
fc7a339ed2
|
|||
|
97fdd5db8b
|
|||
|
a5d9f76f50
|
|||
|
b313dfefb0
|
|||
|
5b32297178
|
|||
|
32cc72821e
|
|||
|
958473e6f4
|
|||
|
cc52bb3035
|
|||
|
7816f8b523
|
|||
|
91e4229e32
|
|||
|
c346cb4c57
|
|||
|
0e0d5e8def
|
|||
|
ea875416d4
|
|||
|
8c7109a2d5
|
|||
|
caf3e0db4b
|
|||
|
12b9f51128
|
|||
|
d15f965d0c
|
|||
|
fadd1b14f7
|
|||
|
3458806685
|
|||
|
8ca70550ab
|
|||
|
7eebf49b98
|
|||
|
8c84883af6
|
|||
|
4e1359aa95
|
|||
|
a3867ad65f
|
3
.gitignore
vendored
3
.gitignore
vendored
@@ -13,3 +13,6 @@
|
||||
|
||||
# cmd/dist default destination
|
||||
/dist
|
||||
|
||||
# local packages
|
||||
/internal/rosa/package/local
|
||||
|
||||
@@ -5,17 +5,91 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/rand"
|
||||
"log"
|
||||
"os"
|
||||
"os/signal"
|
||||
"runtime"
|
||||
"runtime/pprof"
|
||||
"slices"
|
||||
"strings"
|
||||
. "syscall"
|
||||
|
||||
"hakurei.app/internal/kobject"
|
||||
"hakurei.app/internal/report"
|
||||
"hakurei.app/internal/uevent"
|
||||
"hakurei.app/message"
|
||||
)
|
||||
|
||||
var r report.Reporter
|
||||
|
||||
func init() {
|
||||
log.SetFlags(0)
|
||||
log.SetPrefix("earlyinit: ")
|
||||
r.SetOutput(log.Default())
|
||||
|
||||
// this handles SIGQUIT to provide useful debugging information without
|
||||
// terminating, and prevents the runtime from throwing on the must family
|
||||
// of early error reporting functions, DO NOT REMOVE
|
||||
c := make(chan os.Signal, 1)
|
||||
signal.Notify(c, SIGQUIT)
|
||||
go func() {
|
||||
for {
|
||||
<-c
|
||||
if p := pprof.Lookup("goroutine"); p == nil {
|
||||
log.Println("initial built-in goroutine profile does not exist")
|
||||
} else if err := p.WriteTo(os.Stderr, 2); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
// fatal calls [log.Println] with v and blocks forever. Must be called from
|
||||
// main. Must not be used after error reporting is set up.
|
||||
func fatal(v ...any) {
|
||||
log.Println(v...)
|
||||
log.Println("unable to continue, please reboot and resolve the problem manually")
|
||||
select {}
|
||||
}
|
||||
|
||||
// must calls fatal with err if it is non-nil.
|
||||
func must(err error) {
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
select {}
|
||||
}
|
||||
}
|
||||
|
||||
// mustSyscall is like must, but with an additional action name.
|
||||
func mustSyscall(action string, err error) {
|
||||
if err != nil {
|
||||
fatal("cannot "+action+":", err)
|
||||
select {}
|
||||
}
|
||||
}
|
||||
|
||||
// must1 is like must, but with an additional passed through value.
|
||||
func must1[T any](v T, err error) T {
|
||||
must(err)
|
||||
return v
|
||||
}
|
||||
|
||||
const (
|
||||
// optionSystem specifies devpath of the system device.
|
||||
optionSystem = "system"
|
||||
|
||||
// flagVerbose increases output verbosity.
|
||||
flagVerbose = "verbose"
|
||||
// flagStrict sets [report.DStrict] on r.
|
||||
flagStrict = "strict"
|
||||
// flagNoRecover sets [report.DNoRecover] on r.
|
||||
flagNoRecover = "no_recover"
|
||||
)
|
||||
|
||||
func main() {
|
||||
runtime.LockOSThread()
|
||||
log.SetFlags(0)
|
||||
log.SetPrefix("earlyinit: ")
|
||||
|
||||
var (
|
||||
option map[string]string
|
||||
@@ -33,15 +107,44 @@ func main() {
|
||||
}
|
||||
}
|
||||
|
||||
if err := Mount(
|
||||
{
|
||||
var flag uint64
|
||||
if slices.Contains(flags, flagStrict) {
|
||||
flag |= report.DStrict
|
||||
}
|
||||
if slices.Contains(flags, flagNoRecover) {
|
||||
flag |= report.DNoRecover
|
||||
}
|
||||
log.Printf("reporting flags %x", flag)
|
||||
r.SetFlags(flag)
|
||||
}
|
||||
|
||||
msg := message.New(log.Default())
|
||||
msg.SwapVerbose(slices.Contains(flags, flagVerbose))
|
||||
|
||||
mustSyscall("mount devtmpfs", Mount(
|
||||
"devtmpfs",
|
||||
"/dev/",
|
||||
"devtmpfs",
|
||||
MS_NOSUID|MS_NOEXEC,
|
||||
"",
|
||||
); err != nil {
|
||||
log.Fatalf("cannot mount devtmpfs: %v", err)
|
||||
}
|
||||
))
|
||||
must(os.Mkdir("/dev/pts/", 0))
|
||||
mustSyscall("mount devpts", Mount(
|
||||
"devpts",
|
||||
"/dev/pts/",
|
||||
"devpts",
|
||||
MS_NOSUID|MS_NOEXEC,
|
||||
"mode=620,ptmxmode=666",
|
||||
))
|
||||
must(os.Mkdir("/dev/shm/", 0))
|
||||
mustSyscall("mount shm", Mount(
|
||||
"shm",
|
||||
"/dev/shm/",
|
||||
"tmpfs",
|
||||
MS_NOSUID|MS_NODEV,
|
||||
"",
|
||||
))
|
||||
|
||||
// The kernel might be unable to set up the console. When that happens,
|
||||
// printk is called with "Warning: unable to open an initial console."
|
||||
@@ -98,6 +201,49 @@ func main() {
|
||||
"",
|
||||
))
|
||||
|
||||
conn := must1(uevent.Dial(-128 * 1024 * 1024))
|
||||
events := make(chan *uevent.Message, 1<<10)
|
||||
var uuid uevent.UUID
|
||||
must1(rand.Read(uuid[:]))
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
|
||||
go consume(ctx, msg, &r, conn, uuid, events)
|
||||
s := kobject.New(uuid, func(o *kobject.Object, env map[string]string) {
|
||||
p := make([]string, 0, len(env))
|
||||
for k, v := range env {
|
||||
p = append(p, k+"="+v)
|
||||
}
|
||||
slices.Sort(p)
|
||||
log.Printf("change %s: %s", o.DevPath, strings.Join(p, ", "))
|
||||
}, func(err error) {
|
||||
severity := report.Inconsistent
|
||||
if e, ok := err.(kobject.EventError); ok && e.Kind == kobject.EBadTarget {
|
||||
severity = report.Trivial
|
||||
}
|
||||
r.Dispatch(
|
||||
severity,
|
||||
"processed inconsistent uevent",
|
||||
err,
|
||||
)
|
||||
})
|
||||
go func() {
|
||||
s.Consume(ctx, events)
|
||||
|
||||
log.Println("closing NETLINK_KOBJECT_UEVENT socket")
|
||||
cancel()
|
||||
if err := conn.Close(); err != nil {
|
||||
log.Fatal(err) // not reached
|
||||
}
|
||||
}()
|
||||
|
||||
must(os.Mkdir("/system", 0))
|
||||
if devpath := option[optionSystem]; devpath == "" {
|
||||
fatal("system must be nonempty")
|
||||
} else {
|
||||
log.Printf("waiting for devpath pattern %q", devpath)
|
||||
mustMountSystem(ctx, s, devpath)
|
||||
}
|
||||
|
||||
// after top level has been set up
|
||||
mustSyscall("remount root", Mount(
|
||||
"",
|
||||
@@ -113,19 +259,6 @@ func main() {
|
||||
[]byte("/system/lib/firmware"),
|
||||
0,
|
||||
))
|
||||
go dispatchModprobe(ctx, s)
|
||||
|
||||
}
|
||||
|
||||
// mustSyscall calls [log.Fatalln] if err is non-nil.
|
||||
func mustSyscall(action string, err error) {
|
||||
if err != nil {
|
||||
log.Fatalln("cannot "+action+":", err)
|
||||
}
|
||||
}
|
||||
|
||||
// must calls [log.Fatal] with err if it is non-nil.
|
||||
func must(err error) {
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
73
cmd/earlyinit/modprobe.go
Normal file
73
cmd/earlyinit/modprobe.go
Normal file
@@ -0,0 +1,73 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log"
|
||||
"os/exec"
|
||||
"strings"
|
||||
|
||||
"hakurei.app/internal/kobject"
|
||||
"hakurei.app/internal/report"
|
||||
"hakurei.app/internal/uevent"
|
||||
)
|
||||
|
||||
// ModprobeError describes an unsuccessful modprobe invocation.
|
||||
type ModprobeError struct {
|
||||
ModAlias string `json:"modalias"`
|
||||
Stdout string `json:"stdout"`
|
||||
Stderr string `json:"stderr"`
|
||||
ExitCode int `json:"exit_code"`
|
||||
}
|
||||
|
||||
var _ report.RepresentableError = ModprobeError{}
|
||||
|
||||
func (ModprobeError) Representable() {}
|
||||
func (e ModprobeError) Error() string {
|
||||
return fmt.Sprintf(
|
||||
"modprobe exit status %d: %s",
|
||||
e.ExitCode, strings.TrimSpace(e.Stderr),
|
||||
)
|
||||
}
|
||||
|
||||
// dispatchModprobe invokes modprobe for [uevent.KOBJ_ADD] events raising new
|
||||
// MODALIAS strings.
|
||||
func dispatchModprobe(
|
||||
ctx context.Context,
|
||||
s *kobject.State,
|
||||
) {
|
||||
aliases := make(chan string, 1<<8)
|
||||
go func() {
|
||||
defer close(aliases)
|
||||
s.Range(ctx, func(o *kobject.Object, act uevent.KobjectAction) bool {
|
||||
if act == uevent.KOBJ_ADD && o.Driver == "" && o.ModAlias != "" {
|
||||
aliases <- o.ModAlias
|
||||
}
|
||||
return true
|
||||
})
|
||||
}()
|
||||
|
||||
for alias := range aliases {
|
||||
stdout, err := exec.Command("/system/sbin/modprobe", alias).Output()
|
||||
if err == nil {
|
||||
if len(stdout) > 0 {
|
||||
log.Println(string(stdout))
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
var exitError *exec.ExitError
|
||||
if !errors.As(err, &exitError) || exitError == nil {
|
||||
r.Dispatch(report.Degraded, "invoke modprobe", err)
|
||||
continue
|
||||
}
|
||||
|
||||
r.Dispatch(report.Trivial, "load device driver", ModprobeError{
|
||||
ModAlias: alias,
|
||||
Stdout: string(stdout),
|
||||
Stderr: string(exitError.Stderr),
|
||||
ExitCode: exitError.ExitCode(),
|
||||
})
|
||||
}
|
||||
}
|
||||
71
cmd/earlyinit/mount.go
Normal file
71
cmd/earlyinit/mount.go
Normal file
@@ -0,0 +1,71 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"hakurei.app/check"
|
||||
"hakurei.app/fhs"
|
||||
"hakurei.app/internal/kobject"
|
||||
"hakurei.app/internal/uevent"
|
||||
)
|
||||
|
||||
// mustMountSystem waits for and mounts a system device matching pattern.
|
||||
func mustMountSystem(
|
||||
ctx context.Context,
|
||||
s *kobject.State,
|
||||
pattern string,
|
||||
) {
|
||||
c, stop := context.WithTimeout(ctx, 30*time.Second)
|
||||
defer stop()
|
||||
|
||||
for {
|
||||
var matchErr error
|
||||
var systemPath *check.Absolute
|
||||
s.Range(c, func(o *kobject.Object, act uevent.KobjectAction) bool {
|
||||
if (act != uevent.KOBJ_ADD && act != uevent.KOBJ_CHANGE) ||
|
||||
o.Subsystem != "block" ||
|
||||
o.Env["DEVTYPE"] != "disk" {
|
||||
return true
|
||||
}
|
||||
|
||||
if ok, err := filepath.Match(pattern, o.DevPath); err != nil {
|
||||
matchErr = err
|
||||
return false
|
||||
} else if !ok {
|
||||
return true
|
||||
}
|
||||
|
||||
name, ok := o.Env["DEVNAME"]
|
||||
if !ok {
|
||||
return true
|
||||
}
|
||||
systemPath = fhs.AbsDev.Append(name)
|
||||
return false
|
||||
})
|
||||
if c.Err() != nil {
|
||||
fatal("devpath", strconv.Quote(pattern), "never appeared")
|
||||
}
|
||||
if matchErr != nil {
|
||||
fatal("cannot match system devpath:", matchErr)
|
||||
}
|
||||
err := syscall.Mount(
|
||||
systemPath.String(),
|
||||
"/system/",
|
||||
"squashfs",
|
||||
0,
|
||||
"threads=multi",
|
||||
)
|
||||
if err == nil {
|
||||
break
|
||||
}
|
||||
if !errors.Is(err, os.ErrNotExist) {
|
||||
fatal("cannot mount system:", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
104
cmd/earlyinit/uevent.go
Normal file
104
cmd/earlyinit/uevent.go
Normal file
@@ -0,0 +1,104 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"hakurei.app/fhs"
|
||||
"hakurei.app/internal/report"
|
||||
"hakurei.app/internal/uevent"
|
||||
"hakurei.app/message"
|
||||
)
|
||||
|
||||
// newRejectColdboot returns a function to be called on every subsequent pending
|
||||
// coldboot, and returns whether coldboot should proceed. Rejection is sticky.
|
||||
func newRejectColdboot() func() bool {
|
||||
// one coldboot per five minutes, two consecutive coldboot
|
||||
const (
|
||||
coldbootInterval = 5 * time.Minute
|
||||
coldbootBurst = 2
|
||||
)
|
||||
|
||||
done := make(chan struct{})
|
||||
s := make(chan struct{}, coldbootBurst)
|
||||
s <- struct{}{} // for early fault before reporting is ready
|
||||
go func() {
|
||||
t := time.NewTicker(coldbootInterval)
|
||||
for {
|
||||
select {
|
||||
case <-done:
|
||||
return
|
||||
|
||||
case <-t.C:
|
||||
select {
|
||||
case s <- struct{}{}:
|
||||
default:
|
||||
}
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
return func() bool {
|
||||
select {
|
||||
case <-s:
|
||||
return true
|
||||
|
||||
case <-done:
|
||||
return false
|
||||
|
||||
default:
|
||||
close(done)
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// consume continuously consumes events from conn with retries.
|
||||
func consume(
|
||||
ctx context.Context,
|
||||
msg message.Msg,
|
||||
r *report.Reporter,
|
||||
conn *uevent.Conn,
|
||||
uuid uevent.UUID,
|
||||
events chan<- *uevent.Message,
|
||||
) {
|
||||
defer close(events)
|
||||
|
||||
nextColdboot := newRejectColdboot()
|
||||
coldboot := true
|
||||
retry:
|
||||
if dispatchErr := conn.Consume(ctx, fhs.Sys, &uuid, events, coldboot, func(path string) {
|
||||
msg.Verbose("coldboot visited", path)
|
||||
}, func(err error) bool {
|
||||
if _, ok := err.(uevent.NeedsColdboot); ok && !nextColdboot() {
|
||||
r.Dispatch(
|
||||
report.Degraded,
|
||||
"rejecting coldboot loop",
|
||||
err,
|
||||
)
|
||||
return false
|
||||
}
|
||||
r.Dispatch(
|
||||
report.Inconsistent,
|
||||
"consumed invalid message",
|
||||
err,
|
||||
)
|
||||
return true
|
||||
}, nil); dispatchErr != nil {
|
||||
if _, ok := dispatchErr.(uevent.Recoverable); !ok {
|
||||
r.Dispatch(
|
||||
report.Fatal,
|
||||
"discontinuing uevent processing due to nonrecoverable error",
|
||||
dispatchErr,
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
if _, ok := dispatchErr.(uevent.NeedsColdboot); ok {
|
||||
// coldboot loop rejected by handler
|
||||
coldboot = false
|
||||
}
|
||||
|
||||
goto retry
|
||||
}
|
||||
}
|
||||
35
cmd/earlyinit/uevent_test.go
Normal file
35
cmd/earlyinit/uevent_test.go
Normal file
@@ -0,0 +1,35 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"testing/synctest"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestRejectColdboot(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
synctest.Test(t, func(t *testing.T) {
|
||||
nextColdboot := newRejectColdboot()
|
||||
want := func(want bool) {
|
||||
if got := nextColdboot(); got != want {
|
||||
t.Fatalf("nextColdboot: %v, want %v", got, want)
|
||||
}
|
||||
}
|
||||
|
||||
synctest.Wait()
|
||||
want(true)
|
||||
time.Sleep(time.Hour)
|
||||
synctest.Wait()
|
||||
want(true)
|
||||
want(true)
|
||||
time.Sleep(5 * time.Minute)
|
||||
synctest.Wait()
|
||||
want(true)
|
||||
want(false)
|
||||
time.Sleep(time.Hour)
|
||||
synctest.Wait()
|
||||
want(false)
|
||||
want(false)
|
||||
})
|
||||
}
|
||||
@@ -893,7 +893,6 @@ func main() {
|
||||
"with-toolchain", command.BoolFlag(false),
|
||||
"Include the stage2 LLVM toolchain",
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
c.Command(
|
||||
|
||||
@@ -2,6 +2,7 @@ package kobject
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"maps"
|
||||
"strconv"
|
||||
"strings"
|
||||
"unsafe"
|
||||
@@ -28,6 +29,22 @@ type Event struct {
|
||||
Subsystem string `json:"subsystem"`
|
||||
}
|
||||
|
||||
// Clone returns a copy of e.
|
||||
func (e *Event) Clone() Event {
|
||||
v := *e
|
||||
v.Env = maps.Clone(e.Env)
|
||||
return v
|
||||
}
|
||||
|
||||
// makeColdboot allocates a new [Object] from e in [StateColdboot].
|
||||
func (e *Event) makeColdboot() *Object {
|
||||
return &Object{
|
||||
State: StateColdboot,
|
||||
DevPath: e.DevPath,
|
||||
Subsystem: e.Subsystem,
|
||||
}
|
||||
}
|
||||
|
||||
// Populate populates e with the contents of a [uevent.Message].
|
||||
//
|
||||
// The ACTION and DEVPATH environment variables are ignored and assumed to be
|
||||
|
||||
491
internal/kobject/kobject.go
Normal file
491
internal/kobject/kobject.go
Normal file
@@ -0,0 +1,491 @@
|
||||
// Package kobject interprets uevent messages from a NETLINK_KOBJECT_UEVENT socket.
|
||||
package kobject
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"maps"
|
||||
"slices"
|
||||
"strconv"
|
||||
"sync"
|
||||
|
||||
"hakurei.app/internal/report"
|
||||
"hakurei.app/internal/uevent"
|
||||
)
|
||||
|
||||
const (
|
||||
// StateColdboot denotes an [Object] populated by a coldboot event. It is
|
||||
// eligible for all event actions.
|
||||
StateColdboot = iota
|
||||
// StateNew denotes an [Object] previously populated by a [uevent.KOBJ_ADD]
|
||||
// event, but has not yet been targeted by a [uevent.KOBJ_BIND] event, or
|
||||
// has been targeted by a [uevent.KOBJ_UNBIND] event.
|
||||
StateNew
|
||||
// StateBound denotes an [Object] that has been targeted by a
|
||||
// [uevent.KOBJ_BIND] and has not been targeted by a [uevent.KOBJ_UNBIND]
|
||||
// after that.
|
||||
StateBound
|
||||
)
|
||||
|
||||
// Object represents a kernel object.
|
||||
type Object struct {
|
||||
// Origin of the object.
|
||||
State int `json:"state,omitempty"`
|
||||
// Set by [uevent.KOBJ_OFFLINE] and [uevent.KOBJ_ONLINE].
|
||||
Offline bool `json:"offline,omitempty"`
|
||||
|
||||
// alloc_uevent_skb: devpath
|
||||
DevPath string `json:"devpath"`
|
||||
// registered per-driver (optional)
|
||||
ModAlias string `json:"modalias,omitempty"`
|
||||
// dev_driver_uevent: drv->name (optional)
|
||||
Driver string `json:"driver,omitempty"`
|
||||
|
||||
// SUBSYSTEM value set by the kernel.
|
||||
Subsystem string `json:"subsystem"`
|
||||
|
||||
// Uninterpreted environment variable pairs. An entry missing a separator
|
||||
// gains the value "\x00".
|
||||
Env map[string]string `json:"env"`
|
||||
}
|
||||
|
||||
// Clone returns the address of a copy of o.
|
||||
func (o *Object) Clone() *Object {
|
||||
v := *o
|
||||
v.Env = maps.Clone(o.Env)
|
||||
return &v
|
||||
}
|
||||
|
||||
// GoString returns compound literal for the underlying value.
|
||||
func (o *Object) GoString() string {
|
||||
return fmt.Sprintf("&%#v", *o)
|
||||
}
|
||||
|
||||
// merge merges uninterpreted environment variable pairs from an [Event].
|
||||
func (o *Object) merge(env map[string]string) {
|
||||
for k, v := range env {
|
||||
if v == "\x00" {
|
||||
continue
|
||||
}
|
||||
|
||||
switch k {
|
||||
case "MODALIAS":
|
||||
o.ModAlias = v
|
||||
continue
|
||||
|
||||
case "DRIVER":
|
||||
o.Driver = v
|
||||
continue
|
||||
|
||||
default:
|
||||
if o.Env == nil {
|
||||
o.Env = make(map[string]string)
|
||||
}
|
||||
o.Env[k] = v
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// update updates o with pairs from env, optionally stripping visited pairs.
|
||||
func (o *Object) update(env map[string]string, strip bool) {
|
||||
for k := range o.Env {
|
||||
if v, ok := env[k]; ok {
|
||||
if strip {
|
||||
delete(env, k)
|
||||
}
|
||||
o.Env[k] = v
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// A pendingIterator is a callback currently iterating through objects targeted
|
||||
// by ongoing events.
|
||||
type pendingIterator struct {
|
||||
f func(o *Object, act uevent.KobjectAction) bool
|
||||
done chan<- struct{}
|
||||
}
|
||||
|
||||
// State processes a stream of [Event] populated from [uevent.Message] received
|
||||
// from a NETLINK_KOBJECT_UEVENT socket and presents an efficient representation
|
||||
// of kernel state.
|
||||
type State struct {
|
||||
// Next expected SEQNUM.
|
||||
seq uint64
|
||||
// DevPath to environment variables.
|
||||
uevent map[string]*Object
|
||||
// Synchronises access to uevent and its objects.
|
||||
ueventMu sync.RWMutex
|
||||
// Alive iterators.
|
||||
iter []*pendingIterator
|
||||
// Synchronises access to iter.
|
||||
iterMu sync.Mutex
|
||||
// UUID for synthetic [uevent.Coldboot] events.
|
||||
coldboot uevent.UUID
|
||||
// Called on [uevent.KOBJ_CHANGE] with stripped environment variables.
|
||||
handleChange func(o *Object, env map[string]string)
|
||||
// Reports errors populating [Event] from [uevent.Message]. A user-supplied
|
||||
// nil value is replaced with a noop.
|
||||
reportErr func(error)
|
||||
}
|
||||
|
||||
// New returns the address of a new [State].
|
||||
func New(
|
||||
coldboot uevent.UUID,
|
||||
handleChange func(o *Object, env map[string]string),
|
||||
reportErr func(error),
|
||||
) *State {
|
||||
return &State{
|
||||
uevent: make(map[string]*Object),
|
||||
coldboot: coldboot,
|
||||
handleChange: handleChange,
|
||||
reportErr: reportErr,
|
||||
}
|
||||
}
|
||||
|
||||
// deleteIter removes an iterator from s. Must be called after acquiring iterMu.
|
||||
func (s *State) deleteIter(p *pendingIterator) {
|
||||
s.iter = slices.DeleteFunc(s.iter, func(v *pendingIterator) bool {
|
||||
return p == v
|
||||
})
|
||||
}
|
||||
|
||||
// dispatchIter broadcasts an [Object] to all alive iterators.
|
||||
func (s *State) dispatchIter(o *Object, act uevent.KobjectAction) {
|
||||
s.iterMu.Lock()
|
||||
defer s.iterMu.Unlock()
|
||||
|
||||
for _, p := range s.iter {
|
||||
if !p.f(o, act) {
|
||||
s.deleteIter(p)
|
||||
close(p.done)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Range calls f on all current and upcoming [Object] values tracked by s until
|
||||
// f returns false or the context is cancelled. f must not retain o or modify
|
||||
// the value it points to.
|
||||
func (s *State) Range(
|
||||
ctx context.Context,
|
||||
f func(o *Object, act uevent.KobjectAction) bool,
|
||||
) {
|
||||
done := make(chan struct{})
|
||||
p := pendingIterator{f, done}
|
||||
|
||||
s.iterMu.Lock()
|
||||
s.ueventMu.RLock()
|
||||
for _, o := range s.uevent {
|
||||
if !f(o, uevent.KOBJ_ADD) {
|
||||
s.ueventMu.RUnlock()
|
||||
s.iterMu.Unlock()
|
||||
return
|
||||
}
|
||||
}
|
||||
s.ueventMu.RUnlock()
|
||||
s.iter = append(s.iter, &p)
|
||||
s.iterMu.Unlock()
|
||||
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
s.iterMu.Lock()
|
||||
s.deleteIter(&p)
|
||||
s.iterMu.Unlock()
|
||||
return
|
||||
|
||||
case <-done:
|
||||
// deregistered by dispatchIter
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// An EventError describes a malformed or inconsistent [Event].
|
||||
type EventError struct {
|
||||
Kind int `json:"fault"`
|
||||
E Event `json:"event"`
|
||||
O *Object `json:"object,omitempty"`
|
||||
}
|
||||
|
||||
var _ report.RepresentableError = EventError{}
|
||||
|
||||
func (EventError) Representable() {}
|
||||
|
||||
const (
|
||||
// EUnexpectedColdboot is reported for a coldboot event with action other
|
||||
// than the expected [uevent.KOBJ_ADD].
|
||||
EUnexpectedColdboot = iota
|
||||
// EDuplicateAdd is reported for a [uevent.KOBJ_ADD] event on a
|
||||
// still-existing entry that was not the result of a coldboot.
|
||||
EDuplicateAdd
|
||||
// EBadTarget is reported for an event on a nonexistent [Object]. This is
|
||||
// generally only possible before coldboot completes.
|
||||
EBadTarget
|
||||
// ERemoveState is reported for a [uevent.KOBJ_REMOVE] event targeting an
|
||||
// entry in a state other than [StateColdboot] and [StateNew].
|
||||
ERemoveState
|
||||
// EUnexpectedOffline is reported for a [uevent.KOBJ_OFFLINE] or
|
||||
// [uevent.KOBJ_ONLINE] event targeting an already offline or online object.
|
||||
EUnexpectedOffline
|
||||
// EBindState is reported for a [uevent.KOBJ_BIND] event targeting an entry
|
||||
// in a state other than [StateColdboot] and [StateNew].
|
||||
EBindState
|
||||
// EUnbindState is reported for a [uevent.KOBJ_UNBIND] event targeting an
|
||||
// entry in a state other than [StateBound].
|
||||
EUnbindState
|
||||
// EMalformedMove is reported for a [uevent.KOBJ_MOVE] event missing the
|
||||
// DEVPATH_OLD environment variable.
|
||||
EMalformedMove
|
||||
)
|
||||
|
||||
func (e EventError) Error() string {
|
||||
switch e.Kind {
|
||||
case EUnexpectedColdboot:
|
||||
return "unexpected " + e.E.Action.String() + " coldboot event"
|
||||
case EDuplicateAdd:
|
||||
return "duplicate add event on devpath " + strconv.Quote(e.E.DevPath)
|
||||
case EBadTarget:
|
||||
return "unexpected " + e.E.Action.String() + " event on devpath " +
|
||||
strconv.Quote(e.E.DevPath)
|
||||
case ERemoveState:
|
||||
if e.O == nil {
|
||||
return "invalid remove event error"
|
||||
}
|
||||
return "remove event targeting devpath " + strconv.Quote(e.E.DevPath) +
|
||||
" in state " + strconv.Itoa(e.O.State)
|
||||
case EUnexpectedOffline:
|
||||
if e.O == nil {
|
||||
return "invalid unexpected offline error"
|
||||
}
|
||||
if e.O.Offline {
|
||||
return "offline event targeting devpath " + strconv.Quote(e.E.DevPath)
|
||||
}
|
||||
return "online event targeting devpath " + strconv.Quote(e.E.DevPath)
|
||||
case EBindState:
|
||||
if e.O == nil {
|
||||
return "invalid bind state error"
|
||||
}
|
||||
return "bind event targeting devpath " + strconv.Quote(e.E.DevPath) +
|
||||
" in state " + strconv.Itoa(e.O.State)
|
||||
case EUnbindState:
|
||||
if e.O == nil {
|
||||
return "invalid unbind state error"
|
||||
}
|
||||
return "unbind event targeting devpath " + strconv.Quote(e.E.DevPath) +
|
||||
" in state " + strconv.Itoa(e.O.State)
|
||||
case EMalformedMove:
|
||||
return "move event targeting devpath " + strconv.Quote(e.E.DevPath) +
|
||||
" missing DEVPATH_OLD"
|
||||
|
||||
default:
|
||||
return "invalid event error kind " + strconv.Itoa(e.Kind)
|
||||
}
|
||||
}
|
||||
|
||||
// NewError returns a new [EventError] for e and o.
|
||||
func (e *Event) NewError(kind int, o *Object) error {
|
||||
if o != nil {
|
||||
o = o.Clone()
|
||||
}
|
||||
return EventError{kind, e.Clone(), o}
|
||||
}
|
||||
|
||||
// processEvent merges an event into s.
|
||||
func (s *State) processEvent(e *Event) {
|
||||
s.ueventMu.Lock()
|
||||
defer s.ueventMu.Unlock()
|
||||
|
||||
coldboot := e.Synth != nil
|
||||
if e.Action != uevent.KOBJ_ADD && coldboot {
|
||||
s.reportErr(e.NewError(EUnexpectedColdboot, nil))
|
||||
return
|
||||
}
|
||||
|
||||
switch act := e.Action; act {
|
||||
case uevent.KOBJ_ADD:
|
||||
if e.Synth == nil {
|
||||
if o, ok := s.uevent[e.DevPath]; ok {
|
||||
s.reportErr(e.NewError(EDuplicateAdd, o))
|
||||
o.merge(e.Env)
|
||||
s.dispatchIter(o, act)
|
||||
return
|
||||
}
|
||||
}
|
||||
o := e.makeColdboot()
|
||||
if !coldboot {
|
||||
o.State = StateNew
|
||||
}
|
||||
o.merge(e.Env)
|
||||
s.uevent[e.DevPath] = o
|
||||
s.dispatchIter(o, act)
|
||||
return
|
||||
|
||||
case uevent.KOBJ_REMOVE:
|
||||
if o, ok := s.uevent[e.DevPath]; !ok {
|
||||
s.reportErr(e.NewError(EBadTarget, nil))
|
||||
return
|
||||
} else if o.State != StateColdboot && o.State != StateNew {
|
||||
s.reportErr(e.NewError(ERemoveState, o))
|
||||
}
|
||||
delete(s.uevent, e.DevPath)
|
||||
return
|
||||
|
||||
case uevent.KOBJ_CHANGE:
|
||||
o, ok := s.uevent[e.DevPath]
|
||||
if !ok {
|
||||
s.reportErr(e.NewError(EBadTarget, nil))
|
||||
// this suffers from the coldboot race window similar to KOBJ_MOVE,
|
||||
// however this action combines driver-specific and change-specific
|
||||
// environment variables and combines them with environment
|
||||
// variables meant to convey state of the kobject, and it is not
|
||||
// possible to reliably separate them, so this fallback avoids the
|
||||
// race at the cost of including some garbage in tracked state
|
||||
o = e.makeColdboot()
|
||||
o.merge(e.Env)
|
||||
s.uevent[e.DevPath] = o
|
||||
s.dispatchIter(o, act)
|
||||
return
|
||||
}
|
||||
o.update(e.Env, true)
|
||||
if s.handleChange != nil {
|
||||
s.handleChange(o, e.Env)
|
||||
}
|
||||
s.dispatchIter(o, act)
|
||||
return
|
||||
|
||||
case uevent.KOBJ_MOVE:
|
||||
var o *Object
|
||||
if old, ok := e.Env["DEVPATH_OLD"]; !ok {
|
||||
s.reportErr(e.NewError(EMalformedMove, nil))
|
||||
// not reached
|
||||
o = e.makeColdboot()
|
||||
} else if o, ok = s.uevent[old]; !ok {
|
||||
s.reportErr(e.NewError(EBadTarget, nil))
|
||||
// this generally happens during coldboot, dropping the event here
|
||||
// may cause inconsistent state if the coldboot event for this
|
||||
// object was generated before the bind event
|
||||
delete(e.Env, "DEVPATH_OLD")
|
||||
o = e.makeColdboot()
|
||||
} else {
|
||||
delete(s.uevent, old)
|
||||
delete(e.Env, "DEVPATH_OLD")
|
||||
}
|
||||
o.merge(e.Env)
|
||||
s.uevent[e.DevPath] = o
|
||||
o.DevPath = e.DevPath
|
||||
s.dispatchIter(o, act)
|
||||
return
|
||||
|
||||
case uevent.KOBJ_ONLINE:
|
||||
o, ok := s.uevent[e.DevPath]
|
||||
if !ok {
|
||||
s.reportErr(e.NewError(EBadTarget, nil))
|
||||
// coldboot race window similar to an unexpected KOBJ_MOVE
|
||||
o = e.makeColdboot()
|
||||
s.uevent[e.DevPath] = o
|
||||
o.merge(e.Env)
|
||||
}
|
||||
if !o.Offline {
|
||||
s.reportErr(e.NewError(EUnexpectedOffline, o))
|
||||
}
|
||||
o.Offline = false
|
||||
s.dispatchIter(o, act)
|
||||
return
|
||||
|
||||
case uevent.KOBJ_OFFLINE:
|
||||
o, ok := s.uevent[e.DevPath]
|
||||
if !ok {
|
||||
s.reportErr(e.NewError(EBadTarget, nil))
|
||||
// coldboot race window similar to an unexpected KOBJ_MOVE
|
||||
o = e.makeColdboot()
|
||||
s.uevent[e.DevPath] = o
|
||||
o.merge(e.Env)
|
||||
}
|
||||
if o.Offline {
|
||||
s.reportErr(e.NewError(EUnexpectedOffline, o))
|
||||
}
|
||||
o.Offline = true
|
||||
s.dispatchIter(o, act)
|
||||
return
|
||||
|
||||
case uevent.KOBJ_BIND:
|
||||
o, ok := s.uevent[e.DevPath]
|
||||
if !ok {
|
||||
s.reportErr(e.NewError(EBadTarget, nil))
|
||||
// coldboot race window similar to an unexpected KOBJ_MOVE
|
||||
o = e.makeColdboot()
|
||||
s.uevent[e.DevPath] = o
|
||||
}
|
||||
if o.State != StateColdboot && o.State != StateNew {
|
||||
s.reportErr(e.NewError(EBindState, o))
|
||||
}
|
||||
o.State = StateBound
|
||||
o.merge(e.Env)
|
||||
s.dispatchIter(o, act)
|
||||
return
|
||||
|
||||
case uevent.KOBJ_UNBIND:
|
||||
o, ok := s.uevent[e.DevPath]
|
||||
if !ok {
|
||||
s.reportErr(e.NewError(EBadTarget, nil))
|
||||
// coldboot race window similar to an unexpected KOBJ_MOVE, but does
|
||||
// not result in inconsistent state if dropped
|
||||
return
|
||||
}
|
||||
if o.State != StateBound {
|
||||
s.reportErr(e.NewError(EUnbindState, o))
|
||||
}
|
||||
o.State = StateNew
|
||||
o.Driver = ""
|
||||
s.dispatchIter(o, act)
|
||||
return
|
||||
|
||||
default: // not reached
|
||||
s.reportErr(fmt.Errorf("invalid action %d", e.Action))
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// BadSequenceError is reported for an unexpected SEQNUM.
|
||||
type BadSequenceError struct{ Got, Want uint64 }
|
||||
|
||||
func (e BadSequenceError) Error() string {
|
||||
return "SEQNUM=" + strconv.FormatUint(e.Got, 10) +
|
||||
", want " + strconv.FormatUint(e.Want, 10)
|
||||
}
|
||||
|
||||
// Consume receives uevent messages and updates s to reflect state of kernel.
|
||||
func (s *State) Consume(ctx context.Context, events <-chan *uevent.Message) {
|
||||
if s.uevent == nil {
|
||||
s.uevent = make(map[string]*Object)
|
||||
}
|
||||
if s.reportErr == nil {
|
||||
s.reportErr = func(error) {}
|
||||
}
|
||||
|
||||
var e Event
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return
|
||||
|
||||
case m, ok := <-events:
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
e.Populate(s.reportErr, m)
|
||||
|
||||
// skip external synthetic event
|
||||
if e.Synth != nil && *e.Synth != s.coldboot {
|
||||
continue
|
||||
}
|
||||
|
||||
if s.seq == 0 {
|
||||
s.seq = e.Sequence
|
||||
}
|
||||
if s.seq != e.Sequence {
|
||||
s.reportErr(BadSequenceError{e.Sequence, s.seq})
|
||||
}
|
||||
s.seq++
|
||||
s.processEvent(&e)
|
||||
}
|
||||
}
|
||||
}
|
||||
1959
internal/kobject/kobject_test.go
Normal file
1959
internal/kobject/kobject_test.go
Normal file
File diff suppressed because it is too large
Load Diff
266
internal/kobject/testdata/00-coldboot
vendored
Normal file
266
internal/kobject/testdata/00-coldboot
vendored
Normal file
@@ -0,0 +1,266 @@
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXPWRBN:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXPWRBN:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:LNXPWRBN:","SEQNUM=777"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXPWRBN:00/wakeup/wakeup7","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXPWRBN:00/wakeup/wakeup7","SUBSYSTEM=wakeup","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=778"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0010:00/LNXCPU:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0010:00/LNXCPU:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:LNXCPU:","SEQNUM=779"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0010:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0010:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:ACPI0010:PNP0A05:","SEQNUM=780"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0103:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0103:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0103:","SEQNUM=781"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/PNP0A06:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/PNP0A06:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0A06:","SEQNUM=782"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/PNP0A06:01","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/PNP0A06:01","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0A06:","SEQNUM=783"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/PNP0A06:02","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/PNP0A06:02","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0A06:","SEQNUM=784"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/QEMU0002:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/QEMU0002:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:QEMU0002:","SEQNUM=785"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=786"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:00/wakeup/wakeup0","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:00/wakeup/wakeup0","SUBSYSTEM=wakeup","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=787"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0303:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0303:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0303:","SEQNUM=788"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0400:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0400:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0400:","SEQNUM=789"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0501:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0501:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0501:","SEQNUM=790"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0700:00/device:02","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0700:00/device:02","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=791"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0700:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0700:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0700:","SEQNUM=792"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0B00:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0B00:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0B00:","SEQNUM=793"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0F13:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0F13:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0F13:","SEQNUM=794"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=795"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/wakeup/wakeup1","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/wakeup/wakeup1","SUBSYSTEM=wakeup","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=796"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:03","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:03","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=797"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:03/wakeup/wakeup2","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:03/wakeup/wakeup2","SUBSYSTEM=wakeup","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=798"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:04","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:04","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=799"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:04/wakeup/wakeup3","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:04/wakeup/wakeup3","SUBSYSTEM=wakeup","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=800"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:05","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:05","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=801"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:05/wakeup/wakeup4","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:05/wakeup/wakeup4","SUBSYSTEM=wakeup","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=802"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:06","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:06","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=803"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:06/wakeup/wakeup5","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:06/wakeup/wakeup5","SUBSYSTEM=wakeup","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=804"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:07","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:07","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=805"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:08","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:08","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=806"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:09","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:09","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=807"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0a","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0a","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=808"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0b","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0b","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=809"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0c","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0c","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=810"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0d","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0d","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=811"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0e","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0e","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=812"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0f","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0f","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=813"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:10","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:10","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=814"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:11","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:11","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=815"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:12","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:12","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=816"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:13","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:13","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=817"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:14","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:14","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=818"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:15","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:15","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=819"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:16","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:16","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=820"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:17","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:17","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=821"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:18","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:18","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=822"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:19","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:19","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=823"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1a","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1a","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=824"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1b","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1b","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=825"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1c","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1c","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=826"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1d","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1d","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=827"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1e","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1e","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=828"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1f","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1f","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=829"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:20","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:20","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=830"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:21","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:21","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=831"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:22","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:22","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=832"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0A03:","SEQNUM=833"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/wakeup/wakeup6","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/wakeup/wakeup6","SUBSYSTEM=wakeup","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=834"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0C0F:","SEQNUM=835"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:01","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:01","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0C0F:","SEQNUM=836"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:02","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:02","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0C0F:","SEQNUM=837"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:03","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:03","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0C0F:","SEQNUM=838"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:04","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:04","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0C0F:","SEQNUM=839"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:LNXSYBUS:","SEQNUM=840"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:01","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:01","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:LNXSYBUS:","SEQNUM=841"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:LNXSYSTM:","SEQNUM=842"]}
|
||||
{"action":"add","devpath":"/devices/breakpoint","env":["ACTION=add","DEVPATH=/devices/breakpoint","SUBSYSTEM=event_source","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=843"]}
|
||||
{"action":"add","devpath":"/devices/cpu","env":["ACTION=add","DEVPATH=/devices/cpu","SUBSYSTEM=event_source","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=844"]}
|
||||
{"action":"add","devpath":"/devices/kprobe","env":["ACTION=add","DEVPATH=/devices/kprobe","SUBSYSTEM=event_source","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=845"]}
|
||||
{"action":"add","devpath":"/devices/msr","env":["ACTION=add","DEVPATH=/devices/msr","SUBSYSTEM=event_source","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=846"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:00.0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:00.0","SUBSYSTEM=pci","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","PCI_CLASS=60000","PCI_ID=8086:1237","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:00.0","MODALIAS=pci:v00008086d00001237sv00001AF4sd00001100bc06sc00i00","SEQNUM=847"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.0","SUBSYSTEM=pci","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","PCI_CLASS=60100","PCI_ID=8086:7000","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:01.0","MODALIAS=pci:v00008086d00007000sv00001AF4sd00001100bc06sc01i00","SEQNUM=848"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata1/ata_port/ata1","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata1/ata_port/ata1","SUBSYSTEM=ata_port","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=849"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata1/host0/scsi_host/host0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata1/host0/scsi_host/host0","SUBSYSTEM=scsi_host","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=850"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata1/host0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata1/host0","SUBSYSTEM=scsi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DEVTYPE=scsi_host","SEQNUM=851"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata1/link1/ata_link/link1","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata1/link1/ata_link/link1","SUBSYSTEM=ata_link","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=852"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata1/link1/dev1.0/ata_device/dev1.0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata1/link1/dev1.0/ata_device/dev1.0","SUBSYSTEM=ata_device","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=853"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata1/link1/dev1.1/ata_device/dev1.1","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata1/link1/dev1.1/ata_device/dev1.1","SUBSYSTEM=ata_device","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=854"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata2/ata_port/ata2","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata2/ata_port/ata2","SUBSYSTEM=ata_port","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=855"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata2/host1/scsi_host/host1","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata2/host1/scsi_host/host1","SUBSYSTEM=scsi_host","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=856"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0/1:0:0:0/bsg/1:0:0:0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0/1:0:0:0/bsg/1:0:0:0","SUBSYSTEM=bsg","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=251","MINOR=0","DEVNAME=bsg/1:0:0:0","SEQNUM=857"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0/1:0:0:0/scsi_device/1:0:0:0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0/1:0:0:0/scsi_device/1:0:0:0","SUBSYSTEM=scsi_device","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=858"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0/1:0:0:0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0/1:0:0:0","SUBSYSTEM=scsi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DEVTYPE=scsi_device","MODALIAS=scsi:t-0x05","SEQNUM=859"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0","SUBSYSTEM=scsi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DEVTYPE=scsi_target","SEQNUM=860"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata2/host1","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata2/host1","SUBSYSTEM=scsi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DEVTYPE=scsi_host","SEQNUM=861"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata2/link2/ata_link/link2","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata2/link2/ata_link/link2","SUBSYSTEM=ata_link","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=862"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata2/link2/dev2.0/ata_device/dev2.0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata2/link2/dev2.0/ata_device/dev2.0","SUBSYSTEM=ata_device","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=863"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata2/link2/dev2.1/ata_device/dev2.1","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata2/link2/dev2.1/ata_device/dev2.1","SUBSYSTEM=ata_device","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=864"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1","SUBSYSTEM=pci","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DRIVER=ata_piix","PCI_CLASS=10180","PCI_ID=8086:7010","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:01.1","MODALIAS=pci:v00008086d00007010sv00001AF4sd00001100bc01sc01i80","SEQNUM=865"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.3","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.3","SUBSYSTEM=pci","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","PCI_CLASS=68000","PCI_ID=8086:7113","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:01.3","MODALIAS=pci:v00008086d00007113sv00001AF4sd00001100bc06sc80i00","SEQNUM=866"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:02.0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:02.0","SUBSYSTEM=pci","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","PCI_CLASS=20000","PCI_ID=8086:100E","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:02.0","MODALIAS=pci:v00008086d0000100Esv00001AF4sd00001100bc02sc00i00","SEQNUM=867"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:03.0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:03.0","SUBSYSTEM=pci","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DRIVER=virtio-pci","PCI_CLASS=10000","PCI_ID=1AF4:1001","PCI_SUBSYS_ID=1AF4:0002","PCI_SLOT_NAME=0000:00:03.0","MODALIAS=pci:v00001AF4d00001001sv00001AF4sd00000002bc01sc00i00","SEQNUM=868"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:03.0/virtio0/block/vda","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:03.0/virtio0/block/vda","SUBSYSTEM=block","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=254","MINOR=0","DEVNAME=vda","DEVTYPE=disk","DISKSEQ=1","SEQNUM=869"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:03.0/virtio0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:03.0/virtio0","SUBSYSTEM=virtio","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DRIVER=virtio_blk","MODALIAS=virtio:d00000002v00001AF4","SEQNUM=870"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/QEMU0002:00","env":["ACTION=add","DEVPATH=/devices/pci0000:00/QEMU0002:00","SUBSYSTEM=platform","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:QEMU0002:","SEQNUM=871"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/pci_bus/0000:00","env":["ACTION=add","DEVPATH=/devices/pci0000:00/pci_bus/0000:00","SUBSYSTEM=pci_bus","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=872"]}
|
||||
{"action":"add","devpath":"/devices/platform/PNP0103:00","env":["ACTION=add","DEVPATH=/devices/platform/PNP0103:00","SUBSYSTEM=platform","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0103:","SEQNUM=873"]}
|
||||
{"action":"add","devpath":"/devices/platform/pcspkr","env":["ACTION=add","DEVPATH=/devices/platform/pcspkr","SUBSYSTEM=platform","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=platform:pcspkr","SEQNUM=874"]}
|
||||
{"action":"add","devpath":"/devices/platform/reg-dummy/regulator/regulator.0","env":["ACTION=add","DEVPATH=/devices/platform/reg-dummy/regulator/regulator.0","SUBSYSTEM=regulator","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=875"]}
|
||||
{"action":"add","devpath":"/devices/platform/reg-dummy","env":["ACTION=add","DEVPATH=/devices/platform/reg-dummy","SUBSYSTEM=platform","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DRIVER=reg-dummy","MODALIAS=platform:reg-dummy","SEQNUM=876"]}
|
||||
{"action":"add","devpath":"/devices/platform/serial8250/serial8250:0/serial8250:0.1/tty/ttyS1","env":["ACTION=add","DEVPATH=/devices/platform/serial8250/serial8250:0/serial8250:0.1/tty/ttyS1","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=65","DEVNAME=ttyS1","SEQNUM=877"]}
|
||||
{"action":"add","devpath":"/devices/platform/serial8250/serial8250:0/serial8250:0.1","env":["ACTION=add","DEVPATH=/devices/platform/serial8250/serial8250:0/serial8250:0.1","SUBSYSTEM=serial-base","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DEVTYPE=port","DRIVER=port","SEQNUM=878"]}
|
||||
{"action":"add","devpath":"/devices/platform/serial8250/serial8250:0/serial8250:0.2/tty/ttyS2","env":["ACTION=add","DEVPATH=/devices/platform/serial8250/serial8250:0/serial8250:0.2/tty/ttyS2","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=66","DEVNAME=ttyS2","SEQNUM=879"]}
|
||||
{"action":"add","devpath":"/devices/platform/serial8250/serial8250:0/serial8250:0.2","env":["ACTION=add","DEVPATH=/devices/platform/serial8250/serial8250:0/serial8250:0.2","SUBSYSTEM=serial-base","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DEVTYPE=port","DRIVER=port","SEQNUM=880"]}
|
||||
{"action":"add","devpath":"/devices/platform/serial8250/serial8250:0/serial8250:0.3/tty/ttyS3","env":["ACTION=add","DEVPATH=/devices/platform/serial8250/serial8250:0/serial8250:0.3/tty/ttyS3","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=67","DEVNAME=ttyS3","SEQNUM=881"]}
|
||||
{"action":"add","devpath":"/devices/platform/serial8250/serial8250:0/serial8250:0.3","env":["ACTION=add","DEVPATH=/devices/platform/serial8250/serial8250:0/serial8250:0.3","SUBSYSTEM=serial-base","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DEVTYPE=port","DRIVER=port","SEQNUM=882"]}
|
||||
{"action":"add","devpath":"/devices/platform/serial8250/serial8250:0","env":["ACTION=add","DEVPATH=/devices/platform/serial8250/serial8250:0","SUBSYSTEM=serial-base","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DEVTYPE=ctrl","DRIVER=ctrl","SEQNUM=883"]}
|
||||
{"action":"add","devpath":"/devices/platform/serial8250","env":["ACTION=add","DEVPATH=/devices/platform/serial8250","SUBSYSTEM=platform","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DRIVER=serial8250","MODALIAS=platform:serial8250","SEQNUM=884"]}
|
||||
{"action":"add","devpath":"/devices/pnp0/00:00","env":["ACTION=add","DEVPATH=/devices/pnp0/00:00","SUBSYSTEM=pnp","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=885"]}
|
||||
{"action":"add","devpath":"/devices/pnp0/00:01","env":["ACTION=add","DEVPATH=/devices/pnp0/00:01","SUBSYSTEM=pnp","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=886"]}
|
||||
{"action":"add","devpath":"/devices/pnp0/00:02","env":["ACTION=add","DEVPATH=/devices/pnp0/00:02","SUBSYSTEM=pnp","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=887"]}
|
||||
{"action":"add","devpath":"/devices/pnp0/00:03","env":["ACTION=add","DEVPATH=/devices/pnp0/00:03","SUBSYSTEM=pnp","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=888"]}
|
||||
{"action":"add","devpath":"/devices/pnp0/00:04/00:04:0/00:04:0.0/tty/ttyS0","env":["ACTION=add","DEVPATH=/devices/pnp0/00:04/00:04:0/00:04:0.0/tty/ttyS0","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=64","DEVNAME=ttyS0","SEQNUM=889"]}
|
||||
{"action":"add","devpath":"/devices/pnp0/00:04/00:04:0/00:04:0.0","env":["ACTION=add","DEVPATH=/devices/pnp0/00:04/00:04:0/00:04:0.0","SUBSYSTEM=serial-base","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DEVTYPE=port","DRIVER=port","SEQNUM=890"]}
|
||||
{"action":"add","devpath":"/devices/pnp0/00:04/00:04:0","env":["ACTION=add","DEVPATH=/devices/pnp0/00:04/00:04:0","SUBSYSTEM=serial-base","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DEVTYPE=ctrl","DRIVER=ctrl","SEQNUM=891"]}
|
||||
{"action":"add","devpath":"/devices/pnp0/00:04","env":["ACTION=add","DEVPATH=/devices/pnp0/00:04","SUBSYSTEM=pnp","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DRIVER=serial","SEQNUM=892"]}
|
||||
{"action":"add","devpath":"/devices/pnp0/00:05","env":["ACTION=add","DEVPATH=/devices/pnp0/00:05","SUBSYSTEM=pnp","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=893"]}
|
||||
{"action":"add","devpath":"/devices/software","env":["ACTION=add","DEVPATH=/devices/software","SUBSYSTEM=event_source","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=894"]}
|
||||
{"action":"add","devpath":"/devices/system/clockevents/broadcast","env":["ACTION=add","DEVPATH=/devices/system/clockevents/broadcast","SUBSYSTEM=clockevents","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=895"]}
|
||||
{"action":"add","devpath":"/devices/system/clockevents/clockevent0","env":["ACTION=add","DEVPATH=/devices/system/clockevents/clockevent0","SUBSYSTEM=clockevents","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=896"]}
|
||||
{"action":"add","devpath":"/devices/system/clocksource/clocksource0","env":["ACTION=add","DEVPATH=/devices/system/clocksource/clocksource0","SUBSYSTEM=clocksource","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=897"]}
|
||||
{"action":"add","devpath":"/devices/system/container/PNP0A06:00","env":["ACTION=add","DEVPATH=/devices/system/container/PNP0A06:00","SUBSYSTEM=container","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=898"]}
|
||||
{"action":"add","devpath":"/devices/system/container/PNP0A06:01","env":["ACTION=add","DEVPATH=/devices/system/container/PNP0A06:01","SUBSYSTEM=container","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=899"]}
|
||||
{"action":"add","devpath":"/devices/system/container/PNP0A06:02","env":["ACTION=add","DEVPATH=/devices/system/container/PNP0A06:02","SUBSYSTEM=container","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=900"]}
|
||||
{"action":"add","devpath":"/devices/system/cpu/cpu0","env":["ACTION=add","DEVPATH=/devices/system/cpu/cpu0","SUBSYSTEM=cpu","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DRIVER=processor","MODALIAS=cpu:type:x86,ven0002fam000Fmod006B:feature:,0000,0002,0003,0004,0005,0006,0007,0008,0009,000B,000C,000D,000E,000F,0010,0011,0013,0017,0018,0019,001A,0020,0022,0023,0024,0025,0026,0027,0028,0029,002B,002C,002D,002E,002F,0030,0031,0034,0037,0038,003D,0064,006E,0070,0074,0075,0076,0079,007A,007F,0080,008D,0095,009F,00C0,00C8,00ED,00F3,010F,0115,0165,016C,0282\n","SEQNUM=901"]}
|
||||
{"action":"add","devpath":"/devices/system/machinecheck/machinecheck0","env":["ACTION=add","DEVPATH=/devices/system/machinecheck/machinecheck0","SUBSYSTEM=machinecheck","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=902"]}
|
||||
{"action":"add","devpath":"/devices/system/memory/memory0","env":["ACTION=add","DEVPATH=/devices/system/memory/memory0","SUBSYSTEM=memory","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=903"]}
|
||||
{"action":"add","devpath":"/devices/system/memory/memory1","env":["ACTION=add","DEVPATH=/devices/system/memory/memory1","SUBSYSTEM=memory","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=904"]}
|
||||
{"action":"add","devpath":"/devices/system/memory/memory2","env":["ACTION=add","DEVPATH=/devices/system/memory/memory2","SUBSYSTEM=memory","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=905"]}
|
||||
{"action":"add","devpath":"/devices/system/memory/memory3","env":["ACTION=add","DEVPATH=/devices/system/memory/memory3","SUBSYSTEM=memory","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=906"]}
|
||||
{"action":"add","devpath":"/devices/system/memory/memory4","env":["ACTION=add","DEVPATH=/devices/system/memory/memory4","SUBSYSTEM=memory","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=907"]}
|
||||
{"action":"add","devpath":"/devices/system/memory/memory5","env":["ACTION=add","DEVPATH=/devices/system/memory/memory5","SUBSYSTEM=memory","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=908"]}
|
||||
{"action":"add","devpath":"/devices/system/memory/memory6","env":["ACTION=add","DEVPATH=/devices/system/memory/memory6","SUBSYSTEM=memory","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=909"]}
|
||||
{"action":"add","devpath":"/devices/system/memory/memory7","env":["ACTION=add","DEVPATH=/devices/system/memory/memory7","SUBSYSTEM=memory","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=910"]}
|
||||
{"action":"add","devpath":"/devices/system/node/node0","env":["ACTION=add","DEVPATH=/devices/system/node/node0","SUBSYSTEM=node","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=911"]}
|
||||
{"action":"add","devpath":"/devices/tracepoint","env":["ACTION=add","DEVPATH=/devices/tracepoint","SUBSYSTEM=event_source","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=912"]}
|
||||
{"action":"add","devpath":"/devices/uprobe","env":["ACTION=add","DEVPATH=/devices/uprobe","SUBSYSTEM=event_source","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=913"]}
|
||||
{"action":"add","devpath":"/devices/virtual/bdi/254:0","env":["ACTION=add","DEVPATH=/devices/virtual/bdi/254:0","SUBSYSTEM=bdi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=914"]}
|
||||
{"action":"add","devpath":"/devices/virtual/devlink/:ata2--scsi:1:0:0:0","env":["ACTION=add","DEVPATH=/devices/virtual/devlink/:ata2--scsi:1:0:0:0","SUBSYSTEM=devlink","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=915"]}
|
||||
{"action":"add","devpath":"/devices/virtual/dmi/id","env":["ACTION=add","DEVPATH=/devices/virtual/dmi/id","SUBSYSTEM=dmi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=dmi:bvnSeaBIOS:bvrrel-1.17.0-0-gb52ca86e094d-prebuilt.qemu.org:bd04/01/2014:br0.0:svnQEMU:pnStandardPC(i440FX+PIIX,1996):pvrpc-i440fx-10.1:cvnQEMU:ct1:cvrpc-i440fx-10.1:sku:","SEQNUM=916"]}
|
||||
{"action":"add","devpath":"/devices/virtual/mem/full","env":["ACTION=add","DEVPATH=/devices/virtual/mem/full","SUBSYSTEM=mem","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=1","MINOR=7","DEVNAME=full","DEVMODE=0666","SEQNUM=917"]}
|
||||
{"action":"add","devpath":"/devices/virtual/mem/kmsg","env":["ACTION=add","DEVPATH=/devices/virtual/mem/kmsg","SUBSYSTEM=mem","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=1","MINOR=11","DEVNAME=kmsg","DEVMODE=0644","SEQNUM=918"]}
|
||||
{"action":"add","devpath":"/devices/virtual/mem/mem","env":["ACTION=add","DEVPATH=/devices/virtual/mem/mem","SUBSYSTEM=mem","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=1","MINOR=1","DEVNAME=mem","SEQNUM=919"]}
|
||||
{"action":"add","devpath":"/devices/virtual/mem/null","env":["ACTION=add","DEVPATH=/devices/virtual/mem/null","SUBSYSTEM=mem","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=1","MINOR=3","DEVNAME=null","DEVMODE=0666","SEQNUM=920"]}
|
||||
{"action":"add","devpath":"/devices/virtual/mem/port","env":["ACTION=add","DEVPATH=/devices/virtual/mem/port","SUBSYSTEM=mem","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=1","MINOR=4","DEVNAME=port","SEQNUM=921"]}
|
||||
{"action":"add","devpath":"/devices/virtual/mem/random","env":["ACTION=add","DEVPATH=/devices/virtual/mem/random","SUBSYSTEM=mem","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=1","MINOR=8","DEVNAME=random","DEVMODE=0666","SEQNUM=922"]}
|
||||
{"action":"add","devpath":"/devices/virtual/mem/urandom","env":["ACTION=add","DEVPATH=/devices/virtual/mem/urandom","SUBSYSTEM=mem","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=1","MINOR=9","DEVNAME=urandom","DEVMODE=0666","SEQNUM=923"]}
|
||||
{"action":"add","devpath":"/devices/virtual/mem/zero","env":["ACTION=add","DEVPATH=/devices/virtual/mem/zero","SUBSYSTEM=mem","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=1","MINOR=5","DEVNAME=zero","DEVMODE=0666","SEQNUM=924"]}
|
||||
{"action":"add","devpath":"/devices/virtual/memory_tiering/memory_tier4","env":["ACTION=add","DEVPATH=/devices/virtual/memory_tiering/memory_tier4","SUBSYSTEM=memory_tiering","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=925"]}
|
||||
{"action":"add","devpath":"/devices/virtual/misc/cpu_dma_latency","env":["ACTION=add","DEVPATH=/devices/virtual/misc/cpu_dma_latency","SUBSYSTEM=misc","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=10","MINOR=259","DEVNAME=cpu_dma_latency","SEQNUM=926"]}
|
||||
{"action":"add","devpath":"/devices/virtual/misc/hpet","env":["ACTION=add","DEVPATH=/devices/virtual/misc/hpet","SUBSYSTEM=misc","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=10","MINOR=228","DEVNAME=hpet","SEQNUM=927"]}
|
||||
{"action":"add","devpath":"/devices/virtual/misc/snapshot","env":["ACTION=add","DEVPATH=/devices/virtual/misc/snapshot","SUBSYSTEM=misc","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=10","MINOR=231","DEVNAME=snapshot","SEQNUM=928"]}
|
||||
{"action":"add","devpath":"/devices/virtual/misc/udmabuf","env":["ACTION=add","DEVPATH=/devices/virtual/misc/udmabuf","SUBSYSTEM=misc","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=10","MINOR=258","DEVNAME=udmabuf","SEQNUM=929"]}
|
||||
{"action":"add","devpath":"/devices/virtual/misc/userfaultfd","env":["ACTION=add","DEVPATH=/devices/virtual/misc/userfaultfd","SUBSYSTEM=misc","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=10","MINOR=257","DEVNAME=userfaultfd","SEQNUM=930"]}
|
||||
{"action":"add","devpath":"/devices/virtual/misc/vga_arbiter","env":["ACTION=add","DEVPATH=/devices/virtual/misc/vga_arbiter","SUBSYSTEM=misc","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=10","MINOR=256","DEVNAME=vga_arbiter","SEQNUM=931"]}
|
||||
{"action":"add","devpath":"/devices/virtual/net/lo","env":["ACTION=add","DEVPATH=/devices/virtual/net/lo","SUBSYSTEM=net","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","INTERFACE=lo","IFINDEX=1","SEQNUM=932"]}
|
||||
{"action":"add","devpath":"/devices/virtual/thermal/cooling_device0","env":["ACTION=add","DEVPATH=/devices/virtual/thermal/cooling_device0","SUBSYSTEM=thermal","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=933"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/console","env":["ACTION=add","DEVPATH=/devices/virtual/tty/console","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=5","MINOR=1","DEVNAME=console","SEQNUM=934"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/ptmx","env":["ACTION=add","DEVPATH=/devices/virtual/tty/ptmx","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=5","MINOR=2","DEVNAME=ptmx","DEVMODE=0666","SEQNUM=935"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=5","MINOR=0","DEVNAME=tty","DEVMODE=0666","SEQNUM=936"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty0","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty0","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=0","DEVNAME=tty0","SEQNUM=937"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty1","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty1","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=1","DEVNAME=tty1","SEQNUM=938"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty10","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty10","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=10","DEVNAME=tty10","SEQNUM=939"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty11","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty11","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=11","DEVNAME=tty11","SEQNUM=940"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty12","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty12","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=12","DEVNAME=tty12","SEQNUM=941"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty13","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty13","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=13","DEVNAME=tty13","SEQNUM=942"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty14","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty14","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=14","DEVNAME=tty14","SEQNUM=943"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty15","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty15","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=15","DEVNAME=tty15","SEQNUM=944"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty16","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty16","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=16","DEVNAME=tty16","SEQNUM=945"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty17","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty17","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=17","DEVNAME=tty17","SEQNUM=946"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty18","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty18","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=18","DEVNAME=tty18","SEQNUM=947"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty19","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty19","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=19","DEVNAME=tty19","SEQNUM=948"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty2","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty2","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=2","DEVNAME=tty2","SEQNUM=949"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty20","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty20","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=20","DEVNAME=tty20","SEQNUM=950"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty21","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty21","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=21","DEVNAME=tty21","SEQNUM=951"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty22","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty22","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=22","DEVNAME=tty22","SEQNUM=952"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty23","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty23","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=23","DEVNAME=tty23","SEQNUM=953"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty24","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty24","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=24","DEVNAME=tty24","SEQNUM=954"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty25","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty25","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=25","DEVNAME=tty25","SEQNUM=955"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty26","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty26","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=26","DEVNAME=tty26","SEQNUM=956"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty27","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty27","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=27","DEVNAME=tty27","SEQNUM=957"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty28","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty28","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=28","DEVNAME=tty28","SEQNUM=958"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty29","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty29","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=29","DEVNAME=tty29","SEQNUM=959"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty3","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty3","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=3","DEVNAME=tty3","SEQNUM=960"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty30","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty30","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=30","DEVNAME=tty30","SEQNUM=961"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty31","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty31","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=31","DEVNAME=tty31","SEQNUM=962"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty32","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty32","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=32","DEVNAME=tty32","SEQNUM=963"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty33","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty33","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=33","DEVNAME=tty33","SEQNUM=964"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty34","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty34","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=34","DEVNAME=tty34","SEQNUM=965"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty35","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty35","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=35","DEVNAME=tty35","SEQNUM=966"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty36","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty36","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=36","DEVNAME=tty36","SEQNUM=967"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty37","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty37","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=37","DEVNAME=tty37","SEQNUM=968"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty38","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty38","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=38","DEVNAME=tty38","SEQNUM=969"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty39","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty39","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=39","DEVNAME=tty39","SEQNUM=970"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty4","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty4","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=4","DEVNAME=tty4","SEQNUM=971"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty40","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty40","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=40","DEVNAME=tty40","SEQNUM=972"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty41","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty41","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=41","DEVNAME=tty41","SEQNUM=973"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty42","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty42","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=42","DEVNAME=tty42","SEQNUM=974"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty43","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty43","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=43","DEVNAME=tty43","SEQNUM=975"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty44","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty44","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=44","DEVNAME=tty44","SEQNUM=976"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty45","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty45","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=45","DEVNAME=tty45","SEQNUM=977"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty46","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty46","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=46","DEVNAME=tty46","SEQNUM=978"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty47","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty47","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=47","DEVNAME=tty47","SEQNUM=979"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty48","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty48","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=48","DEVNAME=tty48","SEQNUM=980"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty49","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty49","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=49","DEVNAME=tty49","SEQNUM=981"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty5","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty5","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=5","DEVNAME=tty5","SEQNUM=982"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty50","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty50","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=50","DEVNAME=tty50","SEQNUM=983"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty51","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty51","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=51","DEVNAME=tty51","SEQNUM=984"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty52","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty52","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=52","DEVNAME=tty52","SEQNUM=985"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty53","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty53","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=53","DEVNAME=tty53","SEQNUM=986"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty54","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty54","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=54","DEVNAME=tty54","SEQNUM=987"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty55","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty55","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=55","DEVNAME=tty55","SEQNUM=988"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty56","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty56","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=56","DEVNAME=tty56","SEQNUM=989"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty57","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty57","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=57","DEVNAME=tty57","SEQNUM=990"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty58","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty58","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=58","DEVNAME=tty58","SEQNUM=991"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty59","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty59","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=59","DEVNAME=tty59","SEQNUM=992"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty6","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty6","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=6","DEVNAME=tty6","SEQNUM=993"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty60","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty60","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=60","DEVNAME=tty60","SEQNUM=994"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty61","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty61","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=61","DEVNAME=tty61","SEQNUM=995"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty62","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty62","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=62","DEVNAME=tty62","SEQNUM=996"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty63","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty63","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=63","DEVNAME=tty63","SEQNUM=997"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty7","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty7","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=7","DEVNAME=tty7","SEQNUM=998"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty8","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty8","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=8","DEVNAME=tty8","SEQNUM=999"]}
|
||||
{"action":"add","devpath":"/devices/virtual/tty/tty9","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty9","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=9","DEVNAME=tty9","SEQNUM=1000"]}
|
||||
{"action":"add","devpath":"/devices/virtual/vc/vcs","env":["ACTION=add","DEVPATH=/devices/virtual/vc/vcs","SUBSYSTEM=vc","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=7","MINOR=0","DEVNAME=vcs","SEQNUM=1001"]}
|
||||
{"action":"add","devpath":"/devices/virtual/vc/vcs1","env":["ACTION=add","DEVPATH=/devices/virtual/vc/vcs1","SUBSYSTEM=vc","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=7","MINOR=1","DEVNAME=vcs1","SEQNUM=1002"]}
|
||||
{"action":"add","devpath":"/devices/virtual/vc/vcsa","env":["ACTION=add","DEVPATH=/devices/virtual/vc/vcsa","SUBSYSTEM=vc","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=7","MINOR=128","DEVNAME=vcsa","SEQNUM=1003"]}
|
||||
{"action":"add","devpath":"/devices/virtual/vc/vcsa1","env":["ACTION=add","DEVPATH=/devices/virtual/vc/vcsa1","SUBSYSTEM=vc","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=7","MINOR=129","DEVNAME=vcsa1","SEQNUM=1004"]}
|
||||
{"action":"add","devpath":"/devices/virtual/vc/vcsu","env":["ACTION=add","DEVPATH=/devices/virtual/vc/vcsu","SUBSYSTEM=vc","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=7","MINOR=64","DEVNAME=vcsu","SEQNUM=1005"]}
|
||||
{"action":"add","devpath":"/devices/virtual/vc/vcsu1","env":["ACTION=add","DEVPATH=/devices/virtual/vc/vcsu1","SUBSYSTEM=vc","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=7","MINOR=65","DEVNAME=vcsu1","SEQNUM=1006"]}
|
||||
{"action":"add","devpath":"/devices/virtual/vtconsole/vtcon0","env":["ACTION=add","DEVPATH=/devices/virtual/vtconsole/vtcon0","SUBSYSTEM=vtconsole","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=1007"]}
|
||||
{"action":"add","devpath":"/devices/virtual/workqueue/nvme-auth-wq","env":["ACTION=add","DEVPATH=/devices/virtual/workqueue/nvme-auth-wq","SUBSYSTEM=workqueue","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=1008"]}
|
||||
{"action":"add","devpath":"/devices/virtual/workqueue/nvme-delete-wq","env":["ACTION=add","DEVPATH=/devices/virtual/workqueue/nvme-delete-wq","SUBSYSTEM=workqueue","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=1009"]}
|
||||
{"action":"add","devpath":"/devices/virtual/workqueue/nvme-reset-wq","env":["ACTION=add","DEVPATH=/devices/virtual/workqueue/nvme-reset-wq","SUBSYSTEM=workqueue","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=1010"]}
|
||||
{"action":"add","devpath":"/devices/virtual/workqueue/nvme-wq","env":["ACTION=add","DEVPATH=/devices/virtual/workqueue/nvme-wq","SUBSYSTEM=workqueue","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=1011"]}
|
||||
{"action":"add","devpath":"/devices/virtual/workqueue/scsi_tmf_0","env":["ACTION=add","DEVPATH=/devices/virtual/workqueue/scsi_tmf_0","SUBSYSTEM=workqueue","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=1012"]}
|
||||
{"action":"add","devpath":"/devices/virtual/workqueue/scsi_tmf_1","env":["ACTION=add","DEVPATH=/devices/virtual/workqueue/scsi_tmf_1","SUBSYSTEM=workqueue","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=1013"]}
|
||||
{"action":"add","devpath":"/devices/virtual/workqueue/writeback","env":["ACTION=add","DEVPATH=/devices/virtual/workqueue/writeback","SUBSYSTEM=workqueue","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=1014"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:07/wakeup/wakeup8","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:07/wakeup/wakeup8","SUBSYSTEM=wakeup","SEQNUM=1015"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:04.0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:04.0","SUBSYSTEM=pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:04.0","MODALIAS=pci:v00001AF4d00001059sv00001AF4sd00001100bc04sc01i00","SEQNUM=1016"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:04.0/virtio1","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:04.0/virtio1","SUBSYSTEM=virtio","MODALIAS=virtio:d00000019v00001AF4","SEQNUM=1017"]}
|
||||
{"action":"bind","devpath":"/devices/pci0000:00/0000:00:04.0","env":["ACTION=bind","DEVPATH=/devices/pci0000:00/0000:00:04.0","SUBSYSTEM=pci","DRIVER=virtio-pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:04.0","MODALIAS=pci:v00001AF4d00001059sv00001AF4sd00001100bc04sc01i00","SEQNUM=1018"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:08/wakeup/wakeup9","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:08/wakeup/wakeup9","SUBSYSTEM=wakeup","SEQNUM=1019"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:05.0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:05.0","SUBSYSTEM=pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:05.0","MODALIAS=pci:v00001AF4d00001059sv00001AF4sd00001100bc04sc01i00","SEQNUM=1020"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:05.0/virtio2","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:05.0/virtio2","SUBSYSTEM=virtio","MODALIAS=virtio:d00000019v00001AF4","SEQNUM=1021"]}
|
||||
{"action":"bind","devpath":"/devices/pci0000:00/0000:00:05.0","env":["ACTION=bind","DEVPATH=/devices/pci0000:00/0000:00:05.0","SUBSYSTEM=pci","DRIVER=virtio-pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:05.0","MODALIAS=pci:v00001AF4d00001059sv00001AF4sd00001100bc04sc01i00","SEQNUM=1022"]}
|
||||
{"action":"remove","devpath":"/devices/pci0000:00/0000:00:04.0/virtio1","env":["ACTION=remove","DEVPATH=/devices/pci0000:00/0000:00:04.0/virtio1","SUBSYSTEM=virtio","MODALIAS=virtio:d00000019v00001AF4","SEQNUM=1023"]}
|
||||
{"action":"unbind","devpath":"/devices/pci0000:00/0000:00:04.0","env":["ACTION=unbind","DEVPATH=/devices/pci0000:00/0000:00:04.0","SUBSYSTEM=pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:04.0","SEQNUM=1024"]}
|
||||
{"action":"remove","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:07/wakeup/wakeup8","env":["ACTION=remove","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:07/wakeup/wakeup8","SUBSYSTEM=wakeup","SEQNUM=1025"]}
|
||||
{"action":"remove","devpath":"/devices/pci0000:00/0000:00:04.0","env":["ACTION=remove","DEVPATH=/devices/pci0000:00/0000:00:04.0","SUBSYSTEM=pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:04.0","MODALIAS=pci:v00001AF4d00001059sv00001AF4sd00001100bc04sc01i00","SEQNUM=1026"]}
|
||||
{"action":"remove","devpath":"/devices/pci0000:00/0000:00:05.0/virtio2","env":["ACTION=remove","DEVPATH=/devices/pci0000:00/0000:00:05.0/virtio2","SUBSYSTEM=virtio","MODALIAS=virtio:d00000019v00001AF4","SEQNUM=1027"]}
|
||||
{"action":"unbind","devpath":"/devices/pci0000:00/0000:00:05.0","env":["ACTION=unbind","DEVPATH=/devices/pci0000:00/0000:00:05.0","SUBSYSTEM=pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:05.0","SEQNUM=1028"]}
|
||||
{"action":"remove","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:08/wakeup/wakeup9","env":["ACTION=remove","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:08/wakeup/wakeup9","SUBSYSTEM=wakeup","SEQNUM=1029"]}
|
||||
{"action":"remove","devpath":"/devices/pci0000:00/0000:00:05.0","env":["ACTION=remove","DEVPATH=/devices/pci0000:00/0000:00:05.0","SUBSYSTEM=pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:05.0","MODALIAS=pci:v00001AF4d00001059sv00001AF4sd00001100bc04sc01i00","SEQNUM=1030"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:07/wakeup/wakeup8","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:07/wakeup/wakeup8","SUBSYSTEM=wakeup","SEQNUM=1031"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:04.0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:04.0","SUBSYSTEM=pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:04.0","MODALIAS=pci:v00001AF4d00001059sv00001AF4sd00001100bc04sc01i00","SEQNUM=1032"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:04.0/virtio1","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:04.0/virtio1","SUBSYSTEM=virtio","MODALIAS=virtio:d00000019v00001AF4","SEQNUM=1033"]}
|
||||
{"action":"bind","devpath":"/devices/pci0000:00/0000:00:04.0","env":["ACTION=bind","DEVPATH=/devices/pci0000:00/0000:00:04.0","SUBSYSTEM=pci","DRIVER=virtio-pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:04.0","MODALIAS=pci:v00001AF4d00001059sv00001AF4sd00001100bc04sc01i00","SEQNUM=1034"]}
|
||||
{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:08/wakeup/wakeup9","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:08/wakeup/wakeup9","SUBSYSTEM=wakeup","SEQNUM=1035"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:05.0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:05.0","SUBSYSTEM=pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:05.0","MODALIAS=pci:v00001AF4d00001059sv00001AF4sd00001100bc04sc01i00","SEQNUM=1036"]}
|
||||
{"action":"add","devpath":"/devices/pci0000:00/0000:00:05.0/virtio2","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:05.0/virtio2","SUBSYSTEM=virtio","MODALIAS=virtio:d00000019v00001AF4","SEQNUM=1037"]}
|
||||
{"action":"bind","devpath":"/devices/pci0000:00/0000:00:05.0","env":["ACTION=bind","DEVPATH=/devices/pci0000:00/0000:00:05.0","SUBSYSTEM=pci","DRIVER=virtio-pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:05.0","MODALIAS=pci:v00001AF4d00001059sv00001AF4sd00001100bc04sc01i00","SEQNUM=1038"]}
|
||||
{"action":"remove","devpath":"/devices/pci0000:00/0000:00:05.0/virtio2","env":["ACTION=remove","DEVPATH=/devices/pci0000:00/0000:00:05.0/virtio2","SUBSYSTEM=virtio","MODALIAS=virtio:d00000019v00001AF4","SEQNUM=1039"]}
|
||||
{"action":"unbind","devpath":"/devices/pci0000:00/0000:00:05.0","env":["ACTION=unbind","DEVPATH=/devices/pci0000:00/0000:00:05.0","SUBSYSTEM=pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:05.0","SEQNUM=1040"]}
|
||||
{"action":"remove","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:08/wakeup/wakeup9","env":["ACTION=remove","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:08/wakeup/wakeup9","SUBSYSTEM=wakeup","SEQNUM=1041"]}
|
||||
{"action":"remove","devpath":"/devices/pci0000:00/0000:00:05.0","env":["ACTION=remove","DEVPATH=/devices/pci0000:00/0000:00:05.0","SUBSYSTEM=pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:05.0","MODALIAS=pci:v00001AF4d00001059sv00001AF4sd00001100bc04sc01i00","SEQNUM=1042"]}
|
||||
1
internal/kobject/testdata/01-move
vendored
Normal file
1
internal/kobject/testdata/01-move
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"action":"move","devpath":"/devices/virtual/net/_lo","env":["ACTION=move","DEVPATH=/devices/virtual/net/_lo","SUBSYSTEM=net","DEVPATH_OLD=/devices/virtual/net/lo","INTERFACE=_lo","IFINDEX=1","SEQNUM=1043"]}
|
||||
8
internal/kobject/testdata/02-cpu
vendored
Normal file
8
internal/kobject/testdata/02-cpu
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
{"action":"remove","devpath":"/devices/system/machinecheck/machinecheck0","env":["ACTION=remove","DEVPATH=/devices/system/machinecheck/machinecheck0","SUBSYSTEM=machinecheck","SEQNUM=1044"]}
|
||||
{"action":"offline","devpath":"/devices/system/cpu/cpu0","env":["ACTION=offline","DEVPATH=/devices/system/cpu/cpu0","SUBSYSTEM=cpu","DRIVER=processor","MODALIAS=cpu:type:x86,ven0002fam000Fmod006B:feature:,0000,0002,0003,0004,0005,0006,0007,0008,0009,000B,000C,000D,000E,000F,0010,0011,0013,0017,0018,0019,001A,001C,0020,0022,0023,0024,0025,0026,0027,0028,0029,002B,002C,002D,002E,002F,0030,0031,0034,0037,0038,003D,0064,006E,0070,0074,0075,0076,0079,007A,007F,0080,008D,0095,009F,00C0,00C1,00C8,00ED,00F3,010F,0115,0165,016C,0282\n","SEQNUM=1045"]}
|
||||
{"action":"add","devpath":"/devices/system/machinecheck/machinecheck0","env":["ACTION=add","DEVPATH=/devices/system/machinecheck/machinecheck0","SUBSYSTEM=machinecheck","SEQNUM=1046"]}
|
||||
{"action":"online","devpath":"/devices/system/cpu/cpu0","env":["ACTION=online","DEVPATH=/devices/system/cpu/cpu0","SUBSYSTEM=cpu","DRIVER=processor","MODALIAS=cpu:type:x86,ven0002fam000Fmod006B:feature:,0000,0002,0003,0004,0005,0006,0007,0008,0009,000B,000C,000D,000E,000F,0010,0011,0013,0017,0018,0019,001A,001C,0020,0022,0023,0024,0025,0026,0027,0028,0029,002B,002C,002D,002E,002F,0030,0031,0034,0037,0038,003D,0064,006E,0070,0074,0075,0076,0079,007A,007F,0080,008D,0095,009F,00C0,00C1,00C8,00ED,00F3,010F,0115,0165,016C,0282\n","SEQNUM=1047"]}
|
||||
{"action":"remove","devpath":"/devices/system/machinecheck/machinecheck0","env":["ACTION=remove","DEVPATH=/devices/system/machinecheck/machinecheck0","SUBSYSTEM=machinecheck","SEQNUM=1048"]}
|
||||
{"action":"offline","devpath":"/devices/system/cpu/cpu0","env":["ACTION=offline","DEVPATH=/devices/system/cpu/cpu0","SUBSYSTEM=cpu","DRIVER=processor","MODALIAS=cpu:type:x86,ven0002fam000Fmod006B:feature:,0000,0002,0003,0004,0005,0006,0007,0008,0009,000B,000C,000D,000E,000F,0010,0011,0013,0017,0018,0019,001A,001C,0020,0022,0023,0024,0025,0026,0027,0028,0029,002B,002C,002D,002E,002F,0030,0031,0034,0037,0038,003D,0064,006E,0070,0074,0075,0076,0079,007A,007F,0080,008D,0095,009F,00C0,00C1,00C8,00ED,00F3,010F,0115,0165,016C,0282\n","SEQNUM=1049"]}
|
||||
{"action":"add","devpath":"/devices/system/machinecheck/machinecheck0","env":["ACTION=add","DEVPATH=/devices/system/machinecheck/machinecheck0","SUBSYSTEM=machinecheck","SEQNUM=1050"]}
|
||||
{"action":"online","devpath":"/devices/system/cpu/cpu0","env":["ACTION=online","DEVPATH=/devices/system/cpu/cpu0","SUBSYSTEM=cpu","DRIVER=processor","MODALIAS=cpu:type:x86,ven0002fam000Fmod006B:feature:,0000,0002,0003,0004,0005,0006,0007,0008,0009,000B,000C,000D,000E,000F,0010,0011,0013,0017,0018,0019,001A,001C,0020,0022,0023,0024,0025,0026,0027,0028,0029,002B,002C,002D,002E,002F,0030,0031,0034,0037,0038,003D,0064,006E,0070,0074,0075,0076,0079,007A,007F,0080,008D,0095,009F,00C0,00C1,00C8,00ED,00F3,010F,0115,0165,016C,0282\n","SEQNUM=1051"]}
|
||||
19
internal/kobject/testdata/03-loop
vendored
Normal file
19
internal/kobject/testdata/03-loop
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
{"action":"add","devpath":"/devices/virtual/misc/loop-control","env":["ACTION=add","DEVPATH=/devices/virtual/misc/loop-control","SUBSYSTEM=misc","MAJOR=10","MINOR=237","DEVNAME=loop-control","SEQNUM=1052"]}
|
||||
{"action":"add","devpath":"/devices/virtual/bdi/7:0","env":["ACTION=add","DEVPATH=/devices/virtual/bdi/7:0","SUBSYSTEM=bdi","SEQNUM=1053"]}
|
||||
{"action":"add","devpath":"/devices/virtual/block/loop0","env":["ACTION=add","DEVPATH=/devices/virtual/block/loop0","SUBSYSTEM=block","MAJOR=7","MINOR=0","DEVNAME=loop0","DEVTYPE=disk","DISKSEQ=2","SEQNUM=1054"]}
|
||||
{"action":"add","devpath":"/devices/virtual/bdi/7:1","env":["ACTION=add","DEVPATH=/devices/virtual/bdi/7:1","SUBSYSTEM=bdi","SEQNUM=1055"]}
|
||||
{"action":"add","devpath":"/devices/virtual/block/loop1","env":["ACTION=add","DEVPATH=/devices/virtual/block/loop1","SUBSYSTEM=block","MAJOR=7","MINOR=1","DEVNAME=loop1","DEVTYPE=disk","DISKSEQ=3","SEQNUM=1056"]}
|
||||
{"action":"add","devpath":"/devices/virtual/bdi/7:2","env":["ACTION=add","DEVPATH=/devices/virtual/bdi/7:2","SUBSYSTEM=bdi","SEQNUM=1057"]}
|
||||
{"action":"add","devpath":"/devices/virtual/block/loop2","env":["ACTION=add","DEVPATH=/devices/virtual/block/loop2","SUBSYSTEM=block","MAJOR=7","MINOR=2","DEVNAME=loop2","DEVTYPE=disk","DISKSEQ=4","SEQNUM=1058"]}
|
||||
{"action":"add","devpath":"/devices/virtual/bdi/7:3","env":["ACTION=add","DEVPATH=/devices/virtual/bdi/7:3","SUBSYSTEM=bdi","SEQNUM=1059"]}
|
||||
{"action":"add","devpath":"/devices/virtual/block/loop3","env":["ACTION=add","DEVPATH=/devices/virtual/block/loop3","SUBSYSTEM=block","MAJOR=7","MINOR=3","DEVNAME=loop3","DEVTYPE=disk","DISKSEQ=5","SEQNUM=1060"]}
|
||||
{"action":"add","devpath":"/devices/virtual/bdi/7:4","env":["ACTION=add","DEVPATH=/devices/virtual/bdi/7:4","SUBSYSTEM=bdi","SEQNUM=1061"]}
|
||||
{"action":"add","devpath":"/devices/virtual/block/loop4","env":["ACTION=add","DEVPATH=/devices/virtual/block/loop4","SUBSYSTEM=block","MAJOR=7","MINOR=4","DEVNAME=loop4","DEVTYPE=disk","DISKSEQ=6","SEQNUM=1062"]}
|
||||
{"action":"add","devpath":"/devices/virtual/bdi/7:5","env":["ACTION=add","DEVPATH=/devices/virtual/bdi/7:5","SUBSYSTEM=bdi","SEQNUM=1063"]}
|
||||
{"action":"add","devpath":"/devices/virtual/block/loop5","env":["ACTION=add","DEVPATH=/devices/virtual/block/loop5","SUBSYSTEM=block","MAJOR=7","MINOR=5","DEVNAME=loop5","DEVTYPE=disk","DISKSEQ=7","SEQNUM=1064"]}
|
||||
{"action":"add","devpath":"/devices/virtual/bdi/7:6","env":["ACTION=add","DEVPATH=/devices/virtual/bdi/7:6","SUBSYSTEM=bdi","SEQNUM=1065"]}
|
||||
{"action":"add","devpath":"/devices/virtual/block/loop6","env":["ACTION=add","DEVPATH=/devices/virtual/block/loop6","SUBSYSTEM=block","MAJOR=7","MINOR=6","DEVNAME=loop6","DEVTYPE=disk","DISKSEQ=8","SEQNUM=1066"]}
|
||||
{"action":"add","devpath":"/devices/virtual/bdi/7:7","env":["ACTION=add","DEVPATH=/devices/virtual/bdi/7:7","SUBSYSTEM=bdi","SEQNUM=1067"]}
|
||||
{"action":"add","devpath":"/devices/virtual/block/loop7","env":["ACTION=add","DEVPATH=/devices/virtual/block/loop7","SUBSYSTEM=block","MAJOR=7","MINOR=7","DEVNAME=loop7","DEVTYPE=disk","DISKSEQ=9","SEQNUM=1068"]}
|
||||
{"action":"add","devpath":"/module/loop","env":["ACTION=add","DEVPATH=/module/loop","SUBSYSTEM=module","SEQNUM=1069"]}
|
||||
{"action":"change","devpath":"/devices/virtual/block/loop0","env":["ACTION=change","DEVPATH=/devices/virtual/block/loop0","SUBSYSTEM=block","MAJOR=7","MINOR=0","DEVNAME=loop0","DEVTYPE=disk","DISKSEQ=10","SEQNUM=1070"]}
|
||||
2
internal/kobject/testdata/04-loop-detach
vendored
Normal file
2
internal/kobject/testdata/04-loop-detach
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
{"action":"change","devpath":"/devices/virtual/block/loop0","env":["ACTION=change","DEVPATH=/devices/virtual/block/loop0","SUBSYSTEM=block","MAJOR=7","MINOR=0","DEVNAME=loop0","DEVTYPE=disk","DISKSEQ=10","SEQNUM=1071"]}
|
||||
{"action":"change","devpath":"/devices/virtual/block/loop0","env":["ACTION=change","DEVPATH=/devices/virtual/block/loop0","SUBSYSTEM=block","DISK_MEDIA_CHANGE=1","MAJOR=7","MINOR=0","DEVNAME=loop0","DEVTYPE=disk","DISKSEQ=10","SEQNUM=1072"]}
|
||||
18
internal/kobject/testdata/05-loop-remove
vendored
Normal file
18
internal/kobject/testdata/05-loop-remove
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
{"action":"remove","devpath":"/devices/virtual/misc/loop-control","env":["ACTION=remove","DEVPATH=/devices/virtual/misc/loop-control","SUBSYSTEM=misc","MAJOR=10","MINOR=237","DEVNAME=loop-control","SEQNUM=1073"]}
|
||||
{"action":"remove","devpath":"/devices/virtual/bdi/7:0","env":["ACTION=remove","DEVPATH=/devices/virtual/bdi/7:0","SUBSYSTEM=bdi","SEQNUM=1074"]}
|
||||
{"action":"remove","devpath":"/devices/virtual/block/loop0","env":["ACTION=remove","DEVPATH=/devices/virtual/block/loop0","SUBSYSTEM=block","MAJOR=7","MINOR=0","DEVNAME=loop0","DEVTYPE=disk","DISKSEQ=11","SEQNUM=1075"]}
|
||||
{"action":"remove","devpath":"/devices/virtual/bdi/7:1","env":["ACTION=remove","DEVPATH=/devices/virtual/bdi/7:1","SUBSYSTEM=bdi","SEQNUM=1076"]}
|
||||
{"action":"remove","devpath":"/devices/virtual/block/loop1","env":["ACTION=remove","DEVPATH=/devices/virtual/block/loop1","SUBSYSTEM=block","MAJOR=7","MINOR=1","DEVNAME=loop1","DEVTYPE=disk","DISKSEQ=3","SEQNUM=1077"]}
|
||||
{"action":"remove","devpath":"/devices/virtual/bdi/7:2","env":["ACTION=remove","DEVPATH=/devices/virtual/bdi/7:2","SUBSYSTEM=bdi","SEQNUM=1078"]}
|
||||
{"action":"remove","devpath":"/devices/virtual/block/loop2","env":["ACTION=remove","DEVPATH=/devices/virtual/block/loop2","SUBSYSTEM=block","MAJOR=7","MINOR=2","DEVNAME=loop2","DEVTYPE=disk","DISKSEQ=4","SEQNUM=1079"]}
|
||||
{"action":"remove","devpath":"/devices/virtual/bdi/7:3","env":["ACTION=remove","DEVPATH=/devices/virtual/bdi/7:3","SUBSYSTEM=bdi","SEQNUM=1080"]}
|
||||
{"action":"remove","devpath":"/devices/virtual/block/loop3","env":["ACTION=remove","DEVPATH=/devices/virtual/block/loop3","SUBSYSTEM=block","MAJOR=7","MINOR=3","DEVNAME=loop3","DEVTYPE=disk","DISKSEQ=5","SEQNUM=1081"]}
|
||||
{"action":"remove","devpath":"/devices/virtual/bdi/7:4","env":["ACTION=remove","DEVPATH=/devices/virtual/bdi/7:4","SUBSYSTEM=bdi","SEQNUM=1082"]}
|
||||
{"action":"remove","devpath":"/devices/virtual/block/loop4","env":["ACTION=remove","DEVPATH=/devices/virtual/block/loop4","SUBSYSTEM=block","MAJOR=7","MINOR=4","DEVNAME=loop4","DEVTYPE=disk","DISKSEQ=6","SEQNUM=1083"]}
|
||||
{"action":"remove","devpath":"/devices/virtual/bdi/7:5","env":["ACTION=remove","DEVPATH=/devices/virtual/bdi/7:5","SUBSYSTEM=bdi","SEQNUM=1084"]}
|
||||
{"action":"remove","devpath":"/devices/virtual/block/loop5","env":["ACTION=remove","DEVPATH=/devices/virtual/block/loop5","SUBSYSTEM=block","MAJOR=7","MINOR=5","DEVNAME=loop5","DEVTYPE=disk","DISKSEQ=7","SEQNUM=1085"]}
|
||||
{"action":"remove","devpath":"/devices/virtual/bdi/7:6","env":["ACTION=remove","DEVPATH=/devices/virtual/bdi/7:6","SUBSYSTEM=bdi","SEQNUM=1086"]}
|
||||
{"action":"remove","devpath":"/devices/virtual/block/loop6","env":["ACTION=remove","DEVPATH=/devices/virtual/block/loop6","SUBSYSTEM=block","MAJOR=7","MINOR=6","DEVNAME=loop6","DEVTYPE=disk","DISKSEQ=8","SEQNUM=1087"]}
|
||||
{"action":"remove","devpath":"/devices/virtual/bdi/7:7","env":["ACTION=remove","DEVPATH=/devices/virtual/bdi/7:7","SUBSYSTEM=bdi","SEQNUM=1088"]}
|
||||
{"action":"remove","devpath":"/devices/virtual/block/loop7","env":["ACTION=remove","DEVPATH=/devices/virtual/block/loop7","SUBSYSTEM=block","MAJOR=7","MINOR=7","DEVNAME=loop7","DEVTYPE=disk","DISKSEQ=9","SEQNUM=1089"]}
|
||||
{"action":"remove","devpath":"/module/loop","env":["ACTION=remove","DEVPATH=/module/loop","SUBSYSTEM=module","SEQNUM=1090"]}
|
||||
190
internal/report/report.go
Normal file
190
internal/report/report.go
Normal file
@@ -0,0 +1,190 @@
|
||||
package report
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"strconv"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"hakurei.app/check"
|
||||
)
|
||||
|
||||
const (
|
||||
// Trivial denotes an error that may happen frequently under normal operation.
|
||||
Trivial = iota
|
||||
// Inconsistent denotes an error diagnosed due to inconsistent state.
|
||||
Inconsistent
|
||||
// Degraded denotes an error condition causing a degraded state.
|
||||
Degraded
|
||||
// Fatal denotes an unrecoverable error. This is generally followed by
|
||||
// notifying the user and suggesting immediate restart, or an automatic
|
||||
// restart of a nonessential daemon process.
|
||||
Fatal
|
||||
)
|
||||
|
||||
// A Reporter represents an error reporting object backed by user-facing display
|
||||
// and optional persistent storage. A Reporter can be used simultaneously from
|
||||
// multiple goroutines.
|
||||
type Reporter struct {
|
||||
// Backing logger, the zero value implies the return value of [log.Default].
|
||||
log atomic.Pointer[log.Logger]
|
||||
// Backing persistent storage.
|
||||
pathname atomic.Pointer[check.Absolute]
|
||||
// Reporting behaviour.
|
||||
flag atomic.Uint64
|
||||
|
||||
// Caller-supplied reporting functions.
|
||||
notify []func(e Error)
|
||||
// Synchronises access to notify.
|
||||
notifyMu sync.RWMutex
|
||||
|
||||
// Synchronises access to persistent storage.
|
||||
mu sync.Mutex
|
||||
}
|
||||
|
||||
// SetOutput sets the backing [log.Logger].
|
||||
func (r *Reporter) SetOutput(l *log.Logger) { r.log.Store(l) }
|
||||
|
||||
// SetPathname sets the pathname to persistent storage.
|
||||
func (r *Reporter) SetPathname(a *check.Absolute) { r.pathname.Store(a) }
|
||||
|
||||
const (
|
||||
// DStrict causes all dispatches to end in a call to panic.
|
||||
DStrict = 1 << iota
|
||||
// DNoRecover disallows recovering from error write to persistent storage.
|
||||
DNoRecover
|
||||
// DBypassEarly allows persistent storage to be skipped before it is ready.
|
||||
DBypassEarly
|
||||
)
|
||||
|
||||
// SetFlags sets flags for r.
|
||||
func (r *Reporter) SetFlags(flag uint64) { r.flag.Store(flag) }
|
||||
|
||||
// An Error represents an error reported via [Reporter.Dispatch].
|
||||
type Error struct {
|
||||
// Nature of error.
|
||||
Severity int
|
||||
// User-facing reporting message.
|
||||
Message string
|
||||
// Underlying error.
|
||||
Err error
|
||||
}
|
||||
|
||||
// RepresentableError is implemented by errors friendly to JSON serialisation.
|
||||
type RepresentableError interface {
|
||||
error
|
||||
Representable()
|
||||
}
|
||||
|
||||
// MarshalJSON returns an incomplete JSON representation of e.
|
||||
func (e Error) MarshalJSON() (data []byte, err error) {
|
||||
v := struct {
|
||||
Severity any `json:"kind"`
|
||||
Message string `json:"message"`
|
||||
Err json.RawMessage `json:"error"`
|
||||
}{Message: e.Message}
|
||||
|
||||
switch e.Severity {
|
||||
case Trivial:
|
||||
v.Severity = "trivial"
|
||||
case Inconsistent:
|
||||
v.Severity = "inconsistent"
|
||||
case Degraded:
|
||||
v.Severity = "degradation"
|
||||
case Fatal:
|
||||
v.Severity = "fatal"
|
||||
default:
|
||||
v.Severity = e.Severity
|
||||
}
|
||||
|
||||
var re RepresentableError
|
||||
if errors.As(e.Err, &re) {
|
||||
v.Err, err = json.Marshal(re)
|
||||
} else {
|
||||
v.Err, err = json.Marshal(e.Err.Error())
|
||||
}
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
return json.Marshal(&v)
|
||||
}
|
||||
|
||||
// Error is generally only called during a [Reporter.Dispatch] call ending in
|
||||
// a panic or an otherwise unrecoverable condition.
|
||||
func (e Error) Error() string {
|
||||
return fmt.Sprintf("%s: %v", e.Message, e.Err)
|
||||
}
|
||||
|
||||
// Notify arranges for f to be called for all future dispatched errors.
|
||||
func (r *Reporter) Notify(f func(Error)) {
|
||||
r.notifyMu.Lock()
|
||||
r.notify = append(r.notify, f)
|
||||
r.notifyMu.Unlock()
|
||||
}
|
||||
|
||||
// getLog returns the address of the underlying [log.Logger], or the return
|
||||
// value of [log.Default].
|
||||
func (r *Reporter) getLog() *log.Logger {
|
||||
l := r.log.Load()
|
||||
if l == nil {
|
||||
l = log.Default()
|
||||
}
|
||||
return l
|
||||
}
|
||||
|
||||
// dispatch implements Dispatch but returns the reporting error.
|
||||
func (r *Reporter) dispatch(severity int, message string, e error) (err error) {
|
||||
p := Error{severity, message, e}
|
||||
r.getLog().Println(message+":", e)
|
||||
|
||||
flag := r.flag.Load()
|
||||
defer func() {
|
||||
if flag&DNoRecover != 0 && err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}()
|
||||
|
||||
if a := r.pathname.Load(); a != nil {
|
||||
var w *os.File
|
||||
r.mu.Lock()
|
||||
w, err = os.OpenFile(
|
||||
a.Append(strconv.FormatUint(uint64(time.Now().UnixNano()), 10)).String(),
|
||||
os.O_CREATE|os.O_EXCL|os.O_WRONLY,
|
||||
0400,
|
||||
)
|
||||
if err != nil {
|
||||
r.mu.Unlock()
|
||||
return
|
||||
}
|
||||
err = json.NewEncoder(w).Encode(p)
|
||||
if _err := w.Close(); err == nil {
|
||||
err = _err
|
||||
}
|
||||
r.mu.Unlock()
|
||||
} else if flag&DBypassEarly == 0 && severity != Trivial {
|
||||
panic(p)
|
||||
}
|
||||
|
||||
if flag&DStrict != 0 && severity != Trivial {
|
||||
panic(p)
|
||||
}
|
||||
|
||||
r.notifyMu.RLock()
|
||||
defer r.notifyMu.RUnlock()
|
||||
for _, f := range r.notify {
|
||||
f(p)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Dispatch reports an error and saves it to backing storage if available.
|
||||
func (r *Reporter) Dispatch(severity int, message string, e error) {
|
||||
if err := r.dispatch(severity, message, e); err != nil {
|
||||
r.getLog().Println(err)
|
||||
}
|
||||
}
|
||||
214
internal/report/report_test.go
Normal file
214
internal/report/report_test.go
Normal file
@@ -0,0 +1,214 @@
|
||||
package report_test
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"log"
|
||||
"os"
|
||||
"reflect"
|
||||
"slices"
|
||||
"testing"
|
||||
"unsafe"
|
||||
|
||||
"hakurei.app/check"
|
||||
"hakurei.app/internal/kobject"
|
||||
"hakurei.app/internal/report"
|
||||
"hakurei.app/internal/stub"
|
||||
"hakurei.app/internal/uevent"
|
||||
)
|
||||
|
||||
type representableUE struct{ stub.UniqueError }
|
||||
|
||||
func (representableUE) Representable() {}
|
||||
|
||||
func TestDispatch(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
testCases := []struct {
|
||||
name string
|
||||
flag uint64
|
||||
errs []report.Error
|
||||
|
||||
persist bool
|
||||
wantFiles []string
|
||||
wantLog string
|
||||
wantPanic error
|
||||
}{
|
||||
{"default", 0, []report.Error{
|
||||
{
|
||||
Severity: report.Fatal,
|
||||
Message: "rejecting coldboot loop",
|
||||
Err: stub.UniqueError(0xcafe),
|
||||
},
|
||||
{
|
||||
Severity: report.Inconsistent,
|
||||
Message: "processed inconsistent uevent",
|
||||
Err: (&kobject.Event{
|
||||
Action: uevent.KOBJ_ADD,
|
||||
DevPath: "\x00",
|
||||
Env: map[string]string{"V": "\xfd"},
|
||||
Sequence: 2,
|
||||
}).NewError(kobject.EDuplicateAdd, &kobject.Object{
|
||||
State: kobject.StateNew,
|
||||
DevPath: "\x00",
|
||||
Env: map[string]string{"V": "\xff"},
|
||||
}),
|
||||
},
|
||||
}, true, []string{`{"kind":"fatal","message":"rejecting coldboot loop","error":"unique error 51966 injected by the test suite"}
|
||||
`, `{"kind":"inconsistent","message":"processed inconsistent uevent","error":{"fault":1,"event":{"action":"add","devpath":"\u0000","env":{"V":"\ufffd"},"seqnum":2,"subsystem":""},"object":{"state":1,"devpath":"\u0000","subsystem":"","env":{"V":"\ufffd"}}}}
|
||||
`}, `dispatch: rejecting coldboot loop: unique error 51966 injected by the test suite
|
||||
dispatch: processed inconsistent uevent: duplicate add event on devpath "\x00"
|
||||
`, nil},
|
||||
|
||||
{"strict", report.DStrict, []report.Error{
|
||||
{
|
||||
Severity: report.Degraded,
|
||||
Message: "rejecting coldboot loop",
|
||||
Err: stub.UniqueError(0xcafe),
|
||||
},
|
||||
}, true, []string{
|
||||
`{"kind":"degradation","message":"rejecting coldboot loop","error":"unique error 51966 injected by the test suite"}
|
||||
`,
|
||||
}, "dispatch: rejecting coldboot loop: unique error 51966 injected by the test suite\n", report.Error{
|
||||
Severity: report.Degraded,
|
||||
Message: "rejecting coldboot loop",
|
||||
Err: stub.UniqueError(0xcafe),
|
||||
}},
|
||||
|
||||
{"strict no recover", report.DStrict | report.DNoRecover, []report.Error{
|
||||
{
|
||||
Severity: report.Inconsistent,
|
||||
Message: "rejecting coldboot loop",
|
||||
Err: stub.UniqueError(0xcafe),
|
||||
},
|
||||
}, true, []string{
|
||||
`{"kind":"inconsistent","message":"rejecting coldboot loop","error":"unique error 51966 injected by the test suite"}
|
||||
`,
|
||||
}, "dispatch: rejecting coldboot loop: unique error 51966 injected by the test suite\n", report.Error{
|
||||
Severity: report.Inconsistent,
|
||||
Message: "rejecting coldboot loop",
|
||||
Err: stub.UniqueError(0xcafe),
|
||||
}},
|
||||
|
||||
{"no recover", report.DNoRecover, []report.Error{
|
||||
{
|
||||
Severity: 0xbeef,
|
||||
Message: "rejecting coldboot loop",
|
||||
Err: representableUE{stub.UniqueError(0xcafe)},
|
||||
},
|
||||
}, true, []string{
|
||||
`{"kind":48879,"message":"rejecting coldboot loop","error":{"UniqueError":51966}}
|
||||
`,
|
||||
}, "dispatch: rejecting coldboot loop: unique error 51966 injected by the test suite\n", nil},
|
||||
|
||||
{"early", 0, []report.Error{
|
||||
{
|
||||
Severity: report.Fatal,
|
||||
Message: "rejecting coldboot loop",
|
||||
Err: stub.UniqueError(0xcafe),
|
||||
},
|
||||
}, false, nil, "dispatch: rejecting coldboot loop: unique error 51966 injected by the test suite\n", report.Error{
|
||||
Severity: report.Fatal,
|
||||
Message: "rejecting coldboot loop",
|
||||
Err: stub.UniqueError(0xcafe),
|
||||
}},
|
||||
|
||||
{"bypass early", report.DBypassEarly, []report.Error{
|
||||
{
|
||||
Severity: report.Fatal,
|
||||
Message: "rejecting coldboot loop",
|
||||
Err: stub.UniqueError(0xcafe),
|
||||
},
|
||||
}, false, nil, "dispatch: rejecting coldboot loop: unique error 51966 injected by the test suite\n", nil},
|
||||
}
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var r report.Reporter
|
||||
r.SetFlags(tc.flag)
|
||||
var buf bytes.Buffer
|
||||
l := log.New(&buf, "dispatch: ", 0)
|
||||
r.SetOutput(l)
|
||||
|
||||
a := check.MustAbs(t.TempDir())
|
||||
if tc.persist {
|
||||
r.SetPathname(a)
|
||||
}
|
||||
|
||||
var got []report.Error
|
||||
r.Notify(func(p report.Error) { got = append(got, p) })
|
||||
|
||||
var gotPanic any
|
||||
func() {
|
||||
defer func() { gotPanic = recover() }()
|
||||
for _, p := range tc.errs {
|
||||
r.Dispatch(p.Severity, p.Message, p.Err)
|
||||
}
|
||||
}()
|
||||
|
||||
if gotPanic == nil && !reflect.DeepEqual(got, tc.errs) {
|
||||
t.Errorf("Dispatch: %#v, want %#v", got, tc.errs)
|
||||
}
|
||||
if !reflect.DeepEqual(gotPanic, tc.wantPanic) {
|
||||
t.Errorf("Dispatch: panic = %v, want %v", gotPanic, tc.wantPanic)
|
||||
}
|
||||
if gotLog := buf.String(); gotLog != tc.wantLog {
|
||||
t.Errorf("Dispatch: log =\n%s\nwant\n%s", gotLog, tc.wantLog)
|
||||
}
|
||||
|
||||
if tc.persist {
|
||||
var names []string
|
||||
if dents, err := os.ReadDir(a.String()); err != nil {
|
||||
t.Fatal(err)
|
||||
} else {
|
||||
names = make([]string, len(dents))
|
||||
for i, dent := range dents {
|
||||
names[i] = dent.Name()
|
||||
}
|
||||
slices.Sort(names)
|
||||
}
|
||||
|
||||
gotFiles := make([]string, len(names))
|
||||
for i, name := range names {
|
||||
if p, err := os.ReadFile(a.Append(name).String()); err != nil {
|
||||
t.Fatal(err)
|
||||
} else {
|
||||
gotFiles[i] = unsafe.String(unsafe.SliceData(p), len(p))
|
||||
}
|
||||
}
|
||||
|
||||
if !slices.Equal(gotFiles, tc.wantFiles) {
|
||||
t.Errorf("Dispatch: persist = %s, want %s", gotFiles, tc.wantFiles)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestBadPersist(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var r report.Reporter
|
||||
r.SetFlags(report.DNoRecover)
|
||||
r.SetPathname(check.MustAbs("/proc/nonexistent"))
|
||||
|
||||
var pathError *os.PathError
|
||||
func() {
|
||||
defer func() {
|
||||
if !errors.As(recover().(error), &pathError) {
|
||||
t.Fatal("invalid panic kind")
|
||||
}
|
||||
}()
|
||||
r.Dispatch(report.Fatal, "\x00", stub.UniqueError(0xbad))
|
||||
}()
|
||||
if !errors.Is(pathError.Err, os.ErrNotExist) {
|
||||
t.Fatalf("Dispatch: panic = %v", pathError)
|
||||
}
|
||||
|
||||
var buf bytes.Buffer
|
||||
l := log.New(&buf, "persist: ", 0)
|
||||
r.SetOutput(l)
|
||||
r.SetFlags(0)
|
||||
r.Dispatch(report.Fatal, "\x00", stub.UniqueError(0xbad))
|
||||
}
|
||||
@@ -209,7 +209,7 @@ func (p *parser) parseExpr() any {
|
||||
case '=':
|
||||
break
|
||||
|
||||
case '*':
|
||||
case '#':
|
||||
arg.R = true
|
||||
p.scanAs('=')
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@ func TestEvaluate(t *testing.T) {
|
||||
Err: UndefinedError("v"),
|
||||
}},
|
||||
|
||||
{"apply bound undefined", `f { _v* = "\x00"; v = _v; }`, makeStackCheck(func(
|
||||
{"apply bound undefined", `f { _v# = "\x00"; v = _v; }`, makeStackCheck(func(
|
||||
args FArgs,
|
||||
) (v any, err error) {
|
||||
v = "\xfd"
|
||||
@@ -124,7 +124,7 @@ func TestEvaluate(t *testing.T) {
|
||||
Err: ErrInvalidSpecial,
|
||||
}},
|
||||
|
||||
{"bound inputs", `package name { inputs* = []; }`, nil, "", EvaluationError{
|
||||
{"bound inputs", `package name { inputs# = []; }`, nil, "", EvaluationError{
|
||||
Expr: Func{
|
||||
Ident: Ident("name"),
|
||||
Package: true,
|
||||
@@ -136,7 +136,7 @@ func TestEvaluate(t *testing.T) {
|
||||
Err: ErrInvalidSpecial,
|
||||
}},
|
||||
|
||||
{"bound runtime", `package name { runtime* = []; }`, nil, "", EvaluationError{
|
||||
{"bound runtime", `package name { runtime# = []; }`, nil, "", EvaluationError{
|
||||
Expr: Func{
|
||||
Ident: Ident("name"),
|
||||
Package: true,
|
||||
|
||||
2
internal/rosa/azalea/testdata/gcc.az
vendored
2
internal/rosa/azalea/testdata/gcc.az
vendored
@@ -3,7 +3,7 @@ package gcc {
|
||||
website = "https://www.gnu.org/software/gcc";
|
||||
anitya = 6502;
|
||||
|
||||
version* = "16.1.0";
|
||||
version# = "16.1.0";
|
||||
source = remoteTar {
|
||||
url = "https://ftp.tsukuba.wide.ad.jp/software/gcc/releases/"+
|
||||
"gcc-"+version+"/gcc-"+version+".tar.gz";
|
||||
|
||||
@@ -98,6 +98,6 @@ cmake -G ` + generate + ` \
|
||||
-DCMAKE_INSTALL_PREFIX=/system \
|
||||
'/usr/src/` + name + `/` + filepath.Join(attr.Append...) + `'
|
||||
cmake --build . --parallel=` + jobsE + `
|
||||
cmake --install . --prefix=/work/system
|
||||
DESTDIR=/work cmake --install .
|
||||
` + script
|
||||
}
|
||||
|
||||
@@ -28,6 +28,8 @@ type MakeHelper struct {
|
||||
SkipConfigure bool
|
||||
// Alternative name for the configure script.
|
||||
ConfigureName string
|
||||
// Add autoconf arguments regardless of ConfigureName.
|
||||
ForceAutoconf bool
|
||||
// Flags passed to the configure script.
|
||||
Configure []KV
|
||||
// Host target triple, zero value is equivalent to the Rosa OS triple.
|
||||
@@ -100,9 +102,11 @@ func (attr *MakeHelper) script(t Toolchain, name string) string {
|
||||
if !attr.SkipConfigure {
|
||||
configure = attr.ConfigureName
|
||||
if configure == "" {
|
||||
configure += `/usr/src/` + name + `/configure \
|
||||
configure += `/usr/src/` + name + `/configure`
|
||||
}
|
||||
if attr.ForceAutoconf || attr.ConfigureName == "" {
|
||||
configure += ` \
|
||||
--prefix=/system`
|
||||
|
||||
host := `"${ROSA_TRIPLE}"`
|
||||
if attr.Host != "" {
|
||||
host = attr.Host
|
||||
|
||||
@@ -20,6 +20,8 @@ type MesonHelper struct {
|
||||
Setup []KV
|
||||
// Whether to skip meson test.
|
||||
SkipTest bool
|
||||
// Run tests with interactive input/output.
|
||||
InteractiveTest bool
|
||||
}
|
||||
|
||||
var _ Helper = new(MesonHelper)
|
||||
@@ -55,6 +57,10 @@ func (attr *MesonHelper) script(t Toolchain, name string) string {
|
||||
scriptTest = `
|
||||
meson test \
|
||||
--print-errorlogs`
|
||||
if attr.InteractiveTest {
|
||||
scriptTest += ` \
|
||||
--interactive`
|
||||
}
|
||||
}
|
||||
|
||||
return `
|
||||
|
||||
@@ -3,7 +3,7 @@ package attr {
|
||||
website = "https://savannah.nongnu.org/projects/attr";
|
||||
anitya = 137;
|
||||
|
||||
version* = "2.5.2";
|
||||
version# = "2.5.2";
|
||||
source = remoteTar {
|
||||
url = "https://download.savannah.nongnu.org/releases/attr/"+
|
||||
"attr-"+version+".tar.gz";
|
||||
@@ -29,7 +29,7 @@ package acl {
|
||||
website = "https://savannah.nongnu.org/projects/acl";
|
||||
anitya = 16;
|
||||
|
||||
version* = "2.3.2";
|
||||
version# = "2.3.2";
|
||||
source = remoteTar {
|
||||
url = "https://download.savannah.nongnu.org/releases/acl/"+
|
||||
"acl-"+version+".tar.gz";
|
||||
|
||||
@@ -1,22 +1,25 @@
|
||||
package argp-standalone {
|
||||
description = "hierarchical argument parsing library broken out from glibc"
|
||||
website = "http://www.lysator.liu.se/~nisse/misc"
|
||||
description = "hierarchical argument parsing library broken out from glibc";
|
||||
website = "http://www.lysator.liu.se/~nisse/misc";
|
||||
|
||||
version# = "1.3"
|
||||
version# = "1.3";
|
||||
source = remoteTar {
|
||||
url = "http://www.lysator.liu.se/~nisse/misc/argp-standalone-${version}.tar.gz"
|
||||
checksum = "vtW0VyO2pJ-hPyYmDI2zwSLS8QL0sPAUKC1t3zNYbwN2TmsaE-fADhaVtNd3eNFl"
|
||||
compress = gzip
|
||||
}
|
||||
url = "http://www.lysator.liu.se/~nisse/misc/"+
|
||||
"argp-standalone-"+version+".tar.gz";
|
||||
checksum = "vtW0VyO2pJ-hPyYmDI2zwSLS8QL0sPAUKC1t3zNYbwN2TmsaE-fADhaVtNd3eNFl";
|
||||
compress = gzip;
|
||||
};
|
||||
|
||||
env = [
|
||||
"CC=cc -std=gnu89 -fPIC"
|
||||
]
|
||||
"CC=cc -std=gnu89 -fPIC",
|
||||
];
|
||||
|
||||
exec = make {
|
||||
install = `install -D -m644 /usr/src/argp-standalone/argp.h /work/system/include/argp.h
|
||||
install -D -m755 libargp.a /work/system/lib/libargp.a`
|
||||
}
|
||||
install = `
|
||||
install -D -m644 /usr/src/argp-standalone/argp.h /work/system/include/argp.h
|
||||
install -D -m755 libargp.a /work/system/lib/libargp.a
|
||||
`;
|
||||
};
|
||||
|
||||
inputs = [ diffutils ]
|
||||
inputs = [ diffutils ];
|
||||
}
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
az 0.1.0
|
||||
schema mbf
|
||||
@@ -1,25 +1,30 @@
|
||||
package bison {
|
||||
description = "a general-purpose parser generator"
|
||||
website = "https://www.gnu.org/software/bison"
|
||||
anitya = 193
|
||||
description = "a general-purpose parser generator";
|
||||
website = "https://www.gnu.org/software/bison";
|
||||
anitya = 193;
|
||||
|
||||
version# = "3.8.2"
|
||||
version# = "3.8.2";
|
||||
source = remoteTar {
|
||||
url = "https://ftpmirror.gnu.org/gnu/bison/bison-${version}.tar.gz"
|
||||
checksum = "BhRM6K7URj1LNOkIDCFDctSErLS-Xo5d9ba9seg10o6ACrgC1uNhED7CQPgIY29Y"
|
||||
compress = gzip
|
||||
}
|
||||
url = "https://ftpmirror.gnu.org/gnu/bison/bison-"+version+".tar.gz";
|
||||
checksum = "BhRM6K7URj1LNOkIDCFDctSErLS-Xo5d9ba9seg10o6ACrgC1uNhED7CQPgIY29Y";
|
||||
compress = gzip;
|
||||
};
|
||||
|
||||
exec = make {
|
||||
check = [
|
||||
"TESTSUITEFLAGS=${jobsFlagE}' ${skipGNUTests(764)}'"
|
||||
"check"
|
||||
]
|
||||
}
|
||||
"TESTSUITEFLAGS=" + jobsFlagE + "' " + skipGNUTests {
|
||||
tests = [
|
||||
// clang miscompiles (SIGILL)
|
||||
764,
|
||||
];
|
||||
} + "'",
|
||||
"check",
|
||||
];
|
||||
};
|
||||
|
||||
inputs = [
|
||||
m4
|
||||
diffutils
|
||||
sed
|
||||
]
|
||||
m4,
|
||||
diffutils,
|
||||
sed,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
package buildcatrust {
|
||||
description = "transform certificate stores between formats"
|
||||
website = "https://github.com/nix-community/buildcatrust"
|
||||
anitya = 233988
|
||||
description = "transform certificate stores between formats";
|
||||
website = "https://github.com/nix-community/buildcatrust";
|
||||
anitya = 233988;
|
||||
|
||||
version := "0.5.1"
|
||||
version# = "0.5.1";
|
||||
source = remoteGitHub {
|
||||
suffix = "nix-community/buildcatrust"
|
||||
tag = "v"+version
|
||||
checksum = "oxjnuIrPVMPvD6x8VFLqB7EdbfuhouGQdtPuHDpEHGzoyH5nkxqtYN9UthMY9noA"
|
||||
}
|
||||
suffix = "nix-community/buildcatrust";
|
||||
tag = "v"+version;
|
||||
checksum = "oxjnuIrPVMPvD6x8VFLqB7EdbfuhouGQdtPuHDpEHGzoyH5nkxqtYN9UthMY9noA";
|
||||
};
|
||||
|
||||
early = "rm buildcatrust/tests/test_nonhermetic.py"
|
||||
early = "\nrm buildcatrust/tests/test_nonhermetic.py\n";
|
||||
|
||||
exec = pip()
|
||||
exec = pip {};
|
||||
|
||||
inputs = [ python-flit-core ]
|
||||
runtime = [ python ]
|
||||
inputs = [ python-flit-core ];
|
||||
runtime = [ python ];
|
||||
}
|
||||
|
||||
@@ -1,26 +1,27 @@
|
||||
package bzip2 {
|
||||
description = "a freely available, patent free, high-quality data compressor"
|
||||
website = "https://sourceware.org/bzip2"
|
||||
anitya = 237
|
||||
description = "a freely available, patent free, high-quality data compressor";
|
||||
website = "https://sourceware.org/bzip2";
|
||||
anitya = 237;
|
||||
|
||||
version# = "1.0.8"
|
||||
version# = "1.0.8";
|
||||
source = remoteTar {
|
||||
url = "https://sourceware.org/pub/bzip2/bzip2-${version}.tar.gz"
|
||||
checksum = "cTLykcco7boom-s05H1JVsQi1AtChYL84nXkg_92Dm1Xt94Ob_qlMg_-NSguIK-c"
|
||||
compress = gzip
|
||||
}
|
||||
url = "https://sourceware.org/pub/bzip2/bzip2-"+version+".tar.gz";
|
||||
checksum = "cTLykcco7boom-s05H1JVsQi1AtChYL84nXkg_92Dm1Xt94Ob_qlMg_-NSguIK-c";
|
||||
compress = gzip;
|
||||
};
|
||||
|
||||
writable
|
||||
enterSource
|
||||
// uses source tree as scratch space
|
||||
writable = true;
|
||||
enterSource = true;
|
||||
|
||||
exec = make {
|
||||
skipConfigure
|
||||
skipCheck
|
||||
inPlace
|
||||
skipConfigure = true;
|
||||
skipCheck = true;
|
||||
inPlace = true;
|
||||
|
||||
make = [
|
||||
"CC=cc"
|
||||
]
|
||||
install = "make PREFIX=/work/system install"
|
||||
}
|
||||
"CC=cc",
|
||||
];
|
||||
install = "make PREFIX=/work/system install";
|
||||
};
|
||||
}
|
||||
|
||||
52
internal/rosa/package/cairo.az
Normal file
52
internal/rosa/package/cairo.az
Normal file
@@ -0,0 +1,52 @@
|
||||
package cairo {
|
||||
description = "a 2D graphics library with support for multiple output devices";
|
||||
website = "https://www.cairographics.org";
|
||||
anitya = 247;
|
||||
|
||||
version# = "1.18.4";
|
||||
source = remoteGitLab {
|
||||
domain = "gitlab.freedesktop.org";
|
||||
suffix = "cairo/cairo";
|
||||
ref = version;
|
||||
checksum = "_Ztw0ttmYLIiElqS27x2Iu4EneXOMNHp2or6bJA6suLeF3NRvORzUMPPQy9Wr5gT";
|
||||
};
|
||||
|
||||
exec = meson {
|
||||
setup = {
|
||||
"Ddwrite": "enabled";
|
||||
"Dfontconfig": "enabled";
|
||||
"Dfreetype": "enabled";
|
||||
|
||||
"Dpng": "enabled";
|
||||
"Dtee": "enabled";
|
||||
"Dxcb": "enabled";
|
||||
"Dxlib": "disabled";
|
||||
"Dxlib-xcb": "disabled";
|
||||
"Dzlib": "enabled";
|
||||
};
|
||||
// runs the entire test suite in a single meson test
|
||||
interactiveTest = true;
|
||||
// only works with specific dependency versions
|
||||
skipTest = true;
|
||||
};
|
||||
|
||||
inputs = [
|
||||
gawk,
|
||||
|
||||
zlib,
|
||||
libpng,
|
||||
fontconfig,
|
||||
freetype,
|
||||
pixman,
|
||||
xcb,
|
||||
];
|
||||
|
||||
runtime = [
|
||||
zlib,
|
||||
libpng,
|
||||
fontconfig,
|
||||
freetype,
|
||||
pixman,
|
||||
xcb,
|
||||
];
|
||||
}
|
||||
20
internal/rosa/package/check.az
Normal file
20
internal/rosa/package/check.az
Normal file
@@ -0,0 +1,20 @@
|
||||
package check {
|
||||
description = "a unit testing framework for C";
|
||||
website = "https://libcheck.github.io/check";
|
||||
anitya = 7593;
|
||||
|
||||
version# = "0.15.2";
|
||||
source = remoteGitHub {
|
||||
suffix = "libcheck/check";
|
||||
tag = version;
|
||||
checksum = "BiMncvoUvAzC2mQdWcemoRKS5sNqjnh4Oxarpks2exPUI2vbVJLRTLg3--ySXPXb";
|
||||
};
|
||||
|
||||
exec = cmake {
|
||||
cache = {
|
||||
"CHECK_ENABLE_TIMEOUT_TESTS": "OFF";
|
||||
};
|
||||
};
|
||||
|
||||
inputs = [ coreutils ];
|
||||
}
|
||||
@@ -3,7 +3,7 @@ package cmake {
|
||||
website = "https://cmake.org";
|
||||
anitya = 306;
|
||||
|
||||
version* = "4.3.3";
|
||||
version# = "4.3.3";
|
||||
source = remoteGitHubRelease {
|
||||
suffix = "Kitware/CMake";
|
||||
tag = "v"+version;
|
||||
|
||||
@@ -3,7 +3,7 @@ package connman {
|
||||
website = "https://git.kernel.org/pub/scm/network/connman/connman.git";
|
||||
anitya = 337;
|
||||
|
||||
version* = "2.0";
|
||||
version# = "2.0";
|
||||
source = remoteTar {
|
||||
url = "https://git.kernel.org/pub/scm/network/connman/connman.git/"+
|
||||
"snapshot/connman-"+version+".tar.gz";
|
||||
|
||||
@@ -1,47 +1,47 @@
|
||||
package curl {
|
||||
description = "command line tool and library for transferring data with URLs"
|
||||
website = "https://curl.se"
|
||||
anitya = 381
|
||||
description = "command line tool and library for transferring data with URLs";
|
||||
website = "https://curl.se";
|
||||
anitya = 381;
|
||||
|
||||
version# = "8.20.0"
|
||||
version# = "8.20.0";
|
||||
source = remoteTar {
|
||||
url = "https://curl.se/download/curl-${version}.tar.bz2"
|
||||
checksum = "xyHXwrngIRGMasuzhn-I5MSCOhktwINbsWt1f_LuR-5jRVvyx_g6U1EQfDLEbr9r"
|
||||
compress = bzip2
|
||||
}
|
||||
url = "https://curl.se/download/curl-"+version+".tar.bz2";
|
||||
checksum = "xyHXwrngIRGMasuzhn-I5MSCOhktwINbsWt1f_LuR-5jRVvyx_g6U1EQfDLEbr9r";
|
||||
compress = bzip2;
|
||||
};
|
||||
|
||||
// remove broken test
|
||||
writable
|
||||
early = "chmod +w tests/data && rm -f tests/data/test459"
|
||||
writable = true;
|
||||
early = "\nchmod +w tests/data && rm -f tests/data/test459\n";
|
||||
|
||||
exec = make {
|
||||
configure = [
|
||||
"with-openssl"
|
||||
"with-ca-bundle": "/system/etc/ssl/certs/ca-bundle.crt"
|
||||
configure = {
|
||||
"with-openssl";
|
||||
"with-ca-bundle": "/system/etc/ssl/certs/ca-bundle.crt";
|
||||
|
||||
"disable-smb"
|
||||
]
|
||||
"disable-smb";
|
||||
};
|
||||
|
||||
check = [
|
||||
"TFLAGS=${jobsLFlagE}"
|
||||
"test-nonflaky"
|
||||
]
|
||||
}
|
||||
"TFLAGS=" + jobsLFlagE,
|
||||
"test-nonflaky",
|
||||
];
|
||||
};
|
||||
|
||||
inputs = [
|
||||
perl
|
||||
python
|
||||
pkg-config
|
||||
diffutils
|
||||
perl,
|
||||
python,
|
||||
pkg-config,
|
||||
diffutils,
|
||||
|
||||
libpsl
|
||||
openssl
|
||||
]
|
||||
libpsl,
|
||||
openssl,
|
||||
];
|
||||
|
||||
runtime = [
|
||||
zlib
|
||||
zstd
|
||||
libpsl
|
||||
openssl
|
||||
]
|
||||
zlib,
|
||||
zstd,
|
||||
libpsl,
|
||||
openssl,
|
||||
];
|
||||
}
|
||||
|
||||
35
internal/rosa/package/db.az
Normal file
35
internal/rosa/package/db.az
Normal file
@@ -0,0 +1,35 @@
|
||||
package db {
|
||||
description = "Berkeley DB";
|
||||
website = "https://www.oracle.com/database/technologies/related/berkeleydb.html";
|
||||
anitya = 1587;
|
||||
|
||||
version# = "18.1.40";
|
||||
source = remoteTar {
|
||||
url = "https://download.oracle.com/berkeley-db/db-"+version+".tar.gz";
|
||||
checksum = "26i6UfgNxPVzS7kr37Q9-9feeCiQ825qRi8uvn2oG4AngOXHcFoSGDijckKvWSH7";
|
||||
compress = gzip;
|
||||
};
|
||||
|
||||
writable = true;
|
||||
chmod = true;
|
||||
early = `
|
||||
cd build_unix
|
||||
# broken install target
|
||||
touch \
|
||||
../docs/bdb-sql \
|
||||
../docs/gsg_db_server
|
||||
`;
|
||||
|
||||
exec = make {
|
||||
inPlace = true;
|
||||
configureName = "../dist/configure";
|
||||
forceAutoconf = true;
|
||||
configure = {
|
||||
"enable-cxx";
|
||||
"enable-compat185";
|
||||
"with-repmgr-ssl": "no";
|
||||
};
|
||||
check = [ "examples_c" ];
|
||||
postInstall = "rm -r /work/system/docs";
|
||||
};
|
||||
}
|
||||
@@ -1,63 +1,63 @@
|
||||
package dbus {
|
||||
description = "a message bus system"
|
||||
website = "https://www.freedesktop.org/wiki/Software/dbus"
|
||||
anitya = 5356
|
||||
description = "a message bus system";
|
||||
website = "https://www.freedesktop.org/wiki/Software/dbus";
|
||||
anitya = 5356;
|
||||
|
||||
version := "1.16.2"
|
||||
version# = "1.16.2";
|
||||
source = remoteGitLab {
|
||||
domain = "gitlab.freedesktop.org"
|
||||
suffix = "dbus/dbus"
|
||||
ref = "dbus-${version}"
|
||||
checksum = "INwOuNdrDG7XW5ilW_vn8JSxEa444rRNc5ho97i84I1CNF09OmcFcV-gzbF4uCyg"
|
||||
}
|
||||
domain = "gitlab.freedesktop.org";
|
||||
suffix = "dbus/dbus";
|
||||
ref = "dbus-"+version;
|
||||
checksum = "INwOuNdrDG7XW5ilW_vn8JSxEa444rRNc5ho97i84I1CNF09OmcFcV-gzbF4uCyg";
|
||||
};
|
||||
|
||||
// OSError: [Errno 30] Read-only file system: '/usr/src/dbus/subprojects/packagecache'
|
||||
writable
|
||||
writable = true;
|
||||
|
||||
// PermissionError: [Errno 13] Permission denied: '/usr/src/dbus/subprojects/packagecache'
|
||||
chmod
|
||||
chmod = true;
|
||||
|
||||
exec = meson {
|
||||
setup = endi [
|
||||
"Depoll": true
|
||||
"Dinotify": true
|
||||
"Dx11_autolaunch": false
|
||||
]
|
||||
}
|
||||
setup = {
|
||||
"Depoll": "enabled";
|
||||
"Dinotify": "enabled";
|
||||
"Dx11_autolaunch": "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
inputs = [
|
||||
glib
|
||||
libexpat
|
||||
]
|
||||
glib,
|
||||
libexpat,
|
||||
];
|
||||
|
||||
runtime = [
|
||||
glib
|
||||
libexpat
|
||||
]
|
||||
glib,
|
||||
libexpat,
|
||||
];
|
||||
}
|
||||
|
||||
package xdg-dbus-proxy {
|
||||
description = "a filtering proxy for D-Bus connections"
|
||||
website = "https://github.com/flatpak/xdg-dbus-proxy"
|
||||
anitya = 58434
|
||||
description = "a filtering proxy for D-Bus connections";
|
||||
website = "https://github.com/flatpak/xdg-dbus-proxy";
|
||||
anitya = 58434;
|
||||
|
||||
version := "0.1.7"
|
||||
version# = "0.1.7";
|
||||
source = remoteGitHub {
|
||||
suffix = "flatpak/xdg-dbus-proxy"
|
||||
tag = version
|
||||
checksum = "UW5Pe-TP-XAaN-kTbxrkOQ7eYdmlAQlr2pdreLtPT0uwdAz-7rzDP8V_8PWuZBup"
|
||||
}
|
||||
suffix = "flatpak/xdg-dbus-proxy";
|
||||
tag = version;
|
||||
checksum = "UW5Pe-TP-XAaN-kTbxrkOQ7eYdmlAQlr2pdreLtPT0uwdAz-7rzDP8V_8PWuZBup";
|
||||
};
|
||||
|
||||
exec = meson {
|
||||
setup = endi [
|
||||
"Dman": false
|
||||
]
|
||||
}
|
||||
setup = {
|
||||
"Dman": "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
inputs = [
|
||||
dbus
|
||||
glib
|
||||
]
|
||||
dbus,
|
||||
glib,
|
||||
];
|
||||
|
||||
runtime = [ glib ]
|
||||
runtime = [ glib ];
|
||||
}
|
||||
|
||||
@@ -1,32 +1,32 @@
|
||||
package dtc {
|
||||
description = "The Device Tree Compiler"
|
||||
website = "https://git.kernel.org/pub/scm/utils/dtc/dtc.git"
|
||||
anitya = 16911
|
||||
description = "The Device Tree Compiler";
|
||||
website = "https://git.kernel.org/pub/scm/utils/dtc/dtc.git";
|
||||
anitya = 16911;
|
||||
|
||||
version# = "1.7.2"
|
||||
version# = "1.8.0";
|
||||
source = remoteTar {
|
||||
url = "https://git.kernel.org/pub/scm/utils/dtc/dtc.git/snapshot/dtc-v${version}.tar.gz"
|
||||
checksum = "vUoiRynPyYRexTpS6USweT5p4SVHvvVJs8uqFkkVD-YnFjwf6v3elQ0-Etrh00Dt"
|
||||
compress = gzip
|
||||
}
|
||||
url = "https://git.kernel.org/pub/scm/utils/dtc/dtc.git/snapshot/"+
|
||||
"dtc-v"+version+".tar.gz";
|
||||
checksum = "rM-m2cIjX2ZfOUYR8fnWdicrOtMhgjGjbxBGaeQA29pVWoS5cjiCVBJa0qRvcTdO";
|
||||
compress = gzip;
|
||||
};
|
||||
|
||||
// works around buggy test:
|
||||
// fdtdump-runtest.sh /usr/src/dtc/tests/fdtdump.dts
|
||||
writable
|
||||
chmod
|
||||
writable = true;
|
||||
chmod = true;
|
||||
|
||||
exec = meson {
|
||||
setup = endi [
|
||||
"Dyaml": false
|
||||
"Dstatic-build": "true"
|
||||
]
|
||||
}
|
||||
setup = {
|
||||
"Dyaml": "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
inputs = [
|
||||
flex
|
||||
bison
|
||||
m4
|
||||
coreutils
|
||||
diffutils
|
||||
]
|
||||
flex,
|
||||
bison,
|
||||
m4,
|
||||
coreutils,
|
||||
diffutils,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,48 +1,49 @@
|
||||
package elfutils {
|
||||
description = "utilities and libraries to handle ELF files and DWARF data"
|
||||
website = "https://sourceware.org/elfutils"
|
||||
anitya = 5679
|
||||
description = "utilities and libraries to handle ELF files and DWARF data";
|
||||
website = "https://sourceware.org/elfutils";
|
||||
anitya = 5679;
|
||||
|
||||
version# = "0.195"
|
||||
version# = "0.195";
|
||||
source = remoteTar {
|
||||
url = "https://sourceware.org/elfutils/ftp/${version}/elfutils-${version}.tar.bz2"
|
||||
checksum = "JrGnBD38w8Mj0ZxDw3fKlRBFcLvRKu8rcYnX35R9yTlUSYnzTazyLboG-a2CsJlu"
|
||||
compress = bzip2
|
||||
}
|
||||
url = "https://sourceware.org/elfutils/ftp/"+
|
||||
version+"/elfutils-"+version+".tar.bz2";
|
||||
checksum = "JrGnBD38w8Mj0ZxDw3fKlRBFcLvRKu8rcYnX35R9yTlUSYnzTazyLboG-a2CsJlu";
|
||||
compress = bzip2;
|
||||
};
|
||||
|
||||
env = [
|
||||
"CC=cc" +
|
||||
// nonstandard glibc extension
|
||||
" -DFNM_EXTMATCH=0"
|
||||
]
|
||||
" -DFNM_EXTMATCH=0",
|
||||
];
|
||||
|
||||
exec = make {
|
||||
// nonstandard glibc extension
|
||||
skipCheck
|
||||
skipCheck = true;
|
||||
|
||||
configure = {
|
||||
"enable-deterministic-archives"
|
||||
}
|
||||
}
|
||||
"enable-deterministic-archives";
|
||||
};
|
||||
};
|
||||
|
||||
inputs = [
|
||||
m4
|
||||
pkg-config
|
||||
m4,
|
||||
pkg-config,
|
||||
|
||||
zlib
|
||||
bzip2
|
||||
zstd
|
||||
argp-standalone
|
||||
musl-fts
|
||||
musl-obstack
|
||||
kernel-headers
|
||||
]
|
||||
zlib,
|
||||
bzip2,
|
||||
zstd,
|
||||
argp-standalone,
|
||||
musl-fts,
|
||||
musl-obstack,
|
||||
kernel-headers,
|
||||
];
|
||||
|
||||
runtime = [
|
||||
zlib
|
||||
bzip2
|
||||
zstd
|
||||
musl-fts
|
||||
musl-obstack
|
||||
]
|
||||
zlib,
|
||||
bzip2,
|
||||
zstd,
|
||||
musl-fts,
|
||||
musl-obstack,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,27 +1,27 @@
|
||||
package fcft {
|
||||
description = "a simple library for font loading and glyph rasterization using FontConfig, FreeType and pixman"
|
||||
website = "https://codeberg.org/dnkl/fcft"
|
||||
anitya = 143240
|
||||
description = "a simple library for font loading and glyph rasterization using FontConfig, FreeType and pixman";
|
||||
website = "https://codeberg.org/dnkl/fcft";
|
||||
anitya = 143240;
|
||||
|
||||
version# = "3.3.3"
|
||||
version# = "3.3.3";
|
||||
source = remoteTar {
|
||||
url = "https://codeberg.org/dnkl/fcft/archive/${version}.tar.gz"
|
||||
checksum = "bMj8OmqtoANRKZWbjHk4WfP09AxJYRbWGqUsm1gRJ_dOFg6gooNbgkDu597PLfz2"
|
||||
compress = gzip
|
||||
}
|
||||
url = "https://codeberg.org/dnkl/fcft/archive/"+version+".tar.gz";
|
||||
checksum = "bMj8OmqtoANRKZWbjHk4WfP09AxJYRbWGqUsm1gRJ_dOFg6gooNbgkDu597PLfz2";
|
||||
compress = gzip;
|
||||
};
|
||||
|
||||
exec = meson()
|
||||
exec = meson {};
|
||||
|
||||
inputs = [
|
||||
pixman
|
||||
fontconfig
|
||||
utf8proc
|
||||
tllist
|
||||
]
|
||||
pixman,
|
||||
fontconfig,
|
||||
utf8proc,
|
||||
tllist,
|
||||
];
|
||||
|
||||
runtime = [
|
||||
pixman
|
||||
fontconfig
|
||||
utf8proc
|
||||
]
|
||||
pixman,
|
||||
fontconfig,
|
||||
utf8proc,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,47 +1,47 @@
|
||||
package firmware {
|
||||
description = "firmware blobs for use with the Linux kernel"
|
||||
website = "https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git"
|
||||
anitya = 141464
|
||||
description = "firmware blobs for use with the Linux kernel";
|
||||
website = "https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git";
|
||||
anitya = 141464;
|
||||
|
||||
version# = "20260519"
|
||||
version# = "20260519";
|
||||
source = remoteGitLab {
|
||||
domain = "gitlab.com"
|
||||
suffix = "kernel-firmware/linux-firmware"
|
||||
ref = version
|
||||
checksum = "l-wBRTWclYnJsgV4qtUV1-UL5Y4nknAPre8CMe0dH7PxtAqbaeudEIM_Fnuj0TCV"
|
||||
}
|
||||
domain = "gitlab.com";
|
||||
suffix = "kernel-firmware/linux-firmware";
|
||||
ref = version;
|
||||
checksum = "l-wBRTWclYnJsgV4qtUV1-UL5Y4nknAPre8CMe0dH7PxtAqbaeudEIM_Fnuj0TCV";
|
||||
};
|
||||
|
||||
// dedup creates temporary file
|
||||
writable
|
||||
writable = true;
|
||||
|
||||
// does not use configure
|
||||
enterSource
|
||||
enterSource = true;
|
||||
|
||||
env = [
|
||||
"HOME=/proc/nonexistent"
|
||||
]
|
||||
"HOME=/proc/nonexistent",
|
||||
];
|
||||
|
||||
exec = make {
|
||||
omitDefaults
|
||||
skipConfigure
|
||||
inPlace
|
||||
omitDefaults = true;
|
||||
skipConfigure = true;
|
||||
inPlace = true;
|
||||
|
||||
make = [
|
||||
"DESTDIR=/work/system"
|
||||
"install-zst"
|
||||
]
|
||||
"DESTDIR=/work/system",
|
||||
"install-zst",
|
||||
];
|
||||
|
||||
// requires pre-commit
|
||||
skipCheck
|
||||
skipCheck = true;
|
||||
|
||||
install = "make ${jobFlagsE} DESTDIR=/work/system dedup"
|
||||
}
|
||||
install = "make " + jobsFlagE + " DESTDIR=/work/system dedup";
|
||||
};
|
||||
|
||||
inputs = [
|
||||
parallel
|
||||
rdfind
|
||||
zstd
|
||||
findutils
|
||||
coreutils
|
||||
]
|
||||
parallel,
|
||||
rdfind,
|
||||
zstd,
|
||||
findutils,
|
||||
coreutils,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
package flex {
|
||||
description = "scanner generator for lexing in C and C++"
|
||||
website = "https://github.com/westes/flex"
|
||||
anitya = 819
|
||||
description = "scanner generator for lexing in C and C++";
|
||||
website = "https://github.com/westes/flex";
|
||||
anitya = 819;
|
||||
|
||||
version# = "2.6.4"
|
||||
version# = "2.6.4";
|
||||
source = remoteGitHubRelease {
|
||||
suffix = "westes/flex"
|
||||
tag = "v"+version
|
||||
name = "flex-${version}.tar.gz"
|
||||
checksum = "p9POjQU7VhgOf3x5iFro8fjhy0NOanvA7CTeuWS_veSNgCixIJshTrWVkc5XLZkB"
|
||||
compress = gzip
|
||||
suffix = "westes/flex";
|
||||
tag = "v"+version;
|
||||
name = "flex-"+version+".tar.gz";
|
||||
checksum = "p9POjQU7VhgOf3x5iFro8fjhy0NOanvA7CTeuWS_veSNgCixIJshTrWVkc5XLZkB";
|
||||
compress = gzip;
|
||||
};
|
||||
|
||||
exec = make();
|
||||
exec = make {};
|
||||
|
||||
inputs = [ m4 ];
|
||||
}
|
||||
|
||||
@@ -1,37 +1,37 @@
|
||||
package fontconfig {
|
||||
description = "font configuration and customization library"
|
||||
website = "https://www.freedesktop.org/wiki/Software/fontconfig"
|
||||
anitya = 827
|
||||
description = "font configuration and customization library";
|
||||
website = "https://www.freedesktop.org/wiki/Software/fontconfig";
|
||||
anitya = 827;
|
||||
|
||||
version# = "2.18.0"
|
||||
version# = "2.18.0";
|
||||
source = remoteGitLab {
|
||||
domain = "gitlab.freedesktop.org"
|
||||
suffix = "fontconfig/fontconfig"
|
||||
ref = version
|
||||
checksum = "Z-yA7pFiE7cRDxZm32EHUPmeRx-lth2X6uw51aoeLi4BXwNm4iOWT13IGp3YSbNW"
|
||||
}
|
||||
domain = "gitlab.freedesktop.org";
|
||||
suffix = "fontconfig/fontconfig";
|
||||
ref = version;
|
||||
checksum = "Z-yA7pFiE7cRDxZm32EHUPmeRx-lth2X6uw51aoeLi4BXwNm4iOWT13IGp3YSbNW";
|
||||
};
|
||||
|
||||
exec = make {
|
||||
generate = "NOCONFIGURE=1 ./autogen.sh"
|
||||
}
|
||||
generate = "NOCONFIGURE=1 ./autogen.sh";
|
||||
};
|
||||
|
||||
inputs = [
|
||||
automake
|
||||
libtool
|
||||
pkg-config
|
||||
gettext
|
||||
gperf
|
||||
gzip
|
||||
python
|
||||
automake,
|
||||
libtool,
|
||||
pkg-config,
|
||||
gettext,
|
||||
gperf,
|
||||
gzip,
|
||||
python,
|
||||
|
||||
zlib
|
||||
libexpat
|
||||
freetype
|
||||
]
|
||||
zlib,
|
||||
libexpat,
|
||||
freetype,
|
||||
];
|
||||
|
||||
runtime = [
|
||||
zlib
|
||||
libexpat
|
||||
freetype
|
||||
]
|
||||
zlib,
|
||||
libexpat,
|
||||
freetype,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,28 +1,28 @@
|
||||
package foot {
|
||||
description = "a fast, lightweight and minimalistic Wayland terminal emulator"
|
||||
website = "https://codeberg.org/dnkl/foot"
|
||||
anitya = 141611
|
||||
description = "a fast, lightweight and minimalistic Wayland terminal emulator";
|
||||
website = "https://codeberg.org/dnkl/foot";
|
||||
anitya = 141611;
|
||||
|
||||
version# = "1.27.0"
|
||||
version# = "1.27.0";
|
||||
source = remoteTar {
|
||||
url = "https://codeberg.org/dnkl/foot/archive/${version}.tar.gz"
|
||||
checksum = "E2XIPRD8t-WBBJUebIwChFT8K_85diwdalssUNwnuZBIynPa7rlXro5WCe9v3UlK"
|
||||
compress = gzip
|
||||
}
|
||||
url = "https://codeberg.org/dnkl/foot/archive/"+version+".tar.gz";
|
||||
checksum = "E2XIPRD8t-WBBJUebIwChFT8K_85diwdalssUNwnuZBIynPa7rlXro5WCe9v3UlK";
|
||||
compress = gzip;
|
||||
};
|
||||
|
||||
exec = meson()
|
||||
exec = meson {};
|
||||
|
||||
inputs = [
|
||||
ncurses
|
||||
ncurses,
|
||||
|
||||
xkbcommon
|
||||
tllist
|
||||
fcft
|
||||
kernel-headers
|
||||
]
|
||||
xkbcommon,
|
||||
tllist,
|
||||
fcft,
|
||||
kernel-headers,
|
||||
];
|
||||
|
||||
runtime = [
|
||||
xkbcommon
|
||||
fcft
|
||||
]
|
||||
xkbcommon,
|
||||
fcft,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
package freetype {
|
||||
description = "a freely available software library to render fonts"
|
||||
website = "http://www.freetype.org"
|
||||
anitya = 854
|
||||
description = "a freely available software library to render fonts";
|
||||
website = "http://www.freetype.org";
|
||||
anitya = 854;
|
||||
|
||||
version# = "2.14.3"
|
||||
version# = "2.14.3";
|
||||
source = remoteTar {
|
||||
url = "https://download.savannah.gnu.org/releases/freetype/freetype-${version}.tar.gz"
|
||||
checksum = "-WfLv8fVJNyCHpP_lriiDzOcVbBL9ajdQ3tl8AzIIUa9-8sVpU9irxOmSMgRHWYz"
|
||||
compress = gzip
|
||||
}
|
||||
url = "https://download.savannah.gnu.org/releases/freetype/"+
|
||||
"freetype-"+version+".tar.gz";
|
||||
checksum = "-WfLv8fVJNyCHpP_lriiDzOcVbBL9ajdQ3tl8AzIIUa9-8sVpU9irxOmSMgRHWYz";
|
||||
compress = gzip;
|
||||
};
|
||||
|
||||
exec = make()
|
||||
exec = make {};
|
||||
}
|
||||
|
||||
18
internal/rosa/package/fribidi.az
Normal file
18
internal/rosa/package/fribidi.az
Normal file
@@ -0,0 +1,18 @@
|
||||
package fribidi {
|
||||
description = "GNU FriBidi";
|
||||
website = "https://github.com/fribidi/fribidi";
|
||||
anitya = 857;
|
||||
|
||||
version# = "1.0.16";
|
||||
source = remoteGitHub {
|
||||
suffix = "fribidi/fribidi";
|
||||
tag = "v"+version;
|
||||
checksum = "Sn9hwdgViXW9_MOi8ovAcBgQy6s6o4cc0o260k76nqCRzxmxxD1-B37GVkJ2EoMy";
|
||||
};
|
||||
|
||||
exec = meson {
|
||||
setup = {
|
||||
"Ddocs": "false";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,33 +1,33 @@
|
||||
package fuse {
|
||||
description = "the reference implementation of the Linux FUSE interface"
|
||||
website = "https://github.com/libfuse/libfuse"
|
||||
anitya = 861
|
||||
description = "the reference implementation of the Linux FUSE interface";
|
||||
website = "https://github.com/libfuse/libfuse";
|
||||
anitya = 861;
|
||||
|
||||
version := "3.18.2"
|
||||
version# = "3.18.2";
|
||||
source = remoteGitHubRelease {
|
||||
suffix = "libfuse/libfuse"
|
||||
tag = "fuse-"+version
|
||||
name = "fuse-${version}.tar.gz"
|
||||
checksum = "iL-7b7eUtmlVSf5cSq0dzow3UiqSjBmzV3cI_ENPs1tXcHdktkG45j1V12h-4jZe"
|
||||
compress = gzip
|
||||
}
|
||||
suffix = "libfuse/libfuse";
|
||||
tag = "fuse-"+version;
|
||||
name = "fuse-"+version+".tar.gz";
|
||||
checksum = "iL-7b7eUtmlVSf5cSq0dzow3UiqSjBmzV3cI_ENPs1tXcHdktkG45j1V12h-4jZe";
|
||||
compress = gzip;
|
||||
};
|
||||
|
||||
exec = meson {
|
||||
setup = [
|
||||
setup = {
|
||||
"Ddefault_library": "both";
|
||||
"Dtests": "true";
|
||||
"Duseroot": "false";
|
||||
"Dinitscriptdir": "/system/etc";
|
||||
]
|
||||
};
|
||||
|
||||
postCompile = "python3 -m pytest test/"
|
||||
postCompile = "python3 -m pytest test/";
|
||||
// this project uses pytest
|
||||
skipTest
|
||||
}
|
||||
skipTest = true;
|
||||
};
|
||||
|
||||
inputs = [
|
||||
python-pytest
|
||||
python-pytest,
|
||||
|
||||
kernel-headers
|
||||
]
|
||||
kernel-headers,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package binutils {
|
||||
website = "https://www.gnu.org/software/binutils";
|
||||
anitya = 7981;
|
||||
|
||||
version* = "2.46.0";
|
||||
version# = "2.46.0";
|
||||
source = remoteTar {
|
||||
url = "https://ftpmirror.gnu.org/gnu/binutils/binutils-"+version+".tar.bz2";
|
||||
checksum = "4kK1_EXQipxSqqyvwD4LbiMLFKCUApjq6PeG4XJP4dzxYGqDeqXfh8zLuTyOuOVR";
|
||||
@@ -20,7 +20,7 @@ package gcc {
|
||||
website = "https://www.gnu.org/software/gcc";
|
||||
anitya = 6502;
|
||||
|
||||
version* = "16.1.0";
|
||||
version# = "16.1.0";
|
||||
source = remoteTar {
|
||||
url = "https://ftp.tsukuba.wide.ad.jp/software/gcc/releases/"+
|
||||
"gcc-"+version+"/gcc-"+version+".tar.gz";
|
||||
|
||||
@@ -1,88 +1,95 @@
|
||||
package git {
|
||||
description = "distributed version control system"
|
||||
website = "https://www.git-scm.com"
|
||||
anitya = 5350
|
||||
description = "distributed version control system";
|
||||
website = "https://www.git-scm.com";
|
||||
anitya = 5350;
|
||||
|
||||
version := "2.54.0"
|
||||
version# = "2.54.0";
|
||||
source = remoteTar {
|
||||
url = "https://www.kernel.org/pub/software/scm/git/git-${version}.tar.gz"
|
||||
checksum = "7vGKtFOJGqY8DO4e8UMRax7dLgImXKQz5MMalec6MlgYrsarffSJjgOughwRFpSH"
|
||||
compress = gzip
|
||||
}
|
||||
url = "https://www.kernel.org/pub/software/scm/git/"+
|
||||
"git-"+version+".tar.gz";
|
||||
checksum = "7vGKtFOJGqY8DO4e8UMRax7dLgImXKQz5MMalec6MlgYrsarffSJjgOughwRFpSH";
|
||||
compress = gzip;
|
||||
};
|
||||
|
||||
early = `ln -s ../../system/bin/perl /usr/bin/ || true
|
||||
# test suite assumes apache
|
||||
rm -f /system/bin/httpd`
|
||||
early = `
|
||||
ln -s ../../system/bin/perl /usr/bin/ || true
|
||||
|
||||
# test suite assumes apache
|
||||
rm -f /system/bin/httpd
|
||||
`;
|
||||
|
||||
// uses source tree as scratch space
|
||||
enterSource
|
||||
enterSource = true;
|
||||
|
||||
exec = make {
|
||||
inPlace
|
||||
generate = "make configure"
|
||||
inPlace = true;
|
||||
generate = "make configure";
|
||||
|
||||
preMake = r`function disable_test {
|
||||
local test=$1 pattern=${2:-''}
|
||||
if [ $# -eq 1 ]; then
|
||||
rm "t/${test}.sh"
|
||||
else
|
||||
sed -i "t/${test}.sh" \
|
||||
-e "/^\s*test_expect_.*$pattern/,/^\s*' *\$/{s/^/: #/}"
|
||||
fi
|
||||
}
|
||||
disable_test t1800-hook
|
||||
disable_test t5319-multi-pack-index
|
||||
disable_test t1305-config-include
|
||||
disable_test t3900-i18n-commit
|
||||
disable_test t3507-cherry-pick-conflict
|
||||
disable_test t4201-shortlog
|
||||
disable_test t5303-pack-corruption-resilience
|
||||
disable_test t4301-merge-tree-write-tree
|
||||
disable_test t8005-blame-i18n
|
||||
disable_test t9350-fast-export
|
||||
disable_test t9300-fast-import
|
||||
disable_test t0211-trace2-perf
|
||||
disable_test t1517-outside-repo
|
||||
disable_test t2200-add-update
|
||||
disable_test t0027-auto-crlf
|
||||
disable_test t7513-interpret-trailers
|
||||
disable_test t7703-repack-geometric
|
||||
disable_test t3705-add-sparse-checkout
|
||||
disable_test t7002-mv-sparse-checkout
|
||||
disable_test t1451-fsck-buffer
|
||||
disable_test t4104-apply-boundary
|
||||
disable_test t4200-rerere
|
||||
disable_test t5515-fetch-merge-logic`
|
||||
preMake = `
|
||||
function disable_test {
|
||||
local test=$1 pattern=${2:-''}
|
||||
if [ $# -eq 1 ]; then
|
||||
rm "t/${test}.sh"
|
||||
else
|
||||
sed -i "t/${test}.sh" \
|
||||
-e "/^\s*test_expect_.*$pattern/,/^\s*' *\$/{s/^/: #/}"
|
||||
fi
|
||||
}
|
||||
|
||||
disable_test t1800-hook
|
||||
disable_test t5319-multi-pack-index
|
||||
disable_test t1305-config-include
|
||||
disable_test t3900-i18n-commit
|
||||
disable_test t3507-cherry-pick-conflict
|
||||
disable_test t4201-shortlog
|
||||
disable_test t5303-pack-corruption-resilience
|
||||
disable_test t4301-merge-tree-write-tree
|
||||
disable_test t8005-blame-i18n
|
||||
disable_test t9350-fast-export
|
||||
disable_test t9300-fast-import
|
||||
disable_test t0211-trace2-perf
|
||||
disable_test t1517-outside-repo
|
||||
disable_test t2200-add-update
|
||||
disable_test t0027-auto-crlf
|
||||
disable_test t7513-interpret-trailers
|
||||
disable_test t7703-repack-geometric
|
||||
disable_test t3705-add-sparse-checkout
|
||||
disable_test t7002-mv-sparse-checkout
|
||||
disable_test t1451-fsck-buffer
|
||||
disable_test t4104-apply-boundary
|
||||
disable_test t4200-rerere
|
||||
disable_test t5515-fetch-merge-logic
|
||||
`;
|
||||
|
||||
check = [
|
||||
"-C t"
|
||||
`GIT_PROVE_OPTS="--jobs 32 --failures"`
|
||||
"prove"
|
||||
]
|
||||
"-C t",
|
||||
`GIT_PROVE_OPTS="--jobs 32 --failures"`,
|
||||
"prove",
|
||||
];
|
||||
|
||||
install = r`make \
|
||||
${jobsFlagE} \
|
||||
DESTDIR=/work \
|
||||
NO_INSTALL_HARDLINKS=1 \
|
||||
install`
|
||||
}
|
||||
install = `make \
|
||||
` + jobsFlagE + ` \
|
||||
DESTDIR=/work \
|
||||
NO_INSTALL_HARDLINKS=1 \
|
||||
install`;
|
||||
};
|
||||
|
||||
inputs = [
|
||||
// test suite hangs on mksh
|
||||
bash
|
||||
bash,
|
||||
|
||||
diffutils
|
||||
autoconf
|
||||
gettext
|
||||
diffutils,
|
||||
autoconf,
|
||||
gettext,
|
||||
|
||||
zlib
|
||||
curl
|
||||
libexpat
|
||||
]
|
||||
zlib,
|
||||
curl,
|
||||
libexpat,
|
||||
];
|
||||
|
||||
runtime = [
|
||||
zlib
|
||||
curl
|
||||
libexpat
|
||||
]
|
||||
zlib,
|
||||
curl,
|
||||
libexpat,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package glib {
|
||||
website = "https://developer.gnome.org/glib";
|
||||
anitya = 10024;
|
||||
|
||||
version* = "2.89.0";
|
||||
version# = "2.89.0";
|
||||
source = remoteGit {
|
||||
url = "https://gitlab.gnome.org/GNOME/glib.git";
|
||||
tag = version;
|
||||
|
||||
@@ -1,31 +1,31 @@
|
||||
package glslang {
|
||||
description = "reference front end for GLSL/ESSL"
|
||||
website = "https://github.com/KhronosGroup/glslang"
|
||||
anitya = 205796
|
||||
description = "reference front end for GLSL/ESSL";
|
||||
website = "https://github.com/KhronosGroup/glslang";
|
||||
anitya = 205796;
|
||||
|
||||
version# = "16.3.0"
|
||||
version# = "16.3.0";
|
||||
source = remoteGitHub {
|
||||
suffix = "KhronosGroup/glslang"
|
||||
tag = version
|
||||
checksum = "xyqDf8k3-D0_BXHGi0uLgMglnJ05Rf3j73QgbDs3sGtKNdBIQhY8JfqX1NcNoJQN"
|
||||
}
|
||||
suffix = "KhronosGroup/glslang";
|
||||
tag = version;
|
||||
checksum = "xyqDf8k3-D0_BXHGi0uLgMglnJ05Rf3j73QgbDs3sGtKNdBIQhY8JfqX1NcNoJQN";
|
||||
};
|
||||
|
||||
// test suite writes to source
|
||||
writable
|
||||
chmod
|
||||
writable = true;
|
||||
chmod = true;
|
||||
|
||||
exec = cmake {
|
||||
cache = {
|
||||
"BUILD_SHARED_LIBS": "ON"
|
||||
"ALLOW_EXTERNAL_SPIRV_TOOLS": "ON"
|
||||
}
|
||||
}
|
||||
"BUILD_SHARED_LIBS": "ON";
|
||||
"ALLOW_EXTERNAL_SPIRV_TOOLS": "ON";
|
||||
};
|
||||
};
|
||||
|
||||
inputs = [
|
||||
python
|
||||
bash
|
||||
diffutils
|
||||
python,
|
||||
bash,
|
||||
diffutils,
|
||||
|
||||
spirv-tools
|
||||
]
|
||||
spirv-tools,
|
||||
];
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -3,7 +3,7 @@ package gnutls {
|
||||
website = "https://gnutls.org";
|
||||
anitya = 1221;
|
||||
|
||||
version* = "3.8.13";
|
||||
version# = "3.8.13";
|
||||
source = remoteGit {
|
||||
url = "https://gitlab.com/gnutls/gnutls.git";
|
||||
tag = version;
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
package googletest {
|
||||
description = "Google Testing and Mocking Framework"
|
||||
exclude
|
||||
anitya = 18290
|
||||
description = "Google Testing and Mocking Framework";
|
||||
exclude = true;
|
||||
anitya = 18290;
|
||||
|
||||
version# = "1.17.0"
|
||||
version# = "1.17.0";
|
||||
output = remoteGitHubRelease {
|
||||
suffix = "google/googletest"
|
||||
tag = "v"+version
|
||||
name = "googletest-${version}.tar.gz"
|
||||
checksum = "-1r3ch8vPP8COF7xUH5hyX6bEJ4dN9TQh4IxrmpHr6vaig6mA3DdUpV4cihQ_9dw"
|
||||
compress = gzip
|
||||
}
|
||||
suffix = "google/googletest";
|
||||
tag = "v"+version;
|
||||
name = "googletest-"+version+".tar.gz";
|
||||
checksum = "-1r3ch8vPP8COF7xUH5hyX6bEJ4dN9TQh4IxrmpHr6vaig6mA3DdUpV4cihQ_9dw";
|
||||
compress = gzip;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ package hakurei-source {
|
||||
description = "hakurei source tree";
|
||||
exclude = true;
|
||||
|
||||
version* = "0.4.3";
|
||||
version# = "0.4.3";
|
||||
output = remoteTar {
|
||||
url = "https://git.gensokyo.uk/rosa/hakurei/archive/"+
|
||||
"v"+version+".tar.gz";
|
||||
|
||||
31
internal/rosa/package/harfbuzz.az
Normal file
31
internal/rosa/package/harfbuzz.az
Normal file
@@ -0,0 +1,31 @@
|
||||
package harfbuzz {
|
||||
description = "a text shaping library";
|
||||
website = "https://harfbuzz.github.io";
|
||||
anitya = 1299;
|
||||
|
||||
version# = "14.2.0";
|
||||
source = remoteGitHub {
|
||||
suffix = "harfbuzz/harfbuzz";
|
||||
tag = version;
|
||||
checksum = "2VgjUmcPeIbleafZaGk5l7iGnag2qj0HTqrJ5770GzivebryZ2pbwVIha5j_24PH";
|
||||
};
|
||||
|
||||
exec = meson {
|
||||
setup = {
|
||||
"Dcairo": "enabled";
|
||||
"Dpng": "enabled";
|
||||
"Dzlib": "enabled";
|
||||
"Dfreetype": "enabled";
|
||||
};
|
||||
};
|
||||
|
||||
inputs = [
|
||||
zlib,
|
||||
cairo,
|
||||
];
|
||||
|
||||
runtime = [
|
||||
zlib,
|
||||
cairo,
|
||||
];
|
||||
}
|
||||
@@ -1,23 +1,23 @@
|
||||
package hwdata {
|
||||
description = "contains various hardware identification and configuration data"
|
||||
website = "https://github.com/vcrhonek/hwdata"
|
||||
anitya = 5387
|
||||
description = "contains various hardware identification and configuration data";
|
||||
website = "https://github.com/vcrhonek/hwdata";
|
||||
anitya = 5387;
|
||||
|
||||
version# = "0.407"
|
||||
version# = "0.407";
|
||||
source = remoteGitHub {
|
||||
suffix = "vcrhonek/hwdata"
|
||||
tag = "v"+version
|
||||
checksum = "6p1XD0CRuzt6hLfjv4ShKBW934BexmoPkRrmwxD4J63fBVCzVBRHyF8pVJdW_Xjm"
|
||||
}
|
||||
suffix = "vcrhonek/hwdata";
|
||||
tag = "v"+version;
|
||||
checksum = "6p1XD0CRuzt6hLfjv4ShKBW934BexmoPkRrmwxD4J63fBVCzVBRHyF8pVJdW_Xjm";
|
||||
};
|
||||
|
||||
writable
|
||||
enterSource
|
||||
writable = true;
|
||||
enterSource = true;
|
||||
|
||||
exec = make {
|
||||
// awk: fatal: cannot open file `hwdata.spec' for reading: No such file or directory
|
||||
inPlace
|
||||
inPlace = true;
|
||||
|
||||
// lspci: Unknown option 'A' (see "lspci --help")
|
||||
skipCheck
|
||||
}
|
||||
skipCheck = true;
|
||||
};
|
||||
}
|
||||
|
||||
55
internal/rosa/package/iproute2.az
Normal file
55
internal/rosa/package/iproute2.az
Normal file
@@ -0,0 +1,55 @@
|
||||
package iproute2 {
|
||||
description = "routing commands and utilities";
|
||||
website = "https://wiki.linuxfoundation.org/networking/iproute2";
|
||||
anitya = 1392;
|
||||
|
||||
version# = "7.0.0";
|
||||
source = remoteTar {
|
||||
url = "https://git.kernel.org/pub/scm/network/iproute2/iproute2.git/"+
|
||||
"snapshot/iproute2-"+version+".tar.gz";
|
||||
checksum = "6SNrMEKYMO-Nt4u_Ni-qOnBpzuokkf515ya-75l6APNbZwihXy8Utv1snbUpHx3T";
|
||||
compress = gzip;
|
||||
};
|
||||
|
||||
env = [
|
||||
"CC=cc",
|
||||
"PREFIX=/system",
|
||||
"SBINDIR=/system/sbin",
|
||||
];
|
||||
enterSource = true;
|
||||
writable = true;
|
||||
chmod = true;
|
||||
|
||||
exec = make {
|
||||
inPlace = true;
|
||||
// drop default autoconf options
|
||||
configureName = "./configure";
|
||||
configure = {
|
||||
"prefix": "/system";
|
||||
"color": "auto";
|
||||
};
|
||||
make = [ "CC=cc" ];
|
||||
// wants root
|
||||
skipCheck = true;
|
||||
};
|
||||
|
||||
inputs = [
|
||||
pkg-config,
|
||||
m4,
|
||||
bison,
|
||||
flex,
|
||||
|
||||
libbpf,
|
||||
libmnl,
|
||||
db,
|
||||
libcap,
|
||||
kernel-headers,
|
||||
];
|
||||
|
||||
runtime = [
|
||||
libbpf,
|
||||
libmnl,
|
||||
db,
|
||||
libcap,
|
||||
];
|
||||
}
|
||||
20
internal/rosa/package/json-c.az
Normal file
20
internal/rosa/package/json-c.az
Normal file
@@ -0,0 +1,20 @@
|
||||
package json-c {
|
||||
description = "a JSON implementation in C";
|
||||
website = "https://json-c.github.io/json-c";
|
||||
anitya = 390279;
|
||||
|
||||
version# = "0.18-20240915";
|
||||
source = remoteGitHub {
|
||||
suffix = "json-c/json-c";
|
||||
tag = "json-c-"+version;
|
||||
checksum = "LXY6AqXtavysCqcWrniSkgV8fv54iDowsrQ7RXM-upH-ZoJr2R34ff7coFRvOr-k";
|
||||
};
|
||||
|
||||
exec = cmake {
|
||||
cache = {
|
||||
"CMAKE_POLICY_VERSION_MINIMUM": "3.5";
|
||||
"ENABLE_RDRAND": "ON";
|
||||
"ENABLE_THREADING": "ON";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -3,11 +3,11 @@ package kernel-source {
|
||||
website = "https://kernel.org";
|
||||
exclude = true;
|
||||
|
||||
version* = "6.12.90";
|
||||
version# = "6.12.91";
|
||||
output = remoteTar {
|
||||
url = "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/"+
|
||||
"snapshot/linux-"+version+".tar.gz";
|
||||
checksum = "l9d_2veqbj3RVDp8L6vhV7j2DOLQtzQUqnzPFuJBR_VD8a3k4mvBQRR1-LE-SWZJ";
|
||||
checksum = "wWnY9XJV1gSX2CMfHrrhvyx1tqKJQoeyfS68pJMudE_VdwWkFE6ZkEZ--DNJdkvG";
|
||||
compress = gzip;
|
||||
};
|
||||
}
|
||||
@@ -45,9 +45,9 @@ cat \
|
||||
checksum = arch {
|
||||
default = "";
|
||||
|
||||
amd64 = "FkIf0_SD4g3mK_VWa9FJURjLS66YmknYTh49uMDlDSnoQpq6BqBymAm47joDwdWi";
|
||||
arm64 = "bJ6ZLJhDR3K9So9zLh5s31hQPm_27gyl7XDVmCgdvyJGKDnffCKdtlE0HuvEbvye";
|
||||
riscv64 = "bbZCVNS1ryP-XoW9Gwx3ugvhvOA6d5UuO6gE7-Gv82g_bQN1hk4GG0SXBo-otyqS";
|
||||
amd64 = "Oy3soh5GNJr4JU7lk85J49LgNw-44SGpNB6NVlPp_mFUaXxvIGt1KLPnlpU3JYcB";
|
||||
arm64 = "GKHHQepUpwQjsSiq47-HV1G_aRR12oasaO5dV2bjc3D-4UzE9-Mb92ptplQQhSEc";
|
||||
riscv64 = "YwNZiSwm6EnTyCmKe-RMLhFHD7VuJoVjD6XnqywaB3e-Vk0rEWxsAxoNkCvxbXz9";
|
||||
};
|
||||
inputs = [ rsync ];
|
||||
}
|
||||
|
||||
@@ -1,39 +1,40 @@
|
||||
package kmod {
|
||||
description = "a set of tools to handle common tasks with Linux kernel modules"
|
||||
website = "https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git"
|
||||
anitya = 1517
|
||||
description = "a set of tools to handle common tasks with Linux kernel modules";
|
||||
website = "https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git";
|
||||
anitya = 1517;
|
||||
|
||||
version# = "34.2"
|
||||
version# = "34.2";
|
||||
source = remoteTar {
|
||||
url = "https://www.kernel.org/pub/linux/utils/kernel/kmod/kmod-${version}.tar.gz"
|
||||
checksum = "0K7POeTKxMhExsaTsnKAC6LUNsRSfe6sSZxWONPbOu-GI_pXOw3toU_BIoqfBhJV"
|
||||
compress = gzip
|
||||
}
|
||||
url = "https://www.kernel.org/pub/linux/utils/kernel/"+
|
||||
"kmod/kmod-"+version+".tar.gz";
|
||||
checksum = "0K7POeTKxMhExsaTsnKAC6LUNsRSfe6sSZxWONPbOu-GI_pXOw3toU_BIoqfBhJV";
|
||||
compress = gzip;
|
||||
};
|
||||
|
||||
exec = meson {
|
||||
setup = [
|
||||
"Dmoduledir": "/system/lib/modules"
|
||||
"Dsysconfdir": "/system/etc"
|
||||
"Dbashcompletiondir": "no"
|
||||
"Dfishcompletiondir": "no"
|
||||
"Dxz": "disabled"
|
||||
"Dmanpages": "false"
|
||||
]
|
||||
setup = {
|
||||
"Dmoduledir": "/system/lib/modules";
|
||||
"Dsysconfdir": "/system/etc";
|
||||
"Dbashcompletiondir": "no";
|
||||
"Dfishcompletiondir": "no";
|
||||
"Dxz": "disabled";
|
||||
"Dmanpages": "false";
|
||||
};
|
||||
|
||||
// makes assumptions about the running kernel
|
||||
skipTest
|
||||
}
|
||||
skipTest = true;
|
||||
};
|
||||
|
||||
inputs = [
|
||||
zlib
|
||||
zstd
|
||||
openssl
|
||||
kernel-headers
|
||||
]
|
||||
zlib,
|
||||
zstd,
|
||||
openssl,
|
||||
kernel-headers,
|
||||
];
|
||||
|
||||
runtime = [
|
||||
zlib
|
||||
zstd
|
||||
openssl
|
||||
]
|
||||
zlib,
|
||||
zstd,
|
||||
openssl,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package libarchive {
|
||||
website = "https://www.libarchive.org";
|
||||
anitya = 1558;
|
||||
|
||||
version* = "3.8.7";
|
||||
version# = "3.8.7";
|
||||
source = remoteGitHub {
|
||||
suffix = "libarchive/libarchive";
|
||||
tag = "v"+version;
|
||||
|
||||
31
internal/rosa/package/libbpf.az
Normal file
31
internal/rosa/package/libbpf.az
Normal file
@@ -0,0 +1,31 @@
|
||||
package libbpf {
|
||||
description = "the reference library for eBPF development";
|
||||
website = "https://github.com/libbpf/libbpf";
|
||||
anitya = 141355;
|
||||
|
||||
version# = "1.7.0";
|
||||
source = remoteGitHub {
|
||||
suffix = "libbpf/libbpf";
|
||||
tag = "v"+version;
|
||||
checksum = "Gsk3TYDTne6behhdiyRB0Y5GTGECRh2265VY7IQ_VB62vIm7U9oqzEW-Va5Tvi_w";
|
||||
};
|
||||
|
||||
env = [ "PREFIX=/system" ];
|
||||
early = "cd src";
|
||||
writable = true;
|
||||
chmod = true;
|
||||
|
||||
exec = make {
|
||||
inPlace = true;
|
||||
skipConfigure = true;
|
||||
skipCheck = true;
|
||||
install = "make DESTDIR=/work LIBSUBDIR=lib install";
|
||||
};
|
||||
|
||||
inputs = [
|
||||
elfutils,
|
||||
kernel-headers,
|
||||
];
|
||||
|
||||
runtime = [ elfutils ];
|
||||
}
|
||||
@@ -1,23 +1,23 @@
|
||||
package libbsd {
|
||||
description = "provides useful functions commonly found on BSD systems"
|
||||
website = "https://libbsd.freedesktop.org"
|
||||
anitya = 1567
|
||||
description = "provides useful functions commonly found on BSD systems";
|
||||
website = "https://libbsd.freedesktop.org";
|
||||
anitya = 1567;
|
||||
|
||||
version# = "0.12.2"
|
||||
version# = "0.12.2";
|
||||
source = remoteGit {
|
||||
url = "https://gitlab.freedesktop.org/libbsd/libbsd.git"
|
||||
tag = version
|
||||
checksum = "NVS0xFLTwSP8JiElEftsZ-e1_C-IgJhHrHE77RwKt5178M7r087waO-zYx2_dfGX"
|
||||
}
|
||||
url = "https://gitlab.freedesktop.org/libbsd/libbsd.git";
|
||||
tag = version;
|
||||
checksum = "NVS0xFLTwSP8JiElEftsZ-e1_C-IgJhHrHE77RwKt5178M7r087waO-zYx2_dfGX";
|
||||
};
|
||||
|
||||
exec = make {
|
||||
generate = "echo '${version}' > .dist-version && ./autogen"
|
||||
}
|
||||
generate = "echo '" + version + "' > .dist-version && ./autogen";
|
||||
};
|
||||
|
||||
inputs = [
|
||||
automake
|
||||
libtool
|
||||
automake,
|
||||
libtool,
|
||||
|
||||
libmd
|
||||
]
|
||||
libmd,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,43 +1,44 @@
|
||||
package libcap {
|
||||
description = "a library for getting and setting POSIX.1e draft 15 capabilities"
|
||||
website = "https://sites.google.com/site/fullycapable"
|
||||
anitya = 1569
|
||||
description = "a library for getting and setting POSIX.1e draft 15 capabilities";
|
||||
website = "https://sites.google.com/site/fullycapable";
|
||||
anitya = 1569;
|
||||
|
||||
version# = "2.78"
|
||||
version# = "2.78";
|
||||
source = remoteTar {
|
||||
url = "https://git.kernel.org/pub/scm/libs/libcap/libcap.git/snapshot/libcap-${version}.tar.gz"
|
||||
checksum = "wFdUkBhFMD9InPnrBZyegWrlPSAg_9JiTBC-eSFyWWlmbzL2qjh2mKxr9Kx2a8ut"
|
||||
compress = gzip
|
||||
}
|
||||
url = "https://git.kernel.org/pub/scm/libs/libcap/libcap.git/"+
|
||||
"snapshot/libcap-"+version+".tar.gz";
|
||||
checksum = "wFdUkBhFMD9InPnrBZyegWrlPSAg_9JiTBC-eSFyWWlmbzL2qjh2mKxr9Kx2a8ut";
|
||||
compress = gzip;
|
||||
};
|
||||
|
||||
// uses source tree as scratch space
|
||||
writable
|
||||
chmod
|
||||
writable = true;
|
||||
chmod = true;
|
||||
|
||||
env = [
|
||||
"prefix=/system"
|
||||
"lib=lib"
|
||||
]
|
||||
"prefix=/system",
|
||||
"lib=lib",
|
||||
];
|
||||
|
||||
early = "ln -s ../system/bin/bash /bin/"
|
||||
early = "\nln -s ../system/bin/bash /bin/\n";
|
||||
|
||||
exec = make {
|
||||
skipConfigure
|
||||
inPlace
|
||||
skipConfigure = true;
|
||||
inPlace = true;
|
||||
|
||||
make = [
|
||||
"CC=cc"
|
||||
"all"
|
||||
]
|
||||
"CC=cc",
|
||||
"all",
|
||||
];
|
||||
|
||||
check = [
|
||||
"CC=cc"
|
||||
"test"
|
||||
]
|
||||
}
|
||||
"CC=cc",
|
||||
"test",
|
||||
];
|
||||
};
|
||||
|
||||
inputs = [
|
||||
bash
|
||||
diffutils
|
||||
]
|
||||
bash,
|
||||
diffutils,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package libconfig {
|
||||
website = "https://hyperrealm.github.io/libconfig";
|
||||
anitya = 1580;
|
||||
|
||||
version* = "1.8.2";
|
||||
version# = "1.8.2";
|
||||
source = remoteGitHub {
|
||||
suffix = "hyperrealm/libconfig";
|
||||
tag = "v"+version;
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
package libdisplay-info {
|
||||
description = "EDID and DisplayID library"
|
||||
website = "https://gitlab.freedesktop.org/emersion/libdisplay-info"
|
||||
anitya = 326668
|
||||
description = "EDID and DisplayID library";
|
||||
website = "https://gitlab.freedesktop.org/emersion/libdisplay-info";
|
||||
anitya = 326668;
|
||||
|
||||
version := "0.3.0"
|
||||
version# = "0.3.0";
|
||||
source = remoteGitLab {
|
||||
domain = "gitlab.freedesktop.org"
|
||||
suffix = "emersion/libdisplay-info"
|
||||
ref = version
|
||||
checksum = "yjOqPUHHYgRtpqGw5RI1n2Q1_hO5j0LiFNMbjcRWV4Nf71XwwoC9fZMlKBDeLchT"
|
||||
}
|
||||
domain = "gitlab.freedesktop.org";
|
||||
suffix = "emersion/libdisplay-info";
|
||||
ref = version;
|
||||
checksum = "yjOqPUHHYgRtpqGw5RI1n2Q1_hO5j0LiFNMbjcRWV4Nf71XwwoC9fZMlKBDeLchT";
|
||||
};
|
||||
|
||||
exec = meson()
|
||||
exec = meson {};
|
||||
|
||||
inputs = [
|
||||
diffutils
|
||||
diffutils,
|
||||
|
||||
hwdata
|
||||
]
|
||||
hwdata,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,29 +1,29 @@
|
||||
package libdrm {
|
||||
description = "a userspace library for accessing the DRM"
|
||||
website = "https://dri.freedesktop.org"
|
||||
anitya = 1596
|
||||
description = "a userspace library for accessing the DRM";
|
||||
website = "https://dri.freedesktop.org";
|
||||
anitya = 1596;
|
||||
|
||||
version# = "2.4.133"
|
||||
version# = "2.4.133";
|
||||
source = remoteGitLab {
|
||||
domain = "gitlab.freedesktop.org"
|
||||
suffix = "mesa/libdrm"
|
||||
ref = "libdrm-"+version
|
||||
checksum = "bfj296NcR9DndO11hqDbSRFPqaweSLMqRk3dlCPZpM6FONX1WZ9J4JdbTDMUd1rU"
|
||||
}
|
||||
domain = "gitlab.freedesktop.org";
|
||||
suffix = "mesa/libdrm";
|
||||
ref = "libdrm-"+version;
|
||||
checksum = "bfj296NcR9DndO11hqDbSRFPqaweSLMqRk3dlCPZpM6FONX1WZ9J4JdbTDMUd1rU";
|
||||
};
|
||||
|
||||
exec = meson {
|
||||
setup = endi [
|
||||
"Dintel": true
|
||||
]
|
||||
}
|
||||
setup = {
|
||||
"Dintel": "enabled";
|
||||
};
|
||||
};
|
||||
|
||||
inputs = [
|
||||
// symbols check fail with llvm nm
|
||||
binutils
|
||||
binutils,
|
||||
|
||||
libpciaccess
|
||||
kernel-headers
|
||||
]
|
||||
libpciaccess,
|
||||
kernel-headers,
|
||||
];
|
||||
|
||||
runtime = [ libpciaccess ]
|
||||
runtime = [ libpciaccess ];
|
||||
}
|
||||
|
||||
@@ -1,21 +1,24 @@
|
||||
package libepoxy {
|
||||
description = "a library for handling OpenGL function pointer management"
|
||||
website = "https://github.com/anholt/libepoxy"
|
||||
anitya = 6090
|
||||
description = "a library for handling OpenGL function pointer management";
|
||||
website = "https://github.com/anholt/libepoxy";
|
||||
anitya = 6090;
|
||||
|
||||
version# = "1.5.10"
|
||||
version# = "1.5.10";
|
||||
source = remoteGitHub {
|
||||
suffix = "anholt/libepoxy"
|
||||
tag = version
|
||||
checksum = "OHI8wshrlGw6BMGrmSyejJtwzM2gPhyFJrTsKxULyKMmYrfgcOe7Iw2ibVoUND_Q"
|
||||
}
|
||||
suffix = "anholt/libepoxy";
|
||||
tag = version;
|
||||
checksum = "OHI8wshrlGw6BMGrmSyejJtwzM2gPhyFJrTsKxULyKMmYrfgcOe7Iw2ibVoUND_Q";
|
||||
};
|
||||
|
||||
exec = meson {
|
||||
setup = yn [
|
||||
"Dglx": false
|
||||
"Degl": false
|
||||
]
|
||||
}
|
||||
setup = {
|
||||
"Dglx": "yes";
|
||||
"Degl": "yes";
|
||||
};
|
||||
};
|
||||
|
||||
inputs = [ libX11 ]
|
||||
inputs = [
|
||||
libglvnd,
|
||||
libX11,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
package libev {
|
||||
description = "a full-featured and high-performance event loop"
|
||||
website = "http://libev.schmorp.de"
|
||||
anitya = 1605
|
||||
description = "a full-featured and high-performance event loop";
|
||||
website = "http://libev.schmorp.de";
|
||||
anitya = 1605;
|
||||
|
||||
version# = "4.33"
|
||||
version# = "4.33";
|
||||
source = remoteTar {
|
||||
url = "https://dist.schmorp.de/libev/Attic/libev-${version}.tar.gz"
|
||||
checksum = "774eSXV_4k8PySRprUDChbEwsw-kzjIFnJ3MpNOl5zDpamBRvC3BqPyRxvkwcL6_"
|
||||
compress = gzip
|
||||
}
|
||||
url = "https://dist.schmorp.de/libev/Attic/libev-"+version+".tar.gz";
|
||||
checksum = "774eSXV_4k8PySRprUDChbEwsw-kzjIFnJ3MpNOl5zDpamBRvC3BqPyRxvkwcL6_";
|
||||
compress = gzip;
|
||||
};
|
||||
|
||||
exec = make()
|
||||
exec = make {};
|
||||
}
|
||||
|
||||
26
internal/rosa/package/libevdev.az
Normal file
26
internal/rosa/package/libevdev.az
Normal file
@@ -0,0 +1,26 @@
|
||||
package libevdev {
|
||||
description = "wrapper library for evdev devices";
|
||||
website = "https://www.freedesktop.org/software/libevdev";
|
||||
anitya = 20540;
|
||||
|
||||
version# = "1.13.6";
|
||||
source = remoteGitLab {
|
||||
domain = "gitlab.freedesktop.org";
|
||||
suffix = "libevdev/libevdev";
|
||||
ref = "libevdev-"+version;
|
||||
checksum = "HJbLafbpqPaKvQitt0t484DiHPeg3t_CNv-45MluNUT66vYIdF7FSfrK0vSpUCdi";
|
||||
};
|
||||
|
||||
exec = meson {
|
||||
setup = {
|
||||
"Ddocumentation": "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
inputs = [
|
||||
check,
|
||||
bash,
|
||||
|
||||
kernel-headers,
|
||||
];
|
||||
}
|
||||
@@ -1,18 +1,22 @@
|
||||
package libexpat {
|
||||
description = "a stream-oriented XML parser library"
|
||||
website = "https://libexpat.github.io"
|
||||
anitya = 770
|
||||
description = "a stream-oriented XML parser library";
|
||||
website = "https://libexpat.github.io";
|
||||
anitya = 770;
|
||||
|
||||
version# = "2.8.1"
|
||||
version# = "2.8.1";
|
||||
source = remoteGitHubRelease {
|
||||
suffix = "libexpat/libexpat"
|
||||
tag = "R_"+replace(version, ".", "_")
|
||||
name = "expat-${version}.tar.bz2";
|
||||
checksum = "iMEtbOJhQfGof2GxSlxffQSI1va_NDDQ9VIuqcPbNZ0291Dr8wttD5QecYyjIQap"
|
||||
compress = bzip2
|
||||
}
|
||||
suffix = "libexpat/libexpat";
|
||||
tag = "R_"+replace {
|
||||
s = version;
|
||||
old = ".";
|
||||
new = "_";
|
||||
};
|
||||
name = "expat-"+version+".tar.bz2";
|
||||
checksum = "iMEtbOJhQfGof2GxSlxffQSI1va_NDDQ9VIuqcPbNZ0291Dr8wttD5QecYyjIQap";
|
||||
compress = bzip2;
|
||||
};
|
||||
|
||||
exec = make()
|
||||
exec = make {};
|
||||
|
||||
inputs = [ bash ]
|
||||
inputs = [ bash ];
|
||||
}
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
package libffi {
|
||||
description = "a portable, high level programming interface to various calling conventions"
|
||||
website = "https://sourceware.org/libffi"
|
||||
anitya = 1611
|
||||
description = "a portable, high level programming interface to various calling conventions";
|
||||
website = "https://sourceware.org/libffi";
|
||||
anitya = 1611;
|
||||
|
||||
version# = "3.5.2"
|
||||
version# = "3.5.2";
|
||||
source = remoteGitHubRelease {
|
||||
suffix = "libffi/libffi"
|
||||
tag = "v"+version
|
||||
name = "libffi-${version}.tar.gz"
|
||||
checksum = "2_Q-ZNBBbVhltfL5zEr0wljxPegUimTK4VeMSiwJEGksls3n4gj3lV0Ly3vviSFH"
|
||||
compress = gzip
|
||||
}
|
||||
suffix = "libffi/libffi";
|
||||
tag = "v"+version;
|
||||
name = "libffi-"+version+".tar.gz";
|
||||
checksum = "2_Q-ZNBBbVhltfL5zEr0wljxPegUimTK4VeMSiwJEGksls3n4gj3lV0Ly3vviSFH";
|
||||
compress = gzip;
|
||||
};
|
||||
|
||||
exec = make()
|
||||
exec = make {};
|
||||
|
||||
inputs = [ kernel-headers ]
|
||||
inputs = [ kernel-headers ];
|
||||
}
|
||||
|
||||
@@ -1,25 +1,25 @@
|
||||
package libgd {
|
||||
description = "an open source code library for the dynamic creation of images"
|
||||
website = "https://libgd.github.io"
|
||||
anitya = 880
|
||||
description = "an open source code library for the dynamic creation of images";
|
||||
website = "https://libgd.github.io";
|
||||
anitya = 880;
|
||||
|
||||
version# = "2.3.3"
|
||||
version# = "2.3.3";
|
||||
source = remoteGitHubRelease {
|
||||
suffix = "libgd/libgd"
|
||||
tag = "gd"+version
|
||||
name = "libgd-${version}.tar.gz"
|
||||
checksum = "8T-sh1_FJT9K9aajgxzh8ot6vWIF-xxjcKAHvTak9MgGUcsFfzP8cAvvv44u2r36"
|
||||
compress = gzip
|
||||
}
|
||||
suffix = "libgd/libgd";
|
||||
tag = "gd-"+version;
|
||||
name = "libgd-"+version+".tar.gz";
|
||||
checksum = "8T-sh1_FJT9K9aajgxzh8ot6vWIF-xxjcKAHvTak9MgGUcsFfzP8cAvvv44u2r36";
|
||||
compress = gzip;
|
||||
};
|
||||
|
||||
env = [
|
||||
"TMPDIR=/dev/shm/gd"
|
||||
]
|
||||
"TMPDIR=/dev/shm/gd",
|
||||
];
|
||||
|
||||
early = "mkdir /dev/shm/gd"
|
||||
early = "\nmkdir /dev/shm/gd\n";
|
||||
|
||||
exec = make()
|
||||
exec = make {};
|
||||
|
||||
inputs = [ zlib ]
|
||||
runtime = [ zlib ]
|
||||
inputs = [ zlib ];
|
||||
runtime = [ zlib ];
|
||||
}
|
||||
|
||||
@@ -1,36 +1,38 @@
|
||||
package libglvnd {
|
||||
description = "The GL Vendor-Neutral Dispatch library"
|
||||
website = "https://gitlab.freedesktop.org/glvnd/libglvnd"
|
||||
anitya = 12098
|
||||
description = "The GL Vendor-Neutral Dispatch library";
|
||||
website = "https://gitlab.freedesktop.org/glvnd/libglvnd";
|
||||
anitya = 12098;
|
||||
|
||||
version# = "1.7.0"
|
||||
version# = "1.7.0";
|
||||
source = remoteGitLab {
|
||||
domain = "gitlab.freedesktop.org"
|
||||
suffix = "glvnd/libglvnd"
|
||||
ref = "v"+version
|
||||
checksum = "eIQJK2sgFQDHdeFkQO87TrSUaZRFG4y2DrwA8Ut-sGboI59uw1OOiIVqq2AIwnGY"
|
||||
}
|
||||
domain = "gitlab.freedesktop.org";
|
||||
suffix = "glvnd/libglvnd";
|
||||
ref = "v"+version;
|
||||
checksum = "eIQJK2sgFQDHdeFkQO87TrSUaZRFG4y2DrwA8Ut-sGboI59uw1OOiIVqq2AIwnGY";
|
||||
};
|
||||
|
||||
exec = meson {
|
||||
setup = endi [
|
||||
"Dx11": true
|
||||
"Dglx": true
|
||||
]
|
||||
setup = {
|
||||
"Dx11": "enabled";
|
||||
"Dglx": "enabled";
|
||||
};
|
||||
|
||||
postCompile = `export DISPLAY=':0'
|
||||
Xvfb &
|
||||
XVFB_PID="$!"
|
||||
trap 'kill $XVFB_PID && wait $XVFB_PID' EXIT`
|
||||
}
|
||||
postCompile = `
|
||||
export DISPLAY=':0'
|
||||
Xvfb &
|
||||
XVFB_PID="$!"
|
||||
trap 'kill $XVFB_PID && wait $XVFB_PID' EXIT
|
||||
`;
|
||||
};
|
||||
|
||||
inputs = [
|
||||
// symbols check fail with llvm nm
|
||||
binutils
|
||||
binutils,
|
||||
// test suite wants X server
|
||||
xserver
|
||||
xserver,
|
||||
|
||||
libXext
|
||||
]
|
||||
libXext,
|
||||
];
|
||||
|
||||
runtime = [ libXext ]
|
||||
runtime = [ libXext ];
|
||||
}
|
||||
|
||||
38
internal/rosa/package/libinput.az
Normal file
38
internal/rosa/package/libinput.az
Normal file
@@ -0,0 +1,38 @@
|
||||
package libinput {
|
||||
description = "input device management and event handling library";
|
||||
website = "https://www.freedesktop.org/wiki/Software/libinput";
|
||||
anitya = 5781;
|
||||
|
||||
version# = "1.31.2";
|
||||
source = remoteGitLab {
|
||||
domain = "gitlab.freedesktop.org";
|
||||
suffix = "libinput/libinput";
|
||||
ref = version;
|
||||
checksum = "nEuOF4cBgyk87IE7vnZChZdZzOFxLkQ8R_jX0Px8z1DN3oHR7lsYZ--3ZWeegeRp";
|
||||
};
|
||||
|
||||
early = "ln -sf ../system/bin/bash /bin/\n";
|
||||
|
||||
exec = meson {
|
||||
setup = {
|
||||
"Dmtdev": "false";
|
||||
"Dlibwacom": "false";
|
||||
"Ddebug-gui": "false";
|
||||
};
|
||||
};
|
||||
|
||||
inputs = [
|
||||
bash,
|
||||
diffutils,
|
||||
python-pytest,
|
||||
|
||||
libudev-zero,
|
||||
libevdev,
|
||||
kernel-headers,
|
||||
];
|
||||
|
||||
runtime = [
|
||||
libudev-zero,
|
||||
libevdev,
|
||||
];
|
||||
}
|
||||
20
internal/rosa/package/libliftoff.az
Normal file
20
internal/rosa/package/libliftoff.az
Normal file
@@ -0,0 +1,20 @@
|
||||
package libliftoff {
|
||||
description = "lightweight KMS plane library";
|
||||
website = "https://gitlab.freedesktop.org/emersion/libliftoff";
|
||||
anitya = 236274;
|
||||
|
||||
version# = "0.5.0";
|
||||
source = remoteGitLab {
|
||||
domain = "gitlab.freedesktop.org";
|
||||
suffix = "emersion/libliftoff";
|
||||
ref = "v"+version;
|
||||
checksum = "anxKfrW56iK7l6-bm6RGcaC_uk-Kc8x3_VqKaywmSjv5HLCs6A2sHyjGUbOC9xZv";
|
||||
};
|
||||
|
||||
exec = meson {};
|
||||
|
||||
inputs = [
|
||||
libdrm,
|
||||
kernel-headers,
|
||||
];
|
||||
}
|
||||
@@ -1,22 +1,22 @@
|
||||
package libmd {
|
||||
description = "Message Digest functions from BSD systems"
|
||||
website = "https://www.hadrons.org/software/libmd"
|
||||
anitya = 15525
|
||||
description = "Message Digest functions from BSD systems";
|
||||
website = "https://www.hadrons.org/software/libmd";
|
||||
anitya = 15525;
|
||||
|
||||
version# = "1.2.0"
|
||||
version# = "1.2.0";
|
||||
source = remoteGit {
|
||||
url = "https://git.hadrons.org/git/libmd.git"
|
||||
tag = version
|
||||
checksum = "1rJ6joAO0wwMZvSfnRNkc1MOhywyAq7SM8VmF92NvDtv7Qdl1LRbjm5fg_DFFtGj"
|
||||
}
|
||||
url = "https://git.hadrons.org/git/libmd.git";
|
||||
tag = version;
|
||||
checksum = "1rJ6joAO0wwMZvSfnRNkc1MOhywyAq7SM8VmF92NvDtv7Qdl1LRbjm5fg_DFFtGj";
|
||||
};
|
||||
|
||||
exec = make {
|
||||
generate = "echo '${version}' > .dist-version && ./autogen"
|
||||
preMake = "install -D /usr/src/libmd/src/helper.c src/helper.c"
|
||||
}
|
||||
generate = "echo '" + version + "' > .dist-version && ./autogen";
|
||||
preMake = "\ninstall -D /usr/src/libmd/src/helper.c src/helper.c\n";
|
||||
};
|
||||
|
||||
inputs = [
|
||||
automake
|
||||
libtool
|
||||
]
|
||||
automake,
|
||||
libtool,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,18 +1,27 @@
|
||||
package libpng {
|
||||
description = "the official PNG reference library"
|
||||
website = "https://www.libpng.org/pub/png/libpng.html"
|
||||
anitya = 1705
|
||||
description = "the official PNG reference library";
|
||||
website = "https://www.libpng.org/pub/png/libpng.html";
|
||||
anitya = 1705;
|
||||
|
||||
version# = "1.6.58"
|
||||
version# = "1.6.58";
|
||||
source = remoteTar {
|
||||
url = "https://downloads.sourceforge.net/project/libpng/libpng"+ trimPatch(version)
|
||||
+ "/${version}/libpng-${version}.tar.gz"
|
||||
checksum = "m_a5lROJH7vmF3cMjqwTUqURuQLhV1JQx2ySPzcN3VPdgDB9pG3UINsIx_mtkr-t"
|
||||
compress = gzip
|
||||
}
|
||||
url = "https://downloads.sourceforge.net/project/libpng/libpng"+
|
||||
join {
|
||||
elems = slice {
|
||||
elems = split {
|
||||
s = version;
|
||||
sep = ".";
|
||||
n = 3;
|
||||
};
|
||||
end = 2;
|
||||
};
|
||||
}+"/"+version+"/libpng-"+version+".tar.gz";
|
||||
checksum = "m_a5lROJH7vmF3cMjqwTUqURuQLhV1JQx2ySPzcN3VPdgDB9pG3UINsIx_mtkr-t";
|
||||
compress = gzip;
|
||||
};
|
||||
|
||||
exec = make()
|
||||
exec = make {};
|
||||
|
||||
inputs = [ zlib ]
|
||||
runtime = [ zlib ]
|
||||
inputs = [ zlib ];
|
||||
runtime = [ zlib ];
|
||||
}
|
||||
|
||||
@@ -1,22 +1,25 @@
|
||||
package libpsl {
|
||||
description = "provides functions to work with the Mozilla Public Suffix List"
|
||||
website = "https://rockdaboot.github.io/libpsl"
|
||||
anitya = 7305
|
||||
description = "provides functions to work with the Mozilla Public Suffix List";
|
||||
website = "https://rockdaboot.github.io/libpsl";
|
||||
anitya = 7305;
|
||||
|
||||
version# = "0.21.5"
|
||||
version# = "0.21.5";
|
||||
source = remoteGitHubRelease {
|
||||
suffix = "rockdaboot/libpsl"
|
||||
tag = version
|
||||
name = "libpsl-${version}.tar.gz"
|
||||
checksum = "XjfxSzh7peG2Vg4vJlL8z4JZJLcXqbuP6pLWkrGCmRxlnYUFTKNBqWGHCxEOlCad"
|
||||
compress = gzip
|
||||
}
|
||||
suffix = "rockdaboot/libpsl";
|
||||
tag = version;
|
||||
name = "libpsl-"+version+".tar.gz";
|
||||
checksum = "XjfxSzh7peG2Vg4vJlL8z4JZJLcXqbuP6pLWkrGCmRxlnYUFTKNBqWGHCxEOlCad";
|
||||
compress = gzip;
|
||||
};
|
||||
|
||||
writable
|
||||
early = `test_disable() { chmod +w "$2" && echo "$1" > "$2"; }
|
||||
test_disable 'int main(){return 0;}' tests/test-is-public-builtin.c`
|
||||
writable = true;
|
||||
early = `
|
||||
test_disable() { chmod +w "$2" && echo "$1" > "$2"; }
|
||||
|
||||
exec = make()
|
||||
test_disable 'int main(){return 0;}' tests/test-is-public-builtin.c
|
||||
`;
|
||||
|
||||
inputs = [ python ]
|
||||
exec = make {};
|
||||
|
||||
inputs = [ python ];
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package libseccomp {
|
||||
website = "https://github.com/seccomp/libseccomp";
|
||||
anitya = 13823;
|
||||
|
||||
version* = "2.6.0";
|
||||
version# = "2.6.0";
|
||||
source = remoteGitHubRelease {
|
||||
suffix = "seccomp/libseccomp";
|
||||
tag = "v"+version;
|
||||
|
||||
@@ -1,29 +1,36 @@
|
||||
package libtirpc {
|
||||
description = "a port of Suns Transport-Independent RPC library to Linux"
|
||||
website = "https://sourceforge.net/projects/libtirpc"
|
||||
anitya = 1740
|
||||
description = "a port of Suns Transport-Independent RPC library to Linux";
|
||||
website = "https://sourceforge.net/projects/libtirpc";
|
||||
anitya = 1740;
|
||||
|
||||
version# = "1.3.7"
|
||||
version# = "1.3.7";
|
||||
source = remoteGit {
|
||||
url = "git://linux-nfs.org/~steved/libtirpc"
|
||||
tag = "libtirpc-"+join(split(version, ".", 3), "-")
|
||||
checksum = "nzFfu7LNvnSNiNAryD1vtnNWnU-Xqee8KqfXUKoBf5yjb5-dkeRkYuRijdCoYLof"
|
||||
}
|
||||
url = "git://linux-nfs.org/~steved/libtirpc";
|
||||
tag = "libtirpc-"+join {
|
||||
elems = split {
|
||||
s = version;
|
||||
sep = ".";
|
||||
n = 3;
|
||||
};
|
||||
sep = "-";
|
||||
};
|
||||
checksum = "nzFfu7LNvnSNiNAryD1vtnNWnU-Xqee8KqfXUKoBf5yjb5-dkeRkYuRijdCoYLof";
|
||||
};
|
||||
|
||||
exec = make {
|
||||
generate = "sh -e ./bootstrap"
|
||||
configure = [
|
||||
"CFLAGS": r`"$(pkg-config --cflags libbsd-overlay) ${CFLAGS:-}"`
|
||||
"disable-gssapi"
|
||||
]
|
||||
}
|
||||
generate = "sh -e ./bootstrap";
|
||||
configure = {
|
||||
"CFLAGS": `"$(pkg-config --cflags libbsd-overlay) ${CFLAGS:-}"`;
|
||||
"disable-gssapi";
|
||||
};
|
||||
};
|
||||
|
||||
inputs = [
|
||||
automake
|
||||
libtool
|
||||
pkg-config
|
||||
automake,
|
||||
libtool,
|
||||
pkg-config,
|
||||
|
||||
libbsd
|
||||
kernel-headers
|
||||
]
|
||||
libbsd,
|
||||
kernel-headers,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,28 +1,28 @@
|
||||
package libucontext {
|
||||
description = "ucontext implementation featuring glibc-compatible ABI"
|
||||
website = "https://github.com/kaniini/libucontext"
|
||||
anitya = 17085
|
||||
description = "ucontext implementation featuring glibc-compatible ABI";
|
||||
website = "https://github.com/kaniini/libucontext";
|
||||
anitya = 17085;
|
||||
|
||||
version# = "1.5.1"
|
||||
version# = "1.5.1";
|
||||
source = remoteGitHub {
|
||||
suffix = "kaniini/libucontext"
|
||||
tag = "libucontext-"+version
|
||||
checksum = "mUgeyJknjMxT-5fORzz-rqhZfP3Y7EZGBhOwvhuX7MsF4Pk9wkuwtrLf5IML-jWu"
|
||||
}
|
||||
suffix = "kaniini/libucontext";
|
||||
tag = "libucontext-"+version;
|
||||
checksum = "mUgeyJknjMxT-5fORzz-rqhZfP3Y7EZGBhOwvhuX7MsF4Pk9wkuwtrLf5IML-jWu";
|
||||
};
|
||||
|
||||
// uses source tree as scratch space
|
||||
writable
|
||||
chmod
|
||||
enterSource
|
||||
writable = true;
|
||||
chmod = true;
|
||||
enterSource = true;
|
||||
|
||||
exec = make {
|
||||
omitDefaults
|
||||
skipConfigure
|
||||
inPlace
|
||||
omitDefaults = true;
|
||||
skipConfigure = true;
|
||||
inPlace = true;
|
||||
|
||||
make = [
|
||||
"ARCH=" + linuxArch
|
||||
]
|
||||
install = "make prefix=/system DESTDIR=/work install"
|
||||
}
|
||||
"ARCH=" + linuxArch,
|
||||
];
|
||||
install = "make prefix=/system DESTDIR=/work install";
|
||||
};
|
||||
}
|
||||
|
||||
27
internal/rosa/package/libudev-zero.az
Normal file
27
internal/rosa/package/libudev-zero.az
Normal file
@@ -0,0 +1,27 @@
|
||||
package libudev-zero {
|
||||
description = "daemonless replacement for libudev";
|
||||
website = "https://github.com/illiliti/libudev-zero";
|
||||
anitya = 145201;
|
||||
|
||||
version# = "1.0.4";
|
||||
source = remoteGitHub {
|
||||
suffix = "illiliti/libudev-zero";
|
||||
tag = version;
|
||||
checksum = "MHETnJwIdXc62qvE1Ya9xb2Shb53gWxdXzr8FVCFEacXF1rc01yE9guP3eXlKhYw";
|
||||
};
|
||||
|
||||
env = [ "CC=cc" ];
|
||||
enterSource = true;
|
||||
writable = true;
|
||||
|
||||
exec = make {
|
||||
inPlace = true;
|
||||
skipConfigure = true;
|
||||
skipCheck = true;
|
||||
|
||||
make = [ "PREFIX=/system" ];
|
||||
install = "make DESTDIR=/work PREFIX=/system install";
|
||||
};
|
||||
|
||||
inputs = [ kernel-headers ];
|
||||
}
|
||||
@@ -1,35 +1,35 @@
|
||||
package libva {
|
||||
description = "an implementation for VA-API (Video Acceleration API)"
|
||||
website = "https://01.org/vaapi"
|
||||
anitya = 1752
|
||||
description = "an implementation for VA-API (Video Acceleration API)";
|
||||
website = "https://01.org/vaapi";
|
||||
anitya = 1752;
|
||||
|
||||
version# = "2.23.0"
|
||||
version# = "2.23.0";
|
||||
source = remoteGitHub {
|
||||
suffix = "intel/libva"
|
||||
tag = version
|
||||
checksum = "UmF5tPyWIG_w5kiR3KFpoYbF7UUcaak5tyc-RhOheNTwQlLkPlifreFYCM9FQxbq"
|
||||
}
|
||||
suffix = "intel/libva";
|
||||
tag = version;
|
||||
checksum = "UmF5tPyWIG_w5kiR3KFpoYbF7UUcaak5tyc-RhOheNTwQlLkPlifreFYCM9FQxbq";
|
||||
};
|
||||
|
||||
exec = meson {
|
||||
setup = yn [
|
||||
"Dwith_x11": true
|
||||
"Dwith_glx": true
|
||||
"Dwith_wayland": true
|
||||
]
|
||||
}
|
||||
setup = {
|
||||
"Dwith_x11": "yes";
|
||||
"Dwith_glx": "yes";
|
||||
"Dwith_wayland": "yes";
|
||||
};
|
||||
};
|
||||
|
||||
inputs = [
|
||||
libdrm
|
||||
libXfixes
|
||||
libglvnd
|
||||
wayland
|
||||
kernel-headers
|
||||
]
|
||||
libdrm,
|
||||
libXfixes,
|
||||
libglvnd,
|
||||
wayland,
|
||||
kernel-headers,
|
||||
];
|
||||
|
||||
runtime = [
|
||||
libdrm
|
||||
libXfixes
|
||||
libglvnd
|
||||
wayland
|
||||
]
|
||||
libdrm,
|
||||
libXfixes,
|
||||
libglvnd,
|
||||
wayland,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
package libxml2 {
|
||||
description = "an XML toolkit implemented in C"
|
||||
website = "https://gitlab.gnome.org/GNOME/libxml2"
|
||||
anitya = 1783
|
||||
description = "an XML toolkit implemented in C";
|
||||
website = "https://gitlab.gnome.org/GNOME/libxml2";
|
||||
anitya = 1783;
|
||||
|
||||
version# = "2.15.3"
|
||||
version# = "2.15.3";
|
||||
source = remoteGitLab {
|
||||
domain = "gitlab.gnome.org"
|
||||
suffix = "GNOME/libxml2"
|
||||
ref = "v"+version
|
||||
checksum = "oJy74htGlEpf70KPvpW18fYJo0RQQkCXZRwqUz6NoXborS3HCq3Nm4gsyaSeNmUH"
|
||||
}
|
||||
domain = "gitlab.gnome.org";
|
||||
suffix = "GNOME/libxml2";
|
||||
ref = "v"+version;
|
||||
checksum = "oJy74htGlEpf70KPvpW18fYJo0RQQkCXZRwqUz6NoXborS3HCq3Nm4gsyaSeNmUH";
|
||||
};
|
||||
|
||||
// can't create shell.out: Read-only file system
|
||||
writable
|
||||
writable = true;
|
||||
|
||||
exec = meson()
|
||||
exec = meson {};
|
||||
|
||||
inputs = [
|
||||
git
|
||||
diffutils
|
||||
]
|
||||
git,
|
||||
diffutils,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,31 +1,31 @@
|
||||
package libxslt {
|
||||
description = "an XSLT processor based on libxml2"
|
||||
website = "https://gitlab.gnome.org/GNOME/libxslt"
|
||||
anitya = 13301
|
||||
description = "an XSLT processor based on libxml2";
|
||||
website = "https://gitlab.gnome.org/GNOME/libxslt";
|
||||
anitya = 13301;
|
||||
|
||||
version# = "1.1.45"
|
||||
version# = "1.1.45";
|
||||
source = remoteGitLab {
|
||||
domain = "gitlab.gnome.org"
|
||||
suffix = "GNOME/libxslt"
|
||||
ref = "v"+version
|
||||
checksum = "67ks7v8od2oWaEGf23Sst_Xbn_8brQyolQjqxPoO-lK35k_WJhi2Px5JJgbk-nfn"
|
||||
}
|
||||
domain = "gitlab.gnome.org";
|
||||
suffix = "GNOME/libxslt";
|
||||
ref = "v"+version;
|
||||
checksum = "67ks7v8od2oWaEGf23Sst_Xbn_8brQyolQjqxPoO-lK35k_WJhi2Px5JJgbk-nfn";
|
||||
};
|
||||
|
||||
exec = make {
|
||||
generate = "NOCONFIGURE=1 ./autogen.sh"
|
||||
generate = "NOCONFIGURE=1 ./autogen.sh";
|
||||
|
||||
// python libxml2 cyclic dependency
|
||||
skipCheck
|
||||
}
|
||||
skipCheck = true;
|
||||
};
|
||||
|
||||
inputs = [
|
||||
automake
|
||||
libtool
|
||||
python
|
||||
pkg-config
|
||||
automake,
|
||||
libtool,
|
||||
python,
|
||||
pkg-config,
|
||||
|
||||
libxml2
|
||||
]
|
||||
libxml2,
|
||||
];
|
||||
|
||||
runtime = [ libxml2 ]
|
||||
runtime = [ libxml2 ];
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package lit {
|
||||
description = "a portable tool for executing LLVM and Clang style test suites"
|
||||
website = "https://llvm.org/docs/CommandGuide/lit.html"
|
||||
description = "a portable tool for executing LLVM and Clang style test suites";
|
||||
website = "https://llvm.org/docs/CommandGuide/lit.html";
|
||||
|
||||
source = llvm-project
|
||||
source = llvm-project;
|
||||
|
||||
exec = pip {
|
||||
append = [ "llvm", "utils", "lit" ]
|
||||
append = [ "llvm", "utils", "lit" ];
|
||||
// already checked during llvm
|
||||
skipCheck
|
||||
}
|
||||
skipCheck = true;
|
||||
};
|
||||
|
||||
inputs = [ python-setuptools ]
|
||||
runtime = [ python ]
|
||||
inputs = [ python-setuptools ];
|
||||
runtime = [ python ];
|
||||
}
|
||||
|
||||
@@ -1,47 +1,49 @@
|
||||
package lm_sensors {
|
||||
description = "user-space support for hardware monitoring drivers"
|
||||
website = "https://hwmon.wiki.kernel.org/lm_sensors"
|
||||
anitya = 1831
|
||||
description = "user-space support for hardware monitoring drivers";
|
||||
website = "https://hwmon.wiki.kernel.org/lm_sensors";
|
||||
anitya = 1831;
|
||||
|
||||
version# = "3-6-2"
|
||||
version# = "3-6-2";
|
||||
source = remoteGitHub {
|
||||
suffix = "lm-sensors/lm-sensors"
|
||||
tag = "V"+version
|
||||
checksum = "7JYNutrihe-FP6r3ftf96uFZJJWPfxnBHL0ALSMA-vovaXVRr-sAjlLitw7WWpCI"
|
||||
}
|
||||
suffix = "lm-sensors/lm-sensors";
|
||||
tag = "V"+version;
|
||||
checksum = "7JYNutrihe-FP6r3ftf96uFZJJWPfxnBHL0ALSMA-vovaXVRr-sAjlLitw7WWpCI";
|
||||
};
|
||||
|
||||
writable
|
||||
chmod
|
||||
enterSource
|
||||
writable = true;
|
||||
chmod = true;
|
||||
enterSource = true;
|
||||
|
||||
early = r`ln -s \
|
||||
../../system/bin/perl \
|
||||
/usr/bin/`
|
||||
early = `
|
||||
ln -s \
|
||||
../../system/bin/perl \
|
||||
/usr/bin/
|
||||
`;
|
||||
|
||||
exec = make {
|
||||
inPlace
|
||||
skipConfigure
|
||||
inPlace = true;
|
||||
skipConfigure = true;
|
||||
|
||||
make = [
|
||||
"CC=cc"
|
||||
"ETCDIR=/system/etc"
|
||||
"PREFIX=/system"
|
||||
]
|
||||
"CC=cc",
|
||||
"ETCDIR=/system/etc",
|
||||
"PREFIX=/system",
|
||||
];
|
||||
|
||||
check = [
|
||||
"CC=cc"
|
||||
"check"
|
||||
]
|
||||
"CC=cc",
|
||||
"check",
|
||||
];
|
||||
|
||||
install = "make DESTDIR=/work PREFIX=/system install"
|
||||
}
|
||||
install = "make DESTDIR=/work PREFIX=/system install";
|
||||
};
|
||||
|
||||
inputs = [
|
||||
perl
|
||||
perl-Test-Cmd
|
||||
perl,
|
||||
perl-Test-Cmd,
|
||||
|
||||
m4
|
||||
bison
|
||||
flex
|
||||
]
|
||||
m4,
|
||||
bison,
|
||||
flex,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,24 +1,25 @@
|
||||
package make {
|
||||
description = "a tool which controls the generation of executables and other non-source files"
|
||||
website = "https://www.gnu.org/software/make"
|
||||
anitya = 1877
|
||||
description = "a tool which controls the generation of executables and other non-source files";
|
||||
website = "https://www.gnu.org/software/make";
|
||||
anitya = 1877;
|
||||
|
||||
version# = "4.4.1"
|
||||
version# = "4.4.1";
|
||||
source = remoteTar {
|
||||
url = "https://ftpmirror.gnu.org/gnu/make/make-${version}.tar.gz"
|
||||
checksum = "YS_B07ZcAy9PbaK5_vKGj64SrxO2VMpnMKfc9I0Q9IC1rn0RwOH7802pJoj2Mq4a"
|
||||
compress = gzip
|
||||
}
|
||||
url = "https://ftpmirror.gnu.org/gnu/make/make-"+version+".tar.gz";
|
||||
checksum = "YS_B07ZcAy9PbaK5_vKGj64SrxO2VMpnMKfc9I0Q9IC1rn0RwOH7802pJoj2Mq4a";
|
||||
compress = gzip;
|
||||
};
|
||||
|
||||
toyboxEarly
|
||||
toyboxEarly = true;
|
||||
|
||||
exec = generic {
|
||||
build = r`/usr/src/make/configure \
|
||||
--prefix=/system \
|
||||
--build="${ROSA_TRIPLE}" \
|
||||
--disable-dependency-tracking
|
||||
./build.sh`
|
||||
build = `/usr/src/make/configure \
|
||||
--prefix=/system \
|
||||
--build="${ROSA_TRIPLE}" \
|
||||
--disable-dependency-tracking
|
||||
./build.sh
|
||||
`;
|
||||
// test suite wants perl
|
||||
install = "./make DESTDIR=/work install"
|
||||
}
|
||||
install = "./make DESTDIR=/work install\n";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,128 +1,139 @@
|
||||
package mesa {
|
||||
description = "open source implementations of OpenGL, OpenGL ES, Vulkan, OpenCL, and more"
|
||||
website = "https://mesa3d.org"
|
||||
anitya = 1970
|
||||
latest = anityaFallback
|
||||
description = "open source implementations of OpenGL, OpenGL ES, Vulkan, OpenCL, and more";
|
||||
website = "https://mesa3d.org";
|
||||
anitya = 1970;
|
||||
latest = anityaFallback;
|
||||
|
||||
version# = "26.1.1"
|
||||
version# = "26.1.1";
|
||||
source = remoteGitLab {
|
||||
domain = "gitlab.freedesktop.org"
|
||||
suffix = "mesa/mesa"
|
||||
ref = "mesa-"+version
|
||||
checksum = "OFCxGSTBe7qbnbVdazIJBNMFaQ-ylD5aRzo-JstSAdA0-hvVdRwsZiovMBm2rMzp"
|
||||
}
|
||||
domain = "gitlab.freedesktop.org";
|
||||
suffix = "mesa/mesa";
|
||||
ref = "mesa-"+version;
|
||||
checksum = "OFCxGSTBe7qbnbVdazIJBNMFaQ-ylD5aRzo-JstSAdA0-hvVdRwsZiovMBm2rMzp";
|
||||
};
|
||||
|
||||
exec = meson {
|
||||
setup = [
|
||||
"Dplatforms": "x11,wayland"
|
||||
"Dvideo-codecs": "all"
|
||||
setup = {
|
||||
"Dplatforms": "x11,wayland";
|
||||
"Dvideo-codecs": "all";
|
||||
|
||||
"Dglvnd": "enabled"
|
||||
"Dgbm": "enabled"
|
||||
"Dglvnd": "enabled";
|
||||
"Dgbm": "enabled";
|
||||
"Degl": "enabled";
|
||||
|
||||
"Dgallium-drivers": join([
|
||||
"asahi" // Apple AGX
|
||||
"crocus" // Intel legacy
|
||||
"etnaviv" // Vivante GPU designs (mostly NXP/Marvell SoCs)
|
||||
"freedreno" // Qualcomm Adreno (all Qualcomm SoCs)
|
||||
"i915" // Intel extra legacy
|
||||
"iris" // new Intel (Broadwell+)
|
||||
"lima" // ARM Mali 4xx
|
||||
"llvmpipe" // software renderer
|
||||
"nouveau" // Nvidia
|
||||
"panfrost" // ARM Mali Midgard and up (T/G series)
|
||||
"r300" // very old AMD
|
||||
"r600" // less old AMD
|
||||
"radeonsi" // new AMD (GCN+)
|
||||
"softpipe" // older software renderer
|
||||
"svga" // VMWare virtualized GPU
|
||||
"tegra" // Nvidia Tegra SoCs
|
||||
"v3d" // Broadcom VC5 (Raspberry Pi 4)
|
||||
"vc4" // Broadcom VC4 (Raspberry Pi 0-3)
|
||||
"virgl" // QEMU virtualized GPU (aka VirGL)
|
||||
"zink" // generic OpenGL over Vulkan, experimental
|
||||
"Dgallium-drivers": join {
|
||||
elems = [
|
||||
"asahi", // Apple AGX
|
||||
"crocus", // Intel legacy
|
||||
"etnaviv", // Vivante GPU designs (mostly NXP/Marvell SoCs)
|
||||
"freedreno", // Qualcomm Adreno (all Qualcomm SoCs)
|
||||
"i915", // Intel extra legacy
|
||||
"iris", // new Intel (Broadwell+)
|
||||
"lima", // ARM Mali 4xx
|
||||
"llvmpipe", // software renderer
|
||||
"nouveau", // Nvidia
|
||||
"panfrost", // ARM Mali Midgard and up (T/G series)
|
||||
"r300", // very old AMD
|
||||
"r600", // less old AMD
|
||||
"radeonsi", // new AMD (GCN+)
|
||||
"softpipe", // older software renderer
|
||||
"svga", // VMWare virtualized GPU
|
||||
"tegra", // Nvidia Tegra SoCs
|
||||
"v3d", // Broadcom VC5 (Raspberry Pi 4)
|
||||
"vc4", // Broadcom VC4 (Raspberry Pi 0-3)
|
||||
"virgl", // QEMU virtualized GPU (aka VirGL)
|
||||
"zink", // generic OpenGL over Vulkan, experimental
|
||||
|
||||
// d3d12: WSL emulated GPU (aka Dozen)
|
||||
// ethosu: accelerator
|
||||
// rocket: accelerator
|
||||
], ",")
|
||||
];
|
||||
sep = ",";
|
||||
};
|
||||
|
||||
"Dvulkan-drivers": join([
|
||||
"amd" // AMD (aka RADV)
|
||||
"broadcom" // Broadcom VC5 (Raspberry Pi 4, aka V3D)
|
||||
"freedreno" // Qualcomm Adreno (all Qualcomm SoCs)
|
||||
"intel" // new Intel (aka ANV)
|
||||
"intel_hasvk" // Intel Haswell/Broadwell, "legacy" Vulkan driver (https://www.phoronix.com/news/Intel-HasVK-Drop-Dead-Code)
|
||||
"panfrost" // ARM Mali Midgard and up (T/G series)
|
||||
"swrast" // software renderer (aka Lavapipe)
|
||||
"virtio" // QEMU virtualized GPU (aka VirGL)
|
||||
"imagination" // PowerVR Rogue
|
||||
"asahi" // Apple AGX
|
||||
"gfxstream" // Android virtualized GPU
|
||||
"Dvulkan-drivers": join {
|
||||
elems = [
|
||||
"amd", // AMD (aka RADV)
|
||||
"broadcom", // Broadcom VC5 (Raspberry Pi 4, aka V3D)
|
||||
"freedreno", // Qualcomm Adreno (all Qualcomm SoCs)
|
||||
"intel", // new Intel (aka ANV)
|
||||
"intel_hasvk", // Intel Haswell/Broadwell, "legacy" Vulkan driver (https://www.phoronix.com/news/Intel-HasVK-Drop-Dead-Code)
|
||||
"panfrost", // ARM Mali Midgard and up (T/G series)
|
||||
"swrast", // software renderer (aka Lavapipe)
|
||||
"virtio", // QEMU virtualized GPU (aka VirGL)
|
||||
"imagination", // PowerVR Rogue
|
||||
"asahi", // Apple AGX
|
||||
"gfxstream", // Android virtualized GPU
|
||||
|
||||
// nouveau: Nouveau (aka NVK), requires rust
|
||||
// microsoft-experimental: WSL virtualized GPU (aka DZN/Dozen)
|
||||
// kosmickrisp: macOS-specific
|
||||
], ",")
|
||||
];
|
||||
sep = ",";
|
||||
};
|
||||
|
||||
"Dvulkan-layers": join([
|
||||
"device-select"
|
||||
"intel-nullhw"
|
||||
"overlay"
|
||||
"screenshot"
|
||||
"anti-lag"
|
||||
"vram-report-limit"
|
||||
], ",")
|
||||
"Dvulkan-layers": join {
|
||||
elems = [
|
||||
"device-select",
|
||||
"intel-nullhw",
|
||||
"overlay",
|
||||
"screenshot",
|
||||
"anti-lag",
|
||||
"vram-report-limit",
|
||||
];
|
||||
sep = ",";
|
||||
};
|
||||
|
||||
"Dfreedreno-kmds": "msm,virtio"
|
||||
"Damdgpu-virtio": "true"
|
||||
]
|
||||
}
|
||||
"Dfreedreno-kmds": "msm,virtio";
|
||||
"Damdgpu-virtio": "true";
|
||||
};
|
||||
};
|
||||
|
||||
inputs = [
|
||||
m4
|
||||
python-packaging
|
||||
python-mako
|
||||
python-pyyaml
|
||||
python-pycparser
|
||||
glslang
|
||||
spirv-llvm-translator
|
||||
m4,
|
||||
python-packaging,
|
||||
python-mako,
|
||||
python-pyyaml,
|
||||
python-pycparser,
|
||||
glslang,
|
||||
spirv-llvm-translator,
|
||||
|
||||
zlib
|
||||
zstd
|
||||
gzip
|
||||
ncurses
|
||||
libglvnd
|
||||
libexpat
|
||||
libva
|
||||
libdrm
|
||||
elfutils
|
||||
bison
|
||||
flex
|
||||
lm_sensors
|
||||
libconfig
|
||||
libdisplay-info
|
||||
wayland
|
||||
wayland-protocols
|
||||
libxshmfence
|
||||
libXxf86vm
|
||||
libXrandr
|
||||
libxcb-keysyms
|
||||
libpng
|
||||
libarchive
|
||||
kernel-headers
|
||||
]
|
||||
zlib,
|
||||
zstd,
|
||||
gzip,
|
||||
ncurses,
|
||||
libglvnd,
|
||||
libexpat,
|
||||
libva,
|
||||
libdrm,
|
||||
elfutils,
|
||||
bison,
|
||||
flex,
|
||||
lm_sensors,
|
||||
libconfig,
|
||||
libdisplay-info,
|
||||
wayland,
|
||||
wayland-protocols,
|
||||
libxshmfence,
|
||||
libXxf86vm,
|
||||
libXrandr,
|
||||
libxcb-keysyms,
|
||||
libpng,
|
||||
libarchive,
|
||||
kernel-headers,
|
||||
];
|
||||
|
||||
runtime = [
|
||||
libdrm
|
||||
elfutils
|
||||
lm_sensors
|
||||
libdisplayInfo
|
||||
wayland
|
||||
libxshmfence
|
||||
libXxf86vm
|
||||
libXrandr
|
||||
libxcb-keysyms
|
||||
libpng
|
||||
]
|
||||
llvm,
|
||||
libdrm,
|
||||
elfutils,
|
||||
lm_sensors,
|
||||
libdisplay-info,
|
||||
wayland,
|
||||
libxshmfence,
|
||||
libXxf86vm,
|
||||
libXrandr,
|
||||
libxcb-keysyms,
|
||||
libpng,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,49 +1,56 @@
|
||||
package meson {
|
||||
description = "an open source build system"
|
||||
website = "https://mesonbuild.com"
|
||||
anitya = 6472
|
||||
description = "an open source build system";
|
||||
website = "https://mesonbuild.com";
|
||||
anitya = 6472;
|
||||
|
||||
version# = "1.11.1"
|
||||
version# = "1.11.1";
|
||||
source = remoteGitHub {
|
||||
suffix = "mesonbuild/meson"
|
||||
tag = version
|
||||
checksum = "uvILRxdopwc6Dy17UbIeClcQr0qHqyTaqyk1M9OqWKN9PwB9N6UVAiyN8kSSz3r2"
|
||||
}
|
||||
suffix = "mesonbuild/meson";
|
||||
tag = version;
|
||||
checksum = "uvILRxdopwc6Dy17UbIeClcQr0qHqyTaqyk1M9OqWKN9PwB9N6UVAiyN8kSSz3r2";
|
||||
};
|
||||
|
||||
env = [
|
||||
"CMAKE_MAKE_PROGRAM=ninja"
|
||||
]
|
||||
"CMAKE_MAKE_PROGRAM=ninja",
|
||||
];
|
||||
|
||||
exec = pip {
|
||||
enterSource
|
||||
check = r`cd 'test cases'
|
||||
rm -rf \
|
||||
'common/32 has header' \
|
||||
'common/66 vcstag' \
|
||||
'common/153 wrap file should not failed' \
|
||||
'common/184 openmp' \
|
||||
'common/189 check header' \
|
||||
'linuxlike/6 subdir include order' \
|
||||
'linuxlike/9 compiler checks with dependencies' \
|
||||
'linuxlike/13 cmake dependency' \
|
||||
'frameworks/15 llvm' \
|
||||
'frameworks/29 blocks'
|
||||
cd ..`
|
||||
+ "python3 ./run_project_tests.py -v ${jobsFlagE} --failfast --backend=ninja"
|
||||
}
|
||||
enterSource = true;
|
||||
check = `
|
||||
cd 'test cases'
|
||||
rm -rf \
|
||||
'common/32 has header' \
|
||||
'common/66 vcstag' \
|
||||
'common/153 wrap file should not failed' \
|
||||
'common/184 openmp' \
|
||||
'common/189 check header' \
|
||||
'linuxlike/6 subdir include order' \
|
||||
'linuxlike/9 compiler checks with dependencies' \
|
||||
'linuxlike/13 cmake dependency' \
|
||||
'frameworks/15 llvm' \
|
||||
'frameworks/29 blocks'
|
||||
cd ..
|
||||
|
||||
python3 ./run_project_tests.py \
|
||||
-v \
|
||||
` + jobsFlagE + ` \
|
||||
--failfast \
|
||||
--backend=ninja
|
||||
`;
|
||||
};
|
||||
|
||||
inputs = [
|
||||
python-setuptools
|
||||
pkg-config
|
||||
cmake
|
||||
ninja
|
||||
python-pytest
|
||||
]
|
||||
python-setuptools,
|
||||
pkg-config,
|
||||
cmake,
|
||||
ninja,
|
||||
python-pytest,
|
||||
];
|
||||
|
||||
runtime = [
|
||||
python
|
||||
pkg-config
|
||||
cmake
|
||||
ninja
|
||||
]
|
||||
python,
|
||||
pkg-config,
|
||||
cmake,
|
||||
ninja,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,37 +1,38 @@
|
||||
package mksh {
|
||||
description = "MirBSD Korn Shell"
|
||||
website = "https://www.mirbsd.org/mksh"
|
||||
anitya = 5590
|
||||
description = "MirBSD Korn Shell";
|
||||
website = "https://www.mirbsd.org/mksh";
|
||||
anitya = 5590;
|
||||
|
||||
version# = "59c"
|
||||
version# = "59c";
|
||||
source = remoteTar {
|
||||
url = "https://mbsd.evolvis.org/MirOS/dist/mir/mksh/mksh-R${version}.tgz"
|
||||
checksum = "0Zj-k4nXEu3IuJY4lvwD2OrC2t27GdZj8SPy4DoaeuBRH1padWb7oREpYgwY8JNq"
|
||||
compress = gzip
|
||||
}
|
||||
url = "https://mbsd.evolvis.org/MirOS/dist/mir/mksh/mksh-R"+version+".tgz";
|
||||
checksum = "0Zj-k4nXEu3IuJY4lvwD2OrC2t27GdZj8SPy4DoaeuBRH1padWb7oREpYgwY8JNq";
|
||||
compress = gzip;
|
||||
};
|
||||
|
||||
env = [
|
||||
"LDSTATIC=-static"
|
||||
r`CPPFLAGS=-DMKSH_DEFAULT_PROFILEDIR=\"/system/etc\"`
|
||||
]
|
||||
"LDSTATIC=-static",
|
||||
"CPPFLAGS=-DMKSH_DEFAULT_PROFILEDIR=\\\"/system/etc\\\"",
|
||||
];
|
||||
|
||||
exec = generic {
|
||||
build = r`sh /usr/src/mksh/Build.sh -r
|
||||
CPPFLAGS="${CPPFLAGS} -DMKSH_BINSHPOSIX -DMKSH_BINSHREDUCED" \
|
||||
sh /usr/src/mksh/Build.sh -r -L
|
||||
`;
|
||||
check = "./test.sh -C regress:no-ctty\n";
|
||||
install = `
|
||||
mkdir -p /work/system/bin/
|
||||
cp -v mksh /work/system/bin/
|
||||
cp -v lksh /work/system/bin/sh
|
||||
build = `sh /usr/src/mksh/Build.sh -r
|
||||
CPPFLAGS="${CPPFLAGS} -DMKSH_BINSHPOSIX -DMKSH_BINSHREDUCED" \
|
||||
sh /usr/src/mksh/Build.sh -r -L
|
||||
`;
|
||||
check = "./test.sh -C regress:no-ctty\n";
|
||||
install = `
|
||||
mkdir -p /work/system/bin/
|
||||
cp -v mksh /work/system/bin/
|
||||
cp -v lksh /work/system/bin/sh
|
||||
|
||||
mkdir -p /work/bin/
|
||||
ln -vs ../system/bin/sh /work/bin/`
|
||||
}
|
||||
mkdir -p /work/bin/
|
||||
ln -vs ../system/bin/sh /work/bin/
|
||||
`;
|
||||
};
|
||||
|
||||
inputs = [
|
||||
perl
|
||||
coreutils
|
||||
]
|
||||
perl,
|
||||
coreutils,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
package musl-fts {
|
||||
description = "implementation of fts(3) functions which are missing in musl libc"
|
||||
website = "https://github.com/void-linux/musl-fts"
|
||||
anitya = 26980
|
||||
description = "implementation of fts(3) functions which are missing in musl libc";
|
||||
website = "https://github.com/void-linux/musl-fts";
|
||||
anitya = 26980;
|
||||
|
||||
version# = "1.2.7"
|
||||
version# = "1.2.7";
|
||||
source = remoteGitHub {
|
||||
suffix = "void-linux/musl-fts"
|
||||
tag = "v"+version
|
||||
checksum = "N_p_ZApX3eHt7xoDCw1hLf6XdJOw7ZSx7xPvpvAP0knG2zgU0zeN5w8tt5Pg60XJ"
|
||||
}
|
||||
suffix = "void-linux/musl-fts";
|
||||
tag = "v"+version;
|
||||
checksum = "N_p_ZApX3eHt7xoDCw1hLf6XdJOw7ZSx7xPvpvAP0knG2zgU0zeN5w8tt5Pg60XJ";
|
||||
};
|
||||
|
||||
env = [
|
||||
"CC=cc -fPIC"
|
||||
]
|
||||
"CC=cc -fPIC",
|
||||
];
|
||||
|
||||
exec = make {
|
||||
generate = "./bootstrap.sh"
|
||||
}
|
||||
generate = "./bootstrap.sh";
|
||||
};
|
||||
|
||||
inputs = [
|
||||
automake
|
||||
libtool
|
||||
pkg-config
|
||||
]
|
||||
automake,
|
||||
libtool,
|
||||
pkg-config,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
package musl-obstack {
|
||||
description = "obstack functions and macros separated from glibc"
|
||||
website = "https://github.com/void-linux/musl-obstack"
|
||||
anitya = 146206
|
||||
description = "obstack functions and macros separated from glibc";
|
||||
website = "https://github.com/void-linux/musl-obstack";
|
||||
anitya = 146206;
|
||||
|
||||
version# = "1.2.3"
|
||||
version# = "1.2.3";
|
||||
source = remoteGitHub {
|
||||
suffix = "void-linux/musl-obstack"
|
||||
tag = "v"+version
|
||||
checksum = "tVRY_KjIlkkMszcaRlkKdBVQHIXTT_T_TiMxbwErlILXrOBosocg8KklppZhNdCG"
|
||||
}
|
||||
suffix = "void-linux/musl-obstack";
|
||||
tag = "v"+version;
|
||||
checksum = "tVRY_KjIlkkMszcaRlkKdBVQHIXTT_T_TiMxbwErlILXrOBosocg8KklppZhNdCG";
|
||||
};
|
||||
|
||||
env = [
|
||||
"CC=cc -fPIC"
|
||||
]
|
||||
"CC=cc -fPIC",
|
||||
];
|
||||
|
||||
exec = make {
|
||||
generate = "./bootstrap.sh"
|
||||
}
|
||||
generate = "./bootstrap.sh";
|
||||
};
|
||||
|
||||
inputs = [
|
||||
automake
|
||||
libtool
|
||||
pkg-config
|
||||
]
|
||||
automake,
|
||||
libtool,
|
||||
pkg-config,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ package musl-source {
|
||||
description = "an implementation of the C standard library - source code";
|
||||
exclude = true;
|
||||
|
||||
version* = "1.2.6";
|
||||
version# = "1.2.6";
|
||||
output = remoteTar {
|
||||
url = "https://musl.libc.org/releases/musl-"+version+".tar.gz";
|
||||
checksum = "WtWb_OV_XxLDAB5NerOL9loLlHVadV00MmGk65PPBU1evaolagoMHfvpZp_vxEzS";
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
package ncurses {
|
||||
description = "a free software emulation of curses in System V Release 4.0 (SVr4)"
|
||||
website = "https://invisible-island.net/ncurses"
|
||||
anitya = 373226
|
||||
description = "a free software emulation of curses in System V Release 4.0 (SVr4)";
|
||||
website = "https://invisible-island.net/ncurses";
|
||||
anitya = 373226;
|
||||
|
||||
version# = "6.6"
|
||||
version# = "6.6";
|
||||
source = remoteTar {
|
||||
url = "https://ftpmirror.gnu.org/gnu/ncurses/ncurses-${version}.tar.gz"
|
||||
checksum = "XvWp4xi6hR_hH8XUoGY26L_pqBSDapJYulhzZqPuR0KNklqypqNc1yNXU-nOjf5w"
|
||||
compress = gzip
|
||||
}
|
||||
url = "https://ftpmirror.gnu.org/gnu/ncurses/ncurses-"+version+".tar.gz";
|
||||
checksum = "XvWp4xi6hR_hH8XUoGY26L_pqBSDapJYulhzZqPuR0KNklqypqNc1yNXU-nOjf5w";
|
||||
compress = gzip;
|
||||
};
|
||||
|
||||
exec = make {
|
||||
configure = [
|
||||
"with-pkg-config"
|
||||
"enable-pc-files"
|
||||
"with-shared"
|
||||
"with-cxx-shared"
|
||||
]
|
||||
configure = {
|
||||
"with-pkg-config";
|
||||
"enable-pc-files";
|
||||
"with-shared";
|
||||
"with-cxx-shared";
|
||||
};
|
||||
|
||||
// "tests" are actual demo programs, not a test suite.
|
||||
skipCheck
|
||||
}
|
||||
skipCheck = true;
|
||||
};
|
||||
|
||||
inputs = [ pkg-config ]
|
||||
inputs = [ pkg-config ];
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package libmnl {
|
||||
website = "https://www.netfilter.org/projects/libmnl";
|
||||
anitya = 1663;
|
||||
|
||||
version* = "1.0.5";
|
||||
version# = "1.0.5";
|
||||
source = remoteTar {
|
||||
url = "https://www.netfilter.org/projects/libmnl/files/"+
|
||||
"libmnl-"+version+".tar.bz2";
|
||||
@@ -29,7 +29,7 @@ package libnftnl {
|
||||
website = "https://www.netfilter.org/projects/libnftnl";
|
||||
anitya = 1681;
|
||||
|
||||
version* = "1.3.1";
|
||||
version# = "1.3.1";
|
||||
source = remoteGit {
|
||||
url = "https://git.netfilter.org/libnftnl";
|
||||
tag = "libnftnl-"+version;
|
||||
@@ -64,7 +64,7 @@ package iptables {
|
||||
website = "https://www.netfilter.org/projects/iptables";
|
||||
anitya = 1394;
|
||||
|
||||
version* = "1.8.13";
|
||||
version# = "1.8.13";
|
||||
source = remoteGit {
|
||||
url = "https://git.netfilter.org/iptables";
|
||||
tag = "v"+version;
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
package nettle {
|
||||
description = "a low-level cryptographic library"
|
||||
website = "https://www.lysator.liu.se/~nisse/nettle"
|
||||
anitya = 2073
|
||||
description = "a low-level cryptographic library";
|
||||
website = "https://www.lysator.liu.se/~nisse/nettle";
|
||||
anitya = 2073;
|
||||
|
||||
version# = "4.0"
|
||||
version# = "4.0";
|
||||
source = remoteTar {
|
||||
url = "https://ftpmirror.gnu.org/gnu/nettle/nettle-${version}.tar.gz"
|
||||
checksum = "6agC-vHzzoqAlaX3K9tX8yHgrm03HLqPZzVzq8jh_ePbuPMIvpxereu_uRJFmQK7"
|
||||
compress = gzip
|
||||
}
|
||||
url = "https://ftpmirror.gnu.org/gnu/nettle/nettle-"+version+".tar.gz";
|
||||
checksum = "6agC-vHzzoqAlaX3K9tX8yHgrm03HLqPZzVzq8jh_ePbuPMIvpxereu_uRJFmQK7";
|
||||
compress = gzip;
|
||||
};
|
||||
|
||||
exec = make()
|
||||
exec = make {};
|
||||
|
||||
inputs = [
|
||||
m4
|
||||
diffutils
|
||||
m4,
|
||||
diffutils,
|
||||
|
||||
gmp
|
||||
]
|
||||
gmp,
|
||||
];
|
||||
|
||||
runtime = [ gmp ]
|
||||
runtime = [ gmp ];
|
||||
}
|
||||
|
||||
@@ -1,36 +1,38 @@
|
||||
package ninja {
|
||||
description = "a small build system with a focus on speed"
|
||||
website = "https://ninja-build.org"
|
||||
anitya = 2089
|
||||
description = "a small build system with a focus on speed";
|
||||
website = "https://ninja-build.org";
|
||||
anitya = 2089;
|
||||
|
||||
version# = "1.13.2"
|
||||
version# = "1.13.2";
|
||||
source = remoteGitHub {
|
||||
suffix = "ninja-build/ninja"
|
||||
tag = "v"+version
|
||||
checksum = "ygKWMa0YV2lWKiFro5hnL-vcKbc_-RACZuPu0Io8qDvgQlZ0dxv7hPNSFkt4214v"
|
||||
}
|
||||
extra = [ googletest ]
|
||||
suffix = "ninja-build/ninja";
|
||||
tag = "v"+version;
|
||||
checksum = "ygKWMa0YV2lWKiFro5hnL-vcKbc_-RACZuPu0Io8qDvgQlZ0dxv7hPNSFkt4214v";
|
||||
};
|
||||
extra = [ googletest ];
|
||||
|
||||
env = [
|
||||
"CFLAGS=-std=c++17"
|
||||
]
|
||||
"CFLAGS=-std=c++17",
|
||||
];
|
||||
|
||||
exec = generic {
|
||||
build = r`python3 /usr/src/ninja/configure.py \
|
||||
--verbose \
|
||||
--bootstrap
|
||||
python3 /usr/src/ninja/configure.py \
|
||||
--gtest-source-dir=/usr/src/extra/googletest
|
||||
./ninja ` + jobsFlagE + ` all`
|
||||
build = `
|
||||
python3 /usr/src/ninja/configure.py \
|
||||
--verbose \
|
||||
--bootstrap
|
||||
python3 /usr/src/ninja/configure.py \
|
||||
--gtest-source-dir=/usr/src/extra/googletest
|
||||
./ninja ` + jobsFlagE + ` all`;
|
||||
|
||||
check = "./ninja_test"
|
||||
check = "\n./ninja_test";
|
||||
|
||||
install = `mkdir -p /work/system/bin/
|
||||
cp ninja /work/system/bin/`
|
||||
}
|
||||
install = `
|
||||
mkdir -p /work/system/bin/
|
||||
cp ninja /work/system/bin/`;
|
||||
};
|
||||
|
||||
inputs = [
|
||||
python
|
||||
bash
|
||||
]
|
||||
python,
|
||||
bash,
|
||||
];
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user