Erhöhen Sie das 128-KB-Limit für Umgebungsvariablen unter Linux

10

Linux scheint ein Standardlimit von 128 KB (131072) für die Länge einer einzelnen Umgebungsvariablen zu haben. Jeder Versuch, eine Envvar länger als diese festzulegen und dann ein Programm auszuführen, führt zu einem Fehler "Argumentliste zu lang".

Dies scheint ein Konfigurationsparameter zu sein, aber ich konnte keine Möglichkeit finden, ihn zu erhöhen. Gibt es eine Möglichkeit, es zu erhöhen?

Dies ist problematisch für Tools wie "automake", die versuchen, im Rahmen ihres Erstellungs- und Testprozesses lange Listen von Dateien oder Tests in einer Umgebungsvariablen zusammenzuführen.

Chris Dodd
quelle
@ NarūnasK: Nicht besonders hilfreich, da dies nur die Begrenzung der Summe aller Argumente und Envvars betrifft, nicht die Begrenzung für jede Envvar.
Chris Dodd
Haben Sie den Abschnitt überprüft: Anzahl der Argumente und maximale Länge eines Arguments ? Es gibt einen Hinweis auf MAX_ARG_STRLEN (131072)
NarūnasK
2
Schauen Sie auch hier . Es wird genau das gleiche Problem besprochen.
NarūnasK
3
MAX_ARG_STRLENist eine Konstante wie PAGESIZE*32in definiert /path/to/linux/headers/include/uapi/linux/binfmts.h. Kann nicht geändert werden, ohne den Kernel neu zu kompilieren.
AlexP

Antworten:

5

MAX_ARG_STRLENist eine Konstante wie PAGESIZE*32in definiert include/uapi/linux/binfmts.h. Sein Wert kann nicht geändert werden, ohne den Kernel neu zu kompilieren.

/*
 * These are the maximum length and maximum number of strings passed to the
 * execve() system call.  MAX_ARG_STRLEN is essentially random but serves to
 * prevent the kernel from being unduly impacted by misaddressed pointers.
 * MAX_ARG_STRINGS is chosen to fit in a signed 32-bit integer.
 */
#define MAX_ARG_STRLEN (PAGE_SIZE * 32)
#define MAX_ARG_STRINGS 0x7FFFFFFF
AlexP
quelle