Вступление

Всем доброго дня! В предыдущей статье Kawai-Focus 2.4: сборка приложения под Arch Linux:

  1. Собран пакет под Arch Linux из deb-пакета;

  2. Исправлена ошибка протокола 71, которая возникала из-за отсутствия GBM и GDK в системе;

  3. Проверена работа приложения в Cachy OS.

Сегодня я займусь совершенно неизведанной и, как мне кажется, мало изученной многими линуксоидами темой — сборкой Tauri-приложения под Windows. Почему мало изученной? Потому что я практически не программировал под эту систему и тем более никогда не собирал .exe-приложение под неё.

Я знаю лишь то, что Tauri поддерживает сборку приложений под Windows, поэтому это не должно стать серьёзной проблемой.

Также в предыдущей статье не поместилось добавление рецепта PKGBUILD в AUR, поэтому я включу его в эту статью.

Заваривайте чай, доставайте вкусняшки — пора «снимать урожай помидоров сорта Windows и выставлять на "витрину" сорт Arch»! 🍅


Особенности работы Tauri на Windows

Итак, прежде чем кидаться во все «тяжкие», при сборке приложения под Windows было бы неплохо разобраться, как работает Tauri-приложение на этой системе, какие есть отличия от Linux и какие форматы пакетов доступны для сборки.

На Windows приложения Tauri используют системный веб-движок WebView2, основанный на Chromium от Microsoft Edge. Это означает, что интерфейс приложения фактически рендерится тем же движком, что и современный браузер Edge. Важная особенность — WebView2 может быть как предустановлен в системе, так и устанавливаться вместе с приложением (в режиме Evergreen или Fixed). Благодаря этому Tauri-приложения на Windows получают высокую производительность и современную поддержку веб-стандартов без необходимости встраивать собственный браузер, как это делает Electron.

На Linux ситуация отличается: там нет единого стандартного веб-движка, поэтому Tauri обычно использует WebKitGTK. Это означает, что внешний вид и поведение приложения могут зависеть от установленной версии WebKit в системе пользователя. В отличие от Windows, где WebView2 обновляется централизованно через Edge, на Linux обновления движка зависят от пакетного менеджера и дистрибутива. Это может приводить к несовместимостям или различиям в отображении интерфейса между разными системами.

Ещё одно отличие — стабильность и предсказуемость окружения. На Windows Tauri работает в более контролируемой среде: WebView2 ведёт себя одинаково у большинства пользователей, особенно если используется встроенный (Fixed) runtime. На Linux же разработчику приходится учитывать больше переменных: разные версии библиотек, окружения рабочего стола и даже различия в настройках графической подсистемы. Это усложняет тестирование и иногда требует дополнительных проверок в коде.

Что касается сборки, на Windows Tauri поддерживает несколько форматов дистрибуции. По умолчанию доступна сборка в .exe (установщик или portable). Также возможна сборка в .msi (Windows Installer) и .msix (современный формат пакетов от Microsoft), однако для этого могут потребоваться дополнительные инструменты и настройка.

Выбор формата зависит от целей: .msi часто используется в корпоративной среде, .exe — для простого распространения, а .msix — для интеграции с экосистемой Windows и более безопасной установки.

Впитав в себя всю эту информацию, я пришёл к выводу, что Tauri-приложение на Windows должно работать более предсказуемо, чем на Linux. Признаться честно, это немного облегчает задачу и снимает с плеч некий невидимый груз. Именно на Linux я привык «превозмогать», а тут всё звучит гораздо проще — по крайней мере на первый взгляд.

Что ж, посмотрим на практике, как это будет на самом деле!

Я думаю, что выберу классический формат .exe. Также я почти уверен, что не буду использовать portable-вариант, так как на примере AppImage в Linux я убедился, что хранить все зависимости внутри пакета — не лучшая идея во многих смыслах.


Сборка и установка под Windows 11

Собирать Tauri-приложение я буду, работая в Windows 11. Я знаю, что можно собрать, например, используя Docker-контейнер с мини-версией Windows, находясь при этом в Linux, но это скорее для автоматизации сборки и тема для одной из следующих статей. Сейчас же я хочу собрать пакет вручную из-под Windows так же, как я делал это в Debian и CachyOS (Arch).

