Files
Das-OS/TODO.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

16 KiB
Raw Permalink Blame History

Das OS — що зробити далі

Стан на 2026-10-20: версія 0.8.0, етапи 1–8 готові (live ISO, власний репозиторій, оформлення, інсталятор Calamares зі знімками Btrfs, Go-утиліти das-update і das-welcome, серверний образ з консольним інсталятором, менші ISO, консольні помічники, профіль розробника), CI (етап 9: пакети й обидва ISO збираються на власному runner, ~45 хв).

Етап 5. Go-утиліти (готово, лишилися перевірки)

  • das-update: вікно, значок у треї (лише коли є оновлення), консольний режим --cli, знімок snapper pre/post, встановлення через pkexec, підказка про відкат.
  • das-welcome: вікно першого входу (встановлення в live-сесії, мова, теки, оновлення, налаштування, довідка).
  • Англійські назви тек: xdg-user-dirs 0.20 шукає переклади лише в першій теці XDG_DATA_DIRS з підкаталогом locale (порожня /usr/local/share/locale). Виправлено в das-settings (/etc/X11/xinit/xinitrc.d/50-das-user-dirs), уже створені теки перейменовує das-welcome.
  • Тести go test ./... (make test і під час збирання пакета).
  • Перевірено у встановленій системі на Btrfs (QEMU, UEFI): оновлення з вікна й --cli створює пару знімків pre/post, вони з'являються в меню GRUB, завантаження в знімок і snapper-rollback повертають попередню версію пакета; вибір мови в das-welcome діє після перезавантаження.
  • Виправлено після перевірки: версія в Calamares береться з VERSION; значок у треї ховається, коли оновлення встановлено поза ним (стежить за базою пакетів xbps); інструменти VirtualBox прибираються з не-VirtualBox машин (у KVM було повідомлення при кожному вході); live-сесія не блокує екран під час встановлення.
  • Live ISO 0.4.0: екран не блокується під час встановлення.
  • Вікно автентифікації polkit (xfce-polkit) англійською: перекласти або замінити агент.
  • Повідомити авторів xdg-user-dirs про помилку з XDG_DATA_DIRS.
  • Пункт «Профіль розробника» в das-welcome (етап 8).

Етап 6. Серверний образ (готово)

