воскресенье, 31 декабря 2023 г.

centos+vfat?

 Иногда вдруг может понадобиться в центоси fat32, он же vfat

yum whatprovides mkfs.vfat

yum install dosfstools

Нюанс: раздел может потребоваться переключить из linux для корректной работы:

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): b

WARNING: If you have created or modified any DOS 6.xpartitions, please see the fdisk manual page for additionalinformation.

Changed type of partition 'Linux' to 'W95 FAT32'

сохраняем (w), форматируем и используем..

суббота, 23 декабря 2023 г.

Если нужен впс под бэкапы

 Если нужен впс под бэкапы

Виртуальные серверы с жестким диском от 4000 до 9000 GB, ценой до 3000 рублей и сортировкой по цене | Поиск VPS 

https://poiskvps.ru/index.php?search_hdd_min=4000&search_hdd_max=9000&search_price_max=3000

пятница, 8 декабря 2023 г.

clickhouse+zookeeper+ansible

Установить кликхаус не очень сложно (под докер тоже есть официальный образ), но для работы на нескольких серверах нужно ещё добавить zookeeper (уже есть версия c clickhouse keeper, но пока рекомендуется ставить)

Нюанс: сам конфиг кликхауса в убогом и давно устаревшем xml, это надо учитывать. Хотя есть и поддержка ямла, но пока 99.9% инструкций, включая офдоки, на xml

четверг, 23 ноября 2023 г.

docker, php, fpm - не работает healthcheck

 В случае фпм нельзя сделать курл на fastcgi порт, и особенно на сокет.

На помощь приходит https://github.com/renatomefi/php-fpm-healthcheck

Хинт для убунты: вместо apk install fcgi нужно apt install libfcgi-bin

суббота, 11 ноября 2023 г.

yarn

 Есть такая утилита yarn (хабр про версию 2), для nodejs

 Некая замена-надстройка над npm, дающая ряд плюшек

вторник, 31 октября 2023 г.

ansible + hashicorp vault

 Не всегда ansible vault удобен и достаточен, тогда вариант - hashicorp vault

https://itdraft.ru/2021/03/26/hranim-sekrety-ansible-v-hashicorp-vault/

Для чтения переменных используется lookup('hashi_vault')

https://docs.ansible.com/ansible/latest/collections/community/hashi_vault/index.html

PS переход с прошлой версии hashi_vault lookup

https://docs.ansible.com/ansible/latest/collections/community/hashi_vault/docsite/migration_hashi_vault_lookup.html#ansible-collections-community-hashi-vault-docsite-migration-hashi-vault-lookup

И, варианты чтения для kv2 - там есть ОЧЕНЬ большой нюанс с тем, что в путь нужно вписать /data/ в правильное место. И примеры разных вариантов

суббота, 28 октября 2023 г.

обновление debian 10->11 - ошибка

 заменяем sources.list 

The following packages have unmet dependencies:

 libc6-dev : Breaks: libgcc-8-dev (< 8.4.0-2~) 

but 8.3.0-6+rpi1 is to be installed

Нужно:

sudo apt update

sudo apt install libgcc-8-dev gcc-8-base

sudo apt full-upgrade


И возможно - надо не пропустить ещё блок
When it completes, edit /boot/config.txt.
Comment out any lines which contain "dtoverlay=vc4-fkms-v3d" by putting a # sign at the start of the line.
At the bottom of the file, in the [all] section, add the line "dtoverlay=vc4-kms-v3d" - note that is "kms", not "fkms".

среда, 11 октября 2023 г.

четверг, 5 октября 2023 г.

WSL 1 + ubuntu 22 + vim = replace mode при открытии файла

 Обнаружена крайне неприятная бага именно с убунтой 22.04 (проверено 18.04, 20.04 - там всё ок): открываем любой файл и он открывается сразу в режиме REPLACE. Нужно нажать esc сначала.

https://github.com/microsoft/terminal/issues/1637

Баг заведён в 2020, воз и ныне там.

Быстрофикс: в ~/.vimrc добавить

set t_u7=
# alternatively set ambw=double

среда, 27 сентября 2023 г.

pip в защищённых контурах

 Если есть локальный прокси

python3 -m pip install --index-url http://my.package.repo/simple/ SomeProject

Если полностью изолированный контур, шагов будет больше
1) python -m pip download --destination-directory DIR -r requirements.txt
есть нюанс, читаем линк ниже, тогда:
python -m pip wheel --wheel-dir DIR -r requirements.txt

2) Переносим проект и DIR на изолированную машину

3) python -m pip install --no-index --find-links=DIR -r requirements.txt

Есть вариант через venv, но там много нюансов, начиная с того что с машины с маком на машину с убунтой - из коробки не заработает, там в том числе разные пути в bin и конфиге.

вторник, 26 сентября 2023 г.

apt: не очищать кэш пакетов

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

