Files
Das-OS/README_ua.md
T
dasandClaude Opus 5.5 f3793d468c
build / build (push) Successful in 30m42s
Incremental package builds and releases on v* tags (0.8.0)
- build-packages.sh rebuilds a package only when its srcpkgs/ directory
  changed, its binary package is missing, or a dry-run install finds a
  shared library Void no longer provides; DASOS_REBUILD=1 rebuilds all.
  An unchanged `make packages` takes 20 s instead of 17 min on the CI host
- ci/release.sh publishes both ISOs and SHA256SUMS as a Gitea release
  when the workflow runs for a v* tag matching VERSION
- README and TODO updated

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 14:55:45 +03:00

34 KiB
Raw Blame History

Das OS

Легкий і дружній десктоп на базі Void Linux з Xfce та українським колоритом, а також консольна серверна версія

Void Linux Xfce runit Go Docker Version

🇬🇧 English version

💡 Призначення

Void Linux швидкий, простий і незалежний: runit замість systemd і власний менеджер пакетів xbps. Проте з коробки це гола система, і щоб довести її до щоденного використання, треба кілька годин налаштовувати. Das OS збирає live-образ ISO, який одразу завантажується в налаштований десктоп Xfce і встановлюється графічним інсталятором. У ньому власне оформлення, український інтерфейс і розкладка, звичні програми та знімки Btrfs, які дозволяють скасувати невдале оновлення. Усе, що додає Das OS, постачається власними xbps-пакетами, тож налаштування можна відтворити й оновлювати, як будь-який інший пакет. Другий, консольний ISO встановлює сервер із налаштованими SSH, файрволом, fail2ban і Docker на тій самій розмітці Btrfs зі знімками.

📃 Можливості

⭐ Переваги

  • Void усередині – швидке завантаження з runit, менеджер пакетів xbps і свіжі програми без ручного налаштування.
  • Безпечні оновлення – das-update робить знімок перед кожним оновленням, систему можна повернути до будь-якого знімка, а особисті файли в /home відкат не зачіпає.
  • Легкість – без systemd, а з Xfce, LightDM і PipeWire система добре працює навіть на старих ноутбуках.
  • Нічого прихованого – усі зміни постачаються звичайними xbps-пакетами, і xbps-query -f das-settings показує, що саме змінено.
  • Контроль у користувача – налаштування за замовчуванням лежать у /etc/xdg/das, тож власні налаштування користувача завжди мають пріоритет і не скидаються після оновлень.
  • Одна основа для десктопа й сервера – обидва образи мають спільні пакети, розмітку диска, знімки й das-update, тож сервер оновлюється й відкочується так само, як ноутбук.
  • Збирається будь-де – збирання відбувається в контейнері Void, тому хостом може бути Mint, Ubuntu чи Fedora.

📱 Скріншоти

Live-робочий стіл Термінал і рамки вікон Меню завантаження (UEFI)
Live-робочий стіл Термінал і рамки вікон Меню завантаження (UEFI)
Світлі шпалери Темні шпалери Рамки вікон
Світлі шпалери Темні шпалери Рамки вікон: світлі й темні, активні й неактивні
Інсталятор Розмітка диска з Btrfs Знімки в меню завантаження
Інсталятор Розмітка диска з Btrfs Знімки в меню завантаження
Вікно привітання Оновлення системи Серверний інсталятор
Вікно привітання Оновлення системи Серверний інсталятор

📌 Використання

Live ISO

Live-система сама входить у робочий стіл, без встановлення.

  • Завантажується з UEFI (GRUB) і зі старого BIOS (isolinux), в обох випадках із заставкою Das OS.
  • Пункт graphics disabled завантажує систему з параметром nomodeset, якщо на якомусь комп'ютері екран лишається чорним, а пункт RAM копіює всю систему в пам'ять.
  • Користувач live, пароль live, sudo працює без пароля. Користувач створюється під час завантаження й існує лише в live-сесії.
  • Український інтерфейс (uk_UA.UTF-8) і часовий пояс Києва за замовчуванням. Розкладки us,ua, перемикання Alt+Shift.
  • Є NetworkManager, Bluetooth, звук PipeWire і Firefox з українською мовою. Сервіси працюють під runit: dbus, elogind, polkitd, NetworkManager, bluetoothd, lightdm.
  • Є гостьові інструменти для QEMU/SPICE та VirtualBox.
  • Значок Встановити Das OS на робочому столі та в меню запускає інсталятор.

Графічний інсталятор

