From debfc714aa5de1ebbff5dcd988377d3aeed0797c Mon Sep 17 00:00:00 2001 From: Salt Date: Tue, 30 Jun 2020 06:47:31 -0500 Subject: [PATCH] Template out a backup module for desktops Kinda primitive, but the idea is that I can just link shit into ~/.backups and it'll get backed up --- roles/desktop/tasks/main.yml | 113 ++++++++++++++++-------------- roles/desktop/templates/backup.sh | 41 +++++++++++ 2 files changed, 100 insertions(+), 54 deletions(-) create mode 100644 roles/desktop/templates/backup.sh diff --git a/roles/desktop/tasks/main.yml b/roles/desktop/tasks/main.yml index 1d0f846..3364012 100644 --- a/roles/desktop/tasks/main.yml +++ b/roles/desktop/tasks/main.yml @@ -3,58 +3,63 @@ --- - name: Configure desktop system block: - - name: Create config directories - file: - path: "{{ item }}" - state: directory - recurse: yes - loop: - - "/etc/X11/xorg.conf.d" - - name: Nuke some configs - file: - path: "{{ item }}" - state: absent - loop: - # Works around a bug where this causes failed logins - - "/etc/X11/Xsession.d/70im-config_launch" - - name: Copy system configs - template: - src: "{{ item.src }}" - dest: "{{ item.dest }}" - mode: "{{ item.mode }}" - loop: - - { src: "sshd_config", dest: "/etc/ssh/sshd_config", mode: "0644" } - - { src: "nomouseaccel.conf", dest: "/etc/X11/xorg.conf.d/90-mouse-acceleration.conf", mode: "0644" } - - { src: "i3.desktop", dest: "/usr/share/xsessions/i3-custom.desktop", mode: "0644" } - - { src: "startx.desktop", dest: "/usr/share/xsessions/startx-custom.desktop", mode: "0644" } - - name: Copy udev rules - template: - src: "{{ item.src }}" - dest: "{{ item.dest }}" - mode: "{{ item.mode }}" - loop: - - { src: "g810-led.rules", dest: "/etc/udev/rules.d/50-g810-led.rules", mode: "0644" } - - { src: "switch-rcm.rules", dest: "/etc/udev/rules.d/50-switch-rcm.rules", mode: "0644" } - notify: reload udev - - name: Configure SSH - include_tasks: sshd.yml - - name: Configure system packages - include_tasks: packages.yml - - name: Configure Mopidy - include_tasks: mopidy.yml - - name: Stop services - systemd: - name: "{{ item }}" - enabled: no - state: stopped - loop: - - mopidy.service - - motd-news.timer - - name: Start services - systemd: - name: "{{ item }}" - enabled: yes - state: started - loop: - - syncthing@salt.service + - name: Create config directories + file: + path: "{{ item }}" + state: directory + recurse: yes + loop: + - "/etc/X11/xorg.conf.d" + - name: Nuke some configs + file: + path: "{{ item }}" + state: absent + loop: + # Works around a bug where this causes failed logins + - "/etc/X11/Xsession.d/70im-config_launch" + - name: Copy system configs + template: + src: "{{ item.src }}" + dest: "{{ item.dest }}" + mode: "{{ item.mode }}" + loop: + - { src: "sshd_config", dest: "/etc/ssh/sshd_config", mode: "0644" } + - { src: "nomouseaccel.conf", dest: "/etc/X11/xorg.conf.d/90-mouse-acceleration.conf", mode: "0644" } + - { src: "i3.desktop", dest: "/usr/share/xsessions/i3-custom.desktop", mode: "0644" } + - { src: "startx.desktop", dest: "/usr/share/xsessions/startx-custom.desktop", mode: "0644" } + - name: Copy udev rules + template: + src: "{{ item.src }}" + dest: "{{ item.dest }}" + mode: "{{ item.mode }}" + loop: + - { src: "g810-led.rules", dest: "/etc/udev/rules.d/50-g810-led.rules", mode: "0644" } + - { src: "switch-rcm.rules", dest: "/etc/udev/rules.d/50-switch-rcm.rules", mode: "0644" } + notify: reload udev + - name: Configure SSH + include_tasks: sshd.yml + - name: Configure system packages + include_tasks: packages.yml + - name: Configure Mopidy + include_tasks: mopidy.yml + - name: Stop services + systemd: + name: "{{ item }}" + enabled: no + state: stopped + loop: + - mopidy.service + - motd-news.timer + - name: Start services + systemd: + name: "{{ item }}" + enabled: yes + state: started + loop: + - syncthing@salt.service + - name: Template out backup module + template: + src: "backup.sh" + dest: "/opt/backups/modules/desktop.sh" + mode: "0600" become: yes diff --git a/roles/desktop/templates/backup.sh b/roles/desktop/templates/backup.sh new file mode 100644 index 0000000..4b2ddf4 --- /dev/null +++ b/roles/desktop/templates/backup.sh @@ -0,0 +1,41 @@ +#! /bin/bash +# +# desktop.sh +# Backup script for desktops. Meant to be sourced by our main backup script +# Copyright (C) 2020 Vintage Salt +# +# Distributed under terms of the MIT license. +# + +set -e + +export OUTDIR="$BACKUPSDIR/{{ dokuwiki_url }}" +retention=7 # 7-day retention period + +# Sanity checks +if [ -z "$BACKUPSDIR" ]; then + log "BACKUPSDIR was undefined. Run the main backup script instead of this one." + return 1 +fi +if ! [ -d "$OUTDIR" ]; then + if ! mkdir "$OUTDIR"; then + log "Unable to find or create output directory: $OUTDIR" + return 2 + fi +fi + +# Purge oldest backup if we need to +currentbackupcount="$(ls -1 "$OUTDIR" | wc -l)" +if (( currentbackupcount >= retention )); then + lastbackup="$(find "$OUTDIR" -name \*.tar.gz 2>/dev/null | sort | head -n 1)" + if [ -f "$lastbackup" ]; then + log "Removing old backup: $lastbackup" + rm "$lastbackup" + fi +fi +# WE MAKE BACKUP NOW SERGEI +for dir in /home/*; do + username="$(basename -- "$dir")" + tar czhf "$OUTDIR/desktop-$username-{{ inventory_hostname }}-$(date -Iseconds).tar.gz" "$dir/.backup" +done +