213 lines
4.2 KiB
Markdown
213 lines
4.2 KiB
Markdown
# PM - Package Manager for Simple Linux
|
|
|
|
A lightweight, shell-based package manager designed for simple Linux systems. PM provides essential package management functionality with minimal dependencies and a straightforward command-line interface.
|
|
|
|
## Features
|
|
|
|
- **Lightweight**: Written in pure shell script with minimal dependencies
|
|
- **Simple**: Easy-to-use command-line interface
|
|
- **Flexible**: Supports local and remote package installation
|
|
- **Portable**: Works on any POSIX-compliant system
|
|
- **Efficient**: Fast package operations with local caching
|
|
|
|
## Installation
|
|
|
|
### From Source
|
|
|
|
1. Clone or download the repository
|
|
2. Run the installation command:
|
|
|
|
```bash
|
|
sudo make install
|
|
```
|
|
|
|
### Manual Installation
|
|
|
|
Copy the `src/pm` script to `/usr/bin/pm` and ensure it's executable:
|
|
|
|
```bash
|
|
sudo cp src/pm /usr/bin/pm
|
|
sudo chmod +x /usr/bin/pm
|
|
```
|
|
|
|
## Usage
|
|
|
|
### Basic Commands
|
|
|
|
```bash
|
|
# Install a package
|
|
pm add package-name
|
|
|
|
# Download package without installing
|
|
pm down package-name
|
|
|
|
# Install from local package file
|
|
pm unpack /path/to/package.pkg.gz
|
|
|
|
# Remove a package
|
|
pm del package-name
|
|
|
|
# List files in a package
|
|
pm list package-name
|
|
|
|
# Search for packages
|
|
pm search package-name
|
|
|
|
# Show installed packages
|
|
pm query
|
|
|
|
# Show help
|
|
pm help
|
|
```
|
|
|
|
### Examples
|
|
|
|
```bash
|
|
# Install pfetch package
|
|
pm add pfetch
|
|
|
|
# Download busybox without installing
|
|
pm down busybox
|
|
|
|
# Install from local package
|
|
pm unpack ./custom-package.pkg.gz
|
|
|
|
# Remove pfetch
|
|
pm del pfetch
|
|
|
|
# List all files in busybox package
|
|
pm list busybox
|
|
|
|
# Search for packages containing "fetch"
|
|
pm search fetch
|
|
```
|
|
|
|
## Directory Structure
|
|
|
|
PM uses the following directory structure:
|
|
|
|
```
|
|
/
|
|
├── etc
|
|
│ └── pm
|
|
│ └── repo # Repository configuration
|
|
├── tmp # Temporary files
|
|
├── usr
|
|
│ ├── bin
|
|
│ │ └── pm # Main PM executable
|
|
│ └── share
|
|
│ └── pm
|
|
│ ├── packages # Package metadata
|
|
│ ├── query # Query cache
|
|
│ └── repos # Repository data
|
|
│ └── localhost
|
|
│ └── query
|
|
└── var
|
|
└── cache
|
|
└── pm
|
|
└── pkg # Cached package files
|
|
```
|
|
|
|
## Package Format
|
|
|
|
PM packages use a simple archive format with the following structure:
|
|
|
|
```
|
|
package-name.pkg.gz
|
|
├── list # List of files in package
|
|
├── deps # Package dependencies
|
|
├── post_install # Post-installation script (optional)
|
|
└── usr/ # Package files
|
|
└── bin/
|
|
└── executable
|
|
```
|
|
|
|
### Package Files
|
|
|
|
- **list**: Contains a list of all files included in the package
|
|
- **deps**: Lists package dependencies (one per line)
|
|
- **post_install**: Optional script executed after installation
|
|
- **Package files**: The actual files to be installed
|
|
|
|
### Example Package Structure (pfetch)
|
|
|
|
```
|
|
pfetch.pkg.gz
|
|
├── list
|
|
├── deps
|
|
├── post_install
|
|
└── usr
|
|
└── bin
|
|
└── pfetch
|
|
```
|
|
|
|
**list file:**
|
|
```
|
|
usr/bin/pfetch
|
|
```
|
|
|
|
**deps file:**
|
|
```
|
|
busybox
|
|
```
|
|
|
|
## Creating Packages
|
|
|
|
To create a package for PM:
|
|
|
|
1. Create a directory with your package name
|
|
2. Add your files in the appropriate directory structure
|
|
3. Create a `list` file with all file paths
|
|
4. Create a `deps` file with dependencies
|
|
5. Optionally add a `post_install` script
|
|
6. Archive with gzip: `tar -czf package.pkg.gz package-dir/`
|
|
|
|
## Building
|
|
|
|
### Build Package
|
|
|
|
```bash
|
|
make package
|
|
```
|
|
|
|
### Clean Build Files
|
|
|
|
```bash
|
|
make clean
|
|
```
|
|
|
|
### Uninstall
|
|
|
|
```bash
|
|
sudo make uninstall
|
|
```
|
|
|
|
## Requirements
|
|
|
|
- POSIX-compliant shell (bash, dash, etc.)
|
|
- Basic Unix utilities (tar, gzip, etc.)
|
|
- Root privileges for installation/removal
|
|
|
|
## Contributing
|
|
|
|
1. Fork the repository
|
|
2. Create a feature branch
|
|
3. Make your changes
|
|
4. Test thoroughly
|
|
5. Submit a pull request
|
|
|
|
## License
|
|
|
|
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
|
|
## Author
|
|
|
|
**Tola Mironcenko**
|
|
|
|
## Version
|
|
|
|
Current version: 1.0.0
|
|
|
|
---
|
|
|
|
PM is designed to be simple, efficient, and reliable. For bug reports or feature requests, please open an issue in the project repository. |