Умение работать в целевой операционной системе — необходимый навык, на мой взгляд.

Установка зависимостей

Всё начинается с клонирования репозитория. Здесь особых отличий работы с командами git на Windows по сравнению с Linux я не нашёл.

git clone name_repo

Далее мне нужно установить все зависимости для Tauri-проекта.

Скачиваю установщик для Node.js с https://nodejs.org/en/download и устанавливаю его. Проверяю версию, чтобы убедиться, что он установлен и работает корректно:

node -v

Результат команды в консоли:

v25.8.1

Проверю версию npm на всякий случай.

npm -v

Результат команды в консоли:

11.11.0

Теперь пришло время установить язык Rust вместе с cargo.

Cargo — это официальный инструмент (менеджер пакетов и сборки) для языка программирования Rust, который позволяет создавать проекты, управлять зависимостями и собирать код.

Скачать установщик для rust можно здесь: https://rust-lang.org/tools/install/.

Проверяю его версию:

rustc -vV

Результат команды в консоли:

rustc 1.94.0 (4a4ef493e 2026-03-02)
binary: rustc
commit-hash: 4a4ef493e3a1488c6e321570238084b38948f6db
commit-date: 2026-03-02
host: x86_64-pc-windows-msvc
release: 1.94.0
LLVM version: 21.1.8

Вместе с ней проверю и версию cargo.

cargo -V

Результат команды в консоли:

cargo 1.94.0 (85eff7c80 2026-01-15)

На Windows Tauri использует Microsoft Edge WebView2. Обычно он уже установлен, если установлен Edge.

Теперь поставлю Tauri через cargo.

cargo install tauri-cli

Результат команды в консоли (фрагмент):

note: `link.exe` returned an unexpected error
note: in the Studio installer, ensure the "C++ build tools" workload is selected
error: could not compile `proc-macro2` (build script) due to 1 previous error
warning: build failed, waiting for other jobs to finish...
error: could not compile `quote` (build script) due to 1 previous error
error: failed to compile `tauri-cli v2.10.1`, intermediate artifacts can be found at `C:\Users\messa\AppData\Local\Temp\cargo-installCFWtDD`.
To reuse those artifacts with a future compilation, set the environment variable `CARGO_TARGET_DIR` to that path.

Появилась первая проблема — наконец-то, а то уже стало немного скучно 🙂 Ошибка связана с отсутствием необходимых инструментов сборки C++ build tools в среде разработки.

На Windows необходимые инструменты сборки не входят в базовую систему и должны устанавливаться отдельно. В частности, речь идёт о компиляторе MSVC, линковщике и системных заголовках.

В отличие от этого, в Linux-системах (например, Ubuntu или Debian) базовые инструменты разработки обычно устанавливаются через пакетные менеджеры одной командой (build-essential) и используют стандартный toolchain (GCC/Clang), который уже ожидается большинством open-source проектов.

Кроме того, экосистема Rust (и, соответственно, Tauri) на Linux по умолчанию интегрируется с системным компилятором, тогда как на Windows используется MSVC как основной целевой toolchain. Поэтому отсутствие C++ build tools на Windows приводит к ошибкам сборки, тогда как на Linux аналогичные зависимости уже предустановлены или легко подтягиваются автоматически.

Установить инструменты сборки на Windows можно разными способами:

  • через Visual Studio Installer (компонент C++ build tools);

  • вручную установив MSVC;

  • либо используя альтернативы вроде MinGW.

Каждый из вариантов имеет свои особенности, поэтому выбор остаётся за пользователем.

Теперь перехожу в папку client и устанавливаю зависимости фронтенда:

cd client/ && npm install

Сборка и проверка приложения

Теперь осталась самая важная часть — сборка приложения. Я ничего дополнительно не настраивал в проекте и просто перешёл в каталог desktop и запустил сборку:

cd desktop/ && cargo tauri build

Результат команды в консоли (фрагмент):