Calamares встановлює Das OS за кілька кроків: мова й часовий пояс, клавіатура, диск, користувач.

  • Інтерфейс за замовчуванням український, часовий пояс Києва, з брендингом і слайдами Das OS.
  • Диск можна очистити автоматично або розмітити вручну. За замовчуванням Btrfs, також доступні ext4 і XFS. На комп'ютерах з UEFI створюється EFI-розділ на 512 МіБ.
  • Копіюється чистий live-образ (/dev/mapper/live-base), без live-користувача і його налаштувань завантаження.
  • Після копіювання інсталятор збирає локалі для вибраної мови, лишає гостьові інструменти лише того гіпервізора, у якому працює (на реальному залізі — жодних), налаштовує знімки, збирає initramfs і встановлює GRUB.
  • Наприкінці інсталятор видаляє себе й пакети, потрібні лише йому.
  • Шифрування диска поки не пропонується.

Знімки й відкат

Знімки Btrfs дозволяють відновити систему після невдалого оновлення.

  • Інсталятор створює підтоми @ (корінь), @home, @snapshots, @var_log і @var_cache_xbps. Знімки кореня не містять особистих файлів, журналів і кешу пакетів.
  • snapper робить знімок Fresh install одразу після встановлення і щогодинні знімки (cron). Зберігаються останні 5 щогодинних, 7 щоденних і 2 щотижневих.
  • grub-btrfs додає кожен знімок у підменю Das OS snapshots у GRUB і оновлює його, щойно з'являється новий.
  • Знімок доступний лише для читання. Коли він завантажується, dracut-модуль das-snapshot-overlay накладає зверху записуваний шар у RAM, тож повноцінно працює весь робочий стіл. Зміни, зроблені в такій сесії, зникають після вимкнення.
  • sudo snapper-rollback <номер> робить знімок новим коренем (старий зберігається як @<дата>). Зміна набуває чинності після перезавантаження. Команда працює і з робочої системи, і із завантаженого знімка.
  • Учасники групи wheel бачать знімки без sudo: snapper list.

Оновлення системи

das-update встановлює оновлення між парою знімків, тож невдале оновлення можна скасувати з меню завантаження.

  • Перед оновленням створює знімок snapper pre, потім запускає xbps-install -Su (спершу оновлює сам xbps, якщо треба), а наприкінці створює парний знімок post, навіть якщо оновлення не вдалося.
  • Якщо знімок pre не вдалося створити, нічого не встановлюється. Без Btrfs (ext4, XFS) оновлює без знімка й попереджає про це.
  • Після завершення показує номер знімка й те, як до нього повернутися, і просить перезавантажитися, якщо оновилися ядро, glibc, runit чи інші ключові пакети.
  • Вікно Оновлення системи показує список пакетів зі встановленою і новою версіями та вивід xbps. Частина, якій потрібні права root, запускається через pkexec (дія polkit ua.org.das.update).
  • У фоні перевіряє оновлення через 2 хвилини після входу, а далі кожні 6 годин, без прав root. Значок у треї й сповіщення з'являються лише тоді, коли є оновлення. Клік відкриває вікно, правий клік — меню з пунктом Перевірити зараз. У live-сесії перевірка вимкнена.
  • das-update --cli робить те саме в терміналі (сервери, ssh). Перед встановленням питає підтвердження (-y його пропускає) і сам перезапускається через sudo. Без графічного дисплея працює в терміналі й без --cli.
  • Сама команда — пакет das-update без GTK, а вікно й значок у треї — /usr/libexec/das/das-update-gui з das-tools.

Вікно привітання

das-welcome відкривається під час першого входу і збирає перші кроки в одному місці.

Серверний образ

Консольний live ISO, що встановлює сервер Das OS з готовими до роботи SSH, файрволом і Docker.

Консольні помічники

Короткі команди для задач, які в дистрибутивах із systemd розв'язують systemctl, hostnamectl тощо, а у Void доводиться робити вручну.

  • Вони відповідають українською або англійською, коли потрібні права root, самі перезапускаються через sudo, і мають автодоповнення bash. У терміналі вони запитують те, чого не вказано, а з усіма аргументами працюють у скриптах.
  • dsv керує службами runit: list (чи ввімкнена, стан, PID, час роботи), enable і disable (під час завантаження й одразу), start, stop, restart, status і logs [-f] (власний журнал служби svlogd або її рядки в socklog).
  • dsv new створює службу для власної програми: команда, користувач, робочий каталог і змінні середовища записуються в /etc/sv/НАЗВА, журнал ведеться в /var/log/НАЗВА. Потім служба запускається, і dsv перевіряє, що вона працює стабільно. dsv rm видаляє таку службу, а служби з пакетів не чіпає.
  • duser керує обліковими записами: add з тими ж групами, що дає десктопний інсталятор (--admin додає wheel, docker і socklog), паролем і SSH-ключем; passwd, lock і unlock (заблокований запис не ввійде й за ключем), key add|list|rm для authorized_keys, groups ІМ'Я +ГРУПА -ГРУПА і del. Не дасть видалити чи заблокувати поточного користувача та видалити єдиного адміністратора.
  • dfw відкриває порти в серверному брандмауері: dfw allow 80/tcp, dfw allow https 8000-8010/tcp, dfw deny 80/tcp. Порти зберігаються в /etc/nftables.d/dfw.nft і перевіряються через nft -c перед завантаженням, а перезавантажується лише таблиця inet das. dfw status показує ще й порти, опубліковані контейнерами Docker, та адреси, заблоковані fail2ban. SSH лишається відкритим завжди.
  • dsys замінює hostnamectl, timedatectl і localectl: info (синхронізація часу, мова, консоль, адреси), hostname, timezone (досить частини назви: dsys timezone Kyiv), locale (збирає локаль glibc, якщо треба) і keymap (з кириличним шрифтом консолі для кириличних розкладок).
  • Вони входять у пакет das-helpers і є й на десктопі. Обидва образи також містять xtools-minimal з Void для роботи з пакетами: xi встановлює, xrs шукає, xq показує відомості про пакет, а xcheckrestart знаходить програми, які треба перезапустити після оновлення.

