522 Commits

Author SHA1 Message Date
Justin Cormack
9506d45d49 Merge pull request #2413 from justincormack/runtime-config
Add a runtime config
2017-08-18 17:45:10 +01:00
Justin Cormack
9d8f1bd900 Allow specifying a set of metadata providers
run with `cmd: ["metadata", "aws"]` to just check for AWS metadata for example.

Signed-off-by: Justin Cormack <justin.cormack@docker.com>
2017-08-17 14:50:50 +01:00
Justin Cormack
57512b3ec9 Add an ip package
This contans the upstream (non busybox) version of `ip` and also the
Wireguard tools as these aere not yet integrated into `ip`. It is designed
to be used for network configuration.

For example a Wireguard interface can be setup with something like:
```
  - name: wg
    image: linuxkit/ip
    net: new
    binds:
      - /etc/wireguard:/etc/wireguard
    command: ["sh", "-c", "ip link set dev wg0 up; ip address add dev wg0 192.168.2.1 peer 192.168.2.2; wg setconf wg0 /etc/wireguard/wg0.conf; wg show wg0"]
    runtime:
      interfaces:
        - name: wg0
          add: wireguard
          createInRoot: true
      bindNS:
          net: /run/netns/wg
```

This binds the net namespace so other containers can use it later.

Note that `ip` supports batch scripts with `ip -b file` which is quite convenient for
this use case.

Alas `wg-quick` requires `bash` so this is currently a bit bloated, maybe @zx2c4
might be persuaded to rewrite it without bashisms...

Signed-off-by: Justin Cormack <justin.cormack@docker.com>
2017-08-17 12:18:38 +01:00
Justin Cormack
c82b2fe13e Add vendoring for netlink
Signed-off-by: Justin Cormack <justin.cormack@docker.com>
2017-08-17 12:10:28 +01:00
Justin Cormack
0c81ce19e8 Add a runtime config
This adds support for a runtime configuration file that can do:
- `mkdir` to make a directory at runtime, eg in `/var` or `/tmp`, to avoid workarounds
- `interface` that can create network interfaces in a container or move them
- `bindNS` that can bind mount namespaces of an `onboot` container to a file so a service can be started in that namespace.

It merges the `service` and `onboot` tools (in `init`) to avoid duplication. This also saves some size for
eg LCOW which did not use the `onboot` code in `runc`.

Signed-off-by: Justin Cormack <justin.cormack@docker.com>
2017-08-17 12:10:28 +01:00
Justin Cormack
df16f6fb9e Move init command into a subdirectory
Signed-off-by: Justin Cormack <justin.cormack@docker.com>
2017-08-17 12:10:28 +01:00
Rolf Neugebauer
f9f8b5bc42 pkg/lcow-init: Update to latest version of OpenGCS
While at it also update to latest alpine base

Signed-off-by: Rolf Neugebauer <rolf.neugebauer@docker.com>
2017-08-16 16:50:34 +01:00
Rolf Neugebauer
714dbcf0fe Merge pull request #2399 from ijc/pkg-honour-hash-override
package: Do not add an arch suffix if an explicit HASH is given
2017-08-14 10:14:04 +01:00
Ian Campbell
e11c1c0224 pkg: Bump to containerd v1.0.0-alpha4 and runc v1.0.0-rc4
Signed-off-by: Ian Campbell <ijc@docker.com>
2017-08-11 16:16:33 +01:00
Ian Campbell
0469901778 package: Do not add an arch suffix if an explicit HASH is given
During development I tend to do:
	make -C pkg/foo tag HASH=dev ORG=ijc
and I expect to get an image `ijc/foo:dev` and not `ijc/foo:dev-amd64`. In
general I think if the HASH has been explicitly provided the build should
just honour that.

To compensate and avoid mistaken pushes adjust the check for dirtiness to also
insist on a non-empty suffix.

Signed-off-by: Ian Campbell <ijc@docker.com>
2017-08-11 11:26:00 +01:00
Justin Cormack
c42ddc0af8 Fix root directory permissions with overlay
At least when running under Docker this seems to cause some issues,
possibly also explains some other oddnesses.

