Для работы с Mariadb в скриптах python можно использовать модуль python mariadb.
Установку данного модуля необходимо проводить, если в системе уже установлен python3 и mariadb.
Перед установкой самого модуля нужно установить рекомендованные пакеты:
# sudo yum install pip
# sudo yum install python3-devel
# sudo yum install openssl
Затем необходимо установить репозитарий "CS Package Repository"
# wget https://r.mariadb.com/downloads/mariadb_repo_setup
# sudo ./mariadb_repo_setup
Из установленного репозитария, установить драйвер «MariaDB Connector/C»
# sudo yum install MariaDB-shared MariaDB-devel
Теперь можно наконец-то установить сам модуль mariadb:
# pip install mariadb
Скрипт установки репозитария можно удалить:
# rm -f mariadb_repo_setup
Для использования модуля mariadb файл
import mariadb
import sys
# Установка соединения:
try:
conn = mariadb.connect(
host="10.10.10.1",
port=3306,
user="user1",
password="password1",
database="db1")
cur = conn.cursor()
except mariadb.Error as e:
print(f"Error connecting to the database: {e}")
sys.exit(1)
# Запрос данных:
try:
cur.execute("SELECT ids, ne_name FROM nes LIMIT 10")
except mariadb.Error as e:
print(f"Error: {e}")
# Вывод данных:
for ids, ne_name in cur:
print(f"ids: {ids}, ne_name: {ne_name}")
"""
Вывод будет в таком виде:
ids: 14, ne_name: SMA-UKGD-R1
ids: 15, ne_name: SMA-UKGD-S1
ids: 16, ne_name: SMA-Avr150-S1
...
"""
print(cur.fetchall())
"""
Вывод будет в таком виде:
[(14, 'SMA-UKGD-R1'), (15, 'SMA-UKGD-S1'), (16, 'SMA-Avr150-S1')...]
"""
Вывод данных в виде ассоциативного массива:
cur = conn.cursor(dictionary=True)
try:
cur.execute("SELECT ids, ne_name FROM nes LIMIT 10")
except mariadb.Error as e:
print(f"Error: {e}")
result = cur.fetchall()
for x in result:
print(x)
"""
Вывод будет в таком виде:
{'ids': 14, 'ne_name': 'SMA-UKGD-R1'}
{'ids': 15, 'ne_name': 'SMA-UKGD-S1'}
{'ids': 16, 'ne_name': 'SMA-Avr150-S1'}
...
"""
# Закрытие соединения
conn.close()
понедельник, 13 мая 2024 г.
среда, 24 апреля 2024 г.
Docker compose. Запуск контейнеров при старте операционной системы
Воспользуемся systemd для запуска контейнеров при старте системы.
Для этого создадим юнит systemd:
# nano /etc/systemd/system/docker-compose-app.service
Содержимое файла:
[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/docker compose -f /home/korolev/app-dev/docker-compose.yml up -d
ExecStop=/usr/bin/docker compose -f /home/korolev/app-dev/docker-compose.yml down
TimeoutStartSec=0
Restart=on-failure
[Install]
WantedBy=multi-user.target
В конфигурации предполагается, что разработка идет в директории
Рестартуем демон systemd:
# systemctl daemon-reload
И запускаем docker compose как службу:
# systemctl start docker-compose-app
# systemctl enable docker-compose-app
Для этого создадим юнит systemd:
# nano /etc/systemd/system/docker-compose-app.service
Содержимое файла:
[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/docker compose -f /home/korolev/app-dev/docker-compose.yml up -d
ExecStop=/usr/bin/docker compose -f /home/korolev/app-dev/docker-compose.yml down
TimeoutStartSec=0
Restart=on-failure
[Install]
WantedBy=multi-user.target
В конфигурации предполагается, что разработка идет в директории
/home/korolev/app-dev/
Рестартуем демон systemd:
# systemctl daemon-reload
И запускаем docker compose как службу:
# systemctl start docker-compose-app
# systemctl enable docker-compose-app
воскресенье, 21 апреля 2024 г.
Статические маршруты в NetworkManager. Ошибка Unable to save connection: Cannot modify a connection that has an associated rule- or rule6- file
В новых версия Linux управление сетевой конфигурацией выполняется специальной службой - NetworkManager.
Ранее в старых версиях Linux служба «network» в своей работе опиралась на конфигурационные файлы, расположенные в каталоге
/etc/sysconfig/network-scripts/
Теперь служба «NetworkManager» опирается на конфигурационные файлы в каталоге
/etc/NetworkManager/system-connections/,
В следующем окне выбираем сетевой интерфейс, переходим вправо и выбираем действие «Edit...» (Можно просто выбрать интерфейс и нажать Enter).
После применения изменений по кнопке «OK», окно редактирования маршрутов должно закрыться и мы должны попасть обратно в панель редактирования настроек интерфейса. Перемещаемся по этому окну до кнопки «OK», нажимаем Enter. Затем в разделе меню выбора интерфейса перемещаемся на кнопку «Back...» и выходим в в основное меню утилиты nmtui. Тут выбираем раздел «Quit» и выходим в консоль.
Для применения настроек нужно выполнить перезапуск службы NetworkManager
# systemctl restart NetworkManager
Статический маршрут пропишется в файл
/etc/NetworkManager/system-connections/<ИМЯ_ИНТЕРФЕЙСА>.nmconnection
Проcмотр правил маршрутизации:
# ip route
default via 10.10.49.254 dev ens18 proto static metric 100
10.10.49.0/24 dev ens18 proto kernel scope link src 10.10.49.166 metric 100
10.200.5.216 via 10.10.49.254 dev ens18 proto static metric 100
Для удаления статического маршрута, нужно опять запустить псевдографический интерфейс nmtui, зайти в раздел конфигурации нужного интерфейса, перейти в раздел «Routing», выбрать не нужный маршрут и применить команду «Remove». После этого выйти из программы nmtuui и перезапустить NetworkManager
# systemctl restart NetworkManager
Из файла /etc/NetworkManager/system-connections/<ИМЯ_ИНТЕРФЕЙСА>.nmconnection
статический маршрут пропадет, но команда ip route по прежнему будет отображать этот удаленный маршрут.
Для того что бы удалить маршрут окончательно нужно или применить команду удаления
# ip route del 10.10.49.0/24 dev ens18
Или перезапустить сетевой интерфейс вот так, чтобы не потерять управление:
# nmcli connection down enp0s3 && nmcli connection up enp0s3
В данном случае enp0s3 – это имя интерфейса.
Ну или можно просто перезагрузиться.
Если в Linux работает старая версия службы управления сетью «network», которая использует скрипты в директории /etc/sysconfig/network-scripts/, в случае добавления статического маршрута через nmtui мы получим ошибку «Unable to save connection: Cannot modify a connection that has an associated ‘rule-’ or ‘rule6-’ file». Это говорит о том, что NetworkManager не может выполнить изменение информации в файлах, лежащих в директории /etc/sysconfig/network-scripts/, а в этих директориях как раз есть что-то нужное для маршрутизации (например, правила маршрутизации в файле /etc/sysconfig/network-scripts/rule-eth1). Данное поведение не считается ошибкой (см https://bugzilla.redhat.com/show_bug.cgi?id=1384799), а говорит о том, что изменение файлов /etc/sysconfig/network-scripts/rule-* и /etc/sysconfig/network-scripts/route-* не поддерживается функционалом NetworkManager.
В этом случае можно пойти следующими путями:
1) Добавлять статические маршруты через редактирование файла
/etc/sysconfig/network-scripts/route-<ИМЯ_ИНТЕРФЕЙСА>
Пример записи в файле:
default via 10.11.90.54 table eth0
10.11.0.0/24 via 10.11.90.16
После изменения файла нужно перезагрузить службу «network»
# systemctl restart network
2) Отказаться от службы «network» и перейти на NetworkManager полностью.
# systemctl stop network
# systemctl disable network
# systemctl enable NetworkManager
В этом случае (в случае использования полностью NetworkManager) так же рекомендуется использовать службу NetworkManager-dispatcher, которая предназначена для отлова событий в системе, таких как падение или поднятие интерфейса. После наступления подобного события, связанного с сетью, благодаря службе NetworkManager-dispatcher будет запускаться скрипт из директории /etc/NetworkManager/dispatcher.d/, связанный с этим событием. Например, после поднятия интерфейса eth2, будет автоматически монтироваться шара по NFC.
Запуск службы NetworkManager-dispatcher:
# systemctl start NetworkManager-dispatcher
# systemctl enable NetworkManager-dispatcher
У NetworkManager-dispatcher есть расширение NetworkManager-dispatcher-routing-rules, которое может использовать в скриптах диспетчера старые правила описанные в файлах
/etc/sysconfig/network-scripts/route-*
/etc/sysconfig/network-scripts/rule-*
и прописывать маршруты на основе этих правил при событиях up и down интерфейсов
Установка этого расширения:
# yum makecache
# yum -y install NetworkManager-dispatcher-routing-rules
Ранее в старых версиях Linux служба «network» в своей работе опиралась на конфигурационные файлы, расположенные в каталоге
/etc/sysconfig/network-scripts/
Теперь служба «NetworkManager» опирается на конфигурационные файлы в каталоге
/etc/NetworkManager/system-connections/,
а также на скрипты, расположенные в директории
/etc/NetworkManager/dispatcher.d/
Для добавления статического маршрута в NetworkManager можно воспользоваться удобной псевдографической утилитой «nmtui»
# nmtui
После запуска утилиты мы видим меню для работы с сетевыми соединениями. Выбираем «Edit a connection» и нажимаем Enter
Для добавления статического маршрута в NetworkManager можно воспользоваться удобной псевдографической утилитой «nmtui»
# nmtui
После запуска утилиты мы видим меню для работы с сетевыми соединениями. Выбираем «Edit a connection» и нажимаем Enter
В следующем окне выбираем сетевой интерфейс, переходим вправо и выбираем действие «Edit...» (Можно просто выбрать интерфейс и нажать Enter).
После применения изменений по кнопке «OK», окно редактирования маршрутов должно закрыться и мы должны попасть обратно в панель редактирования настроек интерфейса. Перемещаемся по этому окну до кнопки «OK», нажимаем Enter. Затем в разделе меню выбора интерфейса перемещаемся на кнопку «Back...» и выходим в в основное меню утилиты nmtui. Тут выбираем раздел «Quit» и выходим в консоль.
Для применения настроек нужно выполнить перезапуск службы NetworkManager
# systemctl restart NetworkManager
Статический маршрут пропишется в файл
/etc/NetworkManager/system-connections/<ИМЯ_ИНТЕРФЕЙСА>.nmconnection
Проcмотр правил маршрутизации:
# ip route
default via 10.10.49.254 dev ens18 proto static metric 100
10.10.49.0/24 dev ens18 proto kernel scope link src 10.10.49.166 metric 100
10.200.5.216 via 10.10.49.254 dev ens18 proto static metric 100
Для удаления статического маршрута, нужно опять запустить псевдографический интерфейс nmtui, зайти в раздел конфигурации нужного интерфейса, перейти в раздел «Routing», выбрать не нужный маршрут и применить команду «Remove». После этого выйти из программы nmtuui и перезапустить NetworkManager
# systemctl restart NetworkManager
Из файла /etc/NetworkManager/system-connections/<ИМЯ_ИНТЕРФЕЙСА>.nmconnection
статический маршрут пропадет, но команда ip route по прежнему будет отображать этот удаленный маршрут.
Для того что бы удалить маршрут окончательно нужно или применить команду удаления
# ip route del 10.10.49.0/24 dev ens18
Или перезапустить сетевой интерфейс вот так, чтобы не потерять управление:
# nmcli connection down enp0s3 && nmcli connection up enp0s3
В данном случае enp0s3 – это имя интерфейса.
Ну или можно просто перезагрузиться.
Если в Linux работает старая версия службы управления сетью «network», которая использует скрипты в директории /etc/sysconfig/network-scripts/, в случае добавления статического маршрута через nmtui мы получим ошибку «Unable to save connection: Cannot modify a connection that has an associated ‘rule-’ or ‘rule6-’ file». Это говорит о том, что NetworkManager не может выполнить изменение информации в файлах, лежащих в директории /etc/sysconfig/network-scripts/, а в этих директориях как раз есть что-то нужное для маршрутизации (например, правила маршрутизации в файле /etc/sysconfig/network-scripts/rule-eth1). Данное поведение не считается ошибкой (см https://bugzilla.redhat.com/show_bug.cgi?id=1384799), а говорит о том, что изменение файлов /etc/sysconfig/network-scripts/rule-* и /etc/sysconfig/network-scripts/route-* не поддерживается функционалом NetworkManager.
В этом случае можно пойти следующими путями:
1) Добавлять статические маршруты через редактирование файла
/etc/sysconfig/network-scripts/route-<ИМЯ_ИНТЕРФЕЙСА>
Пример записи в файле:
default via 10.11.90.54 table eth0
10.11.0.0/24 via 10.11.90.16
После изменения файла нужно перезагрузить службу «network»
# systemctl restart network
2) Отказаться от службы «network» и перейти на NetworkManager полностью.
# systemctl stop network
# systemctl disable network
# systemctl enable NetworkManager
В этом случае (в случае использования полностью NetworkManager) так же рекомендуется использовать службу NetworkManager-dispatcher, которая предназначена для отлова событий в системе, таких как падение или поднятие интерфейса. После наступления подобного события, связанного с сетью, благодаря службе NetworkManager-dispatcher будет запускаться скрипт из директории /etc/NetworkManager/dispatcher.d/, связанный с этим событием. Например, после поднятия интерфейса eth2, будет автоматически монтироваться шара по NFC.
Запуск службы NetworkManager-dispatcher:
# systemctl start NetworkManager-dispatcher
# systemctl enable NetworkManager-dispatcher
У NetworkManager-dispatcher есть расширение NetworkManager-dispatcher-routing-rules, которое может использовать в скриптах диспетчера старые правила описанные в файлах
/etc/sysconfig/network-scripts/route-*
/etc/sysconfig/network-scripts/rule-*
и прописывать маршруты на основе этих правил при событиях up и down интерфейсов
Установка этого расширения:
# yum makecache
# yum -y install NetworkManager-dispatcher-routing-rules
Подписаться на:
Сообщения (Atom)