Профіль розробника

dprofile install dev перетворює десктоп чи сервер на машину для розробки, перед цим створивши знімок системи.

  • Пакети з репозиторію Void: base-devel, gdb, strace, Git з LFS, GitHub CLI, lazygit, Go з gopls, delve і golangci-lint, Python з pip, virtualenv і uv, Node.js, Docker з Compose і Buildx, lazydocker, Podman з podman-compose, jq, ripgrep, fd, fzf, direnv, shellcheck і SQLite.
  • На десктопі ще VS Code (відкрита збірка Void code-oss, розширення з Open VSX), Meld, Flatpak з репозиторієм Flathub і порталами робочого столу.
  • Вмикає Docker і додає користувача, який його запустив, до групи docker, дає йому підлеглі ідентифікатори для rootless Podman і під час кожного завантаження робить / спільним монтуванням (/etc/runit/core-services/60-das-shared-root.sh), без чого rootless-контейнери працюють з попередженнями.
  • Перед встановленням питає, які середовища додати з Flathub: Android Studio, IntelliJ IDEA Open та Ultimate, PyCharm, GoLand, WebStorm чи Visual Studio Code від Microsoft. Пізніше їх додає dprofile app add GoLand, а видаляє dprofile app rm, разом із рантаймами Flatpak, які більше нічому не потрібні.
  • Пакети встановлюються між парою знімків snapper pre/post, як і в das-update, а наприкінці команда підказує, як відкотитися. dprofile list і dprofile show dev показують, що вже встановлено; з --yes і --apps ID,...|all|none команда працює без запитань.
  • Профіль — звичайний список у /usr/share/das/profiles/dev.conf. Десктопний інсталятор його не пропонує: встановлення копіює live-образ без мережі, а профіль завантажує близько 550 МБ пакетів (середовище з Flathub разом із рантаймами — ще 1–4 ГБ).

Оформлення Das OS

Сучасний мінімалізм із синьо-жовтою восьмипелюстковою зіркою з української вишивки.

  • GTK-теми DasOS і DasOS-Dark побудовані на adw-gtk3 і додають акцентні кольори Das OS. Вони також оформлюють панель Xfce, яку adw-gtk3 лишає чорною.
  • Рамки вікон xfwm4 (заокруглені кути, круглі кнопки, червона кнопка закриття при наведенні) генерує у PNG утиліта xfwm4gen (Go) з однієї палітри.
  • Світлі й темні шпалери зображують зірку над смугою орнаменту в стилі рушника. Та сама зірка є логотипом Das OS і кнопкою меню.
  • Шрифти: Inter для інтерфейсу і JetBrains Mono в терміналі. Іконки Papirus, тема курсора Adwaita.

Налаштування за замовчуванням

Пакет das-settings налаштовує Xfce, не чіпаючи файлів інших пакетів.

  • /etc/profile.d/das-xdg.sh ставить /etc/xdg/das перед /etc/xdg, і xfconf бере звідти налаштування Das OS.
  • Одна нижня панель містить меню Whisker, кнопки вікон, трей, розкладку клавіатури, гучність, сповіщення, годинник і кнопку «показати стільницю».
  • При першому вході das-session-init встановлює шпалери на кожному підключеному моніторі, бо Xfce зберігає шпалери за назвою монітора.
  • LightDM використовує GTK-вітальню з темою і шпалерами Das OS.
  • Теки домашнього каталогу отримують назви мовою сеансу. xdg-user-dirs 0.20 шукає переклади лише в першій теці з XDG_DATA_DIRS, де є підкаталог locale, — порожній /usr/local/share/locale, тому створював теки англійською. /etc/X11/xinit/xinitrc.d/50-das-user-dirs створює їх ще до сеансу Xfce зі шляхом пошуку, де переклади знаходяться.

