<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Automation on Tatarinov</title><link>http://blog.tatarinovms.space/tags/automation/</link><description>Recent content in Automation on Tatarinov</description><generator>Hugo</generator><language>en</language><lastBuildDate>Tue, 21 Apr 2026 20:00:00 +0500</lastBuildDate><atom:link href="http://blog.tatarinovms.space/tags/automation/index.xml" rel="self" type="application/rss+xml"/><item><title>Синхронизация кода в два репозитория одновременно</title><link>http://blog.tatarinovms.space/synctogit/</link><pubDate>Tue, 21 Apr 2026 20:00:00 +0500</pubDate><guid>http://blog.tatarinovms.space/synctogit/</guid><description>&lt;p>&lt;img src="http://blog.tatarinovms.space/images/posts/synctogit/logo.webp" alt="logo">&lt;/p>
&lt;p>В условиях турбулентной работы облачных сервисов (снова так скажем) вопрос избыточности хранения кода становится актуальным. Держать проект только на GitHub — это риск. Решением может стать зеркалирование кода в другой сервис, например, на GitVerse.&lt;/p>
&lt;p>Обычно мы привыкли, что один &lt;code>remote&lt;/code> (например, &lt;code>origin&lt;/code>) привязан к одному URL. Но Git позволяет добавить несколько URL для push-операций в один remote.&lt;/p>
&lt;h3 id="как-это-настроить">
 Как это настроить
 &lt;a class="heading-link" href="#%d0%ba%d0%b0%d0%ba-%d1%8d%d1%82%d0%be-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b8%d1%82%d1%8c">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h3>
&lt;p>Если у вас уже есть основной репозиторий на GitHub, достаточно добавить второй URL для отправки данных:&lt;/p></description></item><item><title>Автоматический бекап роутера на Яндекс Диск</title><link>http://blog.tatarinovms.space/openwrtbackup/</link><pubDate>Mon, 05 Jan 2026 21:00:00 +0500</pubDate><guid>http://blog.tatarinovms.space/openwrtbackup/</guid><description>&lt;p>&lt;img src="http://blog.tatarinovms.space/images/posts/openwrtbackup/logo.webp" alt="logo">&lt;/p>
&lt;p>OpenWRT — мощная операционная система для роутеров, но её настройка требует времени. Чтобы не потерять конфигурацию при сбоях или обновлениях, написал скрипт для автоматического резервного копирования на Яндекс Диск с уведомлениями в Telegram.&lt;/p>
&lt;p>Репозиторий: &lt;a href="https://gitverse.ru/tatarinovms/OpenWRTBackupScript" class="external-link" target="_blank" rel="noopener">OpenWRTBackupScript на GitVerse&lt;/a>&lt;/p>
&lt;h2 id="описание-проекта">
 Описание проекта
 &lt;a class="heading-link" href="#%d0%be%d0%bf%d0%b8%d1%81%d0%b0%d0%bd%d0%b8%d0%b5-%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82%d0%b0">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h2>
&lt;p>&lt;strong>OpenWRTBackupScript&lt;/strong> — shell-скрипт для автоматического создания бекапов конфигурации OpenWRT роутеров с загрузкой на Яндекс Диск.&lt;/p>
&lt;h3 id="возможности">
 Возможности
 &lt;a class="heading-link" href="#%d0%b2%d0%be%d0%b7%d0%bc%d0%be%d0%b6%d0%bd%d0%be%d1%81%d1%82%d0%b8">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h3>
&lt;ul>
&lt;li>Создание бекапов через &lt;code>sysupgrade -b&lt;/code>&lt;/li>
&lt;li>Прямая загрузка на Яндекс Диск через rclone&lt;/li>
&lt;li>Хранение только последних 3 бекапов в облаке&lt;/li>
&lt;li>Уведомления в Telegram об успешности/ошибках&lt;/li>
&lt;li>Автоматическая очистка временных файлов&lt;/li>
&lt;li>Простая настройка прямо в скрипте&lt;/li>
&lt;/ul>
&lt;h2 id="установка">
 Установка
 &lt;a class="heading-link" href="#%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h2>