Installing C:\Users\messa\.cargo\bin\cargo-tauri.exe
   Installed package `tauri-cli v2.10.1` (executable `cargo-tauri.exe`)

 Finished `release` profile [optimized] target(s) in 14m 26s
       Built application at: C:\Users\messa\Documents\kawai-focus-v2\desktop\src-tauri\target\release\kawai-focus.exe

Я был приятно удивлён тем, что на Windows собрал своё приложение без каких-либо проблем. В результате у меня появился один файл kawai-focus.exe, который не требует установки в систему — он запускается сразу.

В отличие от AppImage, он не тянет в себя зависимости, поэтому весит всего около 11 МБ.

Настал момент истины: запустится ли приложение на моём ноутбуке с Windows 11 без ошибок?

Запуск в win 11
Запуск в win 11

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

Windows 11 — не единственная версия этой операционной системы, которой люди пользуются до сих пор. Хотя Windows 10 уже не поддерживается Microsoft, часть пользователей всё ещё на ней работает. На ПК моей супруги установлены Windows 10 и Windows 11, поэтому я решил проверить, будет ли работать Tauri-приложение, собранное на Windows 11, на Windows 10.

Браузер Edge есть и в Windows 10, поэтому, по моим предположениям, WebView2 также должен работать корректно.

Запуск в win 10
Запуск в win 10

Как видно из скриншота, запуск на Windows 10 также прошёл без проблем. Я был очень рад, что моё приложение одинаково хорошо работает как на Windows 10, так и на Windows 11.


Добавление рецепта в Aur

В предыдущей статье у меня получилось собрать приложение kawai-focus из скачанного .deb-пакета под Arch Linux. Для этого я создал рецепт PKGBUILD, который представляет собой файл с инструкциями по сборке и описанием пакета. Затем я добавил этот рецепт в свой репозиторий на GitHub и написал небольшую инструкцию по сборке.

Однако более удобным и каноничным способом для Arch Linux является публикация рецепта в AUR. AUR (Arch User Repository) — это пользовательский репозиторий, в котором сообщество публикует PKGBUILD-скрипты для сборки и установки программ, отсутствующих в официальных репозиториях.

Это удобно тем, что приложение можно установить с помощью AUR-helper (например, yay). Такие инструменты напрямую работают с рецептами из AUR, поэтому пользователю достаточно выполнить одну команду, чтобы скачать, собрать и установить программу. Это значительно проще, чем вручную скачивать рецепт и запускать сборку.

Регистрация в Aur

Первый шаг — регистрация на сайте AUR. Для этого необходимо заполнить форму по адресу: https://aur.archlinux.org/register

Я не буду подробно разбирать стандартные поля (например, Username), так как они типичны для большинства сайтов. Вместо этого остановлюсь на полях, которые требуют пояснения.

Для регистрации желательно иметь под рукой систему с Arch Linux (или основанную на ней, например CachyOS). Это необходимо для выполнения команд, результаты которых понадобятся при заполнении формы.

Форма регистрации
Форма регистрации

Поле PGP Key Fingerprint — это отпечаток (уникальный идентификатор) PGP-ключа пользователя, который используется для подтверждения личности и подписывания пакетов.

Зачем это нужно?

  1. Подпись пакетов — вы можете подписывать PKGBUILD и релизы;

  2. Доверие — другие пользователи могут убедиться, что пакет действительно от вас;

  3. Безопасность — защита от подмены и вредоносных изменений.

Для его получения можно использовать пакет gnupg, который предоставляет инструменты для создания, управления и использования GPG/PGP-ключей, включая генерацию ключевой пары и получение её fingerprint.

Команда установки:

sudo pacman -S gnupg

После установки необходимо сгенерировать ключ:

gpg --full-generate-key

Вывод команды:

gpg (GnuPG) 2.4.9; Copyright (C) 2025 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

gpg: создан каталог '/home/user_name/.gnupg'
Выберите тип ключа:
   (1) RSA and RSA
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
   (9) ECC (sign and encrypt) *default*
  (10) ECC (только для подписи)
  (14) Existing key from card
