📦 HPM – Hacker Package Manager

Wersja 0.8.0 – nowoczesny menedżer pakietów oparty na repozytoriach git, z izolacją sandbox i wsparciem dla aplikacji GUI.

Spis treści

🔧 Instalacja HPM

HPM instaluje się przez skompilowanie ze źródeł (wymaga Rust i Cargo):

git clone https://github.com/HackerOS-Linux-System/Hacker-Package-Manager.git
cd Hacker-Package-Manager/source-code
cargo build --release
sudo cp target/release/hpm /usr/bin/hpm
sudo mkdir -p /usr/lib/HackerOS/hpm /var/lib/hpm /var/cache/hpm
sudo chmod 755 /usr/bin/hpm

Po instalacji możesz uruchomić hpm --help.

📘 Podstawowe polecenia

PolecenieOpis
hpm refreshPobiera najnowszy indeks pakietów z centralnego repozytorium i aktualizuje lokalne kopie repozytoriów git.
hpm install <pakiet>[@wersja]Instaluje pakiet (domyślnie najnowszą wersję).
hpm remove <pakiet>[@wersja]Usuwa pakiet lub konkretną wersję.
hpm updateAktualizuje wszystkie zainstalowane pakiety (z pominięciem przypiętych).
hpm switch <pakiet> <wersja>Przełącza aktywną wersję pakietu.
hpm run <pakiet> <bin> [args...]Uruchamia binarkę z pakietu w izolowanym sandboxie.
hpm info <pakiet>Wyświetla szczegółowe informacje o pakiecie.
hpm search <fraza>Przeszukuje nazwy i opisy pakietów.
hpm listLista zainstalowanych pakietów.
hpm outdatedPokazuje pakiety, dla których istnieje nowsza wersja.
hpm pin <pakiet> <wersja>Przypina wersję (blokuje aktualizację).
hpm unpin <pakiet>Usuwa przypięcie z bieżącej wersji.
hpm verify <pakiet>Weryfikuje sumę kontrolną zainstalowanego pakietu.
hpm deps <pakiet>[@wersja]Wyświetla drzewo zależności.

📦 Tworzenie repozytorium pakietu

Każdy pakiet w HPM to repozytorium git. Wersje są oznaczane tagami (np. v1.0, 1.0). W katalogu głównym repozytorium muszą znajdować się odpowiednie pliki konfiguracyjne.

Struktura katalogów

nazwa-pakietu/
├── LICENSE              (opcjonalnie, ale zalecane)
├── src/                 (opcjonalnie, kod źródłowy)
├── build.info           (skrypt budowania – wykonywalny)
└── info.hk              (główny plik metadanych)

Po zbudowaniu pakietu, skrypt build.info powinien utworzyć katalog contents/ z docelowymi plikami (np. binarki, biblioteki, pliki konfiguracyjne). To właśnie zawartość contents/ zostanie skopiowana do katalogu store HPM.

Plik info.hk – format

Plik info.hk jest napisany w składni podobnej do TOML. Zawiera następujące sekcje:

[metadata]
name = "nazwa-pakietu"
version = "1.0"
authors = "Imię Nazwisko lub Zespół"
license = "MIT"

[description]
summary = "Krótki opis, max 50 znaków"
long = "Dłuższy opis, może być wieloliniowy"

[build]
commands = ["./build.info"]          # lista komend do wykonania w sandboxie
deb_deps = ["build-essential", "libssl-dev"]   # pakiety .deb wymagane do budowania

[runtime]
deb_deps = ["libssl3", "libc6"]      # pakiety .deb wymagane do uruchomienia

[sandbox]
network = false                       # dostęp do sieci
gui = false                           # podstawowe wsparcie GUI (X11)
full_gui = true                        # pełne wsparcie GUI (X11, Wayland, D-Bus, PulseAudio, /dev/dri)
filesystem = ["/etc/app/config"]      # dodatkowe ścieżki do montowania (bind)
dev = false                            # czy montować /dev (urządzenia)

