From 6aaa186c1f149e34a0fb2acbc497a5c5e7f138f4 Mon Sep 17 00:00:00 2001 From: Jose Date: Sun, 15 Feb 2026 09:13:08 +0100 Subject: [PATCH] =?UTF-8?q?feat=20=E2=9C=A8:=20Add=20configuration=20optio?= =?UTF-8?q?ns=20for=20log2ram=20and=20journald=20settings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit introduces new features that allow users to configure log2ram and journald settings. It includes handlers for log2ram, journald, and a task to configure RAM usage. Additionally, a new role is added for installing and configuring log2ram on Debian systems. --- defaults/main.yml | 14 +++++++ handlers/main.yml | 14 +++++++ tasks/main.yml | 3 ++ tasks/ram.yml | 103 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 134 insertions(+) create mode 100644 tasks/ram.yml diff --git a/defaults/main.yml b/defaults/main.yml index 3e2af6a..1c18c96 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -31,3 +31,17 @@ proxmox_apt_languages: - "en" - "es" - "it" + +# Percentage of total RAM to allocate to log2ram +log2ram_ram_percent: 10 + +log2ram_min_size_mb: 128 +log2ram_max_size_mb: 1024 + +# Journald RAM usage limit +journald_runtime_max_use: "100M" + +# VM write frequency tuning +vm_dirty_ratio: 15 +vm_dirty_background_ratio: 5 +vm_swappiness: "{{ proxmox_swapiness }}" diff --git a/handlers/main.yml b/handlers/main.yml index 44c8bd2..0c41bba 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -20,3 +20,17 @@ name: logrotate state: restarted become: true + +- name: Restart log2ram + ansible.builtin.systemd: + name: log2ram + state: restarted + enabled: yes + +- name: Restart journald + ansible.builtin.systemd: + name: systemd-journald + state: restarted + +- name: Reload sysctl + ansible.builtin.command: sysctl --system diff --git a/tasks/main.yml b/tasks/main.yml index 712fcb4..107d3b5 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -39,3 +39,6 @@ - name: Configure kernel panic auto-reboot ansible.builtin.import_tasks: kernel.yml + +- name: Configure ram usage + ansible.builtin.import_tasks: ram.yml diff --git a/tasks/ram.yml b/tasks/ram.yml new file mode 100644 index 0000000..2dea592 --- /dev/null +++ b/tasks/ram.yml @@ -0,0 +1,103 @@ +--- +- name: ram | Ensure Debian family + ansible.builtin.assert: + that: ansible_os_family == "Debian" + fail_msg: "This role only supports Debian/Proxmox systems." + +- name: ram | Calculate log2ram size + ansible.builtin.set_fact: + _total_ram_mb: "{{ ansible_memtotal_mb }}" + _calculated_size_mb: "{{ (ansible_memtotal_mb * log2ram_ram_percent / 100) | int }}" + log2ram_size_mb: >- + {{ + [log2ram_min_size_mb, + [_calculated_size_mb, log2ram_max_size_mb] | min + ] | max + }} + +- name: ram | Convert size to M format + ansible.builtin.set_fact: + log2ram_size: "{{ log2ram_size_mb }}M" + +# - name: Install log2ram + +- name: ram | Install dependencies + ansible.builtin.apt: + name: + - rsync + - curl + - ca-certificates + state: present + update_cache: yes + cache_valid_time: 3600 # Only run apt-get update if it hasn't run in the last hour + +- name: ram | Download log2ram + ansible.builtin.get_url: + url: https://github.com/azlux/log2ram/archive/refs/heads/master.tar.gz + dest: /tmp/log2ram.tar.gz + # Adding a checksum ensures we only 'change' if the file is new/updated + checksum: "sha256:https://github.com/azlux/log2ram/archive/refs/heads/master.tar.gz.sha256" + mode: '0644' + register: download_archive + +- name: ram | Extract log2ram + ansible.builtin.unarchive: + src: "/tmp/log2ram.tar.gz" + dest: "/tmp" + remote_src: yes + when: download_archive.changed + +- name: ram | Install log2ram + ansible.builtin.command: bash install.sh + args: + chdir: "/tmp/log2ram-master" + # 'creates' makes the command idempotent by checking for the binary + creates: /usr/local/bin/log2ram + when: download_archive.changed + notify: Restart log2ram + +# Configure log2ram + +- name: ram | Configure log2ram size + ansible.builtin.lineinfile: + path: /etc/log2ram.conf + regexp: '^#?SIZE=' + line: "SIZE={{ log2ram_size }}" + backup: yes + notify: Restart log2ram + +- name: ram | Enable rsync sync + ansible.builtin.lineinfile: + path: /etc/log2ram.conf + regexp: '^#?USE_RSYNC=' + line: "USE_RSYNC=true" + notify: Restart log2ram + +# Keep journald fully in RAM + +- name: ram | Configure journald storage volatile + ansible.builtin.lineinfile: + path: /etc/systemd/journald.conf + regexp: '^#?Storage=' + line: "Storage=volatile" + backup: yes + notify: Restart journald + +- name: ram | Limit journald runtime size + ansible.builtin.lineinfile: + path: /etc/systemd/journald.conf + regexp: '^#?RuntimeMaxUse=' + line: "RuntimeMaxUse={{ journald_runtime_max_use }}" + notify: Restart journald + +# Enable log2ram on boot + +- name: ram | Configure memory tuning sysctl + ansible.builtin.copy: + dest: /etc/sysctl.d/99-proxmox-memory.conf + content: | + vm.swappiness = {{ vm_swappiness }} + vm.dirty_ratio = {{ vm_dirty_ratio }} + vm.dirty_background_ratio = {{ vm_dirty_background_ratio }} + mode: '0644' + notify: Reload sysctl