Ваш выбор? 1
длина ключей RSA может быть от 1024 до 4096.
Какой размер ключа Вам необходим? (3072) 4096
Запрошенный размер ключа - 4096 бит
Выберите срок действия ключа.
         0 = не ограничен
      <n>  = срок действия ключа - n дней
      <n>w = срок действия ключа - n недель
      <n>m = срок действия ключа - n месяцев
      <n>y = срок действия ключа - n лет
Срок действия ключа? (0)
Срок действия ключа не ограничен
Все верно? (y/N) y

GnuPG должен составить идентификатор пользователя для идентификации ключа.

Ваше полное имя: user_name
Адрес электронной почты: email_adress
Примечание:
Вы выбрали следующий идентификатор пользователя:
    "user_name <email_adress>"

Сменить (N)Имя, (C)Примечание, (E)Адрес; (O)Принять/(Q)Выход? O
Необходимо получить много случайных чисел. Желательно, чтобы Вы
в процессе генерации выполняли какие-то другие действия (печать
на клавиатуре, движения мыши, обращения к дискам); это даст генератору
случайных чисел больше возможностей получить достаточное количество энтропии.
Необходимо получить много случайных чисел. Желательно, чтобы Вы
в процессе генерации выполняли какие-то другие действия (печать
на клавиатуре, движения мыши, обращения к дискам); это даст генератору
случайных чисел больше возможностей получить достаточное количество энтропии.
gpg: /home/user_name/.gnupg/trustdb.gpg: создана таблица доверия
gpg: создан каталог '/home/user_name/.gnupg/openpgp-revocs.d'
gpg: сертификат отзыва записан в '/home/user_name/.gnupg/openpgp-revocs.d/1A2B3C4D5E6F7890ABCDEF1234567890ABCDEF12.rev'.
открытый и секретный ключи созданы и подписаны.

pub   rsa4096 2026-03-20 [SC]
      1A2B3C4D5E6F7890ABCDEF1234567890ABCDEF12
uid                      user_name <email_adress>
sub   rsa4096 2026-03-20 [E]

Разбор вывода:

  • gpg (GnuPG) 2.4.9 — версия установленного GnuPG;

  • создан каталог '/home/user_name/.gnupg' — создана директория для хранения ключей и настроек;

  • Выберите тип ключа — выбор алгоритма ключа (RSA, ECC и др.);

  • Ваш выбор? 1 — выбран тип RSA (подпись + шифрование);

  • Какой размер ключа Вам необходим? 4096 — задан размер ключа (чем больше, тем безопаснее);

  • Срок действия ключа? (0) — ключ без срока действия;

  • Ваше полное имя / email — данные для создания UID (идентификатора пользователя);

  • "user_name <email_adress>" — итоговый UID, привязанный к ключу;

  • Необходимо получить много случайных чисел — идёт генерация ключа, используется энтропия системы;

  • создана таблица доверия — инициализация базы доверия ключей (trustdb.gpg);

  • создан каталог openpgp-revocs.d — директория для сертификатов отзыва ключей;

  • сертификат отзыва записан — создан revocation-сертификат (нужен для отзыва ключа при компрометации);

  • открытый и секретный ключи созданы — генерация ключевой пары завершена;

  • pub rsa4096 ... [SC] — публичный ключ (Sign/Certify);

  • 1A2B3C4D... — fingerprint ключа (используется, например, в AUR);

  • uid user_name <email_adress> — привязанный пользователь;

  • sub rsa4096 ... [E] — дополнительный (subkey) ключ для шифрования.

Навыходе получился ключ наподобие данного примера 1A2B3C4D5E6F7890ABCDEF1234567890ABCDEF12, который и нужно вставить в поле PGP Key Fingerprint.

Также список ключей можно посмотреть командой:

gpg --list-keys

В форме регистрации есть дополнительное поле для защиты от автоматической регистрации.

Форма регистрации в Aur
Форма регистрации в Aur

Для его заполнения необходимо выполнить команду:

LC_ALL=C pacman -V|sed -r 's#[0-9]+#5a8#g'|md5sum|cut -c1-6

