diff --git a/.gitignore b/.gitignore index dfc25e9..fb060cc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -SOURCES/grafana-6.3.6.tar.gz -SOURCES/grafana_webpack-6.3.6.tar.gz +SOURCES/grafana-6.7.3.tar.gz +SOURCES/grafana_webpack-6.7.3.tar.gz diff --git a/.grafana.metadata b/.grafana.metadata index b0b0282..cbf7dbd 100644 --- a/.grafana.metadata +++ b/.grafana.metadata @@ -1,2 +1,2 @@ -59a2779eecc65a49339789ef27f5039e6cd1df00 SOURCES/grafana-6.3.6.tar.gz -58a07073b24fddba1973a0788118648ea8363ed9 SOURCES/grafana_webpack-6.3.6.tar.gz +cd15a32c97cad74170baf35fda5cdb63dda71189 SOURCES/grafana-6.7.3.tar.gz +497241edb4421d19f87bbfd048d45521fe055f01 SOURCES/grafana_webpack-6.7.3.tar.gz diff --git a/SOURCES/001-login-oauth-use-oauth2-exchange.patch b/SOURCES/001-login-oauth-use-oauth2-exchange.patch index ff59d44..f6dff49 100644 --- a/SOURCES/001-login-oauth-use-oauth2-exchange.patch +++ b/SOURCES/001-login-oauth-use-oauth2-exchange.patch @@ -1,8 +1,8 @@ diff --git a/pkg/api/login_oauth.go b/pkg/api/login_oauth.go -index a46c97238..76fc8480c 100644 +index c8c9f05b33..1b5a67aec2 100644 --- a/pkg/api/login_oauth.go +++ b/pkg/api/login_oauth.go -@@ -125,7 +125,7 @@ func (hs *HTTPServer) OAuthLogin(ctx *m.ReqContext) { +@@ -134,7 +134,7 @@ func (hs *HTTPServer) OAuthLogin(ctx *m.ReqContext) { oauthCtx := context.WithValue(context.Background(), oauth2.HTTPClient, oauthClient) // get token from provider diff --git a/SOURCES/002-remove-jaeger-tracing.patch b/SOURCES/002-remove-jaeger-tracing.patch index 0d20b5e..e6fae49 100644 --- a/SOURCES/002-remove-jaeger-tracing.patch +++ b/SOURCES/002-remove-jaeger-tracing.patch @@ -1,5 +1,5 @@ diff --git a/pkg/cmd/grafana-server/server.go b/pkg/cmd/grafana-server/server.go -index 85d6db43e..6de99b58b 100644 +index 0dace4ebab..f1a4bfde53 100644 --- a/pkg/cmd/grafana-server/server.go +++ b/pkg/cmd/grafana-server/server.go @@ -23,7 +23,6 @@ import ( @@ -12,10 +12,10 @@ index 85d6db43e..6de99b58b 100644 "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 +index 923459786b..0000000000 --- a/pkg/infra/tracing/tracing.go +++ /dev/null -@@ -1,148 +0,0 @@ +@@ -1,161 +0,0 @@ -package tracing - -import ( @@ -56,7 +56,7 @@ index d1511a533..000000000 - ts.parseSettings() - - if ts.enabled { -- ts.initGlobalTracer() +- return ts.initGlobalTracer() - } - - return nil @@ -80,7 +80,7 @@ index d1511a533..000000000 - ts.disableSharedZipkinSpans = section.Key("disable_shared_zipkin_spans").MustBool(false) -} - --func (ts *TracingService) initGlobalTracer() error { +-func (ts *TracingService) initJaegerCfg() (jaegercfg.Configuration, error) { - cfg := jaegercfg.Configuration{ - ServiceName: "grafana", - Disabled: !ts.enabled, @@ -94,6 +94,19 @@ index d1511a533..000000000 - }, - } - +- _, err := cfg.FromEnv() +- if err != nil { +- return cfg, err +- } +- return cfg, nil +-} +- +-func (ts *TracingService) initGlobalTracer() error { +- cfg, err := ts.initJaegerCfg() +- if err != nil { +- return err +- } +- - jLogger := &jaegerLogWrapper{logger: log.New("jaeger")} - - options := []jaegercfg.Option{} @@ -120,7 +133,7 @@ index d1511a533..000000000 - return err - } - -- opentracing.InitGlobalTracer(tracer) +- opentracing.SetGlobalTracer(tracer) - - ts.closer = closer - @@ -166,13 +179,18 @@ index d1511a533..000000000 -} diff --git a/pkg/infra/tracing/tracing_test.go b/pkg/infra/tracing/tracing_test.go deleted file mode 100644 -index 27e4de777..000000000 +index a6d71cf165..0000000000 --- a/pkg/infra/tracing/tracing_test.go +++ /dev/null -@@ -1,36 +0,0 @@ +@@ -1,94 +0,0 @@ -package tracing - --import "testing" +-import ( +- "github.com/stretchr/testify/assert" +- "github.com/stretchr/testify/require" +- "os" +- "testing" +-) - -func TestGroupSplit(t *testing.T) { - tests := []struct { @@ -200,9 +218,62 @@ index 27e4de777..000000000 - 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) -- } +- assert.Truef(t, exists, "Tag %q not found for input %q", k, test.input) +- assert.Equalf(t, v, value, "Tag %q has wrong value for input %q", k, test.input) - } - } -} +- +-func TestInitJaegerCfg_Default(t *testing.T) { +- ts := &TracingService{} +- cfg, err := ts.initJaegerCfg() +- require.NoError(t, err) +- +- assert.True(t, cfg.Disabled) +-} +- +-func TestInitJaegerCfg_Enabled(t *testing.T) { +- ts := &TracingService{enabled: true} +- cfg, err := ts.initJaegerCfg() +- require.NoError(t, err) +- +- assert.False(t, cfg.Disabled) +- assert.Equal(t, "localhost:6831", cfg.Reporter.LocalAgentHostPort) +-} +- +-func TestInitJaegerCfg_DisabledViaEnv(t *testing.T) { +- os.Setenv("JAEGER_DISABLED", "true") +- defer func() { +- os.Unsetenv("JAEGER_DISABLED") +- }() +- +- ts := &TracingService{enabled: true} +- cfg, err := ts.initJaegerCfg() +- require.NoError(t, err) +- +- assert.True(t, cfg.Disabled) +-} +- +-func TestInitJaegerCfg_EnabledViaEnv(t *testing.T) { +- os.Setenv("JAEGER_DISABLED", "false") +- defer func() { +- os.Unsetenv("JAEGER_DISABLED") +- }() +- +- ts := &TracingService{enabled: false} +- cfg, err := ts.initJaegerCfg() +- require.NoError(t, err) +- +- assert.False(t, cfg.Disabled) +-} +- +-func TestInitJaegerCfg_InvalidEnvVar(t *testing.T) { +- os.Setenv("JAEGER_DISABLED", "totallybogus") +- defer func() { +- os.Unsetenv("JAEGER_DISABLED") +- }() +- +- ts := &TracingService{} +- _, err := ts.initJaegerCfg() +- require.EqualError(t, err, "cannot parse env var JAEGER_DISABLED=totallybogus: strconv.ParseBool: parsing \"totallybogus\": invalid syntax") +-} diff --git a/SOURCES/003-manpages.patch b/SOURCES/003-manpages.patch new file mode 100644 index 0000000..d2b2f88 --- /dev/null +++ b/SOURCES/003-manpages.patch @@ -0,0 +1,219 @@ +diff --git a/docs/man/man1/grafana-cli.1 b/docs/man/man1/grafana-cli.1 +new file mode 100644 +index 0000000000..171748fcda +--- /dev/null ++++ b/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/ . +diff --git a/docs/man/man1/grafana-server.1 b/docs/man/man1/grafana-server.1 +new file mode 100644 +index 0000000000..30b7c1306f +--- /dev/null ++++ b/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/ . diff --git a/SOURCES/003-new-files.patch b/SOURCES/003-new-files.patch deleted file mode 100644 index 2cac75d..0000000 --- a/SOURCES/003-new-files.patch +++ /dev/null @@ -1,1762 +0,0 @@ -diff --git a/conf/distro-defaults.ini b/conf/distro-defaults.ini -new file mode 100644 -index 0000000000..e337ba0b57 ---- /dev/null -+++ b/conf/distro-defaults.ini -@@ -0,0 +1,685 @@ -+##################### Grafana Configuration Defaults for distros ##################### -+# -+# Do not modify this file in grafana installs -+# -+ -+# possible values : production, development -+app_mode = production -+ -+# instance name, defaults to HOSTNAME environment variable value or hostname if HOSTNAME var is empty -+instance_name = ${HOSTNAME} -+ -+#################################### Paths ############################### -+[paths] -+# Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used) -+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 = /var/log/grafana -+ -+# Directory where grafana will automatically scan and look for plugins -+plugins = /var/lib/grafana/plugins -+ -+# folder that contains provisioning config files that grafana will apply on startup and while running. -+provisioning = conf/provisioning -+ -+#################################### Server ############################## -+[server] -+# Protocol (http, https, socket) -+protocol = http -+ -+# The ip address to bind to, empty will bind to all interfaces -+http_addr = -+ -+# The http port to use -+http_port = 3000 -+ -+# The public facing domain name used to access grafana from a browser -+domain = localhost -+ -+# Redirect to correct domain if host header does not match domain -+# Prevents DNS rebinding attacks -+enforce_domain = false -+ -+# The full public facing url -+root_url = %(protocol)s://%(domain)s:%(http_port)s/ -+ -+# Serve Grafana from subpath specified in `root_url` setting. By default it is set to `false` for compatibility reasons. -+serve_from_sub_path = false -+ -+# Log web requests -+router_logging = false -+ -+# the path relative working path -+static_root_path = public -+ -+# enable gzip -+enable_gzip = false -+ -+# https certs & key file -+cert_file = -+cert_key = -+ -+# Unix socket path -+socket = /tmp/grafana.sock -+ -+#################################### Database ############################ -+[database] -+# You can configure the database connection by specifying type, host, name, user and password -+# as separate properties or as on string using the url property. -+ -+# Either "mysql", "postgres" or "sqlite3", it's your choice -+type = sqlite3 -+host = 127.0.0.1:3306 -+name = grafana -+user = root -+# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;""" -+password = -+# Use either URL or the previous fields to configure the database -+# Example: mysql://user:secret@host:port/database -+url = -+ -+# Max idle conn setting default is 2 -+max_idle_conn = 2 -+ -+# Max conn setting default is 0 (mean not set) -+max_open_conn = -+ -+# Connection Max Lifetime default is 14400 (means 14400 seconds or 4 hours) -+conn_max_lifetime = 14400 -+ -+# Set to true to log the sql calls and execution times. -+log_queries = -+ -+# For "postgres", use either "disable", "require" or "verify-full" -+# For "mysql", use either "true", "false", or "skip-verify". -+ssl_mode = disable -+ -+ca_cert_path = -+client_key_path = -+client_cert_path = -+server_cert_name = -+ -+# For "sqlite3" only, path relative to data_path setting -+path = grafana.db -+ -+# For "sqlite3" only. cache mode setting used for connecting to the database -+cache_mode = private -+ -+#################################### Cache server ############################# -+[remote_cache] -+# Either "redis", "memcached" or "database" default is "database" -+type = database -+ -+# cache connectionstring options -+# database: will use Grafana primary database. -+# redis: config like redis server e.g. `addr=127.0.0.1:6379,pool_size=100,db=0`. Only addr is required. -+# memcache: 127.0.0.1:11211 -+connstr = -+ -+#################################### Data proxy ########################### -+[dataproxy] -+ -+# This enables data proxy logging, default is false -+logging = false -+ -+# How long the data proxy should wait before timing out default is 30 (seconds) -+timeout = 30 -+ -+# If enabled and user is not anonymous, data proxy will add X-Grafana-User header with username into the request, default is false. -+send_user_header = false -+ -+#################################### Analytics ########################### -+[analytics] -+# Server reporting, sends usage counters to stats.grafana.org every 24 hours. -+# No ip addresses are being tracked, only simple counters to track -+# running instances, dashboard and error counts. It is very helpful to us. -+# Change this option to false to disable reporting. -+reporting_enabled = false -+ -+# Set to false to disable all checks to https://grafana.com -+# for new versions (grafana itself and plugins), check is used -+# in some UI views to notify that grafana or plugin update exists -+# This option does not cause any auto updates, nor send any information -+# only a GET request to https://grafana.com to get latest versions -+check_for_updates = false -+ -+# Google Analytics universal tracking code, only enabled if you specify an id here -+google_analytics_ua_id = -+ -+# Google Tag Manager ID, only enabled if you specify an id here -+google_tag_manager_id = -+ -+#################################### Security ############################ -+[security] -+# default admin user, created on startup -+admin_user = admin -+ -+# default admin password, can be changed before first start of grafana, or in profile settings -+admin_password = admin -+ -+# used for signing -+secret_key = SW2YcwTIb9zpOOhoPsMm -+ -+# disable gravatar profile images -+disable_gravatar = false -+ -+# data source proxy whitelist (ip_or_domain:port separated by spaces) -+data_source_proxy_whitelist = -+ -+# disable protection against brute force login attempts -+disable_brute_force_login_protection = false -+ -+# set to true if you host Grafana behind HTTPS. default is false. -+cookie_secure = false -+ -+# set cookie SameSite attribute. defaults to `lax`. can be set to "lax", "strict" and "none" -+cookie_samesite = lax -+ -+# set to true if you want to allow browsers to render Grafana in a <frame>, <iframe>, <embed> or <object>. default is false. -+allow_embedding = false -+ -+# Set to true if you want to enable http strict transport security (HSTS) response header. -+# This is only sent when HTTPS is enabled in this configuration. -+# HSTS tells browsers that the site should only be accessed using HTTPS. -+# The default will change to true in the next minor release, 6.3. -+strict_transport_security = false -+ -+# Sets how long a browser should cache HSTS. Only applied if strict_transport_security is enabled. -+strict_transport_security_max_age_seconds = 86400 -+ -+# Set to true if to enable HSTS preloading option. Only applied if strict_transport_security is enabled. -+strict_transport_security_preload = false -+ -+# Set to true if to enable the HSTS includeSubDomains option. Only applied if strict_transport_security is enabled. -+strict_transport_security_subdomains = false -+ -+# Set to true to enable the X-Content-Type-Options response header. -+# The X-Content-Type-Options response HTTP header is a marker used by the server to indicate that the MIME types advertised -+# in the Content-Type headers should not be changed and be followed. The default will change to true in the next minor release, 6.3. -+x_content_type_options = false -+ -+# Set to true to enable the X-XSS-Protection header, which tells browsers to stop pages from loading -+# when they detect reflected cross-site scripting (XSS) attacks. The default will change to true in the next minor release, 6.3. -+x_xss_protection = false -+ -+ -+#################################### Snapshots ########################### -+[snapshots] -+# snapshot sharing options -+external_enabled = false -+external_snapshot_url = https://snapshots-origin.raintank.io -+external_snapshot_name = Publish to snapshot.raintank.io -+ -+# Set to true to enable this Grafana instance act as an external snapshot server and allow unauthenticated requests for -+# creating and deleting snapshots. -+public_mode = false -+ -+# remove expired snapshot -+snapshot_remove_expired = true -+ -+#################################### Dashboards ################## -+ -+[dashboards] -+# Number dashboard versions to keep (per dashboard). Default: 20, Minimum: 1 -+versions_to_keep = 20 -+ -+#################################### Users ############################### -+[users] -+# disable user signup / registration -+allow_sign_up = false -+ -+# Allow non admin users to create organizations -+allow_org_create = false -+ -+# Set to true to automatically assign new users to the default organization (id 1) -+auto_assign_org = true -+ -+# Set this value to automatically add new users to the provided organization (if auto_assign_org above is set to true) -+auto_assign_org_id = 1 -+ -+# Default role new users will be automatically assigned (if auto_assign_org above is set to true) -+auto_assign_org_role = Viewer -+ -+# Require email validation before sign up completes -+verify_email_enabled = false -+ -+# Background text for the user field on the login page -+login_hint = email or username -+password_hint = password -+ -+# Default UI theme ("dark" or "light") -+default_theme = dark -+ -+# External user management -+external_manage_link_url = -+external_manage_link_name = -+external_manage_info = -+ -+# Viewers can edit/inspect dashboard settings in the browser. But not save the dashboard. -+viewers_can_edit = false -+ -+# Editors can administrate dashboard, folders and teams they create -+editors_can_admin = false -+ -+[auth] -+# Login cookie name -+login_cookie_name = grafana_session -+ -+# The lifetime (days) an authenticated user can be inactive before being required to login at next visit. Default is 7 days. -+login_maximum_inactive_lifetime_days = 7 -+ -+# The maximum lifetime (days) an authenticated user can be logged in since login time before being required to login. Default is 30 days. -+login_maximum_lifetime_days = 30 -+ -+# How often should auth tokens be rotated for authenticated users when being active. The default is each 10 minutes. -+token_rotation_interval_minutes = 10 -+ -+# Set to true to disable (hide) the login form, useful if you use OAuth -+disable_login_form = false -+ -+# Set to true to disable the signout link in the side menu. useful if you use auth.proxy -+disable_signout_menu = false -+ -+# URL to redirect the user to after sign out -+signout_redirect_url = -+ -+# Set to true to attempt login with OAuth automatically, skipping the login screen. -+# This setting is ignored if multiple OAuth providers are configured. -+oauth_auto_login = false -+ -+# limit of api_key seconds to live before expiration -+api_key_max_seconds_to_live = -1 -+ -+#################################### Anonymous Auth ###################### -+[auth.anonymous] -+# enable anonymous access -+enabled = false -+ -+# specify organization name that should be used for unauthenticated users -+org_name = Main Org. -+ -+# specify role for unauthenticated users -+org_role = Viewer -+ -+#################################### Github Auth ######################### -+[auth.github] -+enabled = false -+allow_sign_up = true -+client_id = some_id -+client_secret = some_secret -+scopes = user:email,read:org -+auth_url = https://github.com/login/oauth/authorize -+token_url = https://github.com/login/oauth/access_token -+api_url = https://api.github.com/user -+team_ids = -+allowed_organizations = -+ -+#################################### GitLab Auth ######################### -+[auth.gitlab] -+enabled = false -+allow_sign_up = true -+client_id = some_id -+client_secret = some_secret -+scopes = api -+auth_url = https://gitlab.com/oauth/authorize -+token_url = https://gitlab.com/oauth/token -+api_url = https://gitlab.com/api/v4 -+allowed_groups = -+ -+#################################### Google Auth ######################### -+[auth.google] -+enabled = false -+allow_sign_up = true -+client_id = some_client_id -+client_secret = some_client_secret -+scopes = https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email -+auth_url = https://accounts.google.com/o/oauth2/auth -+token_url = https://accounts.google.com/o/oauth2/token -+api_url = https://www.googleapis.com/oauth2/v1/userinfo -+allowed_domains = -+hosted_domain = -+ -+#################################### Grafana.com Auth #################### -+# legacy key names (so they work in env variables) -+[auth.grafananet] -+enabled = false -+allow_sign_up = true -+client_id = some_id -+client_secret = some_secret -+scopes = user:email -+allowed_organizations = -+ -+[auth.grafana_com] -+enabled = false -+allow_sign_up = true -+client_id = some_id -+client_secret = some_secret -+scopes = user:email -+allowed_organizations = -+ -+#################################### Generic OAuth ####################### -+[auth.generic_oauth] -+name = OAuth -+enabled = false -+allow_sign_up = true -+client_id = some_id -+client_secret = some_secret -+scopes = user:email -+email_attribute_name = email:primary -+auth_url = -+token_url = -+api_url = -+team_ids = -+allowed_organizations = -+tls_skip_verify_insecure = false -+tls_client_cert = -+tls_client_key = -+tls_client_ca = -+send_client_credentials_via_post = false -+ -+#################################### SAML Auth ########################### -+[auth.saml] # Enterprise only -+# Defaults to false. If true, the feature is enabled -+enabled = false -+ -+# Base64-encoded public X.509 certificate. Used to sign requests to the IdP -+certificate = -+ -+# Path to the public X.509 certificate. Used to sign requests to the IdP -+certificate_path = -+ -+# Base64-encoded private key. Used to decrypt assertions from the IdP -+private_key = -+ -+# Path to the private key. Used to decrypt assertions from the IdP -+private_key_path = -+ -+# Base64-encoded IdP SAML metadata XML. Used to verify and obtain binding locations from the IdP -+idp_metadata = -+ -+# Path to the SAML metadata XML. Used to verify and obtain binding locations from the IdP -+idp_metadata_path = -+ -+# URL to fetch SAML IdP metadata. Used to verify and obtain binding locations from the IdP -+idp_metadata_url = -+ -+# Duration, since the IdP issued a response and the SP is allowed to process it. Defaults to 90 seconds -+max_issue_delay = 90s -+ -+# Duration, for how long the SP's metadata should be valid. Defaults to 48 hours -+metadata_valid_duration = 48h -+ -+# Friendly name or name of the attribute within the SAML assertion to use as the user's name -+assertion_attribute_name = displayName -+ -+# Friendly name or name of the attribute within the SAML assertion to use as the user's login handle -+assertion_attribute_login = mail -+ -+# Friendly name or name of the attribute within the SAML assertion to use as the user's email -+assertion_attribute_email = mail -+ -+#################################### Basic Auth ########################## -+[auth.basic] -+enabled = true -+ -+#################################### Auth Proxy ########################## -+[auth.proxy] -+enabled = false -+header_name = X-WEBAUTH-USER -+header_property = username -+auto_sign_up = true -+ldap_sync_ttl = 60 -+whitelist = -+headers = -+ -+#################################### Auth LDAP ########################### -+[auth.ldap] -+enabled = false -+config_file = /etc/grafana/ldap.toml -+allow_sign_up = true -+ -+# LDAP backround sync (Enterprise only) -+# At 1 am every day -+sync_cron = "0 0 1 * * *" -+active_sync_enabled = false -+ -+#################################### SMTP / Emailing ##################### -+[smtp] -+enabled = false -+host = localhost:25 -+user = -+# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;""" -+password = -+cert_file = -+key_file = -+skip_verify = false -+from_address = admin@grafana.localhost -+from_name = Grafana -+ehlo_identity = -+ -+[emails] -+welcome_email_on_sign_up = false -+templates_pattern = emails/*.html -+ -+#################################### Logging ########################## -+[log] -+# Either "console", "file", "syslog". Default is console and file -+# Use space to separate multiple modes, e.g. "console file" -+mode = console file -+ -+# Either "debug", "info", "warn", "error", "critical", default is "info" -+level = info -+ -+# optional settings to set different levels for specific loggers. Ex filters = sqlstore:debug -+filters = -+ -+# For "console" mode only -+[log.console] -+level = -+ -+# log line format, valid options are text, console and json -+format = console -+ -+# For "file" mode only -+[log.file] -+level = -+ -+# log line format, valid options are text, console and json -+format = text -+ -+# This enables automated log rotate(switch of following options), default is true -+log_rotate = true -+ -+# Max line number of single file, default is 1000000 -+max_lines = 1000000 -+ -+# Max size shift of single file, default is 28 means 1 << 28, 256MB -+max_size_shift = 28 -+ -+# Segment log daily, default is true -+daily_rotate = true -+ -+# Expired days of log file(delete after max days), default is 7 -+max_days = 7 -+ -+[log.syslog] -+level = -+ -+# log line format, valid options are text, console and json -+format = text -+ -+# Syslog network type and address. This can be udp, tcp, or unix. If left blank, the default unix endpoints will be used. -+network = -+address = -+ -+# Syslog facility. user, daemon and local0 through local7 are valid. -+facility = -+ -+# Syslog tag. By default, the process' argv[0] is used. -+tag = -+ -+#################################### Usage Quotas ######################## -+[quota] -+enabled = false -+ -+#### set quotas to -1 to make unlimited. #### -+# limit number of users per Org. -+org_user = 10 -+ -+# limit number of dashboards per Org. -+org_dashboard = 100 -+ -+# limit number of data_sources per Org. -+org_data_source = 10 -+ -+# limit number of api_keys per Org. -+org_api_key = 10 -+ -+# limit number of orgs a user can create. -+user_org = 10 -+ -+# Global limit of users. -+global_user = -1 -+ -+# global limit of orgs. -+global_org = -1 -+ -+# global limit of dashboards -+global_dashboard = -1 -+ -+# global limit of api_keys -+global_api_key = -1 -+ -+# global limit on number of logged in users. -+global_session = -1 -+ -+#################################### Alerting ############################ -+[alerting] -+# Disable alerting engine & UI features -+enabled = true -+# Makes it possible to turn off alert rule execution but alerting UI is visible -+execute_alerts = true -+ -+# Default setting for new alert rules. Defaults to categorize error and timeouts as alerting. (alerting, keep_state) -+error_or_timeout = alerting -+ -+# Default setting for how Grafana handles nodata or null values in alerting. (alerting, no_data, keep_state, ok) -+nodata_or_nullvalues = no_data -+ -+# Alert notifications can include images, but rendering many images at the same time can overload the server -+# This limit will protect the server from render overloading and make sure notifications are sent out quickly -+concurrent_render_limit = 5 -+ -+# Default setting for alert calculation timeout. Default value is 30 -+evaluation_timeout_seconds = 30 -+ -+# Default setting for alert notification timeout. Default value is 30 -+notification_timeout_seconds = 30 -+ -+# Default setting for max attempts to sending alert notifications. Default value is 3 -+max_attempts = 3 -+ -+ -+#################################### Explore ############################# -+[explore] -+# Enable the Explore section -+enabled = true -+ -+#################################### Internal Grafana Metrics ############ -+# Metrics available at HTTP API Url /metrics -+[metrics] -+enabled = true -+interval_seconds = 10 -+# Disable total stats (stat_totals_*) metrics to be generated -+disable_total_stats = false -+ -+#If both are set, basic auth will be required for the metrics endpoint. -+basic_auth_username = -+basic_auth_password = -+ -+# Send internal Grafana metrics to graphite -+[metrics.graphite] -+# Enable by setting the address setting (ex localhost:2003) -+address = -+prefix = prod.grafana.%(instance_name)s. -+ -+[grafana_net] -+url = https://grafana.org -+ -+[grafana_com] -+url = https://grafana.com -+ -+#################################### Distributed tracing ############ -+[tracing.jaeger] -+# jaeger destination (ex localhost:6831) -+address = -+# tag that will always be included in when creating new spans. ex (tag1:value1,tag2:value2) -+always_included_tag = -+# Type specifies the type of the sampler: const, probabilistic, rateLimiting, or remote -+sampler_type = const -+# jaeger samplerconfig param -+# for "const" sampler, 0 or 1 for always false/true respectively -+# for "probabilistic" sampler, a probability between 0 and 1 -+# for "rateLimiting" sampler, the number of spans per second -+# for "remote" sampler, param is the same as for "probabilistic" -+# and indicates the initial sampling rate before the actual one -+# is received from the mothership -+sampler_param = 1 -+# Whether or not to use Zipkin span propagation (x-b3- HTTP headers). -+zipkin_propagation = false -+# Setting this to true disables shared RPC spans. -+# Not disabling is the most common setting when using Zipkin elsewhere in your infrastructure. -+disable_shared_zipkin_spans = false -+ -+#################################### External Image Storage ############## -+[external_image_storage] -+# You can choose between (s3, webdav, gcs, azure_blob, local) -+provider = -+ -+[external_image_storage.s3] -+bucket_url = -+bucket = -+region = -+path = -+access_key = -+secret_key = -+ -+[external_image_storage.webdav] -+url = -+username = -+password = -+public_url = -+ -+[external_image_storage.gcs] -+key_file = -+bucket = -+path = -+ -+[external_image_storage.azure_blob] -+account_name = -+account_key = -+container_name = -+ -+[external_image_storage.local] -+# does not require any configuration -+ -+[rendering] -+# Options to configure external image rendering server like https://github.com/grafana/grafana-image-renderer -+server_url = -+callback_url = -+ -+[panels] -+# here for to support old env variables, can remove after a few months -+enable_alpha = false -+disable_sanitize_html = false -+ -+[plugins] -+enable_alpha = false -+app_tls_skip_verify_insecure = false -+ -+[enterprise] -+license_path = -diff --git a/docs/man/man1/grafana-cli.1 b/docs/man/man1/grafana-cli.1 -new file mode 100644 -index 0000000000..171748fcda ---- /dev/null -+++ b/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/ . -diff --git a/docs/man/man1/grafana-server.1 b/docs/man/man1/grafana-server.1 -new file mode 100644 -index 0000000000..30b7c1306f ---- /dev/null -+++ b/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/ . -diff --git a/packaging/rpm/spec/README b/packaging/rpm/spec/README -new file mode 100644 -index 0000000000..f97c2a26be ---- /dev/null -+++ b/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. -+ -diff --git a/packaging/rpm/spec/grafana.spec b/packaging/rpm/spec/grafana.spec -new file mode 100644 -index 0000000000..fb9200cb62 ---- /dev/null -+++ b/packaging/rpm/spec/grafana.spec -@@ -0,0 +1,766 @@ -+%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 -+ -+%if 0%{?fedora} >= 30 -+# Use vendor sources until both Fedora and Grafana properly support golang modules -+%global unbundle_vendor_sources 0 -+%endif -+ -+ -+Name: grafana -+Version: 6.3.6 -+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-xerrors.patch -+Patch5: 005-mute-shellcheck-grafana-cli.patch -+ -+# Intersection of go_arches and nodejs_arches -+ExclusiveArch: %{grafana_arches} -+ -+# omit golang debugsource, see BZ995136 and related -+%global dwz_low_mem_die_limit 0 -+%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} -+Recommends: grafana-pcp -+ -+%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) -+%if 0%{fedora} >= 31 -+BuildRequires: golang(gopkg.in/yaml.v2) -+%else -+BuildRequires: golang(github.com/go-yaml/yaml) -+%endif -+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 -+%patch5 -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. -+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 -+cd %{_builddir}/src/github.com/grafana/grafana -+%global archbindir bin/`go env GOOS`-`go env GOARCH` -+echo _builddir=%{_builddir} archbindir=%{archbindir} -+[ ! -d %{archbindir} ] && mkdir -p %{archbindir} -+export GOPATH=%{_builddir}:%{gopath} -+# export GO111MODULE=off -+%if 0%{?fedora} >= 31 -+# native fedora golang build but without modules (no grafana support yet) -+go build -mod=vendor -o %{archbindir}/grafana-cli ./pkg/cmd/grafana-cli -+go build -mod=vendor -o %{archbindir}/grafana-server ./pkg/cmd/grafana-server -+%else -+# use the grafana build.go script. -+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 %{archbindir}/%{name}-server %{buildroot}%{_sbindir} -+install -p -m 755 %{archbindir}/%{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 -+export GO111MODULE=off -+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 -+* Wed Nov 20 2019 Mark Goodwin <mgoodwin@redhat.com> 6.3.6-1 -+- add weak depenency on grafana-pcp -+- add patch to mute shellcheck SC1090 for grafana-cli -+- update to 6.3.6 upstream community sources, see CHANGELOG -+ -+* Thu Sep 05 2019 Mark Goodwin <mgoodwin@redhat.com> 6.3.5-1 -+- drop uaparser patch now it's upstream -+- add xerrors patch, see https://github.com/golang/go/issues/32246 -+- use vendor sources on rawhide until modules are fully supported -+- update to latest upstream community sources, see CHANGELOG -+ -+* Fri Aug 30 2019 Mark Goodwin <mgoodwin@redhat.com> 6.3.4-1 -+- include fix for CVE-2019-15043 -+- add patch for uaparser on 32bit systems -+- update to latest upstream community sources, see CHANGELOG -+ -+* Wed Jul 31 2019 Mark Goodwin <mgoodwin@redhat.com> 6.2.5-1 -+- update to latest upstream community sources, see CHANGELOG -+ -+* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 6.2.2-2 -+- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild -+ -+* Fri Jun 07 2019 Mark Goodwin <mgoodwin@redhat.com> 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 <mgoodwin@redhat.com> 6.2.1-1 -+- update to latest upstream community sources, see CHANGELOG -+ -+* Fri May 24 2019 Mark Goodwin <mgoodwin@redhat.com> 6.2.0-1 -+- update to latest upstream community sources -+- drop a couple of patches -+ -+* Wed May 08 2019 Mark Goodwin <mgoodwin@redhat.com> 6.1.6-2 -+- add conditional unbundle_vendor_sources macro -+ -+* Tue Apr 30 2019 Mark Goodwin <mgoodwin@redhat.com> 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 <mgoodwin@redhat.com> 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 <mgoodwin@redhat.com> 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 <mgoodwin@redhat.com> 6.1.0-1 -+- update to latest upstream stable release 6.1.0, see CHANGELOG -+ -+* Thu Mar 21 2019 Mark Goodwin <mgoodwin@redhat.com> 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 <mgoodwin@redhat.com> 6.0.1-3 -+- bump to latest upstream stable release 6.0.1-1 -+ -+* Thu Mar 14 2019 Mark Goodwin <mgoodwin@redhat.com> 6.0.1-2 -+- unbundle and add BuildRequires for golang-github-rainycape-unidecode-devel -+ -+* Thu Mar 07 2019 Mark Goodwin <mgoodwin@redhat.com> 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 <mgoodwin@redhat.com> 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 <mgoodwin@redhat.com> 5.4.3-10 -+- tweak spec for available and unavailable (bundled) golang packages -+ -+* Wed Feb 20 2019 Xavier Bachelot <xavier@bachelot.org> 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 <mgoodwin@redhat.com> 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 <mgoodwin@redhat.com> 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 <mgoodwin@redhat.com> 5.4.3-6 -+- further refinement following review by Xavier Bachelot -+ -+* Tue Feb 05 2019 Mark Goodwin <mgoodwin@redhat.com> 5.4.3-5 -+- further refinement following review by Xavier Bachelot -+ -+* Fri Feb 01 2019 Mark Goodwin <mgoodwin@redhat.com> 5.4.3-4 -+- further spec updates after packaging review -+- reworked post-install scriplets -+ -+* Thu Jan 31 2019 Mark Goodwin <mgoodwin@redhat.com> 5.4.3-3 -+- tweak FHS patch, update spec after packaging review -+ -+* Wed Jan 30 2019 Mark Goodwin <mgoodwin@redhat.com> 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 <mgoodwin@redhat.com> 5.4.2-1 -+- update to v5.4.2 upstream community sources -+ -+* Thu Oct 18 2018 Mark Goodwin <mgoodwin@redhat.com> 5.3.1-1 -+- update to v5.3.1 upstream community sources -+ -+* Tue Oct 02 2018 Mark Goodwin <mgoodwin@redhat.com> 5.2.5-1 -+- native RPM spec build with current tagged v5.2.5 sources -diff --git a/packaging/rpm/spec/make_grafana_webpack.sh b/packaging/rpm/spec/make_grafana_webpack.sh -new file mode 100755 -index 0000000000..47a8025ff4 ---- /dev/null -+++ b/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/SOURCES/004-wrappers-grafana-cli.patch b/SOURCES/004-wrappers-grafana-cli.patch new file mode 100644 index 0000000..79bb3b5 --- /dev/null +++ b/SOURCES/004-wrappers-grafana-cli.patch @@ -0,0 +1,26 @@ +diff --git a/packaging/wrappers/grafana-cli b/packaging/wrappers/grafana-cli +index 9cad151c0d..6b7ec1ab42 100755 +--- a/packaging/wrappers/grafana-cli ++++ b/packaging/wrappers/grafana-cli +@@ -12,11 +12,12 @@ CONF_DIR=/etc/grafana + DATA_DIR=/var/lib/grafana + PLUGINS_DIR=/var/lib/grafana/plugins + LOG_DIR=/var/log/grafana ++LIBEXEC_DIR=/usr/libexec/grafana + + CONF_FILE=$CONF_DIR/grafana.ini + PROVISIONING_CFG_DIR=$CONF_DIR/provisioning + +-EXECUTABLE=$GRAFANA_HOME/bin/grafana-cli ++EXECUTABLE=$LIBEXEC_DIR/grafana-cli + + if [ ! -x $EXECUTABLE ]; then + echo "Program not installed or not executable" +@@ -24,6 +25,7 @@ if [ ! -x $EXECUTABLE ]; then + fi + + # overwrite settings from default file ++#shellcheck disable=SC1090 + if [ -f "$DEFAULT" ]; then + . "$DEFAULT" + fi diff --git a/SOURCES/004-xerrors.patch b/SOURCES/004-xerrors.patch deleted file mode 100644 index fc0612a..0000000 --- a/SOURCES/004-xerrors.patch +++ /dev/null @@ -1,146 +0,0 @@ -diff --git a/go.mod b/go.mod -index 13f7c66bb..e0615affa 100644 ---- a/go.mod -+++ b/go.mod -@@ -77,7 +77,6 @@ require ( - golang.org/x/oauth2 v0.0.0-20190319182350-c85d3e98c914 - golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6 - golang.org/x/sys v0.0.0-20190415081028-16da32be82c5 // indirect -- golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373 - gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect - gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d // indirect - gopkg.in/bufio.v1 v1.0.0-20140618132640-567b2bfa514e // indirect -diff --git a/vendor/golang.org/x/xerrors/adaptor_go1_12.go b/vendor/golang.org/x/xerrors/adaptor.go -similarity index 99% -rename from vendor/golang.org/x/xerrors/adaptor_go1_12.go -rename to vendor/golang.org/x/xerrors/adaptor.go -index 6b9f2f0c7..4317f2483 100644 ---- a/vendor/golang.org/x/xerrors/adaptor_go1_12.go -+++ b/vendor/golang.org/x/xerrors/adaptor.go -@@ -2,8 +2,6 @@ - // Use of this source code is governed by a BSD-style - // license that can be found in the LICENSE file. - --// +build !go1.13 -- - package xerrors - - import ( -diff --git a/vendor/golang.org/x/xerrors/adaptor_go1_13.go b/vendor/golang.org/x/xerrors/adaptor_go1_13.go -deleted file mode 100644 -index 57f519dc5..000000000 ---- a/vendor/golang.org/x/xerrors/adaptor_go1_13.go -+++ /dev/null -@@ -1,55 +0,0 @@ --// Copyright 2018 The Go Authors. All rights reserved. --// Use of this source code is governed by a BSD-style --// license that can be found in the LICENSE file. -- --// +build go1.13 -- --package xerrors -- --import ( -- "errors" -- "fmt" -- "strconv" --) -- --// A Frame contains part of a call stack. --type Frame = errors.Frame -- --// Caller returns a Frame that describes a frame on the caller's stack. --// The argument skip is the number of frames to skip over. --// Caller(0) returns the frame for the caller of Caller. --var Caller func(skip int) Frame = errors.Caller -- --// FormatError calls the FormatError method of f with an errors.Printer --// configured according to s and verb, and writes the result to s. --func FormatError(f Formatter, s fmt.State, verb rune) { -- // Assuming this function is only called from the Format method, and given -- // that FormatError takes precedence over Format, it cannot be called from -- // any package that supports errors.Formatter. It is therefore safe to -- // disregard that State may be a specific printer implementation and use one -- // of our choice instead. -- -- width, okW := s.Width() -- prec, okP := s.Precision() -- -- // Construct format string from State s. -- format := []byte{'%'} -- if s.Flag('-') { -- format = append(format, '-') -- } -- if s.Flag('+') { -- format = append(format, '+') -- } -- if s.Flag(' ') { -- format = append(format, ' ') -- } -- if okW { -- format = strconv.AppendInt(format, int64(width), 10) -- } -- if okP { -- format = append(format, '.') -- format = strconv.AppendInt(format, int64(prec), 10) -- } -- format = append(format, string(verb)...) -- fmt.Fprintf(s, string(format), f) --} -diff --git a/vendor/golang.org/x/xerrors/format_go1_12.go b/vendor/golang.org/x/xerrors/format.go -similarity index 98% -rename from vendor/golang.org/x/xerrors/format_go1_12.go -rename to vendor/golang.org/x/xerrors/format.go -index ba856feab..1bc9c26b9 100644 ---- a/vendor/golang.org/x/xerrors/format_go1_12.go -+++ b/vendor/golang.org/x/xerrors/format.go -@@ -2,8 +2,6 @@ - // Use of this source code is governed by a BSD-style - // license that can be found in the LICENSE file. - --// +build !go1.13 -- - package xerrors - - // A Formatter formats error messages. -diff --git a/vendor/golang.org/x/xerrors/format_go1_13.go b/vendor/golang.org/x/xerrors/format_go1_13.go -deleted file mode 100644 -index 95c65968b..000000000 ---- a/vendor/golang.org/x/xerrors/format_go1_13.go -+++ /dev/null -@@ -1,19 +0,0 @@ --// Copyright 2018 The Go Authors. All rights reserved. --// Use of this source code is governed by a BSD-style --// license that can be found in the LICENSE file. -- --// +build go1.13 -- --package xerrors -- --import "errors" -- --// A Formatter formats error messages. --type Formatter = errors.Formatter -- --// A Printer formats error messages. --// --// The most common implementation of Printer is the one provided by package fmt --// during Printf (as of Go 1.13). Localization packages such as golang.org/x/text/message --// typically provide their own implementations. --type Printer = errors.Printer -diff --git a/vendor/golang.org/x/xerrors/frame_go1_12.go b/vendor/golang.org/x/xerrors/frame.go -similarity index 98% -rename from vendor/golang.org/x/xerrors/frame_go1_12.go -rename to vendor/golang.org/x/xerrors/frame.go -index 6740f7fa6..0de628ec5 100644 ---- a/vendor/golang.org/x/xerrors/frame_go1_12.go -+++ b/vendor/golang.org/x/xerrors/frame.go -@@ -2,8 +2,6 @@ - // Use of this source code is governed by a BSD-style - // license that can be found in the LICENSE file. - --// +build !go1.13 -- - package xerrors - - import ( diff --git a/SOURCES/005-mute-shellcheck-grafana-cli.patch b/SOURCES/005-mute-shellcheck-grafana-cli.patch deleted file mode 100644 index 5a92c64..0000000 --- a/SOURCES/005-mute-shellcheck-grafana-cli.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/packaging/wrappers/grafana-cli b/packaging/wrappers/grafana-cli -index 9cad151c0d..4c963d90ac 100755 ---- a/packaging/wrappers/grafana-cli -+++ b/packaging/wrappers/grafana-cli -@@ -24,6 +24,7 @@ if [ ! -x $EXECUTABLE ]; then - fi - - # overwrite settings from default file -+#shellcheck disable=SC1090 - if [ -f "$DEFAULT" ]; then - . "$DEFAULT" - fi diff --git a/SOURCES/005-pkg-main-fix-import-paths.patch b/SOURCES/005-pkg-main-fix-import-paths.patch new file mode 100644 index 0000000..4021e3f --- /dev/null +++ b/SOURCES/005-pkg-main-fix-import-paths.patch @@ -0,0 +1,17 @@ +diff --git a/pkg/extensions/main.go b/pkg/extensions/main.go +index a88f67ff9e..7844aa1227 100644 +--- a/pkg/extensions/main.go ++++ b/pkg/extensions/main.go +@@ -9,10 +9,10 @@ import ( + "github.com/grafana/grafana/pkg/registry" + "github.com/grafana/grafana/pkg/services/licensing" + _ "github.com/jung-kurt/gofpdf" +- _ "github.com/linkedin/goavro/v2" ++ _ "github.com/linkedin/goavro" + _ "github.com/pkg/errors" + _ "github.com/robfig/cron" +- _ "github.com/robfig/cron/v3" ++ _ "gopkg.in/robfig/cron.v3" + _ "github.com/stretchr/testify/require" + _ "gopkg.in/square/go-jose.v2" + ) diff --git a/SOURCES/006-pkg-setting-ini-default-section.patch b/SOURCES/006-pkg-setting-ini-default-section.patch new file mode 100644 index 0000000..263c614 --- /dev/null +++ b/SOURCES/006-pkg-setting-ini-default-section.patch @@ -0,0 +1,13 @@ +diff --git a/pkg/setting/setting.go b/pkg/setting/setting.go +index 19181be84e..9a745f67e4 100644 +--- a/pkg/setting/setting.go ++++ b/pkg/setting/setting.go +@@ -387,7 +387,7 @@ func applyCommandLineDefaultProperties(props map[string]string, file *ini.File) + func applyCommandLineProperties(props map[string]string, file *ini.File) { + for _, section := range file.Sections() { + sectionName := section.Name() + "." +- if section.Name() == ini.DefaultSection { ++ if section.Name() == ini.DEFAULT_SECTION { + sectionName = "" + } + for _, key := range section.Keys() { diff --git a/SOURCES/007-pkg-prometheus-client-query-range.patch b/SOURCES/007-pkg-prometheus-client-query-range.patch new file mode 100644 index 0000000..5af4b40 --- /dev/null +++ b/SOURCES/007-pkg-prometheus-client-query-range.patch @@ -0,0 +1,18 @@ +diff --git a/pkg/tsdb/prometheus/prometheus.go b/pkg/tsdb/prometheus/prometheus.go +index 1244031bb4..c1d85b7e53 100644 +--- a/pkg/tsdb/prometheus/prometheus.go ++++ b/pkg/tsdb/prometheus/prometheus.go +@@ -112,10 +112,10 @@ func (e *PrometheusExecutor) Query(ctx context.Context, dsInfo *models.DataSourc + span.SetTag("stop_unixnano", query.End.UnixNano()) + defer span.Finish() + +- value, _, err := client.QueryRange(ctx, query.Expr, timeRange) ++ value, queryErr := client.QueryRange(ctx, query.Expr, timeRange) + +- if err != nil { +- return nil, err ++ if queryErr != nil { ++ return nil, queryErr + } + + queryResult, err := parseResponse(value, query) diff --git a/SOURCES/008-pkg-services-notifications-codes-Unknwon.patch b/SOURCES/008-pkg-services-notifications-codes-Unknwon.patch new file mode 100644 index 0000000..8263705 --- /dev/null +++ b/SOURCES/008-pkg-services-notifications-codes-Unknwon.patch @@ -0,0 +1,13 @@ +diff --git a/pkg/services/notifications/codes.go b/pkg/services/notifications/codes.go +index ae66aa1d1b..bfb95560fe 100644 +--- a/pkg/services/notifications/codes.go ++++ b/pkg/services/notifications/codes.go +@@ -6,7 +6,7 @@ import ( + "fmt" + "time" + +- "github.com/unknwon/com" ++ "github.com/Unknwon/com" + + "github.com/grafana/grafana/pkg/models" + "github.com/grafana/grafana/pkg/setting" diff --git a/SOURCES/009-pkg-fix-xorm-import.patch b/SOURCES/009-pkg-fix-xorm-import.patch new file mode 100644 index 0000000..c8a1c0a --- /dev/null +++ b/SOURCES/009-pkg-fix-xorm-import.patch @@ -0,0 +1,288 @@ +diff --git a/pkg/services/sqlstore/datasource.go b/pkg/services/sqlstore/datasource.go +index c84f6bb948..414e343a63 100644 +--- a/pkg/services/sqlstore/datasource.go ++++ b/pkg/services/sqlstore/datasource.go +@@ -5,7 +5,7 @@ import ( + "github.com/grafana/grafana/pkg/components/simplejson" + "github.com/grafana/grafana/pkg/models" + +- "github.com/go-xorm/xorm" ++ "xorm.io/xorm" + + "github.com/grafana/grafana/pkg/bus" + "github.com/grafana/grafana/pkg/components/securejsondata" +diff --git a/pkg/services/sqlstore/logger.go b/pkg/services/sqlstore/logger.go +index 498c2b58c1..850e10cd21 100644 +--- a/pkg/services/sqlstore/logger.go ++++ b/pkg/services/sqlstore/logger.go +@@ -5,7 +5,7 @@ import ( + + glog "github.com/grafana/grafana/pkg/infra/log" + +- "github.com/go-xorm/core" ++ "xorm.io/core" + ) + + type XormLogger struct { +diff --git a/pkg/services/sqlstore/migrations/annotation_mig.go b/pkg/services/sqlstore/migrations/annotation_mig.go +index 3ec5df841e..505ab5cf6e 100644 +--- a/pkg/services/sqlstore/migrations/annotation_mig.go ++++ b/pkg/services/sqlstore/migrations/annotation_mig.go +@@ -1,7 +1,7 @@ + package migrations + + import ( +- "github.com/go-xorm/xorm" ++ "xorm.io/xorm" + . "github.com/grafana/grafana/pkg/services/sqlstore/migrator" + ) + +diff --git a/pkg/services/sqlstore/migrations/migrations_test.go b/pkg/services/sqlstore/migrations/migrations_test.go +index 62ecbaad11..a9a3b38e62 100644 +--- a/pkg/services/sqlstore/migrations/migrations_test.go ++++ b/pkg/services/sqlstore/migrations/migrations_test.go +@@ -3,7 +3,7 @@ package migrations + import ( + "testing" + +- "github.com/go-xorm/xorm" ++ "xorm.io/xorm" + . "github.com/grafana/grafana/pkg/services/sqlstore/migrator" + "github.com/grafana/grafana/pkg/services/sqlstore/sqlutil" + +diff --git a/pkg/services/sqlstore/migrations/user_mig.go b/pkg/services/sqlstore/migrations/user_mig.go +index 53110fe49b..e1a54a57bf 100644 +--- a/pkg/services/sqlstore/migrations/user_mig.go ++++ b/pkg/services/sqlstore/migrations/user_mig.go +@@ -3,7 +3,7 @@ package migrations + import ( + "fmt" + +- "github.com/go-xorm/xorm" ++ "xorm.io/xorm" + . "github.com/grafana/grafana/pkg/services/sqlstore/migrator" + "github.com/grafana/grafana/pkg/util" + ) +diff --git a/pkg/services/sqlstore/migrator/column.go b/pkg/services/sqlstore/migrator/column.go +index 28cef60a94..af093a8e59 100644 +--- a/pkg/services/sqlstore/migrator/column.go ++++ b/pkg/services/sqlstore/migrator/column.go +@@ -1,7 +1,7 @@ + package migrator + + // Notice +-// code based on parts from from https://github.com/go-xorm/core/blob/3e0fa232ab5c90996406c0cd7ae86ad0e5ecf85f/column.go ++// code based on parts from from https://xorm.io/core/blob/3e0fa232ab5c90996406c0cd7ae86ad0e5ecf85f/column.go + + type Column struct { + Name string +diff --git a/pkg/services/sqlstore/migrator/dialect.go b/pkg/services/sqlstore/migrator/dialect.go +index 0aa2be7301..5246f17971 100644 +--- a/pkg/services/sqlstore/migrator/dialect.go ++++ b/pkg/services/sqlstore/migrator/dialect.go +@@ -4,7 +4,7 @@ import ( + "fmt" + "strings" + +- "github.com/go-xorm/xorm" ++ "xorm.io/xorm" + ) + + type Dialect interface { +diff --git a/pkg/services/sqlstore/migrator/migrator.go b/pkg/services/sqlstore/migrator/migrator.go +index 612a333a72..f314b6ea84 100644 +--- a/pkg/services/sqlstore/migrator/migrator.go ++++ b/pkg/services/sqlstore/migrator/migrator.go +@@ -4,7 +4,7 @@ import ( + "time" + + _ "github.com/go-sql-driver/mysql" +- "github.com/go-xorm/xorm" ++ "xorm.io/xorm" + "github.com/grafana/grafana/pkg/infra/log" + "github.com/grafana/grafana/pkg/util/errutil" + _ "github.com/lib/pq" +diff --git a/pkg/services/sqlstore/migrator/mysql_dialect.go b/pkg/services/sqlstore/migrator/mysql_dialect.go +index 147df03357..a658819ea2 100644 +--- a/pkg/services/sqlstore/migrator/mysql_dialect.go ++++ b/pkg/services/sqlstore/migrator/mysql_dialect.go +@@ -7,7 +7,7 @@ import ( + + "github.com/VividCortex/mysqlerr" + "github.com/go-sql-driver/mysql" +- "github.com/go-xorm/xorm" ++ "xorm.io/xorm" + ) + + type Mysql struct { +diff --git a/pkg/services/sqlstore/migrator/postgres_dialect.go b/pkg/services/sqlstore/migrator/postgres_dialect.go +index 70803f3a9e..5ae7c57ea5 100644 +--- a/pkg/services/sqlstore/migrator/postgres_dialect.go ++++ b/pkg/services/sqlstore/migrator/postgres_dialect.go +@@ -5,7 +5,7 @@ import ( + "strconv" + "strings" + +- "github.com/go-xorm/xorm" ++ "xorm.io/xorm" + "github.com/grafana/grafana/pkg/util/errutil" + "github.com/lib/pq" + ) +diff --git a/pkg/services/sqlstore/migrator/sqlite_dialect.go b/pkg/services/sqlstore/migrator/sqlite_dialect.go +index 8372898c35..a306badd82 100644 +--- a/pkg/services/sqlstore/migrator/sqlite_dialect.go ++++ b/pkg/services/sqlstore/migrator/sqlite_dialect.go +@@ -3,7 +3,7 @@ package migrator + import ( + "fmt" + +- "github.com/go-xorm/xorm" ++ "xorm.io/xorm" + "github.com/mattn/go-sqlite3" + ) + +diff --git a/pkg/services/sqlstore/migrator/types.go b/pkg/services/sqlstore/migrator/types.go +index 48354998d8..957bef392d 100644 +--- a/pkg/services/sqlstore/migrator/types.go ++++ b/pkg/services/sqlstore/migrator/types.go +@@ -4,7 +4,7 @@ import ( + "fmt" + "strings" + +- "github.com/go-xorm/xorm" ++ "xorm.io/xorm" + ) + + const ( +diff --git a/pkg/services/sqlstore/session.go b/pkg/services/sqlstore/session.go +index 07f1d4524c..e44105c79c 100644 +--- a/pkg/services/sqlstore/session.go ++++ b/pkg/services/sqlstore/session.go +@@ -4,7 +4,7 @@ import ( + "context" + "reflect" + +- "github.com/go-xorm/xorm" ++ "xorm.io/xorm" + ) + + type DBSession struct { +diff --git a/pkg/services/sqlstore/sqlstore.go b/pkg/services/sqlstore/sqlstore.go +index bede60f1ff..7076b76dd6 100644 +--- a/pkg/services/sqlstore/sqlstore.go ++++ b/pkg/services/sqlstore/sqlstore.go +@@ -11,7 +11,7 @@ import ( + "time" + + "github.com/go-sql-driver/mysql" +- "github.com/go-xorm/xorm" ++ "xorm.io/xorm" + "github.com/grafana/grafana/pkg/bus" + "github.com/grafana/grafana/pkg/infra/localcache" + "github.com/grafana/grafana/pkg/infra/log" +diff --git a/pkg/services/sqlstore/transactions.go b/pkg/services/sqlstore/transactions.go +index 27928f52a4..6d9888af39 100644 +--- a/pkg/services/sqlstore/transactions.go ++++ b/pkg/services/sqlstore/transactions.go +@@ -4,7 +4,7 @@ import ( + "context" + "time" + +- "github.com/go-xorm/xorm" ++ "xorm.io/xorm" + "github.com/grafana/grafana/pkg/bus" + "github.com/grafana/grafana/pkg/infra/log" + "github.com/grafana/grafana/pkg/util/errutil" +diff --git a/pkg/tsdb/mssql/mssql.go b/pkg/tsdb/mssql/mssql.go +index 1ca3778b9d..debe106fa7 100644 +--- a/pkg/tsdb/mssql/mssql.go ++++ b/pkg/tsdb/mssql/mssql.go +@@ -8,7 +8,7 @@ import ( + "github.com/grafana/grafana/pkg/setting" + + _ "github.com/denisenkom/go-mssqldb" +- "github.com/go-xorm/core" ++ "xorm.io/core" + "github.com/grafana/grafana/pkg/infra/log" + "github.com/grafana/grafana/pkg/models" + "github.com/grafana/grafana/pkg/tsdb" +diff --git a/pkg/tsdb/mssql/mssql_test.go b/pkg/tsdb/mssql/mssql_test.go +index 760c6dcf07..84e5e0e219 100644 +--- a/pkg/tsdb/mssql/mssql_test.go ++++ b/pkg/tsdb/mssql/mssql_test.go +@@ -8,7 +8,7 @@ import ( + "testing" + "time" + +- "github.com/go-xorm/xorm" ++ "xorm.io/xorm" + "github.com/grafana/grafana/pkg/components/securejsondata" + "github.com/grafana/grafana/pkg/components/simplejson" + "github.com/grafana/grafana/pkg/models" +diff --git a/pkg/tsdb/mysql/mysql.go b/pkg/tsdb/mysql/mysql.go +index 682c3bc456..5ae7a9a87d 100644 +--- a/pkg/tsdb/mysql/mysql.go ++++ b/pkg/tsdb/mysql/mysql.go +@@ -13,7 +13,7 @@ import ( + "github.com/grafana/grafana/pkg/setting" + + "github.com/go-sql-driver/mysql" +- "github.com/go-xorm/core" ++ "xorm.io/core" + "github.com/grafana/grafana/pkg/infra/log" + "github.com/grafana/grafana/pkg/models" + "github.com/grafana/grafana/pkg/tsdb" +diff --git a/pkg/tsdb/mysql/mysql_test.go b/pkg/tsdb/mysql/mysql_test.go +index b2ff2bc969..609f923d2c 100644 +--- a/pkg/tsdb/mysql/mysql_test.go ++++ b/pkg/tsdb/mysql/mysql_test.go +@@ -8,7 +8,7 @@ import ( + "testing" + "time" + +- "github.com/go-xorm/xorm" ++ "xorm.io/xorm" + "github.com/grafana/grafana/pkg/components/securejsondata" + "github.com/grafana/grafana/pkg/components/simplejson" + "github.com/grafana/grafana/pkg/models" +diff --git a/pkg/tsdb/postgres/postgres.go b/pkg/tsdb/postgres/postgres.go +index a417699c1d..f38b94913b 100644 +--- a/pkg/tsdb/postgres/postgres.go ++++ b/pkg/tsdb/postgres/postgres.go +@@ -7,7 +7,7 @@ import ( + + "github.com/grafana/grafana/pkg/setting" + +- "github.com/go-xorm/core" ++ "xorm.io/core" + "github.com/grafana/grafana/pkg/infra/log" + "github.com/grafana/grafana/pkg/models" + "github.com/grafana/grafana/pkg/tsdb" +diff --git a/pkg/tsdb/postgres/postgres_test.go b/pkg/tsdb/postgres/postgres_test.go +index 23d0830d3d..d839d42ddb 100644 +--- a/pkg/tsdb/postgres/postgres_test.go ++++ b/pkg/tsdb/postgres/postgres_test.go +@@ -8,7 +8,7 @@ import ( + "testing" + "time" + +- "github.com/go-xorm/xorm" ++ "xorm.io/xorm" + "github.com/grafana/grafana/pkg/components/securejsondata" + "github.com/grafana/grafana/pkg/components/simplejson" + "github.com/grafana/grafana/pkg/models" +diff --git a/pkg/tsdb/sqleng/sql_engine.go b/pkg/tsdb/sqleng/sql_engine.go +index 0cfb1560e4..13bc84bd06 100644 +--- a/pkg/tsdb/sqleng/sql_engine.go ++++ b/pkg/tsdb/sqleng/sql_engine.go +@@ -19,8 +19,8 @@ import ( + + "github.com/grafana/grafana/pkg/components/null" + +- "github.com/go-xorm/core" +- "github.com/go-xorm/xorm" ++ "xorm.io/core" ++ "xorm.io/xorm" + "github.com/grafana/grafana/pkg/components/simplejson" + "github.com/grafana/grafana/pkg/models" + ) diff --git a/SOURCES/distro-defaults.ini b/SOURCES/distro-defaults.ini new file mode 100644 index 0000000..b982480 --- /dev/null +++ b/SOURCES/distro-defaults.ini @@ -0,0 +1,724 @@ +##################### Grafana Configuration Defaults for distros ##################### +# +# Do not modify this file in grafana installs +# + +# possible values : production, development +app_mode = production + +# instance name, defaults to HOSTNAME environment variable value or hostname if HOSTNAME var is empty +instance_name = ${HOSTNAME} + +#################################### Paths ############################### +[paths] +# Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used) +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 = /var/log/grafana + +# Directory where grafana will automatically scan and look for plugins +plugins = /var/lib/grafana/plugins + +# folder that contains provisioning config files that grafana will apply on startup and while running. +provisioning = conf/provisioning + +#################################### Server ############################## +[server] +# Protocol (http, https, h2, socket) +protocol = http + +# The ip address to bind to, empty will bind to all interfaces +http_addr = + +# The http port to use +http_port = 3000 + +# The public facing domain name used to access grafana from a browser +domain = localhost + +# Redirect to correct domain if host header does not match domain +# Prevents DNS rebinding attacks +enforce_domain = false + +# The full public facing url +root_url = %(protocol)s://%(domain)s:%(http_port)s/ + +# Serve Grafana from subpath specified in `root_url` setting. By default it is set to `false` for compatibility reasons. +serve_from_sub_path = false + +# Log web requests +router_logging = false + +# the path relative working path +static_root_path = public + +# enable gzip +enable_gzip = false + +# https certs & key file +cert_file = +cert_key = + +# Unix socket path +socket = /tmp/grafana.sock + +#################################### Database ############################ +[database] +# You can configure the database connection by specifying type, host, name, user and password +# as separate properties or as on string using the url property. + +# Either "mysql", "postgres" or "sqlite3", it's your choice +type = sqlite3 +host = 127.0.0.1:3306 +name = grafana +user = root +# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;""" +password = +# Use either URL or the previous fields to configure the database +# Example: mysql://user:secret@host:port/database +url = + +# Max idle conn setting default is 2 +max_idle_conn = 2 + +# Max conn setting default is 0 (mean not set) +max_open_conn = + +# Connection Max Lifetime default is 14400 (means 14400 seconds or 4 hours) +conn_max_lifetime = 14400 + +# Set to true to log the sql calls and execution times. +log_queries = + +# For "postgres", use either "disable", "require" or "verify-full" +# For "mysql", use either "true", "false", or "skip-verify". +ssl_mode = disable + +ca_cert_path = +client_key_path = +client_cert_path = +server_cert_name = + +# For "sqlite3" only, path relative to data_path setting +path = grafana.db + +# For "sqlite3" only. cache mode setting used for connecting to the database +cache_mode = private + +#################################### Cache server ############################# +[remote_cache] +# Either "redis", "memcached" or "database" default is "database" +type = database + +# cache connectionstring options +# database: will use Grafana primary database. +# redis: config like redis server e.g. `addr=127.0.0.1:6379,pool_size=100,db=0,ssl=false`. Only addr is required. ssl may be 'true', 'false', or 'insecure'. +# memcache: 127.0.0.1:11211 +connstr = + +#################################### Data proxy ########################### +[dataproxy] + +# This enables data proxy logging, default is false +logging = false + +# How long the data proxy should wait before timing out default is 30 (seconds) +timeout = 30 + +# If enabled and user is not anonymous, data proxy will add X-Grafana-User header with username into the request, default is false. +send_user_header = false + +#################################### Analytics ########################### +[analytics] +# Server reporting, sends usage counters to stats.grafana.org every 24 hours. +# No ip addresses are being tracked, only simple counters to track +# running instances, dashboard and error counts. It is very helpful to us. +# Change this option to false to disable reporting. +reporting_enabled = false + +# Set to false to disable all checks to https://grafana.com +# for new versions (grafana itself and plugins), check is used +# in some UI views to notify that grafana or plugin update exists +# This option does not cause any auto updates, nor send any information +# only a GET request to https://grafana.com to get latest versions +check_for_updates = false + +# Google Analytics universal tracking code, only enabled if you specify an id here +google_analytics_ua_id = + +# Google Tag Manager ID, only enabled if you specify an id here +google_tag_manager_id = + +#################################### Security ############################ +[security] +# disable creation of admin user on first start of grafana +disable_initial_admin_creation = false + +# default admin user, created on startup +admin_user = admin + +# default admin password, can be changed before first start of grafana, or in profile settings +admin_password = admin + +# used for signing +secret_key = SW2YcwTIb9zpOOhoPsMm + +# disable gravatar profile images +disable_gravatar = false + +# data source proxy whitelist (ip_or_domain:port separated by spaces) +data_source_proxy_whitelist = + +# disable protection against brute force login attempts +disable_brute_force_login_protection = false + +# set to true if you host Grafana behind HTTPS. default is false. +cookie_secure = false + +# set cookie SameSite attribute. defaults to `lax`. can be set to "lax", "strict", "none" and "disabled" +cookie_samesite = lax + +# set to true if you want to allow browsers to render Grafana in a <frame>, <iframe>, <embed> or <object>. default is false. +allow_embedding = false + +# Set to true if you want to enable http strict transport security (HSTS) response header. +# This is only sent when HTTPS is enabled in this configuration. +# HSTS tells browsers that the site should only be accessed using HTTPS. +# The default will change to true in the next minor release, 6.3. +strict_transport_security = false + +# Sets how long a browser should cache HSTS. Only applied if strict_transport_security is enabled. +strict_transport_security_max_age_seconds = 86400 + +# Set to true if to enable HSTS preloading option. Only applied if strict_transport_security is enabled. +strict_transport_security_preload = false + +# Set to true if to enable the HSTS includeSubDomains option. Only applied if strict_transport_security is enabled. +strict_transport_security_subdomains = false + +# Set to true to enable the X-Content-Type-Options response header. +# The X-Content-Type-Options response HTTP header is a marker used by the server to indicate that the MIME types advertised +# in the Content-Type headers should not be changed and be followed. The default will change to true in the next minor release, 6.3. +x_content_type_options = false + +# Set to true to enable the X-XSS-Protection header, which tells browsers to stop pages from loading +# when they detect reflected cross-site scripting (XSS) attacks. The default will change to true in the next minor release, 6.3. +x_xss_protection = false + + +#################################### Snapshots ########################### +[snapshots] +# snapshot sharing options +external_enabled = false +external_snapshot_url = https://snapshots-origin.raintank.io +external_snapshot_name = Publish to snapshot.raintank.io + +# Set to true to enable this Grafana instance act as an external snapshot server and allow unauthenticated requests for +# creating and deleting snapshots. +public_mode = false + +# remove expired snapshot +snapshot_remove_expired = true + +#################################### Dashboards ################## + +[dashboards] +# Number dashboard versions to keep (per dashboard). Default: 20, Minimum: 1 +versions_to_keep = 20 + +# Minimum dashboard refresh interval. When set, this will restrict users to set the refresh interval of a dashboard lower than given interval. Per default this is not set/unrestricted. +# The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m. +min_refresh_interval = + +#################################### Users ############################### +[users] +# disable user signup / registration +allow_sign_up = false + +# Allow non admin users to create organizations +allow_org_create = false + +# Set to true to automatically assign new users to the default organization (id 1) +auto_assign_org = true + +# Set this value to automatically add new users to the provided organization (if auto_assign_org above is set to true) +auto_assign_org_id = 1 + +# Default role new users will be automatically assigned (if auto_assign_org above is set to true) +auto_assign_org_role = Viewer + +# Require email validation before sign up completes +verify_email_enabled = false + +# Background text for the user field on the login page +login_hint = email or username +password_hint = password + +# Default UI theme ("dark" or "light") +default_theme = dark + +# External user management +external_manage_link_url = +external_manage_link_name = +external_manage_info = + +# Viewers can edit/inspect dashboard settings in the browser. But not save the dashboard. +viewers_can_edit = false + +# Editors can administrate dashboard, folders and teams they create +editors_can_admin = false + +[auth] +# Login cookie name +login_cookie_name = grafana_session + +# The lifetime (days) an authenticated user can be inactive before being required to login at next visit. Default is 7 days. +login_maximum_inactive_lifetime_days = 7 + +# The maximum lifetime (days) an authenticated user can be logged in since login time before being required to login. Default is 30 days. +login_maximum_lifetime_days = 30 + +# How often should auth tokens be rotated for authenticated users when being active. The default is each 10 minutes. +token_rotation_interval_minutes = 10 + +# Set to true to disable (hide) the login form, useful if you use OAuth +disable_login_form = false + +# Set to true to disable the signout link in the side menu. useful if you use auth.proxy +disable_signout_menu = false + +# URL to redirect the user to after sign out +signout_redirect_url = + +# Set to true to attempt login with OAuth automatically, skipping the login screen. +# This setting is ignored if multiple OAuth providers are configured. +oauth_auto_login = false + +# limit of api_key seconds to live before expiration +api_key_max_seconds_to_live = -1 + +#################################### Anonymous Auth ###################### +[auth.anonymous] +# enable anonymous access +enabled = false + +# specify organization name that should be used for unauthenticated users +org_name = Main Org. + +# specify role for unauthenticated users +org_role = Viewer + +#################################### Github Auth ######################### +[auth.github] +enabled = false +allow_sign_up = true +client_id = some_id +client_secret = some_secret +scopes = user:email,read:org +auth_url = https://github.com/login/oauth/authorize +token_url = https://github.com/login/oauth/access_token +api_url = https://api.github.com/user +allowed_domains = +team_ids = +allowed_organizations = + +#################################### GitLab Auth ######################### +[auth.gitlab] +enabled = false +allow_sign_up = true +client_id = some_id +client_secret = some_secret +scopes = api +auth_url = https://gitlab.com/oauth/authorize +token_url = https://gitlab.com/oauth/token +api_url = https://gitlab.com/api/v4 +allowed_domains = +allowed_groups = + +#################################### Google Auth ######################### +[auth.google] +enabled = false +allow_sign_up = true +client_id = some_client_id +client_secret = some_client_secret +scopes = https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email +auth_url = https://accounts.google.com/o/oauth2/auth +token_url = https://accounts.google.com/o/oauth2/token +api_url = https://www.googleapis.com/oauth2/v1/userinfo +allowed_domains = +hosted_domain = + +#################################### Grafana.com Auth #################### +# legacy key names (so they work in env variables) +[auth.grafananet] +enabled = false +allow_sign_up = true +client_id = some_id +client_secret = some_secret +scopes = user:email +allowed_organizations = + +[auth.grafana_com] +enabled = false +allow_sign_up = true +client_id = some_id +client_secret = some_secret +scopes = user:email +allowed_organizations = + +#################################### Azure AD OAuth ####################### +[auth.azuread] +name = Azure AD +enabled = false +allow_sign_up = true +client_id = some_client_id +client_secret = some_client_secret +scopes = openid email profile +auth_url = https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/authorize +token_url = https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token +allowed_domains = +allowed_groups = + +#################################### Generic OAuth ####################### +[auth.generic_oauth] +name = OAuth +enabled = false +allow_sign_up = true +client_id = some_id +client_secret = some_secret +scopes = user:email +email_attribute_name = email:primary +email_attribute_path = +role_attribute_path = +auth_url = +token_url = +api_url = +allowed_domains = +team_ids = +allowed_organizations = +tls_skip_verify_insecure = false +tls_client_cert = +tls_client_key = +tls_client_ca = + +#################################### SAML Auth ########################### +[auth.saml] # Enterprise only +# Defaults to false. If true, the feature is enabled +enabled = false + +# Base64-encoded public X.509 certificate. Used to sign requests to the IdP +certificate = + +# Path to the public X.509 certificate. Used to sign requests to the IdP +certificate_path = + +# Base64-encoded private key. Used to decrypt assertions from the IdP +private_key = + +# Path to the private key. Used to decrypt assertions from the IdP +private_key_path = + +# Base64-encoded IdP SAML metadata XML. Used to verify and obtain binding locations from the IdP +idp_metadata = + +# Path to the SAML metadata XML. Used to verify and obtain binding locations from the IdP +idp_metadata_path = + +# URL to fetch SAML IdP metadata. Used to verify and obtain binding locations from the IdP +idp_metadata_url = + +# Duration, since the IdP issued a response and the SP is allowed to process it. Defaults to 90 seconds +max_issue_delay = 90s + +# Duration, for how long the SP's metadata should be valid. Defaults to 48 hours +metadata_valid_duration = 48h + +# Friendly name or name of the attribute within the SAML assertion to use as the user's name +assertion_attribute_name = displayName + +# Friendly name or name of the attribute within the SAML assertion to use as the user's login handle +assertion_attribute_login = mail + +# Friendly name or name of the attribute within the SAML assertion to use as the user's email +assertion_attribute_email = mail + +#################################### Basic Auth ########################## +[auth.basic] +enabled = true + +#################################### Auth Proxy ########################## +[auth.proxy] +enabled = false +header_name = X-WEBAUTH-USER +header_property = username +auto_sign_up = true +# Deprecated, use sync_ttl instead +ldap_sync_ttl = 60 +sync_ttl = 60 +whitelist = +headers = +enable_login_token = false + +#################################### Auth LDAP ########################### +[auth.ldap] +enabled = false +config_file = /etc/grafana/ldap.toml +allow_sign_up = true + +# LDAP backround sync (Enterprise only) +# At 1 am every day +sync_cron = "0 0 1 * * *" +active_sync_enabled = false + +#################################### SMTP / Emailing ##################### +[smtp] +enabled = false +host = localhost:25 +user = +# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;""" +password = +cert_file = +key_file = +skip_verify = false +from_address = admin@grafana.localhost +from_name = Grafana +ehlo_identity = + +[emails] +welcome_email_on_sign_up = false +templates_pattern = emails/*.html + +#################################### Logging ########################## +[log] +# Either "console", "file", "syslog". Default is console and file +# Use space to separate multiple modes, e.g. "console file" +mode = console file + +# Either "debug", "info", "warn", "error", "critical", default is "info" +level = info + +# optional settings to set different levels for specific loggers. Ex filters = sqlstore:debug +filters = + +# For "console" mode only +[log.console] +level = + +# log line format, valid options are text, console and json +format = console + +# For "file" mode only +[log.file] +level = + +# log line format, valid options are text, console and json +format = text + +# This enables automated log rotate(switch of following options), default is true +log_rotate = true + +# Max line number of single file, default is 1000000 +max_lines = 1000000 + +# Max size shift of single file, default is 28 means 1 << 28, 256MB +max_size_shift = 28 + +# Segment log daily, default is true +daily_rotate = true + +# Expired days of log file(delete after max days), default is 7 +max_days = 7 + +[log.syslog] +level = + +# log line format, valid options are text, console and json +format = text + +# Syslog network type and address. This can be udp, tcp, or unix. If left blank, the default unix endpoints will be used. +network = +address = + +# Syslog facility. user, daemon and local0 through local7 are valid. +facility = + +# Syslog tag. By default, the process' argv[0] is used. +tag = + +#################################### Usage Quotas ######################## +[quota] +enabled = false + +#### set quotas to -1 to make unlimited. #### +# limit number of users per Org. +org_user = 10 + +# limit number of dashboards per Org. +org_dashboard = 100 + +# limit number of data_sources per Org. +org_data_source = 10 + +# limit number of api_keys per Org. +org_api_key = 10 + +# limit number of orgs a user can create. +user_org = 10 + +# Global limit of users. +global_user = -1 + +# global limit of orgs. +global_org = -1 + +# global limit of dashboards +global_dashboard = -1 + +# global limit of api_keys +global_api_key = -1 + +# global limit on number of logged in users. +global_session = -1 + +#################################### Alerting ############################ +[alerting] +# Disable alerting engine & UI features +enabled = true +# Makes it possible to turn off alert rule execution but alerting UI is visible +execute_alerts = true + +# Default setting for new alert rules. Defaults to categorize error and timeouts as alerting. (alerting, keep_state) +error_or_timeout = alerting + +# Default setting for how Grafana handles nodata or null values in alerting. (alerting, no_data, keep_state, ok) +nodata_or_nullvalues = no_data + +# Alert notifications can include images, but rendering many images at the same time can overload the server +# This limit will protect the server from render overloading and make sure notifications are sent out quickly +concurrent_render_limit = 5 + +# Default setting for alert calculation timeout. Default value is 30 +evaluation_timeout_seconds = 30 + +# Default setting for alert notification timeout. Default value is 30 +notification_timeout_seconds = 30 + +# Default setting for max attempts to sending alert notifications. Default value is 3 +max_attempts = 3 + +# Makes it possible to enforce a minimal interval between evaluations, to reduce load on the backend +min_interval_seconds = 1 + +#################################### Explore ############################# +[explore] +# Enable the Explore section +enabled = true + +#################################### Internal Grafana Metrics ############ +# Metrics available at HTTP API Url /metrics +[metrics] +enabled = true +interval_seconds = 10 +# Disable total stats (stat_totals_*) metrics to be generated +disable_total_stats = false + +#If both are set, basic auth will be required for the metrics endpoint. +basic_auth_username = +basic_auth_password = + +# Send internal Grafana metrics to graphite +[metrics.graphite] +# Enable by setting the address setting (ex localhost:2003) +address = +prefix = prod.grafana.%(instance_name)s. + +#################################### Grafana.com integration ########################## +[grafana_net] +url = https://grafana.com + +[grafana_com] +url = https://grafana.com + +#################################### Distributed tracing ############ +[tracing.jaeger] +# jaeger destination (ex localhost:6831) +address = +# tag that will always be included in when creating new spans. ex (tag1:value1,tag2:value2) +always_included_tag = +# Type specifies the type of the sampler: const, probabilistic, rateLimiting, or remote +sampler_type = const +# jaeger samplerconfig param +# for "const" sampler, 0 or 1 for always false/true respectively +# for "probabilistic" sampler, a probability between 0 and 1 +# for "rateLimiting" sampler, the number of spans per second +# for "remote" sampler, param is the same as for "probabilistic" +# and indicates the initial sampling rate before the actual one +# is received from the mothership +sampler_param = 1 +# Whether or not to use Zipkin span propagation (x-b3- HTTP headers). +zipkin_propagation = false +# Setting this to true disables shared RPC spans. +# Not disabling is the most common setting when using Zipkin elsewhere in your infrastructure. +disable_shared_zipkin_spans = false + +#################################### External Image Storage ############## +[external_image_storage] +# Used for uploading images to public servers so they can be included in slack/email messages. +# You can choose between (s3, webdav, gcs, azure_blob, local) +provider = + +[external_image_storage.s3] +endpoint = +path_style_access = +bucket_url = +bucket = +region = +path = +access_key = +secret_key = + +[external_image_storage.webdav] +url = +username = +password = +public_url = + +[external_image_storage.gcs] +key_file = +bucket = +path = + +[external_image_storage.azure_blob] +account_name = +account_key = +container_name = + +[external_image_storage.local] +# does not require any configuration + +[rendering] +# Options to configure a remote HTTP image rendering service, e.g. using https://github.com/grafana/grafana-image-renderer. +# URL to a remote HTTP image renderer service, e.g. http://localhost:8081/render, will enable Grafana to render panels and dashboards to PNG-images using HTTP requests to an external service. +server_url = +# If the remote HTTP image renderer service runs on a different server than the Grafana server you may have to configure this to a URL where Grafana is reachable, e.g. http://grafana.domain/. +callback_url = + +[panels] +# here for to support old env variables, can remove after a few months +enable_alpha = false +disable_sanitize_html = false + +[plugins] +enable_alpha = false +app_tls_skip_verify_insecure = false + +[enterprise] +license_path = + +[feature_toggles] +# enable features, separated by spaces +enable = diff --git a/SOURCES/list_bundled_nodejs_packages.py b/SOURCES/list_bundled_nodejs_packages.py new file mode 100755 index 0000000..0f62106 --- /dev/null +++ b/SOURCES/list_bundled_nodejs_packages.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python3 +import sys +import json +import re +from packaging import version + + +def read_declared_pkgs(package_json_path): + with open(package_json_path) as f: + package_json = json.load(f) + return list(package_json['dependencies'].keys()) + + +def read_installed_pkgs(yarn_lock_path): + with open(yarn_lock_path) as f: + lockfile = f.read() + return re.findall(r'^"?' # can start with a " + r'(.+?)@.+(?:,.*)?:\n' # characters up to @ + r' version "(.+)"', # and the version + lockfile, re.MULTILINE) + + +def list_provides(declared_pkgs, installed_pkgs): + for declared_pkg in declared_pkgs: + # there can be multiple versions installed of one package (transitive dependencies) + # but rpm doesn't support Provides: with a single package and multiple versions + # so let's declare the oldest version here + versions = [version.parse(pkg_version) + for pkg_name, pkg_version in installed_pkgs if pkg_name == declared_pkg] + oldest_version = sorted(versions)[0] + yield f"Provides: bundled(nodejs-{declared_pkg}) = {oldest_version}" + + +if __name__ == "__main__": + if len(sys.argv) != 2: + print(f"usage: {sys.argv[0]} grafana-X.Y.Z/", file=sys.stdout) + sys.exit(1) + + grafana_dir = sys.argv[1] + declared_pkgs = read_declared_pkgs(f"{grafana_dir}/package.json") + installed_pkgs = read_installed_pkgs(f"{grafana_dir}/yarn.lock") + provides = list_provides(declared_pkgs, installed_pkgs) + for provide in sorted(provides): + print(provide) diff --git a/SOURCES/list_go_buildrequires.sh b/SOURCES/list_go_buildrequires.sh new file mode 100755 index 0000000..62e4d06 --- /dev/null +++ b/SOURCES/list_go_buildrequires.sh @@ -0,0 +1,20 @@ +#!/bin/bash -eu + +[ $# -ne 1 ] && echo "Usage: $0 grafana-X.Y.Z/" && exit 1 +GRAFANA_SOURCES="$(readlink -f "$1")" + +cd "$(mktemp -d)" +mkdir -p src/github.com/grafana +ln -s "${GRAFANA_SOURCES}" src/github.com/grafana/grafana +ln -s "${GRAFANA_SOURCES}/vendor/github.com/grafana/grafana-plugin-model" src/github.com/grafana/grafana-plugin-model +ln -s "${GRAFANA_SOURCES}/vendor/github.com/grafana/grafana-plugin-sdk-go" src/github.com/grafana/grafana-plugin-sdk-go + +for pkg in grafana grafana-plugin-model grafana-plugin-sdk-go +do + GOPATH=$(pwd) golist --imported --package-path "github.com/grafana/$pkg" --skip-self --template 'BuildRequires: golang({{.}})\n' +done | sed \ + -e "s,github.com/linkedin/goavro/v2,github.com/linkedin/goavro,g" \ + -e "s,github.com/go-xorm/xorm,xorm.io/xorm,g" \ + -e "s,github.com/robfig/cron/v3,gopkg.in/robfig/cron.v3,g" \ + -e "s,github.com/unknwon/com,github.com/Unknwon/com,g" \ + | sort | uniq diff --git a/SOURCES/make_grafana_webpack.sh b/SOURCES/make_grafana_webpack.sh old mode 100644 new mode 100755 index 47a8025..7baf487 --- a/SOURCES/make_grafana_webpack.sh +++ b/SOURCES/make_grafana_webpack.sh @@ -1,6 +1,6 @@ #! /bin/bash # -# Copyright (c) 2019 Red Hat. +# Copyright (c) 2019-2020 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 @@ -17,9 +17,8 @@ # 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 +command -v yarn || { echo Error, please install the yarn package manager. && exit 1; } # get src tree and set cwd echo Fetching pristine upstream git tagged branch for grafana version v$VER ... @@ -36,9 +35,7 @@ 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 +yarn --non-interactive --no-progress --ignore-engines install --pure-lockfile > yarn.out 2>&1 # build the webpack echo;echo Building production webpack .... @@ -56,6 +53,6 @@ fi # done echo Both grafana-$VER.tar.gz and grafana_webpack-$VER.tar.gz -echo should now be copied to your \$HOME/rpmbuild/SOURCES +echo should now be in your working directory. exit 0 diff --git a/SPECS/grafana.spec b/SPECS/grafana.spec index fb9200c..51c73c2 100644 --- a/SPECS/grafana.spec +++ b/SPECS/grafana.spec @@ -9,19 +9,21 @@ end} # Unbundle Grafana vendor sources and instead use BuildRequires -# only on platforms that have enough golang devel support. +# on platforms that have enough golang devel support. %if 0%{?rhel} == 0 %global unbundle_vendor_sources 1 %endif -%if 0%{?fedora} >= 30 -# Use vendor sources until both Fedora and Grafana properly support golang modules -%global unbundle_vendor_sources 0 +%if 0%{?rhel} +# emulate macros defined by the go-rpm-macros package +# https://pagure.io/go-rpm-macros/blob/master/f/rpm/macros.d/macros.go-compilers-golang +%define gobuild(o:) go build -buildmode pie -compiler gc -tags="rpm_crashtraceback ${BUILDTAGS:-}" -ldflags "${LDFLAGS:-}%{?currentgoldflags} -B 0x$(head -c20 /dev/urandom|od -An -tx1|tr -d ' \\n') -extldflags '%__global_ldflags %{?__golang_extldflags}'" -a -v -x %{?**}; +%define gotestextldflags %__global_ldflags %{?__golang_extldflags} +%define gotest() GO111MODULE=off go test -buildmode pie -compiler gc -ldflags "${LDFLAGS:-}%{?currentgoldflags} -extldflags '%{gotestextldflags}'" %{?**}; %endif - Name: grafana -Version: 6.3.6 +Version: 6.7.3 Release: 1%{?dist} Summary: Metrics dashboard and graph editor License: ASL 2.0 @@ -33,15 +35,29 @@ Source0: https://github.com/grafana/grafana/archive/v%{version}/%{name} # 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 +# Source2 contains Grafana configuration defaults for distributions +Source2: distro-defaults.ini + +# Source3 is the script to create the webpack from grafana sources +Source3: make_grafana_webpack.sh + +# Source4 is the script to generate the list of Go build dependencies: +Source4: list_go_buildrequires.sh + +# Source5 is the script to generate the list of bundled nodejs packages +Source5: list_bundled_nodejs_packages.py -# Patches for upstream + +# Patches Patch1: 001-login-oauth-use-oauth2-exchange.patch Patch2: 002-remove-jaeger-tracing.patch -Patch3: 003-new-files.patch -Patch4: 004-xerrors.patch -Patch5: 005-mute-shellcheck-grafana-cli.patch +Patch3: 003-manpages.patch +Patch4: 004-wrappers-grafana-cli.patch +Patch5: 005-pkg-main-fix-import-paths.patch +Patch6: 006-pkg-setting-ini-default-section.patch +Patch7: 007-pkg-prometheus-client-query-range.patch +Patch8: 008-pkg-services-notifications-codes-Unknwon.patch +Patch9: 009-pkg-fix-xorm-import.patch # Intersection of go_arches and nodejs_arches ExclusiveArch: %{grafana_arches} @@ -60,6 +76,7 @@ Requires(pre): shadow-utils BuildRequires: git, systemd, golang, go-srpm-macros +%if 0%{?fedora} || 0%{?rhel} > 7 Recommends: grafana-cloudwatch = %{version}-%{release} Recommends: grafana-elasticsearch = %{version}-%{release} Recommends: grafana-azure-monitor = %{version}-%{release} @@ -72,243 +89,190 @@ Recommends: grafana-opentsdb = %{version}-%{release} Recommends: grafana-postgres = %{version}-%{release} Recommends: grafana-prometheus = %{version}-%{release} Recommends: grafana-stackdriver = %{version}-%{release} -Recommends: grafana-pcp +Recommends: grafana-pcp >= 2 +%endif %if 0%{?unbundle_vendor_sources} # golang build deps. These allow us to unbundle vendor golang source. -BuildRequires: golang(github.com/aws/aws-sdk-go) +# Note: generated with the list_go_buildrequires.sh script (see README.md) +BuildRequires: golang(github.com/apache/arrow/go/arrow) +BuildRequires: golang(github.com/apache/arrow/go/arrow/array) +BuildRequires: golang(github.com/apache/arrow/go/arrow/ipc) +BuildRequires: golang(github.com/apache/arrow/go/arrow/memory) +BuildRequires: golang(github.com/aws/aws-sdk-go/aws) +BuildRequires: golang(github.com/aws/aws-sdk-go/aws/awsutil) +BuildRequires: golang(github.com/aws/aws-sdk-go/aws/credentials) +BuildRequires: golang(github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds) +BuildRequires: golang(github.com/aws/aws-sdk-go/aws/credentials/endpointcreds) +BuildRequires: golang(github.com/aws/aws-sdk-go/aws/defaults) +BuildRequires: golang(github.com/aws/aws-sdk-go/aws/ec2metadata) +BuildRequires: golang(github.com/aws/aws-sdk-go/aws/request) +BuildRequires: golang(github.com/aws/aws-sdk-go/aws/session) +BuildRequires: golang(github.com/aws/aws-sdk-go/service/cloudwatch) +BuildRequires: golang(github.com/aws/aws-sdk-go/service/ec2) +BuildRequires: golang(github.com/aws/aws-sdk-go/service/ec2/ec2iface) +BuildRequires: golang(github.com/aws/aws-sdk-go/service/resourcegroupstaggingapi) +BuildRequires: golang(github.com/aws/aws-sdk-go/service/resourcegroupstaggingapi/resourcegroupstaggingapiiface) +BuildRequires: golang(github.com/aws/aws-sdk-go/service/s3/s3manager) +BuildRequires: golang(github.com/aws/aws-sdk-go/service/sts) 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/cheekybits/genny/generic) +BuildRequires: golang(github.com/crewjam/saml) 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/gobwas/glob) +BuildRequires: golang(github.com/golang/protobuf/proto) 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/google/go-cmp/cmp) +BuildRequires: golang(github.com/google/go-cmp/cmp/cmpopts) 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/jung-kurt/gofpdf) BuildRequires: golang(github.com/lib/pq) -BuildRequires: golang(github.com/mattn/go-colorable) +BuildRequires: golang(github.com/linkedin/goavro) +BuildRequires: golang(github.com/mattetti/filebuffer) 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/opentracing/opentracing-go/ext) +BuildRequires: golang(github.com/opentracing/opentracing-go/log) 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_golang/prometheus) +BuildRequires: golang(github.com/prometheus/client_golang/prometheus/promhttp) 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/robfig/cron) 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/stretchr/testify/require) BuildRequires: golang(github.com/teris-io/shortid) +BuildRequires: golang(github.com/ua-parser/uap-go/uaparser) +BuildRequires: golang(github.com/uber/jaeger-client-go/config) +BuildRequires: golang(github.com/uber/jaeger-client-go/zipkin) BuildRequires: golang(github.com/Unknwon/com) +BuildRequires: golang(github.com/urfave/cli/v2) BuildRequires: golang(github.com/VividCortex/mysqlerr) BuildRequires: golang(github.com/yudai/gojsondiff) -BuildRequires: golang(github.com/yudai/golcs) +BuildRequires: golang(github.com/yudai/gojsondiff/formatter) 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) -%if 0%{fedora} >= 31 -BuildRequires: golang(gopkg.in/yaml.v2) -%else -BuildRequires: golang(github.com/go-yaml/yaml) -%endif BuildRequires: golang(golang.org/x/sync/errgroup) +BuildRequires: golang(golang.org/x/xerrors) +BuildRequires: golang(google.golang.org/grpc) +BuildRequires: golang(google.golang.org/grpc/codes) +BuildRequires: golang(google.golang.org/grpc/metadata) +BuildRequires: golang(google.golang.org/grpc/status) +BuildRequires: golang(gopkg.in/ini.v1) BuildRequires: golang(gopkg.in/ldap.v3) +BuildRequires: golang(gopkg.in/macaron.v1) BuildRequires: golang(gopkg.in/mail.v2) -BuildRequires: golang(github.com/jonboulle/clockwork) +BuildRequires: golang(gopkg.in/redis.v5) +BuildRequires: golang(gopkg.in/robfig/cron.v3) +BuildRequires: golang(gopkg.in/square/go-jose.v2) +BuildRequires: golang(gopkg.in/square/go-jose.v2/jwt) +BuildRequires: golang(gopkg.in/yaml.v2) +BuildRequires: golang(xorm.io/xorm) %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 +# easily identified. +# Note: generated with the list_bundled_nodejs_packages.sh script (see README.md) +Provides: bundled(nodejs-@braintree/sanitize-url) = 4.0.0 +Provides: bundled(nodejs-@grafana/slate-react) = 0.22.9-grafana +Provides: bundled(nodejs-@reduxjs/toolkit) = 1.2.1 +Provides: bundled(nodejs-@torkelo/react-select) = 3.0.8 +Provides: bundled(nodejs-@types/md5) = 2.1.33 +Provides: bundled(nodejs-@types/react-loadable) = 5.5.2 +Provides: bundled(nodejs-@types/react-virtualized-auto-sizer) = 1.0.0 +Provides: bundled(nodejs-@types/uuid) = 3.4.7 +Provides: bundled(nodejs-abortcontroller-polyfill) = 1.4.0 +Provides: bundled(nodejs-angular) = 1.6.9 +Provides: bundled(nodejs-angular-bindonce) = 0.3.1 +Provides: bundled(nodejs-angular-native-dragdrop) = 1.2.2 +Provides: bundled(nodejs-angular-route) = 1.6.6 +Provides: bundled(nodejs-angular-sanitize) = 1.6.6 +Provides: bundled(nodejs-baron) = 3.0.3 +Provides: bundled(nodejs-brace) = 0.10.0 +Provides: bundled(nodejs-calculate-size) = 1.1.1 +Provides: bundled(nodejs-classnames) = 2.2.6 +Provides: bundled(nodejs-clipboard) = 2.0.4 +Provides: bundled(nodejs-core-js) = 1.2.7 +Provides: bundled(nodejs-d3) = 5.15.0 +Provides: bundled(nodejs-d3-scale-chromatic) = 1.5.0 +Provides: bundled(nodejs-emotion) = 10.0.27 +Provides: bundled(nodejs-eventemitter3) = 2.0.3 +Provides: bundled(nodejs-fast-text-encoding) = 1.0.0 +Provides: bundled(nodejs-file-saver) = 1.3.8 +Provides: bundled(nodejs-hoist-non-react-statics) = 3.3.0 +Provides: bundled(nodejs-immutable) = 3.8.2 +Provides: bundled(nodejs-is-hotkey) = 0.1.4 +Provides: bundled(nodejs-jquery) = 3.4.1 +Provides: bundled(nodejs-lodash) = 3.10.1 +Provides: bundled(nodejs-lru-cache) = 4.1.5 +Provides: bundled(nodejs-marked) = 0.3.19 +Provides: bundled(nodejs-md5) = 2.2.1 +Provides: bundled(nodejs-memoize-one) = 4.1.0 +Provides: bundled(nodejs-moment) = 2.24.0 +Provides: bundled(nodejs-mousetrap) = 1.6.3 +Provides: bundled(nodejs-mousetrap-global-bind) = 1.1.0 +Provides: bundled(nodejs-nodemon) = 1.18.10 +Provides: bundled(nodejs-papaparse) = 4.6.3 +Provides: bundled(nodejs-prismjs) = 1.16.0 +Provides: bundled(nodejs-prop-types) = 15.7.2 +Provides: bundled(nodejs-rc-cascader) = 0.17.5 +Provides: bundled(nodejs-re-resizable) = 6.2.0 +Provides: bundled(nodejs-react) = 16.10.2 +Provides: bundled(nodejs-react-dom) = 16.10.2 +Provides: bundled(nodejs-react-grid-layout) = 0.17.1 +Provides: bundled(nodejs-react-highlight-words) = 0.11.0 +Provides: bundled(nodejs-react-loadable) = 5.5.0 +Provides: bundled(nodejs-react-popper) = 1.3.3 +Provides: bundled(nodejs-react-redux) = 7.1.1 +Provides: bundled(nodejs-react-sizeme) = 2.5.2 +Provides: bundled(nodejs-react-split-pane) = 0.1.89 +Provides: bundled(nodejs-react-transition-group) = 2.6.1 +Provides: bundled(nodejs-react-use) = 12.8.0 +Provides: bundled(nodejs-react-virtualized-auto-sizer) = 1.0.2 +Provides: bundled(nodejs-react-window) = 1.7.1 +Provides: bundled(nodejs-redux) = 3.7.2 +Provides: bundled(nodejs-redux-logger) = 3.0.6 +Provides: bundled(nodejs-redux-thunk) = 2.3.0 +Provides: bundled(nodejs-regenerator-runtime) = 0.11.1 +Provides: bundled(nodejs-reselect) = 4.0.0 +Provides: bundled(nodejs-rst2html) = 1.0.4 +Provides: bundled(nodejs-rxjs) = 5.5.12 +Provides: bundled(nodejs-search-query-parser) = 1.5.2 +Provides: bundled(nodejs-slate) = 0.47.8 +Provides: bundled(nodejs-slate-plain-serializer) = 0.7.10 +Provides: bundled(nodejs-tether) = 1.4.5 +Provides: bundled(nodejs-tether-drop) = 1.5.0 +Provides: bundled(nodejs-tinycolor2) = 1.4.1 +Provides: bundled(nodejs-tti-polyfill) = 0.2.2 +Provides: bundled(nodejs-uuid) = 3.3.3 +Provides: bundled(nodejs-whatwg-fetch) = 3.0.0 +Provides: bundled(nodejs-xss) = 1.0.3 %description @@ -408,7 +372,14 @@ The Grafana stackdriver datasource. %patch2 -p1 %patch3 -p1 %patch4 -p1 +%patch6 -p1 + +%if 0%{?unbundle_vendor_sources} %patch5 -p1 +%patch7 -p1 +%patch8 -p1 +%patch9 -p1 +%endif # Set up build subdirs and links mkdir -p %{_builddir}/src/github.com/grafana @@ -420,36 +391,31 @@ 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. -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 \ +# Note there are some exceptions. +cp --parents -a \ + vendor/github.com/grafana/grafana-plugin-model \ + vendor/github.com/grafana/grafana-plugin-sdk-go \ %{_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 cd %{_builddir}/src/github.com/grafana/grafana %global archbindir bin/`go env GOOS`-`go env GOARCH` -echo _builddir=%{_builddir} archbindir=%{archbindir} +echo _builddir=%{_builddir} archbindir=%{archbindir} gopath=%{gopath} [ ! -d %{archbindir} ] && mkdir -p %{archbindir} + +# non-modular build export GOPATH=%{_builddir}:%{gopath} -# export GO111MODULE=off -%if 0%{?fedora} >= 31 -# native fedora golang build but without modules (no grafana support yet) -go build -mod=vendor -o %{archbindir}/grafana-cli ./pkg/cmd/grafana-cli -go build -mod=vendor -o %{archbindir}/grafana-server ./pkg/cmd/grafana-server -%else -# use the grafana build.go script. -go run build.go build -%endif +export GO111MODULE=off; rm -f go.mod +# see grafana-X.X.X/build.go +export LDFLAGS="-X main.version=%{version} -X main.buildstamp=${SOURCE_DATE_EPOCH}" +for cmd in grafana-cli grafana-server; do + %gobuild -o %{archbindir}/${cmd} ./pkg/cmd/${cmd} +done %install # Fix up arch bin directories @@ -463,7 +429,8 @@ go run build.go build # dirs, shared files, public html, webpack install -d %{buildroot}%{_sbindir} -install -d %{buildroot}%{_datadir}/%{name}/bin +install -d %{buildroot}%{_datadir}/%{name} +install -d %{buildroot}%{_libexecdir}/%{name} cp -a conf public %{buildroot}%{_datadir}/%{name} # wrappers @@ -471,7 +438,7 @@ install -p -m 755 packaging/wrappers/grafana-cli %{buildroot}%{_sbindir}/%{name} # binaries install -p -m 755 %{archbindir}/%{name}-server %{buildroot}%{_sbindir} -install -p -m 755 %{archbindir}/%{name}-cli %{buildroot}%{_datadir}/%{name}/bin +install -p -m 755 %{archbindir}/%{name}-cli %{buildroot}%{_libexecdir}/%{name} # man pages install -d %{buildroot}%{_mandir}/man1 @@ -482,17 +449,14 @@ 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 640 %{SOURCE2} %{buildroot}%{_sysconfdir}/%{name}/grafana.ini +install -p -m 640 conf/ldap.toml %{buildroot}%{_sysconfdir}/%{name}/ldap.toml +install -p -m 644 %{SOURCE2} %{buildroot}%{_datadir}/%{name}/conf/defaults.ini 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 750 %{buildroot}%{_sharedstatedir}/%{name} install -d -m 755 %{buildroot}%{_sharedstatedir}/%{name}/plugins # log directory @@ -520,6 +484,26 @@ exit 0 %post %systemd_post grafana-server.service +# create grafana.db with secure permissions on new installations +# otherwise grafana-server is creating grafana.db on first start +# with world-readable permissions, which may leak encrypted datasource +# passwords to all users (if the secret_key in grafana.ini was not changed) + +# https://bugzilla.redhat.com/show_bug.cgi?id=1805472 +if [ "$1" = 1 ] && [ ! -f %{_sharedstatedir}/%{name}/grafana.db ]; then + touch %{_sharedstatedir}/%{name}/grafana.db +fi + +# apply secure permissions to grafana.db if it exists +# (may not exist on upgrades, because users can choose between sqlite/mysql/postgres) +if [ -f %{_sharedstatedir}/%{name}/grafana.db ]; then + chown %{GRAFANA_USER}:%{GRAFANA_GROUP} %{_sharedstatedir}/%{name}/grafana.db + chmod 640 %{_sharedstatedir}/%{name}/grafana.db +fi + +# required for upgrades +chmod 640 %{_sysconfdir}/%{name}/grafana.ini +chmod 640 %{_sysconfdir}/%{name}/ldap.toml %postun %systemd_postun_with_restart grafana-server.service @@ -528,36 +512,35 @@ exit 0 %check cd %{_builddir}/src/github.com/grafana/grafana export GOPATH=%{_builddir}:%{gopath} -# remove tests currently failing +# remove tests currently failing - these two are due to a symlink +# BUILD/src/github.com/grafana/grafana -> BUILD/grafana-6.6.1 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 export GO111MODULE=off -go test ./pkg/... +%gotest ./pkg/... %files -# binaries +# binaries and wrappers %{_sbindir}/%{name}-server %{_sbindir}/%{name}-cli +%{_libexecdir}/%{name} # 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) %attr(640, root, %{GRAFANA_GROUP}) %{_sysconfdir}/%{name}/grafana.ini +%config(noreplace) %attr(640, 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} +# config database directory and plugins +%attr(750, %{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 +%{_datadir}/%{name} # built-in datasources that are sub-packaged %global dsdir %{_datadir}/%{name}/public/app/plugins/datasource @@ -597,42 +580,71 @@ go test ./pkg/... # %files cloudwatch %{_datadir}/%{name}/public/app/plugins/datasource/cloudwatch +%doc %{_datadir}/%{name}/public/app/plugins/datasource/cloudwatch/README.md %files elasticsearch %{_datadir}/%{name}/public/app/plugins/datasource/elasticsearch +%doc %{_datadir}/%{name}/public/app/plugins/datasource/elasticsearch/README.md %files azure-monitor %{_datadir}/%{name}/public/app/plugins/datasource/grafana-azure-monitor-datasource %files graphite %{_datadir}/%{name}/public/app/plugins/datasource/graphite +%doc %{_datadir}/%{name}/public/app/plugins/datasource/graphite/README.md %files influxdb %{_datadir}/%{name}/public/app/plugins/datasource/influxdb +%doc %{_datadir}/%{name}/public/app/plugins/datasource/influxdb/README.md %files loki %{_datadir}/%{name}/public/app/plugins/datasource/loki +%doc %{_datadir}/%{name}/public/app/plugins/datasource/loki/README.md %files mssql %{_datadir}/%{name}/public/app/plugins/datasource/mssql +%doc %{_datadir}/%{name}/public/app/plugins/datasource/mssql/README.md %files mysql %{_datadir}/%{name}/public/app/plugins/datasource/mysql +%doc %{_datadir}/%{name}/public/app/plugins/datasource/mysql/README.md %files opentsdb %{_datadir}/%{name}/public/app/plugins/datasource/opentsdb +%doc %{_datadir}/%{name}/public/app/plugins/datasource/opentsdb/README.md %files postgres %{_datadir}/%{name}/public/app/plugins/datasource/postgres +%doc %{_datadir}/%{name}/public/app/plugins/datasource/postgres/README.md %files prometheus %{_datadir}/%{name}/public/app/plugins/datasource/prometheus +%doc %{_datadir}/%{name}/public/app/plugins/datasource/prometheus/README.md %files stackdriver %{_datadir}/%{name}/public/app/plugins/datasource/stackdriver +%doc %{_datadir}/%{name}/public/app/plugins/datasource/stackdriver/README.md %changelog +* Tue Apr 28 2020 Andreas Gerstmayr <agerstmayr@redhat.com> 6.7.3-1 +- update to 6.7.3 tagged upstream community sources, see CHANGELOG +- add scripts to list Go dependencies and bundled npmjs dependencies +- set Grafana version in Grafana UI and grafana-cli --version +- declare README.md as documentation of datasource plugins +- create grafana.db on first installation (fixes RH BZ #1805472) +- change permissions of /var/lib/grafana to 750 (CVE-2020-12458) +- change permissions of /var/lib/grafana/grafana.db to 640 and + user/group grafana:grafana (CVE-2020-12458) +- change permissions of grafana.ini and ldap.toml to 640 (CVE-2020-12459) + +* Wed Feb 26 2020 Mark Goodwin <mgoodwin@redhat.com> 6.6.2-1 +- added patch0 to set the version string correctly +- removed patch 004-xerrors.patch, it's now upstream +- added several patches for golang vendored vrs build dep differences +- added patch to move grafana-cli binary to libexec dir +- update to 6.6.2 tagged upstream community sources, see CHANGELOG + * Wed Nov 20 2019 Mark Goodwin <mgoodwin@redhat.com> 6.3.6-1 - add weak depenency on grafana-pcp - add patch to mute shellcheck SC1090 for grafana-cli