https://github.com/dimkr/packlim
A small, hackable and secure package manager
https://github.com/dimkr/packlim
Last synced: over 1 year ago
JSON representation
A small, hackable and secure package manager
- Host: GitHub
- URL: https://github.com/dimkr/packlim
- Owner: dimkr
- License: mit
- Created: 2014-10-18T20:15:01.000Z (almost 12 years ago)
- Default Branch: master
- Last Pushed: 2016-03-05T21:12:50.000Z (over 10 years ago)
- Last Synced: 2025-03-31T01:23:30.230Z (over 1 year ago)
- Language: C
- Homepage: http://rlsd2.dimakrasner.com
- Size: 205 KB
- Stars: 16
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README
- License: COPYING
Awesome Lists containing this project
README
_ _ _
_ __ __ _ ___| | _| (_)_ __ ___
| '_ \ / _` |/ __| |/ / | | '_ ` _ \
| |_) | (_| | (__| <| | | | | | | |
| .__/ \__,_|\___|_|\_\_|_|_| |_| |_|
|_|
Overview
========
packlim is a small, lightweight, hackable and permissively-licensed package
manager for Linux (https://www.kernel.org/) distributions.
packlim's performance-critical parts are written in C and the rest (mostly
logic and I/O) in written in Tcl, using Jim (http://jim.tcl.tk/). Native code
provides speed and parallelism, while exceptions and garbage collection improve
error handling and resource efficiency. Also, the use of a scripting language
greatly reduces the amount of code.
packlim is the successor to packlad (https://github.com/dimkr/packlad), which
tries to achieve the same goals using C code alone.
Features
========
Recursive dependencies resolution
# packlim install snownews ||
[22/12 19:04:00]: verifying the package list \/
[22/12 19:04:00]: building the package installation queue
[22/12 19:04:00]: iana-etc is already installed (!)
[22/12 19:04:00]: linux-libre-headers is already installed (!)
[22/12 19:04:00]: musl is already installed (!)
[22/12 19:04:00]: zlib is already installed (!)
[22/12 19:04:00]: downloading fuse, libseccomp, libwaive and luufs
[22/12 19:04:00]: (reading libseccomp-2.2.3.pkg) /\
[22/12 19:04:00]: verifying libseccomp-2.2.3.pkg ||
[22/12 19:04:00]: registering libseccomp ||
[22/12 19:04:00]: extracting libseccomp-2.2.3.pkg ||
[22/12 19:04:00]: (reading libwaive-22122015.pkg) ||
[22/12 19:04:00]: verifying libwaive-22122015.pkg Parallel download
[22/12 19:04:00]: registering libwaive of all packages
[22/12 19:04:00]: extracting libwaive-22122015.pkg in a dependency
[22/12 19:04:00]: (reading fuse-2.9.4.pkg) chain, before it
[22/12 19:04:00]: verifying fuse-2.9.4.pkg gets installed
[22/12 19:04:00]: registering fuse
[22/12 19:04:00]: extracting fuse-2.9.4.pkg
[22/12 19:04:00]: (reading luufs-22122015.pkg)
[22/12 19:04:00]: verifying luufs-22122015.pkg<=====Digitally-signed
[22/12 19:04:00]: registering luufs packages
[22/12 19:04:01]: extracting luufs-22122015.pkg
/\
||
Support for multiple compression algorithms
# packlim autoremove luufs
[22/12 19:04:07]: removing luufs
[22/12 19:04:07]: (removing unneeded packages)<=====Automatic removal
[22/12 19:04:07]: removing fuse of unneeded
[22/12 19:04:07]: removing libwaive packages
[22/12 19:04:07]: removing libseccomp
In addition, packlim:
- Supports installation of packages to a prefix other than /
- Has a scripting interface
Scripting Interface
===================
packlim allows complex package management tasks, using a Tcl API in the
"packlim" namespace. In addition, it wraps the libraries it depends on with Tcl
commands.
For example:
1) To list the packages available in a repository:
puts [packlim::available http://repository ""]
2) To remove a package:
packlim::remove ca-certificates [packlim::installed]
3) To list the files contained in a tar archive:
tar.list /path/to/tar
4) To download a file:
curl get http://some/file /some/path
5) To remove all unneeded dependency packages:
packlim::cleanup
packlim uses all API internally as well; see its implementation for more usage
examples.
Missing Features
================
- Support for multiple repositories - packlim is designed for small
distributions with one repository per architecture
- Support for multiple architectures in one repository
Dependencies
============
- libarchive (http://libarchive.org/) with support for:
- lzip (http://www.nongnu.org/lzip/lzip.html)
- XZ (http://tukaani.org/xz/)
- gzip (https://www.gnu.org/software/gzip/)
- libcurl (http://curl.haxx.se/)
Ed25519 (https://github.com/orlp/ed25519) and jimtcl (http://jim.tcl.tk/) are
embedded into packlim's source code as submodules.
Building
========
# git clone --recursive https://github.com/dimkr/packlim
# cd packlim
# make
# make install
Hacking
=======
packlim is implemented as jimtcl (http://jim.tcl.tk/) C extensions, Tcl logic
and a C wrapper for everything.
packlim follows jimtcl's coding style conventions.
Credits and Legal Information
=============================
packlim is free and unencumbered software released under the terms of the MIT
license; see COPYING for the license text. For a list of its authors and
contributors, see AUTHORS.
The ASCII art logo at the top was made using FIGlet (http://www.figlet.org/).