Но по умолчанию дебиан удаляет пакеты (с 2016 года) после установки.

echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' \

      > /etc/apt/apt.conf.d/01keep-debs

потом забирать в /var/cache/apt/...

воскресенье, 24 сентября 2023 г.

Yandex Cloud + ipv6

 Пользовательские ВМ в Yandex Cloud не поддерживают протокол IPv6, это является причиной ошибки "101: Network is unreachable".

Чтобы принудительно воспользоваться только IPv4 для APT, можно использовать такой параметр: -o Acquire::ForceIPv4=true

https://itisgood.ru/2018/09/19/kak-zastavit-dispetchera-paketov-apt-ispolzovat-ipv4-v-ubuntu-16-04/


Вариант 2:

sysctl -w net.ipv6.conf.all.disable_ipv6=1


среда, 20 сентября 2023 г.

Замена терраформу (реальная)

 После того, как HashiCorp перелицензировали свои продукты под Business Source License и они перестали соответствовать определению Open Source Definition, группа вендоров объединилась и создала свой форк Terraform. Сначала он назывался OpenTF, а потом его переименовали в OpenTofu.

Сегодня стало известно, что OpenTofu стал проектом Linux Foundation, а значит, пользователи могут быть уверены, что новый проект останется Open Source и не будет зависеть от одного вендора.


https://e42.link/3PKjYif

https://github.com/opentofu/opentofu

Терраформ вполне себе рип. Надеюсь, как и остальные продукты HashiCorp со временем.

пятница, 1 сентября 2023 г.

Crossplane как замена terraform

https://docs.crossplane.io/

 IaC — управление всей инфраструктуры через код. Это удобно для изменений, автоматизации, автодокументирования

Аналог terraform

Главное отличие Crossplane в основной идее проекта: создание центра управления инфраструктурой на базе Kubernetes. Состояние описывается именно в виде Custom Resources в Kubernetes, и Crossplane постоянно поддерживает его актуальность. Terraform, напротив, синхронизирует состояние только во время выполнения вышеупомянутых CLI-команд.

Пример под яндекс:

https://github.com/yandex-cloud/provider-jet-yc/blob/main/examples/storage/bucket.yaml


Как управлять инфраструктурой в GitOps с помощью Crossplane

helm хранилище секретов

Чтобы скрывать пароли из Git-репозитория, подключим инструмент Helm Secrets. Он позволяет зашифровывать чувствительную информацию с помощью различных методов и расшифровывать при применении.

  1. Устанавливаем helm-secrets через helm plugin:
helm plugin install https://github.com/jkroepke/helm-secrets --version v3.15.0 
  1. Устанавливаем зависимости:
  • Sops — утилита, которая умеет шифровать и дешифровывать конфигурационные файлы

  • Age — утилита для шифрования, которую уже использует Sops для работы с конфигурационными файлами

  1. Теперь подготовим ключ, с помощью которого будут зашифровываться values-файлы:
age-keygen -o key.txt 

💡 Частая ошибка. Обязательно добавляем key.txt в .gitignore, чтобы он не попал в Git

  1. Укажем для Sops путь до ключа шифрования:
export SOPS_AGE_KEY_FILE=$(pwd)/key.txt
export SOPS_AGE_RECIPIENTS=<публичный ключ, который распечатала команда выше> 

$(pwd) здесь указан специально. Используйте абсолютный путь, так шифрование и дешифрование будут работать правильно

  1. Зашифруем файл values/argocd.yaml:
helm secrets enc values/argocd.yaml 

(из яндекс.практикум, курс gitops)

Если надо расшифровать файл:

helm secrets dec values/argocd.yaml 

четверг, 31 августа 2023 г.

четверг, 17 августа 2023 г.

вторник, 15 августа 2023 г.

добавление яндекс сертификата в систему

 Для работы яндекс-сервисов "как сервис" требуется сертификат, в систему его добавить можно так

sudo mkdir -p /usr/local/share/ca-certificates/Yandex && \ sudo wget "https://storage.yandexcloud.net/cloud-certs/CA.pem" -O /usr/local/share/ca-certificates/Yandex/YandexInternalRootCA.crt

и по хорошему потом надо

update-ca-certificates

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

psql + csv

 Загрузка csv в postgresql

\copy dtm(depot,store,time,distance) from '/<путь к файлу>/файл.csv' DELIMITERS ',' CSV HEADER;



воскресенье, 13 августа 2023 г.

Перешить dell raid mini в IT (HBA) режим

1) https://fohdeesha.com/docs/perc.html
и видео, показывающие процесс

2) sas2flash.efi
Вот только ссылка на прошивки битая (404), lsi куплен broadcom-ом..

3) через lsirec
и тут основная проблема - найти все нужные прошивки

Но если в сервере стоит H710(P) - советую купить H310 и переводить его, а этот отложить/продать.