Разбор команды:

  • LC_ALL=C — устанавливает стандартную (C) локаль, чтобы вывод команды был одинаковым на всех системах (без влияния языка/региональных настроек);

  • pacman -V — выводит информацию о версии пакетного менеджера pacman;

  • | (pipe) — передаёт вывод предыдущей команды в следующую;

  • sed -r 's#[0-9]+#5a8#g' — заменяет все числа в выводе на строку 5a8 (регулярное выражение [0-9]+ находит любые последовательности цифр);

  • md5sum — вычисляет MD5-хеш от полученного текста;

  • cut -c1-6 — берёт только первые 6 символов хеша.

Команда генерирует короткий (6 символов) хеш, основанный на версии pacman, но с заменёнными числами — это позволяет получить стабильный и анонимизированный идентификатор системы.

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

Регистрация ок
Регистрация ок

Письмо со ссылкой для установки пароля пришло на электронную почту.

Письмо со ссылкой для установки пароля
Письмо со ссылкой для установки пароля

Перейдя по ссылке, необходимо заполнить форму для создания пароля.

Форма пароля
Форма пароля

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

Пароль успешно задан
Пароль успешно задан

Теперь, когда регистрация завершена, можно войти в систему, используя email и созданный пароль.

Форма логина
Форма логина

Загрузка рецепта в Aur

Сразу после регистрации в AUR уже можно загружать свои рецепты. Здесь нет особых препятствий для публикации, главное — чтобы рецепт был написан по правилам.

Для начала я создаю новый репозиторий AUR для рецепта PKGBUILD. Для этого клонирую пока ещё не существующий репозиторий. На первый взгляд может показаться странным клонировать несуществующий репозиторий. Однако в случае с AUR это работает так: репозиторий фактически создаётся на сервере автоматически при первом git push, поэтому локально его можно «подготовить» заранее.

git clone ssh://aur@aur.archlinux.org/kawai-focus-bin.git

Перейду в папку для работы с репозиторием.

cd kawai-focus-bin

Тут у внимательного читателя может появиться вопрос: почему в названии репозитория есть суффикс -bin? Дело в том, что по правилам упаковки пакет, который собирается из бинарного исходника или готового пакета (в моём случае — из .deb пакета для Debian), обязан иметь этот суффикс в pkgname рецепта.

Об этом говорит правило:
Packages that use prebuilt deliverables, when the sources are available, must use the -bin suffix.

Об этом мне сообщил один из читателей в комментариях под предыдущей статьёй на Хабре — за что ему большое спасибо. Я обязательно добавлю суффикс -bin в рецепт.

Само собой, в репозиторий я помещаю обновлённый файл рецепта с суффиксом -bin. Кстати, хеш лучше генерировать самому и указывать его в рецепте, а не перекладывать это на пользователя.

pkgname=kawai-focus-bin
pkgver=0.1.0
pkgrel=1
pkgdesc="Kawai-Focus is a focus-training app based on the Pomodoro timer."
arch=('x86_64')
url="https://github.com/Arduinum/kawai-focus-v2"
license=('MIT')

depends=('webkit2gtk-4.1' 'libsoup3' 'gtk3' 'cairo' 'gdk-pixbuf2' 'glib2' 'pango')

source=("Kawai-Focus_${pkgver}_amd64.deb::https://github.com/Arduinum/kawai-focus-v2/releases/download/${pkgver}-alpha.1/Kawai-Focus\_${pkgver}\_amd64.deb")

sha256sums=('3ff49a4e124daafb5e660738c275b53ccf3116e759cd6cafde8b77b2257799a6')

package() {

  cd "$srcdir"

  # распаковываем deb
  ar x Kawai-Focus_${pkgver}_amd64.deb

  # извлекаем файлы пакета
  tar -xf data.tar.*

  # копируем всё в pkgdir
  cp -r usr "$pkgdir"
}

Теперь я сгенерирую файл .SRCINFO из PKGBUILD, содержащий метаданные пакета, которые используются AUR для отображения информации о пакете. Данная команда извлекает информацию из файла рецепта PKGBUILD, поэтому для её корректной работы обязательно нужен готовый рецепт.

makepkg --printsrcinfo > .SRCINFO

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

nano .SRCINFO

Содержимое .SRCINFO:

