воскресенье, 27 ноября 2022 г.

edgecenter/gcore certbot plugin

1) git clone https://github.com/G-Core/gcore-dns-certbot-plugin

2) https://accounts.edgecenter.ru/profile/api-tokens

и добавляем токен, на данный момент достаточно уровня User

3) cd gcore-dns-certbot-plugin

vim gcore.ini

# G-Core API token used by Certbot
dns_gcore_apitoken = 000xxx

4) 

sed -i'' -e 's/gcorelabs.com/edgecenter.ru/g' certbot_dns_gcore/api_gcore.py

ИЛИ

dns_gcore_api_url = https://api.edgecenter.ru
5) получаем
certbot certonly --authenticator dns-gcore --dns-gcore-credentials=./gcore.ini -d 'example.com'

6) продлеваем
certbot renew --authenticator dns-gcore --dns-gcore-credentials=./gcore.ini

вторник, 8 ноября 2022 г.

Особенности работы с python-netbox

 Речь о той версии, которая pip install python-netbox (потому что их несколько)

Держим под рукой доку https://demo.netbox.dev/api/docs/ (можно на свой ипам открыть, /api/docs)

понедельник, 31 октября 2022 г.

Netbox в докере

 Как быстро запустить нетбокс в докере?

docker run -ti netboxcommunity/netbox

Но... оно не запустится. Потому что базы нет. И редиса, по хорошему. И конфигов..

Поэтому правильнее так

git clone -b release https://github.com/netbox-community/netbox-docker.git

Далее читаем про docker-compose.override.yml - в частности, нужно настроить правильный проброс портов nginx, это есть в доке

https://hub.docker.com/r/netboxcommunity/netbox

оно же

https://github.com/netbox-community/netbox-docker

И

docker-compose pull
docker-compose up

пятница, 28 октября 2022 г.

Парсинг сайтов через selenium

Скрейпинг сайтов с помощью библиотеки Selenium

Парсинг сайтов через python+bs4

 Понадобилось распарсить сайт хецнера для netbox, выбор пал на python+bs4

from bs4 import BeautifulSoup

import requests

Подключение, парсинг
 >>> r = requests.get('https://robot.hetzner.com/server/index/page/'+str(page), cookies=cookies)
>>> parsed = BeautifulSoup(page, "html.parser")

А теперь сами запросы

>>> print(parsed.head.title)

<title>Hetzner Online GmbH - Robot</title>

Вроде, несложно. Глянем заголовки meta

>>> print(parsed.head.meta)

<meta content="width=device-width, initial-scale=1, shrink-to-fit=no" name="viewport"/>

И.. всё? Бага, их там много. Но нужно запросить через find_all

>>> parsed.find_all('meta')

Выберет меты по всей доке и выдаст массивом. Также, можно например так найти див с классом box_wide

>>> servers = parsed.findAll('div', class_='box_wide')

Можно запросить поле из тэга, например - итог запроса выше присвоили переменной и дальше через for server in servers при такой записи тэга <div class="box_wide" id="555">

>>> server.get('id')

будет 555
Далее, есть такая конструкция
              <td class="title server_article">
               <span class="tooltip_underline jquery-tooltip" tooltip="This server includes unlimited traffic.">
                PX61-SSD #555
               </span>
значение "внутри" тэгов span читается через .string (или .text), например так
server.find('td', class_='server_name').find('span').string

Есть ещё такой вариант
server.find_all('span', class_='tooltip_underline jquery-tooltip')

но в данном случае будет 3 таких поля и нужно выделить нужный номер

Вообще, таблички лучше парсить через тот же pandas или на худой конец HTMLTableParser

Также, можно извратиться так
>>> parsed.find_all('table')[3].tr.td.span.string
и это даже будет работать, но читаемость - сами понимаете. Ну и чуть изменят поля и привет, поэтому лучше find_all (или findAll, что одно и то же)

links
https://www.crummy.com/software/BeautifulSoup/bs4/doc/ - тут есть всё нужное, но читать - много.


четверг, 15 сентября 2022 г.

mysql - некоторые хитрости

 Задача - скопировать таблицы из одной базы в другую, поменяв имя таблиц (добавить префикс). Можно сделать через mysqldump | sed | mysql, а можно так:

Первое заполнение можно сделать примерно так

SELECT concat('CREATE TABLE maindb.', TABLE_NAME, ' LIKE tmpdb.', TABLE_NAME, ';') FROM information_schema.TABLES  WHERE TABLE_SCHEMA = 'tmpdb';

SELECT concat('INSERT INTO maindb.', TABLE_NAME, ' SELECT * FROM tmpdb.', TABLE_NAME, ';') FROM information_schema.TABLES  WHERE TABLE_SCHEMA = 'tmpdb';

Но.. надо сохранить вывод в файл (например через mysql -b -e '...' > tmp.sql) и выполнить, а можно прямо в консоли mysql, будет дальше.

Без временного файла это будет выглядеть так

T1=$(mysql -b -s -r -e "SELECT concat('CREATE TABLE maindb.prefix_', TABLE_NAME, ' LIKE tmpdb.', TABLE_NAME, ';') FROM information_schema.TABLES  WHERE TABLE_SCHEMA = 'tmpdb';")