Власний репозиторій пакетів

Кожен файл Das OS встановлює й оновлює xbps.

  • srcpkgs/das-theme містить теми, рамки xfwm4, шпалери й логотип.
  • srcpkgs/das-settings містить налаштування Xfce, LightDM і сесії.
  • srcpkgs/das-tools містить das-welcome, вікно оновлення і значок у треї (Go, GTK 3 через gotk3) з пунктами меню й автозапуском. Його підпакет das-update — сама команда оновлення й дія polkit, без GTK.
  • srcpkgs/das-snapshots містить конфігурацію snapper, das-snapper-setup і dracut-модуль для завантаження знімків.
  • srcpkgs/das-installer містить налаштування й брендинг Calamares, srcpkgs/das-server-installer — консольний інсталятор. Спільні для обох кроки (mount-source, postinstall) лежать у srcpkgs/das-install-common. Вони є лише на live-ISO.
  • srcpkgs/das-server — серверний метапакет із налаштуваннями nftables, fail2ban, sshd і Docker. srcpkgs/das-helpers містить dsv, duser, dfw, dsys, dprofile і профілі.
  • srcpkgs/calamares, srcpkgs/adw-gtk3 і srcpkgs/font-jetbrains-mono пакують релізи, яких немає у Void.
  • make packages накладає шаблони на неглибокий клон void-packages і збирає їх через xbps-src в out/hostdir/binpkgs. Збирання ISO встановлює їх звідти.
  • Пакет перезбирається, лише коли змінився його каталог у srcpkgs/, зник бінарний пакет або Void більше не надає бібліотеку, з якою він зібраний (перевіряється пробним встановленням). DASOS_REBUILD=1 make packages перезбирає все.

Збирання в контейнері

Усе збирання відбувається в Docker-контейнері, тож на хості потрібні лише Docker і QEMU.

  1. make packages збирає локальний xbps-репозиторій.
  2. make iso збирає пакети, а потім ISO через void-mklive за профілем у live/ (список пакетів, сервіси, оверлей кореневої файлової системи). make iso-server робить те саме для серверного профілю в server/.
  3. make qemu завантажує найновіший ISO з UEFI. make qemu-bios використовує старий BIOS, а make qemu-disk ще й підключає віртуальний диск на 20 ГБ для встановлення. make qemu-server завантажує серверний ISO з диском на послідовній консолі прямо в терміналі (вихід — Ctrl-A X).

Збирання в CI

Кожен push у main чи dev і кожен тег v* збирає пакети й обидва ISO на git.das.org.ua.

  • Workflow .gitea/workflows/build.yml запускає make iso iso-server на власному runner з міткою dasci.
  • Runner — дистрибутив WSL2 на Windows-машині: Ubuntu 24.04 з Docker Engine і gitea-runner як службою systemd. Завдання планувальника запускає його під час завантаження Windows, вхід у систему не потрібен.
  • ci/runner/setup.sh встановлює Docker, runner і його config.yaml; setup.sh register <токен> реєструє його, autostart.ps1 створює завдання планувальника.
  • DASOS_OUT виносить out/ за межі робочої копії, тож void-packages, підготовлений masterdir і кеш завантажень зберігаються між збираннями.
  • Тег v*, що збігається з VERSION, ще й публікує обидва ISO та SHA256SUMS як реліз (ci/release.sh, з власним токеном завдання): git tag v0.8.0 && git push origin v0.8.0. Інші збирання залишають ISO на CI-хості в /var/lib/dasos-ci/out/iso.

🚀 Збирання застосунку

Вимоги: Linux із Docker (користувач має бути в групі docker), QEMU та OVMF для тестування, Go 1.24+ і файли розробки GTK 3 для make test. Приблизно 10 ГБ вільного місця.

make iso                 # зібрати пакети й live-ISO (перший запуск завантажує ~2 ГБ)
make qemu                # запустити його в QEMU з UEFI
make iso-server          # зібрати пакети й серверний ISO
make qemu-server         # запустити його на послідовній консолі з диском для встановлення
make test                # запустити Go-тести
make clean               # видалити результати збирання, зберегти кеш завантажень

ISO з'являються в out/iso/dasos-<версія>-x86_64.iso і out/iso/dasos-server-<версія>-x86_64.iso. Записати їх на флешку можна через dd або Ventoy.

Примітка: Das OS — рання версія (0.8.0). Пакети й ISO збираються в CI; підписаний репозиторій на хостингу заплановано на наступний етап. Поки репозиторій не розміщено на хостингу, встановлена система отримує оновлення лише з Void. Das OS базується на Void Linux, але не пов'язана з ним офіційно.

Made by -=:dAs:=-