mirror of
https://github.com/systemd/systemd.git
synced 2025-02-28 05:57:33 +03:00
sd-journal: allow to specify compression algorithm through env
Fixes RHBZ#2183546 (https://bugzilla.redhat.com/show_bug.cgi?id=2183546). Previously, journal file is always compressed with the default algorithm set at compile time. So, if a newer algorithm is used, journal files cannot be read by older version of journalctl that does not support the algorithm. Co-authored-by: Colin Walters <walters@verbum.org>
This commit is contained in:
parent
2360352ef0
commit
1f06ea747b
@ -513,6 +513,14 @@ SYSTEMD_HOME_DEBUG_SUFFIX=foo \
|
|||||||
journal. Note that journal files in compact mode are limited to 4G to allow use of
|
journal. Note that journal files in compact mode are limited to 4G to allow use of
|
||||||
32-bit offsets. Enabled by default.
|
32-bit offsets. Enabled by default.
|
||||||
|
|
||||||
|
* `$SYSTEMD_JOURNAL_COMPRESS` – Takes a boolean, or one of the compression
|
||||||
|
algorithms "XZ", "LZ4", and "ZSTD". If enabled, the default compression
|
||||||
|
algorithm set at compile time will be used when opening a new journal file.
|
||||||
|
If disabled, the journal file compression will be disabled. Note that the
|
||||||
|
compression mode of existing journal files are not changed. To make the
|
||||||
|
specified algorithm takes an effect immediately, you need to explicitly run
|
||||||
|
`journalctl --rotate`.
|
||||||
|
|
||||||
`systemd-pcrphase`, `systemd-cryptsetup`:
|
`systemd-pcrphase`, `systemd-cryptsetup`:
|
||||||
|
|
||||||
* `$SYSTEMD_FORCE_MEASURE=1` — If set, force measuring of resources (which are
|
* `$SYSTEMD_FORCE_MEASURE=1` — If set, force measuring of resources (which are
|
||||||
|
@ -347,6 +347,48 @@ static bool compact_mode_requested(void) {
|
|||||||
return cached;
|
return cached;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if HAVE_COMPRESSION
|
||||||
|
static Compression getenv_compression(void) {
|
||||||
|
Compression c;
|
||||||
|
const char *e;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
e = getenv("SYSTEMD_JOURNAL_COMPRESS");
|
||||||
|
if (!e)
|
||||||
|
return DEFAULT_COMPRESSION;
|
||||||
|
|
||||||
|
r = parse_boolean(e);
|
||||||
|
if (r >= 0)
|
||||||
|
return r ? DEFAULT_COMPRESSION : COMPRESSION_NONE;
|
||||||
|
|
||||||
|
c = compression_from_string(e);
|
||||||
|
if (c < 0) {
|
||||||
|
log_debug_errno(c, "Failed to parse SYSTEMD_JOURNAL_COMPRESS value, ignoring: %s", e);
|
||||||
|
return DEFAULT_COMPRESSION;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!compression_supported(c)) {
|
||||||
|
log_debug("Unsupported compression algorithm specified, ignoring: %s", e);
|
||||||
|
return DEFAULT_COMPRESSION;
|
||||||
|
}
|
||||||
|
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static Compression compression_requested(void) {
|
||||||
|
#if HAVE_COMPRESSION
|
||||||
|
static thread_local Compression cached = _COMPRESSION_INVALID;
|
||||||
|
|
||||||
|
if (cached < 0)
|
||||||
|
cached = getenv_compression();
|
||||||
|
|
||||||
|
return cached;
|
||||||
|
#else
|
||||||
|
return COMPRESSION_NONE;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
static int journal_file_init_header(
|
static int journal_file_init_header(
|
||||||
JournalFile *f,
|
JournalFile *f,
|
||||||
JournalFileFlags file_flags,
|
JournalFileFlags file_flags,
|
||||||
@ -366,7 +408,7 @@ static int journal_file_init_header(
|
|||||||
Header h = {
|
Header h = {
|
||||||
.header_size = htole64(ALIGN64(sizeof(h))),
|
.header_size = htole64(ALIGN64(sizeof(h))),
|
||||||
.incompatible_flags = htole32(
|
.incompatible_flags = htole32(
|
||||||
FLAGS_SET(file_flags, JOURNAL_COMPRESS) * COMPRESSION_TO_HEADER_INCOMPATIBLE_FLAG(DEFAULT_COMPRESSION) |
|
FLAGS_SET(file_flags, JOURNAL_COMPRESS) * COMPRESSION_TO_HEADER_INCOMPATIBLE_FLAG(compression_requested()) |
|
||||||
keyed_hash_requested() * HEADER_INCOMPATIBLE_KEYED_HASH |
|
keyed_hash_requested() * HEADER_INCOMPATIBLE_KEYED_HASH |
|
||||||
compact_mode_requested() * HEADER_INCOMPATIBLE_COMPACT),
|
compact_mode_requested() * HEADER_INCOMPATIBLE_COMPACT),
|
||||||
.compatible_flags = htole32(
|
.compatible_flags = htole32(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user