пятница, 13 декабря 2024 г.

metabase: Database has migration lock (с h2 базой), в докере

 При обновлении метабазы можно поймать

INFO db.liquibase :: Database has unrun migrations. Checking if migration lock is taken... metabase | 2024-12-11 13:50:58,579 WARN util.jvm :: auto-retry metabase.db.liquibase$wait_for_migration_lock$fn__45690@5bfa25f0: Database has migration lock; cannot run migrations. You can force-release these locks by running `java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar migrate release-locks`.

Фикс (блоком кода)

docker compose down docker ps # обязательно проверяем, что нет лишних запусков, иначе всё сломается docker compose run -ti --entrypoint /bin/bash metabase cd /app #### Обязательно указать валидный файл, иначе просто создаст новую базу. Путь тоже именно такой, иначе создаст metabase.db.mv.db.mv.db export MB_DB_TYPE=h2 export MB_DB_FILE=/metabase.db/metabase.db java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar migrate release-locks java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar migrate up ### Обязательно выходить через exit 0, иначе контейнер будет пытаться рестартоваться exit 0

и дальше штатный запуск

понедельник, 9 декабря 2024 г.

openmediavault + zfs

 В китае был куплен комп на N100 под небольшой домашний NAS, и по мере изучения было решено "а чего бы не изучить openmediavault". Добавлен второй диск (обычный sata на 2Тб, механика), поставлен omv. Из коробки вообще довольно много занятного, включая поддержку k8s, podman.

Но захотелось добавить zfs, штатно его нет, нагуглилось что нужен https://wiki.omv-extras.org/. Только оказалось, что он не открывается из РФ, будто это кому-то сделает плохо (нет). 2 минуты, тор браузер, выкушена строка установки по адресу

https://raw.githubusercontent.com/OpenMediaVault-Plugin-Developers/packages/master/install :

wget -O - https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/install | bash

И.. всё появляется.

Можно через веб, система - плагины - в поиск zfs, можно прямо в консоли

apt install -y openmediavault-zfs

Далее обновляем веб интерфейс и хранилище - zfs - pools - создать, можно отдать просто диск/раздел (предварительно надо будет очистить), можно например lvm том отдать. 

Единственное, "создать раздел" у меня не получилось, если прямо на физический диск делать пул, принимает или lvm, или диск целиком..

вторник, 3 сентября 2024 г.

вторник, 20 августа 2024 г.

про обновления Dell

 > Firmware update with iDRAC fail with RED007: Unable to verify Update Package signature.

Такое можно поймать, если вообще забили на обновления и idrac версии типа 2.21.21.21 (актуальная 86)

Pre 2.40.x.x_xx version -> 2.40.40.40_A00 -> 2.63.60.61_A00 -> 2.70.70.70_A00 -> 2.84.84.84_A00 […]

https://www.itechlounge.net/2024/06/servers-firmware-update-with-idrac-fail-with-red007-unable-to-verify-update-package-signature/

Пакеты Dell Update Package (DUP) iDRAC7 и iDRAC8 больше не содержат цифровых подписей SHA-1. Это изменение DUP было введено в микропрограмме iDRAC 2.61.60.60 и более поздних версиях. В iDRAC7 и iDRAC8 версии 2.40.40.40 или более поздних версий добавлена поддержка проверки подписей SHA256. iDRAC должен работать под управлением одной из следующих версий для поддержки полезных нагрузок SHA-256 DUP с помощью обновлений по дополнительному каналу.

(с трусливо сбежавшего сайта делл)

И момент: если старый драк то при попытке войти можно получить ошибку

sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: denyAfter constraint check failed: SHA1 used with Constraint date: Tue Jan 01 01:00:00 CET 2019 [...]

https://support.hcltechsw.com/csm?id=kb_article&sysparm_article=KB0101395

Нужно обновить драк и/или выполнить фикс в конфиге по примеру из линка (удалить SHA1 usage SignedJAR & denyAfter 2019-01-01)

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

