ぼちぼちと Plamo Linux 6.x のソース一式からブランチして,Qbilinux という linux ディストリビューションを作成.
いつまで続くのか.
いじってる Qbilinux のホームページは https://qbilinux.org/ に,ビルドスクリプトは https://github.com/qbilinux/qbilinux,バイナリは https://qbilinux.org/pub/ 以下にあります.
前回の blog 記事に引き続いて docker まわりをいじり中.
slackware ベースのパッケージングスクリプトを qbilinux 用に修正してパッケージ化.
とりあえず x86_64 環境では問題なく動作しているみたいだな.ふう.
調子に乗って arm 64bit 環境 (aarch64) でもビルド.
普通にビルドできたね.
動作するかな?ドキドキ.
カーネルバージョンはこんな感じ.
root@rq64:/home/matsuki/tmp# uname -a Linux rq64 5.4.13-v8 #2 SMP PREEMPT Sun Jan 26 01:27:01 JST 2020 aarch64 GNU/Linux
動かしている環境はラズパイ4 (Raspberry Pi 4 4GB モデル) ね.
とりあえず root で実行.
root@rq64:/home/matsuki/tmp# docker Usage: docker [OPTIONS] COMMAND A self-sufficient runtime for containers Options: --config string Location of client config files (default "/home/matsuki/.docker") -c, --context string Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with "docker context use") -D, --debug Enable debug mode -H, --host list Daemon socket(s) to connect to -l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info") --tls Use TLS; implied by --tlsverify --tlscacert string Trust certs signed only by this CA (default "/home/matsuki/.docker/ca.pem") --tlscert string Path to TLS certificate file (default "/home/matsuki/.docker/cert.pem") --tlskey string Path to TLS key file (default "/home/matsuki/.docker/key.pem") --tlsverify Use TLS and verify the remote -v, --version Print version information and quit Management Commands: builder Manage builds config Manage Docker configs container Manage containers context Manage contexts engine Manage the docker engine image Manage images network Manage networks node Manage Swarm nodes plugin Manage plugins secret Manage Docker secrets service Manage services stack Manage Docker stacks swarm Manage Swarm system Manage Docker trust Manage trust on Docker images volume Manage volumes Commands: attach Attach local standard input, output, and error streams to a running container build Build an image from a Dockerfile commit Create a new image from a container's changes cp Copy files/folders between a container and the local filesystem create Create a new container deploy Deploy a new stack or update an existing stack diff Inspect changes to files or directories on a container's filesystem events Get real time events from the server exec Run a command in a running container export Export a container's filesystem as a tar archive history Show the history of an image images List images import Import the contents from a tarball to create a filesystem image info Display system-wide information inspect Return low-level information on Docker objects kill Kill one or more running containers load Load an image from a tar archive or STDIN login Log in to a Docker registry logout Log out from a Docker registry logs Fetch the logs of a container pause Pause all processes within one or more containers port List port mappings or a specific mapping for the container ps List containers pull Pull an image or a repository from a registry push Push an image or a repository to a registry rename Rename a container restart Restart one or more containers rm Remove one or more containers rmi Remove one or more images run Run a command in a new container save Save one or more images to a tar archive (streamed to STDOUT by default) search Search the Docker Hub for images start Start one or more stopped containers stats Display a live stream of container(s) resource usage statistics stop Stop one or more running containers tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE top Display the running processes of a container unpause Unpause all processes within one or more containers update Update configuration of one or more containers version Show the Docker version information wait Block until one or more containers stop, then print their exit codes Run 'docker COMMAND --help' for more information on a command.
コマンド実行はできてるね.つぎ,hello-world.
root@rq64:/home/matsuki/tmp# docker run hello-world docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?. See 'docker run --help'.
ん? daemon が実行できていないみたいだな.
root@rq64:/home/matsuki/tmp# ls -al /etc/rc.d/rc.docker -rw-r--r-- 1 root root 1,746 7月 12日 14:22 /etc/rc.d/rc.docker root@rq64:/home/matsuki/tmp# sh /etc/rc.d/rc.docker start Starting dockerd ... root@rq64:/home/matsuki/tmp# ps auxww | grep docker matsuki 624 0.1 0.0 215432 2292 tty1 S+ 08:58 0:00 less /var/log/docker.log root 898 17.0 1.7 1137176 68408 pts/0 Sl 09:05 0:00 /usr/bin/dockerd -p /var/run/dockerd.pid root 908 16.5 0.9 1101060 36640 ? Ssl 09:05 0:00 containerd --config /var/run/docker/containerd/containerd.toml --log-level info root 938 0.0 0.0 215184 1912 pts/0 S+ 09:05 0:00 grep docker
daemon が動作していることを確認して,再びコマンド実行.
root@rq64:/home/matsuki/tmp# docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 256ab8fe8778: Pull complete Digest: sha256:d58e752213a51785838f9eed2b7a498ffa1cb3aa7f946dda11af39286c3db9a9 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (arm64v8) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
問題なく動作したね.続いて ubuntu は?
root@rq64:/home/matsuki/tmp# docker run -it ubuntu bash Unable to find image 'ubuntu:latest' locally latest: Pulling from library/ubuntu f3801533dc70: Pull complete cb81013b04c0: Pull complete b1f21a013471: Pull complete 7c8e2b8980f0: Pull complete Digest: sha256:55cd38b70425947db71112eb5dddfa3aa3e3ce307754a3df2269069d2278ce47 Status: Downloaded newer image for ubuntu:latest root@fc5ec3d8c73c:/#
コマンドプロンプトになったな.
root@210ff3e204f6:/# dpkg --version Debian 'dpkg' package management program version 1.19.7 (arm64). This is free software; see the GNU General Public License version 2 or later for copying conditions. There is NO warranty.
コマンドも動作してるみたい.
root@fc5ec3d8c73c:/# uname -a Linux fc5ec3d8c73c 5.4.13-v8 #2 SMP PREEMPT Sun Jan 26 01:27:01 JST 2020 aarch64 aarch64 aarch64 GNU/Linux
当然 kernel はコンテナなので元々動作している OS と同じですね.
な感じで,とりあえず aarch64 環境でも動作.ふう.
もう少しビルドスクリプトとかは調整しないと駄目なところはありますが,今後は docker のパッケージも同梱する形にしたいと思います.
現在公開している qbilinux-current では https://qbilinux.org/pub/qbilinux-current/x86_64/contrib/Virtualization/docker.txz/ 以下に docker パッケージをおいてあります.aarch64 の方は数日中に置くようにしたいと思います.はい.
とりあえずそんなところ.