восстановление
Will I be able to recover a bricked H310 mini? (нужен программатор и прищепка)
Помнить про SAS Address

ЗЫ 2208 можно превратить в 2308
но основное отличие что 2308 умеет в pci-e 3.0, а вот умеет ли прошиваемое железо - вопрос.

суббота, 12 августа 2023 г.

docker build + volume

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

Даже если в 2023 написать прямо 

docker build -v "xxx:xxx" - будет ошибка

unknown shorthand flag: 'v' in -v

И до версии v18.09 ответ был такой

There is a way to mount a volume during a build, but it doesn't involve Dockerfiles.

Более свежий ответ: Buildkit. Можно включить в /etc/docker/daemon.json или запускать сборку как DOCKER_BUILDKIT=1 docker build . + RUN --mount

И ещё о вариантах решения

Впрочем, можно и накостылить через multistage: копируем нужные файлы во временный образ и потом COPY --from забираем.

docker + rootless

 Копировать много, поэтому читаем оригинал

https://docs.docker.com/engine/security/rootless/

Docker + privileged mode

 Иногда нужно запускать контейнер докера в privileged mode, делается это крайне просто:

docker run ... --privileged

В docker-compose тоже, в блок сервиса на уровне image:

  privileged: true


How to install usermod in Alpine Linux

https://techoverflow.net/2022/05/11/how-to-install-usermod-in-alpine/

echo http://dl-2.alpinelinux.org/alpine/edge/community/ >> /etc/apk/repositories

apk add -U shadow

пятница, 11 августа 2023 г.

где взять terraform

https://mcs.mail.ru/docs/manage/tools-for-using-services/terraform/quick-start

https://hashicorp-releases.mcs.mail.ru/terraform

https://cloud.yandex.ru/docs/tutorials/infrastructure-management/terraform-quickstart#install-terraform

https://hashicorp-releases.yandexcloud.net/terraform/1.4.6/

Так же, после установки можно сделать

terraform -install-autocomplete

Так же, для работы провайдеров нужно подключить зеркало в сам тф

vi ~/.terraformrc

provider_installation { network_mirror { url = "https://terraform-mirror.yandexcloud.net/" include = ["registry.terraform.io/*/*"] } direct { exclude = ["registry.terraform.io/*/*"] } }

reset dell iDRAC

 Иногда нужно перезагрузить idrac, для обычного ипми это можно сделать через ipmitool bmc reset cold, но драк так не умеет (у меня). Хотя вроде как должен уметь..

https://internet-lab.ru/dell_idrac_reset


воскресенье, 6 августа 2023 г.

yandex cloud + aws: получение метаданных машины

 Возможно, есть и в других облаках, если будет инфа - обновлю

