mirror of
				https://github.com/linuxkit/linuxkit.git
				synced 2025-11-04 13:36:56 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			125 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# FAQ
 | 
						|
 | 
						|
Please open an issue if you want to add a question here.
 | 
						|
 | 
						|
## How do updates work?
 | 
						|
 | 
						|
LinuxKit does not require being installed on a disk, it is often run from an ISO, PXE or other
 | 
						|
such means, so it does not require an on disk upgrade method such as the ChromeOS code that
 | 
						|
is often used. It would definitely be possible to use that type of upgrade method if the
 | 
						|
system is installed, and it would be useful to support this for that use case, and an
 | 
						|
updater container to control this for people who want to use this.
 | 
						|
 | 
						|
We generally use external tooling such as [Infrakit](https://github.com/docker/infrakit) or
 | 
						|
CloudFormation templates to manage the update process externally from LinuxKit, including
 | 
						|
doing rolling cluster upgrades to make sure distributed applications stay up and responsive.
 | 
						|
 | 
						|
Updates may preserve the state disk used by applications if needed, either on the same physical
 | 
						|
node, or by reattaching a virtual cloud volume to a new node.
 | 
						|
 | 
						|
## What do I need to build LinuxKit?
 | 
						|
 | 
						|
We have tried to make this as simple as possible, by using containers for the build process, so
 | 
						|
you should be able to build LinuxKit on any OSX or Linux laptop; we should have Windows build support
 | 
						|
soon.
 | 
						|
 | 
						|
## Why not use `systemd`?
 | 
						|
 | 
						|
In order to keep the system minimal, `systemd` did not seem appropriate, as it brings in a lot
 | 
						|
of dependencies and functionality that we do not need. At present we are using the `busybox`
 | 
						|
`init` process, and a small set of minimal scripts, but we expect to replace that with a small
 | 
						|
standalone `init` process and a small piece of code to bring up the system containers where the
 | 
						|
real work takes place.
 | 
						|
 | 
						|
## Console not displaying init or containerd output at boot
 | 
						|
 | 
						|
If you're not seeing `containerd` logs in the console during boot, make sure that your kernel `cmdline` configuration doesn't list multiple consoles.
 | 
						|
 | 
						|
`init` and other processes like `containerd` will use the last defined console in the kernel `cmdline`. When using `qemu`, to see the console you need to list `ttyS0` as the last console to properly see the output.
 | 
						|
 | 
						|
## Enabling and controlling containerd logs
 | 
						|
 | 
						|
On startup, linuxkit looks for and parses a file `/etc/containerd/runtime-config.toml`. If it exists, the content is used to configure containerd runtime.
 | 
						|
 | 
						|
Sample config is below:
 | 
						|
 | 
						|
```toml
 | 
						|
cliopts="--log-level debug"
 | 
						|
stderr="/var/log/containerd.out.log"
 | 
						|
stdout="stdout"
 | 
						|
```
 | 
						|
 | 
						|
The options are as follows:
 | 
						|
 | 
						|
* `cliopts`: options to pass to the containerd command-line as is.
 | 
						|
* `stderr`: where to send stderr from containerd. If blank, it sends it to the default stderr, which is the console.
 | 
						|
* `stdout`: where to send stdout from containerd. If blank, it sends it to the default stdout, which is the console. containerd normally does not have any stdout.
 | 
						|
 | 
						|
The `stderr` and `stdout` options can take exactly one of the following options:
 | 
						|
 | 
						|
* `stderr` - send to stderr
 | 
						|
* `stdout` - send to stdout
 | 
						|
* any absolute path (beginning with `/`) - send to that file. If the file exists, append to it; if not, create it and append to it.
 | 
						|
 | 
						|
Thus, to enable
 | 
						|
a higher log level, for example `debug`, create a file whose contents are `--log-level debug` and place it on the image:
 | 
						|
 | 
						|
```yml
 | 
						|
files:
 | 
						|
  - path: /etc/containerd/runtime-config.toml
 | 
						|
    source: "/path/to/runtime-config.toml"
 | 
						|
    mode: "0644"
 | 
						|
```
 | 
						|
 | 
						|
Note that the package that parses the `cliopts` splits on _all_ whitespace. It does not, as of this writing, support shell-like parsing, so the following will work:
 | 
						|
 | 
						|
```
 | 
						|
--log-level debug --arg abcd
 | 
						|
```
 | 
						|
 | 
						|
while the following will not:
 | 
						|
 | 
						|
```
 | 
						|
--log-level debug --arg 'abcd def'
 | 
						|
```
 | 
						|
 | 
						|
## Troubleshooting containers
 | 
						|
 | 
						|
Linuxkit runs all services in a specific `containerd` namespace called `services.linuxkit`. To list all the defined containers:
 | 
						|
 | 
						|
```sh
 | 
						|
(ns: getty) linuxkit-befde23bc535:~# ctr -n services.linuxkit container ls
 | 
						|
CONTAINER               IMAGE    RUNTIME
 | 
						|
getty                   -        io.containerd.runtime.v1.linux
 | 
						|
```
 | 
						|
 | 
						|
To list all running containers and their status:
 | 
						|
 | 
						|
```sh
 | 
						|
(ns: getty) linuxkit-befde23bc535:~# ctr -n services.linuxkit task ls
 | 
						|
TASK                    PID    STATUS
 | 
						|
getty                   661    RUNNING
 | 
						|
```
 | 
						|
 | 
						|
To list all processes running in a container:
 | 
						|
 | 
						|
```sh
 | 
						|
(ns: getty) linuxkit-befde23bc535:/containers/services/getty# ctr -n services.linuxkit task ps getty
 | 
						|
PID     INFO
 | 
						|
661     &ProcessDetails{ExecID:getty,}
 | 
						|
677     -
 | 
						|
685     -
 | 
						|
686     -
 | 
						|
687     -
 | 
						|
1237    -
 | 
						|
```
 | 
						|
 | 
						|
To attach a shell to a running container:
 | 
						|
 | 
						|
```sh
 | 
						|
(ns: getty) linuxkit-befde23bc535:/containers/services/getty# ctr -n services.linuxkit tasks exec --tty --exec-id sh sshd /bin/ash -l
 | 
						|
(ns: sshd) linuxkit-befde23bc535:/#
 | 
						|
```
 | 
						|
 | 
						|
Containers are defined as OCI bundles in `/containers`.
 |