diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..2091445 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Tola Mironcenko + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 09b5c68..db93037 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,138 @@ -# PM - package manager for simple linux +# PM - Package Manager for Simple Linux -## Filetree +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 -├── tmp +│ └── repo # Repository configuration +├── tmp # Temporary files ├── usr │ ├── bin -│ │ └── pm +│ │ └── pm # Main PM executable │ └── share │ └── pm -│ ├── packages -│ ├── query -│ └── repos +│ ├── packages # Package metadata +│ ├── query # Query cache +│ └── repos # Repository data │ └── localhost │ └── query └── var └── cache └── pm - └── pkg + └── pkg # Cached package files ``` -## Package structure (pfetch for example) +## Package Format + +PM packages use a simple archive format with the following structure: ``` -pfetch.pkg +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 @@ -36,14 +141,73 @@ pfetch.pkg └── pfetch ``` -## Example list file (pfetch for example) - +**list file:** ``` usr/bin/pfetch ``` -## Example deps file (pfetch for example) - +**deps file:** ``` busybox -``` \ No newline at end of file +``` + +## 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. \ No newline at end of file