- Vagga now resets O_NONBLOCK flag on stdout after each command during build
(because some programs, e.g. nodejs fail to do that)
vagga --version now works without vagga.yaml
- Add
rules param to !Build similar to !Copy
- Add
propagate-environ setting
- Add
group option for commands
- Add
aliases option for commands
- Add
default-shell container option
!AptTrust uses TLS for downloading keys by default
- Add
content-hash option for !Build
- Add
vagga --containers-only which is useful to prepare all the containers
needed to run some command
- Add
vagga.local.yaml and similar implicit mixins used for overriding
things locally
- Add
pattern parameter to !GitDescribe command
- Add
isolate-network parameter for !Command and !CapsuleCommand
- Add
vagga _hardlink and vagga _verify commands and
hard-link-between-project setting
- Add
vagga _capsule download and vagga _capsule script subcommands
to make writing capsule commands easier
- Add
ubuntu-skip-locking setting
- Add
versioned-build-dir setting
- Bugfix: long symbolic links were truncated when unpacking tar
- Bugfix: AptTrust was broken on ubuntu bionic
- Note: Ubuntu precise is no longer supported, as well as old non-LTS releases,
they may work, but some features may work suboptimal or even incorrectly
- [breaking]
!Copy now resets file modification time to unixtime 1,
this improves reproducibility of containers
- Added
!YarnDependencies command (still a bit experimental)
- Added
!GitDescribe command
- Added
rules to !Copy command
- Added
sha256 option to !Download buildd step
- Added
allow-pre-releases option to PipConfig
- Added
disable-auto-clean setting (mostly useful for CI)
- The
/etc/resolv.conf and /etc/hosts are mounted into container
instead of copying/owerwriting (this is potentially a breaking issue)
- Default alpine mirror is now
dl-cdn.alpinelinux.org instead of random
- Vagga now installs
locales package on ubuntu where no locale-gen
binary exists in original image
- Disabled universe and multiverse repositories in new ubuntu xenial images
where they are enabled by default (this effectively reverts behavior of
package installation to how it was before 31.03.2017 and also consistent
with the all pre-xenial releases.
- Implemented
hard-link-identical-files setting (experimental)
- Implemented
storage-subdir-from-env-var setting (experimental), for use
in CI systems
- Implemented
vagga _clean --unused --global at-least=.. (the --global
suboption)
- Added
symlink-name parameter and vagga _update_symlinks
- Added experimental
mixins setting
- Implemented
wait-all-successful supervision mode for letting multiple
commands finish successfully in parallel
- Added long-awaited
!CacheDir volume
- Added some zsh completion
- Added experimental
!CapsuleCommand and vagga _capsule command family
- Added
vagga _base_dir and vagga _relative_work_dir commands for
easier script usage
- Changed internal commands to
vagga __cmd__ of arg zero,
this allows symlinking vagga to different names
- Added optional auto-indexing of all images (not useful for now)
- Added lock on
apt-get remove to remove race condition on parallel builds
- Added support of custom command-line options with help for all kinds of
commands
- Added
!Persistent volumes (#204)
- Added
isolate-network option for commands and command-line option
- Added
isolate-network option for !RunAs build step
- Py2/Py3Requirements now properly hashes files containing
-r (basically
includes)
- Added
include-regex option for !Copy
!Snapshot root now preserves ownership and permissions of
source directory
!Depends now supports directories and include-regex, being on par
with !Copy command for features
- Added
expect-inotify-limit option
- Fixed PHP integration commands for Ubuntu xenial and Alpine v3.4
- Multiple
vagga _clean can now be run in single directory without
issues (this is mostly useful in CI and scripts)
- Added a warning when
vagga.yml (not yaml) is present
- Fixes bug with wrong precedence of directories in
PATH when running a
command using vagga _run
- Allow mounting files (not only dirs) as external volumes
- Added
files option to !Tmpfs volume
- Added
umask option to !Copy
!Copy and !Depends no longer respect mode for generating hashes,
only executable bit is used
- Allow to copy from different container when using
!Snapshot volume
- Added
data-dirs option for container
- Added
AlpineRepo and Repo commands
- Supports
!*Include directive to compose multiple files
- Fixed environment variable precedence (#326)
resolv.conf and hosts are propagated from host more reliably in
case of using subcontainers
- Fixed
external-user-id for !RunAs
vagga _list -A now includes hidden commands as expected
ca-certificates are now added to BuildDeps whenever any build
tools are installed (by Py2Install, NpmInstall and similar commands)
/run volume mounted by default has now mode 0o755 (had 0o766 by
a mistake)
- Fixes bug with remounting to readonly on volumes that were previously
mounted with
nosuid, nodev or few other options
eatmydata is only enabled for !Install and !BuildDeps rather
than everything because it conflicts with some other ``LD_PRELOAD``ed
things (like faketime)
- Added
vagga _clean --volumes and vagga _clean --unused-volumes
- Implemented
vagga _clean --everything (again after 0.2)
- Upgraded embedded alpine tools (apk-tools 2.6.8, busybox 1.25.1)
- Vagga does not output environment of a running command any more,
use
VAGGA_DEBUG_CMDENV to show
- Removed writing
/tmp/vagga/hosts in !Supervise commands, it was
rarely useful and never documented
- Blacklists some non-working alpine mirrors
- vagga uses rust 1.9 and ubuntu xenial for building
- Refactored internals to use traits for commands instead of large enum. This
makes adding more commands much easier.
- Ubuntu images are now fetched from
http://partner-images.ubuntu.com
rather than http://cdimage.ubuntu.com
- vagga now uses single level of uid mappings and doesn't use the actual
mapping as part of container hash. This allows to use
mount in container
more easily and also means we have reproducible containers hashes across
machines
!Copy: fixed crash on absent directories, fix copying paths outside of
the /work
- Uses
libmount for many mount operations (not all yet)
- Added
keep-composer and vendor-dir options to !ComposerSettings
- New command
!Unzip similar to !Tar
- Implement (optional) checksum checking in
!Tar and !TarInstall
- The
minimum-vagga now works even when it doesn't know all the commands
in the config (still YAML syntax must be correct)
- Add support for
volumes in commands (not only in containers)
- Vagga now uses
tar-rs library for unpacking archives instead of busybox,
this may mean some features are new, and some archives could fail (please
report if you find one)
- Add
!Container volume type, which allows to mount other container as a
volume, mostly useful for deployment tools
- Vagga now runs
id -u -n for finding out username, previously was using
long names which aren't supported by some distributions (alpine == busybox)
- Root user may now run vagga without
/etc/subuid this makes container in
container scenario easier
- Failed remount read-only is now a warning, this has two implications: you can
run vagga on tmpfs and in this case your root image is writable
- Add
vagga -m which allows to run multiple vagga commands in sequence
- Add
prerequsites option, which allows to run sequences of commands in
different containers
- Add
pass-tcp-port which allows to test systemd-like socket activation and
other scenarios that need passing tcp socket as file descriptor
- Add
image-cache-url option which allows to fetch cached image from
somewhere instead of building it locally
!Tar command now supports getting tar from /volumes/
- Add
!RunAs command which allows to get rid of sudo and su in
build steps
- Add
--at-least option for vagga _clean --unused
!Build command can copy file (previoulsy could only directory)
- Add
build-lock-wait setting to allow simultaneous builds of containers
- Package lists from
apt-get are now cached for each distribution and
doesn't fail on concurrent builds
- Add
--allow-multiple option to _init_storage_dir
- Commands with name starting with underscore are not listed in
vagga
and vagga _list by default (like built-in ones)
- Ubuntu commands now use
libeatmydata by default, which makes installing
packages about 3x faster
- We remove
/var/spool/rsyslog in ubuntu, this is only folder that makes
issues when rsyncing image because of permissions (it's not useful in
container anyway)
BuildDeps now don't try to apt-mark in subcontainer
- Updated
quire requires you need to write !*Unpack instead
of !Unpack
- Remove
change-dir option from SubConfig that never worked and was
never documented
!Depends doesn't resolve symlinks but depends on the link itself
- Pseudo-terminals in vagga containers now work
!Remove removes files when encountered (previously removed only when
container already built), also the command works with files (not only dirs)
- Add
!Shapshot`, ``!Empty, !BindRO volume types
- Add
external-volumes setting, which allows to mount directories outside
of the project dir
- Add
minimum-vagga option, which hints user which version they should use
- Implement
!Build, !Download, !Copy build steps
- Add
_init_storage_dir builtin command
- Add
vagga _clean --unused mode of operation which is superior
to --old
- Allow to customize python and nodejs versions for
Py* and Npm* steps
- Fix various bugs in networking implementation
- Add shell autocomplete (bash included, zsh can be configured)
- The
.vagga/.mnt is now unmounted during build (fixes bugs with bad tools)
- Improved SIGINT handling, now Ctrl+C in interactive processes such as
python (without arguments) works as expected
- The signal messages ("Received SIGINT...") are now printed into stderr rather
than stdout (for
!Supervise type of commands)
- Killing vagga supervise with TERM mistakenly reported SIGINT on exit, fixed
- Signal SIGQUIT is now correctly propagated
- Add PHP/Composer support
- Add Ruby/Bundler support
- Add support for
arch parameter in !UbuntuRelease this changes hash
sum of all containers built using !UbuntuRelease
- The stdin redirected from
/dev/null and stdout is redirected to stderr
during the build
- You can now filter commands in supervise by tags
- Change gateway network from
172.18.0.0/16 to 172.23.0.0/16,
hopefully this will have less collisions
- The
TERM and *_proxy env vars are now propagated for supervise
commands in the same way as with normal commands (previously was absent)
- Implemented shared image cache via
_push_image command
and image-cache-url option
!Tar and !TarInstall commands now support unpacking local files (#81)
- Container build process now locked, which avoid failure with cryptic error
message on simultaneous builds (#80)
- Add
_pack_image command
- Upgrade rust to v1.4.0
- Renamed and fixed
vagga_network command as vagga _network subcommand
- The pip cache is now namespaced over distro and version (was singleton)
- Vagga now cleans apt lists cache on failed
apt-get update (#108)
- Add
UbuntuPPA and AptTrust build steps
- Vagga now uses "unshare" and "signal" crates for working with containers
- Signal handling is changed:
- User visible changes: Ctrl+C doesn't sent twice to children (was
rarely noticeable), Ctrl+/ reliably kills vagga and children
- The only signal that is propagated by vagga to children is now SIGTERM
- SIGINT is never propagate to children by vagga itself (because it's usually
sent to process group anyway by Ctrl+C)
- Other signals like SIGQUIT (SIGHUP, SIGUSR1, ...), are not captured by
vagga, so they terminate vagga, resulting child processes are killed by OS
by the KILL signal).
- So if you want to send one of the signals except SIGTERM, send it to the
specific process not to vagga
- Fix broken
!Alpine, which always installed latests known version of the
distribution instead specified
- Add kill-unresponsive-after setting
- In ubuntu guests by default /usr/bin/chfn is symlinked to /bin/true, this
prevents errors on some host systems (#52), this changes hash of the
!UbuntuRelease step
- Fix
--only and --exclude for supervision commands (was broken since
0.2.0)
- Add
--no-build and --no-version-check options
- Fixed
epilog option
- Implement support of
git+https and hg+https urls in python
requirements (#58)
- Add support of Py3Requirements/Py3Install for alpine (v3.2 has python3)
- Mount /dev/shm by default (needed for ubuntu host, fixes #32)
- Implement forwarding proxy variables by default (#38)
- Run
!Sh scripts with -ex options (#72)
- Implement
subdirs key for !Tmpfs volume
- Support tilde-expansion in
storage-dir and cache-dir settings
- The
/etc/hosts file now copied inside the container at start (#39)
- !Tar command without subdir specified ignores invisible files and dirs
(ones starting with dot .) to determine subdir.
- Vagga now list of packages and log of duration of each step at a container
folder (e.g.
.vagga/container_name/../timings.log)
- Add
!UbuntuRelease builder to build non-lts ubuntu
- Add
!Git and !GitInstall commands to install from git repository
(similar to !Tar and !TarInstall)
- Add
user-id and external-user-id settings
- Implement
!SubConfig build step (very experimental)
- Add
trusted-hosts to !PipConfig
- Add
timings.log and various package lists to the container metadata for
easier troubleshooting
- Add
BindRW subvolume type
- No longer clean
/var/lib/apt by default (better for reusing containers)
- A quick bugfix release of NpmInstall command
- Implement support of
https links for Tar, TarInstall commands
- The
!Py* commands now download latest pip via get-pip.py. This
effectively means (a) that new features (like checkout a git subdirectory)
works, (b) the version of pip is uniform across distributions and
(c) installing dependencies to not interfere with pip dependencies on ubuntu
(e.g. previously requests library where removed when removing build
dependencies)
- Fix
!CacheDirs command which was broken few versions ago
- Add
!Text command for easier writing files into container (e.g. configs)
- Reasonable error message when not enough uids available (#7)
- When running as root vagga now can use all available uids and doesn't require
subuid/subgid files setup, mostly useful for container-in-container
scenarios (#7)
- The
VAGGAENV_* environment vars will now be propagated to containers with
the prefix stripped
- vagga now supports
--env and --use-env command-line switch to set
envionment variable for child processes and to propagate a variable from
parent (i.e. user's) environment
- Add
!Container build command, which may be used to build on top of
another container
- The
vagga _run now works with relative commands
- Experimantal
auto-clean option for containers
- Add
node-legacy as dependency of !Npm for ubuntu (required for many
scripts)
- Add
_version_hash command, mostly for scripting
- No need for tilde or null after
!UbuntuUniverse (and probably other cases)
- Fix permission of ubuntu
policy-rc.d, which fixes installing packages
having a daemon that start on install
- Configure apt to always use
--no-install-recommends in ubuntu
- Add
-W flag to _run command, to run writable (copy of) container
- Ubuntu will automatically use nearest mirror and allow to customize mirror
in personal settings
This release fixes small issues appeared right after release and adds python
requirements.txt support.
make install did not install vagga's busybox, effectively making vagga
work only from source folder
- Add Py2Requirements and Py3Requirements
commands
- Implement writing
/etc/resolv.conf (previously worked only by the fact
that libc tries 127.0.0.1 when the file is empty)
- Fix positional arguments for shell-wrapped commands
This is backwards-incompatible release of vagga. See Upgrading. The need for
changes in configuration format is dictated by the following:
- Better isolation of build process from host system
- More flexible build steps (i.e. don't fall back to shell scripting for
everything beyond "install this package")
- Caching for all downloads and packages systems (not only for OS-level
packages but also for packages installed by pip and npm)
- Deep dependency tracking (in future version we will not only track
changes of dependencies in
vagga.yaml but also in requirements.txt
and package.json or whatever convention exists; it's partially possible
using Depends build step)
More features:
There are some features missing, but we believe it doesn't
affect a lot of users.