|
Some checks failed
feder-m2-build / build-qcow2-and-iso (push) Has been cancelled
SDK Build and Validation / Validate SDK Structure (push) Has been cancelled
SDK Build and Validation / Lint SDK Code (push) Has been cancelled
SDK Build and Validation / Build SDK Examples (push) Has been cancelled
SDK Build and Validation / Build SDK Examples-1 (push) Has been cancelled
SDK Build and Validation / Run SDK Tests (push) Has been cancelled
SDK Structure: - sdk/tools/ (build.sh, validate.sh) - sdk/scripts/ (setup.sh) - sdk/configs/ (sdk.env) - sdk/docs/ (getting-started, api-reference, examples, tutorials) Examples (4 projects): - hello-world (C with Makefile) - rust-hello (Rust with Cargo) - python-hello (Python with setup.py) - systemd-service (Systemd service example) Test Suite: - test-validate.sh (SDK validation) - test-build.sh (Build tests for all examples) - test-examples.sh (Integration tests) - run-all.sh (Master test runner) CI Integration: - .forgejo/workflows/sdk-build.yml (validate, build, test, lint) - test-sdk job runs after build-examples Documentation: - SDK README and docs - docs/05-sdk-development.md - docs/06-sdk-examples-and-tests.md - Updated main README with SDK section |
||
|---|---|---|
| .forgejo/workflows | ||
| ci | ||
| docs | ||
| images/configs | ||
| packaging | ||
| repo | ||
| scripts | ||
| sdk | ||
| .gitignore | ||
| FIXES.md | ||
| PACKAGES-SUMMARY.md | ||
| README.md | ||
| RELEASE-CHECKLIST.md | ||
Feder OS
Професионална мобилна Linux дистрибуция, базирана на Fedora, с фокус върху свободен софтуер и mobile-first подход.
Визия
Feder OS е мобилна Linux дистрибуция, която:
- 100% свободен софтуер - Без проприетарни компоненти
- Mobile-first - Оптимизирана за телефони и мобилни устройства
- Fedora-based - Използва Fedora като база, но с собствена идентичност
- Професионална инфраструктура - RPM repo, GPG подписване, testing/stable канали
Статус
Feder OS 0.1 RC0 - Готов за първи bootable образ
Завършени фази
- ✅ Фаза 0: Инфраструктура - RPM repo, GPG подписване, build скриптове
- ✅ Фаза 1: Userland Freeze - Meta пакети версионирани на 0.1, първи "Feder ABI"
- ✅ Фаза 2: Bootable Image - Rootfs build, UEFI bootable image, QEMU boot
- ✅ M1: One-command build - Пълен автоматизиран build процес
Структура на проекта
feder-os/
├── README.md # Този файл
├── .gitignore # Git ignore правила
├── docs/ # Документация
│ ├── 00-vision.md # Визия и development roadmap
│ ├── 01-repo-policy.md # Repository политика и OTA стратегия
│ ├── 02-packages.md # Архитектура на пакетите
│ ├── 03-image-build-qemu.md # Изграждане на bootable образ
│ └── 04-device-enablement.md # Device enablement процес
├── packaging/ # RPM packaging
│ ├── SPECS/ # RPM spec файлове (19 пакета)
│ │ ├── feder-repo.spec # Repository конфигурация (ПЪРВИ ПАКЕТ)
│ │ ├── feder-release.spec # OS идентичност и брендинг
│ │ ├── feder-base.spec # Base OS meta пакет
│ │ ├── feder-mobile.spec # Mobile stack meta пакет
│ │ ├── feder-ui-phosh.spec # Phosh UI meta пакет
│ │ ├── feder-firstboot.spec # First boot provisioning (user, autologin)
│ │ ├── feder-ux-defaults.spec # UX defaults (lockscreen, timeouts, power)
│ │ ├── feder-security-baseline.spec # Security baseline (firewall, sshd)
│ │ ├── feder-runtime-policy.spec # Runtime политики (mobile tuning)
│ │ ├── feder-mobile-services.spec # Mobile services presets
│ │ ├── feder-plymouth-theme.spec # Plymouth boot theme
│ │ ├── feder-quiet-boot.spec # Quiet boot configuration
│ │ ├── feder-apps-core.spec # Core applications (essential apps)
│ │ ├── feder-portal.spec # Feder welcome portal (offline)
│ │ ├── feder-default-home.spec # Default home (homepage + favorites via dconf)
│ │ ├── feder-apps-extra.spec # Extra applications (optional)
│ │ ├── feder-autologin.spec # Автоматичен login (legacy)
│ │ ├── feder-config-mobile.spec # Мобилна конфигурация (legacy)
│ │ └── feder-debug.spec # Debug tools (опционален)
│ └── SOURCES/ # Изходни файлове (55+ файла)
│ ├── feder.repo # DNF repository конфигурация
│ ├── RPM-GPG-KEY-FEDER # GPG публичен ключ (placeholder)
│ ├── feder-os-release.conf # OS release информация
│ └── ... # Други конфигурационни файлове
├── scripts/ # Автоматизация
│ ├── config.env # Централизирана конфигурация
│ ├── 01_build_srpm.sh # Build source RPM
│ ├── 02_build_rpm_mock_aarch64.sh # Build RPM с mock
│ ├── 03_sign_rpms.sh # Подписване на RPM пакети
│ ├── 04_publish_testing.sh # Публикуване в testing repo
│ ├── 05_promote_to_stable.sh # Промотиране към stable
│ ├── 10_make_installroot.sh # Изграждане на rootfs
│ ├── 11_make_disk_image.sh # Създаване на bootable image
│ ├── 12_run_qemu_aarch64.sh # Boot в QEMU
│ └── build_all.sh # M1: Master build script (one-command)
├── images/ # Image building
│ ├── configs/
│ │ └── installroot-packages.txt # Списък на пакети за rootfs
│ └── output/ # Output директория (gitignored)
│ ├── installroot/ # Генериран rootfs
│ └── feder-0.1-aarch64.img # Bootable disk image
├── artifacts/ # Build artifacts (gitignored)
│ └── *.rpm # Генерирани RPM пакети
├── ci/ # CI/CD
│ └── forgejo-actions.yml # CI workflows
├── sdk/ # Feder SDK (Software Development Kit)
│ ├── README.md # SDK документация
│ ├── tools/ # SDK инструменти (build, validate)
│ ├── examples/ # Примерни проекти (C, Rust, Python, systemd)
│ ├── tests/ # SDK test suite (validation, build, integration)
│ ├── templates/ # Проектни шаблони
│ ├── scripts/ # SDK helper scripts
│ ├── configs/ # SDK конфигурации
│ └── docs/ # SDK документация
└── repo/ # Repository конфигурация
├── feder.repo.template # Template за клиентска конфигурация
└── README-repo.md # Документация за repo setup
Бърз старт
M1: One-command build
Пълен автоматизиран build процес с една команда:
# 1. Конфигуриране
# Редактирай scripts/config.env и задай:
# REPO_SSH="root@repo.feder.example"
# GPG_NAME="Feder Repo" (ако е различно)
# 2. Build всичко
./scripts/build_all.sh
# Това автоматично:
# - Изгражда rootfs с Feder пакети
# - Създава bootable UEFI disk image
# - Стартира QEMU за тест
SDK Quick Start
За разработка на приложения с Feder SDK:
# 1. Setup SDK environment
./sdk/scripts/setup.sh
# 2. Build примерен проект
./sdk/tools/build.sh sdk/examples/hello-world
# 3. Run тестове
./sdk/tests/run-all.sh
# 4. Създай нов проект
cp -r sdk/examples/hello-world my-app
./sdk/tools/build.sh my-app
Ръчен процес (по стъпки)
# 1. Build RPM пакет
./scripts/02_build_rpm_mock_aarch64.sh packaging/SPECS/feder-release.spec
# 2. Подписване
./scripts/03_sign_rpms.sh
# 3. Публикуване в testing (ако REPO_SERVER е зададен)
export REPO_SERVER=root@repo.feder.example
./scripts/04_publish_testing.sh
# 4. Изграждане на rootfs
sudo ./scripts/10_make_installroot.sh
# 5. Създаване на bootable image
sudo ./scripts/11_make_disk_image.sh 6
# 6. Boot в QEMU
./scripts/12_run_qemu_aarch64.sh
Пакети в репозиториума
Layer 1: Repo Bootstrap (Първи слой - задължителен)
- feder-repo - Repository конфигурация и GPG ключ (ПЪРВИ ПАКЕТ - трябва да се инсталира първи)
- feder-release - OS идентичност и брендинг (VARIANT=mobile, VERSION_ID=0.1)
Layer 2: Base OS (Втори слой - минимален bootable Linux)
- feder-base - Meta пакет за минимален bootable Linux
- systemd, NetworkManager, dnf, ca-certificates, chrony, sudo, openssh-server, zram-generator, selinux-policy-targeted
- feder-security-baseline - Security defaults (firewalld enabled, sshd disabled)
Layer 3: Mobile Stack (Трети слой - мобилна функционалност)
- feder-mobile - Meta пакет за мобилна функционалност
- ModemManager, NetworkManager-wifi, bluez, pipewire, wireplumber, libinput, iio-sensor-proxy, policycoreutils
- feder-mobile-services - Systemd presets за mobile services (NetworkManager, ModemManager, bluetooth, pipewire, etc.)
- feder-runtime-policy - Runtime политики (zram, journald limits, logind, sysctl, NetworkManager)
Layer 4: UI & Boot Experience (Четвърти слой - потребителски интерфейс)
- feder-ui-phosh - Meta пакет за Phosh UI
- phosh, phoc, squeekboard, wayland, mesa-dri-drivers, gnome-session
- feder-plymouth-theme - Custom Plymouth boot splash с Feder logo
- feder-quiet-boot - Quiet boot configuration (тих boot с Plymouth)
Layer 5: First Boot & UX (Пети слой - първоначална настройка)
- feder-firstboot - First boot provisioning (feder user, GDM autologin, Wayland)
- feder-ux-defaults - Phone-like UX defaults (lockscreen, display timeout, suspend policy) via dconf
Layer 6: Applications & First-Run Experience (Шести слой - приложения и готовност)
- feder-apps-core - Core applications meta-package (Settings, Files, Browser, Terminal, Text editor, Calculator, Image viewer, Clocks, Software center, Calls, Chatty)
- feder-portal - Feder welcome portal (offline локална страница, работи без интернет)
- feder-default-home - Default home experience (Epiphany homepage + pinned favorites via dconf)
Optional Packages (Опционални)
- feder-apps-extra - Extra applications meta-package (Weather, Maps, Scanner)
- feder-debug - Debug инструменти (htop, strace, tcpdump, wireshark-cli)
Legacy Packages (Остарели - не се препоръчват)
- feder-autologin - Автоматичен login (legacy, заменен от feder-firstboot)
- feder-config-mobile - Мобилна конфигурация (legacy)
Работен процес в Cursor
Стандартният цикъл за разработка:
- Редакция на
packaging/SPECS/*.specилиpackaging/SOURCES/* ./scripts/02_build_rpm_mock_aarch64.sh packaging/SPECS/<package>.spec./scripts/03_sign_rpms.sh./scripts/04_publish_testing.sh(ако REPO_SERVER е зададен)- Тест инсталация (installroot/QEMU)
- Ако е зелено →
./scripts/05_promote_to_stable.sh - Git commit (малък, ясен), tag за milestone
Конфигурация
Repository Server
Задайте REPO_SERVER environment variable или редактирайте scripts/config.env:
export REPO_SERVER=root@repo.feder.example
Или в scripts/config.env:
REPO_SSH="root@repo.feder.example"
Package List
Редактирайте images/configs/installroot-packages.txt за промяна на пакетите в rootfs.
GPG Key
Генерирайте GPG ключ на Build/Sign машината:
gpg --full-generate-key
# Използвайте "Feder Repo" като име
# Експорт на публичния ключ
gpg --armor --export "Feder Repo" > packaging/SOURCES/RPM-GPG-KEY-FEDER
Архитектура
Слоеве на пакетите (по приоритет)
Layer 1: Repo Bootstrap
feder-repo (standalone, ПЪРВИ ПАКЕТ)
└── feder-release
Layer 2: Base OS
└── feder-base
└── feder-security-baseline
Layer 3: Mobile Stack
└── feder-mobile
├── feder-mobile-services
└── feder-runtime-policy
Layer 4: UI & Boot
└── feder-ui-phosh
├── feder-plymouth-theme
└── feder-quiet-boot
Layer 5: First Boot & UX
├── feder-firstboot
└── feder-ux-defaults
Layer 6: Applications & First-Run
├── feder-apps-core
├── feder-portal
└── feder-default-home
Optional (standalone):
feder-apps-extra
feder-debug
Repository канали
- testing - Development и тестване (по подразбиране enabled)
- stable - Production устройства (по подразбиране disabled)
Workflow
1. Build package
↓
2. Publish to testing
↓
3. Test in QEMU/device
↓
4. Promote to stable
↓
5. Production devices update
Документация
OS Development
- docs/00-vision.md - Визия и development roadmap
- docs/01-repo-policy.md - Repository политика и OTA стратегия
- docs/02-packages.md - Архитектура на пакетите
- docs/03-image-build-qemu.md - Изграждане на bootable образ
- docs/04-device-enablement.md - Device enablement процес
SDK (Software Development Kit)
- sdk/README.md - SDK общ преглед
- sdk/docs/getting-started.md - Начално ръководство за SDK
- sdk/docs/api-reference.md - API референция
- sdk/docs/examples.md - Примери и tutorials
- docs/05-sdk-development.md - SDK Development Guide
- docs/06-sdk-examples-and-tests.md - Examples and Tests Guide
Ключови принципи
1. Отгоре надолу
Feder се изгражда отгоре надолу:
repo → userland → image → устройство.
Не обратно.
2. Необратима еволюция
Оттук нататък Feder не се "прави".
Feder се поддържа.
3. Mobile-first
Телефон ≠ компютър.
Mobile-first, не desktop.
Изисквания
Build/Sign машина
sudo dnf install -y \
mock rpm-build rpmdevtools \
createrepo_c gnupg2 rpm-sign \
rsync openssh-clients \
qemu-system-aarch64 qemu-img \
dosfstools e2fsprogs \
systemd-boot-unsigned edk2-aarch64 \
parted
Repository сървър
sudo mkdir -p /srv/feder-repo/{stable,testing}/aarch64/{Packages,repodata}
sudo mkdir -p /srv/feder-repo/keys
sudo chown -R root:root /srv/feder-repo
sudo chmod -R 755 /srv/feder-repo
Следващи стъпки
- ✅ Първи успешен boot в QEMU
- ⏳ Runtime policy тестване
- ⏳ RC0 release
- ⏳ Device enablement (след стабилен userland)
Лиценз
[Добавете лиценз]
Репозиториум
- Git: https://git.vi-lab.eu/orion/feder
- Branch: main
Контакти
[Добавете контакти]