Получайте метаданные изнутри ВМ с помощью сервиса метаданных (он доступен из любой ВМ по адресу http://169.254.169.254)

Насколько я понимаю, у google cloud всё так же, амазон это сделал стандартом.

"Помните, что в Yandex Cloud поддерживаются не все поля этих форматов."

В ВМ на базе Linux для работы с метаданными, как правило, используется агент cloud-init

yandex cloud: нестандартное подключение по ssh

 Было обнаружено в яндекс.практикум

Для доступа к серийной консоли ВМ необходимо знать её идентификатор (ID). В консоли управления перейдите в раздел Compute Cloud. По умолчанию откроется страница со списком ВМ. В столбце справа указан идентификатор каждой ВМ.
image
Используйте для входа идентификатор ВМ и имя (логин) созданного в ней пользователя. Вот шаблон команды подключения для Linux:
ssh -t -p 9600 -o IdentitiesOnly=yes -i ~/.ssh/<имя закрытого ключа> <ID виртуальной машины>.<имя пользователя>@serialssh.cloud.yandex.net 
Вот так вы подключитесь к консоли, если в ВМ с ID fhm0b28lgfp4tkoa3jl6 есть пользователь yc-user:
ssh -t -p 9600 -o IdentitiesOnly=yes -i ~/.ssh/id_rsa fhm0b28lgfp4tkoa3jl6.yc-user@serialssh.cloud.yandex.net 
Введите установленный ранее пароль.
Чтобы отключиться от серийной консоли, нажмите клавишу Enter, а затем введите символы ~. (тильда и точка). В терминалах Linux для отключения также можно использовать комбинацию клавиш Ctrl + D.


понедельник, 31 июля 2023 г.

yandex cloud - postgresql

 Сервис, которым управляет яндекс.

Нюансы:

  • - Для подключения требуется подключить сертификат яндекса, для юзера делается так

mkdir -p ~/.postgresql && \

wget "https://storage.yandexcloud.net/cloud-certs/CA.pem" \

--output-document ~/.postgresql/root.crt

  • - когда кончается место, кластер переходит в режим readonly
в вебе пишет Доступность Minor issues

при этом веб консоль при обращении (SQL) даёт ошибку 500, а консоль

psql: error: connection to server at "rc1b-ххх.mdb.yandexcloud.net" (1.2.3.4), port 6432 failed: session is read-only

Но можно убрать target_session_attrs и подключиться, для анализа места

Вычислить более точно размер можно по этой странице

воскресенье, 30 июля 2023 г.

yandex cloud - yc

https://cloud.yandex.ru/docs/cli/operations/install-cli

Ставим, потом делаем

yc init

Вариант - создать OAuth-токен и добавить

yc config set token <OAuth-токен>

Если нужно от сервисного аккаунта и подобное - переходим по первой ссылке и слева в меню всё есть.

Может быть несколько профилей, которые будут привязаны к разным "фолдерам". И переключение совсем не очевидно. В частности, у меня после init появился второй folder со своим набором машин и прочего, как переключиться на основной - непонятно. Чтение доки особо не помогло, зато помогло сделать так

vi ~/.config/yandex-cloud/config.yaml
profiles:
  default:
весь блок default копируем и вставляем ещё раз, переименовываем второй.
в вебе меняем фолдер на первый - его айди будет в урле, в файле выше заменяем folder-id: на основной - и получили, что дефолт теперь основной фолдер, созданный инитом фолдер - с новым именем.
Можно переключать профили через этот файл, но для переключения уже есть штатные команды

$ yc config profile list

default ACTIVE

gitops

$ yc config profile activate gitops

Profile 'gitops' activated

(второй профиль - gitops, создавался как раз под яндекс практику)

yandex cloud

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

Также есть странные ограничения, вида увеличить диск - только на выключенной машине (95% других хостеров именно увеличить дают на лету), базы данных как сервис требуют обязательного сертификата, с которым нужно помучаться, порой очень долго, даже для тестовых сред..

Однако, всё больше компаний переходят на яндекс, плюс сам яндекс даёт гранты для перехода к ним (на год), правда несколько странное распределение - условно выдали 4 миллиона, из них только миллион на 8 основных позиций (compute cloud, object storage, vpc, вычислительные ноды кубернетеса итд), а 3 миллиона на что-то непонятное.

Кроме веба, есть cli - yc, есть поддержка terraform ("ушедшего" из рф и с рф адресов его получить нельзя, только из зеркал)

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

Ну и в вакансиях стали появляться требования к работе с облаком от яндекса.

суббота, 29 июля 2023 г.

Дешёвый кубер кластер на "поиграться" от таймвеба

 Можно у таймвеба взять такой тариф

K8S Promo

488 ₽/мес

1 гиг рамы, но 30 гиг на диске

А дальше нюансы

Если для других тарифов есть ингресс и внешний адрес

Посмотреть IP-адрес можно командой kubectl get svc -n ingress-nginx. Адрес будет указан в столбце EXTERNAL-IP

Но! На данном промо тарифе ничего нет, поэтому ответ саппорта:

Для получения внешнего IP адреса, пожалуйста, воспользуйтесь NodePort.


kubectl несколько контекстов (кластеров)

 Часто провайдер даёт скачать конфиг, который кладётся в ~/.kube/config. А что если таких конфигов нужно больше одного? Самый простой вариант - взять программы типа lens и подключить их независимо. А можно подшаманить - и собрать их в общем конфиге. Что для этого надо?

вторник, 25 июля 2023 г.

redis на несколько нод

 1) самое простое, master-slave

 на мастере:

bind 127.0.0.1 <masterip>

на слейве

replicaof <masterip> <masterport>

рестарт, работаем. Сначала мастер, потом слейвы.
! несовместимо с параметрами типа cluster-enabled

2) redis cluster ("для новых версий"), есть особенности с 16384 хэш-слотами (hash slots). Так же, кластер собирает отдельный, хоть и комплектный, скриптик на руби, но только ради этого ставить руби - совсем перебор.

3) redis sentinel ("для старых версий")

Для всяких кластерных режимов есть нююанс что требуется минимум 3 ноды (для кворума), на каждой из которых надо поднять мастер и слейв, то есть будет 6 процессов.

Проверка статуса:

# redis-cli 

127.0.0.1:6379> info replication 

понедельник, 24 июля 2023 г.

upgrade ubuntu non-lts

 Если вдруг удалось вляпаться в не-лтс убунту, то уже через год попытки что-то сделать будут давать

E: The repository 'http://nova.clouds.archive.ubuntu.com/ubuntu impish Release' no longer has a Release file.

 do-release-upgrade -d
Checking for a new Ubuntu release
Upgrades to the development release are only 
available from the latest supported release.
root@fitfest:/home/fitfest# do-release-upgrade
Checking for a new Ubuntu release
Your Ubuntu release is not supported anymore.
For upgrade information, please visit:
http://www.ubuntu.com/releaseendoflife