[bins]
nazwa-binarki = ""                     # lista binarek (klucz = nazwa pliku w contents/bin)
Uwaga: Sekcje build i runtime są opcjonalne. Jeśli nie ma build.commands, HPM nie będzie budował – zakłada, że contents/ istnieje już w repozytorium (np. dla pakietów binarnych).

Plik build.info

Jest to zwykły skrypt powłoki (powinien mieć ustawione prawo wykonywalności). Wykonuje się w sandboxie z zamontowanym katalogiem źródłowym w /app. Jego zadaniem jest utworzenie katalogu /app/contents z ostateczną zawartością pakietu. Przykład:

#!/bin/sh
# kompilacja
gcc src/narzedzie.c -o narzedzie
# utworzenie struktury
mkdir -p contents/bin
mv narzedzie contents/bin/
# ewentualne pliki konfiguracyjne
cp -r config/* contents/

Zależności systemowe (.deb)

HPM potrafi automatycznie instalować brakujące pakiety .deb (przez apt) – zarówno na etapie budowania, jak i na etapie uruchamiania. Użytkownik jest pytany o zgodę przed instalacją. Dzięki temu pakiety mogą wymagać np. libgtk-3-0 dla GUI, a HPM zadba o ich obecność w systemie.

Przykład kompletnego pakietu

Załóżmy, że tworzymy narzędzie scanme – skaner portów. Repozytorium scanme.git:

scanme/
├── LICENSE (MIT)
├── src/
│   └── scanme.c
├── build.info
└── info.hk

build.info:

#!/bin/sh
gcc src/scanme.c -o scanme -lpthread
mkdir -p contents/bin
mv scanme contents/bin/

info.hk:

[metadata]
name = "scanme"
version = "1.2"
authors = "John Doe"
license = "MIT"

[description]
summary = "Szybki skaner portów"
long = "Narzędzie do skanowania portów TCP/UDP z obsługą wątków."

[build]
commands = ["./build.info"]
deb_deps = ["build-essential"]

[runtime]
deb_deps = ["libc6"]

[sandbox]
network = true
gui = false
filesystem = []

[bins]
scanme = ""

Następnie tagujemy wersję: git tag 1.2 i wypychamy do zdalnego repozytorium.

🌐 Centralne repozytorium repo.json

Aby HPM wiedział, skąd pobierać pakiety, prowadzona jest centralna lista w pliku JSON dostępnym pod adresem:
https://raw.githubusercontent.com/HackerOS-Linux-System/Hacker-Package-Manager/main/repo/repo.json
(możesz utworzyć własne lustro lub dodać swoje repozytorium do tej listy przez pull request).

Format pliku repo.json

{
  "packages": {
    "nazwa-pakietu": {
      "repo": "https://github.com/użytkownik/nazwa-pakietu.git",
      "versions": ["1.0", "1.1", "2.0"]
    },
    "inny-pakiet": {
      "repo": "https://gitlab.com/inny/inny-pakiet.git",
      "versions": ["0.9", "1.0"]
    }
  }
}

Pole versions to lista tagów, które HPM ma traktować jako dostępne wersje. Najnowsza wersja (do domyślnej instalacji) to ostatni element listy (zakładając, że lista jest posortowana rosnąco). Możesz podać wszystkie tagi lub tylko wybrane.

Dodawanie nowego pakietu do centralnego repo

  1. Przygotuj repozytorium git z pakietem zgodnie z powyższymi zasadami.
  2. Utwórz tag wersji (np. git tag 1.0).
  3. Dodaj wpis w pliku repo.json (możesz zgłosić pull request do oficjalnego repozytorium HPM).
  4. Po zaakceptowaniu PR, użytkownicy wykonają hpm refresh i będą mogli instalować twój pakiet.
Wskazówka: Możesz także hostować własną kopię repo.json i skonfigurować HPM, aby używał innego URL – wystarczy zmienić stałą REPO_JSON_URL w kodzie źródłowym lub dodać opcję konfiguracji (w przyszłych wersjach).

📢 Publikacja własnego pakietu

Aby twoje narzędzie było dostępne dla społeczności HPM:

Po dodaniu, użytkownicy HPM na całym świecie będą mogli zainstalować twoje oprogramowanie jednym poleceniem:

hpm install twoj-pakiet