ansible: ограничить количество одновременных хостов

 Штатно, ansible катит по 5 хостов за раз. Но бывает нужно как больше, так и меньше, например если мы катим какой-то сервис, то одновременный перезапуск всех инстансов сразу -- это проблема (всякие canary deploy и прочее опустим, тут другой инструмент). Вообще, раньше работала опция --forks=10 (и --forks=1 тоже), в 2.9 уже не работает. Но есть второе решение, очень неочевидное если не знать об этом: serial

Можно указывать как штуки, так и проценты.

вторник, 6 августа 2024 г.

angie+grafana

https://angie.software/configuration/grafana/

1) проверить, что есть

include prometheus_all.conf;

2) добавить блок для статов (и лучше вообще на отдельный порт, с этим работать проще)

    location =/p8s {
        prometheus all;
    }

! Нюанс: если данная лока смотрит не на локалхост, обязательно или добавить авторизацию, или конструкцию вида

allow 127.0.0.1;
allow 192.168.0.0/16;
deny all;

3) в prometheus

scrape_configs:
  - job_name: "angie"
    scrape_interval: 15s
    metrics_path: "/p8s"
    static_configs:
      - targets: ["192.168.1.100:80"]

4) в графану добавляем график 20719

PS Если нужно просто смотреть статы одной ноды, графана не нужна:

https://angie.software/configuration/monitoring/

ставим Console Light пакет, несколько строк конфига, и будет https://console.angie.software/

четверг, 11 июля 2024 г.

mysql медленная репликация

 Бывает что слейв начинает отставать от мастера, поскольку на слейве репликация прокатывается в один поток. И тут помогает (для mariadb):

https://mariadb.com/kb/en/parallel-replication/

Впрочем, был подсказан ещё вариант, менее надёжный, более быстрый (на слейве):

SET GLOBAL sync_binlog = 0; SET GLOBAL  innodb_flush_log_at_trx_commit = 0;

суббота, 15 июня 2024 г.

Компактные домашние NAS

 Требования (мои) к компактному, домашнему хранилищу:

1) размеры, все коробки даже под 3.5" достаточно большие

2) поддержка m.2

3) достаточная тишина

4) полностью готовое, условный запуск в работу - максимум 10 минут от момента распаковки.

5) минимум обслуживания

6) для дома означает разумный бюджет, synology тут вообще никаким боком, разве что ежедневно мониторить авито на предмет того ds126 + не соответствие п.1 по размеру. Туда же всякие asustor

Да, есть rpi + всякие модули, типа radxa hat или вообще usb to sata конвертер или внешний сата диск, очень кастом, но требует много времени и сил - отпадает по п.4. Как и клоны rpi с набортным m.2 слотом по той же причине. Да, там много решений, но смотрим п.4 + п.5 + п.6

Что же в принципе есть?

KubeSail + pibox, под 2.5" SSD, на базе raspbian CM4, что даёт много возможностей, и да, из коробки k3s. Можно просто на свой rpi поставить pibox. Но проект выглядит полузаброшенным, а купить в рф очень проблемно

ORICO CD2510. Утилита управления называется weline, есть на телефоны.

NasCloud Angel 1 - размер минимален, но дисков не содержит вообще, как и места под них, то есть подключать надо по usb.

Да и как-то всё... дополню если что-то адекватное ещё найду.

ЗЫ был найден orico за 6к и он и был взят.

среда, 5 июня 2024 г.

ansible, docker, Error connecting: Error while fetching server API version: Not supported URL scheme http+docker

 FAILED! => {"changed": false, "msg": "Error connecting: Error while fetching server API version: Not supported URL scheme http+docker"}

фикс

pip install requests==2.31.0

https://github.com/docker/docker-py/issues/3256

что-то не первый раз косяк с этим requests

понедельник, 3 июня 2024 г.

amazon aws s3 - path styles

https://community.aws/content/2biM1C0TkMkvJ2BLICiff8MKXS9/format-and-parse-amazon-s3-url

