All Projects → dimkr → packlim

dimkr / packlim

Licence: MIT License
A small, hackable and secure package manager

Programming Languages

c
50402 projects - #5 most used programming language
tcl
693 projects
Makefile
30231 projects
                  _    _ _
 _ __   __ _  ___| | _| (_)_ __ ___
| '_ \ / _` |/ __| |/ / | | '_ ` _ \
| |_) | (_| | (__|   <| | | | | | | |
| .__/ \__,_|\___|_|\_\_|_|_| |_| |_|
|_|

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]<info >: verifying the package list   \/
  [22/12 19:04:00]<info >: building the package installation queue
  [22/12 19:04:00]<warn >: iana-etc is already installed (!)
  [22/12 19:04:00]<warn >: linux-libre-headers is already installed (!)
  [22/12 19:04:00]<warn >: musl is already installed (!)
  [22/12 19:04:00]<warn >: zlib is already installed (!)
  [22/12 19:04:00]<info >: downloading fuse, libseccomp, libwaive and luufs
  [22/12 19:04:00]<debug>: (reading libseccomp-2.2.3.pkg)     /\
  [22/12 19:04:00]<info >: verifying libseccomp-2.2.3.pkg     ||
  [22/12 19:04:00]<info >: registering libseccomp             ||
  [22/12 19:04:00]<info >: extracting libseccomp-2.2.3.pkg    ||
  [22/12 19:04:00]<debug>: (reading libwaive-22122015.pkg)    ||
  [22/12 19:04:00]<info >: verifying libwaive-22122015.pkg    Parallel download
  [22/12 19:04:00]<info >: registering libwaive               of all packages
  [22/12 19:04:00]<info >: extracting libwaive-22122015.pkg   in a dependency
  [22/12 19:04:00]<debug>: (reading fuse-2.9.4.pkg)           chain, before it
  [22/12 19:04:00]<info >: verifying fuse-2.9.4.pkg           gets installed
  [22/12 19:04:00]<info >: registering fuse
  [22/12 19:04:00]<info >: extracting fuse-2.9.4.pkg
  [22/12 19:04:00]<debug>: (reading luufs-22122015.pkg)
  [22/12 19:04:00]<info >: verifying luufs-22122015.pkg<=====Digitally-signed
  [22/12 19:04:00]<info >: registering luufs                 packages
  [22/12 19:04:01]<info >: extracting luufs-22122015.pkg
                                  /\
                                  ||
                Support for multiple compression algorithms

  # packlim autoremove luufs
  [22/12 19:04:07]<info >: removing luufs
  [22/12 19:04:07]<debug>: (removing unneeded packages)<=====Automatic removal
  [22/12 19:04:07]<info >: removing fuse                     of unneeded
  [22/12 19:04:07]<info >: removing libwaive                 packages
  [22/12 19:04:07]<info >: 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/).
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].