diff --git a/debug.go b/debug.go index cadbd8e..52fa23f 100644 --- a/debug.go +++ b/debug.go @@ -8,11 +8,11 @@ import ( "errors" "fmt" "io/ioutil" - "log" "os" "strings" "time" + "github.com/rs/zerolog/log" "gopkg.in/logrusorgru/aurora.v2" "code.dumpstack.io/tools/out-of-tree/config" @@ -43,7 +43,7 @@ type DebugCmd struct { func (cmd *DebugCmd) Run(g *Globals) (err error) { kcfg, err := config.ReadKernelConfig(g.Config.Kernels) if err != nil { - log.Println(err) + log.Print(err) } var configPath string @@ -159,20 +159,20 @@ func (cmd *DebugCmd) Run(g *Globals) (err error) { // Module depends on one of the standard modules err = copyStandardModules(q, ki) if err != nil { - log.Println(err) + log.Print(err) return } } err = preloadModules(q, ka, ki, g.Config.Docker.Timeout.Duration) if err != nil { - log.Println(err) + log.Print(err) return } buildDir, outFile, output, err := build(tmp, ka, ki, g.Config.Docker.Timeout.Duration) if err != nil { - log.Println(err, output) + log.Print(err, output) return } @@ -193,7 +193,7 @@ func (cmd *DebugCmd) Run(g *Globals) (err error) { } err = q.CopyFile(f.User, f.Local, f.Remote) if err != nil { - log.Println("error copy err:", err, f.Local, f.Remote) + log.Print("error copy err:", err, f.Local, f.Remote) return } } diff --git a/go.mod b/go.mod index fbcc2e3..7509058 100644 --- a/go.mod +++ b/go.mod @@ -9,6 +9,7 @@ replace code.dumpstack.io/tools/out-of-tree/config => ./config require ( github.com/alecthomas/kong v0.7.1 github.com/go-git/go-git/v5 v5.1.0 + github.com/google/go-cmp v0.5.8 // indirect github.com/kylelemons/godebug v1.1.0 // indirect github.com/mattn/go-runewidth v0.0.4 // indirect github.com/mattn/go-sqlite3 v1.11.0 @@ -19,8 +20,9 @@ require ( github.com/otiai10/copy v1.0.1 github.com/otiai10/curr v1.0.0 // indirect github.com/remeh/sizedwaitgroup v0.0.0-20180822144253-5e7302b12cce + github.com/rs/zerolog v1.29.0 github.com/stretchr/testify v1.5.1 // indirect github.com/zcalusic/sysinfo v0.0.0-20190429151633-fbadb57345c2 - golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073 + golang.org/x/crypto v0.1.0 gopkg.in/logrusorgru/aurora.v2 v2.0.0-20190417123914-21d75270181e ) diff --git a/go.sum b/go.sum index 78ae127..bfedc07 100644 --- a/go.sum +++ b/go.sum @@ -11,6 +11,7 @@ github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -29,8 +30,10 @@ github.com/go-git/go-git-fixtures/v4 v4.0.1 h1:q+IFMfLx200Q3scvt2hN79JsEzy4AmBTp github.com/go-git/go-git-fixtures/v4 v4.0.1/go.mod h1:m+ICp2rF3jDhFgEZ/8yziagdT1C+ZpZcrJjappBCDSw= github.com/go-git/go-git/v5 v5.1.0 h1:HxJn9g/E7eYvKW3Fm7Jt4ee8LXfPOm/H1cdDu8vEssk= github.com/go-git/go-git/v5 v5.1.0/go.mod h1:ZKfuPUoY1ZqIG4QG9BDBh3G4gLM5zvPuSJAozQrZuyM= -github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/imdario/mergo v0.3.9 h1:UauaLniWCFHWd+Jp9oCEkTBj8VO/9DKg3PV3VCNMDIg= @@ -47,6 +50,10 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-sqlite3 v1.11.0 h1:LDdKkqtYlom37fkvqs8rMPFKAMe8+SgjbwZ6ex1/A/Q= @@ -69,12 +76,16 @@ github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6 github.com/otiai10/mint v1.2.3/go.mod h1:YnfyPNhBvnY8bW4SGQHCs/aAFhkgySlMZbrF5U0bOVw= github.com/otiai10/mint v1.3.0 h1:Ady6MKVezQwHBkGzLFbrsywyp09Ah7rkmfjV3Bcr5uc= github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/remeh/sizedwaitgroup v0.0.0-20180822144253-5e7302b12cce h1:aP+C+YbHZfOQlutA4p4soHi7rVUqHQdWEVMSkHfDTqY= github.com/remeh/sizedwaitgroup v0.0.0-20180822144253-5e7302b12cce/go.mod h1:3j2R4OIe/SeS6YDhICBy22RWjJC5eNCJ1V+9+NVNYlo= +github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/zerolog v1.29.0 h1:Zes4hju04hjbvkVkOhdl2HpZa+0PmVwigmo8XoORE5w= +github.com/rs/zerolog v1.29.0/go.mod h1:NILgTygv/Uej1ra5XxGf82ZFSLk58MFGAUS2o6usyD0= github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -83,24 +94,51 @@ github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/xanzy/ssh-agent v0.2.1 h1:TCbipTQL2JiiCprBWx9frJ2eJlCYT00NmctrHxVAr70= github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/zcalusic/sysinfo v0.0.0-20190429151633-fbadb57345c2 h1:uMiaKNX5zFLOa6nNtun+d/lpV5bOBh7BvE4q9jfZacQ= github.com/zcalusic/sysinfo v0.0.0-20190429151633-fbadb57345c2/go.mod h1:zAn3FAIbgZPYnutDND49Ivf8sb/mXYk8UjZdqMswgHg= golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073 h1:xMPOj6Pz6UipU1wXLkrtqpHbR0AVFnyPEQq/wRWz9lM= golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= +golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.1.0 h1:hZ/3BUoy5aId7sCpA/Tc5lt8DkFgdVS2onTpJsZ/fl0= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527 h1:uYVVQ9WP/Ds2ROhcaGPeIdVq0RIXVLwsHlnvJ+cT1So= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0 h1:g6Z6vPFA9dYBAF7DWcH6sCcOntplXsDKcliusYijMlw= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= diff --git a/kernel.go b/kernel.go index d06f7ff..86b5e91 100644 --- a/kernel.go +++ b/kernel.go @@ -8,7 +8,6 @@ import ( "errors" "fmt" "io/ioutil" - "log" "math/rand" "os" "os/exec" @@ -19,6 +18,7 @@ import ( "time" "github.com/naoina/toml" + "github.com/rs/zerolog/log" "code.dumpstack.io/tools/out-of-tree/config" ) @@ -102,19 +102,19 @@ func (cmd *KernelDockerRegenCmd) Run(kernelCmd *KernelCmd, g *Globals) (err erro var rawOutput []byte rawOutput, err = cmd.CombinedOutput() if err != nil { - log.Println("docker build:", string(rawOutput)) + log.Print("docker build:", string(rawOutput)) return } err = kickImage(d.ContainerName) if err != nil { - log.Println("kick image", d.ContainerName, ":", err) + log.Print("kick image", d.ContainerName, ":", err) continue } err = copyKernels(d.ContainerName) if err != nil { - log.Println("copy kernels", d.ContainerName, ":", err) + log.Print("copy kernels", d.ContainerName, ":", err) continue } } @@ -301,11 +301,11 @@ func generateBaseDockerImage(registry string, commands []config.DockerCommand, d += "RUN mkdir -p /lib/modules\n" case config.CentOS: if sk.DistroRelease < "7" && !vsyscall { - log.Println("Old CentOS requires `vsyscall=emulate` " + + log.Print("Old CentOS requires `vsyscall=emulate` " + "on the latest kernels") - log.Println("Check out `A note about vsyscall` " + + log.Print("Check out `A note about vsyscall` " + "at https://hub.docker.com/_/centos") - log.Println("See also https://lwn.net/Articles/446528/") + log.Print("See also https://lwn.net/Articles/446528/") err = fmt.Errorf("vsyscall is not available") return } @@ -353,7 +353,7 @@ func generateBaseDockerImage(registry string, commands []config.DockerCommand, if err != nil { log.Printf("Base image for %s:%s generating error, see log", sk.DistroType.String(), sk.DistroRelease) - log.Println(string(rawOutput)) + log.Print(string(rawOutput)) return } @@ -429,7 +429,7 @@ func dockerImageAppend(sk config.KernelMask, pkgname string) (err error) { log.Printf("Add kernel %s for %s:%s error, see log", pkgname, sk.DistroType.String(), sk.DistroRelease) - log.Println(string(rawOutput)) + log.Print(string(rawOutput)) return } @@ -449,7 +449,7 @@ func copyKernels(name string) (err error) { cmd := exec.Command("docker", "ps", "-a") rawOutput, err := cmd.CombinedOutput() if err != nil { - log.Println(string(rawOutput)) + log.Print(string(rawOutput)) return } @@ -482,21 +482,21 @@ func copyKernels(name string) (err error) { cmd = exec.Command("docker", "cp", containerID+":/boot/.", target) rawOutput, err = cmd.CombinedOutput() if err != nil { - log.Println(string(rawOutput)) + log.Print(string(rawOutput)) return } cmd = exec.Command("docker", "cp", containerID+":/lib/modules", target) rawOutput, err = cmd.CombinedOutput() if err != nil { - log.Println(string(rawOutput)) + log.Print(string(rawOutput)) return } cmd = exec.Command("find", target+"modules", "-type", "l", "-delete") rawOutput, err = cmd.CombinedOutput() if err != nil { - log.Println(string(rawOutput)) + log.Print(string(rawOutput)) return } @@ -540,7 +540,7 @@ func genRootfsImage(d dockerImageInfo, download bool) (rootfs string, err error) rootfs = imagesPath + imageFile if !exists(rootfs) { if download { - log.Println(imageFile, "not exists, start downloading...") + log.Print(imageFile, "not exists, start downloading...") err = downloadImage(imagesPath, imageFile) } } @@ -608,7 +608,7 @@ func updateKernelsCfg(host, download bool) (err error) { for _, d := range dockerImages { err = genDockerKernels(d, &newkcfg, download) if err != nil { - log.Println("gen kernels", d.ContainerName, ":", err) + log.Print("gen kernels", d.ContainerName, ":", err) continue } } @@ -639,7 +639,7 @@ func updateKernelsCfg(host, download bool) (err error) { return } - log.Println(kernelsCfgPath, "is successfully updated") + log.Print(kernelsCfgPath, "is successfully updated") return } @@ -650,7 +650,7 @@ func genDockerKernels(dii dockerImageInfo, newkcfg *config.KernelConfig, cmd := exec.Command("docker", "run", name, "ls", "/lib/modules") rawOutput, err := cmd.CombinedOutput() if err != nil { - log.Println(string(rawOutput), err) + log.Print(string(rawOutput), err) return } @@ -710,7 +710,7 @@ func generateKernels(km config.KernelMask, registry string, commands []config.DockerCommand, max int64, download bool) (err error) { - log.Println("Generating for kernel mask", km) + log.Print("Generating for kernel mask", km) _, err = genRootfsImage(dockerImageInfo{ContainerName: km.DockerName()}, download) @@ -740,29 +740,29 @@ func generateKernels(km config.KernelMask, registry string, for i, pkg := range shuffle(pkgs) { if max <= 0 { - log.Println("Max is reached") + log.Print("Max is reached") break } - log.Println(i, "/", len(pkgs), pkg) + log.Print(i, "/", len(pkgs), pkg) err = dockerImageAppend(km, pkg) if err == nil { max-- } else { - log.Println("dockerImageAppend", err) + log.Print("dockerImageAppend", err) } } err = kickImage(km.DockerName()) if err != nil { - log.Println("kick image", km.DockerName(), ":", err) + log.Print("kick image", km.DockerName(), ":", err) return } err = copyKernels(km.DockerName()) if err != nil { - log.Println("copy kernels", km.DockerName(), ":", err) + log.Print("copy kernels", km.DockerName(), ":", err) return } return diff --git a/kernel_linux.go b/kernel_linux.go index 258452c..3b8b2cc 100644 --- a/kernel_linux.go +++ b/kernel_linux.go @@ -1,19 +1,21 @@ -// Copyright 2018 Mikhail Klementev. All rights reserved. +// Copyright 2023 Mikhail Klementev. All rights reserved. // Use of this source code is governed by a AGPLv3 license // (or later) that can be found in the LICENSE file. +//go:build linux // +build linux package main import ( "io/ioutil" - "log" "os/exec" "strings" - "code.dumpstack.io/tools/out-of-tree/config" + "github.com/rs/zerolog/log" "github.com/zcalusic/sysinfo" + + "code.dumpstack.io/tools/out-of-tree/config" ) func genHostKernels(download bool) (kcfg config.KernelConfig, err error) { @@ -28,7 +30,7 @@ func genHostKernels(download bool) (kcfg config.KernelConfig, err error) { cmd := exec.Command("ls", "/lib/modules") rawOutput, err := cmd.CombinedOutput() if err != nil { - log.Println(string(rawOutput), err) + log.Print(string(rawOutput), err) return } @@ -65,7 +67,7 @@ func genHostKernels(download bool) (kcfg config.KernelConfig, err error) { } vmlinux := "/usr/lib/debug/boot/vmlinux-" + k - log.Println("vmlinux", vmlinux) + log.Print("vmlinux", vmlinux) if exists(vmlinux) { ki.VmlinuxPath = vmlinux } diff --git a/log.go b/log.go index 0039a09..03febad 100644 --- a/log.go +++ b/log.go @@ -8,11 +8,11 @@ import ( "database/sql" "encoding/json" "fmt" - "log" "math" "os" "github.com/olekukonko/tablewriter" + "github.com/rs/zerolog/log" "gopkg.in/logrusorgru/aurora.v2" "code.dumpstack.io/tools/out-of-tree/config" @@ -34,7 +34,7 @@ type LogQueryCmd struct { func (cmd *LogQueryCmd) Run(g *Globals) (err error) { db, err := openDatabase(g.Config.Database) if err != nil { - log.Fatalln(err) + panic(err) } defer db.Close() @@ -42,7 +42,7 @@ func (cmd *LogQueryCmd) Run(g *Globals) (err error) { ka, kaErr := config.ReadArtifactConfig(g.WorkDir + "/.out-of-tree.toml") if kaErr == nil { - log.Println(".out-of-tree.toml found, filter by artifact name") + log.Print(".out-of-tree.toml found, filter by artifact name") les, err = getAllArtifactLogs(db, cmd.Tag, cmd.Num, ka) } else { les, err = getAllLogs(db, cmd.Tag, cmd.Num) @@ -91,7 +91,7 @@ type LogDumpCmd struct { func (cmd *LogDumpCmd) Run(g *Globals) (err error) { db, err := openDatabase(g.Config.Database) if err != nil { - log.Fatalln(err) + panic(err) } defer db.Close() @@ -152,7 +152,7 @@ type LogJsonCmd struct { func (cmd *LogJsonCmd) Run(g *Globals) (err error) { db, err := openDatabase(g.Config.Database) if err != nil { - log.Fatalln(err) + panic(err) } defer db.Close() @@ -177,7 +177,7 @@ type LogMarkdownCmd struct { func (cmd *LogMarkdownCmd) Run(g *Globals) (err error) { db, err := openDatabase(g.Config.Database) if err != nil { - log.Fatalln(err) + panic(err) } defer db.Close() diff --git a/main.go b/main.go index 4a4b512..e7cdfc5 100644 --- a/main.go +++ b/main.go @@ -6,10 +6,13 @@ package main import ( "fmt" - "log" "math/rand" + "os" "time" + "github.com/rs/zerolog" + "github.com/rs/zerolog/log" + "github.com/alecthomas/kong" "code.dumpstack.io/tools/out-of-tree/config" @@ -46,7 +49,7 @@ func (v VersionFlag) BeforeApply(app *kong.Kong, vars kong.Vars) error { } func main() { - log.SetFlags(log.Lshortfile) + log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr}) rand.Seed(time.Now().UnixNano()) diff --git a/pack.go b/pack.go index 22d06b1..0c84cbb 100644 --- a/pack.go +++ b/pack.go @@ -1,4 +1,4 @@ -// Copyright 2019 Mikhail Klementev. All rights reserved. +// Copyright 2023 Mikhail Klementev. All rights reserved. // Use of this source code is governed by a AGPLv3 license // (or later) that can be found in the LICENSE file. @@ -7,8 +7,9 @@ package main import ( "fmt" "io/ioutil" - "log" "time" + + "github.com/rs/zerolog/log" ) type PackCmd struct { @@ -30,7 +31,7 @@ type PackCmd struct { func (cmd *PackCmd) Run(g *Globals) (err error) { tag := fmt.Sprintf("pack_run_%d", time.Now().Unix()) - log.Println("Tag:", tag) + log.Print("Tag:", tag) files, err := ioutil.ReadDir(g.WorkDir) if err != nil { @@ -60,7 +61,7 @@ func (cmd *PackCmd) Run(g *Globals) (err error) { } } - log.Println(f.Name()) + log.Print(f.Name()) PewCmd{ Max: cmd.KernelRuns, diff --git a/pew.go b/pew.go index 820eaea..d18dc09 100644 --- a/pew.go +++ b/pew.go @@ -10,7 +10,6 @@ import ( "fmt" "io" "io/ioutil" - "log" "math/rand" "os" "os/exec" @@ -20,6 +19,7 @@ import ( "github.com/otiai10/copy" "github.com/remeh/sizedwaitgroup" + "github.com/rs/zerolog/log" "gopkg.in/logrusorgru/aurora.v2" "code.dumpstack.io/tools/out-of-tree/config" @@ -50,7 +50,7 @@ type PewCmd struct { func (cmd PewCmd) Run(g *Globals) (err error) { kcfg, err := config.ReadKernelConfig(g.Config.Kernels) if err != nil { - log.Println(err) + log.Print(err) } stop := time.Time{} // never stop @@ -60,7 +60,7 @@ func (cmd PewCmd) Run(g *Globals) (err error) { db, err := openDatabase(g.Config.Database) if err != nil { - log.Fatalln(err) + panic(err) } defer db.Close() @@ -108,7 +108,7 @@ func (cmd PewCmd) Run(g *Globals) (err error) { if cmd.Tag == "" { cmd.Tag = fmt.Sprintf("%d", time.Now().Unix()) - log.Println("Tag: " + cmd.Tag) + log.Print("Tag: " + cmd.Tag) } err = performCI(ka, kcfg, cmd.Binary, cmd.Test, stop, @@ -379,13 +379,13 @@ func dumpResult(q *qemu.System, ka config.Artifact, ki config.KernelInfo, err := addToLog(db, q, ka, ki, res, tag) if err != nil { - log.Println("[db] addToLog (", ka, ") error:", err) + log.Print("[db] addToLog (", ka, ") error:", err) } if binary == "" && dist != pathDevNull { err = os.MkdirAll(dist, os.ModePerm) if err != nil { - log.Println("os.MkdirAll (", ka, ") error:", err) + log.Print("os.MkdirAll (", ka, ") error:", err) } path := fmt.Sprintf("%s/%s-%s-%s", dist, ki.DistroType, @@ -396,7 +396,7 @@ func dumpResult(q *qemu.System, ka config.Artifact, ki config.KernelInfo, err = copyFile(res.BuildArtifact, path) if err != nil { - log.Println("copyFile (", ka, ") error:", err) + log.Print("copyFile (", ka, ") error:", err) } } } @@ -408,7 +408,7 @@ func copyArtifactAndTest(q *qemu.System, ka config.Artifact, case config.KernelModule: res.Run.Output, err = q.CopyAndInsmod(res.BuildArtifact) if err != nil { - log.Println(res.Run.Output, err) + log.Print(res.Run.Output, err) return } res.Run.Ok = true @@ -420,14 +420,14 @@ func copyArtifactAndTest(q *qemu.System, ka config.Artifact, } err = q.CopyFile(f.User, f.Local, f.Remote) if err != nil { - log.Println("error copy err:", err, f.Local, f.Remote) + log.Print("error copy err:", err, f.Local, f.Remote) return } } res.Test.Output, err = testKernelModule(q, ka, remoteTest) if err != nil { - log.Println(res.Test.Output, err) + log.Print(res.Test.Output, err) return } res.Test.Ok = true @@ -441,13 +441,13 @@ func copyArtifactAndTest(q *qemu.System, ka config.Artifact, res.Test.Output, err = testKernelExploit(q, ka, remoteTest, remoteExploit) if err != nil { - log.Println(res.Test.Output) + log.Print(res.Test.Output) return } res.Run.Ok = true // does not really used res.Test.Ok = true default: - log.Println("Unsupported artifact type") + log.Print("Unsupported artifact type") } return @@ -493,7 +493,7 @@ func whatever(swg *sizedwaitgroup.SizedWaitGroup, ka config.Artifact, kernel := qemu.Kernel{KernelPath: ki.KernelPath, InitrdPath: ki.InitrdPath} q, err := qemu.NewSystem(qemu.X86x64, kernel, ki.RootFS) if err != nil { - log.Println("Qemu creation error:", err) + log.Print("Qemu creation error:", err) return } q.Timeout = qemuTimeout @@ -519,7 +519,7 @@ func whatever(swg *sizedwaitgroup.SizedWaitGroup, ka config.Artifact, err = q.Start() if err != nil { - log.Println("Qemu start error:", err) + log.Print("Qemu start error:", err) return } defer q.Stop() @@ -528,7 +528,7 @@ func whatever(swg *sizedwaitgroup.SizedWaitGroup, ka config.Artifact, go func() { for !q.Died { time.Sleep(time.Minute) - log.Println(ka.Name, ki.DistroType, + log.Print(ka.Name, ki.DistroType, ki.DistroRelease, ki.KernelRelease, "still alive") @@ -545,7 +545,7 @@ func whatever(swg *sizedwaitgroup.SizedWaitGroup, ka config.Artifact, tmp, err := ioutil.TempDir(tmpdir, "out-of-tree_") if err != nil { - log.Println("Temporary directory creation error:", err) + log.Print("Temporary directory creation error:", err) return } defer os.RemoveAll(tmp) @@ -558,7 +558,7 @@ func whatever(swg *sizedwaitgroup.SizedWaitGroup, ka config.Artifact, result.BuildDir, result.BuildArtifact, result.Build.Output, err = build(tmp, ka, ki, dockerTimeout) if err != nil { - log.Println(err) + log.Print(err) return } result.Build.Ok = true @@ -588,14 +588,14 @@ func whatever(swg *sizedwaitgroup.SizedWaitGroup, ka config.Artifact, // Module depends on one of the standard modules err = copyStandardModules(q, ki) if err != nil { - log.Println(err) + log.Print(err) return } } err = preloadModules(q, ka, ki, dockerTimeout) if err != nil { - log.Println(err) + log.Print(err) return } diff --git a/preload.go b/preload.go index 218149b..e8e116e 100644 --- a/preload.go +++ b/preload.go @@ -9,13 +9,13 @@ import ( "encoding/hex" "errors" "io/ioutil" - "log" "os" "os/user" "path/filepath" "time" "github.com/go-git/go-git/v5" + "github.com/rs/zerolog/log" "code.dumpstack.io/tools/out-of-tree/config" "code.dumpstack.io/tools/out-of-tree/qemu" @@ -38,7 +38,7 @@ func preload(q *qemu.System, ki config.KernelInfo, pm config.PreloadModule, var workPath, cache string if pm.Path != "" { - log.Println("Use non-git path for preload module (no cache)") + log.Print("Use non-git path for preload module (no cache)") workPath = pm.Path } else if pm.Repo != "" { workPath, cache, err = cloneOrPull(pm.Repo, ki) @@ -85,7 +85,7 @@ func buildAndInsmod(workPath string, q *qemu.System, ki config.KernelInfo, output, err := q.CopyAndInsmod(artifact) if err != nil { - log.Println(output) + log.Print(output) return } return @@ -138,7 +138,7 @@ func cloneOrPull(repo string, ki config.KernelInfo) (workPath, cache string, err err = w.Pull(&git.PullOptions{}) if err != nil && err != git.NoErrAlreadyUpToDate { - log.Println(repo, "pull error:", err) + log.Print(repo, "pull error:", err) } } else { r, err = git.PlainClone(workPath, false, &git.CloneOptions{URL: repo})