доступ к ВМ без пароля рута

 Многие это умеют лет 20, но тут нюанс что нам нужна консоль виртуалки (в данном случае - провайдера gcore/edgecenter). И основная заметка именно про 2 шифта (см ниже)

Итак.

Вы можете сменить проль через grub:

1) Перезагрузите ВМ через VNC (в правом верхнем углу кнопка), а затем кликните на поле ввода (чтобы нажатия регистрировались именно на сервере). 

2) Сразу же после перезагрузки нажмите и зажмите левый Shift (можно правый зажать, а кликать левый). Для CentOS можно зажимать "C", но и Shift должен работать. Таким образом мы попадем в меню grub

3) Выберите основную ОС в меню (если с ней проблемы - выбирайте advanced options и версию с recovery mode).

4) Нужно этот пункт выбрать и нажать e, чтобы перейти в режим редактирования. Если просто нажать ентер - загрузит систему как обычно.

5) Найдите строку, которая начинается с linux, нужно в конец добавить single, init=/bin/bash или их комбинацию. Для убунты работает только сингл, с инит загрузка зависнет, но где-то работает только инит.

Эти изменения действуют только на текущую загрузку и нигде не сохраняются.

6) Нажмите F10 или ctrl+X

7) Загрузитесь в ОС как root-user. После запуска шелла пропишите: mount -o remount,rw /.

 Введите команду passwd root.

8) Введите дважды новый пароль.

9) Перезагрузите ВМ.

Также, есть режим emergency

Защита от возможности загрузиться в обход авторизации будет отдельно

редис иногда хочет писать в /etc/cron.d

Эксепшен

MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.

В логе

 Failed opening the RDB file dump.rdb (in server root dir /etc/cron.d) for saving: Read-only file system

Внимания тут заслуживает именно попытка записи в /etc. При этом в инете найден только 1 такой случай (в гугле)

https://stackoverflow.com/questions/57864901/redis-server-is-restarted-for-every-two-minutes-and-loses-keys-for-every-few-min

В данном случае - Ubuntu 22.04.2 LTS, redis 5:6.0.16-1ubuntu1

Быстрое решение: 

pkill -9 redis-server; systemctl restart redis-server

просто рестарт не сработает, будет тупить, потом в статусе ошибки.. нужен именно килл -9

Возможно, причина что в системе кончалось место, но это было с неделю назад.

вторник, 18 июля 2023 г.

Переход с letsencrypt на acme.sh

 Вдруг перестал работать (ошибка ссл) один старый сайт...

Your system is not supported by certbot-auto anymore.
Certbot cannot be installed.

Да, система старовата...

Description:    Debian GNU/Linux 7.11 (wheezy)

Тем не менее, надо починить. Цертбот славится своими странными зависимостями, которые на такой старой системе вряд ли удастся решить, а гит версия - там какая-то каша, certbot-auto удалён, похоже требуется свежий питон (не просто 3, а типа 3.5+).. В общем, пора закопать стюардессу.

https://github.com/acmesh-official/acme.sh/wiki

https://github.com/acmesh-official/acme.sh/wiki/How-to-install

При установке спрашивает почту, не используйте дефолтный my@example.com - не заработает! будет

"detail": "Error creating new account :: invalid contact domain. Contact emails @example.com are forbidden",

Дальше выписывать нужно типа так

/root/.acme.sh/acme.sh  --issue  --standalone  -d <DOMAIN>

но у меня в логе было

 Create new order error. Le_OrderFinalize not found. {"type":"urn:ietf:params:acme:error:unauthorized","status":401,"detail":"A requested identifier is not permitted [ххх.ru]"}

Непонятно, фикс или случайность, но помогло

./acme.sh --debug --log --set-default-ca --server letsencrypt

https://wiki.vps-server.ru/doku.php/wiki:other:lets_encrypt_errors

И судя по

acme.sh uses zerossl (under setigo) as default ca, which blockes all .ru domain. LE doesn't so change CA

https://community.letsencrypt.org/t/acme-sh-error-issuing-certificates-for-ru-zone/195388/2

это действие обязательно.

В общем, дальше

acme.sh --issue -d ххх.ru -d www.ххх.ru --webroot /var/www/ххх/data/www/ххх.ru --nginx

и всё выписало успешно.

Посмотреть список сертификатов:

acme.sh --list


composer: убрать мусор из баннера

 При установке пакетов через композер есть баг:

Info from https://repo.packagist.org: #StandWithUrkaine

Как убрать этот мусор? И главное, этот мусор содержит задержку секунд в 10, что вообще свинство

https://stackoverflow.com/questions/76130997/composer-how-to-remove-standwithukraine-cli-message

composer config -g repos.packagist composer https://mirrors.tencent.com/composer/

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

ЗЫ модераторы в гитхабе тоже "вообще не политизированы" и просто удалили ветку с решением этой проблемы, вот соседняя
хотя.. всё нужное есть и в этом треде. Непонятно.