Суть:

есть масса форматов путей у S3, включая особенности про дефолтный регион (вне его такое не работает) - и просто не прочитав про это, можно долго думать что не так.

Если используется амазон и S3 - читать обязательно.

суббота, 1 июня 2024 г.

Форк nginx без маразма: встречаем angie

 Оказывается, существует форк nginx: angie

Суть проблемы: nginx (почти) остановился в развитии, вкладывая основные силы в nginx plus, и масса нужных вещей, таких как предварительный опрос апстримов, толковая работа балансировки, статистика не в 3 строчки, нативные экспортеры в тот же node_exporter - извольте платить (есть несколько вариантов типа VTS, но разработчикам не нравится что их жадность обходят и не рекомендуют такое). 

ЦЕНА. Тут они вообще поехали крышей, "Стоимость Nginx Plus составляет от $2500 до $5000" - в год. На каждый сервер. пример (учесть что это за 2 года). Даже западные мастодонты типа оракла более адекватные. Вообще никому не советую брать плюс. Если выкинуть поддержку 24/7 - цена этой лицензии баксов 100 максимум, тогда можно рассмотреть.

Но. Теперь можно просто перейти на angie, и сразу видим

То есть минус VTS, полностью

  • Режим привязки сессий, при котором все запросы в рамках одной сессии будут направляться на один и тот же проксируемый сервер.

  • Механизм плавного ввода проксируемого сервера в работу после сбоя с помощью опции slow_start директивы server.

То есть уже большой кусок плюса - есть. Да, это далеко не всё (смотрим сайт про Энджи про), но именно мне перекинуты очень нужные вещи. При этом если открыть раздел динамические модули, есть и инструкция по переходу с nginx, и настройка prometheus и grafana.

К большому удивлению, даже vts есть из коробки, только непонятно зачем - это по сути экспортер prometheus.


четверг, 30 мая 2024 г.

Docker hub всё?

 Что имеем: Docker hub перестал работать в России

Кому интересно - в комменты, там много всего.

И небольшой итог:

1) поднимаем кэш

https://docs.docker.com/docker-hub/mirror/ (2)

2) настраиваем короткие пути

https://www.redhat.com/en/blog/be-careful-when-pulling-images-short-name

3) хельмчарт как пример

https://artifacthub.io/packages/helm/docker-registry-mirror/docker-registry-mirror

4) зеркала, но без пуша, писать в /etc/docker/daemon.json, ключ "registry-mirrors": [] (подобрать сами прокси) (https://mirror.gcr.io работает у большинства)


https://gallery.ecr.aws/

https://mirror.gcr.io

https://cloud.google.com/artifact-registry/docs/pull-cached-dockerhub-images

https://daocloud.io

https://c.163.com

https://registry.docker-cn.com

5) не забываем про /etc/containerd/config.toml

      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]

        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]

          endpoint = ["https://registry-1.docker.io", "https://mirror.gcr.io"]

Так штатно работает например docker pull nginx

(не забываем сказать systemctl reload docker.service, если не помогло то повторяем с restart)

понедельник, 20 мая 2024 г.

defunct процессы

 # ps -ef | grep defunct

sshd     2094514 2094513  0 Feb15 ?        00:00:00 [sshd] <defunct>

# ps auxww | grep ssh

root     2094513  0.0  0.1  16760  8652 ?        Ss   Feb15   0:00 sshd: unknown [priv]

sshd     2094514  0.0  0.0      0     0 ?        Z    Feb15   0:00 [sshd] <defunct>

Итак, что видим: defunct процесс (2094514) в Z state == zombie. Нужно прибить его родителя (2094513) и его отпустит, напрямую его прибить невозможно, даже с kill -9 2094514 ему ничего не будет.

вторник, 30 апреля 2024 г.

подбираем замену hashicorp vault

 В связи с неадекватностью фирмы hashicorp, творящей всякую дичь типа закрытия доступа с опенсорс (!) продуктам из рф, а также переходом на закрытые лицензии, для teraform уже есть замена opentofu, а теперь смотрим замену для vault

