Есть варианты на RPi
- PiKVM
- Любой RPi + пара дополнительных плат типа HDMI-to-CSI: habr
- https://wiki.blicube.com/blikvm/ru/BLIKVM-PCIE-guide/#_4 (я.маркет, али)
NanoKVM (risc-5)
Есть варианты на RPi
- PiKVM
- Любой RPi + пара дополнительных плат типа HDMI-to-CSI: habr
- https://wiki.blicube.com/blikvm/ru/BLIKVM-PCIE-guide/#_4 (я.маркет, али)
NanoKVM (risc-5)
Все примеры на базе aeza, потому что там есть предустановленные шаблоны, полный запуск - минут 10. Без рефералок.
VLESS на базе 3x-ui (https://github.com/MHSanaei/3x-ui)
И просто полезная статья
> 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 […]
Пакеты 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)
Штатно, ansible катит по 5 хостов за раз. Но бывает нужно как больше, так и меньше, например если мы катим какой-то сервис, то одновременный перезапуск всех инстансов сразу -- это проблема (всякие canary deploy и прочее опустим, тут другой инструмент). Вообще, раньше работала опция --forks=10 (и --forks=1 тоже), в 2.9 уже не работает. Но есть второе решение, очень неочевидное если не знать об этом: serial
Можно указывать как штуки, так и проценты.
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/
Бывает что слейв начинает отставать от мастера, поскольку на слейве репликация прокатывается в один поток. И тут помогает (для mariadb):
https://mariadb.com/kb/en/parallel-replication/
Впрочем, был подсказан ещё вариант, менее надёжный, более быстрый (на слейве):
SET GLOBAL sync_binlog = 0; SET GLOBAL innodb_flush_log_at_trx_commit = 0;
Требования (мои) к компактному, домашнему хранилищу:
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к и он и был взят.
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
https://community.aws/content/2biM1C0TkMkvJ2BLICiff8MKXS9/format-and-parse-amazon-s3-url
Суть:
есть масса форматов путей у S3, включая особенности про дефолтный регион (вне его такое не работает) - и просто не прочитав про это, можно долго думать что не так.
Если используется амазон и S3 - читать обязательно.
Оказывается, существует форк nginx: angie
Суть проблемы: nginx (почти) остановился в развитии, вкладывая основные силы в nginx plus, и масса нужных вещей, таких как предварительный опрос апстримов, толковая работа балансировки, статистика не в 3 строчки, нативные экспортеры в тот же node_exporter - извольте платить (есть несколько вариантов типа VTS, но разработчикам не нравится что их жадность обходят и не рекомендуют такое).
ЦЕНА. Тут они вообще поехали крышей, "Стоимость Nginx Plus составляет от $2500 до $5000" - в год. На каждый сервер. пример (учесть что это за 2 года). Даже западные мастодонты типа оракла более адекватные. Вообще никому не советую брать плюс. Если выкинуть поддержку 24/7 - цена этой лицензии баксов 100 максимум, тогда можно рассмотреть.
Но. Теперь можно просто перейти на angie, и сразу видим
Экспорт статистики в формате Prometheus с настраиваемыми шаблонами.
Визуальная консоль мониторинга Console Light для наблюдения за сервером через браузер. Познакомиться с онлайн-примером: https://console.angie.software/
То есть минус VTS, полностью
Режим привязки сессий, при котором все запросы в рамках одной сессии будут направляться на один и тот же проксируемый сервер.
Механизм плавного ввода проксируемого сервера в работу после сбоя с помощью опции slow_start
директивы server.
То есть уже большой кусок плюса - есть. Да, это далеко не всё (смотрим сайт про Энджи про), но именно мне перекинуты очень нужные вещи. При этом если открыть раздел динамические модули, есть и инструкция по переходу с nginx, и настройка prometheus и grafana.
К большому удивлению, даже vts есть из коробки, только непонятно зачем - это по сути экспортер prometheus.
Что имеем: 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)
# 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 ему ничего не будет.
В связи с неадекватностью фирмы 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, что странно и печально, форк прошлого года.
Автоматический перезапуск решается штатно, через 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
ansible -m debug --args 'msg={{ lookup("password","/tmp/123") }}' localhost
Но перезапуск даст тот же пароль, это и хорошо и плохо, потому что в этот файл тоже запишет пароль. Сгенерить без следов:
ansible -m debug --args 'msg={{ lookup("password","/dev/null") }}' localhost
Если вкратце:
1) делаем сервис с Type=OneShot
2) делаем таймер, который запускает этот сервис
Более подробно и примеры
https://opensource.com/article/20/7/systemd-timers
Строка запуска раз в минуту будет такой:
OnCalendar=*-*-* *:*:00
PS команда для быстрого создания сервиса без возни с файлами:
systemctl edit --full --force cron.service
Вопрос, есть ли в этом смысл... А за такие деньги точно не имеет смыла. Хотя взять только водоблоков несколько, и комплект помпа-колба-радиатор_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
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 * завести, но там другой комплект нужен скорее всего.. как минимум другой кабель к плате будет.
Казалось бы, уже давно отработанный механизм с .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
Убунта (а может и не только она) начала что-то мутить и творить мурню:
userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
Фикс несложный, но при нормально отключенной авторизации по паролям надо будет ещё найти как попасть на сервер... Итак:
python3 -m pip install pip --upgrade
pip install pyopenssl --upgrade
Есть готовый набор ролей
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
Например, можно у ovh докупить адресов, но подключать их надо правильно, а для дебиана и убунты методы отличаются кардинально.
В частности, у дебиана правится
/etc/network/interfaces.d/50-cloud-init
а у убунты
/etc/netplan/50-cloud-init.yaml
У 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'
и радуемся...
Если работаем через сокет, какой блок часто можно встретить?
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 страницу. Хотя и так не очень правильно, но - работает
При деплое (у меня ansible + docker compose) можно поймать ошибку из заголовка, причина проста: пип версия 7.0.0 пакета docker - битая, но всем класть.
Фикс - явно пишем версию docker==6.1.3
Суть: ранее для запуска программы нужен был Lens ID, но его можно было получить через гитхаб или gmail. Теперь не пускает с этими привязками.
И если под 5 версию был обход
127.0.0.1 app.k8slens.dev
По разным причинам не всегда есть возможность получить доступ к 1 статье, которая "заплатите чтобы читать дальше", включая жадность авторов. Но есть полезный плагин
https://gitlab.com/magnolia1234/bypass-paywalls-chrome-clean