pkgbase = kawai-focus-bin
        pkgdesc = Kawai-Focus is a focus-training app based on the Pomodoro timer.
        pkgver = 0.1.0
        pkgrel = 1
        url = https://github.com/Arduinum/kawai-focus-v2
        arch = x86_64
        license = MIT
        depends = webkit2gtk-4.1
        depends = libsoup3
        depends = gtk3
        depends = cairo
        depends = gdk-pixbuf2
        depends = glib2
        depends = pango
        source = Kawai-Focus_0.1.0_amd64.deb::https://github.com/Arduinum/kawai-focus-v2/releases/download/0.1.0-alpha.1/Kawai-Fo>
        sha256sums = 3ff49a4e124daafb5e660738c275b53ccf3116e759cd6cafde8b77b2257799a6

pkgname = kawai-focus-bin

Как видно из содержимого файла .SRCINFO, вся метаинформация извлечена корректно из рецепта.

Далее — стандартная процедура, знакомая каждому, кто работал с git: фиксация изменений и push в репозиторий. Не буду показывать эти рутинные команды и перейду сразу к проверке результата.

Для просмотра пакета можно перейти по ссылке:
kawai-focus-bin

Информация о пакете в Aur
Информация о пакете в Aur

На странице пакета представлено довольно много информации: лицензия, описание, исходники. Также доступны ссылки на исходный репозиторий и команды для клонирования AUR-репозитория.

Перейдя по ссылке на рецепт PKGBUILD в AUR-репозитории, можно увидеть его содержимое.

Рецепт
Рецепт

Проверка установки программы из Aur

Осталось самое ответственное — проверить, работает ли установка моего приложения из AUR, а заодно и работу AUR-helper yay. Теперь можно оценить, насколько стало просто установить приложение. Для этого достаточно всего одной простой команды.

yay -S kawai-focus-bin

Результат работы команды:

Пакет (1)        Новая версия  Изменение размера

kawai-focus-bin  0.1.0-1                9,96 MiB

Будет установлено:  9,96 MiB

:: Приступить к установке? [Y/n] y
(1/1) проверка ключей                                                          [--------------------------------------------] 100%
(1/1) проверка целостности пакета                                              [--------------------------------------------] 100%
(1/1) загрузка файлов пакетов                                                  [--------------------------------------------] 100%
(1/1) проверка конфликтов файлов                                               [--------------------------------------------] 100%
ошибка: не удалось завершить транзакцию (конфликтующие файлы)
kawai-focus-bin: /usr/bin/kawai-focus существует в файловой системе (принадлежит kawai-focus)
kawai-focus-bin: /usr/share/applications/Kawai-Focus.desktop существует в файловой системе (принадлежит kawai-focus)
kawai-focus-bin: /usr/share/icons/hicolor/128x128/apps/kawai-focus.png существует в файловой системе (принадлежит kawai-focus)
kawai-focus-bin: /usr/share/icons/hicolor/256x256@2/apps/kawai-focus.png существует в файловой системе (принадлежит kawai-focus)
kawai-focus-bin: /usr/share/icons/hicolor/32x32/apps/kawai-focus.png существует в файловой системе (принадлежит kawai-focus)
kawai-focus-bin: /usr/share/metainfo/io.github.arduinum.KawaiFocus.metainfo.xml существует в файловой системе (принадлежит kawai-focus)
Обнаружены ошибки, пакеты не обновлены.
 -> ошибка установки: [/home/user_name/.cache/yay/kawai-focus-bin/kawai-focus-bin-0.1.0-1-x86_64.pkg.tar.zst] - exit status 1

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

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

sudo pacman -R kawai-focus

Результат работы команды:

проверка зависимостей...

Пакет (1)    Старая версия  Изменение размера

kawai-focus  0.1.0-1               -19,91 MiB

Будет освобождено:  19,91 MiB

:: Удалить эти пакеты? [Y/n] y
:: Обработка изменений пакета...
(1/1) удаление kawai-focus                                                     [--------------------------------------------] 100%
:: Запуск post-transaction hooks...
(1/3) Arming ConditionNeedsUpdate...
(2/3) Updating icon theme caches...
(3/3) Updating the desktop file MIME type cache...

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

yay -S kawai-focus-bin

Результат работы команды:

