This is the CHANGELOG for the Carbs Packaging Tools, initially a customised fork of the kiss package manager. The format is based on Keep a Changelog, and this project somewhat adheres to Semantic Versioning.

[6.2.1] - 2021-09-20

Fixed

  • cpt-fork follows symbolic links when forking packages.
  • Fixed "crux-like" usage in cpt-size
  • Fixed documentation path in the manual page

[6.2.0] - 2021-08-14

BLAKE3 checksums

The package manager now uses b3sum for creating digests. The change is backwards compatible, which means that BLAKE3 will slowly replace the SHA256 algorithm in packages. The cpt package in the repository will continue to use the sha256 until the end of 2021.

The checksums files generated with BLAKE3 has the header %BLAKE3 which is used to distinguish digest algorithms. If the file does not include such a header, it is assumed to be a file created using the SHA256 algorithm. This is especially handy for keeping the /etc checksums intact. If the package being built is already installed on the system cpt makes sure that the generated etcsums are also backwards compatible.

Description searching

cpt-search utility has a new mode for searching through the package names and descriptions, which is enabled by the -q flag. The output is really similar to how the apt search command works, but the output is not meant for scripting. Descriptions are defined by the description keys in the meta file.

Instead of wildcards, the passed argument is expected to be a POSIX Basic Regular Expression, and is interpreted by grep. cpt-search also accepts the -F flag for passing literal expressions.

Added

  • cpt-checksum now has the -s flag to generate checksums using the SHA256 digest algorithm.
  • Added CPT_DOWNLOADER variable to change the download program. Available options are: curl, wget, wget2, aria2c, and axel.
  • cpt-chroot now has the flag -m to disable mounting/unmounting pseudo filesystems.
  • This changelog is now installed by the Makefile.
  • cpt-chbuild now has -r flag to redownload the chroot.

Changed

  • cpt-size has been rewritten to support POSIX du, and to support packages with a file count of over 50,000.
  • Installation now requires to run ./configure.

[6.1.1] - 2021-08-04

Fixed

  • Fixed a rare bug during manifest generation that caused an empty line inside the package manifest.

[6.1.0] - 2021-07-22

IMPORTANT

  • The package manager now enforces the usage of pax instead of tar.

Repository Backend

cpt now has a faster and modular repository backend. fossil is now supported by the package manager. During the repository fetch process, the repository backend is stored in the cache directory so that the update takes less time on the next pull. The usage of the repository cache can be disabled by setting $CPT_REPO_CACHE to 0.

Added

  • Added -q, --quiet flags to cpt-list.
  • Re-added cpt-maintainer. It now supports meta and repository backends other than git.
  • The package manager now prints out MOTD files found on the repository root.
  • Added the $CPT_VERBOSE variable and the --verbose flags to some utilities. With the addition of these, some parts of the package manager will be more quiet unless verbosity is explicitly requested.

Changed

  • Reworked the package repository backend.

[6.0.4] - 2021-05-12

Fixed

  • Fixed the declaration place of the $pid variable

[6.0.3] - 2021-05-10

Fixed

  • Fixed interrupt behaviour when downloading package sources.
  • Fixed cpt --help output when inside a directory prefixed with cpt-

[6.0.2] - 2021-04-05

Fixed

  • Fixed make dist target.

[6.0.1] - 2021-04-05

Fixed

  • Fixed inconsistencies of the Ctrl+C interrupt behaviour

[6.0.0] - 2021-04-03

Added

  • Added unit tests using shellspec.
  • Added support for pax for tarball extraction.
  • ssu support has been added for privilege escalation.
  • Added -p flag for specifying package when using cpt-link.
  • Added manual pages for all cpt-contrib scripts.
  • Added lz compression/decompression support to $CPT_COMPRESS.

Changed

  • Moved cpt-lib to cpt-lib.in.
  • All src scripts now exit with success after being called with --help.
  • Minor optimisations on contrib scripts.
  • Huge speed improvement on cpt-export.
  • Updated the getoptions library to version 2.5.0.

Fixed

  • Fixed cpt-cat not using the CPT_ROOT value.
  • Fixed an error with the usage of sbase grep that resulted in exit when removing packages.

Removed

  • Removed C binaries cpt-readlink and cpt-stat and instead replaced them with _readlink() and _stat() library functions.

[5.1.2] - 2021-01-04

Fixed

  • Fixed the Makefile installing files other than cpt-* files.
  • Fixed pkg_swap() bug where swapping a prefix file would change the following file locations on the manifest as well.

[5.1.1] - 2020-12-20

Fixed

  • Fixed an issue where the package build is continued even when it failed when $CPT_DEBUG was set

