Auto-detect if we're running in a container and disable klogd
This patch adds a very rudimentary container check. When one, of a select few containers, are detected, sysklogd disables the kernel logging -- since there's no point in logging kernel messages other than from the host system. Issue #48 Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
parent
29e932008d
commit
c534556790
@ -189,6 +189,40 @@ static int waitdaemon(int);
|
|||||||
static void timedout(int);
|
static void timedout(int);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Very basic, and incomplete, check if we're running in a container.
|
||||||
|
* If so, we probably want to disable kernel logging.
|
||||||
|
*/
|
||||||
|
static int in_container(void)
|
||||||
|
{
|
||||||
|
const char *files[] = {
|
||||||
|
"/run/.containerenv",
|
||||||
|
"/.dockerenv"
|
||||||
|
};
|
||||||
|
const char *containers[] = {
|
||||||
|
"lxc",
|
||||||
|
"docker",
|
||||||
|
"kubepod"
|
||||||
|
};
|
||||||
|
size_t i;
|
||||||
|
char *c;
|
||||||
|
|
||||||
|
c = getenv("container");
|
||||||
|
if (c) {
|
||||||
|
for (i = 0; i < NELEMS(containers); i++) {
|
||||||
|
if (!strcmp(containers[i], c))
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < NELEMS(files); i++) {
|
||||||
|
if (!access(files[i], F_OK))
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int addpeer(struct peer *pe0)
|
static int addpeer(struct peer *pe0)
|
||||||
{
|
{
|
||||||
struct peer *pe;
|
struct peer *pe;
|
||||||
@ -316,8 +350,10 @@ int usage(int code)
|
|||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
pid_t ppid = 1;
|
pid_t ppid = 1;
|
||||||
|
int no_sys = 0;
|
||||||
|
int pflag = 0;
|
||||||
|
int bflag = 0;
|
||||||
char *ptr;
|
char *ptr;
|
||||||
int pflag = 0, bflag = 0;
|
|
||||||
int ch;
|
int ch;
|
||||||
|
|
||||||
while ((ch = getopt(argc, argv, "46Aa:b:C:dHFf:Kkm:nP:p:r:sTtv?")) != EOF) {
|
while ((ch = getopt(argc, argv, "46Aa:b:C:dHFf:Kkm:nP:p:r:sTtv?")) != EOF) {
|
||||||
@ -464,6 +500,11 @@ int main(int argc, char *argv[])
|
|||||||
* systems is /proc/kmsg, and /dev/klog on *BSD.
|
* systems is /proc/kmsg, and /dev/klog on *BSD.
|
||||||
*/
|
*/
|
||||||
if (KernLog) {
|
if (KernLog) {
|
||||||
|
if (in_container()) {
|
||||||
|
no_sys = 1;
|
||||||
|
goto no_klogd;
|
||||||
|
}
|
||||||
|
|
||||||
sys_seqno_load();
|
sys_seqno_load();
|
||||||
if (opensys("/dev/kmsg")) {
|
if (opensys("/dev/kmsg")) {
|
||||||
if (opensys(_PATH_KLOG))
|
if (opensys(_PATH_KLOG))
|
||||||
@ -473,6 +514,7 @@ int main(int argc, char *argv[])
|
|||||||
kern_console_off();
|
kern_console_off();
|
||||||
} else
|
} else
|
||||||
kern_console_off();
|
kern_console_off();
|
||||||
|
no_klogd:
|
||||||
}
|
}
|
||||||
|
|
||||||
consfile.f_type = F_CONSOLE;
|
consfile.f_type = F_CONSOLE;
|
||||||
@ -513,6 +555,10 @@ int main(int argc, char *argv[])
|
|||||||
if (ppid != 1)
|
if (ppid != 1)
|
||||||
kill(ppid, SIGALRM);
|
kill(ppid, SIGALRM);
|
||||||
|
|
||||||
|
/* Log if we disabled klogd */
|
||||||
|
if (no_sys)
|
||||||
|
NOTE("Running in a container, disabling klogd.");
|
||||||
|
|
||||||
/* Main loop begins here. */
|
/* Main loop begins here. */
|
||||||
for (;;) {
|
for (;;) {
|
||||||
int rc;
|
int rc;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user