Updates rtfm.co.ua 🇺🇦 – Telegram
Updates rtfm.co.ua 🇺🇦
726 subscribers
35 photos
457 links
Канал @rtfm - новые посты на https://rtfm.co.ua.
Обсуждения - группа @rtfmco https://t.me./rtfmco
Download Telegram
JetBrains Upsource: установка и запуск на Linux с NGINX и SSL

Upsource – система от JetBrains для код ревью, который через плагин интегрируется во все IDE от JetBrains. Представляет собой Java-приложение с Apache Cassandra в роли локального хранилища данных и индексов. Минимальные требования к машине, на которой будет запускаться – 8 ГБ памяти, что, впрочем, не удивительно. До 10-ти пользователей – бесплатна. В этом посте –…

https://rtfm.co.ua/jetbrains-upsource-ustanovka-i-zapusk-na-linux-s-nginx-i-ssl/
Redis: Can’t open the log file: Read-only file system

Имеется новый сервис Redis, который должен работать параллельно с уже существующим. При его запуске – он сообщает, что Can’t open the log file: Read-only file system – хотя права на /var/log правильные, на сам файл лога – тоже. Причина оказалась достаточно неочевидной. Проблема Полностью ошибка выглядит так: --- Unit redis-cluster.service has begun starting up.Apr 03 10:12:28 bttrm-dev-console redis-server[18010]: *** FATAL CONFIG FILE ERROR ***Apr 03 10:12:28 bttrm-dev-console redis-server[18010]: Reading the configuration file, at line 11Apr 03 10:12:28 bttrm-dev-console redis-server[18010]: >>> ‘logfile /var/log/redis/redis-cluster.log’Apr 03 10:12:28 bttrm-dev-console redis-server[18010]: Can’t open the log file: Read-only file systemApr 03 10:12:28 bttrm-dev-console systemd[1]: redis-cluster.service: Control process exited, code=exited status=1Apr 03 10:12:28 bttrm-dev-console systemd[1]: Failed to start Redis relication cluster node.--- Subject: Unit redis-cluster.service has failed Конфигурация Файл лога указан в настройках ноды…

https://rtfm.co.ua/redis-cant-open-the-log-file-read-only-file-system/
Atom: полезные плагины

Давно пользуюсь vim практически для всего, кроме крупных проектов на Python (которые последнее время случаются крайней редко), для которого использую PyCharm. Тот же PyCharm использую при написании JSON-шаблонов для CludFormation (см. плагин aws-cloudformation). Для Go сначала пользовался vim с плагином vim-go, но недавно потрогал Atom – вполне понравился, попробую исопльзовать его. Собственно в этом посте…

https://rtfm.co.ua/atom-poleznye-plaginy/
Ansible: получить IP таргет хоста

Задача – в Ansible получить IP адрес хоста, на котором выполняется задача. Есть два варианта (может и больше), ниже – примеры с обоими. Вариант 1 – hostvars См. документацию тут>>>. Добавим тестовую задачу: - name: Test hosts list debug: msg: "{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}" Запускаем: ...TASK [test : Test hosts list] ****ok: [dev.backend-app1-internal.example.com] => {"msg": "10.0.2.71"}ok: [dev.backend-app2-internal.example.com] => {"msg": "10.0.2.91"}ok: [dev.backend-console-internal.example.com] => {"msg": "10.0.2.104"}ok: [dev.backend-bastion.example.com] => {"msg": "10.0.2.126"}... Вариант 2 – lookup и dig Второй вариант – с…

https://rtfm.co.ua/ansible-poluchit-ip-target-xosta/
Redis: Sentinel – bind 0.0.0.0, проблема с localhost и announce-ip

Изначально в файлах настроек Sentinel я использовал bind 0.0.0.0, что бы инстансы были доступны по внешним IP. Из-за этого при развёртывании системы на реальном окружении возникла проблема при определении мастер-хоста и других инстансов Sentinel. В этом посте – пример такой проблемы и их решение. На самом деле проблем было больше, но получилось воспроизвести только одну,…