mysql -e "$T1"

T2=$(mysql -b -s -r -e "SELECT concat('INSERT INTO maindb.prefix_', TABLE_NAME, ' SELECT * FROM tmpdb.', TABLE_NAME, ';') FROM information_schema.TABLES  WHERE TABLE_SCHEMA = 'tmpdb';")

mysql -e "$T2"

Но, заполнили первый раз базу, обновляем - а теперь нужно сначала удалить все старые таблицы.

https://phoenixnap.com/kb/mysql-drop-table

(нюанс: мария 10.5 - не работает select * FROM information_schema.tables WHERE @schema = database();  - нужно убрать @schema = database(); )



вторник, 30 августа 2022 г.

Очередной косяк убунты

 За что я ненавижу убунту...

Ubuntu 21.10 - это далеко не EoL.

apt update

E: The repository 'http://archive.ubuntu.com/ubuntu impish Release' does not have a Release file.

N: Updating from such a repository can't be done securely, and is therefore disabled by default.

N: See apt-secure(8) manpage for repository creation and user configuration details.

E: The repository 'http://archive.ubuntu.com/ubuntu impish-updates Release' does not have a Release file.

N: Updating from such a repository can't be done securely, and is therefore disabled by default.

N: See apt-secure(8) manpage for repository creation and user configuration details.

E: The repository 'http://archive.ubuntu.com/ubuntu impish-security Release' does not have a Release file.

N: Updating from such a repository can't be done securely, and is therefore disabled by default.

N: See apt-secure(8) manpage for repository creation and user configuration details.

E: The repository 'http://archive.ubuntu.com/ubuntu impish-backports Release' does not have a Release file.

N: Updating from such a repository can't be done securely, and is therefore disabled by default.

N: See apt-secure(8) manpage for repository creation and user configuration details.

Нужно править /etc/sources.list и менять там какую-то ботву. В не-еол продукте! В той же центоси такой маразм начиная с 5 версии приходилось делать ровно 0 раз. А тут года не прошло. Уроды криворукие.

понедельник, 29 августа 2022 г.

про серты LE

 Для большинства баян, но.. если стоит очень старая система и не принимает даже валидные LE серты

curl: (60) SSL certificate problem: certificate has expired

sudo apt install -y ca-certificates
sudo sed -i '/^mozilla\/DST_Root_CA_X3.crt$/ s/^/!/' /etc/ca-certificates.conf
sudo update-ca-certificates

https://stackoverflow.com/questions/69408776/how-to-force-older-debian-to-forget-about-dst-root-ca-x3-expiration-and-use-isrg

воскресенье, 28 августа 2022 г.

2 возможные проблемы с rsyslogd в debian

 Это конечно не всё, но что было недавно актуально для меня:

1) привыкли что rsyslog работает от syslog:adm и есть скрипты, которые хотят юзера rsyslog? Забудьте, в дебе в отличие от убунты оно работает от рута. Можно добавить руками юзера (useradd -r -s /usr/sbin/nologin -g adm syslog)

А можно поставить убунту версию, где эта проблема решена изначально

deb http://ppa.launchpad.net/adiscon/v8-stable/ubuntu bionic main

2) apparmor испортит жизнь, если нужны логи не в стандартном месте.

https://documentation.suse.com/sles/15-SP1/html/SLES-all/cha-apparmor-profiles.html

Можно отключить профиль в аппармор

apt install apparmor-utils

aa-disable usr.sbin.rsyslogd

Можно добавить нужные папки в /etc/apparmor.d/local/usr.sbin.rsyslogd

и перечитать профиль



вторник, 23 августа 2022 г.

среда, 17 августа 2022 г.

Монтирование тома с дисками в систему

 Допустим, есть KVM машина, у которой проблемы с запуском/доступом.

Если диски подключены через LVM то:

1) ОБЯЗАТЕЛЬНО - остановить машину (virsh destroy ...)

2) # kpartx -av /dev/VG1/kvm001_system

3) в /dev/mapper появятся диски типа /dev/mapper/kvm001_system1

можно просто примонтировать руками нужный подраздел 

mount /dev/mapper/kvm001_system1 /mnt

4) потом umount

5) # kpartx -dv /dev/VG1/kvm001_system

Машину можно стартовать.

Если пишем в файлы - технология будет похожа.

Нюанс есть у нас "лвм в лвм", тогда после kpartx -av делаем lvscan и vgchange -ay ...

А для отключения - наоборот, сначала vgchange -an ...; kpartx -dv ...; pvscan 


Можно извратиться, вычислить смещения и 

sudo mount -o loop,offset=1048576 centos6.img /mnt/centos6

Также есть guestmount 

воскресенье, 17 июля 2022 г.

gitlab cicd vs github actions

 Изначально gitlab-ci делался максимально простым, поэтому он лёгок в изучении, но почти всё - делается чем-то внешним. В частности, очень многие его интегрируют с ansible и аналогами.

github actions чуть интереснее, пример знакомства

GitHub Actions Tutorial - Basic Concepts and CI/CD Pipeline with Docker