https://thenewstack.io/meet-openbao-an-open-source-fork-of-hashicorp-vault/

И это openbao

Впрочем, с запуском в докере/кубере там не так хорошо, если волт можно было запустить как

docker run --rm --cap-add=IPC_LOCK -e VAULT_ADDR=http://localhost:8200 -p 8200:8200 -d --name=dev-vault vault:1.2.2

то образа openbao/openbao на данный момент не существует, а их дока на попытку получить хельм даёт 404, что странно и печально, форк прошлого года.

суббота, 27 апреля 2024 г.

переход с supervisor на systemd

 Автоматический перезапуск решается штатно, через Restart=always или более правильное Restart=on-failure. Помним про дополнительные StartLimit* итд для постоянного рестарта при нескольких неудачах.

Вопрос сложнее - чем заменить numprocs из supervisor. Мне удалось найти только 1 вариант, через имя с @

https://unix.stackexchange.com/questions/288236/have-systemd-spawn-n-processes

Ну и логи иногда нужны в файлах, тогда есть

StandardOutput=/path_to_log/service.log

StandardError=/path_to_log/service_error.log

Может быть =syslog, тогда будет пойдёт через подсистему рсислога (+ SyslogIdentifier=)

Ну и помним про "костыль" вида ExecStart=aaa >/var/log/1 2>&1

четверг, 18 апреля 2024 г.

ansible: generate password

 ansible -m debug --args 'msg={{ lookup("password","/tmp/123") }}' localhost

Но перезапуск даст тот же пароль, это и хорошо и плохо, потому что в этот файл тоже запишет пароль. Сгенерить без следов:

ansible -m debug --args 'msg={{ lookup("password","/dev/null") }}' localhost


вторник, 16 апреля 2024 г.

переход с crontab на systemd timer

 Если вкратце:

1) делаем сервис с Type=OneShot

2) делаем таймер, который запускает этот сервис

Более подробно и примеры

https://opensource.com/article/20/7/systemd-timers

Строка запуска раз в минуту будет такой:

OnCalendar=*-*-* *:*:00

PS команда для быстрого создания сервиса без возни с файлами:

systemctl edit --full --force cron.service

systemctl edit --full --force cron.timer

водяное охлаждение для rpi5

 Вопрос, есть ли в этом смысл... А за такие деньги точно не имеет смыла. Хотя взять только водоблоков несколько, и комплект помпа-колба-радиатор_120 от того же barret - будет недорого.

https://www.seeedstudio.com/ICE-Pump-Cooling-Block-for-Raspberry-Pi-5-p-5865.html

https://aliexpress.ru/item/1005006517592568.html

https://52pi.com/products/ice-pump-cooling-system-for-raspberry-pi-5

https://www.jeffgeerling.com/blog/2024/water-cooling-overkill-pi-5



понедельник, 8 апреля 2024 г.

openmediavault

 openmediavault is the next generation network attached storage (NAS) solution based on Debian Linux. It contains services like SSH, (S)FTP, SMB/CIFS, RSync and many more ready to use.

https://www.openmediavault.org/

Можно поднять на rpi 5

https://www.youtube.com/watch?v=l30sADfDiM8

нужен Radxa Penta SATA HAT (прямой линк)

Можно ещё с Radxa ROCK * завести, но там другой комплект нужен скорее всего.. как минимум другой кабель к плате будет.

суббота, 30 марта 2024 г.

aws ec2: проблема входа по ключам

 Казалось бы, уже давно отработанный механизм с .ssh/authorized_keys в случае амазона ВДРУГ дал сбой. Вдруг - потому что ещё несколько лет назад этой ПРОБЛЕМЫ не было.

Смотрим /var/log/auth.log и видим там крайне сомнительные строки

