External layer for experiments with various Linux system features.
Major purposes:
- experiments with docker, cri-o, podman
- experiments with remoteproc/rpmsg kernel frameworks
Supported configurations:
- Running docker on Orange Pi Zero Plus2 board
$ make BR2_EXTERNAL=/path/to/br2-external-system docker_orangepi_zero_plus2_defconfig
- Running docker on Orange Pi PC Plus board
$ make BR2_EXTERNAL=/path/to/br2-external-system docker_orangepi_pc_plus_defconfig
- Running CRI-O on Orange Pi PC Plus board
$ make BR2_EXTERNAL=/path/to/br2-external-system crio_orangepi_pc_plus_defconfig
- Running podman on Orange Pi PC Plus board
$ make BR2_EXTERNAL=/path/to/br2-external-system podman_orangepi_pc_plus_defconfig
- Experiments with Cortex-M4 core on Udoo Neo board with iMX6SoloX CPU using Linux remoteproc/rpmsg subsystem
$ make BR2_EXTERNAL=/path/to/br2-external-system rproc_mx6sx_udoo_neo_defconfig
- Experiments with Cortex-M4 core on stm32mp157c-dk2 board using Linux remoteproc/rpmsg subsystem
$ make BR2_EXTERNAL=/path/to/br2-external-system rproc_stm32mp157c_dk2_defconfig
- Experiments with non-trusted stm32mp157c-dk2 config: U-Boot SPL w/o TF-A
$ make BR2_EXTERNAL=/path/to/br2-external-system stm32mp157c_dk2_nontrusted_defconfig
$ time make
Follow Buildroot instructions and write image to SDcard. Before booting device, mount SDcard and edit several files to make sure that WiFi connects on boot.
Edit /etc/wpa_supplicant/wpa_supplicant-nl80211-wlan0.conf
to setup wireless access.
$ docker pull busybox
$ docker run -it busybox sh
TODO:
- enable IPv6 networking in both kernel and iptables
- setup crio-wipe and crio-shutdown services
Basic example:
$ crictl pull busybox
Image is up to date for docker.io/library/busybox@sha256:2bb4c4428052c54b1f45f9a56ab230eed60183b03044f21b623a2988b28fd819
$ crictl images
IMAGE TAG IMAGE ID SIZE
docker.io/library/busybox latest 97d26c9193b2f 1.19MB
$ cd /opt/examples
# create pod
$ crictl runp pod_sandbox.json
8fd91f17266b2fe283576493294c8bc56ea125d842511eee7373d3b27305a215
# create container
$ crictl create 8fd91f17266b2 container_busybox.json pod_sandbox.json
bf85f83f2610c2d1b345239eff70c2cfff7fd9db97d32769c01b2d5b0800bcdd
# start container
$ crictl start bf85f83f2610c
# run shell inside container
$ crictl exec -it bf85f83f2610c /bin/sh
Run basic interactive example:
$ podman pull docker.io/library/alpine
$ podman run -it -v /opt/Arrival:/opt docker.io/library/alpine
Run basic detached example:
$ podman pull docker.io/library/httpd
$ podman run -dt -p 8080:80/tcp docker.io/library/httpd
$ curl localhost:8080
<html><body><h1>It works!</h1></body></html>
Run Kubernetes pods with Podman play kube using attached test.yaml:
$ podman play kube test.yaml
Stop and remove pod and its containers:
$ podman pod rm mypod -f
TODO
TODO