diff --git a/001-login-oauth-use-oauth2-exchange.patch b/001-login-oauth-use-oauth2-exchange.patch new file mode 100644 index 0000000..43664b4 --- /dev/null +++ b/001-login-oauth-use-oauth2-exchange.patch @@ -0,0 +1,13 @@ +diff --git a/pkg/api/login_oauth.go b/pkg/api/login_oauth.go +index a46c97238..76fc8480c 100644 +--- a/pkg/api/login_oauth.go ++++ b/pkg/api/login_oauth.go +@@ -125,7 +125,7 @@ func (hs *HTTPServer) OAuthLogin(ctx *m.ReqContext) { + oauthCtx := context.WithValue(context.Background(), oauth2.HTTPClient, oauthClient) + + // get token from provider +- token, err := connect.Exchange(oauthCtx, code) ++ token, err := connect.Exchange(oauthCtx, code, oauth2.AccessTypeOnline) + if err != nil { + ctx.Handle(500, "login.OAuthLogin(NewTransportWithCode)", err) + return diff --git a/002-remove-jaeger-tracing.patch b/002-remove-jaeger-tracing.patch new file mode 100644 index 0000000..4972c8d --- /dev/null +++ b/002-remove-jaeger-tracing.patch @@ -0,0 +1,208 @@ +diff --git a/pkg/cmd/grafana-server/server.go b/pkg/cmd/grafana-server/server.go +index 85d6db43e..6de99b58b 100644 +--- a/pkg/cmd/grafana-server/server.go ++++ b/pkg/cmd/grafana-server/server.go +@@ -23,7 +23,6 @@ import ( + _ "github.com/grafana/grafana/pkg/infra/metrics" + _ "github.com/grafana/grafana/pkg/infra/remotecache" + _ "github.com/grafana/grafana/pkg/infra/serverlock" +- _ "github.com/grafana/grafana/pkg/infra/tracing" + _ "github.com/grafana/grafana/pkg/infra/usagestats" + "github.com/grafana/grafana/pkg/login" + "github.com/grafana/grafana/pkg/login/social" +diff --git a/pkg/infra/tracing/tracing.go b/pkg/infra/tracing/tracing.go +deleted file mode 100644 +index d1511a533..000000000 +--- a/pkg/infra/tracing/tracing.go ++++ /dev/null +@@ -1,148 +0,0 @@ +-package tracing +- +-import ( +- "context" +- "fmt" +- "io" +- "strings" +- +- "github.com/grafana/grafana/pkg/infra/log" +- "github.com/grafana/grafana/pkg/registry" +- "github.com/grafana/grafana/pkg/setting" +- +- opentracing "github.com/opentracing/opentracing-go" +- jaegercfg "github.com/uber/jaeger-client-go/config" +- "github.com/uber/jaeger-client-go/zipkin" +-) +- +-func init() { +- registry.RegisterService(&TracingService{}) +-} +- +-type TracingService struct { +- enabled bool +- address string +- customTags map[string]string +- samplerType string +- samplerParam float64 +- log log.Logger +- closer io.Closer +- zipkinPropagation bool +- disableSharedZipkinSpans bool +- +- Cfg *setting.Cfg `inject:""` +-} +- +-func (ts *TracingService) Init() error { +- ts.log = log.New("tracing") +- ts.parseSettings() +- +- if ts.enabled { +- ts.initGlobalTracer() +- } +- +- return nil +-} +- +-func (ts *TracingService) parseSettings() { +- var section, err = ts.Cfg.Raw.GetSection("tracing.jaeger") +- if err != nil { +- return +- } +- +- ts.address = section.Key("address").MustString("") +- if ts.address != "" { +- ts.enabled = true +- } +- +- ts.customTags = splitTagSettings(section.Key("always_included_tag").MustString("")) +- ts.samplerType = section.Key("sampler_type").MustString("") +- ts.samplerParam = section.Key("sampler_param").MustFloat64(1) +- ts.zipkinPropagation = section.Key("zipkin_propagation").MustBool(false) +- ts.disableSharedZipkinSpans = section.Key("disable_shared_zipkin_spans").MustBool(false) +-} +- +-func (ts *TracingService) initGlobalTracer() error { +- cfg := jaegercfg.Configuration{ +- ServiceName: "grafana", +- Disabled: !ts.enabled, +- Sampler: &jaegercfg.SamplerConfig{ +- Type: ts.samplerType, +- Param: ts.samplerParam, +- }, +- Reporter: &jaegercfg.ReporterConfig{ +- LogSpans: false, +- LocalAgentHostPort: ts.address, +- }, +- } +- +- jLogger := &jaegerLogWrapper{logger: log.New("jaeger")} +- +- options := []jaegercfg.Option{} +- options = append(options, jaegercfg.Logger(jLogger)) +- +- for tag, value := range ts.customTags { +- options = append(options, jaegercfg.Tag(tag, value)) +- } +- +- if ts.zipkinPropagation { +- zipkinPropagator := zipkin.NewZipkinB3HTTPHeaderPropagator() +- options = append(options, +- jaegercfg.Injector(opentracing.HTTPHeaders, zipkinPropagator), +- jaegercfg.Extractor(opentracing.HTTPHeaders, zipkinPropagator), +- ) +- +- if !ts.disableSharedZipkinSpans { +- options = append(options, jaegercfg.ZipkinSharedRPCSpan(true)) +- } +- } +- +- tracer, closer, err := cfg.NewTracer(options...) +- if err != nil { +- return err +- } +- +- opentracing.InitGlobalTracer(tracer) +- +- ts.closer = closer +- +- return nil +-} +- +-func (ts *TracingService) Run(ctx context.Context) error { +- <-ctx.Done() +- +- if ts.closer != nil { +- ts.log.Info("Closing tracing") +- ts.closer.Close() +- } +- +- return nil +-} +- +-func splitTagSettings(input string) map[string]string { +- res := map[string]string{} +- +- tags := strings.Split(input, ",") +- for _, v := range tags { +- kv := strings.Split(v, ":") +- if len(kv) > 1 { +- res[kv[0]] = kv[1] +- } +- } +- +- return res +-} +- +-type jaegerLogWrapper struct { +- logger log.Logger +-} +- +-func (jlw *jaegerLogWrapper) Error(msg string) { +- jlw.logger.Error(msg) +-} +- +-func (jlw *jaegerLogWrapper) Infof(format string, args ...interface{}) { +- msg := fmt.Sprintf(format, args...) +- jlw.logger.Info(msg) +-} +diff --git a/pkg/infra/tracing/tracing_test.go b/pkg/infra/tracing/tracing_test.go +deleted file mode 100644 +index 27e4de777..000000000 +--- a/pkg/infra/tracing/tracing_test.go ++++ /dev/null +@@ -1,36 +0,0 @@ +-package tracing +- +-import "testing" +- +-func TestGroupSplit(t *testing.T) { +- tests := []struct { +- input string +- expected map[string]string +- }{ +- { +- input: "tag1:value1,tag2:value2", +- expected: map[string]string{ +- "tag1": "value1", +- "tag2": "value2", +- }, +- }, +- { +- input: "", +- expected: map[string]string{}, +- }, +- { +- input: "tag1", +- expected: map[string]string{}, +- }, +- } +- +- for _, test := range tests { +- tags := splitTagSettings(test.input) +- for k, v := range test.expected { +- value, exists := tags[k] +- if !exists || value != v { +- t.Errorf("tags does not match %v ", test) +- } +- } +- } +-} diff --git a/003-new-files.patch b/003-new-files.patch new file mode 100644 index 0000000..27458f2 --- /dev/null +++ b/003-new-files.patch @@ -0,0 +1,1037 @@ +Index: grafana-6.4.3/docs/man/man1/grafana-cli.1 +=================================================================== +--- /dev/null ++++ grafana-6.4.3/docs/man/man1/grafana-cli.1 +@@ -0,0 +1,51 @@ ++.TH GRAFANA "1" "February 2019" "Grafana cli version 5.4.3" "User Commands" ++.SH NAME ++grafana-cli \- command line administration for the Grafana metrics dashboard and graph editor ++.SH DESCRIPTION ++.SS "NAME:" ++.IP ++grafana-cli ++.SS "USAGE:" ++.IP ++\fBgrafana\-cli\fP [\fIglobal options\fP] \fIcommand\fP [\fIcommand options\fP] [\fIarguments\fP...] ++.SS "COMMANDS:" ++.TP ++plugins ++Manage plugins for grafana ++.TP ++admin ++Grafana admin commands ++.TP ++help, h ++Shows a list of commands or help for one command ++.SS "GLOBAL OPTIONS:" ++.TP ++\fB\-\-pluginsDir\fR value ++path to the grafana plugin directory (default: "/var/lib/grafana/plugins") [$GF_PLUGIN_DIR] ++.TP ++\fB\-\-repo\fR value ++url to the plugin repository (default: "https://grafana.com/api/plugins") [$GF_PLUGIN_REPO] ++.TP ++\fB\-\-pluginUrl\fR value ++Full url to the plugin zip file instead of downloading the plugin from grafana.com/api [$GF_PLUGIN_URL] ++.TP ++\fB\-\-insecure\fR ++Skip TLS verification (insecure) ++.TP ++\fB\-\-debug\fR, \fB\-d\fR ++enable debug logging ++.TP ++\fB\-\-help\fR, \fB\-h\fR ++show help ++.TP ++\fB\-\-version\fR, \fB\-v\fR ++print the version ++.SH "SEE ALSO" ++Additional documentation for ++.B grafana-cli ++is available on-line at ++.BR http://docs.grafana.org/administration/cli/ . ++The full documentation for ++.B Grafana ++is available on-line at ++.BR http://docs.grafana.org/ . +Index: grafana-6.4.3/docs/man/man1/grafana-server.1 +=================================================================== +--- /dev/null ++++ grafana-6.4.3/docs/man/man1/grafana-server.1 +@@ -0,0 +1,156 @@ ++.TH VERSION "1" "February 2019" "Version 5.4.3" "User Commands" ++.SH NAME ++grafana-server \- back-end server for the Grafana metrics dashboard and graph editor ++.SH DESCRIPTION ++.B grafana-server ++is the back-end server for the Grafana metrics dashboard and graph editor. ++The ++.B grafana-server ++program should not normally be run from the command line, ++except when testing or for development purposes. ++Rather it should be managed by ++.BR systemd . ++After installing Grafana, the systemd service should be enabled and started as follows: ++.P ++.in 1i ++.B systemctl daemon-reload ++.br ++.B systemctl enable grafana-server.service ++.br ++.B systemctl start grafana-server.service ++.in ++.P ++.SH OPTIONS ++The ++.B gafana-server ++configuration is specified in ++.BR /etc/grafana/grafana.ini ++and is well documented with comments. ++The command-line options listed below override options of ++the same (or similar) name in the configuration file and also provide ++additional options for testing Grafana. ++.P ++.HP ++\fB\-config\fR string ++.IP ++path to config file ++.HP ++\fB\-homepath\fR string ++.IP ++path to grafana install/home path, defaults to working directory ++.HP ++\fB\-packaging\fR string ++.IP ++describes the way Grafana was installed (default "unknown") ++.HP ++\fB\-pidfile\fR string ++.IP ++path to pid file ++.HP ++\fB\-profile\fR ++.IP ++Turn on pprof profiling ++.HP ++\fB\-profile\-port\fR int ++.IP ++Define custom port for profiling (default 6060) ++.HP ++\fB\-test\fR.bench regexp ++.IP ++run only benchmarks matching regexp ++.HP ++\fB\-test\fR.benchmem ++.IP ++print memory allocations for benchmarks ++.HP ++\fB\-test\fR.benchtime d ++.IP ++run each benchmark for duration d (default 1s) ++.HP ++\fB\-test\fR.blockprofile file ++.IP ++write a goroutine blocking profile to file ++.HP ++\fB\-test\fR.blockprofilerate rate ++.IP ++set blocking profile rate (see runtime.SetBlockProfileRate) (default 1) ++.HP ++\fB\-test\fR.count n ++.IP ++run tests and benchmarks n times (default 1) ++.HP ++\fB\-test\fR.coverprofile file ++.IP ++write a coverage profile to file ++.HP ++\fB\-test\fR.cpu list ++.IP ++comma\-separated list of cpu counts to run each test with ++.HP ++\fB\-test\fR.cpuprofile file ++.IP ++write a cpu profile to file ++.HP ++\fB\-test\fR.failfast ++.IP ++do not start new tests after the first test failure ++.HP ++\fB\-test\fR.list regexp ++.IP ++list tests, examples, and benchmarks matching regexp then exit ++.HP ++\fB\-test\fR.memprofile file ++.IP ++write a memory profile to file ++.HP ++\fB\-test\fR.memprofilerate rate ++.IP ++set memory profiling rate (see runtime.MemProfileRate) ++.HP ++\fB\-test\fR.mutexprofile string ++.IP ++write a mutex contention profile to the named file after execution ++.HP ++\fB\-test\fR.mutexprofilefraction int ++.IP ++if >= 0, calls runtime.SetMutexProfileFraction() (default 1) ++.HP ++\fB\-test\fR.outputdir dir ++.IP ++write profiles to dir ++.HP ++\fB\-test\fR.parallel n ++.IP ++run at most n tests in parallel (default 8) ++.HP ++\fB\-test\fR.run regexp ++.IP ++run only tests and examples matching regexp ++.HP ++\fB\-test\fR.short ++.IP ++run smaller test suite to save time ++.HP ++\fB\-test\fR.testlogfile file ++.IP ++write test action log to file (for use only by cmd/go) ++.HP ++\fB\-test\fR.timeout d ++.IP ++panic test binary after duration d (default 0, timeout disabled) ++.HP ++\fB\-test\fR.trace file ++.IP ++write an execution trace to file ++.HP ++\fB\-test\fR.v ++.IP ++verbose: print additional output ++.TP ++\fB\-v\fR ++prints current version and exits ++.SH "SEE ALSO" ++The full documentation for ++.B Grafana ++is available on-line at ++.BR http://docs.grafana.org/ . +Index: grafana-6.4.3/packaging/rpm/spec/README +=================================================================== +--- /dev/null ++++ grafana-6.4.3/packaging/rpm/spec/README +@@ -0,0 +1,7 @@ ++The make_webpack.sh script in this directory can be used to create ++a webpack tarball of all the nodejs dependencies needed to build a ++particular tagged version of grafana, along with the grafana tarball ++itself. After running the script, the two tarballs should be copied ++to your rpmbuild SOURCES. You can then run a native rpm spec build ++using grafana.spec. ++ +Index: grafana-6.4.3/packaging/rpm/spec/grafana.spec +=================================================================== +--- /dev/null ++++ grafana-6.4.3/packaging/rpm/spec/grafana.spec +@@ -0,0 +1,737 @@ ++%global grafana_arches %{lua: go_arches = {} ++ for arch in rpm.expand("%{go_arches}"):gmatch("%S+") do ++ go_arches[arch] = 1 ++ end ++ for arch in rpm.expand("%{nodejs_arches}"):gmatch("%S+") do ++ if go_arches[arch] then ++ print(arch .. " ") ++ end ++end} ++ ++# Unbundle grafana vendor sources and instead use BuildRequires ++# only on platforms that have enough golang devel support. ++%if 0%{?rhel} == 0 ++%global unbundle_vendor_sources 1 ++%endif ++ ++ ++Name: grafana ++Version: 6.3.4 ++Release: 1%{?dist} ++Summary: Metrics dashboard and graph editor ++License: ASL 2.0 ++URL: https://grafana.org ++ ++# Source0 contains the tagged upstream sources ++Source0: https://github.com/grafana/grafana/archive/v%{version}/%{name}-%{version}.tar.gz ++ ++# Source1 contains the front-end javascript modules bundled into a webpack ++Source1: grafana_webpack-%{version}.tar.gz ++ ++# Source2 is the script to create the above webpack from grafana sources ++Source2: make_grafana_webpack.sh ++ ++# Patches for upstream ++Patch1: 001-login-oauth-use-oauth2-exchange.patch ++Patch2: 002-remove-jaeger-tracing.patch ++Patch3: 003-new-files.patch ++Patch4: 004-fix-uaparser-32bit.patch ++ ++# Intersection of go_arches and nodejs_arches ++ExclusiveArch: %{grafana_arches} ++ ++# omit golang debugsource, see BZ995136 and related ++%global _debugsource_template %{nil} ++ ++%global GRAFANA_USER %{name} ++%global GRAFANA_GROUP %{name} ++%global GRAFANA_HOME %{_datadir}/%{name} ++ ++# grafana-server service daemon uses systemd ++%{?systemd_requires} ++Requires(pre): shadow-utils ++ ++BuildRequires: git, systemd, golang, go-srpm-macros ++ ++Recommends: grafana-cloudwatch = %{version}-%{release} ++Recommends: grafana-elasticsearch = %{version}-%{release} ++Recommends: grafana-azure-monitor = %{version}-%{release} ++Recommends: grafana-graphite = %{version}-%{release} ++Recommends: grafana-influxdb = %{version}-%{release} ++Recommends: grafana-loki = %{version}-%{release} ++Recommends: grafana-mssql = %{version}-%{release} ++Recommends: grafana-mysql = %{version}-%{release} ++Recommends: grafana-opentsdb = %{version}-%{release} ++Recommends: grafana-postgres = %{version}-%{release} ++Recommends: grafana-prometheus = %{version}-%{release} ++Recommends: grafana-stackdriver = %{version}-%{release} ++ ++%if 0%{?unbundle_vendor_sources} ++# golang build deps. These allow us to unbundle vendor golang source. ++BuildRequires: golang(github.com/aws/aws-sdk-go) ++BuildRequires: golang(github.com/benbjohnson/clock) ++BuildRequires: golang(github.com/beorn7/perks/quantile) ++BuildRequires: golang(github.com/bmizerany/assert) ++BuildRequires: golang(github.com/bradfitz/gomemcache/memcache) ++BuildRequires: golang(github.com/BurntSushi/toml) ++BuildRequires: golang(github.com/codahale/hdrhistogram) ++BuildRequires: golang(github.com/codegangsta/cli) ++BuildRequires: golang(github.com/davecgh/go-spew/spew) ++BuildRequires: golang(github.com/denisenkom/go-mssqldb) ++BuildRequires: golang(github.com/facebookgo/inject) ++BuildRequires: golang(github.com/facebookgo/structtag) ++BuildRequires: golang(github.com/fatih/color) ++BuildRequires: golang(github.com/go-ini/ini) ++BuildRequires: golang(google.golang.org/appengine) ++BuildRequires: golang(golang.org/x/sys/unix) ++BuildRequires: golang(github.com/go-macaron/binding) ++BuildRequires: golang(github.com/go-macaron/gzip) ++BuildRequires: golang(github.com/go-macaron/inject) ++BuildRequires: golang(github.com/go-macaron/session) ++BuildRequires: golang(google.golang.org/genproto/googleapis/rpc/status) ++BuildRequires: golang(github.com/gobwas/glob) ++BuildRequires: golang(github.com/gobwas/glob/compiler) ++BuildRequires: golang(github.com/gobwas/glob/match) ++BuildRequires: golang(github.com/gobwas/glob/syntax) ++BuildRequires: golang(github.com/gobwas/glob/syntax/ast) ++BuildRequires: golang(github.com/gobwas/glob/syntax/lexer) ++BuildRequires: golang(github.com/gobwas/glob/util/runes) ++BuildRequires: golang(github.com/gobwas/glob/util/strings) ++BuildRequires: golang(github.com/gopherjs/gopherjs/js) ++BuildRequires: golang(github.com/gorilla/websocket) ++BuildRequires: golang(github.com/gosimple/slug) ++BuildRequires: golang(github.com/go-sql-driver/mysql) ++BuildRequires: golang(github.com/go-stack/stack) ++BuildRequires: golang(github.com/go-xorm/builder) ++BuildRequires: golang(github.com/go-xorm/core) ++BuildRequires: golang(github.com/go-xorm/xorm) ++BuildRequires: golang(google.golang.org/grpc) ++BuildRequires: golang(github.com/hashicorp/go-hclog) ++# need grpc_broker in go-plugin >= 1.0.0-1 ++BuildRequires: golang(github.com/hashicorp/go-plugin) ++BuildRequires: golang(github.com/hashicorp/go-version) ++BuildRequires: golang(github.com/hashicorp/yamux) ++BuildRequires: golang(github.com/inconshreveable/log15) ++BuildRequires: golang(github.com/jmespath/go-jmespath) ++BuildRequires: golang(github.com/jtolds/gls) ++BuildRequires: golang(github.com/klauspost/compress/flate) ++BuildRequires: golang(github.com/klauspost/compress/gzip) ++BuildRequires: golang(github.com/klauspost/compress/snappy) ++BuildRequires: golang(github.com/klauspost/cpuid) ++BuildRequires: golang(github.com/klauspost/crc32) ++BuildRequires: golang(github.com/kr/pretty) ++BuildRequires: golang(github.com/kr/text) ++BuildRequires: golang(github.com/lib/pq) ++BuildRequires: golang(github.com/mattn/go-colorable) ++BuildRequires: golang(github.com/mattn/go-isatty) ++BuildRequires: golang(github.com/mattn/go-sqlite3) ++BuildRequires: golang(github.com/matttproud/golang_protobuf_extensions/pbutil) ++BuildRequires: golang(github.com/mitchellh/go-testing-interface) ++BuildRequires: golang(github.com/oklog/run) ++BuildRequires: golang(github.com/opentracing/opentracing-go) ++BuildRequires: golang(github.com/patrickmn/go-cache) ++BuildRequires: golang(github.com/pkg/errors) ++BuildRequires: golang(github.com/prometheus/client_golang/api) ++BuildRequires: golang(github.com/prometheus/client_golang/api/prometheus/v1) ++BuildRequires: golang(github.com/prometheus/client_model/go) ++BuildRequires: golang-github-prometheus-common-devel ++BuildRequires: golang(github.com/prometheus/common/expfmt) ++BuildRequires: golang(github.com/prometheus/common/model) ++BuildRequires: golang(github.com/prometheus/common/expfmt) ++BuildRequires: golang(github.com/prometheus/procfs) ++BuildRequires: golang(github.com/prometheus/procfs/internal/util) ++BuildRequires: golang(github.com/prometheus/procfs) ++BuildRequires: golang(github.com/prometheus/procfs/internal/util) ++BuildRequires: golang(github.com/prometheus/procfs/nfs) ++BuildRequires: golang(github.com/prometheus/procfs/xfs) ++BuildRequires: golang(github.com/rainycape/unidecode) ++BuildRequires: golang(github.com/sergi/go-diff/diffmatchpatch) ++BuildRequires: golang(github.com/smartystreets/assertions) ++BuildRequires: golang(github.com/smartystreets/goconvey/convey) ++BuildRequires: golang(github.com/smartystreets/goconvey/convey/gotest) ++BuildRequires: golang(github.com/smartystreets/goconvey/convey/reporting) ++BuildRequires: golang(github.com/teris-io/shortid) ++BuildRequires: golang(github.com/Unknwon/com) ++BuildRequires: golang(github.com/VividCortex/mysqlerr) ++BuildRequires: golang(github.com/yudai/gojsondiff) ++BuildRequires: golang(github.com/yudai/golcs) ++BuildRequires: golang(golang.org/x/crypto/pbkdf2) ++BuildRequires: golang(golang.org/x/crypto/ed25519) ++BuildRequires: golang(golang.org/x/crypto/md4) ++BuildRequires: golang(golang.org/x/net/context) ++BuildRequires: golang(golang.org/x/net/context/ctxhttp) ++BuildRequires: golang(golang.org/x/net/http2) ++BuildRequires: golang(golang.org/x/net/http2/hpack) ++BuildRequires: golang(golang.org/x/net/http/httpguts) ++BuildRequires: golang(golang.org/x/net/idna) ++BuildRequires: golang(golang.org/x/net/internal/timeseries) ++BuildRequires: golang(golang.org/x/net/trace) ++BuildRequires: golang(golang.org/x/text/collate) ++BuildRequires: golang(golang.org/x/text/collate/build) ++BuildRequires: golang(golang.org/x/text/internal/colltab) ++BuildRequires: golang(golang.org/x/text/internal/gen) ++BuildRequires: golang(golang.org/x/text/internal/tag) ++BuildRequires: golang(golang.org/x/text/internal/triegen) ++BuildRequires: golang(golang.org/x/text/internal/ucd) ++BuildRequires: golang(golang.org/x/oauth2) ++BuildRequires: golang(golang.org/x/oauth2/google) ++BuildRequires: golang(golang.org/x/oauth2/internal) ++BuildRequires: golang(golang.org/x/oauth2/jws) ++BuildRequires: golang(golang.org/x/oauth2/jwt) ++BuildRequires: golang(github.com/golang/protobuf/proto) ++BuildRequires: golang(github.com/golang/protobuf/ptypes) ++BuildRequires: golang(github.com/golang/protobuf/ptypes) ++BuildRequires: golang(github.com/golang/protobuf/ptypes/duration) ++BuildRequires: golang(github.com/golang/protobuf/ptypes/any) ++BuildRequires: golang(github.com/golang/protobuf/ptypes/timestamp) ++BuildRequires: golang(cloud.google.com/go/compute/metadata) ++BuildRequires: golang(gopkg.in/alexcesaro/quotedprintable.v3) ++BuildRequires: golang(gopkg.in/asn1-ber.v1) ++BuildRequires: golang(github.com/go-bufio/bufio) ++BuildRequires: golang(github.com/go-ini/ini) ++BuildRequires: golang(github.com/go-macaron/macaron) ++BuildRequires: golang(github.com/go-redis/redis) ++BuildRequires: golang(gopkg.in/square/go-jose.v2) ++BuildRequires: golang(gopkg.in/square/go-jose.v2/cipher) ++BuildRequires: golang(gopkg.in/square/go-jose.v2/json) ++BuildRequires: golang(github.com/go-yaml/yaml) ++BuildRequires: golang(golang.org/x/sync/errgroup) ++BuildRequires: golang(gopkg.in/ldap.v3) ++BuildRequires: golang(gopkg.in/mail.v2) ++BuildRequires: golang(github.com/jonboulle/clockwork) ++%endif ++ ++# Declare all nodejs modules bundled in the webpack - this is for security ++# purposes so if nodejs-foo ever needs an update, affected packages can be ++# easily identified. This is generated from package-lock.json once the webpack ++# has been built with make_webpack.sh. ++Provides: bundled(nodejs-abbrev) = 1.1.1 ++Provides: bundled(nodejs-ansi-regex) = 2.1.1 ++Provides: bundled(nodejs-ansi-styles) = 2.2.1 ++Provides: bundled(nodejs-argparse) = 1.0.10 ++Provides: bundled(nodejs-array-find-index) = 1.0.2 ++Provides: bundled(nodejs-async) = 1.5.2 ++Provides: bundled(nodejs-balanced-match) = 1.0.0 ++Provides: bundled(nodejs-brace-expansion) = 1.1.11 ++Provides: bundled(nodejs-builtin-modules) = 1.1.1 ++Provides: bundled(nodejs-camelcase) = 2.1.1 ++Provides: bundled(nodejs-camelcase-keys) = 2.1.0 ++Provides: bundled(nodejs-chalk) = 1.1.3 ++Provides: bundled(nodejs-coffee-script) = 1.10.0 ++Provides: bundled(nodejs-colors) = 1.1.2 ++Provides: bundled(nodejs-concat-map) = 0.0.1 ++Provides: bundled(nodejs-currently-unhandled) = 0.4.1 ++Provides: bundled(nodejs-dateformat) = 1.0.12 ++Provides: bundled(nodejs-decamelize) = 1.2.0 ++Provides: bundled(nodejs-error-ex) = 1.3.2 ++Provides: bundled(nodejs-escape-string-regexp) = 1.0.5 ++Provides: bundled(nodejs-esprima) = 2.7.3 ++Provides: bundled(nodejs-eventemitter2) = 0.4.14 ++Provides: bundled(nodejs-exit) = 0.1.2 ++Provides: bundled(nodejs-find-up) = 1.1.2 ++Provides: bundled(nodejs-findup-sync) = 0.3.0 ++Provides: bundled(nodejs-fs.realpath) = 1.0.0 ++Provides: bundled(nodejs-get-stdin) = 4.0.1 ++Provides: bundled(nodejs-getobject) = 0.1.0 ++Provides: bundled(nodejs-glob) = 7.0.6 ++Provides: bundled(nodejs-graceful-fs) = 4.1.15 ++Provides: bundled(nodejs-grunt) = 1.0.1 ++Provides: bundled(nodejs-grunt-cli) = 1.2.0 ++Provides: bundled(nodejs-grunt-known-options) = 1.1.1 ++Provides: bundled(nodejs-grunt-legacy-log) = 1.0.2 ++Provides: bundled(nodejs-lodash) = 4.17.11 ++Provides: bundled(nodejs-grunt-legacy-log-utils) = 1.0.0 ++Provides: bundled(nodejs-grunt-legacy-util) = 1.0.0 ++Provides: bundled(nodejs-has-ansi) = 2.0.0 ++Provides: bundled(nodejs-hooker) = 0.2.3 ++Provides: bundled(nodejs-hosted-git-info) = 2.7.1 ++Provides: bundled(nodejs-iconv-lite) = 0.4.24 ++Provides: bundled(nodejs-indent-string) = 2.1.0 ++Provides: bundled(nodejs-inflight) = 1.0.6 ++Provides: bundled(nodejs-inherits) = 2.0.3 ++Provides: bundled(nodejs-is-arrayish) = 0.2.1 ++Provides: bundled(nodejs-is-builtin-module) = 1.0.0 ++Provides: bundled(nodejs-is-finite) = 1.0.2 ++Provides: bundled(nodejs-is-utf8) = 0.2.1 ++Provides: bundled(nodejs-isexe) = 2.0.0 ++Provides: bundled(nodejs-js-yaml) = 3.5.5 ++Provides: bundled(nodejs-load-json-file) = 1.1.0 ++Provides: bundled(nodejs-loud-rejection) = 1.6.0 ++Provides: bundled(nodejs-map-obj) = 1.0.1 ++Provides: bundled(nodejs-meow) = 3.7.0 ++Provides: bundled(nodejs-minimatch) = 3.0.4 ++Provides: bundled(nodejs-minimist) = 1.2.0 ++Provides: bundled(nodejs-nopt) = 3.0.6 ++Provides: bundled(nodejs-normalize-package-data) = 2.4.2 ++Provides: bundled(nodejs-number-is-nan) = 1.0.1 ++Provides: bundled(nodejs-object-assign) = 4.1.1 ++Provides: bundled(nodejs-once) = 1.4.0 ++Provides: bundled(nodejs-parse-json) = 2.2.0 ++Provides: bundled(nodejs-path-exists) = 2.1.0 ++Provides: bundled(nodejs-path-is-absolute) = 1.0.1 ++Provides: bundled(nodejs-path-type) = 1.1.0 ++Provides: bundled(nodejs-pify) = 2.3.0 ++Provides: bundled(nodejs-pinkie) = 2.0.4 ++Provides: bundled(nodejs-pinkie-promise) = 2.0.1 ++Provides: bundled(nodejs-read-pkg) = 1.1.0 ++Provides: bundled(nodejs-read-pkg-up) = 1.0.1 ++Provides: bundled(nodejs-redent) = 1.0.0 ++Provides: bundled(nodejs-repeating) = 2.0.1 ++Provides: bundled(nodejs-resolve) = 1.1.7 ++Provides: bundled(nodejs-rimraf) = 2.2.8 ++Provides: bundled(nodejs-safer-buffer) = 2.1.2 ++Provides: bundled(nodejs-semver) = 5.6.0 ++Provides: bundled(nodejs-signal-exit) = 3.0.2 ++Provides: bundled(nodejs-spdx-correct) = 3.1.0 ++Provides: bundled(nodejs-spdx-exceptions) = 2.2.0 ++Provides: bundled(nodejs-spdx-expression-parse) = 3.0.0 ++Provides: bundled(nodejs-spdx-license-ids) = 3.0.3 ++Provides: bundled(nodejs-sprintf-js) = 1.0.3 ++Provides: bundled(nodejs-strip-ansi) = 3.0.1 ++Provides: bundled(nodejs-strip-bom) = 2.0.0 ++Provides: bundled(nodejs-strip-indent) = 1.0.1 ++Provides: bundled(nodejs-supports-color) = 2.0.0 ++Provides: bundled(nodejs-trim-newlines) = 1.0.0 ++Provides: bundled(nodejs-underscore.string) = 3.2.3 ++Provides: bundled(nodejs-validate-npm-package-license) = 3.0.4 ++Provides: bundled(nodejs-which) = 1.2.14 ++Provides: bundled(nodejs-wrappy) = 1.0.2 ++Provides: bundled(nodejs-yarn) = 1.13.0 ++ ++ ++%description ++Grafana is an open source, feature rich metrics dashboard and graph editor for ++Graphite, InfluxDB & OpenTSDB. ++ ++ ++%package cloudwatch ++Requires: %{name} = %{version}-%{release} ++Summary: Grafana cloudwatch datasource ++ ++%description cloudwatch ++The Grafana cloudwatch datasource. ++ ++%package elasticsearch ++Requires: %{name} = %{version}-%{release} ++Summary: Grafana elasticsearch datasource ++ ++%description elasticsearch ++The Grafana elasticsearch datasource. ++ ++%package azure-monitor ++Requires: %{name} = %{version}-%{release} ++Summary: Grafana azure-monitor datasource ++ ++%description azure-monitor ++The Grafana azure-monitor datasource. ++ ++%package graphite ++Requires: %{name} = %{version}-%{release} ++Summary: Grafana graphite datasource ++ ++%description graphite ++The Grafana graphite datasource. ++ ++%package influxdb ++Requires: %{name} = %{version}-%{release} ++Summary: Grafana influxdb datasource ++ ++%description influxdb ++The Grafana influxdb datasource. ++ ++%package loki ++Requires: %{name} = %{version}-%{release} ++Summary: Grafana loki datasource ++ ++%description loki ++The Grafana loki datasource. ++ ++%package mssql ++Requires: %{name} = %{version}-%{release} ++Summary: Grafana mssql datasource ++ ++%description mssql ++The Grafana mssql datasource. ++ ++%package mysql ++Requires: %{name} = %{version}-%{release} ++Summary: Grafana mysql datasource ++ ++%description mysql ++The Grafana mysql datasource. ++ ++%package opentsdb ++Requires: %{name} = %{version}-%{release} ++Summary: Grafana opentsdb datasource ++ ++%description opentsdb ++The Grafana opentsdb datasource. ++ ++%package postgres ++Requires: %{name} = %{version}-%{release} ++Summary: Grafana postgres datasource ++ ++%description postgres ++The Grafana postgres datasource. ++ ++%package prometheus ++Requires: %{name} = %{version}-%{release} ++Summary: Grafana prometheus datasource ++ ++%description prometheus ++The Grafana prometheus datasource. ++ ++%package stackdriver ++Requires: %{name} = %{version}-%{release} ++Summary: Grafana stackdriver datasource ++ ++%description stackdriver ++The Grafana stackdriver datasource. ++ ++ ++%prep ++%setup -q -T -D -b 0 ++%setup -q -T -D -b 1 ++%patch1 -p1 ++%patch2 -p1 ++%patch3 -p1 ++%patch4 -p1 ++ ++# Set up build subdirs and links ++mkdir -p %{_builddir}/src/github.com/grafana ++ln -sf %{_builddir}/%{name}-%{version} \ ++ %{_builddir}/src/github.com/grafana/grafana ++ ++# remove some (apparent) development files, for rpmlint ++rm -f public/sass/.sass-lint.yml public/test/.jshintrc ++ ++%if 0%{?unbundle_vendor_sources} ++# Unbundle all grafana vendor sources, as per BuildRequires above. ++# An exception is grafana-plugin-model, which is part of grafana. ++# Another exception is xerrors, which is a transition package ++# for the new Go 1.13 error values, see https://github.com/golang/xerrors ++cp --parents -a vendor/github.com/grafana vendor/golang.org/x/xerrors \ ++ vendor/github.com/robfig vendor/github.com/crewjam/saml \ ++ vendor/github.com/ua-parser/uap-go/uaparser \ ++ vendor/github.com/beevik/etree \ ++ vendor/github.com/russellhaering/goxmldsig \ ++ %{_builddir} ++rm -r vendor # remove all vendor sources ++mv %{_builddir}/vendor vendor # put back what we're keeping ++%endif ++ ++ ++%build ++# Build the server-side binaries: grafana-server and grafana-cli ++%if 0%{?gobuild} ++# use modern go macros such as in recent Fedora ++export GOPATH=%{_builddir}:%{gopath} ++%gobuild -o grafana-cli ./pkg/cmd/grafana-cli ++%gobuild -o grafana-server ./pkg/cmd/grafana-server ++%else ++cd %{_builddir}/src/github.com/grafana/grafana ++export GOPATH=%{_builddir}:%{gopath} ++go run build.go build ++%endif ++ ++ ++%install ++# Fix up arch bin directories ++[ ! -d bin/x86_64 ] && ln -sf linux-amd64 bin/x86_64 ++[ ! -d bin/i386 ] && ln -sf linux-386 bin/i386 ++[ ! -d bin/ppc64le ] && ln -sf linux-ppc64le bin/ppc64le ++[ ! -d bin/s390x ] && ln -sf linux-s390x bin/s390x ++[ ! -d bin/arm ] && ln -sf linux-arm bin/arm ++[ ! -d bin/arm64 ] && ln -sf linux-arm64 bin/aarch64 ++[ ! -d bin/aarch64 ] && ln -sf linux-aarch64 bin/aarch64 ++ ++# dirs, shared files, public html, webpack ++install -d %{buildroot}%{_sbindir} ++install -d %{buildroot}%{_datadir}/%{name}/bin ++cp -a conf public %{buildroot}%{_datadir}/%{name} ++ ++# wrappers ++install -p -m 755 packaging/wrappers/grafana-cli %{buildroot}%{_sbindir}/%{name}-cli ++ ++# binaries ++install -p -m 755 bin/%{_arch}/%{name}-server %{buildroot}%{_sbindir} ++install -p -m 755 bin/%{_arch}/%{name}-cli %{buildroot}%{_datadir}/%{name}/bin ++ ++# man pages ++install -d %{buildroot}%{_mandir}/man1 ++install -p -m 644 docs/man/man1/* %{buildroot}%{_mandir}/man1 ++ ++# config dirs ++install -d %{buildroot}%{_sysconfdir}/%{name} ++install -d %{buildroot}%{_sysconfdir}/sysconfig ++ ++# config defaults ++install -p -m 644 conf/distro-defaults.ini \ ++ %{buildroot}%{_sysconfdir}/%{name}/grafana.ini ++install -p -m 644 conf/distro-defaults.ini \ ++ %{buildroot}%{_datadir}/%{name}/conf/defaults.ini ++install -p -m 644 conf/ldap.toml %{buildroot}%{_sysconfdir}/%{name}/ldap.toml ++install -p -m 644 packaging/rpm/sysconfig/grafana-server \ ++ %{buildroot}%{_sysconfdir}/sysconfig/grafana-server ++ ++# config database directory and plugins ++install -d %{buildroot}%{_sharedstatedir}/%{name} ++install -d -m 755 %{buildroot}%{_sharedstatedir}/%{name} ++install -d -m 755 %{buildroot}%{_sharedstatedir}/%{name}/plugins ++ ++# log directory ++install -d %{buildroot}%{_localstatedir}/log/%{name} ++ ++# systemd service files ++install -d %{buildroot}%{_unitdir} # only needed for manual rpmbuilds ++install -p -m 644 packaging/rpm/systemd/grafana-server.service \ ++ %{buildroot}%{_unitdir} ++ ++# daemon run pid file config for using tmpfs ++install -d %{buildroot}%{_tmpfilesdir} ++echo "d %{_rundir}/%{name} 0755 %{GRAFANA_USER} %{GRAFANA_GROUP} -" \ ++ > %{buildroot}%{_tmpfilesdir}/%{name}.conf ++ ++%pre ++getent group %{GRAFANA_GROUP} >/dev/null || groupadd -r %{GRAFANA_GROUP} ++getent passwd %{GRAFANA_USER} >/dev/null || \ ++ useradd -r -g %{GRAFANA_GROUP} -d %{GRAFANA_HOME} -s /sbin/nologin \ ++ -c "%{GRAFANA_USER} user account" %{GRAFANA_USER} ++exit 0 ++ ++%preun ++%systemd_preun grafana-server.service ++ ++%post ++%systemd_post grafana-server.service ++ ++%postun ++%systemd_postun_with_restart grafana-server.service ++ ++ ++%check ++cd %{_builddir}/src/github.com/grafana/grafana ++export GOPATH=%{_builddir}:%{gopath} ++# remove tests currently failing ++rm -f pkg/services/provisioning/dashboards/file_reader_linux_test.go ++rm -f pkg/services/provisioning/dashboards/file_reader_test.go ++rm -f pkg/services/sqlstore/alert_test.go ++rm -f pkg/services/sqlstore/apikey_test.go ++go test ./pkg/... ++ ++ ++%files ++# binaries ++%{_sbindir}/%{name}-server ++%{_sbindir}/%{name}-cli ++ ++# config files ++%dir %{_sysconfdir}/%{name} ++%config(noreplace) %attr(644, root, %{GRAFANA_GROUP}) %{_sysconfdir}/%{name}/grafana.ini ++%config(noreplace) %attr(644, root, %{GRAFANA_GROUP}) %{_sysconfdir}/%{name}/ldap.toml ++%config(noreplace) %{_sysconfdir}/sysconfig/grafana-server ++ ++# Grafana configuration to dynamically create /run/grafana/grafana.pid on tmpfs ++%{_tmpfilesdir}/%{name}.conf ++ ++# config database directory and plugins (actual db files are created by grafana-server) ++%attr(-, %{GRAFANA_USER}, %{GRAFANA_GROUP}) %dir %{_sharedstatedir}/%{name} ++%attr(-, %{GRAFANA_USER}, %{GRAFANA_GROUP}) %dir %{_sharedstatedir}/%{name}/plugins ++ ++# shared directory and all files therein, except some datasources ++%{_datadir}/%{name}/bin ++%{_datadir}/%{name}/public ++ ++# built-in datasources that are sub-packaged ++%global dsdir %{_datadir}/%{name}/public/app/plugins/datasource ++%exclude %{dsdir}/cloudwatch ++%exclude %{dsdir}/elasticsearch ++%exclude %{dsdir}/graphite ++%exclude %{dsdir}/grafana-azure-monitor-datasource ++%exclude %{dsdir}/influxdb ++%exclude %{dsdir}/loki ++%exclude %{dsdir}/mssql ++%exclude %{dsdir}/mysql ++%exclude %{dsdir}/opentsdb ++%exclude %{dsdir}/postgres ++%exclude %{dsdir}/prometheus ++%exclude %{dsdir}/stackdriver ++ ++%dir %{_datadir}/%{name}/conf ++%attr(-, root, %{GRAFANA_GROUP}) %{_datadir}/%{name}/conf/* ++ ++# systemd service file ++%{_unitdir}/grafana-server.service ++ ++# log directory - grafana.log is created by grafana-server, and it does it's own log rotation ++%attr(0755, %{GRAFANA_USER}, %{GRAFANA_GROUP}) %dir %{_localstatedir}/log/%{name} ++ ++# man pages for grafana binaries ++%{_mandir}/man1/%{name}-server.1* ++%{_mandir}/man1/%{name}-cli.1* ++ ++# other docs and license ++%license LICENSE ++%doc CHANGELOG.md CODE_OF_CONDUCT.md CONTRIBUTING.md NOTICE.md ++%doc PLUGIN_DEV.md README.md ROADMAP.md UPGRADING_DEPENDENCIES.md ++ ++# ++# datasources split out into subpackages ++# ++%files cloudwatch ++%{_datadir}/%{name}/public/app/plugins/datasource/cloudwatch ++ ++%files elasticsearch ++%{_datadir}/%{name}/public/app/plugins/datasource/elasticsearch ++ ++%files azure-monitor ++%{_datadir}/%{name}/public/app/plugins/datasource/grafana-azure-monitor-datasource ++ ++%files graphite ++%{_datadir}/%{name}/public/app/plugins/datasource/graphite ++ ++%files influxdb ++%{_datadir}/%{name}/public/app/plugins/datasource/influxdb ++ ++%files loki ++%{_datadir}/%{name}/public/app/plugins/datasource/loki ++ ++%files mssql ++%{_datadir}/%{name}/public/app/plugins/datasource/mssql ++ ++%files mysql ++%{_datadir}/%{name}/public/app/plugins/datasource/mysql ++ ++%files opentsdb ++%{_datadir}/%{name}/public/app/plugins/datasource/opentsdb ++ ++%files postgres ++%{_datadir}/%{name}/public/app/plugins/datasource/postgres ++ ++%files prometheus ++%{_datadir}/%{name}/public/app/plugins/datasource/prometheus ++ ++%files stackdriver ++%{_datadir}/%{name}/public/app/plugins/datasource/stackdriver ++ ++ ++%changelog ++* Fri Aug 30 2019 Mark Goodwin 6.3.4-1 ++- add patch for uaparser on 32bit systems ++- update to latest upstream community sources, see CHANGELOG ++ ++* Wed Jul 31 2019 Mark Goodwin 6.2.5-1 ++- update to latest upstream community sources, see CHANGELOG ++ ++* Thu Jul 25 2019 Fedora Release Engineering - 6.2.2-2 ++- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild ++ ++* Fri Jun 07 2019 Mark Goodwin 6.2.2-1 ++- split out some datasource plugins to sub-packages ++- update to latest upstream community sources, see CHANGELOG ++ ++* Wed Jun 05 2019 Mark Goodwin 6.2.1-1 ++- update to latest upstream community sources, see CHANGELOG ++ ++* Fri May 24 2019 Mark Goodwin 6.2.0-1 ++- update to latest upstream community sources ++- drop a couple of patches ++ ++* Wed May 08 2019 Mark Goodwin 6.1.6-2 ++- add conditional unbundle_vendor_sources macro ++ ++* Tue Apr 30 2019 Mark Goodwin 6.1.6-1 ++- update to latest upstream stable release 6.1.6, see CHANGELOG ++- includes jQuery 3.4.0 security update ++ ++* Wed Apr 24 2019 Mark Goodwin 6.1.4-1 ++- update to latest upstream stable release 6.1.4, see CHANGELOG ++- use gobuild and gochecks macros, eliminate arch symlinks ++- re-enable grafana-debugsource package ++- fix GRAFANA_GROUP typo ++- fix more modes for brp-mangle-shebangs ++- vendor source unbundling now done in prep after patches ++- remove all rhel and fedora conditional guff ++ ++* Tue Apr 16 2019 Mark Goodwin 6.1.3-1 ++- update to latest upstream stable release 6.1.3, see CHANGELOG ++- unbundle all vendor sources, replace with BuildRequires, see ++ the long list of blocker BZs linked to BZ#1670656 ++- BuildRequires go-plugin >= v1.0.0 for grpc_broker (thanks eclipseo) ++- tweak make_webpack to no longer use grunt, switch to prod build ++- add ExclusiveArch lua script (thanks quantum.analyst) ++- move db directory and plugins to /var/lib/grafana ++- split out into 6 patches, ready for upstream PRs ++- add check to run go tests for gating checks ++ ++* Thu Apr 04 2019 Mark Goodwin 6.1.0-1 ++- update to latest upstream stable release 6.1.0, see CHANGELOG ++ ++* Thu Mar 21 2019 Mark Goodwin 6.0.2-1 ++- bump to latest upstream stable release 6.0.2-1 ++- unbundle almost all remaining vendor code, see linked blockers in BZ#1670656 ++ ++* Fri Mar 15 2019 Mark Goodwin 6.0.1-3 ++- bump to latest upstream stable release 6.0.1-1 ++ ++* Thu Mar 14 2019 Mark Goodwin 6.0.1-2 ++- unbundle and add BuildRequires for golang-github-rainycape-unidecode-devel ++ ++* Thu Mar 07 2019 Mark Goodwin 6.0.1-1 ++- update to v6.0.1 upstream sources, tweak distro config, re-do patch ++- simplify make_webpack.sh script (Elliott Sales de Andrade) ++- vendor/github.com/go-ldap is now gone, so don't unbundle it ++ ++* Thu Mar 07 2019 Mark Goodwin 5.4.3-11 ++- tweak after latest feedback, bump to 5.4.3-11 (BZ 1670656) ++- build debuginfo package again ++- unbundle BuildRequires for golang-github-hashicorp-version-devel ++- remove some unneeded development files ++- remove macros from changelog and other rpmlint tweaks ++ ++* Fri Feb 22 2019 Mark Goodwin 5.4.3-10 ++- tweak spec for available and unavailable (bundled) golang packages ++ ++* Wed Feb 20 2019 Xavier Bachelot 5.4.3-9 ++- Remove extraneous slash (cosmetic) ++- Create directories just before moving stuff in them ++- Truncate long lines ++- Group all golang stuff ++- Simplify BuildRequires/bundled Provides ++- Sort BuildRequires/bundled Provides ++- Fix bundled go packages Provides ++ ++* Fri Feb 15 2019 Mark Goodwin 5.4.3-8 ++- add BuildRequires (and unbundle) vendor sources available in Fedora ++- declare Provides for remaining (bundled) vendor go sources ++- do not attempt to unbundle anything on RHEL < 7 or Fedora < 28 ++ ++* Thu Feb 07 2019 Mark Goodwin 5.4.3-7 ++- further refinement for spec doc section from Xavier Bachelot ++- disable debug_package to avoid empty debugsourcefiles.list ++ ++* Wed Feb 06 2019 Mark Goodwin 5.4.3-6 ++- further refinement following review by Xavier Bachelot ++ ++* Tue Feb 05 2019 Mark Goodwin 5.4.3-5 ++- further refinement following review by Xavier Bachelot ++ ++* Fri Feb 01 2019 Mark Goodwin 5.4.3-4 ++- further spec updates after packaging review ++- reworked post-install scriplets ++ ++* Thu Jan 31 2019 Mark Goodwin 5.4.3-3 ++- tweak FHS patch, update spec after packaging review ++ ++* Wed Jan 30 2019 Mark Goodwin 5.4.3-2 ++- add patch to be standard FHS compliant, remove phantomjs ++- update to v5.4.3 upstream community sources ++ ++* Wed Jan 09 2019 Mark Goodwin 5.4.2-1 ++- update to v5.4.2 upstream community sources ++ ++* Thu Oct 18 2018 Mark Goodwin 5.3.1-1 ++- update to v5.3.1 upstream community sources ++ ++* Tue Oct 02 2018 Mark Goodwin 5.2.5-1 ++- native RPM spec build with current tagged v5.2.5 sources +Index: grafana-6.4.3/packaging/rpm/spec/make_grafana_webpack.sh +=================================================================== +--- /dev/null ++++ grafana-6.4.3/packaging/rpm/spec/make_grafana_webpack.sh +@@ -0,0 +1,61 @@ ++#! /bin/bash ++# ++# Copyright (c) 2019 Red Hat. ++# ++# This program is free software; you can redistribute it and/or modify it ++# under the terms of the GNU General Public License as published by the ++# Free Software Foundation; either version 2 of the License, or (at your ++# option) any later version. ++# ++# This program is distributed in the hope that it will be useful, but ++# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ++# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++# for more details. ++# ++ ++[ $# -ne 1 ] && echo "Usage: $0 version" && exit 1 ++ ++# grafana version (must be tagged on github.com/grafana/grafana as "v$VER") ++VER=$1 ++BUILDDIR=`mktemp -d buildXXXXXX` ++ ++[ ! -f /usr/bin/npm ] && echo Error, please install \"npm\" package && exit 1 ++ ++# get src tree and set cwd ++echo Fetching pristine upstream git tagged branch for grafana version v$VER ... ++git clone https://github.com/grafana/grafana grafana-$VER ++cd grafana-$VER ++git checkout -b v$VER v$VER ++ ++# exclude the phantomjs-prebuilt binary module from the webpack ++sed -i '/phantomjs-prebuilt/d' package.json ++ ++# nuke grunt task for copying phantomjs ++rm -f scripts/grunt/options/phantomjs.js ++sed -i '/phantomjs/d' scripts/grunt/*.js ++ ++# populate node_modules using package.json ++echo Running yarn to populate local node_modules .... ++npm install yarn ++node_modules/yarn/bin/yarn --non-interactive --no-progress --ignore-engines install --pure-lockfile > yarn.out 2>&1 ++node_modules/yarn/bin/yarn --non-interactive -W add webpack-cli ++ ++# build the webpack ++echo;echo Building production webpack .... ++node_modules/webpack/bin/webpack.js --display errors-only --mode production --config scripts/webpack/webpack.prod.js ++ ++cd .. ++ ++# webpack tarball. Includes public/views because index.html references the webpack ++tar czf grafana_webpack-$VER.tar.gz grafana-$VER/public/build grafana-$VER/public/views ++ ++# source tarball (if needed) ++if [ ! -f grafana-$VER.tar.gz ]; then ++ wget --quiet -O grafana-$VER.tar.gz https://github.com/grafana/grafana/archive/v$VER/grafana-$VER.tar.gz ++fi ++ ++# done ++echo Both grafana-$VER.tar.gz and grafana_webpack-$VER.tar.gz ++echo should now be copied to your \$HOME/rpmbuild/SOURCES ++ ++exit 0 diff --git a/004-distro-defaults-ini.patch b/004-distro-defaults-ini.patch new file mode 100644 index 0000000..4e1aa31 --- /dev/null +++ b/004-distro-defaults-ini.patch @@ -0,0 +1,24 @@ +Index: grafana-6.4.3/conf/defaults.ini +=================================================================== +--- grafana-6.4.3.orig/conf/defaults.ini ++++ grafana-6.4.3/conf/defaults.ini +@@ -12,16 +12,16 @@ instance_name = ${HOSTNAME} + #################################### Paths ############################### + [paths] + # Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used) +-data = data ++data = /var/lib/grafana + + # Temporary files in `data` directory older than given duration will be removed + temp_data_lifetime = 24h + + # Directory where grafana can store logs +-logs = data/log ++logs = /var/log/grafana + + # Directory where grafana will automatically scan and look for plugins +-plugins = data/plugins ++plugins = /var/lib/grafana/plugins + + # folder that contains provisioning config files that grafana will apply on startup and while running. + provisioning = conf/provisioning diff --git a/Makefile.no_phantomjs b/Makefile.no_phantomjs deleted file mode 100644 index a6c25b4..0000000 --- a/Makefile.no_phantomjs +++ /dev/null @@ -1,39 +0,0 @@ -NAME = grafana -SPEC = $(NAME).spec - -default: verify-deps clean tar - -verify-deps: - @which yarn >/dev/null 2>&1 || ( echo "yarn not found; run \`sudo npm install -g yarn\`" && false ) - @which grunt >/dev/null 2>&1 || ( echo "grunt not found; run \`sudo npm install -g grunt-cli\`" && false ) - -clean: - rm -f $(NAME)-*.tar $(NAME)-*.tar.xz - -tar: - osc service disabledrun - @version=$$( awk '/^Version:/ {print $$2}' $(SPEC) ) && \ - echo "Package version is $$version" && \ - basename=$(NAME)-$$version && \ - tar=$$basename.tar && \ - tmpdir=$$(mktemp -d -p .) && \ - cd $$tmpdir && \ - tar -xf ../$$tar && \ - cd $$basename && \ - sed -i 's/base\///' public/sass/base/_fonts.scss && \ - # patch frontend html template to remove phantomjs dependant link \ - sed -i 's/.*<\/a>//g' public/app/features/dashboard/components/ShareModal/template.html && \ - yarn install --pure-lockfile && \ - grunt release && \ - cp -pr tmp/public . && \ - cp -pr tmp/tools . && \ - cd .. && \ - echo "Updating $$basename/tools $$basename/public in tarball..." && \ - tar -rf ../$$tar $$basename/tools $$basename/public && \ - # remove phantomjs binary \ - tar -f ../$$tar --delete $$basename/tools/phantomjs/phantomjs && \ - # remove go.mod and go.sum as we build exclusively using vendor deps \ - tar -f ../$$tar --delete $$basename/go.mod $$basename/go.sum && \ - cd .. && \ - xz $$tar && \ - rm -rf $$tmpdir diff --git a/Makefile.phantomjs b/Makefile.phantomjs deleted file mode 100644 index 4098c71..0000000 --- a/Makefile.phantomjs +++ /dev/null @@ -1,33 +0,0 @@ -NAME = grafana -SPEC = $(NAME).spec - -default: verify-deps clean tar - -verify-deps: - @which yarn >/dev/null 2>&1 || ( echo "yarn not found; run \`sudo npm install -g yarn\`" && false ) - @which grunt >/dev/null 2>&1 || ( echo "grunt not found; run \`sudo npm install -g grunt-cli\`" && false ) - -clean: - rm -f $(NAME)-*.tar $(NAME)-*.tar.xz - -tar: - osc service disabledrun - @version=$$( awk '/^Version:/ {print $$2}' $(SPEC) ) && \ - echo "Package version is $$version" && \ - basename=$(NAME)-$$version && \ - tar=$$basename.tar && \ - tmpdir=$$(mktemp -d -p .) && \ - cd $$tmpdir && \ - tar -xf ../$$tar && \ - cd $$basename && \ - sed -i 's/base\///' public/sass/base/_fonts.scss && \ - yarn install --pure-lockfile && \ - grunt release && \ - cp -pr tmp/public . && \ - cp -pr tmp/tools . && \ - cd .. && \ - echo "Updating $$basename/tools $$basename/public in tarball..." && \ - tar -rf ../$$tar $$basename/tools $$basename/public && \ - cd .. && \ - xz $$tar && \ - rm -rf $$tmpdir diff --git a/README b/README deleted file mode 100644 index d9d5611..0000000 --- a/README +++ /dev/null @@ -1,27 +0,0 @@ - -The tarball is generated via the OBS source service, but Grafana -needs to ship the compiled frontend assets as well, which have to -be built by running yarn and grunt inside the source tree (see -https://github.com/grafana/grafana#building-frontend-assets). -This can't be done at build time on OBS, because it involves -downloading and installing packages from the internet, so instead -we have a Makefile which does the following: - -- Runs `osc service disabledrun` to get the latest source tarball -- Unpacks the tarball to a temporary directory -- Runs `yarn install --pure-lockfile && grunt release` -- Adds the generated "vendor" and "public" content to the tarball, - then compresses it with xz. -- The tarball can then be used by OBS to build an RPM. - -In order for this to work you need to have npm >= 6, yarn and grunt -installed. To get set up, run: - - # zypper in npm - # npm install -g yarn - # npm install -g grunt-cli - -Then, to package a new release of Grafana, run `make` then `osc ci` -and you should be good. - -Please direct any questions to Tim Serong diff --git a/_service b/_service deleted file mode 100644 index 955c8a7..0000000 --- a/_service +++ /dev/null @@ -1,13 +0,0 @@ - - - https://github.com/grafana/grafana - git - .git - 6.3.5 - v6.3.5 - enable - - - grafana - - diff --git a/_servicedata b/_servicedata deleted file mode 100644 index da109ca..0000000 --- a/_servicedata +++ /dev/null @@ -1,6 +0,0 @@ - - - https://github.com/grafana/grafana - 67bad726f12efb21893c75c141f2330a4a3cbe2a - - \ No newline at end of file diff --git a/grafana-6.3.5.tar.xz b/grafana-6.3.5.tar.xz deleted file mode 100644 index 7665151..0000000 --- a/grafana-6.3.5.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fdfcabcdb8f4207efb6e1d8c55861f92ea9558f570f384a35eabc9a5a234a306 -size 17615204 diff --git a/grafana-6.4.3.tar.gz b/grafana-6.4.3.tar.gz new file mode 100644 index 0000000..ca2cc01 --- /dev/null +++ b/grafana-6.4.3.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ed2bbaae731c0d168800ed41af2bd18e3df50abb6c9852347d4488a5cc8d63b +size 13805699 diff --git a/grafana.changes b/grafana.changes index 4b0bbb9..a6f14b1 100644 --- a/grafana.changes +++ b/grafana.changes @@ -1,3 +1,162 @@ +------------------------------------------------------------------- +Wed Oct 16 19:29:48 UTC 2019 - ecsos@opensuse.org + +- Update to 6.4.3 + * Bug Fixes + - Alerting: All notification channels should send even if one fails to send. #19807, @jan25 + - AzureMonitor: Fix slate interference with dropdowns. #19799, @aocenas + - ContextMenu: make ContextMenu positioning aware of the viewport width. #19699, @krvajal + - DataLinks: Fix context menu not showing in singlestat-ish visualisations. #19809, @dprokop + - DataLinks: Fix url field not releasing focus. #19804, @aocenas + - Datasource: Fixes clicking outside of some query editors required 2 clicks. #19822, @aocenas + - Panels: Fixes default tab for visualizations without Queries Tab. #19803, @hugohaggmark + - Singlestat: Fixed issue with mapping null to text. #19689, @torkelo + - @grafana/toolkit: Don't fail plugin creation when git user.name config is not set. #19821, @dprokop + - @grafana/toolkit: TSLint line number off by 1. #19782, @fredwangwang + +------------------------------------------------------------------- +Wed Oct 16 15:31:57 UTC 2019 - ecsos@opensuse.org + +- Update to 6.4.2 + * Bug Fixes + - CloudWatch: Changes incorrect dimension wmlid to wlmid . #19679, @ATTron + - Grafana Image Renderer: Fixes plugin page. #19664, @hugohaggmark + - Graph: Fixes auto decimals logic for y axis ticks that results in too many decimals for high values. #19618, @torkelo + - Graph: Switching to series mode should re-render graph. #19623, @torkelo + - Loki: Fix autocomplete on label values. #19579, @aocenas + - Loki: Removes live option for logs panel. #19533, @davkal + - Profile: Fix issue with user profile not showing more than sessions sessions in some cases. #19578, @huynhsamha + - Prometheus: Fixes so results in Panel always are sorted by query order. #19597, @hugohaggmark + - ShareQuery: Fixed issue when using -- Dashboard -- datasource (to share query result) when dashboard had rows. #19610, @torkelo + - Show SAML login button if SAML is enabled. #19591, @papagian + - SingleStat: Fixes postfix/prefix usage. #19687, @hugohaggmark + - Table: Proper handling of json data with dataframes. #19596, @marefr + - Units: Fixed wrong id for Terabits/sec. #19611, @andreaslangnevyjel + +- Changes from 6.4.1 + * Bug Fixes + - Provisioning: Fixed issue where empty nested keys in YAML provisioning caused a server crash, #19547 + - ImageRendering: Fixed issue with image rendering in enterprise build (Enterprise) + - Reporting: Fixed issue with reporting service when STMP was disabled (Enterprise). + +- Changes from 6.4.0 + * Features / Enhancements + - Build: Upgrade go to 1.12.10. #19499, @marefr + - DataLinks: Suggestions menu improvements. #19396, @dprokop + - Explore: Take root_url setting into account when redirecting from dashboard to explore. #19447, @ivanahuckova + - Explore: Update broken link to logql docs. #19510, @ivanahuckova + - Logs: Adds Logs Panel as a visualization. #19504, @davkal + * Bug Fixes + - CLI: Fix version selection for plugin install. #19498, @aocenas + - Graph: Fixes minor issue with series override color picker and custom color . #19516, @torkelo + +- Changes from 6.4.0 Beta 2 + * Features / Enhancements + - Azure Monitor: Remove support for cross resource queries (#19115)". #19346, @sunker + - Docker: Upgrade packages to resolve reported vulnerabilities. #19188, @marefr + - Graphite: Time range expansion reduced from 1 minute to 1 second. #19246, @torkelo + - grafana/toolkit: Add plugin creation task. #19207, @dprokop + * Bug Fixes + - Alerting: Prevents creating alerts from unsupported queries. #19250, @hugohaggmark + - Alerting: Truncate PagerDuty summary when greater than 1024 characters. #18730, @nvllsvm + - Cloudwatch: Fix autocomplete for Gamelift dimensions. #19146, @kevinpz + - Dashboard: Fix export for sharing when panels use default data source. #19315, @torkelo + - Database: Rewrite system statistics query to perform better. #19178, @papagian + - Gauge/BarGauge: Fix issue with [object Object] in titles . #19217, @ryantxu + - MSSQL: Revert usage of new connectionstring format introduced by #18384. #19203, @marefr + - Multi-LDAP: Do not fail-fast on invalid credentials. #19261, @gotjosh + - MySQL, Postgres, MSSQL: Fix validating query with template variables in alert . #19237, @marefr + - MySQL, Postgres: Update raw sql when query builder updates. #19209, @marefr + - MySQL: Limit datasource error details returned from the backend. #19373, @marefr + +- Changes from 6.4.0 Beta 1 + * Features / Enhancements + - API: Readonly datasources should not be created via the API. #19006, @papagian + - Alerting: Include configured AlertRuleTags in Webhooks notifier. #18233, @dominic-miglar + - Annotations: Add annotations support to Loki. #18949, @aocenas + - Annotations: Use a single row to represent a region. #17673, @ryantxu + - Auth: Allow inviting existing users when login form is disabled. #19048, @548017 + - Azure Monitor: Add support for cross resource queries. #19115, @sunker + - CLI: Allow installing custom binary plugins. #17551, @aocenas + - Dashboard: Adds Logs Panel (alpha) as visualization option for Dashboards. #18641, @hugohaggmark + - Dashboard: Reuse query results between panels . #16660, @ryantxu + - Dashboard: Set time to to 23:59:59 when setting To time using calendar. #18595, @simPod + - DataLinks: Add DataLinks support to Gauge, BarGauge and SingleStat2 panel. #18605, @ryantxu + - DataLinks: Enable access to labels & field names. #18918, @torkelo + - DataLinks: Enable multiple data links per panel. #18434, @dprokop + - Docker: switch docker image to alpine base with phantomjs support. #18468, @DanCech + - Elasticsearch: allow templating queries to order by doc_count. #18870, @hackery + - Explore: Add throttling when doing live queries. #19085, @aocenas + - Explore: Adds ability to go back to dashboard, optionally with query changes. #17982, @kaydelaney + - Explore: Reduce default time range to last hour. #18212, @davkal + - Gauge/BarGauge: Support decimals for min/max. #18368, @ryantxu + - Graph: New series override transform constant that renders a single point as a line across the whole graph. #19102, @davkal + - Image rendering: Add deprecation warning when PhantomJS is used for rendering images. #18933, @papagian + - InfluxDB: Enable interpolation within ad-hoc filter values. #18077, @kvc-code + - LDAP: Allow an user to be synchronized against LDAP. #18976, @gotjosh + - Ldap: Add ldap debug page. #18759, @peterholmberg + - Loki: Remove prefetching of default label values. #18213, @davkal + - Metrics: Add failed alert notifications metric. #18089, @koorgoo + - OAuth: Support JMES path lookup when retrieving user email. #14683, @bobmshannon + - OAuth: return GitLab groups as a part of user info (enable team sync). #18388, @alexanderzobnin + - Panels: Add unit for electrical charge - ampere-hour. #18950, @anirudh-ramesh + - Plugin: AzureMonitor - Reapply MetricNamespace support. #17282, @raphaelquati + - Plugins: better warning when plugins fail to load. #18671, @ryantxu + - Postgres: Add support for scram sha 256 authentication. #18397, @nonamef + - RemoteCache: Support SSL with Redis. #18511, @kylebrandt + - SingleStat: The gauge option in now disabled/hidden (unless it's an old panel with it already enabled) . #18610, @ryantxu + - Stackdriver: Add extra alignment period options. #18909, @sunker + - Units: Add South African Rand (ZAR) to currencies. #18893, @jeteon + - Units: Adding T,P,E,Z,and Y bytes. #18706, @chiqomar + * Bug Fixes + - Alerting: Notification is sent when state changes from no_data to ok. #18920, @papagian + - Alerting: fix duplicate alert states when the alert fails to save to the database. #18216, @kylebrandt + - Alerting: fix response popover prompt when add notification channels. #18967, @lzdw + - CloudWatch: Fix alerting for queries with Id (using GetMetricData). #17899, @alex-berger + - Explore: Fix auto completion on label values for Loki. #18988, @aocenas + - Explore: Fixes crash using back button with a zoomed in graph. #19122, @hugohaggmark + - Explore: Fixes so queries in Explore are only run if Graph/Table is shown. #19000, @hugohaggmark + - MSSQL: Change connectionstring to URL format to fix using passwords with semicolon. #18384, @Russiancold + - MSSQL: Fix memory leak when debug enabled. #19049, @briangann + - Provisioning: Allow escaping literal '$' with '$$' in configs to avoid interpolation. #18045, @kylebrandt + - TimePicker: Fixes hiding time picker dropdown in FireFox. #19154, @hugohaggmark + * Breaking changes + + Annotations + There are some breaking changes in the annotations HTTP API for region annotations. Region annotations are now represented + using a single event instead of two seperate events. Check breaking changes in HTTP API below and HTTP API documentation for more details. + + Docker + Grafana is now using Alpine 3.10 as docker base image. + + HTTP API + - GET /api/alert-notifications now requires at least editor access. + New /api/alert-notifications/lookup returns less information than /api/alert-notifications and can be access by any authenticated user. + - GET /api/alert-notifiers now requires at least editor access + - GET /api/org/users now requires org admin role. + New /api/org/users/lookup returns less information than /api/org/users and can be access by users that are org admins, + admin in any folder or admin of any team. + - GET /api/annotations no longer returns regionId property. + - POST /api/annotations no longer supports isRegion property. + - PUT /api/annotations/:id no longer supports isRegion property. + - PATCH /api/annotations/:id no longer supports isRegion property. + - DELETE /api/annotations/region/:id has been removed. + * Deprecation notes + + PhantomJS + - PhantomJS, which is used for rendering images of dashboards and panels, + is deprecated and will be removed in a future Grafana release. + A deprecation warning will from now on be logged when Grafana starts up if PhantomJS is in use. + Please consider migrating from PhantomJS to the Grafana Image Renderer plugin. + +- Changes from 6.3.6 + * Features / Enhancements + - Metrics: Adds setting for turning off total stats metrics. #19142, @marefr + * Bug Fixes + - Database: Rewrite system statistics query to perform better. #19178, @papagian + - Explore: Fixes error when switching from prometheus to loki data sources. #18599, @kaydelaney + +- Rebase package spec. Use mostly from fedora, fix suse specified things and fix some errors. +- Add missing directories provisioning/datasources and provisioning/notifiers + and sample.yaml as described in packaging/rpm/control from upstream. + Missing directories are shown in logfiles. + ------------------------------------------------------------------- Thu Sep 05 08:07:21 UTC 2019 - simon.crute@grafana.com diff --git a/grafana.spec b/grafana.spec index f4c55f1..ca2c2b8 100644 --- a/grafana.spec +++ b/grafana.spec @@ -16,99 +16,490 @@ # -%define GRAFANA_USER %{name} -%define GRAFANA_GROUP %{name} -%define GRAFANA_HOME %{_datadir}/%{name} +# Unbundle grafana vendor sources and instead use BuildRequires +# only on platforms that have enough golang devel support. +%global unbundle_vendor_sources 0 -#Compat macro for new _fillupdir macro introduced in Nov 2017 -%if ! %{defined _fillupdir} - %define _fillupdir /var/adm/fillup-templates -%endif - -%bcond_with phantomjs +# omit golang debugsource, see BZ995136 and related +%global _debugsource_template %{nil} +%global GRAFANA_USER %{name} +%global GRAFANA_GROUP %{name} +%global GRAFANA_HOME %{_datadir}/%{name} Name: grafana -Version: 6.3.5 -Release: 0 -Summary: Dashboards and editors for Graphite, InfluxDB, OpenTSDB +Version: 6.4.3 +Release: 1%{?dist} +Summary: Metrics dashboard and graph editor License: Apache-2.0 Group: System/Monitoring -Url: http://grafana.org/ -Source: %{name}-%{version}.tar.xz -Source1: %{name}-rpmlintrc -# Instructions on the build process -Source2: README -# Makefile to automate build process -Source3: Makefile.no_phantomjs -Source4: Makefile.phantomjs -BuildRequires: fdupes -BuildRequires: go >= 1.11 -BuildRequires: golang-packaging -BuildRequires: shadow +URL: https://grafana.org +# Source0 contains the tagged upstream sources +Source0: https://github.com/grafana/grafana/archive/v%{version}/%{name}-%{version}.tar.gz +# Source1 contains the front-end javascript modules bundled into a webpack +Source1: grafana_webpack-%{version}.tar.gz +# Source2 is the script to create the above webpack from grafana sources +Source2: make_grafana_webpack.sh +# rpmlintrc +Source99: %{name}-rpmlintrc +# Patches for upstream +Patch1: 001-login-oauth-use-oauth2-exchange.patch +Patch2: 002-remove-jaeger-tracing.patch +Patch3: 003-new-files.patch +Patch4: 004-distro-defaults-ini.patch +# +Requires(pre): shadow Requires(post): %insserv_prereq -BuildRoot: %{_tmppath}/%{name}-%{version}-build -%if %{with phantomjs} -BuildRequires: phantomjs -Requires: phantomjs -%endif +BuildRequires: fdupes +BuildRequires: gettext-tools +BuildRequires: config(krb5) +BuildRequires: go >= 1.12.9 +BuildRequires: golang-packaging +# Without cloudwatch you can not add data sources +Requires: grafana-cloudwatch = %{version}-%{release} + %{?systemd_requires} -%description -A graph and dashboard builder for visualizing time series metrics. +Recommends: grafana-elasticsearch = %{version}-%{release} +Recommends: grafana-azure-monitor = %{version}-%{release} +Recommends: grafana-graphite = %{version}-%{release} +Recommends: grafana-influxdb = %{version}-%{release} +Recommends: grafana-loki = %{version}-%{release} +Recommends: grafana-mssql = %{version}-%{release} +Recommends: grafana-mysql = %{version}-%{release} +Recommends: grafana-opentsdb = %{version}-%{release} +Recommends: grafana-postgres = %{version}-%{release} +Recommends: grafana-prometheus = %{version}-%{release} +Recommends: grafana-stackdriver = %{version}-%{release} + +%if 0%{?unbundle_vendor_sources} +# golang build deps. These allow us to unbundle vendor golang source. +BuildRequires: golang(github.com/BurntSushi/toml) +BuildRequires: golang(github.com/aws/aws-sdk-go) +BuildRequires: golang(github.com/benbjohnson/clock) +BuildRequires: golang(github.com/beorn7/perks/quantile) +BuildRequires: golang(github.com/bmizerany/assert) +BuildRequires: golang(github.com/bradfitz/gomemcache/memcache) +BuildRequires: golang(github.com/codahale/hdrhistogram) +BuildRequires: golang(github.com/codegangsta/cli) +BuildRequires: golang(github.com/davecgh/go-spew/spew) +BuildRequires: golang(github.com/denisenkom/go-mssqldb) +BuildRequires: golang(github.com/facebookgo/inject) +BuildRequires: golang(github.com/facebookgo/structtag) +BuildRequires: golang(github.com/fatih/color) +BuildRequires: golang(github.com/go-ini/ini) +BuildRequires: golang(github.com/go-macaron/binding) +BuildRequires: golang(github.com/go-macaron/gzip) +BuildRequires: golang(github.com/go-macaron/inject) +BuildRequires: golang(github.com/go-macaron/session) +BuildRequires: golang(github.com/go-sql-driver/mysql) +BuildRequires: golang(github.com/go-stack/stack) +BuildRequires: golang(github.com/go-xorm/builder) +BuildRequires: golang(github.com/go-xorm/core) +BuildRequires: golang(github.com/go-xorm/xorm) +BuildRequires: golang(github.com/gobwas/glob) +BuildRequires: golang(github.com/gobwas/glob/compiler) +BuildRequires: golang(github.com/gobwas/glob/match) +BuildRequires: golang(github.com/gobwas/glob/syntax) +BuildRequires: golang(github.com/gobwas/glob/syntax/ast) +BuildRequires: golang(github.com/gobwas/glob/syntax/lexer) +BuildRequires: golang(github.com/gobwas/glob/util/runes) +BuildRequires: golang(github.com/gobwas/glob/util/strings) +BuildRequires: golang(github.com/gopherjs/gopherjs/js) +BuildRequires: golang(github.com/gorilla/websocket) +BuildRequires: golang(github.com/gosimple/slug) +BuildRequires: golang(github.com/hashicorp/go-hclog) +BuildRequires: golang(golang.org/x/sys/unix) +BuildRequires: golang(google.golang.org/appengine) +BuildRequires: golang(google.golang.org/genproto/googleapis/rpc/status) +BuildRequires: golang(google.golang.org/grpc) +# need grpc_broker in go-plugin >= 1.0.0-1 +BuildRequires: golang-github-prometheus-common-devel +BuildRequires: golang(cloud.google.com/go/compute/metadata) +BuildRequires: golang(github.com/Unknwon/com) +BuildRequires: golang(github.com/VividCortex/mysqlerr) +BuildRequires: golang(github.com/go-bufio/bufio) +BuildRequires: golang(github.com/go-ini/ini) +BuildRequires: golang(github.com/go-macaron/macaron) +BuildRequires: golang(github.com/go-redis/redis) +BuildRequires: golang(github.com/go-yaml/yaml) +BuildRequires: golang(github.com/golang/protobuf/proto) +BuildRequires: golang(github.com/golang/protobuf/ptypes) +BuildRequires: golang(github.com/golang/protobuf/ptypes) +BuildRequires: golang(github.com/golang/protobuf/ptypes/any) +BuildRequires: golang(github.com/golang/protobuf/ptypes/duration) +BuildRequires: golang(github.com/golang/protobuf/ptypes/timestamp) +BuildRequires: golang(github.com/hashicorp/go-plugin) +BuildRequires: golang(github.com/hashicorp/go-version) +BuildRequires: golang(github.com/hashicorp/yamux) +BuildRequires: golang(github.com/inconshreveable/log15) +BuildRequires: golang(github.com/jmespath/go-jmespath) +BuildRequires: golang(github.com/jonboulle/clockwork) +BuildRequires: golang(github.com/jtolds/gls) +BuildRequires: golang(github.com/klauspost/compress/flate) +BuildRequires: golang(github.com/klauspost/compress/gzip) +BuildRequires: golang(github.com/klauspost/compress/snappy) +BuildRequires: golang(github.com/klauspost/cpuid) +BuildRequires: golang(github.com/klauspost/crc32) +BuildRequires: golang(github.com/kr/pretty) +BuildRequires: golang(github.com/kr/text) +BuildRequires: golang(github.com/lib/pq) +BuildRequires: golang(github.com/mattn/go-colorable) +BuildRequires: golang(github.com/mattn/go-isatty) +BuildRequires: golang(github.com/mattn/go-sqlite3) +BuildRequires: golang(github.com/matttproud/golang_protobuf_extensions/pbutil) +BuildRequires: golang(github.com/mitchellh/go-testing-interface) +BuildRequires: golang(github.com/oklog/run) +BuildRequires: golang(github.com/opentracing/opentracing-go) +BuildRequires: golang(github.com/patrickmn/go-cache) +BuildRequires: golang(github.com/pkg/errors) +BuildRequires: golang(github.com/prometheus/client_golang/api) +BuildRequires: golang(github.com/prometheus/client_golang/api/prometheus/v1) +BuildRequires: golang(github.com/prometheus/client_model/go) +BuildRequires: golang(github.com/prometheus/common/expfmt) +BuildRequires: golang(github.com/prometheus/common/expfmt) +BuildRequires: golang(github.com/prometheus/common/model) +BuildRequires: golang(github.com/prometheus/procfs) +BuildRequires: golang(github.com/prometheus/procfs) +BuildRequires: golang(github.com/prometheus/procfs/internal/util) +BuildRequires: golang(github.com/prometheus/procfs/internal/util) +BuildRequires: golang(github.com/prometheus/procfs/nfs) +BuildRequires: golang(github.com/prometheus/procfs/xfs) +BuildRequires: golang(github.com/rainycape/unidecode) +BuildRequires: golang(github.com/sergi/go-diff/diffmatchpatch) +BuildRequires: golang(github.com/smartystreets/assertions) +BuildRequires: golang(github.com/smartystreets/goconvey/convey) +BuildRequires: golang(github.com/smartystreets/goconvey/convey/gotest) +BuildRequires: golang(github.com/smartystreets/goconvey/convey/reporting) +BuildRequires: golang(github.com/teris-io/shortid) +BuildRequires: golang(github.com/yudai/gojsondiff) +BuildRequires: golang(github.com/yudai/golcs) +BuildRequires: golang(golang.org/x/crypto/ed25519) +BuildRequires: golang(golang.org/x/crypto/md4) +BuildRequires: golang(golang.org/x/crypto/pbkdf2) +BuildRequires: golang(golang.org/x/net/context) +BuildRequires: golang(golang.org/x/net/context/ctxhttp) +BuildRequires: golang(golang.org/x/net/http/httpguts) +BuildRequires: golang(golang.org/x/net/http2) +BuildRequires: golang(golang.org/x/net/http2/hpack) +BuildRequires: golang(golang.org/x/net/idna) +BuildRequires: golang(golang.org/x/net/internal/timeseries) +BuildRequires: golang(golang.org/x/net/trace) +BuildRequires: golang(golang.org/x/oauth2) +BuildRequires: golang(golang.org/x/oauth2/google) +BuildRequires: golang(golang.org/x/oauth2/internal) +BuildRequires: golang(golang.org/x/oauth2/jws) +BuildRequires: golang(golang.org/x/oauth2/jwt) +BuildRequires: golang(golang.org/x/sync/errgroup) +BuildRequires: golang(golang.org/x/text/collate) +BuildRequires: golang(golang.org/x/text/collate/build) +BuildRequires: golang(golang.org/x/text/internal/colltab) +BuildRequires: golang(golang.org/x/text/internal/gen) +BuildRequires: golang(golang.org/x/text/internal/tag) +BuildRequires: golang(golang.org/x/text/internal/triegen) +BuildRequires: golang(golang.org/x/text/internal/ucd) +BuildRequires: golang(gopkg.in/alexcesaro/quotedprintable.v3) +BuildRequires: golang(gopkg.in/asn1-ber.v1) +BuildRequires: golang(gopkg.in/ldap.v3) +BuildRequires: golang(gopkg.in/mail.v2) +BuildRequires: golang(gopkg.in/square/go-jose.v2) +BuildRequires: golang(gopkg.in/square/go-jose.v2/cipher) +BuildRequires: golang(gopkg.in/square/go-jose.v2/json) +%endif + +# Declare all nodejs modules bundled in the webpack - this is for security +# purposes so if nodejs-foo ever needs an update, affected packages can be +# easily identified. This is generated from package-lock.json once the webpack +# has been built with make_webpack.sh. +Provides: bundled(nodejs-abbrev) = 1.1.1 +Provides: bundled(nodejs-ansi-regex) = 2.1.1 +Provides: bundled(nodejs-ansi-styles) = 2.2.1 +Provides: bundled(nodejs-argparse) = 1.0.10 +Provides: bundled(nodejs-array-find-index) = 1.0.2 +Provides: bundled(nodejs-async) = 1.5.2 +Provides: bundled(nodejs-balanced-match) = 1.0.0 +Provides: bundled(nodejs-brace-expansion) = 1.1.11 +Provides: bundled(nodejs-builtin-modules) = 1.1.1 +Provides: bundled(nodejs-camelcase) = 2.1.1 +Provides: bundled(nodejs-camelcase-keys) = 2.1.0 +Provides: bundled(nodejs-chalk) = 1.1.3 +Provides: bundled(nodejs-coffee-script) = 1.10.0 +Provides: bundled(nodejs-colors) = 1.1.2 +Provides: bundled(nodejs-concat-map) = 0.0.1 +Provides: bundled(nodejs-currently-unhandled) = 0.4.1 +Provides: bundled(nodejs-dateformat) = 1.0.12 +Provides: bundled(nodejs-decamelize) = 1.2.0 +Provides: bundled(nodejs-error-ex) = 1.3.2 +Provides: bundled(nodejs-escape-string-regexp) = 1.0.5 +Provides: bundled(nodejs-esprima) = 2.7.3 +Provides: bundled(nodejs-eventemitter2) = 0.4.14 +Provides: bundled(nodejs-exit) = 0.1.2 +Provides: bundled(nodejs-find-up) = 1.1.2 +Provides: bundled(nodejs-findup-sync) = 0.3.0 +Provides: bundled(nodejs-fs.realpath) = 1.0.0 +Provides: bundled(nodejs-get-stdin) = 4.0.1 +Provides: bundled(nodejs-getobject) = 0.1.0 +Provides: bundled(nodejs-glob) = 7.0.6 +Provides: bundled(nodejs-graceful-fs) = 4.1.15 +Provides: bundled(nodejs-grunt) = 1.0.1 +Provides: bundled(nodejs-grunt-cli) = 1.2.0 +Provides: bundled(nodejs-grunt-known-options) = 1.1.1 +Provides: bundled(nodejs-grunt-legacy-log) = 1.0.2 +Provides: bundled(nodejs-grunt-legacy-log-utils) = 1.0.0 +Provides: bundled(nodejs-grunt-legacy-util) = 1.0.0 +Provides: bundled(nodejs-has-ansi) = 2.0.0 +Provides: bundled(nodejs-hooker) = 0.2.3 +Provides: bundled(nodejs-hosted-git-info) = 2.7.1 +Provides: bundled(nodejs-iconv-lite) = 0.4.24 +Provides: bundled(nodejs-indent-string) = 2.1.0 +Provides: bundled(nodejs-inflight) = 1.0.6 +Provides: bundled(nodejs-inherits) = 2.0.3 +Provides: bundled(nodejs-is-arrayish) = 0.2.1 +Provides: bundled(nodejs-is-builtin-module) = 1.0.0 +Provides: bundled(nodejs-is-finite) = 1.0.2 +Provides: bundled(nodejs-is-utf8) = 0.2.1 +Provides: bundled(nodejs-isexe) = 2.0.0 +Provides: bundled(nodejs-js-yaml) = 3.5.5 +Provides: bundled(nodejs-load-json-file) = 1.1.0 +Provides: bundled(nodejs-lodash) = 4.17.11 +Provides: bundled(nodejs-loud-rejection) = 1.6.0 +Provides: bundled(nodejs-map-obj) = 1.0.1 +Provides: bundled(nodejs-meow) = 3.7.0 +Provides: bundled(nodejs-minimatch) = 3.0.4 +Provides: bundled(nodejs-minimist) = 1.2.0 +Provides: bundled(nodejs-nopt) = 3.0.6 +Provides: bundled(nodejs-normalize-package-data) = 2.4.2 +Provides: bundled(nodejs-number-is-nan) = 1.0.1 +Provides: bundled(nodejs-object-assign) = 4.1.1 +Provides: bundled(nodejs-once) = 1.4.0 +Provides: bundled(nodejs-parse-json) = 2.2.0 +Provides: bundled(nodejs-path-exists) = 2.1.0 +Provides: bundled(nodejs-path-is-absolute) = 1.0.1 +Provides: bundled(nodejs-path-type) = 1.1.0 +Provides: bundled(nodejs-pify) = 2.3.0 +Provides: bundled(nodejs-pinkie) = 2.0.4 +Provides: bundled(nodejs-pinkie-promise) = 2.0.1 +Provides: bundled(nodejs-read-pkg) = 1.1.0 +Provides: bundled(nodejs-read-pkg-up) = 1.0.1 +Provides: bundled(nodejs-redent) = 1.0.0 +Provides: bundled(nodejs-repeating) = 2.0.1 +Provides: bundled(nodejs-resolve) = 1.1.7 +Provides: bundled(nodejs-rimraf) = 2.2.8 +Provides: bundled(nodejs-safer-buffer) = 2.1.2 +Provides: bundled(nodejs-semver) = 5.6.0 +Provides: bundled(nodejs-signal-exit) = 3.0.2 +Provides: bundled(nodejs-spdx-correct) = 3.1.0 +Provides: bundled(nodejs-spdx-exceptions) = 2.2.0 +Provides: bundled(nodejs-spdx-expression-parse) = 3.0.0 +Provides: bundled(nodejs-spdx-license-ids) = 3.0.3 +Provides: bundled(nodejs-sprintf-js) = 1.0.3 +Provides: bundled(nodejs-strip-ansi) = 3.0.1 +Provides: bundled(nodejs-strip-bom) = 2.0.0 +Provides: bundled(nodejs-strip-indent) = 1.0.1 +Provides: bundled(nodejs-supports-color) = 2.0.0 +Provides: bundled(nodejs-trim-newlines) = 1.0.0 +Provides: bundled(nodejs-underscore.string) = 3.2.3 +Provides: bundled(nodejs-validate-npm-package-license) = 3.0.4 +Provides: bundled(nodejs-which) = 1.2.14 +Provides: bundled(nodejs-wrappy) = 1.0.2 +Provides: bundled(nodejs-yarn) = 1.13.0 + +%description +Grafana is an open source, feature rich metrics dashboard and graph editor for +Graphite, InfluxDB & OpenTSDB. + + +%package cloudwatch +Requires: %{name} = %{version}-%{release} +Summary: Grafana cloudwatch datasource +Group: System/Monitoring + +%description cloudwatch +The Grafana cloudwatch datasource. + +%package elasticsearch +Requires: %{name} = %{version}-%{release} +Summary: Grafana elasticsearch datasource +Group: System/Monitoring + +%description elasticsearch +The Grafana elasticsearch datasource. + +%package azure-monitor +Requires: %{name} = %{version}-%{release} +Summary: Grafana azure-monitor datasource +Group: System/Monitoring + +%description azure-monitor +The Grafana azure-monitor datasource. + +%package graphite +Requires: %{name} = %{version}-%{release} +Summary: Grafana graphite datasource +Group: System/Monitoring + +%description graphite +The Grafana graphite datasource. + +%package influxdb +Requires: %{name} = %{version}-%{release} +Summary: Grafana influxdb datasource +Group: System/Monitoring + +%description influxdb +The Grafana influxdb datasource. + +%package loki +Requires: %{name} = %{version}-%{release} +Summary: Grafana loki datasource +Group: System/Monitoring + +%description loki +The Grafana loki datasource. + +%package mssql +Requires: %{name} = %{version}-%{release} +Summary: Grafana mssql datasource +Group: System/Monitoring + +%description mssql +The Grafana mssql datasource. + +%package mysql +Requires: %{name} = %{version}-%{release} +Summary: Grafana mysql datasource +Group: System/Monitoring + +%description mysql +The Grafana mysql datasource. + +%package opentsdb +Requires: %{name} = %{version}-%{release} +Summary: Grafana opentsdb datasource +Group: System/Monitoring + +%description opentsdb +The Grafana opentsdb datasource. + +%package postgres +Requires: %{name} = %{version}-%{release} +Summary: Grafana postgres datasource +Group: System/Monitoring + +%description postgres +The Grafana postgres datasource. + +%package prometheus +Requires: %{name} = %{version}-%{release} +Summary: Grafana prometheus datasource +Group: System/Monitoring + +%description prometheus +The Grafana prometheus datasource. + +%package stackdriver +Requires: %{name} = %{version}-%{release} +Summary: Grafana stackdriver datasource +Group: System/Monitoring + +%description stackdriver +The Grafana stackdriver datasource. -Grafana provides ways to create, explore, and share -dashboards and data with teams. %prep -%setup -q -n grafana-%{version} -%if %{with phantomjs} -cp %{S:4} %_sourcedir/Makefile -%else -cp %{S:3} %_sourcedir/Makefile +%setup -q -T -D -b 0 +%setup -q -T -D -b 1 +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 + +# Set up build subdirs and links +mkdir -p %{_builddir}/src/github.com/grafana +ln -sf %{_builddir}/%{name}-%{version} \ + %{_builddir}/src/github.com/grafana/grafana + +# remove some (apparent) development files, for rpmlint +rm -f public/sass/.sass-lint.yml public/test/.jshintrc + +%if 0%{?unbundle_vendor_sources} +# Unbundle all grafana vendor sources, as per BuildRequires above. +# An exception is grafana-plugin-model, which is part of grafana. +# Another exception is xerrors, which is a transition package +# for the new Go 1.13 error values, see https://github.com/golang/xerrors +cp --parents -a vendor/github.com/grafana vendor/golang.org/x/xerrors \ + vendor/github.com/robfig vendor/github.com/crewjam/saml \ + vendor/github.com/ua-parser/uap-go/uaparser \ + vendor/github.com/beevik/etree \ + vendor/github.com/russellhaering/goxmldsig \ + %{_builddir} +rm -r vendor # remove all vendor sources +mv %{_builddir}/vendor vendor # put back what we're keeping %endif %build %goprep github.com/grafana/grafana -# Manual build in order to inject ldflags so grafana correctly displays -# the version in the footer of each page. Note that we're only injecting -# main.version, not main.commit or main.buildstamp as is done in the upstream -# build.go, because we don't have access to the git commit history here. -# (The %%gobuild macro can't take quoted strings; they get split up when -# expanded to $extra_flags in process_build() in /usr/lib/rpm/golang.sh.) -export IMPORTPATH="github.com/grafana/grafana" -export BUILDFLAGS="-v -p 4 -x -buildmode=pie" -export GOPATH=%{_builddir}/go:%{_builddir}/contrib -export GOBIN=%{_builddir}/go/bin -go install $BUILDFLAGS -ldflags '-X main.version=%{version}' $IMPORTPATH/pkg/cmd/... +export GOPATH=%{_builddir}:%{_builddir}/contrib +###go install $BUILDFLAGS -ldflags '-X main.version=%%{version}' $IMPORTPATH/pkg/cmd/... +cd %{_builddir}/src/github.com/grafana/grafana +go run build.go setup +go run build.go build %install %goinstall -# we're missing %%gosrc and %%gofilelist... (although that *might* be ok...) +# Fix up arch bin directories +[ ! -d bin/x86_64 ] && ln -sf linux-amd64 bin/x86_64 +[ ! -d bin/i386 ] && ln -sf linux-386 bin/i386 +[ ! -d bin/ppc64le ] && ln -sf linux-ppc64le bin/ppc64le +[ ! -d bin/s390x ] && ln -sf linux-s390x bin/s390x +[ ! -d bin/arm ] && ln -sf linux-arm bin/arm +[ ! -d bin/arm64 ] && ln -sf linux-arm64 bin/aarch64 +[ ! -d bin/aarch64 ] && ln -sf linux-aarch64 bin/aarch64 -install -Dm644 {packaging/rpm/systemd/,%{buildroot}%{_unitdir}/}%{name}-server.service -install -dm755 %{buildroot}%{_sbindir} -ln -s %{_sbindir}/service %{buildroot}%{_sbindir}/rc%{name}-server -mv %{buildroot}/%{_bindir}/grafana-* %{buildroot}/%{_sbindir} - -install -Dm644 packaging/rpm/sysconfig/%{name}-server \ -%{buildroot}%{_fillupdir}/sysconfig.%{name}-server - -install -d -m0750 %{buildroot}%{_localstatedir}/lib/%{name} +# dirs +install -d -m0755 %{buildroot}%{_sbindir} +install -d -m0755 %{buildroot}%{_datadir}/%{name} +install -d -m0755 %{buildroot}%{_datadir}/%{name}/bin +install -d -m0755 %{buildroot}%{_datadir}/%{name}/tools +install -d -m0755 %{buildroot}%{_datadir}/%{name}/vendor install -d -m0750 %{buildroot}%{_localstatedir}/log/%{name} -install -d -m0755 %{buildroot}/%{_localstatedir}/lib/%{name}/plugins -install -d -m0755 %{buildroot}/%{_localstatedir}/lib/%{name}/dashboards +install -d -m0750 %{buildroot}%{_sharedstatedir}/%{name} +install -d -m0755 %{buildroot}%{_sharedstatedir}/%{name}/plugins +install -d -m0755 %{buildroot}%{_sharedstatedir}/%{name}/dashboards install -d -m0755 %{buildroot}%{_sysconfdir}/%{name}/provisioning/dashboards +install -d -m0755 %{buildroot}%{_sysconfdir}/%{name}/provisioning/datasources +install -d -m0755 %{buildroot}%{_sysconfdir}/%{name}/provisioning/notifiers +# wrappers +sed -i -e 's|\/usr\/bin\/env bash|\/bin\/bash|g' packaging/wrappers/grafana-cli +install -p -m 755 packaging/wrappers/grafana-cli %{buildroot}%{_sbindir}/%{name}-cli + +# binaries +install -p -m 755 bin/%{_arch}/%{name}-server %{buildroot}%{_sbindir} +install -p -m 755 bin/%{_arch}/%{name}-cli %{buildroot}%{_datadir}/%{name}/bin + +# man pages +install -d -m0755 %{buildroot}%{_mandir}/man1 +install -p -m0644 docs/man/man1/* %{buildroot}%{_mandir}/man1 + +# configs defaults install -Dm640 conf/sample.ini %{buildroot}%{_sysconfdir}/%{name}/%{name}.ini install -Dm640 {conf/,%{buildroot}%{_sysconfdir}/%{name}/}ldap.toml -install -Dm644 {conf/,%{buildroot}%{_datadir}/%{name}/conf/}defaults.ini -install -m644 {conf/,%{buildroot}%{_datadir}/%{name}/conf/}sample.ini -install -Dm644 {conf/provisioning/dashboards/,%{buildroot}%{_datadir}/%{name}/conf/provisioning/dashboards/}sample.yaml -install -Dm644 {conf/provisioning/datasources/,%{buildroot}%{_datadir}/%{name}/conf/provisioning/datasources/}sample.yaml -cp -pr public %{buildroot}%{_datadir}/%{name}/ -install -d -m755 %{buildroot}%{_datadir}/%{name}/vendor -install -d -m755 %{buildroot}%{_datadir}/%{name}/tools +cp -a conf/provisioning %{buildroot}%{_sysconfdir}/%{name} + +# sysconfig +install -Dm644 packaging/rpm/sysconfig/%{name}-server %{buildroot}%{_fillupdir}/sysconfig.%{name}-server + +# rest +cp -a conf public %{buildroot}%{_datadir}/%{name} + +# systemd +install -Dm644 {packaging/rpm/systemd/,%{buildroot}%{_unitdir}/}%{name}-server.service +ln -s %{_sbindir}/service %{buildroot}%{_sbindir}/rc%{name}-server + +# daemon run pid file config for using tmpfs +install -d %{buildroot}%{_tmpfilesdir} +echo "d %{_rundir}/%{name} 0755 %{GRAFANA_USER} %{GRAFANA_GROUP} -" > %{buildroot}%{_tmpfilesdir}/%{name}.conf %if %{with phantomjs} # phantomjs is used for rendering PNG images of graphs. The frontend asset @@ -127,19 +518,28 @@ ln -s %{_bindir}/phantomjs %{buildroot}%{_datadir}/%{name}/tools/phantomjs/phant %fdupes %{buildroot}/%{_datadir} %check -#gotest github.com/grafana/grafana/pkg... +cd %{_builddir}/src/github.com/grafana/grafana +###export GOPATH=%%{_builddir}:%%{gopath} +export GOPATH=%{_builddir} +# remove tests currently failing +rm -f pkg/services/provisioning/dashboards/file_reader_linux_test.go +rm -f pkg/services/provisioning/dashboards/file_reader_test.go +rm -f pkg/services/sqlstore/alert_test.go +rm -f pkg/services/sqlstore/apikey_test.go +rm -f pkg/setting/setting_test.go +go test ./pkg/... %pre %service_add_pre %{name}-server.service - -echo "Creating user %{GRAFANA_USER} and group %{GRAFANA_GROUP} if not present" +echo Creating user %{GRAFANA_USER} and group %{GRAFANA_GROUP} if not present getent group %{GRAFANA_GROUP} > /dev/null || groupadd -r %{GRAFANA_GROUP} -getent passwd %{GRAFANA_GROUP} > /dev/null || useradd -r -g %{GRAFANA_GROUP} \ --d %{GRAFANA_HOME} -s /sbin/nologin -c "%{GRAFANA_USER} user" %{GRAFANA_GROUP} +getent passwd %{GRAFANA_USER} > /dev/null || useradd -r -g %{GRAFANA_GROUP} -d %{GRAFANA_HOME} -s /sbin/nologin -c "%{GRAFANA_USER} user" %{GRAFANA_USER} +exit 0 %post -%{fillup_only -n %{name}-server} %service_add_post %{name}-server.service +%fillup_only -n %{name}-server +%tmpfiles_create %{_tmpfilesdir}/%{name}.conf %preun %service_del_preun %{name}-server.service @@ -148,27 +548,101 @@ getent passwd %{GRAFANA_GROUP} > /dev/null || useradd -r -g %{GRAFANA_GROUP} \ %service_del_postun %{name}-server.service %files -%defattr(-,root,root) -%license LICENSE* -%doc CHANGELOG* -%{_sbindir}/%{name}* -%{_sbindir}/rc%{name}-server -%{_unitdir}/%{name}-server.service -%{_fillupdir}/sysconfig.%{name}-server -%attr(0755,root,root) %dir %{_sysconfdir}/%{name} -%attr(0755,root,root) %dir %{_sysconfdir}/%{name}/provisioning -%attr(0755,root,root) %dir %{_sysconfdir}/%{name}/provisioning/dashboards -%attr(0755,root,%{GRAFANA_GROUP}) %dir %{_datadir}/%{name}/conf -%attr(0640,root,%{GRAFANA_GROUP}) %config(noreplace) %{_sysconfdir}/%{name}/%{name}.ini -%attr(0640,root,%{GRAFANA_GROUP}) %config(noreplace) %{_sysconfdir}/%{name}/ldap.toml -%attr(0755,%{GRAFANA_USER},%{GRAFANA_GROUP}) %dir %{_localstatedir}/lib/%{name} -%attr(0755,%{GRAFANA_USER},%{GRAFANA_GROUP}) %dir %{_localstatedir}/lib/%{name}/plugins -%attr(0755,%{GRAFANA_USER},%{GRAFANA_GROUP}) %dir %{_localstatedir}/lib/%{name}/dashboards -%attr(0750,%{GRAFANA_USER},%{GRAFANA_GROUP}) %dir %{_localstatedir}/log/%{name} -%doc %{_datadir}/%{name}/conf/sample.ini -%doc %{_datadir}/%{name}/conf/provisioning/dashboards/sample.yaml -%doc %{_datadir}/%{name}/conf/provisioning/datasources/sample.yaml -%config %{_datadir}/%{name}/conf/defaults.ini +%license LICENSE +%doc CHANGELOG.md CODE_OF_CONDUCT.md CONTRIBUTING.md NOTICE.md +%doc PLUGIN_DEV.md README.md ROADMAP.md UPGRADING_DEPENDENCIES.md +# binaries +%{_sbindir}/%{name}-server +%{_sbindir}/%{name}-cli +# config files +%attr(0755, root, root) %dir %{_sysconfdir}/%{name} +%attr(0755, root, root) %dir %{_sysconfdir}/%{name}/provisioning +%attr(0755, root, root) %dir %{_sysconfdir}/%{name}/provisioning/dashboards +%attr(0755, root, root) %dir %{_sysconfdir}/%{name}/provisioning/datasources +%attr(0755, root, root) %dir %{_sysconfdir}/%{name}/provisioning/notifiers +%attr(0640, root, %{GRAFANA_GROUP}) %config(noreplace) %{_sysconfdir}/%{name}/grafana.ini +%attr(0640, root, %{GRAFANA_GROUP}) %config(noreplace) %{_sysconfdir}/%{name}/ldap.toml +%attr(0640, root, %{GRAFANA_GROUP}) %config(noreplace) %{_sysconfdir}/%{name}/provisioning/dashboards/sample.yaml +%attr(0640, root, %{GRAFANA_GROUP}) %config(noreplace) %{_sysconfdir}/%{name}/provisioning/datasources/sample.yaml +%attr(0640, root, %{GRAFANA_GROUP}) %config(noreplace) %{_sysconfdir}/%{name}/provisioning/notifiers/sample.yaml +# config database directory and plugins (actual db files are created by grafana-server) +%attr(0755, %{GRAFANA_USER}, %{GRAFANA_GROUP}) %dir %{_sharedstatedir}/%{name} +%attr(0755, %{GRAFANA_USER}, %{GRAFANA_GROUP}) %dir %{_sharedstatedir}/%{name}/plugins +%attr(0755, %{GRAFANA_USER}, %{GRAFANA_GROUP}) %dir %{_sharedstatedir}/%{name}/dashboards +# log directory - grafana.log is created by grafana-server, and it does it's own log rotation +%attr(0750, %{GRAFANA_USER}, %{GRAFANA_GROUP}) %dir %{_localstatedir}/log/%{name} +# built-in datasources that are sub-packaged +%global dsdir %{_datadir}/%{name}/public/app/plugins/datasource +%exclude %{dsdir}/cloudwatch +%exclude %{dsdir}/elasticsearch +%exclude %{dsdir}/graphite +%exclude %{dsdir}/grafana-azure-monitor-datasource +%exclude %{dsdir}/influxdb +%exclude %{dsdir}/loki +%exclude %{dsdir}/mssql +%exclude %{dsdir}/mysql +%exclude %{dsdir}/opentsdb +%exclude %{dsdir}/postgres +%exclude %{dsdir}/prometheus +%exclude %{dsdir}/stackdriver +# shared directory and all files therein, except some datasources +%attr(0755, root, %{GRAFANA_GROUP}) %dir %{_datadir}/%{name} +%attr(0755, root, %{GRAFANA_GROUP}) %dir %{_datadir}/%{name}/bin +%attr(0755, root, %{GRAFANA_GROUP}) %dir %{_datadir}/%{name}/public +%attr(0755, root, %{GRAFANA_GROUP}) %dir %{_datadir}/%{name}/conf +%attr(0644, root, %{GRAFANA_GROUP}) %config %{_datadir}/%{name}/conf/*.{ini,toml} +%attr(0644, root, %{GRAFANA_GROUP}) %config %{_datadir}/%{name}/conf/provisioning/dashboards/sample.yaml +%attr(0644, root, %{GRAFANA_GROUP}) %config %{_datadir}/%{name}/conf/provisioning/datasources/sample.yaml +%attr(0644, root, %{GRAFANA_GROUP}) %config %{_datadir}/%{name}/conf/provisioning/notifiers/sample.yaml %{_datadir}/%{name} +# systemd service file +%{_unitdir}/grafana-server.service +%{_sbindir}/rc%{name}-server +# man pages for grafana binaries +%{_mandir}/man1/%{name}-server.1* +%{_mandir}/man1/%{name}-cli.1* +# other +%{_fillupdir}/sysconfig.%{name}-server +%{_tmpfilesdir}/%{name}.conf +%ghost %dir %{_rundir}/%{name} + +# +# datasources split out into subpackages +# +%files cloudwatch +%{_datadir}/%{name}/public/app/plugins/datasource/cloudwatch + +%files elasticsearch +%{_datadir}/%{name}/public/app/plugins/datasource/elasticsearch + +%files azure-monitor +%{_datadir}/%{name}/public/app/plugins/datasource/grafana-azure-monitor-datasource + +%files graphite +%{_datadir}/%{name}/public/app/plugins/datasource/graphite + +%files influxdb +%{_datadir}/%{name}/public/app/plugins/datasource/influxdb + +%files loki +%{_datadir}/%{name}/public/app/plugins/datasource/loki + +%files mssql +%{_datadir}/%{name}/public/app/plugins/datasource/mssql + +%files mysql +%{_datadir}/%{name}/public/app/plugins/datasource/mysql + +%files opentsdb +%{_datadir}/%{name}/public/app/plugins/datasource/opentsdb + +%files postgres +%{_datadir}/%{name}/public/app/plugins/datasource/postgres + +%files prometheus +%{_datadir}/%{name}/public/app/plugins/datasource/prometheus + +%files stackdriver +%{_datadir}/%{name}/public/app/plugins/datasource/stackdriver %changelog diff --git a/grafana_webpack-6.4.3.tar.gz b/grafana_webpack-6.4.3.tar.gz new file mode 100644 index 0000000..2467f67 --- /dev/null +++ b/grafana_webpack-6.4.3.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45269de4b895b9406b393c7961863dc9b508ba1c9b3b0f37ccd0a4d544c34002 +size 7022676 diff --git a/make_grafana_webpack.sh b/make_grafana_webpack.sh new file mode 100644 index 0000000..bc0386b --- /dev/null +++ b/make_grafana_webpack.sh @@ -0,0 +1,61 @@ +#! /bin/bash +# +# Copyright (c) 2019 Red Hat. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# + +[ $# -ne 1 ] && echo "Usage: $0 version" && exit 1 + +# grafana version (must be tagged on github.com/grafana/grafana as "v$VER") +VER=$1 +BUILDDIR=`mktemp -d buildXXXXXX` + +[ ! -f /usr/bin/npm ] && echo Error, please install \"npm\" package && exit 1 + +# get src tree and set cwd +echo Fetching pristine upstream git tagged branch for grafana version v$VER ... +git clone https://github.com/grafana/grafana grafana-$VER +cd grafana-$VER +git checkout -b v$VER v$VER + +# exclude the phantomjs-prebuilt binary module from the webpack +sed -i '/phantomjs-prebuilt/d' package.json + +# nuke grunt task for copying phantomjs +rm -f scripts/grunt/options/phantomjs.js +sed -i '/phantomjs/d' scripts/grunt/*.js + +# populate node_modules using package.json +echo Running yarn to populate local node_modules .... +npm install yarn +node_modules/yarn/bin/yarn --non-interactive --no-progress --ignore-engines install --pure-lockfile > yarn.out 2>&1 +node_modules/yarn/bin/yarn --non-interactive -W add webpack-cli + +# build the webpack +echo;echo Building production webpack .... +node_modules/webpack/bin/webpack.js --display errors-only --mode production --config scripts/webpack/webpack.prod.js + +cd .. + +# webpack tarball. Includes public/views because index.html references the webpack +tar czf grafana_webpack-$VER.tar.gz grafana-$VER/public/build grafana-$VER/public/views + +# source tarball (if needed) +if [ ! -f grafana-$VER.tar.gz ]; then + wget --quiet -O grafana-$VER.tar.gz https://github.com/grafana/grafana/archive/v$VER/grafana-$VER.tar.gz +fi + +# done +echo Both grafana-$VER.tar.gz and grafana_webpack-$VER.tar.gz +echo should now be copied to your \$HOME/rpmbuild/SOURCES + +exit 0