AuthorizedKeysCommand /usr/share/ec2-instance-connect/eic_run_authorized_keys username SHA256:ecphulTPPp7xHnSCVkuQH2fcXemYKjT8xFftheRDz+s failed, status 22

Но секрет прост: кто-то "переиграл в безопасность" и

# apt show ec2-instance-connect

...

Description: Configures ssh daemon to accept EC2 Instance Connect ssh keys

 EC2 Instance Connect is a service that publishes ssh keys for use by EC2

 instances based on AWS Credentials. These keys are consumed by on-instance

 configuration provided by this package. The ssh daemon will query EC2

 Instance Metadata service for user-keys at ssh calltime, validate any if

 present as well as validating their signature, and if all checks pass return

 will include them in the authorized keys list.

Фикс версия 1:

apt remove ec2-instance-connect

systemctl restart sshd

Фикс версия 2:

rm /usr/lib/systemd/system/ssh.service.d/ec2-instance-connect.conf

systemctl daemon-reload

И ещё немного почитать

https://github.com/widdix/aws-ec2-ssh/issues/157


И причина: 

ExecStart=/usr/sbin/sshd -D -o "AuthorizedKeysCommand /usr/share/ec2-instance-connect/eic_run_authorized_keys %%u %%f" -o "AuthorizedKeysCommandUser ec2-instance-connect" $SSHD_OPTS

четверг, 14 марта 2024 г.

userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]

 Убунта (а может и не только она) начала что-то мутить и творить мурню:

userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]

Фикс несложный, но при нормально отключенной авторизации по паролям надо будет ещё найти как попасть на сервер... Итак: 

echo 'PubkeyAcceptedAlgorithms +ssh-rsa' > /etc/ssh/sshd_config.d/ssh-rsa.conf
systemctl restart sshd

PS

It is now possible[1] to perform chosen-prefix attacks against the
SHA-1 hash algorithm for less than USD$50K. For this reason, we will
be disabling the "ssh-rsa" public key signature algorithm that depends
on SHA-1 by default in a near-future release.

AttributeError: module 'lib' has no attribute 'X509_V_FLAG_CB_ISSUER_CHECK'

 

python3 -m pip install pip --upgrade

pip install pyopenssl --upgrade

четверг, 7 марта 2024 г.

параметры docker

Иногда надо поменять какие-то параметры докеру, и во многих доках указан /etc/defaults/docker
Но если его открыть, обнаруживаем такое
# THIS FILE DOES NOT APPLY TO SYSTEMD
Так что "для посмотреть" можно сделать systemctl edit --full docker

И с остановкой докера есть прикол, просто systemctl stop docker.service смотрим lsof | grep dockerd и видим что оно работает дальше.
Можно делать так:
systemctl disable docker.service
systemctl stop docker.service
mount | grep overlay
umount ...
(делаем нужное)
systemctl enable docker.service
systemctl start docker.service

суббота, 3 февраля 2024 г.

установка prometheus-ansible роли

 Есть готовый набор ролей

https://github.com/prometheus-community/ansible.git

Можно запустить через git clone, можно поставить коллекцию:

ansible-galaxy collection install prometheus.prometheus

или

ansible-galaxy collection install git+https://github.com/prometheus-community/ansible.git
(внимание на git+, без него скажет "нет тар файла")
Можно сделать requirements.yaml
collections:
  - name: git@github.com:my_org/private_collections.git#/path/to/collection,devel
  - name: https://github.com/ansible-collections/amazon.aws.git
    type: git
    version: 8102847014fd6e7a3233df9ea998ef4677b99248
Тут есть ещё документация
https://docs.ansible.com/ansible/latest/collections_guide/collections_installing.html

среда, 31 января 2024 г.

Добавление внешних айпи к интерфейсам

 Например, можно у ovh докупить адресов, но подключать их надо правильно, а для дебиана и убунты методы отличаются кардинально.

https://help.ovhcloud.com/csm/en-dedicated-servers-network-ipaliasing?id=kb_article_view&sysparm_article=KB0043756#instructions