AUR Explicit (1): kawai-focus-bin-0.1.0-1
:: Актуальный PKGBUILD, пропуск загрузки%!(EXTRA string=kawai-focus-bin)
  1 kawai-focus-bin                  (файлы сборки существуют)
> Пакеты, для которых требуется очистить кэш сборки?
> [N]Нет [A]Все [Ab]Прервать [I]Установленные [No]Неустановленные или (1 2 3, 1-3, )
> A
:: Удаление (1/1): /home/user_name/.cache/yay/kawai-focus-bin
Указатель HEAD сейчас на коммите afcb7c9 v0.1.0
Удаление Kawai-Focus_0.1.0_amd64.deb
Удаление kawai-focus-bin-0.1.0-1-x86_64.pkg.tar.zst
  1 kawai-focus-bin                  (файлы сборки существуют)
> Показать изменения?
> [N]Нет [A]Все [Ab]Прервать [I]Установленные [No]Неустановленные или (1 2 3, 1-3, )
> A
 -> kawai-focus-bin: Нет изменений --- пропуск

:: Продолжить установку? [Y/n] y
> Сборка пакета kawai-focus-bin 0.1.0-1 (Пт 20 мар 2026 16:46:56)
> Получение исходных файлов...
  -> Загрузка Kawai-Focus_0.1.0_amd64.deb...
  % Total    % Received % Xferd  Average Speed  Time    Time    Time   Current
                                 Dload  Upload  Total   Spent   Left   Speed
  0      0   0      0   0      0      0      0                              0
100  4.54M 100  4.54M   0      0  3.42M      0   00:01   00:01              0
> ВНИМАНИЕ: Пропуск проверки PGP-подписей исходных файлов.
> Проверка файлов source с использованием sha256sums...
    Kawai-Focus_0.1.0_amd64.deb ... Готово
:: (1/1) Анализ SRCINFO: kawai-focus-bin
> Сборка пакета kawai-focus-bin 0.1.0-1 (Пт 20 мар 2026 16:46:58)
> Проверка зависимостей для запуска...
> Проверка зависимостей для сборки...
> Получение исходных файлов...
  -> Найден Kawai-Focus_0.1.0_amd64.deb
> Проверка файлов source с использованием sha256sums...
    Kawai-Focus_0.1.0_amd64.deb ... Готово
> Удаление директории '$srcdir/'...
> Распаковка исходных файлов...
  -> Распаковка 'Kawai-Focus_0.1.0_amd64.deb' с помощью bsdtar
> Исходные файлы готовы.
> Сборка пакета kawai-focus-bin 0.1.0-1 (Пт 20 мар 2026 16:47:00)
> Проверка зависимостей для запуска...
> Проверка зависимостей для сборки...
> ВНИМАНИЕ: Использование существующего дерева исходных файлов в '$srcdir/'
> Вход в окружение fakeroot...
> Запускается package()...
> Очистка...
  -> Удаление файлов libtool...
  -> Удаление статических библиотек...
  -> Удаление ненужных файлов...
  -> Удаление отладочной информации из бинарников и библиотек...
  -> Сжатие документации (man и info)...
> Проверка сборки на ошибки...
> Создание пакета "kawai-focus-bin"...
  -> Создание файла '.PKGINFO'...
  -> Создание файла '.BUILDINFO'...
  -> Создание файла '.MTREE'...
  -> Сжатие пакета...
> Выход из окружения fakeroot.
> Завершена сборка пакета kawai-focus-bin 0.1.0-1 (Пт 20 мар 2026 16:47:02)
> Очистка...
загрузка пакетов...
разрешение зависимостей...
проверка конфликтов...

Пакет (1)        Новая версия  Изменение размера

kawai-focus-bin  0.1.0-1                9,96 MiB

Будет установлено:  9,96 MiB

:: Приступить к установке? [Y/n] y
(1/1) проверка ключей                                                          [--------------------------------------------] 100%
(1/1) проверка целостности пакета                                              [--------------------------------------------] 100%
(1/1) загрузка файлов пакетов                                                  [--------------------------------------------] 100%
(1/1) проверка конфликтов файлов                                               [--------------------------------------------] 100%
:: Обработка изменений пакета...
(1/1) установка kawai-focus-bin                                                [--------------------------------------------] 100%
:: Запуск post-transaction hooks...
(1/3) Arming ConditionNeedsUpdate...
(2/3) Updating icon theme caches...
(3/3) Updating the desktop file MIME type cache...

