Daniel Frey
2024-03-30 05:40:02 UTC
Hi all,
I've moved a couple of machines from openrc to systemd.
I have discovered this odd problem. On openrc, distcc was quiet during
building packages. It would obey environment variable set in /etc/env.d:
DISTCC_DIR=/var/distcc
DISTCC_ENABLE_DISCREPANCY_EMAIL=
DISTCC_FALLBACK=1
DISTCC_SAVE_TEMPS=0
DISTCC_SSH=
DISTCC_TCP_CORK=
DISTCC_VERBOSE=0
This currently shows up in the enviroment (checked with `set`.)
However, on systemd it spams messages in build logs:
distccd[290662] (dcc_check_compiler_masq) Warning:
x86_64-pc-linux-gnu-g++ on distccd's path is
/usr/lib/distcc/bin/x86_64-pc-linux-gnu-g++ and really a link to
/usr/bin/distcc
distcc[293558] (dcc_trace_version) distcc 3.4 x86_64-pc-linux-gnu; built
Mar 28 2024 05:05:38
distcc[293558] (dcc_recursion_safeguard) safeguard: 1
distcc[293558] (dcc_recursion_safeguard) safeguard level=1
distcc[293558] (main) compiler name is "x86_64-pc-linux-gnu-g++"
distcc[293558] (dcc_set_path) setting
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/opt/bin:/usr/lib/llvm/17/bin
distcc[293558] exec on localhost: x86_64-pc-linux-gnu-g++ -O2 -pipe
-march=znver3 -felide-constructors -fno-strict-aliasing -pie -fPIC
-fstack-protector --param=ssp-buffer-size=4 -Wconversion
-Wno-sign-conversion -fno-omit-frame-pointer -Wall -Wenum-compare
-Wenum-conversion -Wextra -Wformat-security -Wmissing-braces
-Wno-format-truncation -Wno-init-self -Wno-nonnull-compare
-Wno-unused-parameter -Woverloaded-virtual -Wnon-virtual-dtor -Wvla
-Wwrite-strings -std=gnu++11 -fvisibility=hidden -o
/tmp/distccd_9988a064.o -c /tmp/distccd_998ea064.ii
distcc[293558] (dcc_mkdir) ERROR: mkdir '/dev/null/.distcc' failed: Not
a directory
distcc[293558] (dcc_spawn_child) forking to execute:
x86_64-pc-linux-gnu-g++ -O2 -pipe -march=znver3 -felide-constructors
-fno-strict-aliasing -pie -fPIC -fstack-protector
--param=ssp-buffer-size=4 -Wconversion -Wno-sign-conversion
-fno-omit-frame-pointer -Wall -Wenum-compare -Wenum-conversion -Wextra
-Wformat-security -Wmissing-braces -Wno-format-truncation -Wno-init-self
-Wno-nonnull-compare -Wno-unused-parameter -Woverloaded-virtual
-Wnon-virtual-dtor -Wvla -Wwrite-strings -std=gnu++11
-fvisibility=hidden -o /tmp/distccd_9988a064.o -c /tmp/distccd_998ea064.ii
distcc[293558] (dcc_spawn_child) child started as pid293559
distcc[293559] (dcc_increment_safeguard) setting safeguard:
_DISTCC_SAFEGUARD=2
/var/tmp/portage/dev-db/mariadb-10.6.17/work/mysql/storage/innobase/fsp/fsp0file.cc:
In member function ‘dberr_t Datafile::validate_for_recovery()’:
/var/tmp/portage/dev-db/mariadb-10.6.17/work/mysql/storage/innobase/fsp/fsp0file.cc:419:16:
warning: this statement may fall through [-Wimplicit-fallthrough=]
/var/tmp/portage/dev-db/mariadb-10.6.17/work/mysql/storage/innobase/fsp/fsp0file.cc:429:2:
note: here
distcc[293558] (dcc_collect_child) cc child 293559 terminated with status 0
distcc[293558] (dcc_collect_child) cc times: user 0.000000s, system
0.000000s, 0 minflt, 0 majflt
distcc[293558] compile (null) on localhost completed ok
distcc[293558] elapsed compilation time 1.651658s
distcc[293558] (dcc_exit) exit: code 0; self: 0.000832 user 0.000832
sys; children: 1.523681 user 0.134703 sys
distcc[293558] (dcc_mkdir) ERROR: mkdir '/dev/null/.distcc' failed: Not
a directory
distcc[293558] (dcc_cleanup_tempfiles_inner) deleted 0 temporary files
I was trying to solve this problem and it's normally set in the
environment as above.
I read systemd uses a different mechanism, but it doesn't work.
I did set /etc/systemd/system/distccd.service.d/00gentoo.conf as per
instructions I found on the wiki:
Environment="DISTCC_VERBOSE=0"
Environment="DISTCC_SAVE_TEMPS=0"
Environment="DISTCC_DIR=/var/distcc"
Reloaded using `systemctl daemon-reload` and restarted distccd -
although this is happening on the client side and it's not really the
daemon (as far as I can tell.) The output is showing up while compiling
using emerge.
I can see it's sourcing this file:
distccd.service - Distccd: A Distributed Compilation Server
Loaded: loaded (/etc/systemd/system/distccd.service; enabled;
preset: disabled)
Drop-In: /etc/systemd/system/distccd.service.d
└─00gentoo.conf
Active: active (running) since Fri 2024-03-29 22:04:12 PDT; 29min ago
Is there some other place that needs this environment set?
It clearly isn't getting the environment set somewhere in systemd as
this error is solved with the DISTCC_DIR in the file sourced above:
distcc[293558] (dcc_mkdir) ERROR: mkdir '/dev/null/.distcc' failed: Not
a directory
...and the DISTCC_VERBOSE=0 is supposed to silence build messages.
Any insight would be helpful... as this problem is easily solved in
openrc but it seem to be rather difficult with systemd.
Dan
I've moved a couple of machines from openrc to systemd.
I have discovered this odd problem. On openrc, distcc was quiet during
building packages. It would obey environment variable set in /etc/env.d:
DISTCC_DIR=/var/distcc
DISTCC_ENABLE_DISCREPANCY_EMAIL=
DISTCC_FALLBACK=1
DISTCC_SAVE_TEMPS=0
DISTCC_SSH=
DISTCC_TCP_CORK=
DISTCC_VERBOSE=0
This currently shows up in the enviroment (checked with `set`.)
However, on systemd it spams messages in build logs:
distccd[290662] (dcc_check_compiler_masq) Warning:
x86_64-pc-linux-gnu-g++ on distccd's path is
/usr/lib/distcc/bin/x86_64-pc-linux-gnu-g++ and really a link to
/usr/bin/distcc
distcc[293558] (dcc_trace_version) distcc 3.4 x86_64-pc-linux-gnu; built
Mar 28 2024 05:05:38
distcc[293558] (dcc_recursion_safeguard) safeguard: 1
distcc[293558] (dcc_recursion_safeguard) safeguard level=1
distcc[293558] (main) compiler name is "x86_64-pc-linux-gnu-g++"
distcc[293558] (dcc_set_path) setting
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/opt/bin:/usr/lib/llvm/17/bin
distcc[293558] exec on localhost: x86_64-pc-linux-gnu-g++ -O2 -pipe
-march=znver3 -felide-constructors -fno-strict-aliasing -pie -fPIC
-fstack-protector --param=ssp-buffer-size=4 -Wconversion
-Wno-sign-conversion -fno-omit-frame-pointer -Wall -Wenum-compare
-Wenum-conversion -Wextra -Wformat-security -Wmissing-braces
-Wno-format-truncation -Wno-init-self -Wno-nonnull-compare
-Wno-unused-parameter -Woverloaded-virtual -Wnon-virtual-dtor -Wvla
-Wwrite-strings -std=gnu++11 -fvisibility=hidden -o
/tmp/distccd_9988a064.o -c /tmp/distccd_998ea064.ii
distcc[293558] (dcc_mkdir) ERROR: mkdir '/dev/null/.distcc' failed: Not
a directory
distcc[293558] (dcc_spawn_child) forking to execute:
x86_64-pc-linux-gnu-g++ -O2 -pipe -march=znver3 -felide-constructors
-fno-strict-aliasing -pie -fPIC -fstack-protector
--param=ssp-buffer-size=4 -Wconversion -Wno-sign-conversion
-fno-omit-frame-pointer -Wall -Wenum-compare -Wenum-conversion -Wextra
-Wformat-security -Wmissing-braces -Wno-format-truncation -Wno-init-self
-Wno-nonnull-compare -Wno-unused-parameter -Woverloaded-virtual
-Wnon-virtual-dtor -Wvla -Wwrite-strings -std=gnu++11
-fvisibility=hidden -o /tmp/distccd_9988a064.o -c /tmp/distccd_998ea064.ii
distcc[293558] (dcc_spawn_child) child started as pid293559
distcc[293559] (dcc_increment_safeguard) setting safeguard:
_DISTCC_SAFEGUARD=2
/var/tmp/portage/dev-db/mariadb-10.6.17/work/mysql/storage/innobase/fsp/fsp0file.cc:
In member function ‘dberr_t Datafile::validate_for_recovery()’:
/var/tmp/portage/dev-db/mariadb-10.6.17/work/mysql/storage/innobase/fsp/fsp0file.cc:419:16:
warning: this statement may fall through [-Wimplicit-fallthrough=]
/var/tmp/portage/dev-db/mariadb-10.6.17/work/mysql/storage/innobase/fsp/fsp0file.cc:429:2:
note: here
distcc[293558] (dcc_collect_child) cc child 293559 terminated with status 0
distcc[293558] (dcc_collect_child) cc times: user 0.000000s, system
0.000000s, 0 minflt, 0 majflt
distcc[293558] compile (null) on localhost completed ok
distcc[293558] elapsed compilation time 1.651658s
distcc[293558] (dcc_exit) exit: code 0; self: 0.000832 user 0.000832
sys; children: 1.523681 user 0.134703 sys
distcc[293558] (dcc_mkdir) ERROR: mkdir '/dev/null/.distcc' failed: Not
a directory
distcc[293558] (dcc_cleanup_tempfiles_inner) deleted 0 temporary files
I was trying to solve this problem and it's normally set in the
environment as above.
I read systemd uses a different mechanism, but it doesn't work.
I did set /etc/systemd/system/distccd.service.d/00gentoo.conf as per
instructions I found on the wiki:
Environment="DISTCC_VERBOSE=0"
Environment="DISTCC_SAVE_TEMPS=0"
Environment="DISTCC_DIR=/var/distcc"
Reloaded using `systemctl daemon-reload` and restarted distccd -
although this is happening on the client side and it's not really the
daemon (as far as I can tell.) The output is showing up while compiling
using emerge.
I can see it's sourcing this file:
distccd.service - Distccd: A Distributed Compilation Server
Loaded: loaded (/etc/systemd/system/distccd.service; enabled;
preset: disabled)
Drop-In: /etc/systemd/system/distccd.service.d
└─00gentoo.conf
Active: active (running) since Fri 2024-03-29 22:04:12 PDT; 29min ago
Is there some other place that needs this environment set?
It clearly isn't getting the environment set somewhere in systemd as
this error is solved with the DISTCC_DIR in the file sourced above:
distcc[293558] (dcc_mkdir) ERROR: mkdir '/dev/null/.distcc' failed: Not
a directory
...and the DISTCC_VERBOSE=0 is supposed to silence build messages.
Any insight would be helpful... as this problem is easily solved in
openrc but it seem to be rather difficult with systemd.
Dan