[5.1.0] - 2020-11-25

IMPORTANT

  • The pkg_fixdeps() function has been renamed to pkg_fix_deps().
  • cpt-lib now parses options for you if parser_definition() is defined before being called.

Changed

  • cpt-fork can now take full path for packages.
  • cpt-size can now display the total size of multiple packages.
  • Updated getoptions() parser to version 2.0.1
  • Added git to the default cpt-base.
  • Temporary cache creation scheme is changed from build-$pid/ to proc/$pid/build/

Fixed

  • Moved option parsing to cpt-lib if parser_definition exists. This shouldn't affect existing scripts where cpt-lib is called before the parser is defined.

[5.0.0] - 2020-10-06

IMPORTANT

  • cpt-fetch has been removed. cpt-update -o can be used instead.

Added

  • Added an /etc/cpt-base file to define a base. It can be used in order to ship a default base, but to make it redefinable by the user. This file isn't installed by default, it serves as a template.
  • Added cpt-orphans to view orphaned packages. This tool uses /etc/cpt-base and doesn't output any packages in the defined base.
  • Added a global_options() function in order to add into the option parser.
  • Added cpt-update -o flag to replace the functionality of cpt-fetch.
  • Added cpt-list -c to use the current directory as the argument string.

Changed

  • pkg_build() now notifies the user if the build file was modified inside a hook (the pre-build hook to be precise).
  • In git repository sources, @ can now be used to specify tags. E.g. git+git://git.carbslinux.org/cpt@4.2.0
  • cpt-fork now removes manifest and etcsums files.
  • cpt-fork can now be used to fork multiple packages.
  • cpt-reset now uses /etc/cpt-base when removing packages.
  • cpt-build now exports the CPT_TEST variable, so some tests that can't be done in a test script can be done from the build itself.

[4.1.1] - 2020-09-25

Changed

  • Git clones now fetch tags if commits are specified. This makes the operation longer, but not as long as cloning the whole repository while building a package.
  • pkg_fixdeps() now outputs to stderr instead of /dev/tty. You can now have fully silent builds.

Fixed

  • Fixed the as_root() function when using su.

[4.1.0] - 2020-09-11

Added

  • Added bi action to cpt for building and installing packages at the same time

Fixed

  • Fixed as_root() call on cpt-chbuild.

[4.0.1] - 2020-09-10

Fixed

  • Fixed flags starting with --no-

[4.0.0] - 2020-09-09

With this update, all the documentation was moved to the docs repository, which can be accessed from the following sources:

Added

  • Added the ability to test packages using a new executable file test.
  • Added $CPT_TEST variable for testing packages.
  • Added --test|-t option to build.
  • Added support for mercurial repositories.
  • Added options to install the tools "static" so they don't depend on cpt-lib.
  • Added basic unit tests. See make test.

Changed

  • Most contrib scripts now use the current directory as the package name.

Removed

  • Removed the docs/ folder.

Fixed

  • Fixed getoptions parsers while declaring initial variables.
  • Fixed build cpt-stat on the Makefile.

[3.3.1] - 2020-08-31

Changed

  • Reverted sh256() to the previous way.

[3.3.0] - 2020-08-31

Added

  • Added trap_set() in order to manage traps.

Changed

  • Moved from getopt to a shell implementation of option parsing. This ensures portability, and doesn't depend on a C program with GNU extensions. That was a mistake. The new implementation is taken from the public domain library, getoptions.
  • warn() function was modified to use log "$1" "$2" "${3:-WARNING}" instead.
  • Made cpt checksum method compatible with the KISS Community repository.

[3.2.0] - 2020-08-22

Added

  • A .build.cpt file can be edited during the pre-build hook, so that a build script can be modified. If the build is modified, a diff file will be generated to the package database.
  • Some of the tools now use getopt. Since getopt isn't a POSIX utility, util-linux implementation has been added to the getopt-ul directory. It consists only of files required for the tool to be built.
  • Added pre-chroot hook for the cpt-chbuild utility.

Changed

  • cpt-chbuild now uses library functions such sh256(), and as_root().
  • cpt programs no longer exit if $CPT_PATH is unset.

[3.1.1] - 2020-08-11

Changed

  • as_root() now sets package manager variables with env.

[3.1.0] - 2020-08-07

Changed

  • cpt-lib no longer creates temporary directories. This will need manual adjustments for scripts that make use of the cache directories. Those directories can now be created by calling the create_cache() function.
  • Dropping libtool's *.la library files from packages.

[3.0.0] - 2020-07-24