воскресенье, 16 июля 2023 г.

backup proxysql

 1) cp /var/lib/proxysql/proxysql.db

2) sqlite3 /var/lib/proxysql/proxysql.db .dump > /var/lib/proxysql/proxysql-dump.sql

3) sqlite3 /var/lib/proxysql/proxysql.db ".backup 'proxysql-backup.sq3'"

4) mysqldump -u admin -padmin -h 127.0.0.1 -P6032 --no-tablespaces --skip-triggers -t main mysql_servers --skip-column-statistics > /tmp/dump_servers.sql

5) select config into outfile ...


links

среда, 12 июля 2023 г.

airflow in yandex.cloud

https://cloud.yandex.ru/marketplace/products/yc/apache-airflow-2

Запуск прост: нажимаем "создать вм", создаём, получаем айпи, входим по ссш. И тут нюанс: доступы будут после логина в motd

И да, ставится это решение прямо на саму вм, без докеров-куберов.

При входе видим плашку

Welcome to Yandex.Cloud Apache Airflow version 2.2.3 image.


Main configuration file is: /etc/airflow/airflow.cfg

LocalExecutor is being used by default

Logs are stored in: /var/log/airflow/

DAGs should be placed to: /home/airflow/dags/

Airflow scheduler and webserver are run as systemd units: airflow-scheduler.service, airflow-webserver.service

Airflow metadata db is run as local PostgreSQL daemon 127.0.0.1:5432 (user=airflow,password=airflow,dbname=airflow)

Airflow webserver is listening on: http://0.0.0.0:80/

Web authentication is enabled. Default username=test_admin,password=xxx


Full documentation: https://cloud.yandex.ru/marketplace/products/f2e9ae0bm5h1ltispt7c


 

вторник, 11 июля 2023 г.

metabase: go deeper

 Продолжение к https://dragonflybsd.blogspot.com/2022/03/metabase-in-ubuntu.html

(перед обновлением версии не забываем забэкапить базу, если это штатная H2 то скопировав metabase.db.mv.db)

При запуске выше не хватает инфы, какие файлы брать для обновления, эта инфа есть в гитхабе (в который у меня не получилось попасть за пол часа ползанья по офсайту, только стало понятно что сейчас 0.46 - и всё)

https://github.com/metabase/metabase/releases/

то есть я качаю так

wget https://downloads.metabase.com/v0.46.6/metabase.jar -O metabase.0.46.6.jar

Почему в итоговом файле есть версия? Потому что при неудачном старте или проблемах просто перекидываем симлинк на прошлую версию - и изучаем. Собственно, после закачки делаю

ln -sf metabase.0.46.6.jar metabase.jar

и теперь не меняя сервис файла, делаем рестарт - и получаем новую версию.

В частности, в версии 0.46 происходит конвертация H2 базы в новый формат (v2)

Впрочем, можно запустить и в докере, прямо в гитхабе есть нужное имя, например metabase/metabase:v0.46.6

И тут есть нюанс, что без подключения volumes мы просто потеряем всё при перезапуске/обновлении, более подробная дока: https://www.metabase.com/docs/latest/installation-and-operation/running-metabase-on-docker (при желании использовать в докере - к прочтению строго обязательно, целиком)

Там же - решение некоторых проблем, типа запуск в докере с постгресом, что делать если забыли подключить вольюм итд. Но. У меня после переноса страница логина стала отдавать " An error occurred", при том что на старом инстансе работало. Что помогло:
1) очистить куки (в хроме F12 - Application - Cookies - внутри удалить куки
2) войти, получить ошибку, нажать Ctrl+F5
Перекинуло внутрь уже авторизованным. И такие странные баги бывают...

PS https://www.metabase.com/docs/latest/databases/encrypting-details-at-rest - очень желательно шифровать креды

суббота, 10 июня 2023 г.

telegram+mint

Даже в свежем минте ставится очень старая версия 3.6.1+ds-2build1, и автообновление не работает. Удалим

apt remove telegram-desktop

Поставим нормальную версию

sudo add-apt-repository ppa:atareao/telegram

sudo apt update && sudo apt install -y telegram


четверг, 8 июня 2023 г.

Docker + php - что брать за основу?

 Из-за ряда особенностей alpine тут не лучший выбор (и см ниже), хотя и он будет работать.

1) FROM php:8.2-fpm и вариации

Плюсы: сообщество любит именно эти образы, как "оригинальные". При этом например FROM php:5.4 сам образ скачает, но что-то поставить туда уже не выйдет, всё дропнуто давно (впрочем, пока ещё можно взять centos:7 и там как раз 5.4 штатно, но об этом дальше)

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

Минусы: 