Live ISO без графіки з консольним інсталятором: dasos-server-<версія>-x86_64.iso.

  • Профіль server/ поруч із live/; build-iso.sh [desktop|server], цілі make iso-server і make qemu-server. Kernel cmdline console=tty0 console=ttyS0,115200, вхід і на послідовній консолі.
  • Метапакет das-server: openssh, chrony, dhcpcd, NetworkManager, docker + docker-compose, nftables, fail2ban, socklog-void, python3, curl, lazydocker, lazygit, mc, tmux, htop, das-snapshots, das-update, das-helpers, xtools-minimal.
  • Налаштування: nftables «закрито все, крім SSH» (лише своя таблиця inet das, правила Docker і fail2ban не чіпає), jail sshd через nftables з розбором журналу socklog, sshd PermitRootLogin prohibit-password, журнали Docker з ротацією (local).
  • dsv: list, status, enable, disable, start, stop, restart, logs [-f], автодоповнення bash; є й на десктопі.
  • das-update окремим підпакетом без GTK (вікно й трей — /usr/libexec/das/das-update-gui у das-tools).
  • das-server-install: TUI на dialog українською й англійською (диск, ім'я, користувач і пароль, SSH-ключ і заборона паролів, часовий пояс, розкладка, мова, dhcpcd/NetworkManager) і режим без запитань --config. GPT + Btrfs з тими ж підтомами, GRUB для UEFI (і запасний BOOTX64.EFI) та BIOS.
  • Спільний пакет das-install-common (mount-source, postinstall) для обох інсталяторів; das-snapper-setup вмикає dbus, без нього snapper не працює.
  • scripts/run-qemu.sh --serial.
  • Перевірено в QEMU: встановлення через TUI на UEFI (з SSH-ключем) і BIOS (з паролем, NetworkManager, ua-utf), вхід по SSH лише за ключем, docker run hello-world, опублікований порт nginx, fail2ban бачить невдалі входи, das-update --cli зі знімками pre/post, dsv.
  • das-server-install --config перевірено (0.5.0, UEFI).
  • Розмір ISO: див. нижче.

Розмір ISO: 0.4.0 → 0.5.0

Десктоп 1,96 → 1,72 ГБ, сервер 1,57 → 1,14 ГБ.

  • initrd live-образу без драйверів amdgpu/radeon/nouveau/i915/xe і їхніх прошивок (--omit-drivers у виклику dracut у mklive): 245 → 89 МБ в обох ISO. Драйвери завантажуються з кореневої системи; десктоп у QEMU доходить до робочого столу.
  • Сервер без linux-firmware-nvidia, sof-firmware, alsa-firmware: mklive -g і /etc/xbps.d/das-server.conf (ignorepkg), тож оновлення їх не повертають. Службовий mklive-ignore.conf інсталятори видаляють.
  • squashfs з блоком 1 МБ і фільтром BCJ x86: десктоп −5 %; сервер разом із прошивками 1274 → 999 МБ.
  • Перевірити на реальному залізі з AMD/Intel/NVIDIA, що графіка вмикається після switch_root (у QEMU — virtio-gpu).
  • Переклади /usr/share/locale (265 МБ на десктопі, 98 МБ на сервері) лише для uk і en через noextract у xbps: ≈ −60…80 МБ на десктопі. Мінус: інші мови інтерфейсу доведеться доставляти перевстановленням пакетів.
  • Десктоп: зайві варіанти Papirus (ePapirus*, Papirus-Light) з 294 МБ іконок; з'ясувати, хто тягне gtk4, flite, ghostscript.
  • Не чіпати: Firefox (299 МБ), ядро й модулі (180 МБ), LLVM для Mesa (141 МБ), мережеві прошивки (442 МБ, Wi-Fi та мережеві карти).

Етап 7. Консольні помічники (готово)

Пакет das-helpers (на десктопі й сервері), спільні функції в /usr/lib/das/helpers.sh, українська й англійська, автодоповнення bash, запитання в терміналі й аргументи для скриптів.

  • dsv переїхав у das-helpers; dsv new (команда, користувач, каталог, змінні, журнал svlogd, перевірка, що служба не падає) і dsv rm (лише не з пакетів).
  • duser: list, add (групи як у Calamares, --admin, ключ, пароль), del, passwd, lock/unlock (і вхід за ключем), key add|list|rm, groups +/-; захист від видалення чи блокування себе та єдиного адміністратора.
  • dfw: status, allow, deny, reload; набори tcp_ports/udp_ports у таблиці inet das, порти в /etc/nftables.d/dfw.nft, перевірка nft -c; показує порти Docker і заблоковані fail2ban адреси.
  • dsys: info, hostname, timezone, locale, keymap.
  • xtools-minimal (xi, xq, xrs, xcheckrestart) в обох образах.
  • Виправлено: коментар у nftables.conf радив dsv restart nftables, а finish служби Void робить nft flush ruleset і стирає правила fail2ban та Docker. Тепер dfw reload.
  • Перевірено на встановленому сервері: dsv new з Python-сервером на 8080, доступ з хоста після dfw allow і закриття після dfw deny; duser add з ключем, вхід, lock блокує й вхід за ключем; dsys (часовий пояс, ім'я, мова, розкладка); dfw reload поруч із контейнером nginx.
  • Повідомлення наприкінці das-server-install згадує dsv, duser, dfw, dsys.

Етап 8. Профіль розробника (готово)

Не метапакет, а dprofile у das-helpers зі списком пакетів Void у /usr/share/das/profiles/dev.conf: встановлена система поки не бачить репозиторію Das OS, тож метапакет das-dev звідти не встановився б, а пакети Void доступні завжди.

  • dprofile install dev: base-devel, gdb, strace, git, git-lfs, github-cli, lazygit, go, gopls, delve, golangci-lint, python3-pip, virtualenv, uv, nodejs, docker, docker-compose, docker-buildx, lazydocker, podman, podman-compose, jq, ripgrep, fd, fzf, direnv, shellcheck, sqlite; на десктопі ще vscode (code-oss), meld, flatpak і портали. Пара знімків snapper pre/post, підказка про відкат; спершу оновлює xbps, якщо треба.
  • Налаштування: служба docker, група docker для того, хто запустив, /etc/subuid/subgid для rootless Podman, / як спільне монтування (/etc/runit/core-services/60-das-shared-root.sh; runit лишає його приватним, і Podman попереджає).
  • Flathub на вимогу (лише десктоп): Android Studio, IntelliJ IDEA Open/Ultimate, PyCharm, GoLand, WebStorm, VS Code від Microsoft; вибір номерами перед встановленням, dprofile app add|rm (з --unused, бо рантайми займають 1–4 ГБ). PyCharm Community на Flathub застарів (2024.3), тому PyCharm-Professional (безкоштовний режим).
  • Запитання й план — до sudo, пароль питається після них; --yes, --apps ID,...|all|none для скриптів.
  • das-welcome: рядок «Профіль розробника» відкриває xfce4-terminal з dprofile install dev; після встановлення — «Додати середовища».
  • Calamares packagechooser не додаємо: інсталятор копіює live-образ без мережі, а профіль завантажує ≈ 550 МБ.
  • Перевірено: сервер (QEMU) — go run, Node.js, uv, docker run, rootless podman run без попередження після перезавантаження; десктоп — встановлення з das-welcome, Code - OSS і VS Code з Flathub у меню після входу, dprofile app rm звільняє рантайми.
  • Повідомлення наприкінці das-server-install згадує dprofile install dev.

Етап 9. CI (готово)

  • Workflow .gitea/workflows/build.yml: make iso iso-server на власному runner dasci:host (push у main/dev, теги v*, ручний запуск).
  • CI-хост: Windows-машина (192.168.88.193), WSL2 Ubuntu 24.04 dasci у D:\DasOS\wsl, Docker Engine, gitea-runner 5.1.1 як служба systemd, автозапуск завданням планувальника (ci/runner).
  • DASOS_OUT у scripts/builder.sh: кеш out/ на CI-хості в /var/lib/dasos-ci/out.
  • Runner зареєстровано, перший запуск у Gitea (run 1) успішний за 46 хв.
  • Після перезавантаження Windows runner піднімається сам, без входу в систему (завдання S4U).
  • Тег v* публікує обидва ISO і SHA256SUMS як реліз Gitea (ci/release.sh). Ліміт вкладення релізу — 2 ГБ на файл ([repository.release] FILE_MAX_SIZE).
  • Перевірити першу публікацію на справжньому тегу.

Репозиторій пакетів

  • Підпис через xbps-rindex --sign, ключ поза репозиторієм.
  • Хостинг репозиторію (власний сервер або GitHub Releases/Pages).
  • /etc/xbps.d/das.conf у встановленій системі, щоб пакети das-* оновлювалися. Зараз встановлена система бачить лише репозиторій Void.

Інсталятор

  • Перевірити встановлення десктопа на старий BIOS (MBR, grub-install --target=i386-pc); серверний інсталятор на BIOS перевірено.
  • Перевірити на реальному залізі: видалення гостьових інструментів VM, Wi-Fi, NVIDIA/AMD.
  • Шифрування диска (LUKS): luksbootkeyfile, crypttab, dracut, GRUB_ENABLE_CRYPTODISK.
  • Перевірити ручну розмітку з Btrfs (чи створюються підтоми) і встановлення на ext4/XFS (знімки мають вимкнутися без помилок).
  • Перевірити розкладку, відмінну від us,ua (автологін перевірено).

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

  • Перевірити, що cron справді робить щогодинні знімки й очищує старі.
  • Графічний відкат (у das-update або окремою утилітою) замість sudo snapper-rollback N.
  • Прибирати старі корені @<дата>, які лишаються після відкату.

Оформлення та дрібниці

  • Прибрати значки томів live-носія («Том 6,6 ГБ») з робочого столу live-сесії.
  • Тема GRUB у встановленій системі (зараз стандартний чорний екран).
  • Перевірити меню Whisker вручну.
  • Прискорити make packages: пакет перезбирається лише після змін у srcpkgs/<назва>, без бінарного пакета або коли у Void зникла потрібна йому бібліотека (xbps-install -n). DASOS_REBUILD=1 перезбирає все.

Відкладено

  • ARM-образ для Raspberry Pi.
  • Вбудувати текстовий редактор MultiText.
  • Перший стабільний реліз: злиття dev → main.