Skip to content

Commit d52008c

Browse files
committed
fix(nix/docker.nix): add init.d and docker cli
Change-Id: I530de9066ea94ab54488de6e83ed64e7d44a1d72 Signed-off-by: Thomas Kosiewski <tk@coder.com>
1 parent 11cccb3 commit d52008c

File tree

2 files changed

+147
-86
lines changed

2 files changed

+147
-86
lines changed

flake.nix

Lines changed: 94 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -71,70 +71,91 @@
7171
vendorHash = null;
7272
};
7373

74+
# Packages required to build the frontend
75+
frontendPackages =
76+
with pkgs;
77+
[
78+
cairo
79+
pango
80+
pixman
81+
libpng
82+
libjpeg
83+
giflib
84+
librsvg
85+
python312Packages.setuptools # Needed for node-gyp
86+
]
87+
++ (lib.optionals stdenv.targetPlatform.isDarwin [
88+
darwin.apple_sdk.frameworks.Foundation
89+
xcbuild
90+
]);
91+
7492
# The minimal set of packages to build Coder.
75-
devShellPackages = with pkgs; [
76-
# google-chrome is not available on aarch64 linux
77-
(lib.optionalDrvAttr (!stdenv.isLinux || !stdenv.isAarch64) google-chrome)
78-
# strace is not available on OSX
79-
(lib.optionalDrvAttr (!pkgs.stdenv.isDarwin) strace)
80-
bat
81-
cairo
82-
curl
83-
delve
84-
dive
85-
drpc.defaultPackage.${system}
86-
formatter
87-
fzf
88-
gcc13
89-
gdk
90-
getopt
91-
gh
92-
git
93-
(lib.optionalDrvAttr stdenv.isLinux glibcLocales)
94-
gnumake
95-
gnused
96-
go_1_22
97-
go-migrate
98-
(pinnedPkgs.golangci-lint)
99-
gopls
100-
gotestsum
101-
jq
102-
kubectl
103-
kubectx
104-
kubernetes-helm
105-
lazygit
106-
less
107-
mockgen
108-
moreutils
109-
neovim
110-
nfpm
111-
nix-prefetch-git
112-
nodejs
113-
openssh
114-
openssl
115-
pango
116-
pixman
117-
pkg-config
118-
playwright-driver.browsers
119-
pnpm
120-
postgresql_16
121-
proto_gen_go_1_30
122-
protobuf_23
123-
ripgrep
124-
shellcheck
125-
(pinnedPkgs.shfmt)
126-
sqlc
127-
terraform
128-
typos
129-
# Needed for many LD system libs!
130-
(lib.optional stdenv.isLinux util-linux)
131-
vim
132-
wget
133-
yq-go
134-
zip
135-
zsh
136-
zstd
137-
];
93+
devShellPackages =
94+
with pkgs;
95+
[
96+
# google-chrome is not available on aarch64 linux
97+
(lib.optionalDrvAttr (!stdenv.isLinux || !stdenv.isAarch64) google-chrome)
98+
# strace is not available on OSX
99+
(lib.optionalDrvAttr (!pkgs.stdenv.isDarwin) strace)
100+
bat
101+
cairo
102+
curl
103+
delve
104+
dive
105+
drpc.defaultPackage.${system}
106+
formatter
107+
fzf
108+
gcc13
109+
gdk
110+
getopt
111+
gh
112+
git
113+
(lib.optionalDrvAttr stdenv.isLinux glibcLocales)
114+
gnumake
115+
gnused
116+
go_1_22
117+
go-migrate
118+
(pinnedPkgs.golangci-lint)
119+
gopls
120+
gotestsum
121+
jq
122+
kubectl
123+
kubectx
124+
kubernetes-helm
125+
lazygit
126+
less
127+
mockgen
128+
moreutils
129+
neovim
130+
nfpm
131+
nix-prefetch-git
132+
nodejs
133+
openssh
134+
openssl
135+
pango
136+
pixman
137+
pkg-config
138+
playwright-driver.browsers
139+
pnpm
140+
postgresql_16
141+
proto_gen_go_1_30
142+
protobuf_23
143+
ripgrep
144+
shellcheck
145+
(pinnedPkgs.shfmt)
146+
sqlc
147+
terraform
148+
typos
149+
# Needed for many LD system libs!
150+
(lib.optional stdenv.isLinux util-linux)
151+
vim
152+
wget
153+
yq-go
154+
zip
155+
zsh
156+
zstd
157+
]
158+
++ frontendPackages;
138159

139160
docker = pkgs.callPackage ./nix/docker.nix { };
140161

@@ -144,22 +165,7 @@
144165

