Note: This is a test release intended to ensure nothing breaks when the
associated crates are published to crates.io.
- Update to version '0.8.7-pre'.
- Testing new `Cargo.toml` workspace manifest, of which brings manifest
keys in all three pacwrap crates together. Most package keys now, with
the exception of crate-specific metadata, are now located in the
workspace manifest.
- Update common.sh to accomodate this change.
- Update README.md to again use relative paths.
- Error logging is now present in pacwrap-agent
- Agent error code handling now correctly traps runtime panics.
- impl of DisplayTrait for TransactionError no longer handles the
display of transaction failure messages.
- Error handling for TransactionAggregation is split into three
categories: Fatal, Error, and Non-Fatal Error. While two former are
immediately trapped and the program is terminated, the latter can
safely terminate the program without consequence.
- Updated to alpm.rs 4.0.1
- Changes made with b621c34 were made as a result of a regression,
introduced with alpm.rs 3.0.x, of which has now been fixed upstream.
They've now since been reverted.
- `fatal()` function for handling the termination of the program when a
fatal human-readable error digestable error occurs. This function
terminates the program and will never return a value.
- Much like the aforementioned function, the `error()` function now
prints the error and terminates the program, instead of printing the
error and returning the error code as an i32 integer.
- ErrorType enum implemented as an encapsulate to delineate error type.
- Display trait implemented for ErrorType enum for use cases whereby
the program being terminated is inconvenient for the given code path.
- `generic()` function added to GenericError trait for handling errors
of which do not require a message to be prepended.
- Global configuration is now statically cached with OnceLock instead of
lazy_static, and is loaded on-demand instead of during the invocation
of the `init()` function from the init module upon program startup.
- Use of lazy_static was also eliminated in pacwrap-core's sync module.
- Logging verbosity triggered by `--debug` command-line option.
- Implemented callback function for libalpm's logging callback.
- Increased TransactionFlags to 16 bits from 8 bits to accomodate the
bitlength required for additional transaction flags.
- exec.rs: Remove libfakeroot.so from LD_PRELOAD environment variable set
in the transaction_agent function, when creating the ephemeral
container with bubblewrap utilised for sandboxed transactions.
- Update Cargo.lock
- Cargo.toml: Change alpm-rs 3.0.5 to 4.0.0
- Initialize gnupg database during container composition
- Handle exit code 1 of agent as a general failure and changed resulting
verbiage to 'general agent fault'. Shifted error codes up by one.
- Check if FD 1 is a terminal for colour detection in pacwrap-key
- Added expect call in procfs() in the ever unlikely scenario the Linux
kernel fails to return a UTF-8 string. If this were to happen, it'd
mean something had gone horribly wrong; either a bug in the kernel, or
memory corruption as a result of faulty hardware.
- Reference version data from constants in agent.rs
- lock module provides a lock file facility via the Lock impl to ensure
conflicts do not occur with concurrent operations on the same pacwrap
data directory and container store.
- pacwrap-signal thread spawned during aggregate transactions to provide
graceful, forced signal trapping. Requires three iterations of a normal
signal to forcibly quit the program.
- metadata getter and flags setter functions moved out of TransactionHandle
into the TransactionMetadata impl
- Graceful signal handling for transaction aggregation and filesystem
synchronization.
- Store filesystem state data in .new file and merge after completion
- Altered set_flags function signature to borrow TransFlag
- Qualify error type before attempting to extract error data from alpm
after failed transaction. Alpm.rs can trigger a segfault if the error
type is unhandled or the data is otherwise not present.
- Changed DSL storage location from ~/.config/pacwrap/instance/ to
~/.config/pacwrap/container/
- In the progress.rs module, discard held reference once progress
is complete.
- Package holding implemented
- Logical errors fixed in foreign preparation state
- Version URLs updated in manual.rs
- Filesystem synchronization module now rewinds buffer after initial
header check
- Logical error in link deletion fixed. Orphaned symbolic links now get
deleted.
- During the staging state of a transaction, the ordering of
archlinux-keyring in the queue could fail to trigger a refresh of the
master keyring.
Highlights:
- Container configuration file format changes from SCREAMING_SNAKE to
snake_case, permissions tag renamed to module, and container types
are now: Symbolic, Base, Slice, and Aggregate.
- to_root and to_home modules updated to provide a more straightforward
way to declare mount paths.
- seccomp bpf filters are now compiled and applied to containers by
default at runtime.
This also applies to transaction and fakeroot environments.
- Integration of global configuration format
- Now able to initialize in a fresh home directory without intervention
- Source code is now formatted by rustfmt
for declared modules within tag vars
- For the sake of coherency, there are now four types of containers:
Symbolic, Base, Slice, and Aggregate. These names better reflect the
associated container types.
- Global configuration template is now written to disk prior to
instantiation
- Inclusion of .rustfmt.toml with formatting applied to source files
- Breaking format change: SCREAMING_CASE has been replaced with
snake_case for tag variables
- Simplified data structure in cache module
- InstanceCache type within the cache module replaces 'registered_base',
'registered_dep', and 'registered_root', with 'filter'.
- Cleaned up argument parsing match statements in the front-end modules.
- Specifying dependencies with a comma deliniation is now supported
- Manual updated to reflect argument changes.
- query module updated to utilise internal APIs
- Some minor improvements to error handling.
- Removed redundant calls to --clear-env with bubblewrap.
- Scripting no longer outputs ANSI charcodes to unsupported terminals
additions to global configuration module, and bug fixes.
- Progress verbosity option for progress indicators
- Logging verbsoity option for future implementation of logging
infrastructure
- Small addendum to cache API, with get_instance providing a Result enum
- Validate the program is running under a non-privileged user upon
front-end invocation
- LICENSE has been included since the incarnation of this project,
therefore nothing changes except providing prominent notice.
- Cleaned up distribution scripting, with inclusion of updated headers
miscellaneous changes
- Enum encapsulation for Error types within the scope of this crate no
longer occurs.
- err!, error!, and error_impl!, macros to conceal boilerplate.
- Custom PATH variables are now validated and passed through to
containers
- Environmental constants refactored and moved to the constants module
- Error type implemented for agent
- ConfigNotFound type implemented in ConfigError
- To help establish reproducible builds, the expectation is that every
packaged artefact is to be determinist. Therefore repose is now
invoked with pacwrap-dist.install via the post_install hook
- SOURCE_DATE_EPOCH is now set when building distribution packages
- Fixed libalpm hook blacklist in pacwrap-base-dist
- Refactored libalpm events into their own module
- Agent parameters are acquired via a temporary file attached to the
container (Still TODO: Provide a shared communication channel)
- filesystem state files now contain magic values with file header
verification
- Miscellaneous tidy up work