documentation
This commit is contained in:
131
README.md
131
README.md
@@ -1,3 +1,130 @@
|
||||
# Packets
|
||||
# 📦 Packets – Custom Package Manager for Linux
|
||||
|
||||
> A fast and minimal package manager written in Go with Lua hooks, local network discovery, and SQLite-based indexing.
|
||||
|
||||
---
|
||||
|
||||
## 📘 Overview
|
||||
|
||||
**Packets** is a lightweight package manager for Linux, written in Go. It supports:
|
||||
|
||||
- Installation and removal of packages
|
||||
- Dependency resolution and upgrading
|
||||
- `.tar.zst` compressed packages with `manifest.toml` metadata
|
||||
- Lua-based install/remove hooks
|
||||
- Local cache with SHA-256 validation
|
||||
- Peer-to-peer discovery over LAN
|
||||
- Remote package syncing via HTTP
|
||||
- SQLite-based local database
|
||||
|
||||
---
|
||||
|
||||
## 📁 Directory Structure
|
||||
|
||||
| Path | Description |
|
||||
|-----------------------|----------------------------------|
|
||||
| `/etc/packets/` | Configuration files |
|
||||
| `/opt/packets/` | Installed package data |
|
||||
| `/var/cache/packets/` | Cached `.tar.zst` package files |
|
||||
|
||||
(This can be changed in `/etc/packets/config.toml`)
|
||||
|
||||
---
|
||||
|
||||
# Available Commands
|
||||
|
||||
`packets install <name>` Install a package (resolves dependencies, executes Lua install hook)
|
||||
`packets remove <name>` Remove a package (executes Lua remove hook)
|
||||
`packets upgrade <name>` Upgrade a package by checking family and serial in the manifest
|
||||
`packets sync [url]` Synchronize index.db from remote HTTP source
|
||||
`packets serve init|stop` Starts and stop the LAN service daemon
|
||||
`packets list` List all installed packages
|
||||
|
||||
# 📦 Package Format
|
||||
|
||||
Packages must be compressed as .tar.zst and include:
|
||||
|
||||
.
|
||||
├── manifest.toml # Package metadata
|
||||
├── data/ # Files to install
|
||||
├── install.lua # Lua install hook
|
||||
└── remove.lua # Lua remove hook
|
||||
|
||||
|
||||
## Example manifest.toml
|
||||
``[Info]
|
||||
name = "packets"
|
||||
version = "1.0.0"
|
||||
description = "offline and online packetmanager"
|
||||
dependencies = []
|
||||
author = "robo"
|
||||
family = "1f84ca15-5077-4f1d-a370-0ec860766eb2"
|
||||
serial = 0
|
||||
|
||||
[Hooks]
|
||||
install = "install.lua"
|
||||
remove = "remove.lua"``
|
||||
|
||||
|
||||
# 🔄 Installation Process
|
||||
|
||||
Check if package is already cached and validated via SHA-256.
|
||||
|
||||
If not, search the package:
|
||||
|
||||
Via LAN: Sends UDP broadcast (Q:filename) to peers.
|
||||
|
||||
Via HTTP: Downloads from configured mirrors.
|
||||
|
||||
Decompress .tar.zst, install files.
|
||||
|
||||
Execute Lua install hook.
|
||||
|
||||
# 🧩 Core Features
|
||||
✅ Dependency Resolution
|
||||
|
||||
Installs required dependencies listed in the manifest.
|
||||
## 🌐 LAN Discovery
|
||||
|
||||
Broadcasts package request to devices in the same network via UDP.
|
||||
## 📡 Remote Download
|
||||
|
||||
Downloads package via HTTP if not found on LAN.
|
||||
## 🔒 Security
|
||||
|
||||
SHA-256 checksum validation
|
||||
|
||||
Path validation to avoid exploits (..)
|
||||
|
||||
Safe, sandboxed Lua runtime with limited API
|
||||
|
||||
## 🛠️ Allowed Lua API (install/remove hooks)
|
||||
|
||||
To ensure security, only a limited set of safe functions are exposed in Lua hooks:
|
||||
|
||||
os.remove(path)
|
||||
os.rename(old, new)
|
||||
os.copy(source, target)
|
||||
os.symlink(source, target)
|
||||
io.open(path, mode)
|
||||
path_join(...) -- Safely join path segments
|
||||
|
||||
### Note: Dangerous functions like os.execute, os.getenv, etc. are removed.
|
||||
## 🗃️ Databases
|
||||
|
||||
index.db: Available packages (after sync)
|
||||
|
||||
installed.db: Packages currently installed
|
||||
|
||||
#⚠️ Restrictions & Notes
|
||||
|
||||
Linux only (//go:build linux)
|
||||
|
||||
Root permissions required for most commands
|
||||
|
||||
Changing dataDir triggers prompt to migrate installed packages
|
||||
|
||||
Binaries in binDir are not automatically moved if path changes
|
||||
|
||||
Do not manually edit lastDataDir
|
||||
|
||||
An open-source packet manager, where anyone can publish your own package trought https://servidordomal.fun
|
||||
|
||||
Reference in New Issue
Block a user