В частности, у дебиана правится

/etc/network/interfaces.d/50-cloud-init

а у убунты

/etc/netplan/50-cloud-init.yaml

вторник, 30 января 2024 г.

haproxy monitoring

 У haproxy есть как уже написанные экспортеры (archived!), так и штатный экспорт в прометей, штатным и воспользуемся:

frontend prometheus

        bind *:8405

    mode http

    http-request use-service prometheus-exporter if { path /metrics }

А вот с графаной печальнее, есть больше десятка dashboars, но из проверенных (не всех) рабочим оказался только HAProxy 2 Full (id: 12693)

Ну и всё, теперь добавляем в прометей

  - job_name: haproxy

    metrics_path: /metrics

    scrape_interval: 20s

    static_configs:

    - targets:

      - '1.1.1.1:8405'

      - '2.2.2.2:8405'

и радуемся...


четверг, 18 января 2024 г.

nginx, fastcgi_pass и правильная настройка

 Если работаем через сокет, какой блок часто можно встретить?

    location ~ \.php$ {

        fastcgi_pass unix:/var/run/php-docker/php8.2-fpm.sock;

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;

        include fastcgi_params;

    }

Но есть нюанс: $realpath_root в данном случае сломан, вероятно потому что там должен быть реальный путь, но там пусто, файлы же в докере.. 

https://nginx.org/en/docs/http/ngx_http_core_module.html#variables

$realpath_root

an absolute pathname corresponding to the root or alias directive’s value for the current request, with all symbolic links resolved to real paths

Вариант - вписывать туда путь явно или через вспомогательную переменную. Хотя с $document_root тоже работает, если где-то выше выставлен root

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

Но читаемость всё-равно будет не очень: всё-таки ожидается, что root локальный. Можно придумать свою переменную типа

set $root_in_docker /srv/.../ ;

и потом 

fastcgi_param SCRIPT_FILENAME $root_in_docker$fastcgi_script_name;

только не забыть потом

root $root_in_docker;

а то показывает дефолтную nginx страницу. Хотя и так не очень правильно, но - работает

среда, 17 января 2024 г.

Configuration error - kwargs_from_env() got an unexpected keyword argument 'ssl_version'

 При деплое (у меня ansible + docker compose) можно поймать ошибку из заголовка, причина проста: пип версия 7.0.0 пакета docker - битая, но всем класть.

Фикс - явно пишем версию docker==6.1.3

https://github.com/geerlingguy/internet-pi/issues/567

https://github.com/docker/docker-py/issues/3194

суббота, 6 января 2024 г.

Lens умер, привет openlens?

 Суть: ранее для запуска программы нужен был Lens ID, но его можно было получить через гитхаб или gmail. Теперь не пускает с этими привязками.

И если под 5 версию был обход

127.0.0.1       app.k8slens.dev

то 6 можно только закопать.

Аналоги?
Например k9s
https://github.com/derailed/k9s/releases
https://github.com/derailed/k9s/releases/download/v0.30.6/k9s_linux_amd64.deb
ставим пакет, запускаем (k9s), видим поды в дефолт пространстве, нажимаем 0 - покажет все поды. Далее смотреть подсказку сверху или читать инструкции на сайте.

Далее.
Есть kube-web-view с обзором (там же можно посмотреть ещё с десяток вариантов, учитывая что статье 5 лет уже). Более свежая подборка (4 года)

Очень популярный веб интерфейс.

openshift-console: говорят, работает не только с шифтом, но и с обычным кубером. Не проверялось.

А также есть приколы типа https://kubenav.io/ под мобилки..

Но. Есть "форк", openlens (линк странный, проверить, и гуглить openlens)

четверг, 4 января 2024 г.

доступ к сайтам с paywall

 По разным причинам не всегда есть возможность получить доступ к 1 статье, которая "заплатите чтобы читать дальше", включая жадность авторов. Но есть полезный плагин

https://gitlab.com/magnolia1234/bypass-paywalls-chrome-clean