📑

Docker上でcoreutilsをビルドする

2022/02/19に公開

大分以前に買った本を読むために、coreutilsのビルドをします。
https://www.amazon.co.jp/dp/B075953PY5
coreutilsのビルドのためのDockerfileはgithub上で見つけましたが、少し変更したのでそのメモです。
https://github.com/kunst1080/docker-build-coreutils

Dockerfile
@@ -17,9 +17,11 @@
         gcc \
         g++ \
         make \
+        ca-certificates \
+        wget \
 	&& rm -rf /var/lib/apt/lists/*
 
-ARG uid
-RUN useradd user -u ${uid:-1000}
+RUN groupadd -g 1000 user
+RUN useradd -m --uid 1000 --gid 1000 user
 USER user
-WORKDIR /coreutils
+WORKDIR /home/user/coreutils

ca-certificatesが無いとwgetとかgit使うときに怒られるので追加してます。最初はgnulibの取得がうまくいっていたのですが、接続を切られるようになったので、coreutilsはwgetで取得しました(v8.21だとビルド出来なかったのでv8.29にしてます)。

$ wget https://ftp.gnu.org/gnu/coreutils/coreutils-8.29.tar.xz
$ tar Jxf coreutils-8.29.tar.xz

VSCodeのRemote - Containers拡張を使うので、.devcontainerも作成。

.devcontainer/docker-compose.yml
services:
  app:
    build:
      context: ../
      dockerfile: Dockerfile
    command: sleep infinity
    environment:
      - LANG=C.UTF-8
    volumes:
      - "..:/home/user/coreutils"
.devcontainer/devcontainer.json
{
	"name": "Docker from Docker Compose",
	"dockerComposeFile": "docker-compose.yml",
	"service": "app",
	"workspaceFolder": "/home/user/coreutils/coreutils-8.29",
	"settings": { 
		"terminal.integrated.shell.linux": "/bin/bash"
	},
	"extensions": [],
	"remoteUser": "user"
}

これでコンテナ上でビルドできます。

$ ./configure --prefix=${HOME}/coreutils/coreutils-8.29
$ make
$ make install
$ ./bin/ls --help
Usage: ./bin/ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.
...

Discussion