Разбор установки:

  • AUR Explicit (1): kawai-focus-bin-0.1.0-1 → Найден 1 пакет в AUR для установки — kawai-focus-bin

  • PKGBUILD ... пропуск загрузки → PKGBUILD уже есть локально, повторная загрузка не требуется

  • Удаление ... ~/.cache/yay/kawai-focus-bin → Очистка кэша сборки перед новой сборкой

  • Нет изменений --- пропуск → PKGBUILD не изменился с прошлого раза

  • Загрузка Kawai-Focus_0.1.0_amd64.deb → Скачивание исходного .deb-пакета

  • Пропуск проверки PGP-подписей → Подпись не проверяется (часто в AUR это нормально, но менее безопасно)

  • sha256sums ... Готово → Проверка контрольной суммы файла прошла успешно

  • Распаковка ... с помощью bsdtar → Извлечение содержимого .deb-архива

  • Вход в окружение fakeroot → Сборка пакета в изолированном окружении без root-прав

  • package() → Выполнение функции упаковки из PKGBUILD

  • Очистка... → Удаление лишних файлов (libtool, статические библиотеки, debug-инфо)

  • Создание пакета ... .pkg.tar.zst → Формирование установочного пакета Arch Linux

  • Завершена сборка пакета → Сборка успешно завершена

  • разрешение зависимостей → Проверка зависимостей перед установкой

  • проверка конфликтов → Проверка, не конфликтует ли пакет с уже установленными

  • установка kawai-focus-bin → Установка пакета в систему

  • post-transaction hooks → Выполнение пост-скриптов:

    • ConditionNeedsUpdate → отметка системы для обновлений

    • Updating icon theme caches → обновление кэша иконок

    • Updating the desktop file MIME type cache → обновление ассоциаций файлов

Хочу обратить внимание на то, что я запустил yay внутри папки AUR-репозитория, поэтому он не стал загружать файл рецепта. AUR-helper yay избежал лишней операции, которая в данном случае не требуется.

Теперь проверю запуск приложения. В предыдущей статье я рассказывал, что добавил флаги, которые исправляют проблемы запуска приложения. В данном случае --nv-disable-explicit-sync устанавливает переменную __NV_DISABLE_EXPLICIT_SYNC=1, отключая механизм explicit sync в драйверах NVIDIA, что иногда устраняет зависания интерфейса и проблемы при отсутствии GBM и GDK (как в моём случае).

kawai-focus --nv-disable-explicit-sync

Суффикс -bin используется только в названии пакета в рецепте, поэтому имя самого приложения никак не меняется.

Запуск приложения в Arch
Запуск приложения в Arch

Приложение ожидаемо запустилось, так как сам код я не менял.


Анонс на следующие статьи

Наконец я завершил сборку пакетов под основные операционные системы (кроме Mac OS). Этот процесс был не всегда простым, но в то же время вполне комфортным.

Однако впереди у меня ещё много работы. Сейчас реализован, по сути, только один экран — «Таймеры» — с кнопками-заглушками и больше ничего. Поэтому мне предстоит реализовать остальные экраны. Начну с экрана «Таймер», который пока будет воспроизводить существующий вариант, так как экрана «Конструктор таймеров» ещё нет — создавать новые таймеры пока просто нечем.

Мне предстоит реализовать отсчёт таймера, механизм работы цепочки таймеров и многое другое. Для вдохновения я буду опираться на прототип на Kivy — по крайней мере, в плане функциональности и внешнего вида. Также мне предстоит решить, каким образом будет воспроизводиться звук таймера. Скорее всего, я выберу подход с использованием возможностей веб-браузера, но это пока не точно.

Если у вас есть мысли о том, как можно улучшить проект, пишите в комментариях — с удовольствием ознакомлюсь с вашими предложениями!

Читайте продолжение — не пропустите!


Ссылки к статье