📑
Docker上でcoreutilsをビルドする
大分以前に買った本を読むために、coreutilsのビルドをします。
coreutilsのビルドのためのDockerfileはgithub上で見つけましたが、少し変更したのでそのメモです。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