- лютое неудобство писать докерфайлы, потому что какие-то модули уже стоят (mbstring) и попытка их собрать обламывается (нет модуля онигурама), но об этом надо или просто знать, или гуглить, сама установка требует чтения док на тему docker-php-ext-configure + docker-php-ext-install, то есть опять чтения доков что конкретно надо на каждый модуль... Конечно всё решаемо, но можно легко потерять несколько дней на полной ерунде.

- Нагугленные версии файлов часто не собирают, нужно править ошибки, например

docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr --with-webp-dir=/usr 

а потом оказывается что и путь не нужен, и -dir пропадает (--with-png), и один из with в принципе.. Иногда нужно -dev пакетов докидывать и так далее.

А ещё полно таких приколов:

&& git clone -b php7 https://github.com/phpredis/phpredis.git /usr/src/php/ext/redis && docker-php-ext-install redis \ ....

- если нужен не очень стандартный модуль - это начинается доолгий квест или с поиском такого в чужих докерфайлах, или чтение док. Проблема тут больше в том, что это нужно не один раз, а на каждый нестандартный модуль. Впрочем, фермошлёпы с типовыми решениями - не столкнутся.

2) FROM ubuntu:22.04, вариант debian:11 или вообще centos:7

Плюсы: если проект уже катили прямо на машину, то есть обкатанные процедуры, список версий давно подобран и проверен, написать с нуля докерфайл - минуты, и он почти гарантированно выдаст рабочую сборку.

Полнейшее единообразие с тем что собирается в режиме хоста, минимальное количество багов из-за смены платформы.

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

Минусы: штатно в дистрибутиве есть только одна версия, если нужно другую то нужно подключать того же Ondrej. Но при условии что платформа уже была где-то развёрнута - всё нужное и так известно. И даже нужные модули, собранные руками, просто копируем отдельным шагом и получаем тот же результат.

3) FROM composer:2

Подвид п.1, только на базе alpine, c docker-php-ext-install и подобным. Иногда вылезают косяки с заменой libc.

С другой стороны, очень хороший вариант, если сначала собрали все нужные модули, подготовили vendor/ итд, и потом COPY --from= перенесли только нужное в новый пустой альпин образ. Это будет меньше обычного и достаточно безопасно.

4) брать уже готовые образы, типа FROM octobercms/october-dev, но именно с октобером вообще прикол - у оф образа 4 звезды, а у "левого" aspendigital/octobercms - 41. И что брать? Хотя и тут понятно, у aspendigital последняя версия пхп 7.4, а уже желательно 8.0 и выше.


Итого: попытки поднять вопрос "что брать за основу" по чатам показали, что нет явного преимущества ни у одного метода. Обычно говорили про скорость сборки (вот только компиляция из п.1 конечно "быстрее" чем apt install уже собранного, да), размеры (именно в данном случае итоговый образ обычно выходит больше гигабайта в обоих случаях, и опять же, компилятор со всеми библиотеками никогда не будет занимать меньше места чем минимальная версия дистрибутива, куда сделали apt install --no-install-recommends), безопасность - но никто не смог объяснить в чём тут безопасность.. При этом помним важное правило безопасности - нужно брать именно проверенные слои в прод. И тут первый метод самый слабый, если в случае п.2 мы обнаружили проблему - можем явно указать рабочую версию и пересобрать контейнер, то в п.1 нужно зарываться в гит-версии и прочее, если мы свои промежуточные сборки не версионировали и всё было latest.

А если погрузиться в multi-stage builds, кэширование слоёв и прочее - всё становится ещё сложнее. И опять без какого-то значительного преимущества одного решения.

И я например с давних лет придерживаюсь политики "компиляторов в проде быть не должно", что исключает п.1 для меня. Сильно больше векторов атаки. Впрочем, п.3 при этом весьма неплох, пока нет деплоя в "мульти-окружения", то есть хост+докер, там я выбираю п.2

И да, можно взять php:8.2-alpine, доставить композер и см выше, но смысл если есть п.3?

четверг, 25 мая 2023 г.

gitlab cicd + telegram

Можно взять готовое, вроде интересное

https://hub.docker.com/r/upagge/gitlab-telegram-notify

Можно взять яндекс хостинг и поднять на serverless технологиях

https://cloud.yandex.ru/docs/tutorials/serverless/telegram-bot-serverless

Как получить chat_id и опционально thread_id, чтобы послать туда сообщение?

1) https://api.telegram.org/bot<YourBOTToken>/getUpdates

Не сработает, если уже где-то развернули бота с вебхуком, будет 

{"ok":false,"error_code":409,"description":"Conflict: can't use getUpdates method while webhook is active; use deleteWebhook to delete the webhook first"}


2) в нужном чате копируем ссылку на сообщение, будет типа https://t.me/c/1234567890/4/5 - большое число (добавить минус в начало) это ид чата, второе - тред, третье - номер сообщения и нам не важно. Если тредов нет то среднего числа не будет.

3) всякие боты типа https://t.me/getmyid_bot - но там нужна всякая магия, треды оно не умеет итд.