https://rtfm.co.ua/redis-sentinel-bind-0-0-0-0-problema-s-localhost-i-announce-ip/
Go: проверка списка публичных репозиториев в Github и уведомления в Slack. Сравнение списков в Go. Первый опыт с Golang.

Задача – написать утилиту, которая будет запускаться по крону из Jenkins и проверять список публичных репозиториев организации в Github. Затем она должна сравнивать полученный список со списком разрешённых, и если списки не совпадают – слать алерт в Slack. Идея состоит в том, что если девелоперы случайно создадут новый публичный репозиторий, или сменят тип существующего с…

https://rtfm.co.ua/go-proverka-spiska-publichnyx-repozitoriev-v-github-i-uvedomleniya-v-slack-sravnenie-spiskov-v-go-pervyj-opyt-s-golang/
Arch Linux: Albion Online – Unable to preload the following plugins: libSDL2-2.0.so.0

Решил поиграться в Albion Online. Она нормально запускается из Steam, но я её покупал раньше (а сейчас она вообще Free to Play), со стартовым пакетом, и с той учёткой нельзя залогинится в игру, скачанную через Steam. Окей – загружаем отдельный клиент с сайта https://albiononline.com/ru/download, запускаем, и: 17:55:10 [setevoy@setevoy-arch-pc ~/Games/AlbionOnline]./Albion-Online...Found path: /home/setevoy/Games/AlbionOnline/game_x64/Albion-OnlineMono path[0] = '/home/setevoy/Games/AlbionOnline/game_x64/Albion-Online_Data/Managed'Mono config path = '/home/setevoy/Games/AlbionOnline/game_x64/Albion-Online_Data/Mono/etc'Preloaded 'ScreenSelector.so'Preloaded 'libAkSoundEngine.so'Preloaded 'libeasyanticheat.so'Unable to preload the following plugins:libSDL2-2.0.so.0 Файл библиотеки libSDL2-2.0.so.0 есть в Steam – /home/setevoy/.local/share/Steam/ubuntu12_64/libSDL2-2.0.so.0,…

https://rtfm.co.ua/arch-linux-albion-online-unable-to-preload-the-following-plugins-libsdl2-2-0-so-0/
Redis: репликация, часть 4 – написание Ansible роли

В продолжение постов о создании Redis репликации и использования Redis Sentinel для его мониторинга. Предыдущие части: Redis: репликация, часть 1 — обзор. Replication vs Sharding. Sentinel vs Cluster. Топология Redis Redis: репликация, часть 2 — Master-Slave репликация, и Redis Sentinel Redis: репликация, часть 3 — redis-py и работа с Redis Sentinel из Python Следующая задача…

https://rtfm.co.ua/redis-replikaciya-chast-4-napisanie-ansible-roli/
Jenkins: проверка публичных репозиториев Github-организации

Продолжаем внедрение проверки списка публичных репозиториев организации. Напомню: идея состоит в том, что бы если кто-то из девелоперов случайно расшарит приватный репозиторий, или создаст новый репозиторий не приватным, а публичным – получить об этом уведомление в Slack. Написание самой утилиты на Go есть в посте Go: проверка списка публичных репозиториев в Github и уведомления в…

https://rtfm.co.ua/jenkins-proverka-publichnyx-repozitoriev-github-organizacii/
Authy: настройка Multi-Factor Authentication для Github и AWS

Уверен, что необходмость использования MFA – Multi-Factor Authentication сегодня очевидна для всех. Для 2FA (2-Factor Authentication) наиболее используемым является TOTP – Time-based One-time Password, когда наряду с паролем для авторизации требуется ввести временный код, генерируемый устройством или утилитой. Самым известным является Google Authenticator, но кроме него существует множество других реализаций. Искал на днях решение для…

https://rtfm.co.ua/authy-nastrojka-multi-factor-authentication-dlya-github-i-aws/
Golang: указатели – подробный разбор

