24 changed files with 516 additions and 0 deletions
@ -0,0 +1,7 @@ |
|||
--- |
|||
- hosts: "{{ target }}" |
|||
gather_facts: false |
|||
remote_user: pi |
|||
roles: |
|||
- initnextcloud |
|||
|
@ -0,0 +1,4 @@ |
|||
/opt |
|||
/home |
|||
/etc |
|||
/mnt/nvme |
@ -0,0 +1,50 @@ |
|||
#!/bin/bash |
|||
######################################################################### |
|||
# Copyright (C) 2020 Akito <the@akito.ooo> # |
|||
# # |
|||
# This program is free software: you can redistribute it and/or modify # |
|||
# it under the terms of the GNU General Public License as published by # |
|||
# the Free Software Foundation, either version 3 of the License, or # |
|||
# (at your option) any later version. # |
|||
# # |
|||
# This program is distributed in the hope that it will be useful, # |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of # |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # |
|||
# GNU General Public License for more details. # |
|||
# # |
|||
# You should have received a copy of the GNU General Public License # |
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>. # |
|||
######################################################################### |
|||
# https://borgbackup.readthedocs.io/en/stable/deployment/automated-local.html |
|||
# 0.2.0 |
|||
PURPOSE="SYSTEM" |
|||
TARGET_HOST="" |
|||
LOCATION="/tank/borg/" |
|||
BORG_REPO="${HOSTNAME}" |
|||
TARGET="${TARGET_HOST}${LOCATION}${BORG_REPO}" |
|||
ARC_NAME="${HOSTNAME}+${USER}:$(date +"%Y%m%dT%H%M%S")" |
|||
BORG_COMMENT="Automated \"${PURPOSE}\" backup to repository \"${BORG_REPO}\" at \"${TARGET_HOST}${LOCATION}\" issued $(date +"%Y-%m-%dT%H:%M:%S")." |
|||
BORG_OPTS="--paths-from-stdin --compression auto,lzma,9 --checkpoint-interval 900 --warning" |
|||
LOGFILE_LOCATION="/tmp" |
|||
LOGFILE="borg-${PURPOSE}_$(date +"%Y%m%dT%H%M%S").log" |
|||
export BORG_RELOCATED_REPO_ACCESS_IS_OK=yes |
|||
export BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes |
|||
borg create ${BORG_OPTS} \ |
|||
--comment "${BORG_COMMENT}" \ |
|||
--exclude /media \ |
|||
--exclude /dev \ |
|||
--exclude /run \ |
|||
--exclude /tmp \ |
|||
--exclude /sys \ |
|||
--exclude /proc \ |
|||
--exclude /mnt \ |
|||
--exclude /tank \ |
|||
--exclude /extusb \ |
|||
--exclude /var/log \ |
|||
"${TARGET}::${ARC_NAME}" \ |
|||
< /home/pi/borg_dirs.txt |
|||
|
|||
|
|||
# 2>> "${LOGFILE_LOCATION}/${LOGFILE}" |
|||
|
|||
sync |
@ -0,0 +1,33 @@ |
|||
#!/bin/bash |
|||
######################################################################### |
|||
# Copyright (C) 2020 Akito <the@akito.ooo> # |
|||
# # |
|||
# This program is free software: you can redistribute it and/or modify # |
|||
# it under the terms of the GNU General Public License as published by # |
|||
# the Free Software Foundation, either version 3 of the License, or # |
|||
# (at your option) any later version. # |
|||
# # |
|||
# This program is distributed in the hope that it will be useful, # |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of # |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # |
|||
# GNU General Public License for more details. # |
|||
# # |
|||
# You should have received a copy of the GNU General Public License # |
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>. # |
|||
######################################################################### |
|||
# https://borgbackup.readthedocs.io/en/stable/deployment/automated-local.html |
|||
# 0.2.0 |
|||
PURPOSE="SYSTEM" |
|||
TARGET_HOST="" |
|||
LOCATION="/tank/borg" |
|||
BORG_REPO="${HOSTNAME}" |
|||
ARC_NAME="${HOSTNAME}+${USER}:$(date +"%Y%m%dT%H%M%S")" |
|||
BORG_COMMENT="Automated \"${PURPOSE}\" backup to repository \"${BORG_REPO}\" at \"${TARGET_HOST}${LOCATION}\" issued $(date +"%Y-%m-%dT%H:%M:%S")." |
|||
BORG_OPTS="--keep-within 15d" |
|||
LOGFILE_LOCATION="/tmp" |
|||
LOGFILE="borg-${PURPOSE}_$(date +"%Y%m%dT%H%M%S").log" |
|||
export BORG_RELOCATED_REPO_ACCESS_IS_OK=yes |
|||
export BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes |
|||
borg prune ${BORG_OPTS} ${LOCATION}/${BORG_REPO} |
|||
|
|||
sync |
@ -0,0 +1,19 @@ |
|||
#! /usr/bin/bash |
|||
#inspired by Sun Knudsen |
|||
|
|||
# create the test files |
|||
echo "preparing tests" |
|||
sysbench fileio --file-total-size=8G prepare > /dev/null |
|||
|
|||
# Test with 16K block size, random read/write |
|||
echo "run test with 16K block size" |
|||
sysbench fileio --file-block-size=16K --file-total-size=8G --file-test-mode=rndrw --threads=$(nproc) run |
|||
|
|||
# Test with 1M block size, random read/write |
|||
echo "run test with 1M block size" |
|||
sysbench fileio --file-block-size=1M --file-total-size=8G --file-test-mode=rndrw --threads=$(nproc) run |
|||
|
|||
# cleanup the test files |
|||
sysbench fileio --file-total-size=8G cleanup |
|||
|
|||
|
@ -0,0 +1,4 @@ |
|||
# !/usr/bin/bash |
|||
|
|||
|
|||
for f in ${1}*.svg; do rsvg-convert "$f" -o "${f%.svg}.png"; done |
@ -0,0 +1,92 @@ |
|||
#!/usr/bin/env bash |
|||
set -euo pipefail |
|||
|
|||
# Dauer des Tests (Default: 10 Minuten, Format z.B. „5m", „600") |
|||
DURATION="${1:-10m}" |
|||
|
|||
# Verzeichnisse / Geräte für File‑IO |
|||
DATA_DRIVE="${HOME}/test/sysbench" # bitte anpassen |
|||
SYSTEM_DRIVE="/mnt/nextcloud/test/sysbench" # bitte anpassen |
|||
CURRENT_DIR=$(pwd) |
|||
|
|||
# Größe und Einstellungen für sysbench-File‑IO |
|||
FILE_TOTAL_SIZE="1G" |
|||
FILE_NUM="4" |
|||
TEST_MODE="rndrw" |
|||
EXTRA_FLAGS="--file-extra-flags=direct" |
|||
|
|||
echo "== Vorbereitung: File‑IO Testdateien erstellen ==" |
|||
echo "testmode=${TEST_MODE}" |
|||
|
|||
cd ${DATA_DRIVE} |
|||
echo "preparing sysbench on ${DATA_DRIVE}" |
|||
sysbench fileio \ |
|||
--file-total-size=${FILE_TOTAL_SIZE} \ |
|||
--file-num=${FILE_NUM} \ |
|||
--file-test-mode=${TEST_MODE} \ |
|||
${EXTRA_FLAGS} \ |
|||
prepare & |
|||
cd ${SYSTEM_DRIVE} |
|||
echo "preparing sysbench on ${SYSTEM_DRIVE}" |
|||
sysbench fileio \ |
|||
--file-total-size=${FILE_TOTAL_SIZE} \ |
|||
--file-num=${FILE_NUM} \ |
|||
--file-test-mode=${TEST_MODE} \ |
|||
${EXTRA_FLAGS} \ |
|||
prepare |
|||
wait |
|||
echo "== Vorbereitung fertig, starte Stresstest für ${DURATION} ==" |
|||
|
|||
# CPU‑Stresstest |
|||
echo "running stress-ng" |
|||
stress-ng \ |
|||
--cpu 8 \ |
|||
--cpu-method all \ |
|||
--verify \ |
|||
--timeout ${DURATION} \ |
|||
--metrics-brief \ |
|||
> stress-ng.log & |
|||
|
|||
# File‑IO auf System-Laufwerk |
|||
cd ${SYSTEM_DRIVE} |
|||
echo "running sysbench on ${SYSTEM_DRIVE}" |
|||
sysbench fileio \ |
|||
--file-total-size=${FILE_TOTAL_SIZE} \ |
|||
--file-num=${FILE_NUM} \ |
|||
--file-test-mode=${TEST_MODE} \ |
|||
${EXTRA_FLAGS} \ |
|||
--file-dir=${DATA_DRIVE} \ |
|||
--time=10 run \ |
|||
> sysbench-nvme.log & |
|||
|
|||
# File‑IO auf Daten-Laufwerk |
|||
cd ${DATA_DRIVE} |
|||
echo "running sysbench on ${DATA_DRIVE}" |
|||
sysbench fileio \ |
|||
--file-total-size=${FILE_TOTAL_SIZE} \ |
|||
--file-num=${FILE_NUM} \ |
|||
--file-test-mode=${TEST_MODE} \ |
|||
${EXTRA_FLAGS} \ |
|||
--file-dir=${SYSTEM_DRIVE} \ |
|||
--time=10 run \ |
|||
> sysbench-sata.log & |
|||
|
|||
# Auf alle Hintergrund‐Jobs warten |
|||
wait |
|||
|
|||
echo "== Stresstest abgeschlossen ==" |
|||
echo "Ergebnisse:" |
|||
echo " - CPU (stress-ng): see stress-ng.log" |
|||
echo " - NVMe (sysbench): see sysbench-nvme.log" |
|||
echo " - SATA (sysbench): see sysbench-sata.log" |
|||
|
|||
# Clean up File‑IO Testdateien |
|||
echo "== Aufräumen: File‑IO Testdateien löschen ==" |
|||
cd ${DATA_DRIVE} |
|||
sysbench fileio ${EXTRA_FLAGS} cleanup |
|||
cd ${SYSTEM_DRIVE} |
|||
sysbench fileio ${EXTRA_FLAGS} cleanup |
|||
cd ${CURRENT_DIR} |
|||
|
|||
echo "Fertig." |
|||
|
@ -0,0 +1,11 @@ |
|||
#!/usr/bin/env bash |
|||
|
|||
sudo apt install python3 python3-dev python3-setuptools python3-wheel python3-pip libssl-dev openssl libacl1-dev libacl1 build-essential libfuse-dev fuse pkg-config ssh |
|||
sudo pip3 install borgbackup[fuse] |
|||
mkdir /tank/borg/${HOSTNAME} |
|||
cd /tank/borg |
|||
borg --verbose init --encryption=none $HOSTNAME |
|||
borg --verbose --progress create --stats --comment "Initial backup" /tank/borg/$HOSTNAME/::firstbackup /home/$USER |
|||
|
|||
|
|||
|
@ -0,0 +1,16 @@ |
|||
#! /bin/bash |
|||
|
|||
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq |
|||
vcgencmd measure_temp |
|||
echo -n "Fan-Speed beim Start: " |
|||
cat /sys/devices/platform/cooling_fan/hwmon/hwmon2/fan1_input |
|||
|
|||
sysbench cpu --cpu-max-prime=1000 --threads=4 run >/dev/null 2>&1 |
|||
|
|||
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq |
|||
|
|||
sysbench cpu --cpu-max-prime=50000 --threads=4 run |
|||
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq |
|||
vcgencmd measure_temp |
|||
echo -n "Fan-Speed am Ende: " |
|||
cat /sys/devices/platform/cooling_fan/hwmon/hwmon2/fan1_input |
@ -0,0 +1,15 @@ |
|||
#!/usr/bin/env bash |
|||
|
|||
bramble=(quimby hans willie kirk brandine) |
|||
|
|||
|
|||
for host in "${bramble[@]}" |
|||
do |
|||
ping -c 3 ${host} |
|||
done |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
@ -0,0 +1,14 @@ |
|||
#!/usr/bin/env bash |
|||
# from ansible/resources |
|||
|
|||
mkdir -p /tank/stressberry/${HOSTNAME} |
|||
cd /tank/stressberry/${HOSTNAME} |
|||
|
|||
SRUN=$(which stressberry-run) |
|||
SPLOT=$(which stressberry-plot) |
|||
|
|||
echo "Aufruf ${SRUN}" |
|||
${SRUN} -n "${HOSTNAME}" -d 1800 -i 300 -c 4 ${HOSTNAME}.out |
|||
echo "Aufruf ${SPLOT}" |
|||
${SPLOT} ${HOSTNAME}.out -f -d 300 -f -l 400 3100 -t 25 90 -o ${HOSTNAME}.png --not-transparent |
|||
|
@ -0,0 +1,10 @@ |
|||
cpu=$(</sys/class/thermal/thermal_zone0/temp) |
|||
|
|||
vccmd=$(which vcgencmd) |
|||
gpu=$(${vccmd} measure_temp) |
|||
gpu=$(echo "${gpu}"| sed 's|temp\=||g') |
|||
|
|||
echo "$(date) @ $(hostname)" |
|||
echo "-------------------------------------------" |
|||
echo "GPU => ${gpu}" |
|||
echo "CPU => $((cpu/1000))'C" |
@ -0,0 +1,77 @@ |
|||
#!/usr/bin/env bash |
|||
set -euo pipefail |
|||
|
|||
# Dauer des Tests (Default: 10 Minuten, Format z.B. "5m", "600") |
|||
DURATION="${1:-10m}" |
|||
|
|||
# Verzeichnisse / Geräte für File‑IO |
|||
NVME_MOUNT="~/test" # bitte anpassen |
|||
SATA_MOUNT="/mnt/nextcloud/test" # bitte anpassen |
|||
|
|||
# Größe und Einstellungen für sysbench-File‑IO |
|||
FILE_TOTAL_SIZE="1G" |
|||
FILE_NUM="4" |
|||
TEST_MODE="rndrw" |
|||
EXTRA_FLAGS="--file-extra-flags=direct" |
|||
|
|||
echo "== Vorbereitung: File‑IO Testdateien erstellen ==" |
|||
sysbench fileio \ |
|||
--file-total-size=${FILE_TOTAL_SIZE} \ |
|||
--file-num=${FILE_NUM} \ |
|||
--file-test-mode=${TEST_MODE} \ |
|||
${EXTRA_FLAGS} \ |
|||
--file-dir=${NVME_MOUNT} prepare & |
|||
sysbench fileio \ |
|||
--file-total-size=${FILE_TOTAL_SIZE} \ |
|||
--file-num=${FILE_NUM} \ |
|||
--file-test-mode=${TEST_MODE} \ |
|||
${EXTRA_FLAGS} \ |
|||
--file-dir=${SATA_MOUNT} prepare & |
|||
wait |
|||
echo "== Vorbereitung fertig, starte Stresstest für ${DURATION} ==" |
|||
|
|||
# CPU‑Stresstest |
|||
stress-ng \ |
|||
--cpu 8 \ |
|||
--cpu-method all \ |
|||
--verify \ |
|||
--timeout ${DURATION} \ |
|||
--metrics-brief \ |
|||
> stress-ng.log 2>&1 & |
|||
|
|||
# File‑IO auf NVMe |
|||
sysbench fileio \ |
|||
--file-total-size=${FILE_TOTAL_SIZE} \ |
|||
--file-num=${FILE_NUM} \ |
|||
--file-test-mode=${TEST_MODE} \ |
|||
${EXTRA_FLAGS} \ |
|||
--file-dir=${NVME_MOUNT} \ |
|||
--time=${DURATION} run \ |
|||
> sysbench-nvme.log 2>&1 & |
|||
|
|||
# File‑IO auf SATA‑SSD |
|||
sysbench fileio \ |
|||
--file-total-size=${FILE_TOTAL_SIZE} \ |
|||
--file-num=${FILE_NUM} \ |
|||
--file-test-mode=${TEST_MODE} \ |
|||
${EXTRA_FLAGS} \ |
|||
--file-dir=${SATA_MOUNT} \ |
|||
--time=${DURATION} run \ |
|||
> sysbench-sata.log 2>&1 & |
|||
|
|||
# Auf alle Hintergrund‐Jobs warten |
|||
wait |
|||
|
|||
echo "== Stresstest abgeschlossen ==" |
|||
echo "Ergebnisse:" |
|||
echo " - CPU (stress-ng): see stress-ng.log" |
|||
echo " - NVMe (sysbench): see sysbench-nvme.log" |
|||
echo " - SATA (sysbench): see sysbench-sata.log" |
|||
|
|||
# Clean up File‑IO Testdateien |
|||
echo "== Aufräumen: File‑IO Testdateien löschen ==" |
|||
sysbench fileio ${EXTRA_FLAGS} --file-dir=${NVME_MOUNT} cleanup |
|||
sysbench fileio ${EXTRA_FLAGS} --file-dir=${SATA_MOUNT} cleanup |
|||
|
|||
echo "Fertig." |
|||
|
@ -0,0 +1,21 @@ |
|||
# System-Updater CC-BY Olli Graf |
|||
# V 1.6 2019 |
|||
|
|||
VERSION="1.7" |
|||
TMPFILE="/tmp/updater.txt" |
|||
|
|||
echo "Updater V ${VERSION}" |
|||
sudo rm -f ${TMPFILE} |
|||
sudo apt-get update |
|||
sudo apt-get dist-upgrade -y --allow-unauthenticated |tee ${TMPFILE} |
|||
sudo snap refresh |
|||
sudo apt-get autoremove -y |
|||
if grep -q linux-header ${TMPFILE}; then |
|||
echo "reboot nötig" |
|||
read -n1 -p "Neustart? (J/N)" auswahl |
|||
if [ "${auswahl}" == "j" ]; then |
|||
echo "System wird gestartet." |
|||
sudo reboot |
|||
fi |
|||
|
|||
fi |
@ -0,0 +1,27 @@ |
|||
- name: Abbrechen, wenn /mnt/nextcloud nicht gemountet ist |
|||
fail: |
|||
msg: "/mnt/nextcloud ist nicht gemountet – Playbook wird abgebrochen." |
|||
when: "'/mnt/nextcloud' not in (ansible_mounts | map(attribute='mount') | list)" |
|||
- name: create home dirs |
|||
file: |
|||
path: "~/{{ item }}" |
|||
state: directory |
|||
loop: "{{ homedirs }}" |
|||
|
|||
- name: create volume dir |
|||
become: true |
|||
file: |
|||
path: "{{ item }}" |
|||
state: directory |
|||
owner: pi |
|||
group: pi |
|||
mode: '0755' |
|||
loop: "{{ volumedirs }}" |
|||
|
|||
- name: create nextcloud dirs |
|||
file: |
|||
path: ~/{{ item}} |
|||
state: directory |
|||
loop: "{{ ncdirs }}" |
|||
|
|||
|
@ -0,0 +1,24 @@ |
|||
- name: Clone docker-compose repository |
|||
ansible.builtin.git: |
|||
repo: "{{ dockerrepo }}" |
|||
dest: "{{ dockerdir }}" |
|||
version: master |
|||
|
|||
- name: Permission für Docker |
|||
become: true |
|||
file: path=/var/run/docker.sock mode=0660 |
|||
# mode: 660 |
|||
|
|||
- name: adding user pi to docker group |
|||
become: true |
|||
user: |
|||
name: pi |
|||
groups: docker,video |
|||
|
|||
|
|||
- name: Run docker-compose up |
|||
community.docker.docker_compose: |
|||
project_src: '{{dockerdir }}/compose/nextcloud' |
|||
state: present |
|||
become: true |
|||
|
@ -0,0 +1,13 @@ |
|||
- name: PI Update |
|||
become: true |
|||
apt: |
|||
update_cache: yes |
|||
upgrade: dist |
|||
- name: Pakete installieren |
|||
become: true |
|||
ansible.builtin.apt: |
|||
name: "{{ packages }}" |
|||
state: present |
|||
update_cache: yes |
|||
cache_valid_time: 86400 |
|||
|
@ -0,0 +1,12 @@ |
|||
- include_vars: "roles/initnextcloud/vars/dirs.yml" |
|||
- include_vars: "roles/initnextcloud/vars/partuuid.yml" |
|||
- include_vars: "roles/initnextcloud/vars/pckg.yml" |
|||
- include_tasks: ../subtasks/upgrade.yml |
|||
- import_tasks: install.yml |
|||
- import_tasks: mount.yml |
|||
- import_tasks: dirs.yml |
|||
- import_tasks: docker.yml |
|||
- import_tasks: optional.yml |
|||
|
|||
|
|||
|
@ -0,0 +1,16 @@ |
|||
- name: Add Nextcloud mount to fstab |
|||
become: true |
|||
ansible.builtin.blockinfile: |
|||
path: /etc/fstab |
|||
marker: "# {mark} ANSIBLE MANAGED BLOCK nextcloud" |
|||
block: | |
|||
PARTUUID={{ partuuid }} /mnt/nextcloud ext4 defaults,fail 0 1 |
|||
|
|||
- name: Mount /mnt/nextcloud |
|||
become: true |
|||
ansible.posix.mount: |
|||
path: /mnt/nextcloud |
|||
state: mounted |
|||
fstype: ext4 |
|||
src: PARTUUID={{ partuuid }} |
|||
|
@ -0,0 +1,13 @@ |
|||
- name: copy scripts |
|||
copy: |
|||
src: "{{ item }}" |
|||
dest: /home/pi/bin |
|||
mode: '0755' |
|||
loop: "{{ query('fileglob', 'files/scripts/*') }}" |
|||
|
|||
- name: copy resources to ~ |
|||
copy: |
|||
src: "{{ item }}" |
|||
dest: /home/pi |
|||
loop: "{{ query('fileglob', 'resources/*') }}" |
|||
|
@ -0,0 +1,21 @@ |
|||
dockerrepo: "https://git.olli-cloud.de/olli/dockercmd" |
|||
dockerdir: "/home/pi/git/dockercmd" |
|||
|
|||
volumedirs: |
|||
- /mnt/nextcloud |
|||
- /opt/clamav |
|||
- /opt/grafana |
|||
- /opt/influxdb |
|||
|
|||
homedirs: |
|||
- bin |
|||
- git |
|||
|
|||
ncdirs: |
|||
- /mnt/nextcloud/nextcloud/apps |
|||
- /mnt/nextcloud/nextcloud/html |
|||
- /mnt/nextcloud/nextcloud//data |
|||
- /mnt/nextcloud/nextcloud/config |
|||
|
|||
|
|||
|
@ -0,0 +1 @@ |
|||
partuuid: "011ad286-01" |
@ -0,0 +1,15 @@ |
|||
packages: |
|||
- python3-docker |
|||
- neofetch |
|||
- htop |
|||
- cowsay |
|||
- docker.io |
|||
- docker-compose |
|||
- git |
|||
- locate |
|||
- dnsutils |
|||
- nfs-kernel-server |
|||
- vim |
|||
- lsof |
|||
- ripgrep |
|||
|
Loading…
Reference in new issue