Установить pyOpenSSL и boto3 вручную? Перетаскивание не работает из-за отсутствия зависимостей - PullRequest
0 голосов
/ 24 января 2020

У меня есть приложение, которое я написал для Splunk, которое зависит от библиотек boto3 и pyOpenSSL. Я не нашел хорошего способа поместить зависимости приложений в папку bin приложения, кроме перетаскивания, которая не работает для boto3 и pyOpenSSL.

На данный момент каждый раз, когда нам нужно было сделав модуль python доступным для отдельного приложения в Splunk, мы перетянем модули python в $ SPLUNK_HOME / etc / apps / APP_NAME / bin / MODULE. Это работало до тех пор, пока нам не понадобились библиотеки pyOpenSSL и boto3, которые имеют множество криптографических и одиночных скриптовых зависимостей, которые не отображаются корректно.

Что я пробовал:

1| python3 -m venv $SPLUNK_HOME/etc/apps/APP_NAME/
2| python3 -m pip install (pyOpenSSL, boxsdk, pyJWT, boto3) < base dependencies
3| move $SPLUNK_HOME/etc/apps/APP_NAME/lib/python3.7/site-packages/ > $/SPLUNK_HOME/etc/apps/APP_NAME/bin
4| Put all my app scripts in $/SPLUNK_HOME/etc/apps/APP_NAME/bin alongside all the modules I just installed to that folder using venv
5| Start Splunk
6| search | search_command arg=0

В В этот момент Splunk сообщает мне, что модули enum34, ipaddress, chainmap, cryptography (модуль _constant_time, похороненный здесь где-то, не существует там, где он должен), не существуют.

Затем я выключаю Splunk, повторяю шаги 1-6, но также устанавливаю все эти недостающие модули на шаге 2. Теперь я получаю следующую ошибку:

External search command 'boxfiles' returned error code 1. First 1000 (of 1456) bytes of script output: "No module named constant_time ERROR "Error 'No module named constant_time'. Traceback (most recent call last): File ""/Applications/Splunk/etc/apps/TA-box-connector/bin/box_connector/init.py"", line 3, in from box_connector import BoxConnector File ""/Applications/Splunk/etc/apps/TA-box-connector/bin/box_connector/box_connector.py"", line 10, in from OpenSSL import crypto File ""/Applications/Splunk/etc/apps/TA-box-connector/bin/OpenSSL/init.py"", line 8, in from OpenSSL import crypto, SSL File ""/Applications/Splunk/etc/apps/TA-box-connector/bin/OpenSSL/crypto.py"", line 12, in from cryptography import x509 File ""/Applications/Splunk/etc/apps/TA-box-connector/bin/cryptography/x509/init.py"", line 8, in from cryptography.x509.base import ( File ""/Applications/Splunk/etc/apps/TA-box-connector/bin/cryptography/x509/base.py"", line 18, in from cryptography.x509.extensions import Exte".

Я бы хотел устранить эту ошибку, но я работал над этим проблема зависимости в течение некоторого времени, поэтому, если есть лучшее решение для размещения этих пакетов здесь, я хотел бы услышать об этом.

1 Ответ

1 голос
/ 27 января 2020

Вы можете использовать следующие команды для установки зависимостей в соответствующий каталог. Убедитесь, что $SPLUNK_HOME установлен правильно, и замените APP_NAME на имя вашего нового приложения.

pip install pyOpenSSL -t $SPLUNK_HOME/etc/apps/APP_NAME/bin
pip install boxsdk -t $SPLUNK_HOME/etc/apps/APP_NAME/bin
pip install pyJWT -t $SPLUNK_HOME/etc/apps/APP_NAME/bin
pip install boto3 -t $SPLUNK_HOME/etc/apps/APP_NAME/bin

Вам также может понадобиться посмотреть, что делает надстройка Splunk для AWS, и намеренно добавьте требуемый модуль к пути Python. (Splunk_TA_aws/bin/aws_bootstrap_env.py).

'''
Add common libs to sys.path
'''


import os
import os.path
import re
import sys
import logging


def setup_python_path():
    # Exclude folder beneath other apps, Fix bug for rest_handler.py
    ta_name = os.path.basename(os.path.dirname(os.path.dirname(__file__)))
    pattern = re.compile(r"[\\/]etc[\\/]apps[\\/][^\\/]+[\\/]bin[\\/]?$")
    new_paths = [path for path in sys.path if not pattern.search(path) or ta_name in path]
    new_paths.insert(0, os.path.dirname(__file__))
    sys.path = new_paths

    bindir = os.path.dirname(os.path.abspath(__file__))
    # We sort the precedence in a decending order since sys.path.insert(0, ...)
    # do the reversing.
    # Insert library folder
    sharedpath = os.path.join(bindir, '3rdparty', 'python3')
    sys.path.insert(0, sharedpath)


# preventing splunklib initialize an unexpected root handler
def setup_null_handler():
    logging.root.addHandler(logging.NullHandler())


def run_module(name):
    instance = __import__(name, fromlist=['main'])
    instance.main()

setup_python_path()
setup_null_handler()

Ссылки

...