Я уже когда-то добавлял пост про указатели в C – C: указатели — подробный разбор, но было это достаточно давно, да и Си всё-таки не совсем Go, хотя в плане указателей разницы нет. Тем не менее – рассмотрим указатели в отдельном посте. Что такое указатель? Кратко, указатель – это переменная, которая хранит адрес памяти другой…

https://rtfm.co.ua/golang-ukazateli-podrobnyj-razbor/
Linux: GPG-ключи, менеджер паролей pass и импорт из KeePass

pass – менеджер паролей для Linux/UNIX, наверно один из старейших. Хранит данные в древовидной структуре каталогов и файлов, а сами файлы с секретами шифрует с помощью GPG-ключа. В Arch Linux есть из коробки, в Debian можно установить с помощь apt из дефолтных репозиториев: sudo apt install pass В macOS – с помощью Homebrew: brew install pass Хотя я сомневаюсь, что…

https://rtfm.co.ua/linux-gpg-klyuchi-menedzher-parolej-pass-i-import-iz-keepass/
Bitwarden: менеджер паролей организации – установка self-hosted версии на AWS EC2

Мы рассматриваем Bitwarden как менеджер паролей для проекта, основная цель которого – разделение доступа к различным секретам по ролям и/или ACL. Т.е. Pass и/или KeePass – это хорошо для одного пользователя, но у них нет главного – нормального веб-интерфейса, и разделения доступа к секретам для пользователей, а всякие 1Password/LastPass не имеют возможности установки на свой…

https://rtfm.co.ua/bitwarden-menedzher-parolej-organizacii-ustanovka-self-hosted-versii-na-aws-ec2/
AWS: MariaDB RDS – kill: You are not owner of thread

Имеется AWS RDS с MariaDB. Ошибка и решение не специфичны ни для AWS RDS, ни для MariaDB. При попытке убить процесс – RDS сообщает, что: MariaDB [(none)]> kill 759;ERROR 1095 (HY000): You are not owner of thread 759 Решение – использовать процедуру mysql.rds_kill(): MariaDB [(none)]> SHOW CREATE PROCEDURE mysql.rds_killG*************************** 1. row ***************************Procedure: rds_killsql_mode: NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIONCreate Procedure: CREATE DEFINER=`rdsadmin`@`localhost` PROCEDURE `rds_kill`(IN thread BIGINT)READS SQL DATADETERMINISTICBEGINDECLARE l_user varchar(16);DECLARE l_host varchar(64);DECLARE foo varchar(255);SELECT user, host INTO l_user, l_hostFROM information_schema.processlistWHERE id = thread;IF l_user = "rdsadmin" and l_host like "localhost%" THENselect `ERROR (RDS): CANNOT KILL RDSADMIN SESSION` into foo;ELSEIF l_user = "rdsrepladmin" THENselect `ERROR (RDS): CANNOT KILL RDSREPLADMIN SESSION` into foo;ELSEKILL thread;END IF;END Вызываем её: MariaDB [(none)]> CALL mysql.rds_kill(761);Query OK, 0 rows affected (0.00 sec) Для Azure MySQL имеется аналогичная процедура mysql.az_kill(). Готово.

https://rtfm.co.ua/aws-mariadb-rds-kill-you-are-not-owner-of-thread/
AWS: VPC peering DNS resolution и настройки DNS для OpenVPN AS

Имеется VPC с OpenVPN. Эта VPC через VPC Peering объединена с другими VPC в нашем AWS-аккаунте. Проблема в том, что для разрешения DNS имён на приватные, а не публичные IP, сейчас используется dnsmasq на хосте с VPN-сервером, для которого создан файл /etc/dnsmasq.hosts, в котором вручную приходится вносить приватные IP для доменов. Подробнее см. в посте…

https://rtfm.co.ua/aws-vpc-peering-dns-resolution-i-nastrojki-dns-dlya-openvpn-as/
Sentry: запуск self-hosted версии системы мониторинга ошибок на AWS EC2

