mirror of
https://codeberg.org/kiss-community/kiss
synced 2024-11-04 14:05:41 -07:00
6.9 KiB
6.9 KiB
kiss
Tiny and straightforward package manager for KISS written in POSIX sh
.
- Only 500~ lines of POSIX
sh
(excluding blank lines and comments). - Runtime dependency detection.
- Incremental package installation.
- Fast dependency solver.
- File conflict detection.
- Package alternatives system.
- Binary stripping.
shellcheck
compliant.
Usage
➜ kiss
-> kiss [a|b|c|i|l|r|s|u|v] [pkg] [pkg] [pkg]
-> alternatives: List and swap to alternatives
-> build: Build a package
-> checksum: Generate checksums
-> install: Install a package
-> list: List installed packages
-> remove: Remove a package
-> search: Search for a package
-> update: Check for updates
-> version: Package manager version
Index
Package format
See: https://getkiss.org/pages/package-system/
Customization
# The package manager is controlled through environment variables.
#
# These can be set in your '.profile' or '/etc/profile.d' to have
# the options apply all the time.
#
# These can also be set in the current shell to have them apply
# only for the current session.
#
# NOTE: The values shown below are the defaults.
# Managing repositories.
#
# This works exactly like '$PATH' (Colon separated).
#
# A list of repositories the package manager will use. You can
# add your own repositories or remove the default ones.
export KISS_PATH=/var/db/kiss/repo/core:/var/db/kiss/repo/extra:/var/db/kiss/repo/xorg
# Delete junk from packages.
#
# This works exactly like '$PATH' (Colon separated).
#
# A list of paths and files to remove from built packages.
#
# Set this to a blank value to keep all of the below files
# and directories around. This can be customized to keep or
# remove whatever you like.
export KISS_RM=usr/share/doc:usr/share/gtk-doc:usr/share/info:usr/share/polkit-1:usr/share/gettext:usr/share/locale:etc/bash_completion.d:usr/share/zsh
# Force package installation or removal.
#
# This can be used to bypass the dependency checks on installation
# and removal of packages.
#
# Set it to '1' to force.
export KISS_FORCE=0
# Root directory.
#
# Where installed packages will go. You won't ever need
# to touch this during normal usage.
#
# This can be used to have the package manager run in a "fake root".
export KISS_ROOT=/
# Keep build, package and extraction cache directories for debugging
# purposes.
#
# Set it to '1' to enable.
export KISS_DEBUG=0
# Use a reproducible cache naming scheme.
#
# The package manager builds packages inside 'build-$PID/' with '$PID'
# being the package manager's process ID. This allows for multiple
# builds to happen at once.
#
# You can override this and _know_ the location beforehand with the
# below environment variable. 'KISS_PID=test' will build the package
# in 'build-test'.
#
# Unset by default.
export KISS_PID=
#
# non-package-manager related options.
# These are listed for clarity.
#
# Cache directory location.
export XDG_CACHE_HOME=$HOME/.cache/
# Compiler.
export CC=gcc
export CXX=g++
# AR.
export AR=ar
# NM.
export NM=nm
# RANLIB.
export RANLIB=ranlib
# Compiler flags.
# Good value: CFLAGS/CXXFLAGS='-march=native -pipe -O2'
export CFLAGS=
export CXXFLAGS=
# Linker flags.
export LDFLAGS=
# Make flags.
# Good value: MAKEFLAGS='-j 4' (number of cores).
export MAKEFLAGS=
# Cmake Generator.
# Good value (Ninja): export CMAKE_GENERATOR=Ninja
# Good value (Makefiles): export CMAKE_GENERATOR=
export CMAKE_GENERATOR=
Alternatives system
When a package with conflicts is installed with KISS_CHOICE=1
, the conflicting files will be added as "choices" to the alternatives system.
Afterwards, running kiss a
/kiss alternatives
will list all of the choices you are able to make. Each line of output with this command is also usable directly as input.
NOTE If a package has fewer than 10 conflicting files, the conflicting files will automatically be added to the alternatives system.
Example usage:
# List alternatives.
-> kiss a
-> Alternatives:
ncurses /usr/bin/clear
ncurses /usr/bin/reset
# Swap to ncurses 'clear'.
-> kiss a ncurses /usr/bin/clear
-> Swapping '/usr/bin/clear' from 'busybox' to 'ncurses'
Password:
# New listing (busybox clear was swapped out).
-> kiss a
-> Alternatives:
busybox /usr/bin/clear
ncurses /usr/bin/reset
Example usage (complex):
-> kiss i sbase
# More lines...
/var/db/kiss/installed/util-linux/manifest:/usr/bin/renice
/var/db/kiss/installed/util-linux/manifest:/usr/bin/logger
/var/db/kiss/installed/util-linux/manifest:/usr/bin/flock
/var/db/kiss/installed/util-linux/manifest:/usr/bin/cal
!> Package 'sbase' conflicts with another package
!> Run 'KISS_CHOICE=1 kiss i sbase' to add conflicts
!> as alternatives.
# There were more than 10 conflicts so the alternatives system
# must be manually enabled for this package.
-> KISS_CHOICE=1 kiss i sbase
# More lines...
-> sbase Found conflict (/usr/bin/renice), adding choice
-> sbase Found conflict (/usr/bin/logger), adding choice
-> sbase Found conflict (/usr/bin/flock), adding choice
-> sbase Found conflict (/usr/bin/cal), adding choice
-> sbase Installing package incrementally
-> sbase Installed successfully
# List alternatives.
-> kiss a
-> Alternatives:
# More lines...
sbase /usr/bin/uuencode
sbase /usr/bin/wc
sbase /usr/bin/which
sbase /usr/bin/whoami
sbase /usr/bin/xargs
sbase /usr/bin/yes
# Swapping in bulk (all of sbase).
# The 'kiss a' command with '-' as an argument will read
# from stdin and use each line as arguments to 'kiss a'.
kiss a | grep ^sbase | kiss a -
# New listing, sbase has replaced busybox utilities.
-> kiss a
-> Alternatives:
# More lines...
busybox /usr/bin/uuencode
busybox /usr/bin/wc
busybox /usr/bin/which
busybox /usr/bin/whoami
busybox /usr/bin/xargs
busybox /usr/bin/yes
# NOTE: Two sbase utilities currently have issues with kiss.
# 'su' and 'tar'. You will need to swap these back to
# 'busybox'.
kiss a busybox /usr/bin/su
kiss a busybox /usr/bin/tar
Extending the package manager
The contrib
directory contains a set of simple scripts to extend the package manager. These scripts can be installed through the kiss-utils
package.
kiss-chroot
: Enter a KISSchroot
.kiss-depends-finder
: Find missing dependencies by parsing 'ldd'.kiss-depends
: Display a package's dependencies.kiss-export
: Turn an installed package into a KISS tarball.kiss-manifest-tree
: Display all files as tree owned by a package.kiss-manifest
: Display all files owned by a package.kiss-maintainer
: Display the package maintainers.kiss-orphans
: List orphaned packages.kiss-owns
: Check which package owns a file.kiss-revdepends
: Display packages which depend on package.kiss-size
: Show the size on disk for an installed package.