linkGrafana Enterprise

Для начала скачаем саму графану:

1link$wget https://dl.grafana.com/enterprise/release/grafana-enterprise-9.4.7.linux-amd64.tar.gz

2link$tar -zxvf grafana-enterprise-9.4.7.linux-amd64.tar.gz

Для генерации лицензии, нам потребуется python3 и jwcrypto:

1link$apt install python3 python3-pip

2link$pip install jwcrypto

Теперь запустим следующий скрипт genkey.py:

1linkimport re

2linkimport os.path

3linkimport time

4linkfrom jwcrypto import jwk

5linkfrom jwcrypto import jwt

6linkfrom jwcrypto.common import json_encode

7link

8linkgrafana_version='9.4.7'

9linkgrafana_url='http://localhost:3000/'

10link

11link# Вытащим приватный ключ из исполняемого файла графаны:

12linkwith open('grafana-{}/bin/grafana'.format(grafana_version), mode='rb') as f:

13link grafana_bin = f.read()

14link

15linkpat = re.compile(b'.*({"kty":"RSA","kid":"1"[^}]+}).*')

16link

17linkoriginal_pub_start = grafana_bin.find(b'{"kty":"RSA","kid":"1"')

18linkoriginal_pub_end = grafana_bin.find(b'}', original_pub_start) + 1

19linkoriginal_pub_json = grafana_bin[original_pub_start:original_pub_end]

20link

21link# Генерируем новый ключ

22linknew_key_filename = 'new_key.json'

23linkif (not os.path.isfile(new_key_filename)):

24link key = jwk.JWK.generate(kty='RSA', size=4096, alg='RS512', kid='1')

25link new_pub_json = '{"kty":"RSA","kid":"1","alg":"RS512","n":"' + key.n + '","e":"' + key.e + '"}'

26link # Важно что бы длина совпадала с оригиналом

27link if len(new_pub_json) == len(original_pub_json):

28link new_key_json = key.export()

29link with open(new_key_filename, 'w') as text_file:

30link text_file.write(new_key_json)

31link print('New key generated!')

32link else:

33link print('Error - key length differs')

34linkelse:

35link # Загружаем новый ключ из готового файла

36link with open(new_key_filename) as f:

37link new_key_json = f.read()

38link print('New key loaded from file')

39link

40linkkey = jwk.JWK.from_json(new_key_json)

41linknew_pub_json = ('{"kty":"RSA","kid":"1","alg":"RS512","n":"' + key.n + '","e":"' + key.e + '"}').encode()

42linkif len(new_pub_json) == len(original_pub_json):

43link print('Pub key length Ok!')

44link

45link# Нужная лицензия

46linkc = {

47link 'ver': '2.0.0',

48link 'iss': 'https://grafana.com',

49link 'sub': grafana_url,

50link 'san': [],

51link 'jti': '1337',

52link 'nbf': int(time.time()),

53link 'iat': int(time.time()),

54link 'exp': int(time.time())+10*365*24*60*60,

55link 'lexp': int(time.time())+10*365*24*60*60,

56link 'lid': '1337',

57link 'prod': [

58link 'grafana-enterprise'

59link ],

60link 'limit_by': 'role_users',

61link 'included_admins': 100,

62link 'included_viewers': 1000,

63link 'included_users': 1000,

64link 'lic_exp_warn_days': 3,

65link 'tok_exp_warn_days': 2,

66link 'update_days': 1,

67link 'company': 'acme',

68link 'slug': 'acme',

69link 'trial': False,

70link 'usage_billing': False,

71link 'max_concurrent_user_sessions': 1000,

72link 'type': 'prod'

73link}

74link

75link# Подписываем лицензию новым ключём

76linkToken = jwt.JWT(header={'alg': 'RS512', 'typ': 'JWT', 'kid': '1'},

77link claims=c)

78linkToken.make_signed_token(key)

79linktoken_text = Token.serialize()

80link# Сохраняем лицензию в файл

81linkwith open('grafana-{}/bin/license.jwt'.format(grafana_version), 'w') as text_file:

82link text_file.write(token_text)

83linkprint('License file created')

84link

85link# Заменяем публичный ключ на новый в исполняемом файле

86linkgrafana_bin = grafana_bin.replace(original_pub_json, new_pub_json)

87linkwith open('grafana-{}/bin/grafana'.format(grafana_version), mode='wb') as f:

88link f.write(grafana_bin)

89linkprint('Binary modified')

В результате работы данного скрипта создаться файл лицензии и модифицируется исполняемый файл

Создадим файл конфигурации custom.ini:

1link[server]

2linkroot_url = http://localhost:3000/

3link

4link[enterprise]

5linklicense_path = license.jwt

6linkauto_refresh_license = false

Запустим:

1link$cd grafana-9.4.7/bin/

2link$./grafana server

Откроем http://localhost:3000/admin/licensing (admin:admin), должна быть видна действующая лицензия.

Grafana Enterprise

Home Gitlab EE Grafana E