Для проекта мы пользовались Cloud-based версией Sentry, но в один прекрасный день исчерпали лимит на отправку сообщений, и бекенд-команда, по сути, осталась без мониторинга. Давно собирались запустить Sentry на своём сервере, появился повод. В посте описывается запуск Sentry с Docker Compose, настройка почты и пример перехвата ошибок в Python. Используем репозиторий Sentry. Запускаем AWS EC2,…

https://rtfm.co.ua/sentry-zapusk-self-hosted-versii-sistemy-monitoringa-oshibok-na-aws-ec2/
Debian: автоматические обновления с помощью unattended-upgrades и отправка почты через AWS SES

Пакет unattended-upgrades выполняет автоматическую установку обновлений на Debian/Ubuntu. Представляет собой Python-скрипт (1500 строк), расположенный в /usr/bin/unattended-upgrade (при этом /usr/bin/unattended-upgrades является симлинком на /usr/bin/unattended-upgrade). Аналог для CentsOS/RHEL – yum-cron. Устанавливаем: sudo apt -y install unattended-upgrades Основной файл настроек – /etc/apt/apt.conf.d/50unattended-upgrades, в нём настраиваются тип обновлений, отправка почты и прочее. Настройки самих обновлений выполняются в файле /etc/apt/apt.conf.d/20auto-upgrades, который можно создать вручную,…

https://rtfm.co.ua/debian-avtomaticheskie-obnovleniya-s-pomoshhyu-unattended-upgrades-i-otpravka-pochty-cherez-aws-ses/
OpenVPN: Let’s Encrypt DNS verification и обновление сертификата в OpenVPN Access Server

В продолжение темы об установке и настройке OpenVNP Access Server, см. OpenVPN: настройка SSL и hostname. Прошло три месяца, строк действия сертификата от Let’s Encrypt закончился, надо его обновить (см. Prometheus: Alertmanager и blackbox-exporter — проверка срока действия SSL и нотификация в Slack). Можно было бы использовать привычную мне схему с webroot, но OpenVPN AS…

https://rtfm.co.ua/openvpn-lets-encrypt-dns-verification-i-obnovlenie-sertifikata-v-openvpn-access-server/
AWS: ротация ключей IAM пользователей, EC2 IAM Roles и Jenkins

Сегодня просматривал IAM-пользователей в AWS, и вспомнил, что с точки зрения безопасности иногда полезно менять ключи доступа: Но тут встал вопрос: хорошо, задать ключам expire, и периодически их обновлять в AWS IAM – это одно… Но эти ключи используются в куче скриптов, которые запускаются в Jenkins-джобах. Например – провижен бекенда выполняется из Ansible и модуля…

https://rtfm.co.ua/aws-rotaciya-klyuchej-iam-polzovatelej-ec2-iam-roles-i-jenkins/
Jenkins: запуск PHPUnit из Codeception по Pull Reguest в Github и Allure-репорты

Задача – запускать PHPUnit для тестов кода бекенда. Сам PHPUnit будет запускаться из Codeception. Задача в Jenkins должна триггериться из Github, при создании Pull Request – используем Github Pull-Request Builder плагин. Для просмотра отчётов о тестах – используем Allure. Jenkins запущен в Docker-контейнере, и все процессы будет запускать в контейнерах. Проверка тестов Что бы получить…

https://rtfm.co.ua/jenkins-zapusk-phpunit-iz-codeception-po-pull-reguest-v-github-i-allure-reporty/
SonarQube: запуск в Docker и вызов из Jenkins Pipeline

Задача – запустить SonarQube, что бы Jenkins выполнял проверку кода. Jenkins работает в Docker, билды запускаются тоже Docker. Основная проблема, которая возникла во время запуска SonarQube из Docker Compose, это то, что контейнер с SonarQube внутри себя запускает процесс с Elastisearch (тем самым нарушая главный принцип использования конейнеров: 1 сервис на один контейнер). При этом…

https://rtfm.co.ua/sonarqube-zapusk-v-docker-i-vyzov-iz-jenkins-pipeline/