Signed-off-by: Justin Cormack <justin.cormack@docker.com>
2017-08-10 14:22:12 +01:00
Rolf Neugebauer
46d1e568cc pkg/init-lcow: Update opengcs
This has a number of fixes/improvements
- console resize
- better error handling (pass stacktrace/errors back to docker
- fix for container images which have a resolve.conf file

Signed-off-by: Rolf Neugebauer <rolf.neugebauer@docker.com>
2017-08-08 17:53:27 +01:00
Justin Cormack
e61794a344 Merge pull request #2365 from deitch/test-dev-existence-getty
Test dev existence getty
2017-08-07 20:32:39 +01:00
Justin Cormack
76bb43027b Do an extra chmod after chown
Chown clears suid bits even for root on Linux.

Also move a few functions to x/sys/unix from syscall, to be
more arm64 friendly.

Signed-off-by: Justin Cormack <justin.cormack@docker.com>
2017-08-07 14:49:43 +01:00
Ian Campbell
6ef10ae33b Update to containerd v1.0.0-alpha3 and runc master
Runc is master as of this morning, slightly newer than what is vendored into
containerd v1.0.0-alpha3 but the differences[0] seemed benign and/or good to have.

Signed-off-by: Ian Campbell <ijc@docker.com>

[0] 429a538712...45bde006ca
2017-08-07 11:47:44 +01:00
Avi Deitcher
cc174b4df0 test device exists before allowing getty to run
Signed-off-by: Avi Deitcher <avi@deitcher.net>
2017-08-06 10:23:12 +03:00
Rolf Neugebauer
dfa684c78f pkg/init-lcow: Update to tip of opengcs
Also adjust the building of the rootfs as this seem to have
changed.

Signed-off-by: Rolf Neugebauer <rolf.neugebauer@docker.com>
2017-08-04 18:34:56 +01:00
Justin Cormack
0b2e34301b Merge pull request #2357 from justincormack/arm64-rngd
Support rngd on arm64
2017-08-04 16:13:46 +01:00
Justin Cormack
8b2327b0e2 Support rngd on arm64
Although it does not do anything, as there is no CPU rng on arm64 at present.

Signed-off-by: Justin Cormack <justin.cormack@docker.com>
2017-08-04 14:01:18 +01:00
Justin Cormack
ce2347eda6 Enable sysctl kernel.dmesg_restrict
This requires that users have `CAP_SYSLOG` in order to access `dmesg`.
This means that containers by default have no access to `dmesg` (which
can leak information about the host or other containers) unless they
have this capability added.

Signed-off-by: Justin Cormack <justin.cormack@docker.com>
2017-08-04 12:48:27 +01:00
Rolf Neugebauer
fee2a62f26 pkg: Disable some packages for arm64
They either won't work or the packages are specific
to x86_64 like the DfM or VMware packages.

Signed-off-by: Rolf Neugebauer <rolf.neugebauer@docker.com>
2017-08-03 17:46:11 +01:00
Rolf Neugebauer
e44783fea1 pkg: Update alpine base for all packages
Signed-off-by: Rolf Neugebauer <rolf.neugebauer@docker.com>
2017-08-03 17:46:10 +01:00
Rolf Neugebauer
0ebb53c491 build: Add the ability to only build/push/sign for specific architectures
A package makefile can specify a list of architectures ('ARCHES')
it supports. If build on a unsupported architecture, a message is
printed and make exits without an error.

Signed-off-by: Rolf Neugebauer <rolf.neugebauer@docker.com>
2017-08-03 17:36:22 +01:00
Rolf Neugebauer
981def7c7a build: Add show-tag and forcetag targets to pkg Makefile
Signed-off-by: Rolf Neugebauer <rolf.neugebauer@docker.com>
2017-08-03 17:36:22 +01:00
Rolf Neugebauer
c8e0d2ca28 pkg: Add invocation to push-manifest to generic package build
Signed-off-by: Rolf Neugebauer <rolf.neugebauer@docker.com>
2017-08-03 17:36:22 +01:00
Rolf Neugebauer
47af521e14 Merge pull request #2343 from justincormack/x-sys-unix-rngd
rngd improvements
2017-08-03 15:45:40 +01:00
Justin Cormack
4434ecc4af Support multiple CDROMS in metadata
This checks if any CDROM in the system has metadata. Useful if
you boot off CDROM and also have a metadata CDROM.

Also switch the metadata container to read only, as it is only
writing to bind mounted in directories, and /tmp.

Signed-off-by: Justin Cormack <justin.cormack@docker.com>
2017-08-03 14:16:02 +01:00
Justin Cormack
f768ac4bfd Add flags to disable the different random sources
This makes testing the different options much easier.

Signed-off-by: Justin Cormack <justin@specialbusservice.com>
2017-08-02 20:55:36 +01:00
Justin Cormack
63798997f6 Convert rngd to use x/sys/unix
Epoll in `syscall` package does not work on arm64. We do not have
arm64 yet here, but we will when we add tpm support etc.

Signed-off-by: Justin Cormack <justin@specialbusservice.com>
2017-08-02 20:09:43 +01:00
Rolf Neugebauer
767ac54971 pkg/init-lcow: Update opengcs to the latest version
Signed-off-by: Rolf Neugebauer <rolf.neugebauer@docker.com>
2017-08-01 17:06:12 +01:00
Justin Cormack
4daf008956 Merge pull request #2331 from justincormack/rng-golang
Replace rngd with a Go version
2017-08-01 10:56:10 +01:00
Justin Cormack
b1c80b54b3 Revert #2317 remove kernel.random.write_wakeup_threshold from sysctl
Signed-off-by: Justin Cormack <justin.cormack@docker.com>
2017-07-31 23:05:46 +01:00
Justin Cormack
737fbcb3b6 Add standard directories in /var
Signed-off-by: Justin Cormack <justin.cormack@docker.com>
2017-07-31 21:09:48 +01:00
Justin Cormack
e0bc13451f Replace rngd with a Go version
Only supports the use cases we currently need, currently support
for using Intel hardware rng to initialise and add entropy.

Supports oneshot and service mode. Call as `rngd -1` for one shot
mode.

Signed-off-by: Justin Cormack <justin.cormack@docker.com>
2017-07-31 20:16:26 +01:00
Justin Cormack
1412cf8835 Fix mode of created directories in mountie
Signed-off-by: Justin Cormack <justin.cormack@docker.com>
2017-07-31 17:31:40 +01:00
Justin Cormack
2c20ee2f8a Use a tmpfs for /var
Previously we were cheating and remounting /var `rw` but this does not
work if the filesystem is really read only. Nount a tmpfs, which may
be overmounted later by a persistent filesystem.

Signed-off-by: Justin Cormack <justin.cormack@docker.com>
2017-07-31 15:25:54 +01:00
Justin Cormack
5ea2eaead1 Merge pull request #2309 from justincormack/ro-rw-setup
Use overlay for writeable containers
2017-07-31 15:25:09 +01:00
Justin Cormack
eacce1d52e Use overlay for writeable containers
Previously we would sneakily remount as `rw` but of course you can't
really do that on a truly immutable filesystem.

See https://github.com/moby/tool/pull/129 for the `moby` side.

Signed-off-by: Justin Cormack <justin.cormack@docker.com>
2017-07-31 13:48:23 +01:00
Dennis Chen
bbfb7a7442 pkg/getty: Add ARM 'ttyAMA0' console into securetty
We need to add 'ttyAMA0' console used on ARM64 platform into
securetty file to make it's possible to log into the system
as root. Also it will dismiss the below warning message before
login:
"getty: cmdline has console=ttyAMA0 but does not exist in
/etc/securetty; will not be able to log in as root on this tty ttyAMA0."

'ttyAMA1' is also added order to handle some system happens have that one
instead of 'ttyAMA0'

Signed-off-by: Dennis Chen <dennis.chen@arm.com>
2017-07-31 10:27:03 +00:00
Riyaz Faizullabhoy
ade82574e6 Merge pull request #2317 from justincormack/sysctl-fix
Remove kernel.random.write_wakeup_threshold from sysctl
2017-07-28 13:22:38 -07:00
Justin Cormack
980a469bbc Remove kernel.random.write_wakeup_threshold from sysctl
3072 is the default value anyway, so no need to change.

Signed-off-by: Justin Cormack <justin.cormack@docker.com>
2017-07-28 17:56:13 +01:00
Dennis Chen
d9e5e41df3 package.mk: Adjust the targe sequence to avoid early abort
Current package.mk will operate on the first dependence object
'check-dirty', which will result the make process abort earlier
with below message:
pkg/package.mk:60: *** Your repository is not clean. Will not push package image.  Stop.

This is not expected behavior since we have no chance to build
a docker image locally in case of the user has no intention to
push that image.

This patch adjust the dependece order for the default target, thus
we can build the docker image locally but can't push that image
since we're in a dirty git repository.

Signed-off-by: Dennis Chen <dennis.chen@arm.com>
2017-07-28 11:05:26 +00:00
Justin Cormack
9a823cf2e2 Add mountpoint to binfmt image
As this is read only it should be explicitly created.

Signed-off-by: Justin Cormack <justin.cormack@docker.com>
2017-07-27 15:05:48 +01:00
Avi Deitcher
8f10f69fd3 Merge pull request #2233 from dave-tucker/ns-detect
getty: Detect if you are in a namespace
2017-07-27 16:50:02 +03:00
Avi Deitcher
543e61c643 Fix typo
Signed-off-by: Avi Deitcher <avi@deitcher.net>
2017-07-27 15:38:20 +03:00
Justin Cormack
16674a1557 Merge pull request #2306 from ijc/containerd-v1.0.0-alpha2
Containerd v1.0.0 alpha2
2017-07-27 13:30:24 +01:00
Dave Tucker
f41c976406 getty: Detect if you are in a namespace
This is an attempt at fixing #2213

If `INITGETTY` has been set then we are not in a namespace.

Signed-off-by: Avi Deitcher <avi@deitcher.net>
2017-07-27 14:55:28 +03:00
Ian Campbell
8eb6709a3c containerd: Bump to new alpine (with v1.0.0-alpha2)
The logrus import path has changed, so adjust. Also there is a minor API change
to the containerd.IOCreation() function spec, it now takes a string id which we
can ignore.

Signed-off-by: Ian Campbell <ijc@docker.com>
2017-07-27 11:07:03 +01:00
Rolf Neugebauer
a18f4403d0 pkg/init-lcow: Update opengcs to latest
While at it, might as well update linuxkit/alpine to the latest.

Signed-off-by: Rolf Neugebauer <rolf.neugebauer@docker.com>
2017-07-27 10:47:19 +01:00
Justin Cormack
941e31a519 Merge pull request #2278 from deitch/tpm-tools
tpm tools
2017-07-26 22:01:51 +01:00