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.
- Fixed a bug that caused extra dependencies being added to the later packages during multi-package build operations.
- Fixed file attribute issue with the
_tmp_cp()
function causing modified dependency files to receive600
permission bits.
- Made the
_tsort()
function compatible with POSIX - Fixed dependency calculation issue in
pkg_depends()
where some packages would be removed. - Fixed
pkg_gentree()
not generating the dependency tree due to the dependency calculation changes.
- In order to simplify file locations and messing up the
/etc
directory, CPT now uses the/etc/cpt
directory for reading related files. The location of your system configuration directory is defined by the--sysconfdir
flag in the./configure
script, it uses/etc
if the prefix is/usr
. - Since the location of the configuration can differ between installations,
$cpt_confdir
variable can be used in programs usingcpt-lib
to get the user's configuration directory. - This change currently doesn't break
cpt-base
, but you are advised to rename your configuration files. /etc/cpt-base
is renamed to/etc/cpt/base
(considering$cpt_confdir
is/etc/cpt
)
/etc/cpt-hook
will no longer be used.- User hooks (as defined by
$CPT_HOOK
will be run regardless of the hook type. I have realised that overriding user hooks on some operations was a mistake. If the users already have the privilege to install packages, they should also be able to run hooks without an interruption of the package manager. - Even though
/etc/cpt-hook
file is removed, a collection of systemwide hooks can be added to the/etc/cpt/hooks
directory. Any file in this directory will be sourced by the package manager when running hooks. User hooks are run after systemwide hooks are run. - Added new hooks:
end-install
andend-remove
that are run when installation/removal is complete (not per-package).
cpt-size
can now sort files based on size.$CPT_NOSTRIP
variable can now be set to 1 in order to disable package stripping. Make sure to add-g
to your CFLAGS in order to keep debugging symbols.cpt-build
now accepts-d
and-S
options to enable$CPT_DEBUG
and$CPT_NOSTRIP
respectively.
cpt-update
is now re-entrant, meaning that it is no longer needed to run the update twice,cpt-update
will continue the updates with the new version of itself.- The package manager now can handle circular dependencies and exit gracefully.
- Fixed the behaviour of
cpt bi
andcpt cbi
by merging the flag usage. - Fixed the
aria2c
usage onpkg_download()
function.
- In order to get the
$deps
variable, one now has to use the newpkg_depends_commit()
function.
- Fixed a bug in missing dependency where if the user had chosen 'ldd', it would fail to fix dependencies due to a typo.
- Fixed a checksum verification bug where adding an extra source did not require checksum verification.
cpt-manifest-tree
now modifies the output oftree(1)
according to the new version.cpt-reset
is now much more verbose.- Fixed the displayed messages on
cpt-install
when it is given a tarball as an argument. - Fixed a faulty implementation in
pkg_tar()
where it usedpkg_find()
instead of using the built package's database directory for gathering information.
cpt-alternatives
now properly logs file swaps even when the original file no longer exists.- Minor fixes
cpt-fork
follows symbolic links when forking packages.- Fixed "crux-like" usage in
cpt-size
- Fixed documentation path in the manual page
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.
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.
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
, andaxel
. 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.
cpt-size
has been rewritten to support POSIXdu
, and to support packages with a file count of over 50,000.- Installation now requires to run
./configure
.
- Fixed a rare bug during manifest generation that caused an empty line inside the package manifest.
- The package manager now enforces the usage of
pax
instead oftar
.
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
-q, --quiet
flags tocpt-list
. - Re-added
cpt-maintainer
. It now supportsmeta
and repository backends other thangit
. - 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.
- Reworked the package repository backend.
- Fixed the declaration place of the
$pid
variable
- Fixed interrupt behaviour when downloading package sources.
- Fixed
cpt --help
output when inside a directory prefixed withcpt-
- Fixed
make dist
target.
- Fixed inconsistencies of the
Ctrl+C
interrupt behaviour
- 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 usingcpt-link
. - Added manual pages for all
cpt-contrib
scripts. - Added
lz
compression/decompression support to$CPT_COMPRESS
.
- Moved
cpt-lib
tocpt-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 version2.5.0
.
- Fixed
cpt-cat
not using theCPT_ROOT
value. - Fixed an error with the usage of
sbase grep
that resulted in exit when removing packages.
- Removed C binaries
cpt-readlink
andcpt-stat
and instead replaced them with_readlink()
and_stat()
library functions.
- Fixed the
Makefile
installing files other thancpt-*
files. - Fixed
pkg_swap()
bug where swapping a prefix file would change the following file locations on the manifest as well.
- Fixed an issue where the package build is continued even when it failed when
$CPT_DEBUG
was set
- The
pkg_fixdeps()
function has been renamed topkg_fix_deps()
. cpt-lib
now parses options for you ifparser_definition()
is defined before being called.
cpt-fork
can now take full path for packages.cpt-size
can now display the total size of multiple packages.- Updated
getoptions()
parser to version2.0.1
- Added
git
to the defaultcpt-base
. - Temporary cache creation scheme is changed from
build-$pid/
toproc/$pid/build/
- Moved option parsing to cpt-lib if
parser_definition
exists. This shouldn't affect existing scripts wherecpt-lib
is called before the parser is defined.
cpt-fetch
has been removed.cpt-update -o
can be used instead.
- 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 ofcpt-fetch
. - Added
cpt-list -c
to use the current directory as the argument string.
pkg_build()
now notifies the user if the build file was modified inside a hook (thepre-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 removesmanifest
andetcsums
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 theCPT_TEST
variable, so some tests that can't be done in atest
script can be done from the build itself.
- 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 tostderr
instead of/dev/tty
. You can now have fully silent builds.
- Fixed the
as_root()
function when usingsu
.
- Added
bi
action to cpt for building and installing packages at the same time
- Fixed
as_root()
call oncpt-chbuild
.
- Fixed flags starting with
--no-
With this update, all the documentation was moved to the docs
repository,
which can be accessed from the following sources:
- Docs Repository
- Online User Manual
carbs-docs
package
- 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
.
- Most contrib scripts now use the current directory as the package name.
- Removed the
docs/
folder.
- Fixed
getoptions
parsers while declaring initial variables. - Fixed build
cpt-stat
on the Makefile.
- Reverted
sh256()
to the previous way.
- Added
trap_set()
in order to manage traps.
- 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 uselog "$1" "$2" "${3:-WARNING}"
instead.- Made
cpt
checksum method compatible with the KISS Community repository.
- 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 thecpt-chbuild
utility.
cpt-chbuild
now uses library functions suchsh256()
, andas_root()
.cpt
programs no longer exit if$CPT_PATH
is unset.
as_root()
now sets package manager variables with env.
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 thecreate_cache()
function.- Dropping libtool's
*.la
library files from packages.
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.
$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 |
- Renamed all variables from
KISS-*
toCPT-*
- Moved database to
/var/db/cpt
- Changed the code style and did some minor nitpicks for the C programs.
- Removed the ability to control color output (for now).
- Removed
kiss-outdated
andkiss-which
.
- Added
KISS_FETCH
to optionally disable repository fetches while performing a system update. You can now runKISS_FETCH=0 kiss u
in order to update your system without syncing repositories.
- 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 an issue where using
su
to install packages resulted in a wrong package ownership.
- Fixed directory checking on package removal
- Makefile configurations were moved to config.mk.
kiss
no longer ignores musl and gcc onfixdeps()
. 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 tolibgcc
, you will need the gcc package for that given program to function.- Makefile now properly accepts
LIBS
,LDFLAGS
, andCFLAGS
. - Updated documentation.
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.
- Fixed a segmentation fault on
kiss-stat
when a file didn't have on owner on thepasswd
database.
- 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.
- Added '$2' '$3' for build scripts which specifies version and architecture information.
kiss-chroot
now sets architecture based on the system- Updated documentation
- Removed strip messages
- Rsync repository support.
- pre/post hooks for package removal (pre-remove, post-remove).
- pre/post hooks for git pulls (pre-pull, post-pull).
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
kiss-maintainer
and moved it to kiss-extra
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 new documents.
- Added
post-package
hook.
- Renamed the
hashcheck
function tosh256
for compatibility. - Enabled the usage of glob characters for
kiss-bin
.
- 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
- Fixed an issue where
pkg_conflicts
would abort ifkiss-readlink
failed due to missing components. It now fallbacks to the original directory name.
- 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 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.
- Added
kiss-exec
, a tool to execute commands inside the alternatives system.
- Replaced
KISS_COLOUR
withKISS_COLOR
to match upstream. - Renamed
colour
variable tocolor
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 ofKISS_ROOT
.
- 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.
- All contrib messages now output usage information when called with
--help
and-h
. hashcheck
function now uses$1
instead of${file#\*}
.
- Fixed a non-POSIX
find
call. Thanks to @illiliti.
- 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. (BSDsrc.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.
- Simplified tarball extraction method.
- Removed the 'esc' function inside kiss.
- Added a 'warn' function to standardise warnings inside kiss
- Removed the
sys_db
usage onpkg_find()
where directories could clash with external utilities.
- 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.
- Fixed an issue regarding manifest format when using pkg_swap (alternatives).
- Faster conflict resolution by using a conflict cache file.
- Standardised
kiss-readlink
usage output.
KISS_NOPROMPT
can be specified in order to skip prompts.
- Added
e|extension
tokiss
which can be used to output kiss-extensions.
kiss
no longer outputs the extensions when called withkiss 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 withkiss e
.- When called from a subshell,
kiss
disables colour escape sequences. This behaviour can be overridden by settingKISS_COLOUR
environment variable. If set to 1, it will be enabled globally, if set to 0 it will be disabled globally.
- Added
kiss-reporevdepends
for finding all the packages on the repository that depends on the specified package.
- 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 the output of doc-strings in contrib scripts.
kiss
now ignores the binary programs in the repository forkiss extensions
.
- Added editorconfig file since we now have 4 languages (roff, Makefile, sh, C) in the repository.
- Added
kiss-readlink
as areadlink -f
replacement. - Added
kiss-message
for checking package messages. - Added this CHANGELOG
- Made tar calls portable.
kiss
is no longer limited to busybox, bsdtar, or gnu tar!
- Dropped the usage of
readlink
inkiss
.
- Added
kiss-stat
, a simple C program for getting the owner name of a file/directory.
- Removed the usage of
stat
calls, as they are not standardised.
kiss
now doesn't reportGenerating etcsums
if there isn't an/etc
directory in the package
kiss
now usessys_db
instead ofpkg_db
when removing packages from the system.kiss
now explicitly exits if prompt returns with a status of 1. This is forksh
compatibility.
- Fixed etcsum location.
- Added fallbacks for sha256sum.
kiss
now fallbacks tosha256
, andopenssl
for hash checking, respectively. - Added
kiss-changelog
andkiss-which
entries to thekiss-contrib.1
manual page.
- Fixed
kiss
not using the preferredtar
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.
- Fixed
ksh
Ctrl+C interrupt signals.
- 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 likewhich
but forkiss
packages. - Added
kiss-changelog
, a tool for outputting the git log of a given package.
- 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
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 the new installation method.
- 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.
- The new installation method now complies to the
$KISS_ROOT
value.
- Removed the unnecessary
[ -d ]
from the path query.
- 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.
This release removes rsync
from kiss
and implements its own installation
method.
kiss
now implements user scripts available in the$PATH
. This can be used to callkiss manifest
fromkiss
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.
- usage of rsync as an installation method.
- usage of
old_ifs
- Reverted and removed
kiss ss
changes.
kiss ss
for outputting a single location for scripting.
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 ofdiff
portable.
- Fixed a shellcheck error.
- Changed indentation style on decompression.
kiss-export
fallbacks to gzip if the compression method is unknown.kiss-repodepends
now outputs the proper depends file.
kiss
can now decompress zip files.
checksum
,build
,install
, andremove
operations can now be done on the current package directory without arguments. So you cancd
into a package an typekiss b
to build that package.
kiss-export
now honours yourKISS_COMPRESS
value
- Fixed printing empty arguments in
kiss-outdated
.
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
.
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
kiss-cargo-urlgen
: Fixed an issue where if a package version contained a '-' it could lead to wrong url generation.
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.
- 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 afor
loop instead offind
.- Force C locale for faster grepping.
- Easily readable manual page.
- Compression method now fallbacks to gzip if unknown.