Нужно учитывать что actions это не только ci/cd.

А ещё мне оно очень напоминает jenkins pipelines.

пятница, 22 апреля 2022 г.

Немного про VPN

 Сейчас для многих весьма остро стоит вопрос с доступом к ряду ресурсов, и приходится покупать/поднимать впн.

Мне больше всего импонирует SSTP - штатно умеют все основные операционки, но с мобилами вопрос.

Можно взять openvpn - но настройка через консоль отпугивает многих, а openvpn-ce платный от 3+ коннектов. Правда, нашлась админка от Flant - https://github.com/flant/ovpn-admin/

Ещё вариант - WireGuard

Пошаговая инструкция по настройке Wireguard VPN + DNSCrypt + DNS server (Unbound) + Pihole

Всякие pptp, l2tp, ipsec (ike) не рассматриваем - их очень легко обнаружить и заблокировать, верх "удобства" - gre.

про настройку phpmyadmin

 Тема довольно старая, и по возможности вообще не надо его ставить (лучше хоть workbench взять, он умеет даже ssh тоннель сам поднять, чтобы 3306 в мир не открывать), но если пришлось - лучше уделить ему внимание. И речь не о простой установке, с ней всё только начинается...

hardening phpmyadmin

В 2 строки (самое типовое и "глупое" решение)
auth_basic "Admin Login";
auth_basic_user_file /etc/nginx/pma_pass;

Наиболее полная дока которую удалось найти:

https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-phpmyadmin-with-nginx-on-an-ubuntu-20-04-server

В этой доке есть даже такие вещи как проброс порта через ssh! (правда, в разрезе открытия админки только на внутренние адреса и доступ по такому тоннелю, что тоже сильно повышает безопасность)

ЗЫ про настройку через сокет:

https://eternalhost.net/base/vps-vds/nginx-ustanovka-phpmyadmin-ubuntu

среда, 6 апреля 2022 г.

четверг, 24 марта 2022 г.

Небольшая памятка по доменам и ссл

 Вроде неплохой вариант по ценам на домены

https://active.domains/domains/

И поскольку большинство ссл регистраторов отказались от РФ, нужно искать регистраторов GlobalSign. Терпимый вариант:

https://www.reg.ru/ssl-certificate/GlobalSign/

суббота, 19 марта 2022 г.

metabase in ubuntu

https://computingforgeeks.com/how-to-install-metabase-with-systemd-on-ubuntu/

sudo apt install -y default-jdk

sudo apt install mariadb-server mariadb-client

https://computingforgeeks.com/how-to-install-mariadb-on-ubuntu-lts-linux/

Для удобства делаем старт и управление через сервис systemd

После настройки добавляем нужные базы как дополнительные источники.

Так же, для безопасности (SSL) и удобства работы ставим nginx и примерно такое

# sample nginx.conf # proxy requests to Metabase instance server { listen 80; listen [::]:80; server_name your.domain.com; location / { proxy_pass http://127.0.0.1:3000; } }

https://www.metabase.com/docs/latest/operations-guide/running-metabase-on-debian.html

пятница, 4 марта 2022 г.

Очень важное преимущество своего геокластера перед облаками

 Очень важное преимущество своего геокластера перед облаками -- это... надёжность. Как бы ни было надёжно облако, однажды их владелец может сказать "мы больше не хотим работать с вашей страной", и просто всё удалить. Имеют право, обычно это прописано в условиях использования. И даже возможна ситуация, что сша поссорится с ес - и для всей ес минус амазон и оракл. 

В этом плане значительно надёжнее классическое "несколько независимых датацентров на независимых людей из разных стран" -- и ТАКОЕ убить будет крайне сложно. "кококо нужны админы" -- зато другие риски гораздо меньше.

Уточнение: если что, есть ещё китайское облако,  alicloud. Они пока не собирались ничего разрывать.

Такие дела.

вторник, 8 февраля 2022 г.

Замена для elasticsearch

 Как мне стало известно, эластик для включения SSO хочет денег (доступно только на ОЧЕНЬ платных тарифах), плюс всё больше добавляет телеметрии. И как мне сказали, с версии 7.12 убран функционал плагинов так, что сломалось многое, включая сторонние реализации SSO. 

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

https://www.infoq.com/news/2021/04/amazon-opensearch/

https://venturebeat.com/2021/07/13/amazons-elasticsearch-fork-opensearch-hits-prime-time/

Бонусом оказывается эластик стал менять лицензии на закрытые. "Жадность фраера сгубила". И теперь есть настоящий, вменяемый форк, с правильной версии, с правильными лицензиями, без лишней телеметрии и прочего жадного мусора.

Впрочем, не ёлкой единой. И если у logstash существует тьма замен (filebeat, journalbeat, fluentbit/fluentd, итд), то с эластиком сложнее. Хотя "слабое звено" в данном случае не эластик а кибана и нужно искать замену ей.

Использование Clickhouse в качестве замены ELK, Big Query и TimescaleDB

Чем заменить ELK для просмотра логов?


https://aws.amazon.com/ru/blogs/opensource/introducing-opensearch/