packlim icon indicating copy to clipboard operation
packlim copied to clipboard

A small, hackable and secure package manager

              _    _ _

_ __ __ _ | | | () __ ___ | ' \ / |/ __| |/ / | | '_ _
| |
) | (
| | (| <| | | | | | | | | ./ _,|___||__||| || || ||

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/).