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