Dirk Steinmetz [Tue, 11 Jun 2019 22:44:06 +0000 (00:44 +0200)]
Change emerge flags

This commit adds two additional flags when calling emerge to update or
install things: --binpkg-changed-deps=y to suppress the warning about
changed dependencies, and --autounmask-backtrack=y to try to find
solutions without unmasking packages.

Dirk Steinmetz [Mon, 19 Sep 2016 22:08:33 +0000 (00:08 +0200)]
Permit custom portage arguments

Isolator previously permitted to use an ISOLATOR_INTERACTIVE_PORTAGE
environment variable to pass the -a argument to emerge invocations. This
commit replaces this feature with a more powerful one: arbitrary emerge
arguments can not be passed via ISOLATOR_PORTAGEARGS and

Dirk Steinmetz [Mon, 19 Sep 2016 22:08:04 +0000 (00:08 +0200)]
Ignore hidden files

This commit adds a primitive gitignore to ignore hidden files, which are
used by various editors.

Dirk Steinmetz [Mon, 19 Sep 2016 20:50:08 +0000 (22:50 +0200)]
Add rebuilt-binaries emerge flag

Emerge can automatically install binary packages that were updated on the
package host. Set this flag to properly catch up with rebuilds, for
example those issued due to dependency changes.

Dirk Steinmetz [Mon, 19 Sep 2016 19:47:10 +0000 (21:47 +0200)]
Fix rebuilding after staged update

When issueing a rebuild command on a container with a staged update, only
an update was performed. This is bad, as rebuilds may be necessary after
detecting that an update does not work. This commit ensures that rebuild
will always start with a clean rootfs, wiping staged updates if necessary.

Dirk Steinmetz [Sat, 10 Sep 2016 14:10:11 +0000 (16:10 +0200)]
Create log folders without world access

Some misconfigured software might write world-readable log files. To
prevent such software from exposing log information to all users on the
host, Isolator should not permit world-access to any location where world
files are stored, unless the user either already created such location
with different permissions or changed the permissions afterwards.

This commit causes the log destination to be chmod'ed to 750, thus
preventing world access to any folder behind it (unless hardlinked or
bind-mounted to some other location). The behavior for existing log
destinations remains untouched.

Dirk Steinmetz [Wed, 22 Jun 2016 00:17:42 +0000 (02:17 +0200)]
Permit rebuild of running container

Similar to permitting updates while a container is running, this commit
provides usage of the rebuild command on live containers.

Dirk Steinmetz [Wed, 22 Jun 2016 00:06:59 +0000 (02:06 +0200)]
Permit update of running container

Updating a container is in many cases a slow operation. To minimize
downtime of the application, it thus makes sense to perform the update
while the container is running.

This commit permits updating of running containers. The root filesystems
of such containers (which, in the host's mount namespace do not contain
application-mutable data) are updated in a copy, which is then used for
subsequent starts. If the container is not running, the behavior is

Dirk Steinmetz [Sun, 12 Jun 2016 23:23:52 +0000 (01:23 +0200)]
Add postupdate hook

A hook on each update is sometimes useful for container-internal static
initialization; as it is executed both when instantiating and on each
update, such a hook can listen for portage-level changes and/or perform
operations that would not be safe for a postflush hook (as the container
must not run in parallel).

Dirk Steinmetz [Wed, 8 Jun 2016 00:51:43 +0000 (02:51 +0200)]
Fix outdated default config

The default configuration contained a now obsolete environment variable,
as well as an invalid default profile. This commit should fix both issues.

Dirk Steinmetz [Mon, 30 May 2016 17:31:40 +0000 (19:31 +0200)]
Fix usage notice error.

The usage notice was not properly displayed due to a typo; fix that.

Dirk Steinmetz [Fri, 4 Mar 2016 17:49:51 +0000 (18:49 +0100)]
Fixed PID file issues.

Accidentially, a PID file of '!' was not only triggering interactive mode
as intended, but was also used as condition to use a regular PID file.
This results in warnings when operating in interactive mode, and PID files
not being used in other cases.

Dirk Steinmetz [Tue, 23 Feb 2016 16:53:36 +0000 (17:53 +0100)]
Add flush operation to refresh container data.

The new operation may be executed while the container is running, and
permits to update the data part (not mount points, packages, etc.) to be
updated on the fly. This is especially useful when developing something
running within a container, as a proper refresh mechanism was missing in
earlier versions of isolator.

Dirk Steinmetz [Mon, 22 Feb 2016 16:06:40 +0000 (17:06 +0100)]
Do not force binary packages by default.

Permit package building even if ISOLATOR_INTERACTIVE_PORTAGE is not set.

Forcing binary packages does not result in error messages when no binary
packages are available. Thus, the container may get into an inconsistent
state without the user noticing if we force binary packages. We don't want

Dirk Steinmetz [Tue, 9 Feb 2016 01:38:49 +0000 (02:38 +0100)]
Fixed livereadable files

As the bind mounting does not occur recursively, live-readable files were
invisible to the container. Move the mount to the staging area to prevent
this issue.

Dirk Steinmetz [Mon, 8 Feb 2016 21:21:04 +0000 (22:21 +0100)]
Added post-instantiation hook

Added a hook to permit schematics to run arbitrary code upon
initialization of a container. This is especially helpful for containers
with more complex structures within datawriteable folders, which can't get
initialized by the application itself.

Dirk Steinmetz [Mon, 8 Feb 2016 21:18:07 +0000 (22:18 +0100)]
Support for interactive, custom commands

Permit an optional command argument when starting containers, permitting
the user to freely specify an interactive executable (and parameters) to
invoke in the container.

Dirk Steinmetz [Mon, 8 Feb 2016 21:14:12 +0000 (22:14 +0100)]
Added optional support for /dev/shm

A new config file "features" may contain a SHM_MOUNT value defining the
size of a tmpfs mounted at /dev/shm. If omitted, /dev/shm is not

Using this option permits usage of posix-compliant shared memory, for
example with PostgreSQL.

Dirk Steinmetz [Mon, 8 Feb 2016 21:09:45 +0000 (22:09 +0100)]
Temporary package support

Accept a list of additional packages when updating, which will be amended
to the world set from the schematic for a single update cycle. This
permits the user to install additional packages for bootstrapping,
debugging or development purposes, without having to change the schematic.

Dirk Steinmetz [Fri, 5 Feb 2016 14:10:45 +0000 (15:10 +0100)]
Fine-grained development options via environment

Replace the old DEVELOPMENT_MODE (which also was always enabled due to a
bug) with environment variables for specific development/debugging

Dirk Steinmetz [Fri, 5 Feb 2016 14:06:22 +0000 (15:06 +0100)]
Suppress warnings for incompatible binary packages

Portage displays warnings if a binary package with different use flags is
available. Suppress that warning, as emerging will work as expected.

Dirk Steinmetz [Fri, 5 Feb 2016 14:02:14 +0000 (15:02 +0100)]
Fix eselect issues with some ebuilds.

Some ebuilds call an unprefixed eselect in their post-install hooks. As
the eselect-* package is not necessarily installed on the host, this leads
to errors while emerging. Also, it is possible that that the host's
configuration could be accidentially deleted.

Prevent this behaviour by binding /bin/true to eselect while performing
emerges. Obviously, this workaround will break proper eselecting, if there
should be ebuilds that need that (either now or in the future). Right now,
that is considered a reasonable tradeoff.

Dirk Steinmetz [Thu, 28 Jan 2016 15:23:48 +0000 (16:23 +0100)]
Version Initial commit.

Isolator scripts able to run application containers in partially namespaced
environments to simplify deployment.