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