Делаем тестовую отправку

curl -X POST -H "Content-Type: application/json" -d "{\"chat_id\": \"<YourGroupID>\", \"text\": \"===ТЕСТ===\"}" https://api.telegram.org/bot<YourBOTToken>/sendMessage

Если нужно в тред (топик) то после значения чата в chat_id добавляем

\"message_thread_id\": \"<THREAD>\",

И тут прикол: офдока содержит кривое поле top_msg_id, а message_thread_id там вообще нет:

https://core.telegram.org/method/messages.sendMessage

Вот с таким Г нам приходится работать, что гугл точнее чем офдока. Печалька.

ЗЫ оба поля проверены, первое не работает, второе работает...

воскресенье, 21 мая 2023 г.

ansible: некоторые особенности with_fileglob

 Типовое применение: из templates/nginx/sites-available/ нужно скопировать с заменой переменных ряд конфигов. Вариант "в лоб":

- name: install sites

   template:

     src: "{{ item }}"

     dest: "/etc/nginx/sites-enabled/{{ item }}"

   with_items:

     - nginx/sites-available/site1.conf

     - nginx/sites-available/site2.conf

среда, 17 мая 2023 г.

ssh виды ключей

                  [-t dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa]

а что выбрать? Можно по привычке просто ssh-keygen, но будет создан id_rsa с длиной ключа 1024, что в современном мире откровенно мало.

ssh-keygen -b 4096 - и это будет работать и будет достаточно безопасно. Но что такое остальные виды?

Сразу про -sk: это security key, для FIDO/U2F (например YubiKey)

EC* ключи - основаны на эллиптических кривых

https://habr.com/ru/articles/335906/

ecdsa (elliptic curve dsa) это очень небольшой ключ, основанный на эллиптических кривых, но при этом более безопасный чем обычный -t rsa -n 1024

Как я понимаю, ed25519 по надёжности как ecdsa, но более быстый:

https://security.stackexchange.com/questions/50878/ecdsa-vs-ecdh-vs-ed25519-vs-curve25519

https://latacora.singles/2018/04/03/cryptographic-right-answers.html


Итог: лучше всего взять ed25519

вторник, 16 мая 2023 г.

sentry

 Есть такой пакет sentry, нужен для сбора событий, их учёту...  Прежде всего ошибок.

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

Можно поднять на своём сервере, примерно так

https://develop.sentry.dev/self-hosted/

будет собран набор докер образов, доступ через порт 9000.

понедельник, 15 мая 2023 г.

How to find your IP address in Linux

 https://opensource.com/article/18/5/how-find-ip-address-linux

curl ifconfig.me

curl -4/-6 icanhazip.com

curl ipinfo.io/ip

curl api.ipify.org

curl checkip.dyndns.org

dig +short myip.opendns.com @resolver1.opendns.com

host myip.opendns.com resolver1.opendns.com

curl ident.me

curl bot.whatismyipaddress.com

curl ipecho.net/plain

воскресенье, 14 мая 2023 г.

частые проблемы при смене версии mysql

 Первым делом проверять:

sql_mode (тут вообще разброд и шатание, самое простое но не очень правильное делать sql_mode = "")

innodb_strict_mode - та же мария 10.1 - офф, 10.5 - он. Выставляется

[mysqld]

innodb_strict_mode = OFF


https://mariadb.com/kb/en/troubleshooting-row-size-too-large-errors-with-innodb/

вторник, 2 мая 2023 г.

Методы обновления сертификатов lets encrypt (certbot)

 Классика:

certbot renew

но есть и готовый сервис

systemctl status certbot.timer

...
   Triggers: ● certbot.service

systemctl status certbot
○ certbot.service - Certbot
     Loaded: loaded (/lib/systemd/system/certbot.service; static)
     Active: inactive (dead) since Tue 2023-05-02 13:11:37 MSK; 1s ago
TriggeredBy: ● certbot.timer

Сервис, запускаемый по таймеру и обновляющий сертификаты.

Но нужно проверять: бывает что certbot renew работает, а сервис завершается с ошибкой.

PS можно доработать сервис (edit --full) и добавить в Exec в конец
--post-hook "nginx -t && systemctl reload nginx"
тогда не надо ничего придумывать с перезапуском nginx. При необходимости заменить на нужный сервис.

воскресенье, 23 апреля 2023 г.

rsync со сменой юзера

Иногда бывает нужно синхронизировать файлы, недоступные не от рута, а попасть можно только не-рутом.

 rsync -avz --rsync-path="sudo rsync" from to

Важное замечание, для корректной работы юзеру которым вошли нужно прописать NOPASSWD в sudoers

Если требуется работать без NOPASSWD то есть несколько вариантов ниже (не проверялось)

https://askubuntu.com/questions/719439/using-rsync-with-sudo-on-the-destination-machine