This is the 3.0.0 release. This will make kiss (now renamed as cpt) a toolchain for package management rather than a single script program. The main functionality is moved into a lib.sh file which the tools will source. This comes with nice benefits such as:

  • Easier option parsing for each tool.
  • Easier to extend the package manager as it is only a library. It no longer requires dirty hacks to source the package manager functions and variables.
  • Clearer usage information is outputted, so the user doesn't have to delve into documents to see the syntax/options of a tool.

Added

  • $CPT_CACHE to change the cache directory.
  • Added a bunch of flags, here is a table:
Flag Function Added tool
--force Force removal/installation cpt-remove/cpt-install
--root Specify root directory lots of tools
--download Only download packages cpt-update
--no-fetch Do not fetch repositories before update cpt-update
--single Only show the first instance of a package cpt-search

Changed

  • Renamed all variables from KISS-* to CPT-*
  • Moved database to /var/db/cpt
  • Changed the code style and did some minor nitpicks for the C programs.

Removed

  • Removed the ability to control color output (for now).
  • Removed kiss-outdated and kiss-which.

[2.3.0] - 2020-07-16

Added

  • Added KISS_FETCH to optionally disable repository fetches while performing a system update. You can now run KISS_FETCH=0 kiss u in order to update your system without syncing repositories.

Changed

  • Changed usage outputs for kiss and contrib utilities.
  • rsync repositories are now synced based on checksums rather than timestamps.
  • kiss-chroot now uses system flags if available.
  • kiss-chbuild now installs extra packages if specified.
  • hooks now default to null if no arguments are given
  • *-pull hooks have been renamed to *-fetch and is run only once instead of for every single git repository.

Fixed

  • Fixed an issue where using su to install packages resulted in a wrong package ownership.

[2.2.1] - 2020-06-11

Fixed

  • Fixed directory checking on package removal

[2.2.0] - 2020-06-10

Added

  • Makefile configurations were moved to config.mk.

Changed

  • kiss no longer ignores musl and gcc on fixdeps(). This will result in an influx of musl dependencies. But you will be needing the C library to be installed anyway if you want your programs to work. If your program links to libgcc, you will need the gcc package for that given program to function.
  • Makefile now properly accepts LIBS, LDFLAGS, and CFLAGS.
  • Updated documentation.