&lt;h3 id="шаг-1-установка-rclone-на-openwrt">
 Шаг 1: Установка rclone на OpenWRT
 &lt;a class="heading-link" href="#%d1%88%d0%b0%d0%b3-1-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-rclone-%d0%bd%d0%b0-openwrt">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8b949e;font-style:italic"># Подключитесь к роутеру&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ssh root@192.168.1.1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8b949e;font-style:italic"># Обновите список пакетов&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>opkg update
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8b949e;font-style:italic"># Установите rclone&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>opkg install rclone
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8b949e;font-style:italic"># Проверьте установку&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rclone --version
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="шаг-2-настройка-rclone-для-яндекс-диска">
 Шаг 2: Настройка rclone для Яндекс Диска
 &lt;a class="heading-link" href="#%d1%88%d0%b0%d0%b3-2-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-rclone-%d0%b4%d0%bb%d1%8f-%d1%8f%d0%bd%d0%b4%d0%b5%d0%ba%d1%81-%d0%b4%d0%b8%d1%81%d0%ba%d0%b0">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>rclone config
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Следуйте инструкциям для настройки подключения к Яндекс Диску.&lt;/p></description></item><item><title>Делаем резервную копию настроек UptimeKuma</title><link>http://blog.tatarinovms.space/uptimekumabackup/</link><pubDate>Sat, 19 Jul 2025 22:02:07 +0500</pubDate><guid>http://blog.tatarinovms.space/uptimekumabackup/</guid><description>&lt;p>&lt;img src="http://blog.tatarinovms.space/images/posts/uptimekumabackup/logo.webp" alt="logo">&lt;/p>
&lt;h2 id="введение">
 Введение
 &lt;a class="heading-link" href="#%d0%b2%d0%b2%d0%b5%d0%b4%d0%b5%d0%bd%d0%b8%d0%b5">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h2>
&lt;p>У меня уже есть серия постов про UptimeKuma: &lt;a href="https://blog.tatarinovms.space/uptime/" class="external-link" target="_blank" rel="noopener">Uptime Kuma – мониторинг ваших сервисов&lt;/a>, &lt;a href="https://blog.tatarinovms.space/uptimesystemd/" class="external-link" target="_blank" rel="noopener">Uptime Kuma – добавляем мониторинг статуса systemd сервисов&lt;/a>&lt;/p>
&lt;p>Теперь пришло время настроить бекап настроек этого сервиса. Новое ничего придумывать не будем, возьмем за основу проторенный путь из статьи: &lt;a href="https://blog.tatarinovms.space/vaultwardenbackup/" class="external-link" target="_blank" rel="noopener">Делаем резервную копию базы Vaultwarden в DietPi&lt;/a>&lt;/p>
&lt;h2 id="общий-план-бэкапа">
 Общий план бэкапа
 &lt;a class="heading-link" href="#%d0%be%d0%b1%d1%89%d0%b8%d0%b9-%d0%bf%d0%bb%d0%b0%d0%bd-%d0%b1%d1%8d%d0%ba%d0%b0%d0%bf%d0%b0">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h2>
&lt;p>В теории процесс резервного копирования довольно прост:&lt;/p></description></item><item><title>Делаем резервную копию настроек Vaultwarden</title><link>http://blog.tatarinovms.space/vaultwardenbackup/</link><pubDate>Sat, 19 Jul 2025 22:02:07 +0500</pubDate><guid>http://blog.tatarinovms.space/vaultwardenbackup/</guid><description>&lt;p>&lt;img src="http://blog.tatarinovms.space/images/posts/vaultwardenbackup/logo.webp" alt="logo">&lt;/p>
&lt;h2 id="введение">
 Введение
 &lt;a class="heading-link" href="#%d0%b2%d0%b2%d0%b5%d0%b4%d0%b5%d0%bd%d0%b8%d0%b5">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h2>
