# 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.