Fixed

  • C89 compatibility on C programs.
  • Fixed an alternatives issue where a file containing special regular expression characters (such as /usr/bin/[) would result in a manifest deletion.

[2.1.2] - 2020-06-03

Fixed

  • Fixed a segmentation fault on kiss-stat when a file didn't have on owner on the passwd database.

[2.1.1] - 2020-06-03

Fixed

  • Fixed 'No message in queue' message being outputted for every single package.
  • Fixed CFLAGS for x86_64 on kiss-chroot.
  • Fixed setting binary packages as dependencies.

[2.1.0] - 2020-05-29

Added

  • Added '$2' '$3' for build scripts which specifies version and architecture information.

Changed

  • kiss-chroot now sets architecture based on the system
  • Updated documentation

Removed

  • Removed strip messages

[2.0.0] - 2020-05-28

Added

  • Rsync repository support.
  • pre/post hooks for package removal (pre-remove, post-remove).
  • pre/post hooks for git pulls (pre-pull, post-pull).

Changed

  • kiss no longer removes empty directories if they are defined on a different package.
  • $KISS_NOPROMPT has been renamed to $KISS_PROMPT and must be set to 0 in order to disable prompts.
  • kiss-chbuild now checks tarball digest.
  • kiss-chbuild now downloads tarballs according to arch (x86_64 or i686 currently).
  • Submodule repository fetching has been modified to match compatibility.

Removed

  • Removed kiss-maintainer and moved it to kiss-extra

[1.22.4] - 2020-05-26

NOTE: 1.22.x is the last minor version before 2.0.0, meaning I will not be doing any releases except for patches and fixes. My attention is now on implementing binary repositories. I will be doing some 'release candidates' before release, as binary repositories will need user feedback.

Added

  • Added new documents.
  • Added post-package hook.

Changed

  • Renamed the hashcheck function to sh256 for compatibility.
  • Enabled the usage of glob characters for kiss-bin.

[1.22.3] - 2020-05-18

SECURITY

  • Fixed a bug regarding privilege escalation using $KISS_HOOK. kiss will now use $KISS_ROOT/etc/kiss-hook on installation operations (which are run by root) so that the hooks are defined by the system administrator rather than the user. See related proof-of-concept

[1.22.2] - 2020-05-16

Fixed

  • Fixed an issue where pkg_conflicts would abort if kiss-readlink failed due to missing components. It now fallbacks to the original directory name.

[1.22.1] - 2020-05-15

REMOVED

  • Removed some contrib scripts and moved them to kiss-extra
  • kiss-cargo-urlgen
  • kiss-cargolock-urlgen
  • kiss-changelog
  • kiss-depends-finder
  • kiss-exec
  • kiss-message
  • kiss-orphans
  • kiss-reporevdepends

Fixed

  • Fixed a kiss-owns typo that caused it to fail.
  • Fixed a kiss-readlink bug where it would fail if the last component wouldn't exist.
  • Fixed an error on tarball extraction where a file name containing spaces would be parsed as two files.

[1.22.0] - 2020-05-14

Added

  • Added kiss-exec, a tool to execute commands inside the alternatives system.

Changed

  • Replaced KISS_COLOUR with KISS_COLOR to match upstream.
  • Renamed colour variable to color for consistency.
  • The package manager no longer needs root privileges if the KISS_ROOT is writable by the user.
  • kiss now uses the host cache regardless of KISS_ROOT.

Fixed

  • Fixed an issue where kiss-owns would output the wrong package because of symbolic links. The script now reads the link of the directory instead of the full file.

[1.21.1] - 2020-05-14

Changed

  • All contrib messages now output usage information when called with --help and -h.
  • hashcheck function now uses $1 instead of ${file#\*}.

Fixed

  • Fixed a non-POSIX find call. Thanks to @illiliti.

[1.21.0] - 2020-05-12

Added

  • Added a d|download option to acquire the sources of given packages. If no packages are given, it acquires the sources of outdated packages. This can be used to acquire a package's sources to build it later, or periodically downloading outdated package sources, so the user doesn't wait for the download when updating the system.
  • kiss now understands .txz tarballs. (BSD src.txz wink wink)
  • KISS_TMPDIR can now be used to specify a temporary build directory. This will be useful for those of you who would want to build on ram or a different file system.

Changed

  • Simplified tarball extraction method.
  • Removed the 'esc' function inside kiss.
  • Added a 'warn' function to standardise warnings inside kiss

Fixed

  • Removed the sys_db usage on pkg_find() where directories could clash with external utilities.

[1.20.3] - 2020-05-09

Fixed

  • Fixed an alternatives bug caused by the previous patch, where the package moving to /var/db/kiss/choices would take the name of the preferred package.

[1.20.2] - 2020-05-09

Fixed

  • Fixed an issue regarding manifest format when using pkg_swap (alternatives).

[1.20.1] - 2020-05-08

Changed

  • Faster conflict resolution by using a conflict cache file.
  • Standardised kiss-readlink usage output.

[1.20.0] - 2020-05-07

Added

  • KISS_NOPROMPT can be specified in order to skip prompts.

[1.19.1] - 2020-05-07

Added

  • Added e|extension to kiss which can be used to output kiss-extensions.

Changed

  • kiss no longer outputs the extensions when called with kiss help. The output was too large for an average terminal, and a user had to scroll up for actual package manager options. These can now be retrieved with kiss e.
  • When called from a subshell, kiss disables colour escape sequences. This behaviour can be overridden by setting KISS_COLOUR environment variable. If set to 1, it will be enabled globally, if set to 0 it will be disabled globally.

[1.19.0] - 2020-05-06

Added

  • Added kiss-reporevdepends for finding all the packages on the repository that depends on the specified package.

Changed

  • Removed the -p flag from tar while installing packages. busybox ignores it and we don't need it.
  • Replaced tar flags with keys for historical compatibility.
  • kiss now decompresses a tarball once and uses the decompressed tarball for listing and extraction.

Fixed

  • Fixed the output of doc-strings in contrib scripts.
  • kiss now ignores the binary programs in the repository for kiss extensions.

[1.18.0] - 2020-05-04

Added

  • Added editorconfig file since we now have 4 languages (roff, Makefile, sh, C) in the repository.
  • Added kiss-readlink as a readlink -f replacement.
  • Added kiss-message for checking package messages.
  • Added this CHANGELOG

Changed

  • Made tar calls portable. kiss is no longer limited to busybox, bsdtar, or gnu tar!

Removed

  • Dropped the usage of readlink in kiss.

[1.17.0] - 2020-05-03

Added

  • Added kiss-stat, a simple C program for getting the owner name of a file/directory.

Removed

  • Removed the usage of stat calls, as they are not standardised.

Changed

  • kiss now doesn't report Generating etcsums if there isn't an /etc directory in the package

Fixed

  • kiss now uses sys_db instead of pkg_db when removing packages from the system.
  • kiss now explicitly exits if prompt returns with a status of 1. This is for ksh compatibility.

[1.16.3] - 2020-05-03

Fixed

  • Fixed etcsum location.

[1.16.2] - 2020-05-03

Added

  • Added fallbacks for sha256sum. kiss now fallbacks to sha256, and openssl for hash checking, respectively.
  • Added kiss-changelog and kiss-which entries to the kiss-contrib.1 manual page.

Fixed

  • Fixed kiss not using the preferred tar program on decompression.
  • Fixed pkg_conflicts() getting stuck when you reinstall the same single package on a system.
  • Fixed pkg_conflicts() giving an error if no packages are installed on a system.

[1.16.1] - 2020-05-01

Fixed

  • Fixed ksh Ctrl+C interrupt signals.

[1.16.0] - 2020-05-01

Added

  • New message queue system implementation. If a package includes a file named message it will output its contents in a pretty way.
  • Added kiss-which, a tool like which but for kiss packages.
  • Added kiss-changelog, a tool for outputting the git log of a given package.

Fixed

  • Fixed colour outputting on OpenBSD ksh.
  • Made compatibility fixes on the Makefile
  • Fixed an installation issue where kiss would look for the manifest with the $KISS_ROOT variable

[1.15.0] - 2020-04-30

I have decided to revert to rsync installation method as it is faster and safer. Now, rsync is not a huge dependency. Saving 500Kb is not worth it when you look at the trade-off.

REMOVED

  • Removed the new installation method.

Changed

  • Reverted to rsync for installation.
  • We are now forcing decompression to standard output while using decompress()
  • kiss now accepts decompressed tar archives for package installation as well.

[1.14.2/1.14.3] - 2020-04-27

Fixed

  • The new installation method now complies to the $KISS_ROOT value.

[1.14.1] - 2020-04-27

Removed

  • Removed the unnecessary [ -d ] from the path query.

Fixed

  • Fixed directory permissions in the new installation method.
  • Added support for $KISS_ROOT to the new installation method.
  • Added a check for symlinks that could overwrite a directory during installation.
  • Whitespace cleanup.

[1.14.0] - 2020-04-25

This release removes rsync from kiss and implements its own installation method.

Added

  • kiss now implements user scripts available in the $PATH. This can be used to call kiss manifest from kiss itself.
  • kiss now displays a warning if the user has a $KISS_ROOT that ends with a /.
  • kiss now uses its own new package installation method.

Removed

  • usage of rsync as an installation method.
  • usage of old_ifs

[1.13.1] - 2020-04-19

Removed

  • Reverted and removed kiss ss changes.

[1.13.0] - 2020-04-19

Added

  • kiss ss for outputting a single location for scripting.

Changed

  • kiss now elevates permissions during checksum if the file isn't owned by us.
  • Hide read error messages when version file cannot be found.
  • Made the pkg_fixdeps() usage of diff portable.

Fixed

  • Fixed a shellcheck error.

[1.12.3] - 2020-04-17

Changed

  • Changed indentation style on decompression.

Fixed

  • kiss-export fallbacks to gzip if the compression method is unknown.
  • kiss-repodepends now outputs the proper depends file.

[1.12.2] - 2020-04-15

Added

  • kiss can now decompress zip files.

Changed

  • checksum, build, install, and remove operations can now be done on the current package directory without arguments. So you can cd into a package an type kiss b to build that package.

Fixed

  • kiss-export now honours your KISS_COMPRESS value

[1.12.1] - 2020-04-12

Fixed

  • Fixed printing empty arguments in kiss-outdated.

[1.12.0] - 2020-04-05

Added

  • kiss-cargolock-urlgen: a tool that can read a Cargo.lock file to generate a list of urls.
  • kiss-cat: a tool to concatenate package build files.
  • Manual page for kiss-contrib.

Changed

  • kiss-owns now gives an error on directories.
  • kiss-link can now take multiple file names and will create symbolic links of them all.
  • Simplified kiss-link

Fixed

  • kiss-cargo-urlgen: Fixed an issue where if a package version contained a '-' it could lead to wrong url generation.

[1.9.0 - 1.11.2] - 2020-04-04

Added

  • kiss f to fetch repositories without an update prompt.
  • Support for submodules in the repository.
  • Added a Makefile to standardise the installation.
  • Zstd compression method.

Changed

  • Modified kiss-chbuild to fit Carbs Linux.
  • Changed README to notify about forking status.
  • pkg_find() now also checks for symlinks instead of just directories.
  • pkg_find() now uses a for loop instead of find.
  • Force C locale for faster grepping.
  • Easily readable manual page.

Fixed

  • Compression method now fallbacks to gzip if unknown.