&lt;p>Как вы знаете, я использую я использую &lt;a href="https://blog.tatarinovms.space/dietpi/" class="external-link" target="_blank" rel="noopener">DietPi&lt;/a> и на нем у меня развернут &lt;a href="https://blog.tatarinovms.space/vaultwarden/" class="external-link" target="_blank" rel="noopener">Vaultwarden&lt;/a>.&lt;/p>
&lt;p>В той статье я описывал общий способ развёртывания Vaultwarden, не привязанный к DietPi. Однако в DietPi всё гораздо проще — Vaultwarden можно установить через официальный &lt;a href="https://dietpi.com/software/vaultwarden/" class="external-link" target="_blank" rel="noopener">установщик&lt;/a>.&lt;/p>
&lt;h2 id="общий-план-бэкапа">
 Общий план бэкапа
 &lt;a class="heading-link" href="#%d0%be%d0%b1%d1%89%d0%b8%d0%b9-%d0%bf%d0%bb%d0%b0%d0%bd-%d0%b1%d1%8d%d0%ba%d0%b0%d0%bf%d0%b0">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h2>
&lt;p>В теории процесс резервного копирования довольно прост:&lt;/p>
&lt;p>— Остановить сервис Vaultwarden&lt;/p></description></item><item><title>rclone для Яндекс Диска</title><link>http://blog.tatarinovms.space/rclone4yd/</link><pubDate>Sun, 18 May 2025 17:57:16 +0500</pubDate><guid>http://blog.tatarinovms.space/rclone4yd/</guid><description>&lt;p>&lt;img src="http://blog.tatarinovms.space/images/posts/rclone4YD/logo.webp" alt="logo">&lt;/p>
&lt;p>Ранее я писал о том, как использовать &lt;a href="https://blog.tatarinovms.space/ydiskwebdav/" class="external-link" target="_blank" rel="noopener">Яндекс.Диск через WebDAV&lt;/a> и как установить родной клиент &lt;a href="https://blog.tatarinovms.space/yadisk/" class="external-link" target="_blank" rel="noopener">Яндекс.Диска на Ubuntu Server&lt;/a>. В этой статье расскажу о более «продвинутом» способе — с использованием утилиты &lt;code>rclone&lt;/code>. Это простой, универсальный инструмент, который можно использовать в bash-скриптах, например. В гайде покажу, как настроить его на Ubuntu, но он подойдёт и для других систем. Например, на macOS я использую его точно так же.&lt;/p>
&lt;h3 id="что-нам-понадобится">
 Что нам понадобится?
 &lt;a class="heading-link" href="#%d1%87%d1%82%d0%be-%d0%bd%d0%b0%d0%bc-%d0%bf%d0%be%d0%bd%d0%b0%d0%b4%d0%be%d0%b1%d0%b8%d1%82%d1%81%d1%8f">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h3>
&lt;ul>
&lt;li>rclone на сервере (Ubuntu)&lt;/li>
&lt;li>rclone на основной машине с браузером. Так как мой домашний сервер не имеет графической оболочке и браузера, я буду использовать rclone на macOS для получения токена. Установить его на macOS можно через &lt;a href="https://blog.tatarinovms.space/brew/" class="external-link" target="_blank" rel="noopener">brew&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="установка-rclone-на-ubuntu">
 Установка rclone на Ubuntu
 &lt;a class="heading-link" href="#%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-rclone-%d0%bd%d0%b0-ubuntu">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>sudo apt update
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Затем:&lt;/p></description></item><item><title>VoxCPM — управление рекламными кампаниями через CLI</title><link>http://blog.tatarinovms.space/voxcpm/</link><pubDate>Sat, 12 Apr 2025 10:00:00 +0500</pubDate><guid>http://blog.tatarinovms.space/voxcpm/</guid><description>&lt;p>&lt;img src="http://blog.tatarinovms.space/images/posts/voxcpm/logo.webp" alt="">&lt;/p>
&lt;h1 id="развёртывание-voxcpm-на-macbook-с-чипом-apple-silicon">
 Развёртывание VoxCPM на MacBook с чипом Apple Silicon
 &lt;a class="heading-link" href="#%d1%80%d0%b0%d0%b7%d0%b2%d1%91%d1%80%d1%82%d1%8b%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-voxcpm-%d0%bd%d0%b0-macbook-%d1%81-%d1%87%d0%b8%d0%bf%d0%be%d0%bc-apple-silicon">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h1>