145166
src = ./site/.;
146167
# Required for the `canvas` package!
147-
extraBuildInputs =
148-
with pkgs;
149-
[
150-
cairo
151-
pango
152-
pixman
153-
libpng
154-
libjpeg
155-
giflib
156-
librsvg
157-
python312Packages.setuptools
158-
]
159-
++ (lib.optionals stdenv.targetPlatform.isDarwin [
160-
darwin.apple_sdk.frameworks.Foundation
161-
xcbuild
162-
]);
168+
extraBuildInputs = frontendPackages;
163169
installInPlace = true;
164170
distDir = "out";
165171
};
@@ -219,6 +225,9 @@
219225
LOCALE_ARCHIVE =
220226
with pkgs;
221227
lib.optionalDrvAttr stdenv.isLinux "${glibcLocales}/lib/locale/locale-archive";
228+
229+
NODE_OPTIONS = "--max-old-space-size=8192";
230+
GOPRIVATE = "coder.com,cdr.dev,go.coder.com,github.com/cdr,github.com/coder";
222231
};
223232
};
224233

@@ -252,14 +261,19 @@
252261
drv = devShells.default.overrideAttrs (oldAttrs: {
253262
buildInputs =
254263
(with pkgs; [
255-
busybox
256264
coreutils
257265
nix
258266
curl.bin # Ensure the actual curl binary is included in the PATH
259267
glibc.bin # Ensure the glibc binaries are included in the PATH
260268
jq.bin
261269
binutils # ld and strings
262270
filebrowser # Ensure that we're not redownloading filebrowser on each launch
271+
systemd.out
272+
service-wrapper
273+
docker_26
274+
shadow.out
275+
su
276+
ncurses # clear
263277
])
264278
++ oldAttrs.buildInputs;
265279
});

nix/docker.nix

Lines changed: 53 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
runCommand,
1414
writeShellScriptBin,
1515
writeText,
16+
writeTextFile,
1617
cacert,
1718
storeDir ? builtins.storeDir,
1819
pigz,
@@ -157,6 +158,46 @@ let
157158
chmod 644 $out/etc/pam.d/sudo
158159
'';
159160

161+
# Add our Docker init script
162+
dockerInit = writeTextFile {
163+
name = "initd-docker";
164+
destination = "/etc/init.d/docker";
165+
executable = true;
166+
167+
text = ''
168+
#!/usr/bin/env sh
169+
### BEGIN INIT INFO
170+
# Provides: docker
171+
# Required-Start: $remote_fs $syslog
172+
# Required-Stop: $remote_fs $syslog
173+
# Default-Start: 2 3 4 5
174+
# Default-Stop: 0 1 6
175+
# Short-Description: Start and stop Docker daemon
176+
# Description: This script starts and stops the Docker daemon.
177+
### END INIT INFO
178+
179+
case "$1" in
180+
start)
181+
echo "Starting dockerd"
182+
SSL_CERT_FILE="${cacert}/etc/ssl/certs/ca-bundle.crt" dockerd --group=${toString gid} &
183+
;;
184+
stop)
185+
echo "Stopping dockerd"
186+
killall dockerd
187+
;;
188+
restart)
189+
$0 stop
190+
$0 start
191+
;;
192+
*)
193+
echo "Usage: $0 {start|stop|restart}"
194+
exit 1
195+
;;
196+
esac
197+
exit 0
198+
'';
199+
};
200+
160201
# https://github.com/NixOS/nix/blob/2.8.0/src/libstore/globals.hh#L464-L465
161202
sandboxBuildDir = "/build";
162203

@@ -194,16 +235,15 @@ let
194235
LD_LIBRARY_PATH = lib.makeLibraryPath [ stdenv.cc.cc ];
195236
}
196237
// drvEnv
197-
// {
198-
238+
// rec {
199239
# https://github.com/NixOS/nix/blob/2.8.0/src/libstore/build/local-derivation-goal.cc#L1008-L1010
200240
NIX_BUILD_TOP = sandboxBuildDir;
201241

202242
# https://github.com/NixOS/nix/blob/2.8.0/src/libstore/build/local-derivation-goal.cc#L1012-L1013
203-
TMPDIR = sandboxBuildDir;
204-
TEMPDIR = sandboxBuildDir;
205-
TMP = sandboxBuildDir;
206-
TEMP = "/tmp";
243+
TMPDIR = TMP;
244+
TEMPDIR = TMP;
245+
TMP = "/tmp";
246+
TEMP = TMP;
207247

208248
# https://github.com/NixOS/nix/blob/2.8.0/src/libstore/build/local-derivation-goal.cc#L1015-L1019
209249
PWD = homeDirectory;
@@ -235,8 +275,10 @@ let
235275
];
236276
extraGroupLines = [
237277
"${toString uname}:!:${toString gid}:"
278+
"docker:!:${toString (builtins.sub gid 1)}:${toString uname}"
238279
];
239280
})
281+
dockerInit
240282
];
241283

242284
fakeRootCommands = ''
@@ -283,6 +325,11 @@ let
283325
284326
chown root:root ./etc/pam.d/sudo
285327
chown root:root ./etc/sudoers
328+
329+
# Create /var/run and chown it so docker command
330+
# doesnt encounter permission issues.
331+
mkdir -p ./var/run/
332+
chown -R ${toString uid}:${toString gid} ./var/run/
286333
'';
287334

288335
# Run this image as the given uid/gid

0 commit comments

Comments
 (0)