No description
Find a file
Живко Георгиев e0f362b7c7
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
Add Feder SDK: structure, tools, examples, tests, and CI integration
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
2025-12-13 12:18:41 +02:00
.forgejo/workflows Add Feder SDK: structure, tools, examples, tests, and CI integration 2025-12-13 12:18:41 +02:00
ci M1: One-command build - Complete Cursor-first project structure 2025-12-13 03:25:49 +02:00
docs Add Feder SDK: structure, tools, examples, tests, and CI integration 2025-12-13 12:18:41 +02:00
images/configs Add Feder SDK: structure, tools, examples, tests, and CI integration 2025-12-13 12:18:41 +02:00
packaging Add Feder SDK: structure, tools, examples, tests, and CI integration 2025-12-13 12:18:41 +02:00
repo M1: One-command build - Complete Cursor-first project structure 2025-12-13 03:25:49 +02:00
scripts Add Feder OS packages: firstboot, ux-defaults, security-baseline, plymouth-theme, quiet-boot, runtime-policy, mobile-services 2025-12-13 04:04:22 +02:00
sdk Add Feder SDK: structure, tools, examples, tests, and CI integration 2025-12-13 12:18:41 +02:00
.gitignore M2a: Add CI/CD workflow and update documentation 2025-12-13 03:32:23 +02:00
FIXES.md M1: One-command build - Complete Cursor-first project structure 2025-12-13 03:25:49 +02:00
PACKAGES-SUMMARY.md M1: One-command build - Complete Cursor-first project structure 2025-12-13 03:25:49 +02:00
README.md Add Feder SDK: structure, tools, examples, tests, and CI integration 2025-12-13 12:18:41 +02:00
RELEASE-CHECKLIST.md M1: One-command build - Complete Cursor-first project structure 2025-12-13 03:25:49 +02:00

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

Стандартният цикъл за разработка:

  1. Редакция на packaging/SPECS/*.spec или packaging/SOURCES/*
  2. ./scripts/02_build_rpm_mock_aarch64.sh packaging/SPECS/<package>.spec
  3. ./scripts/03_sign_rpms.sh
  4. ./scripts/04_publish_testing.sh (ако REPO_SERVER е зададен)
  5. Тест инсталация (installroot/QEMU)
  6. Ако е зелено → ./scripts/05_promote_to_stable.sh
  7. 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

SDK (Software Development Kit)

Ключови принципи

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

Следващи стъпки

  1. Първи успешен boot в QEMU
  2. Runtime policy тестване
  3. RC0 release
  4. Device enablement (след стабилен userland)

Лиценз

[Добавете лиценз]

Репозиториум

Контакти

[Добавете контакти]