&lt;p>Данное руководство содержит пошаговые инструкции по установке и запуску &lt;a href="https://github.com/OpenBMB/VoxCPM" class="external-link" target="_blank" rel="noopener">VoxCPM&lt;/a> на macOS с процессорами Apple Silicon. Игрался на своем ноуте.&lt;/p>
&lt;h2 id="скачиваем-репозиторий-проекта">
 Скачиваем репозиторий проекта
 &lt;a class="heading-link" href="#%d1%81%d0%ba%d0%b0%d1%87%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-%d1%80%d0%b5%d0%bf%d0%be%d0%b7%d0%b8%d1%82%d0%be%d1%80%d0%b8%d0%b9-%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82%d0%b0">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h2>
&lt;p>Переходим в папку, где у вас всё будет аккуратно лежать и скачиваем репу:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>git clone https://github.com/OpenBMB/VoxCPM.git
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cd VoxCPM
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="настройка-доступа-к-hugging-face">
 Настройка доступа к Hugging Face
 &lt;a class="heading-link" href="#%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d0%b4%d0%be%d1%81%d1%82%d1%83%d0%bf%d0%b0-%d0%ba-hugging-face">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h2>
&lt;p>Для ускорения загрузки моделей и повышения лимитов запросов рекомендуется настроить токен доступа на Hugging Face&lt;/p></description></item><item><title>Podsync — скачивание подкастов из YouTube</title><link>http://blog.tatarinovms.space/podsync/</link><pubDate>Wed, 16 Nov 2022 14:04:00 +0500</pubDate><guid>http://blog.tatarinovms.space/podsync/</guid><description>&lt;p>&lt;img src="http://blog.tatarinovms.space/images/posts/podsync/logo.webp" alt="">&lt;/p>
&lt;p>Podsync — маленький проектик на go, который преобразует каналы с YouTube или Vimeo в обычные подкаст-фиды (RSS). Идея проста: у меня есть каналы, которые я больше слушаю, чем смотрю, и мне хотелось бы делать это в моём подкаст-приёмнике. Гайд будет на Debian-based системы.&lt;/p>
&lt;h2 id="как-это-работает">
 Как это работает
 &lt;a class="heading-link" href="#%d0%ba%d0%b0%d0%ba-%d1%8d%d1%82%d0%be-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0%d0%b5%d1%82">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h2>
&lt;p>Принцип работы Podsync довольно простой:&lt;/p>
&lt;ol>
&lt;li>В конфиге прописываем каналы&lt;/li>
&lt;li>Podsync по расписанию проверяет обновления&lt;/li>
&lt;li>Скачивает новые видео через yt-dlp и конвертирует их в аудио в MP3 через ffmpeg или оставляет видео. Тут уж как хотите.&lt;/li>
&lt;li>Генерирует RSS-фид, доступный по HTTP/HTTPS&lt;/li>
&lt;/ol>
&lt;p>Вы просто добавляете ссылку вида &lt;code>https://your-domain.com/feed_id.xml&lt;/code> в подкаст-клиент — и всё работает.&lt;/p></description></item></channel></rss>