diff --git a/doc/ariane.md b/doc/ariane.md
index 5122536..e10404c 100644
--- a/doc/ariane.md
+++ b/doc/ariane.md
@@ -6,6 +6,39 @@
|**H2**|01 /dev/sdb `6TB`
`WD-WX21D36PPLPH`|05 |09 |13 |
|**H3**|02 /dev/sdc `6TB`
`WD-WX21D36PP0K1`|06 |10 |14 |
|**H4**|03 /dev/sdd `6TB`
`WD-WXB1HB4MJCMM`|07 |11 |15 |
+## Debian setup install steps
+```
+Boot Image Debian Netinstall on USB stick, Advanced Options->Expert Install
+Language: English, Location: other->Europe->Austria
+Locale: en_US.UTF-8, Additional Locale: de_AT.UTF-8, System Locale: en_US.UTF-8
+Keyboard: German
+Detect and mount CD-ROM, Load installer components: no extra
+auf KISTL statische IP 192.168.86.7/24 für ariane.fet.htu.tuwien.ac.at einrichten
+Detect network hardware, Configure Network: enp8s0: Hostname: ariane, IP 192.168.86.7/24 domain fet.htu.tuwien.ac.at
+Setup Users and Passwords: shadow, user petra
+Configure the clock: NTP Server: tutimea.tuwien.ac.at
+Detect disks, partition disks: manual
+RAID1 md0 with both SSDs https://blog.sleeplessbeastie.eu/2013/10/04/how-to-configure-software-raid1-during-installation-process/
+/dev/nvmeXn1p1 32GB primary Volume für / in btrfs 32GB
+/dev/nvmeXn1p5 1.5 GB logical Volume
+/dev/nvmeXn1p6 1.5 GB logical Volume
+/dev/nvmeXn1p7 1.5 GB logical Volume
+/dev/nvmeXn1p8 1.5 GB logical Volume
+/dev/nvmeXn1p9 90 GB logical Volume
+ZFS RAIDZ-2 on is already on 4 x 6TB disks = 12TB 0 spares
+partition1 ariane-root btrfs noatime, discard
+Generic Kernel
+Mirror: gd.tuwien.ac.at, allow backported
+install with ssh server and standard sys utilities
+Install Grub on /dev/nvme0n1 (to removable media path)
+Install Grub on /dev/nvme1n1
+reboot, log in as root
+edit /etc/ssh/sshd_config set PermitRootlogin to yes
+service sshd reload
+ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
+ssh-copy-id root@ariane from client
+edit /etc/ssh/sshd_config set PermitRootlogin to Prohibit-Password
+```
## Install ZFS
```shell
apt-get install zfsutils-linux
@@ -67,10 +100,14 @@ mv /var/log/* /ssd/var/log/
zfs set mountpoint=/var/log ssd/var/log
mv /var/lib/lxc/* /ssd/var/lxc/
zfs set mountpoint=/var/lib/lxc ssd/var/lxc
+zfs create -o com.sun:auto-snapshot=false zv1/sojus
+zfs create -o com.sun:auto-snapshot=false zv1/daten/Scans
```
### Set dataset quota
```shell
zfs set quota=1T zv1/homes zv1/daten zv1/fotos
+zfs set quota=3T zv1/sojus
+zfs set quota=5G zv1/daten/Scans
```
### If intend using ACL someday
```shell
@@ -129,3 +166,9 @@ mdadm --misc --detail /dev/md0
echo check > /sys/block/md0/md/sync_action
watch -n 0.1 cat /proc/mdstat
```
+## Shutdown System
+```shell
+# stop all LXC containers
+zfs_mount.sh unmount
+halt -p
+```
diff --git a/doc/configs/ariane_mbr_nvme0n1.txt b/doc/configs/ariane_mbr_nvme0n1.txt
new file mode 100644
index 0000000..79a26ce
--- /dev/null
+++ b/doc/configs/ariane_mbr_nvme0n1.txt
@@ -0,0 +1,15 @@
+Disk /dev/nvme0n1: 119.2 GiB, 128035676160 bytes, 250069680 sectors
+Units: sectors of 1 * 512 = 512 bytes
+Sector size (logical/physical): 512 bytes / 512 bytes
+I/O size (minimum/optimal): 512 bytes / 512 bytes
+Disklabel type: dos
+Disk identifier: 0x21183a98
+
+Device Boot Start End Sectors Size Id Type
+/dev/nvme0n1p1 2048 62500863 62498816 29.8G fd Linux raid autodetect
+/dev/nvme0n1p2 62502910 250068991 187566082 89.4G 5 Extended
+/dev/nvme0n1p5 62504960 65435647 2930688 1.4G 83 Linux
+/dev/nvme0n1p6 65437696 68368383 2930688 1.4G 83 Linux
+/dev/nvme0n1p7 68370432 71301119 2930688 1.4G 83 Linux
+/dev/nvme0n1p8 71303168 74233855 2930688 1.4G 83 Linux
+/dev/nvme0n1p9 74235904 250068991 175833088 83.9G 83 Linux
diff --git a/doc/configs/ariane_mbr_nvme1n1.txt b/doc/configs/ariane_mbr_nvme1n1.txt
new file mode 100644
index 0000000..20baf97
--- /dev/null
+++ b/doc/configs/ariane_mbr_nvme1n1.txt
@@ -0,0 +1,16 @@
+Disk /dev/nvme1n1: 119.2 GiB, 128035676160 bytes, 250069680 sectors
+Units: sectors of 1 * 512 = 512 bytes
+Sector size (logical/physical): 512 bytes / 512 bytes
+I/O size (minimum/optimal): 512 bytes / 512 bytes
+Disklabel type: dos
+Disk identifier: 0x35c808a6
+
+Device Boot Start End Sectors Size Id Type
+/dev/nvme1n1p1 2048 62500863 62498816 29.8G fd Linux raid autodetect
+/dev/nvme1n1p2 62502910 250068991 187566082 89.4G 5 Extended
+/dev/nvme1n1p5 62504960 65435647 2930688 1.4G 83 Linux
+/dev/nvme1n1p6 65437696 68368383 2930688 1.4G 83 Linux
+/dev/nvme1n1p7 68370432 71301119 2930688 1.4G 83 Linux
+/dev/nvme1n1p8 71303168 74233855 2930688 1.4G 83 Linux
+/dev/nvme1n1p9 74235904 250068991 175833088 83.9G 83 Linux
+
diff --git a/doc/configs/ariane_mbr_zv1.txt b/doc/configs/ariane_mbr_zv1.txt
new file mode 100644
index 0000000..33569f9
--- /dev/null
+++ b/doc/configs/ariane_mbr_zv1.txt
@@ -0,0 +1,9 @@
+Disk /dev/sdc: 5.5 TiB, 6001175126016 bytes, 11721045168 sectors
+Units: sectors of 1 * 512 = 512 bytes
+Sector size (logical/physical): 512 bytes / 4096 bytes
+I/O size (minimum/optimal): 4096 bytes / 4096 bytes
+Disklabel type: gpt
+Disk identifier: D2B76C08-E0D8-42AC-A0D5-F3A14EA584DF
+
+Device Start End Sectors Size Type
+/dev/sdc1 2048 11721045134 11721043087 5.5T Solaris /usr & Apple ZFS
diff --git a/doc/configs/kistl-pfSense-backup.xml b/doc/configs/kistl-pfSense-backup.xml
new file mode 100644
index 0000000..4ce2284
--- /dev/null
+++ b/doc/configs/kistl-pfSense-backup.xml
@@ -0,0 +1,1394 @@
+
+
+ 11.7
+
+ metallic
+
+ -
+ debug.pfftpproxy
+ 1
+
+
+ -
+
+ vfs.read_max
+ default
+
+ -
+
+ net.inet.ip.portrange.first
+ default
+
+ -
+
+ net.inet.tcp.blackhole
+ default
+
+ -
+
+ net.inet.udp.blackhole
+ default
+
+ -
+
+ net.inet.ip.random_id
+ default
+
+ -
+
+ net.inet.tcp.drop_synfin
+ default
+
+ -
+
+ net.inet.ip.redirect
+ default
+
+ -
+
+ net.inet6.ip6.redirect
+ default
+
+ -
+
+ net.inet.tcp.syncookies
+ default
+
+ -
+
+ net.inet.tcp.recvspace
+ default
+
+ -
+
+ net.inet.tcp.sendspace
+ default
+
+ -
+
+ net.inet.ip.fastforwarding
+ default
+
+ -
+
+ net.inet.tcp.delayed_ack
+ default
+
+ -
+
+ net.inet.udp.maxdgram
+ default
+
+ -
+
+ net.link.bridge.pfil_onlyip
+ default
+
+ -
+
+ net.link.bridge.pfil_member
+ default
+
+ -
+
+ net.link.bridge.pfil_bridge
+ default
+
+ -
+
+ net.link.tap.user_open
+ default
+
+ -
+
+ kern.randompid
+ default
+
+ -
+
+ net.inet.ip.intr_queue_maxlen
+ default
+
+ -
+
+ hw.syscons.kbd_reboot
+ default
+
+ -
+
+ net.inet.tcp.inflight.enable
+ default
+
+ -
+
+ net.inet.tcp.log_debug
+ default
+
+ -
+
+ net.inet.icmp.icmplim
+ default
+
+ -
+
+ net.inet.tcp.tso
+ default
+
+ -
+
+ kern.ipc.maxsockbuf
+ default
+
+
+
+ normal
+ kistl
+ fet.htu.tuwien.ac.at
+
+ all
+
+ system
+ 1998
+
+
+ admins
+
+ system
+ 1999
+ 0
+ 2000
+ page-all
+
+
+ admin
+
+ system
+ admins
+ $1$i/nede5l$nk7jGz.SDcZy6qZrGlvkr/
+ 0
+ user-shell-access
+ 709413c5a7adc43b91f90ece7f6b7915
+ ffe4b7bdc7724aa5f2eacfde176c38b5
+
+
+
+
+
+ user
+ $1$K..ec31W$knkqCaSwhAIqtCGErMxLf.
+ 8fa8fc542b8c5267d46eae228073243c
+ 9c825dfb2764d7beb731ef17334c7ff2
+ bajo
+
+
+
+
+ 2000
+
+ 2001
+ 2000
+ Europe/Vienna
+
+ tutimea.tuwien.ac.at
+
+ https
+ 4f031b5823c78
+
+
+ yes
+
+
+ none
+ none
+ none
+ none
+
+
+
+ wan
+
+ en_US
+ none
+ none
+ none
+ none
+ 128.130.4.3
+ 128.131.4.3
+
+
+
+
+
+ rl0
+ 128.131.95.200
+ 24
+ WANGW
+ on
+ on
+
+
+
+
+
+
+ bge0
+ 192.168.86.1
+ 24
+
+
+
+
+
+
+
+ 192.168.95.0/24
+ miruk
+
+
+
+ 192.168.96.0/24
+ Ariane
+
+
+
+ 10.0.3.0/24
+ Ariane
+
+
+
+
+
+
+
+ 192.168.86.50
+ 192.168.86.191
+
+
+ 00:10:18:2d:b0:c0
+
+ 192.168.86.2
+ atlas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1c:bd:b9:7f:fe:a4
+
+ 192.168.86.3
+ laika
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ a0:f3:c1:5e:c4:98
+
+ 192.168.86.4
+ wlan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 52:54:00:87:be:61
+
+ 192.168.86.5
+ backup
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00:02:44:7c:b2:1c
+
+ 192.168.86.6
+ sputnik
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 38:d5:47:01:7a:63
+ ariane
+ 192.168.86.7
+ ariane
+
+
+
+
+
+
+ fet.htu.tuwien.ac.at
+
+
+
+
+
+
+
+
+
+ 3c:4a:92:43:d3:f3
+
+ 192.168.86.8
+ hp3015
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00:00:48:d1:06:b9
+
+ 192.168.86.9
+ AL-C9100-D106B9
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 20:cf:30:67:09:28
+
+ 192.168.86.10
+ energija
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00:09:3d:10:c4:aa
+
+ 192.168.86.11
+ kusnezow
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ee:ee:ee:ee:ee:ef
+
+ 192.168.86.12
+ webup
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 52:54:00:2b:a0:5e
+
+ 192.168.86.13
+ scm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00:21:b7:99:4c:60
+
+ 192.168.86.14
+ dell3465
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ b8:27:eb:d5:7c:12
+
+ 192.168.86.15
+ malina-hs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ b8:27:eb:4e:c6:8f
+
+ 192.168.86.16
+ malina-retro
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00:a0:de:a4:ac:9a
+
+ 192.168.86.17
+ fet-av
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 52:54:00:5c:b0:fd
+
+ 192.168.86.18
+ gagarin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ e0:69:95:57:b2:f7
+
+ 192.168.86.20
+ proton
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ e0:69:95:57:b6:08
+
+ 192.168.86.21
+ suchoi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 10:c3:7b:9f:32:b1
+
+ 192.168.86.22
+ potemkin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 90:2b:34:c8:72:ab
+
+ 192.168.86.23
+ lunik
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 52:54:00:c6:91:2d
+
+ 192.168.86.30
+ ruby
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 52:54:00:2f:ea:01
+
+ 192.168.86.31
+ zabbix
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 52:54:00:b1:03:4f
+ Fachschaften
+ 192.168.86.32
+ fachschaften
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 52:54:00:3b:a6:19
+ bufata
+ 192.168.86.33
+ bufata
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 52:54:00:40:50:dc
+
+ 192.168.86.34
+ cloud
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 52:54:00:d6:73:74
+
+ 192.168.86.35
+ mars
+
+
+
+
+
+
+ fet.htu.tuwien.ac.at
+
+
+
+
+
+
+
+
+
+ 52:54:00:ca:e4:4b
+
+ 192.168.86.36
+ miruk
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00:1a:4d:4b:dd:92
+
+ 192.168.86.42
+ absturz
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ b8:27:eb:da:0b:43
+
+ 192.168.86.43
+ baroness
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2e:6d:b6:07:14:01
+
+ 192.168.86.44
+ betam
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2e:6d:b6:07:15:01
+
+ 192.168.86.45
+ zyklon
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2e:6d:b6:07:16:01
+
+ 192.168.86.46
+ proteus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ee:ee:ee:ee:ee:ee
+
+ 192.168.86.47
+ sojus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ fet.htu.tuwien.ac.at
+
+
+
+
+ pxelinux.0
+
+
+
+ 192.168.86.134
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ address=/baroness.fet.at/192.168.86.43
+address=/baroness.local/192.168.86.43
+address=/triton.local/192.168.86.36
+address=/ldap.fet.at/192.168.86.18
+
+ backup
+ fet.htu.tuwien.ac.at
+ 192.168.86.12
+
+
+
+ gagarin
+ fet.htu.tuwien.ac.at
+ 192.168.86.18
+
+
+
+
+ laika
+ fet.htu.tuwien.ac.at
+ 192.168.86.3
+
+
+
+
+ laika2
+ fet.htu.tuwien.ac.at
+ 192.168.86.3
+
+
+
+
+
+
+
+
+ public
+
+
+
+
+
+
+
+
+
+ 50
+
+
+
+ automatic
+
+
+
+
+ pass
+
+ lan
+
+ lan
+
+
+
+
+ 1430676699
+
+
+ pass
+ lan
+ inet
+
+ icmp
+ echoreq
+
+ 128.131.95.208
+
+
+ 192.168.5.16
+
+
+
+ Easy Rule
+
+
+
+
+
+
+
+
+
+
+ -
+ 1,31
+ 0-5
+ *
+ *
+ *
+ root
+ /usr/bin/nice -n20 adjkerntz -a
+
+ -
+ 1
+ 3
+ 1
+ *
+ *
+ root
+ /usr/bin/nice -n20 /etc/rc.update_bogons.sh
+
+ -
+ */60
+ *
+ *
+ *
+ *
+ root
+ /usr/bin/nice -n20 /usr/local/sbin/expiretable -v -t 3600 sshlockout
+
+ -
+ 1
+ 1
+ *
+ *
+ *
+ root
+ /usr/bin/nice -n20 /etc/rc.dyndns.update
+
+ -
+ */60
+ *
+ *
+ *
+ *
+ root
+ /usr/bin/nice -n20 /usr/local/sbin/expiretable -v -t 3600 virusprot
+
+ -
+ 30
+ 12
+ *
+ *
+ *
+ root
+ /usr/bin/nice -n20 /etc/rc.update_urltables
+
+ -
+ */60
+ *
+ *
+ *
+ *
+ root
+ /usr/bin/nice -n20 /usr/local/sbin/expiretable -v -t 3600 webConfiguratorlockout
+
+
+
+
+
+
+
+
+ ICMP
+ icmp
+
+
+
+
+ TCP
+ tcp
+
+
+
+
+ HTTP
+ http
+
+
+ /
+
+ 200
+
+
+
+ HTTPS
+ https
+
+
+ /
+
+ 200
+
+
+
+ SMTP
+ send
+
+
+
+ 220 *
+
+
+
+
+ system_information-container:col1:show,captive_portal_status-container:col1:close,carp_status-container:col1:close,cpu_graphs-container:col1:close,gateways-container:col1:close,gmirror_status-container:col1:close,installed_packages-container:col1:close,interface_statistics-container:col1:close,interfaces-container:col2:show,ipsec-container:col2:close,load_balancer_status-container:col2:close,log-container:col2:close,picture-container:col2:close,rss-container:col2:close,services_status-container:col2:close,traffic_graphs-container:col2:close
+
+
+
+
+ admin@192.168.86.134
+
+
+
+
+
+
+
+ 4f031b5823c78
+
+ LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVLRENDQTVHZ0F3SUJBZ0lKQUpmT3gyeFlmOVFDTUEwR0NTcUdTSWIzRFFFQkJRVUFNSUcvTVFzd0NRWUQKVlFRR0V3SlZVekVTTUJBR0ExVUVDQk1KVTI5dFpYZG9aWEpsTVJFd0R3WURWUVFIRXdoVGIyMWxZMmwwZVRFVQpNQklHQTFVRUNoTUxRMjl0Y0dGdWVVNWhiV1V4THpBdEJnTlZCQXNUSms5eVoyRnVhWHBoZEdsdmJtRnNJRlZ1CmFYUWdUbUZ0WlNBb1pXY3NJSE5sWTNScGIyNHBNU1F3SWdZRFZRUURFeHREYjIxdGIyNGdUbUZ0WlNBb1pXY3MKSUZsUFZWSWdibUZ0WlNreEhEQWFCZ2txaGtpRzl3MEJDUUVXRFVWdFlXbHNJRUZrWkhKbGMzTXdIaGNOTVRJdwpNVEF6TVRVeE5ETXlXaGNOTVRjd05qSTFNVFV4TkRNeVdqQ0J2ekVMTUFrR0ExVUVCaE1DVlZNeEVqQVFCZ05WCkJBZ1RDVk52YldWM2FHVnlaVEVSTUE4R0ExVUVCeE1JVTI5dFpXTnBkSGt4RkRBU0JnTlZCQW9UQzBOdmJYQmgKYm5sT1lXMWxNUzh3TFFZRFZRUUxFeVpQY21kaGJtbDZZWFJwYjI1aGJDQlZibWwwSUU1aGJXVWdLR1ZuTENCegpaV04wYVc5dUtURWtNQ0lHQTFVRUF4TWJRMjl0Ylc5dUlFNWhiV1VnS0dWbkxDQlpUMVZTSUc1aGJXVXBNUnd3CkdnWUpLb1pJaHZjTkFRa0JGZzFGYldGcGJDQkJaR1J5WlhOek1JR2ZNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0R04KQURDQmlRS0JnUURYd295VTAxd1pTQmNJcUV0YytjS0pTY0FSb21kL1RIQ2lzdTdGdTNvOVMvK1JhamJRWUROagpUQVJUa3FLd3dqMXBMajhzSTNlVFhoNk9oZlVDdk85YjlGZHZQL0ZHa3RYdW5VUGsvODM2c2RaMDdZeU16bll0CmM2TWJDY2lNK2RYek52K0ozRWJIdnVMMkd1TkRhU3BSUThMUVh4TTlXby8wK1hGc1VvcEZld0lEQVFBQm80SUIKS0RDQ0FTUXdIUVlEVlIwT0JCWUVGTFAxR0ZuU1NWY0lVbHdnbktJYmhJWjZ0ZG5tTUlIMEJnTlZIU01FZ2V3dwpnZW1BRkxQMUdGblNTVmNJVWx3Z25LSWJoSVo2dGRubW9ZSEZwSUhDTUlHL01Rc3dDUVlEVlFRR0V3SlZVekVTCk1CQUdBMVVFQ0JNSlUyOXRaWGRvWlhKbE1SRXdEd1lEVlFRSEV3aFRiMjFsWTJsMGVURVVNQklHQTFVRUNoTUwKUTI5dGNHRnVlVTVoYldVeEx6QXRCZ05WQkFzVEprOXlaMkZ1YVhwaGRHbHZibUZzSUZWdWFYUWdUbUZ0WlNBbwpaV2NzSUhObFkzUnBiMjRwTVNRd0lnWURWUVFERXh0RGIyMXRiMjRnVG1GdFpTQW9aV2NzSUZsUFZWSWdibUZ0ClpTa3hIREFhQmdrcWhraUc5dzBCQ1FFV0RVVnRZV2xzSUVGa1pISmxjM09DQ1FDWHpzZHNXSC9VQWpBTUJnTlYKSFJNRUJUQURBUUgvTUEwR0NTcUdTSWIzRFFFQkJRVUFBNEdCQU1zeDM4M1dYdVRUU01WU3pnUWZmMjV1NWdVSwpGUkZIa2VibldBdzNXOFl4T21hS1dXNVF0T0h2b0IrL1IvdTcrdkhqZGVPZWgvVXZxUEtjZmpWbmNKSjlPWmdPCjVKMnVGU0NHd1BJZHNuUlUxQkJOQWVWVlorVmU3SnVORVJEQkdnSCswOTRwY1U3VU5LYi96cng5RFNWQXJXV3kKZWlaazZtS3krbXlZUHVkMQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
+ R2VuZXJhdGluZyBSU0EgcHJpdmF0ZSBrZXksIDEwMjQgYml0IGxvbmcgbW9kdWx1cwouLi4uLi4uLi4uLi4uLi4uKysrKysrCi4uLi4uLi4uLi4uLi4uLi4rKysrKysKdW5hYmxlIHRvIHdyaXRlICdyYW5kb20gc3RhdGUnCmUgaXMgNjU1MzcgKDB4MTAwMDEpCi0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KTUlJQ1hRSUJBQUtCZ1FEWHdveVUwMXdaU0JjSXFFdGMrY0tKU2NBUm9tZC9USENpc3U3RnUzbzlTLytSYWpiUQpZRE5qVEFSVGtxS3d3ajFwTGo4c0kzZVRYaDZPaGZVQ3ZPOWI5RmR2UC9GR2t0WHVuVVBrLzgzNnNkWjA3WXlNCnpuWXRjNk1iQ2NpTStkWHpOditKM0ViSHZ1TDJHdU5EYVNwUlE4TFFYeE05V28vMCtYRnNVb3BGZXdJREFRQUIKQW9HQUorcnhrWE5OUGN3dG5zZHNNZ1p2YkhEOW5RV2IrbHhORm56ZVdpem1YOExZeExHTzlKeG54WDVCNnFoZAplekJrcGpvTkxBQmYxaDc2cmttd1c5SlN3aXhraWFTREhGNG1UcEp1Sy9scjgvNGhTeWFDSEtIbHB4akZORDNGCkIyVG5rS3BwSFhwK3BtSGlhZ1RBMk42NmRVRzNVd2tGRDh5dzc4TFhNOWZlM2tFQ1FRRDVQaThEbDJGdmJvenIKN1RXZnQraFJwQVpuRm1MNnY1d0lCRnF2UDE0a3FzUjdBRTlyUC90Y2VoalFRQjYyK3A1MkQ0VW9qdFNET1hocwo4VGgxYUpnaEFrRUEzWnY3L3dXYzUyS2pFTHYvN25uK0picGFtUzhDSE0wK2RQZU4yZGdQSkpPNVhZKzFxdVZMClE4SGNCVzR0Z21EdmFwcFh6M1h0OTJTLzU4RHhaYkw2R3dKQUFkUk1BZ205WkZUNlljem01Tm96c1UyejRsUE8KdkNwbDJjVTJhU3pjNHdZQjFTbEdhL0lYUlRGOE55TVJWcVIyUDBXVDQ1MVF2L25QQVhXdnhXVFVJUUpCQU5FVgpuNTlRSTJhb1NLTzhUTThxcUYvZVFDWnhGTFFwN1hpY0xHalJrZy8zbEpleXhEdFdGVG43aU9SU3ZIdGJpK2Z2CmNWUGF0MGVIOWd2cG5aaFBVZXNDUVFEUndOVERZVnFhalhCUWsvc2xINml3QWkyVW4vM3Awc0I0dnFsQTB3MDkKcERSQm5tMUZJazBqeUQ1L2pDYVoyQXIxOHhwTHBvNHkwZjhEeEQ4VStmRWsKLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K
+
+
+
+
+ wan
+ 128.131.95.1
+ WANGW
+ 1
+
+
+ inet
+
+
+ lan
+ 192.168.86.35
+ mars
+ 1
+ inet
+
+
+
+
+
+
+
+ lan
+ 192.168.86.36
+ miruk
+ 1
+ inet
+
+
+
+
+
+
+
+ lan
+ 192.168.86.7
+ Ariane
+ 1
+ inet
+
+
+
+
+
+
+
+
+
+ iperf
+ http://dast.nlanr.net/Projects/Iperf/
+
+ Network Management
+ https://packages.pfsense.org/packages/config/iperf/iperf.xml
+ iperf-2.0.5-i386.pbi
+ 2.0.5_1
+ Beta
+ https://doc.pfsense.org/index.php/Iperf_package
+ 2.2
+ iperf.xml
+ benchmarks
+ bin/iperf:benchmarks/iperf
+
+ benchmarks/iperf
+
+ https://files.pfsense.org/packages/10/All/
+
+
+ ntop
+ http://www.ntop.org/
+
+ Network Management
+ ntop-5.0.1_4-i386.pbi
+
+ databases/gdbm net/GeoIP x11-fonts/font-util x11-fonts/webfonts graphics/graphviz
+ net/ntop
+
+ ntop_SET_FORCE=PCAP_PORT XMLDUMP MAKO;ntop_UNSET_FORCE=JUMBO_FRAMES;rrdtool_UNSET_FORCE=DEJAVU PERL_MODULE PYTHON_MODULE RUBY_MODULE;rrdtool_SET_FORCE=JSON MMAP NLS;graphviz_UNSET_FORCE=XPM DIGCOLA IPSEPCOLA PANGOCAIRO;graphviz_SET_FORCE=ICONV NLS;cairo_UNSET_FORCE=X11 XCB;libgd_UNSET_FORCE=FONTCONFIG XPM;libgd_SET_FORCE=ICONV;libpcap_UNSET_FORCE=DAG;libpcap_SET_FORCE=IPV6
+ 5.0.1_4 v2.3
+ BETA
+ 2.2
+ https://packages.pfsense.org/packages/config/ntop2/ntop.xml
+ ntop.xml
+ true
+ 2.2.999
+ https://files.pfsense.org/packages/10/All/
+
+
+
+
+
+
+ zabbix_agentd
+ zabbix_agentd.sh
+ zabbix_agentd
+
+
+
+ iperf
+ iperf
+
+
+
+ ntop
+ ntop.sh
+ ntop
+
+
+
+
+ <__csrf_magic>sid:31efc492c9e3e76d276671a946cd2689b38939d7,1412273730
+ All packages
+ reinstallall
+ Confirm
+ admin
+
+
+
+
+ zabbix.fet.htu.tuwien.ac.at
+ 10051
+ kistl.fet.htu.tuwien.ac.at
+ 0.0.0.0
+ 10050
+ 120
+ 3
+
+
+
+
+
+
+ ntop Settings
+ /pkg_edit.php?xml=ntop.xml&id=0
+
+
+
+
+
+
+
+
+
+ www.fet.at
+ 192.168.86.30
+
+
+
+
diff --git a/doc/configs/miruk-pfSense-backup.xml b/doc/configs/miruk-pfSense-backup.xml
new file mode 100644
index 0000000..30cc9a0
--- /dev/null
+++ b/doc/configs/miruk-pfSense-backup.xml
@@ -0,0 +1,1268 @@
+
+
+ 15.8
+
+
+ normal
+ miruk
+ fet.htu.tuwien.ac.at
+
+ all
+
+ system
+ 1998
+ 0
+
+
+ admins
+
+ system
+ 1999
+ 0
+ page-all
+
+
+ admin
+
+ system
+ admins
+ $2b$10$S52zNMrTbsfoLVYT3Tk/zOt/EG2IKr6DUyOMzh7ojE8PL.kxdnrqu
+ 0
+ user-shell-access
+
+ 2000
+ 2000
+ 0.pfsense.pool.ntp.org
+
+ https
+
+ 58e6957796d5e
+ 2
+ 4444
+ 2
+ pfSense.css
+
+
+
+
+
+
+ hadp
+ hadp
+ hadp
+
+ monthly
+
+ Europe/Vienna
+ 115200
+ serial
+
+ 222
+
+ en_US
+ none
+
+
+
+
+ yes
+ yes
+
+ 192.168.86.1
+ 192.168.95.1
+
+ none
+
+ enabled
+
+
+
+
+ re0
+ dhcp
+ dhcp6
+
+
+
+
+ 0
+
+
+
+ vtnet0
+
+ 192.168.95.1
+ 24
+
+
+
+
+ re1
+
+
+ 32
+ 52:54:00:32:e7:18
+ 128.131.95.208
+ 32
+ WAN_TUGW
+
+
+
+ re2
+
+ 128.130.95.208
+ 19
+ WLAN_TU2GW2
+
+
+
+
+
+
+ 192.168.95.70
+ 192.168.95.170
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 52:54:00:0c:d9:ba
+
+ 192.168.95.2
+ maria-storage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 52:54:00:a9:cf:27
+
+ 192.168.95.10
+ triton
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 52:54:00:c9:94:71
+
+ 192.168.95.11
+ fetruby
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 52:54:00:7f:d4:7a
+
+ 192.168.95.12
+ fetwiki
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 52:54:00:ee:e0:3f
+
+ 192.168.95.14
+ triton-amp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 52:54:00:6d:5e:3b
+
+ 192.168.95.16
+ mogok
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 52:54:00:04:ce:3b
+
+ 192.168.95.21
+ fachschaften
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 52:54:00:40:50:dc
+
+ 192.168.95.22
+ cloud
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ public
+
+
+
+
+
+
+ 60
+
+ ipv4
+
+
+
+
+
+ 1491562113
+ pass
+ wan
+ inet
+
+
+
+
+
+
+
+ keep state
+
+ tcp
+
+ 192.168.86.6
+
+
+ wanip
+ 222
+
+
+
+
+
+ admin@192.168.86.6
+
+
+
+ admin@192.168.86.6
+
+
+
+
+ 1491561492
+ pass
+ wan
+ inet
+
+
+
+
+
+
+
+ keep state
+
+ tcp
+
+
+
+
+ wanip
+ 4444
+
+
+ WAN_DHCP
+
+
+ admin@192.168.86.6
+
+
+
+ admin@192.168.86.6
+
+
+
+
+ 1491902925
+ pass
+ wan
+ inet
+
+
+
+
+
+
+
+ keep state
+
+ tcp
+
+ lan
+
+
+
+ triton
+ web
+
+
+ nat_58eca1cd607012.85095132
+
+
+ NAT Port Forward
+
+
+
+ admin@192.168.86.6
+
+
+
+
+
+ 1491752134
+ pass
+ wan
+ inet
+
+
+
+
+
+
+
+ keep state
+
+ icmp
+ echoreq
+
+ 192.168.86.1
+
+
+ wanip
+
+
+
+
+ Easy Rule
+
+
+
+ admin@192.168.86.6
+
+
+
+
+ 1497948726
+ pass
+ wan
+ inet
+
+
+
+
+
+
+
+ keep state
+
+ tcp
+
+ 192.168.86.6
+
+
+ lan
+ 22
+
+
+
+
+ admin@192.168.86.6
+
+
+
+ admin@192.168.86.6
+
+
+
+
+ 1498656295
+ pass
+ wan
+ inet
+
+
+
+
+
+
+
+ keep state
+
+ tcp
+
+ 192.168.86.5
+
+
+ lan
+ 22
+
+
+
+
+ admin@192.168.86.121
+
+
+
+ admin@192.168.86.121
+
+
+
+
+ 1498122209
+ pass
+ wan
+ inet
+
+
+
+
+
+
+
+ keep state
+
+ icmp
+ any
+
+ 192.168.86.6
+
+
+ lan
+
+
+
+
+ admin@192.168.86.6
+
+
+
+ admin@192.168.86.6
+
+
+
+
+ 1498129426
+ pass
+ wan
+ inet
+
+
+
+
+
+
+
+ keep state
+
+ tcp
+
+ 192.168.86.18
+
+
+
+
+
+
+
+ admin@192.168.86.6
+
+
+
+ admin@192.168.86.23
+
+
+
+ pass
+ inet
+
+ lan
+ 0100000101
+
+ lan
+
+
+
+
+
+
+ pass
+ inet6
+
+ lan
+ 0100000102
+
+ lan
+
+
+
+
+
+
+
+ 1500808129
+ pass
+ lan
+ inet
+
+
+
+
+
+
+
+ keep state
+
+ tcp
+
+ lan
+
+
+ wan
+
+
+
+
+ admin@192.168.86.6
+
+
+
+ admin@192.168.86.6
+
+
+
+
+ lan
+
+
+ opt1
+ tcp
+
+ triton
+ web
+
+
+ nat_5908d2244a91e7.30605837
+ 1493750308
+
+
+ NAT Port Forward
+
+
+
+
+ lan
+
+
+ opt1
+ tcp
+
+ triton
+ web
+
+
+ nat_59458f70519734.91879734
+ 1497730928
+
+
+ NAT Port Forward
+
+
+
+
+ lan
+
+
+ opt1
+ tcp
+
+ triton
+ web
+
+
+ nat_594a4d4dc6b478.76146266
+ 1498041677
+
+
+ NAT Port Forward
+
+
+
+
+ 1497817929
+ pass
+ opt1
+ inet
+
+
+
+
+
+
+
+ keep state
+
+ icmp
+ any
+
+
+
+
+ 128.131.95.208
+
+
+
+
+ Easy Rule
+
+
+
+ admin@192.168.86.6
+
+
+
+
+ 1497942865
+ pass
+ opt1
+ inet
+
+
+
+
+
+
+
+ keep state
+
+ icmp
+ any
+
+ 128.131.95.206
+
+
+ 128.131.95.212
+
+
+
+
+ Easy Rule
+
+
+
+ admin@192.168.86.6
+
+
+
+
+ 1498030651
+ pass
+ opt2
+ inet
+
+
+
+
+
+
+
+ keep state
+
+ icmp
+ any
+
+
+
+
+ 128.130.95.208
+
+
+
+
+ admin@192.168.86.6
+
+
+
+ admin@192.168.86.6
+
+
+
+
+ lan
+
+
+ opt2
+ tcp
+
+ triton
+ web
+
+
+ nat_594a2222a1b396.11166902
+ 1498030626
+
+
+ NAT Port Forward
+
+
+
+
+
+
+
+
+
+
+
+
+ fetalt
+ host
+ 192.168.95.12
+
+
+
+
+ fetruby
+ host
+ 192.168.95.11
+
+
+
+
+ mogok
+ host
+ 192.168.95.16
+
+
+
+
+ triton
+ host
+ 192.168.95.10
+
+
+
+
+ tritonamp
+ host
+ 192.168.95.14
+
+
+
+
+ web
+ port
+ 80 443
+
+
+
+
+
+
+ -
+ 1,31
+ 0-5
+ *
+ *
+ *
+ root
+ /usr/bin/nice -n20 adjkerntz -a
+
+ -
+ 1
+ 3
+ 1
+ *
+ *
+ root
+ /usr/bin/nice -n20 /etc/rc.update_bogons.sh
+
+ -
+ */60
+ *
+ *
+ *
+ *
+ root
+ /usr/bin/nice -n20 /usr/local/sbin/expiretable -v -t 3600 sshlockout
+
+ -
+ */60
+ *
+ *
+ *
+ *
+ root
+ /usr/bin/nice -n20 /usr/local/sbin/expiretable -v -t 3600 webConfiguratorlockout
+
+ -
+ 1
+ 1
+ *
+ *
+ *
+ root
+ /usr/bin/nice -n20 /etc/rc.dyndns.update
+
+ -
+ */60
+ *
+ *
+ *
+ *
+ root
+ /usr/bin/nice -n20 /usr/local/sbin/expiretable -v -t 3600 virusprot
+
+ -
+ 30
+ 12
+ *
+ *
+ *
+ root
+ /usr/bin/nice -n20 /etc/rc.update_urltables
+
+
+
+
+ lan
+ 52:54:00:a9:cf:27
+
+
+
+
+
+ left=system-processor&right=&resolution=300&timePeriod=-1d&startDate=&endDate=&startTime=0&endTime=0&graphtype=line&invert=true&refresh-interval=0
+
+
+
+ ICMP
+ icmp
+
+
+
+
+ TCP
+ tcp
+
+
+
+
+ HTTP
+ http
+
+
+ /
+
+ 200
+
+
+
+ HTTPS
+ https
+
+
+ /
+
+ 200
+
+
+
+ SMTP
+ send
+
+
+
+ 220 *
+
+
+
+
+ system_information:col1:open,interfaces:col2:open,captive_portal_status:col2:open
+ 10
+
+
+
+
+ all
+ wan
+
+
+
+
+
+
+
+
+ transparent
+
+
+
+
+
+
+ admin@192.168.86.6
+
+
+
+ 58e6957796d5e
+
+ server
+ LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZiVENDQkZXZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBRENCdERFTE1Ba0dBMVVFQmhNQ1ZWTXgKRGpBTUJnTlZCQWdUQlZOMFlYUmxNUkV3RHdZRFZRUUhFd2hNYjJOaGJHbDBlVEU0TURZR0ExVUVDaE12Y0daVApaVzV6WlNCM1pXSkRiMjVtYVdkMWNtRjBiM0lnVTJWc1ppMVRhV2R1WldRZ1EyVnlkR2xtYVdOaGRHVXhLREFtCkJna3Foa2lHOXcwQkNRRVdHV0ZrYldsdVFIQm1VMlZ1YzJVdWJHOWpZV3hrYjIxaGFXNHhIakFjQmdOVkJBTVQKRlhCbVUyVnVjMlV0TlRobE5qazFOemM1Tm1RMVpUQWVGdzB4TnpBME1EWXhPVEl5TXpGYUZ3MHlNakE1TWpjeApPVEl5TXpGYU1JRzBNUXN3Q1FZRFZRUUdFd0pWVXpFT01Bd0dBMVVFQ0JNRlUzUmhkR1V4RVRBUEJnTlZCQWNUCkNFeHZZMkZzYVhSNU1UZ3dOZ1lEVlFRS0V5OXdabE5sYm5ObElIZGxZa052Ym1acFozVnlZWFJ2Y2lCVFpXeG0KTFZOcFoyNWxaQ0JEWlhKMGFXWnBZMkYwWlRFb01DWUdDU3FHU0liM0RRRUpBUllaWVdSdGFXNUFjR1pUWlc1egpaUzVzYjJOaGJHUnZiV0ZwYmpFZU1Cd0dBMVVFQXhNVmNHWlRaVzV6WlMwMU9HVTJPVFUzTnprMlpEVmxNSUlCCklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUE3YmtWQWN3ekxqMHN5MG5LbXBmczgwb1oKRitsYTI0eTludVMweFRidm45T2hGdmJKNWFmUEV6WVdBV1hZQlZaVnBvZkpRMmFjZm9qS1Y3dUlTOHF1NG1DYQpYdVZORll1M3JUTmpSK3lxbkRpZDFhYjlTZXZZczZJc0d5b3FuMEN2aHZzdDF2RDRzT1lQUGZuZmNBbG11RDRSCmoxWjFmT3pQZElXNFlmVk5CQ00vbC82b2hCMW5SMWRXTnIrbEptV1dhK3dia0Yya3FOK2ZZR01aT2JGZUl6NFIKWGRoVGpQUUYwc0V2N0hnNGxTM29ZU1JBUWhSTjNmWXZETGZhZ21PZnJsRDA4cXRHYnhvSFc4QXJrYTB3QjVlRwpEYUw5NGRQdmRNSXFuZlBEZkZLbWo2aHZ0ZU5teXBFdHdZSk5EWlhCVUM0OHo5anhPbFM5aGp0OE9VK2VId0lECkFRQUJvNElCaGpDQ0FZSXdDUVlEVlIwVEJBSXdBREFSQmdsZ2hrZ0JodmhDQVFFRUJBTUNCa0F3TXdZSllJWkkKQVliNFFnRU5CQ1lXSkU5d1pXNVRVMHdnUjJWdVpYSmhkR1ZrSUZObGNuWmxjaUJEWlhKMGFXWnBZMkYwWlRBZApCZ05WSFE0RUZnUVVJZlpPL2o1NlJ1eE4yRWY5UmQ3NXh3MDV6U2t3Z2VFR0ExVWRJd1NCMlRDQjFvQVVJZlpPCi9qNTZSdXhOMkVmOVJkNzV4dzA1elNtaGdicWtnYmN3Z2JReEN6QUpCZ05WQkFZVEFsVlRNUTR3REFZRFZRUUkKRXdWVGRHRjBaVEVSTUE4R0ExVUVCeE1JVEc5allXeHBkSGt4T0RBMkJnTlZCQW9UTDNCbVUyVnVjMlVnZDJWaQpRMjl1Wm1sbmRYSmhkRzl5SUZObGJHWXRVMmxuYm1Wa0lFTmxjblJwWm1sallYUmxNU2d3SmdZSktvWklodmNOCkFRa0JGaGxoWkcxcGJrQndabE5sYm5ObExteHZZMkZzWkc5dFlXbHVNUjR3SEFZRFZRUURFeFZ3WmxObGJuTmwKTFRVNFpUWTVOVGMzT1Raa05XV0NBUUF3SFFZRFZSMGxCQll3RkFZSUt3WUJCUVVIQXdFR0NDc0dBUVVGQ0FJQwpNQXNHQTFVZER3UUVBd0lGb0RBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQUtxZkR2c2F2L2xEVXpkOHdhSG91CkQyZzExcjFzb2tQTXNXUUxwWlhtcHozRDZEUWlHNVl3UjdEZllDMnBsZWxzTjFMUlRNMHcxWnJWVlNwNTBJaWsKak83b2IvZ0h4c1FnaE1MeVFnWndRVVVoQ1doMVo1ODAzQytCY1Ftd1Q5dlVVZmI0dnpGWCtzTDNPZUtyTDRFLwpFSVkxM0ZKeGI3eGVEd2JLR1ZvVmdHek9ReUdLdmhXU2dURVd4anlPZTlHZWZFeEhnNkxQSTQ3WG96NGhiNG04CkpFMnoyZElnbG9MRkk1RU1vR0s3QXNTbFlxN2ovZ0NLdEZKK1JtWFpDVVk5a0M0UmxXTEhPMzQxam4wWE16d1QKUUZiVk1ja2gzQ2ZKcXNHaitMZWsycHllVytXZ3RrWFRMNEFZNHExYWo5eFVMV29vMFZlaXRIa0l4WUFmMEhBQwpMQT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
+ LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2Z0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktnd2dnU2tBZ0VBQW9JQkFRRHR1UlVCekRNdVBTekwKU2NxYWwrenpTaGtYNlZyYmpMMmU1TFRGTnUrZjA2RVc5c25scDg4VE5oWUJaZGdGVmxXbWg4bERacHgraU1wWAp1NGhMeXE3aVlKcGU1VTBWaTdldE0yTkg3S3FjT0ozVnB2MUo2OWl6b2l3YktpcWZRSytHK3kzVzhQaXc1Zzg5CitkOXdDV2E0UGhHUFZuVjg3TTkwaGJoaDlVMEVJeitYL3FpRUhXZEhWMVkydjZVbVpaWnI3QnVRWGFTbzM1OWcKWXhrNXNWNGpQaEZkMkZPTTlBWFN3Uy9zZURpVkxlaGhKRUJDRkUzZDlpOE10OXFDWTUrdVVQVHlxMFp2R2dkYgp3Q3VSclRBSGw0WU5vdjNoMCs5MHdpcWQ4OE44VXFhUHFHKzE0MmJLa1MzQmdrME5sY0ZRTGp6UDJQRTZWTDJHCk8zdzVUNTRmQWdNQkFBRUNnZ0VCQUxSaTF6L3Y5WDVHeVhEUTQ3NS9QancybytmekdSQzBNVWNiQU5rTm9MTkUKNFY0TmtwS0R6YXdrUkhwM0QzNnRUbno1V0kyZWxXMm0ydlBMeDliTFMvMVhsSXdocjJhRUNMS1M1ZWt6K3hwawpFOUNGMEhtQlQ0U3ZzSXhFYU9kRExHNWV0eC84NXBsRldaZUx2akxEejRCTENRUWRkVFdBZE1OVW5OOG9SbksxCjNnTDMvY2FadGFEL0hPWnZ1YnkrV2tCRzBVOU90cENoem9pRHN3NFhYMURSdGtEQURmbUtKSm1JZHlMZkI0WDEKcTR1ZXZncUdJYVliR0tOdnZUMHo3OEpoSkVzbE1WNVRxb2pGUEpEeVB0S080M0tRMnlzdGpKMlEvNWZ6REw3cApSczB3TXpRazF1d05xQ0UwVGhDQW5uakFXR1RVams3dnFMeHZVc0lFbTFFQ2dZRUEvakFVWDZOUjF3V0RjeUgrCkR6Yys1QmdCc003Y25HM0JJSmQrZHFmY2oxdUpta3E0L1Y2Z2lsSmx1L2tmK0ZSU2VVZEdQQkcxVUxtUjNFa3YKS2lQd2IrN0RRS3dRb0dKbTdIckt3dXpvUUpaYmZWV1RQMG1QcWl2NWxVeEgxRU92UnBZUDBsTVVjMHdxVEdDZgo3dEtMY2JwWGltWjFzYm5QMGdrcUIyeGxtWlVDZ1lFQTcycnp6ZVRuNEEzKzd2YnFsUFFrNFNOOWNMVENDZ2s1CmlTazZVVFJpNFRWT2UxTUwwcUE4YU1aKzR3M0RLekdhYmgzSE1WbGw2cmpjWUZ5T01aQkRxRGNrZlhORTM1VjQKcHdmTGQ4bWFUVzA3STJoeHNCa3gybGFVNUxhNjJXVVFSZHpxOGxmcy9QdFF1ODR1R0pFRDZZeUVWaWcyTUV4TQoxTWFtaDhTdzgrTUNnWUJ0U0I1NlA2MGYxSzcvQU01Sm5HYmRpYlN3WHo5WndaWVdmUXRSMkRscktOK3dCaEFpClhseUhHNFhCbXdtenFnMExOeWxyQ2ZINkVzNHk5d1BnQ2pPRTdCSGw3QlA1NEZSL3R3c1ZZdVUzWDIxV0pVUjUKSVJjekFsVDdheUEya2lMNUplc0hjZENKQVdYdUVGeXlRTExTNGxwZ2xreGpiSTk4clpQMFBSWXhRUUtCZ0g2NApuVkxkVmQzQmlxM3hBempVQUxFcGw3dVA4U1JldlpWYnZRSStPQmY3bnc2blpocVZ0V08vckdtQlgwdjlkVC9UCmd4c2J0bFlHZ3A1K1hzVGRGdkp5UFY0cEpNc3kwaW1XZHB0d21idGhsV3VvWElSWTBZby9TWS9GS0NEbzNUUWQKT2o0TFMrU2JJS0JIQVI3L29wSjdUWkJNdUdIWUFOS2VVb2FLRlI4QkFvR0JBUEdPOWpDeExXdTBubWNJR05JbwpGL1luekw2cW1ORmk2d0djNHBsdkp0cjRiejlvVk0xNHZSREtqTWhtK0JaNWRHcTBNcmxBc1BaU1V3Szh6ajMxCjFOeDEvMWM0VmQ0NjYrK2FXTHR5NE1TK0N6em4rKzdjaVd0dFU0Y3ZtNEtIa1lERDF3TENOcncwUHRqNzJubTQKeXJWTE1GSjd4NFVMcDN6YWUwWHZDSU5BCi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K
+
+
+
+
+
+ wan
+ dynamic
+ WAN_DHCP
+ 1
+ inet
+
+
+
+ opt1
+ 128.131.95.1
+ WAN_TUGW
+ 1
+ inet
+
+
+
+
+ opt2
+ 128.130.95.193
+ WLAN_TU2GW2
+ 1
+ inet
+
+
+
+
+ wan
+ dynamic
+ WAN_DHCP6
+ 1
+ inet6
+
+
+
+
+
+
+
+
+
+ lan
+
+
+
+ opt2ip
+ web
+
+ tcp
+ triton
+ web
+ opt2
+
+ nat_594a2222a1b396.11166902
+
+
+ admin@192.168.86.6
+
+
+
+ admin@192.168.86.6
+
+
+
+
+ lan
+
+
+
+ 128.131.95.212
+ web
+
+ tcp
+ triton
+ web
+ opt1
+
+ nat_59458f70519734.91879734
+
+
+ admin@192.168.86.6
+
+
+
+ admin@192.168.86.6
+
+
+
+
+ lan
+
+
+
+ opt1ip
+ web
+
+ tcp
+ triton
+ web
+ opt1
+
+ nat_5908d2244a91e7.30605837
+
+
+ admin@192.168.86.6
+
+
+
+ admin@192.168.86.6
+
+
+
+
+ lan
+
+
+
+ wanip
+ web
+
+ tcp
+ triton
+ web
+ wan
+
+ nat_58eca1cd607012.85095132
+
+
+ admin@192.168.86.6
+
+
+
+ admin@192.168.86.6
+
+
+
+
+
+ lan
+
+
+
+ 128.131.95.201
+ web
+
+ tcp
+ triton
+ web
+ opt1
+
+ nat_594a4d4dc6b478.76146266
+
+
+ admin@192.168.86.6
+
+
+
+ admin@192.168.86.6
+
+
+
+ automatic
+
+
+
+ address=/triton.fet.at/192.168.95.10
+address=/triton.local/192.168.95.10
+address=/git.local/192.168.95.10
+address=/fet.at/192.168.95.10
+address=/www.fet.at/192.168.95.10
+address=/git.triton.fet.at/192.168.95.10
+address=/fet.at/192.168.95.10
+address=/triton-amp.local/192.168.95.14
+address=/maria-storage.local/192.168.95.2
+address=/ldap.local/192.168.86.18
+address=/gagarin.htu.tuwien.ac.at/192.168.86.18
+address=/mogok.local/192.168.95.16
+address=/twikialt.local/192.168.95.12
+address=/fachschaften.local/192.168.95.21
+address=/fet.local/192.168.95.11
+
+
+ fet.at
+ 192.168.95.10
+
+ 0
+
+
+ git.triton.fet.at
+ 192.168.95.10
+
+ 1
+
+
+ triton.fet.at
+ 192.168.95.10
+
+ 2
+
+
+
+
+
+
+
+
+
+
+ Default
+
+
+
+
+ ipalias
+ opt1
+ 59458efbc450f
+
+ single
+ 24
+ 128.131.95.212
+
+
+ ipalias
+ opt1
+ 594a4e127cd72
+
+ single
+ 32
+ 128.131.95.201
+
+
+
diff --git a/doc/configs/wlan-OpenWrt-backup.tar.gz b/doc/configs/wlan-OpenWrt-backup.tar.gz
new file mode 100644
index 0000000..ec9d83e
Binary files /dev/null and b/doc/configs/wlan-OpenWrt-backup.tar.gz differ
diff --git a/doc/kistl.md b/doc/kistl.md
new file mode 100644
index 0000000..1e9dd0e
--- /dev/null
+++ b/doc/kistl.md
@@ -0,0 +1,3 @@
+# kistl
+## Current config
+See [config file](configs/kistl-pfSense-backup.xml)
diff --git a/doc/lxc.md b/doc/lxc.md
new file mode 100644
index 0000000..2a3f50d
--- /dev/null
+++ b/doc/lxc.md
@@ -0,0 +1,11 @@
+# LXC container
+## edit config
+```shell
+vi /var/lib/lxc/lxc-container-01/config
+```
+## manage container
+```shell
+lxc-start -n lxc-container-01
+lxc-attach -n lxc-container-01
+lxc-stop -n lxc-container-01
+```
diff --git a/doc/miruk.md b/doc/miruk.md
new file mode 100644
index 0000000..25278e3
--- /dev/null
+++ b/doc/miruk.md
@@ -0,0 +1,3 @@
+# miruk
+## Current config
+See [config file](configs/miruk-pfSense-backup.xml)
diff --git a/doc/sojus.md b/doc/sojus.md
new file mode 100644
index 0000000..936f824
--- /dev/null
+++ b/doc/sojus.md
@@ -0,0 +1,15 @@
+# sojus
+## create big backup locally
+```shell
+cryptsetup luksOpen /dev/disk/by-id/ata--part1 ata--part1
+zpool import
+zpool import lab
+zfs create -o com.sun:auto-snapshot=false lab/backup
+borg init -e none /lab/backup/ariane.fet.htu.tuwien.ac.at
+./borg create --show-rc --verbose --stats backup@sojus:system::ariane-{now} /zv1/daten /zv1/fotos /zv1/homes
+zpool export lab
+cryptsetup luksClose ata--part1
+sync
+hdparm -y /dev/disk/by-id/ata-
+hdparm -C /dev/disk/by-id/ata-
+```
diff --git a/doc/wlan.md b/doc/wlan.md
new file mode 100644
index 0000000..0824a5e
--- /dev/null
+++ b/doc/wlan.md
@@ -0,0 +1,3 @@
+# wlan
+## Current config
+See [config file](configs/wlan-OpenWrt-backup.tar.gz)
diff --git a/group_vars/all b/group_vars/all
index 4ae9703..a33100b 100644
--- a/group_vars/all
+++ b/group_vars/all
@@ -29,9 +29,6 @@ common_locales:
- name: 'de_AT.UTF-8'
state: "present"
-
-# apt-get common config
-common_apt: True
common_apt_repositories:
- "deb http://cdn.debian.net/debian/ {{ ansible_distribution_release }} main contrib non-free"
- "deb http://cdn.debian.net/debian/ {{ ansible_distribution_release }}-backports main contrib non-free"
@@ -40,10 +37,10 @@ common_apt_repositories:
common_vim_default: False
common_openssh_keys_root:
- - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCzkK6ENya4mKcoG9iuMaodMpifeCgZK56zVF1zxyZhLtUyBx//qsLCXEdBNiGJY57Yp4l0PJKk9B4hpCFKuz6H622l84SOHzXhmFQUXWe/L6x4kRfQJvhBCNMi9brfR0n6AwX59RNRsbUeUjb7RuhCrzpbW0iWYjv/H9rjeyfY5Ne9dUUeBQDcsM1O7XfZJWwA5nxEGjbDB7l4/K43DoqaqzHOEOoETmHGfugO7A5QwhRmblu90pLD4+DOPv/4LGBRNpS8FyRzYrEJm7yUyF7nDzR+0xlLCapU4pKhmIFfSv4afsuBFvLb6Rgln5wUt2KIPh/qnqSP9jZGovYOadC0yb70dec7nnfwXTmqwzdwXtBlo3UzbPwt0iJG9fhYCw83Bkt/GpOsIW2fcxZhJ8CUeBw3Ox71lkeozb49oRMeHzUpYckrFt1FGxUWuHHykCrOXcxso0MRfKjl9RPUc+O5oQDG1KAoTd9doB3jygVr68wYVc/4kTTsXUlMIBMOUiek8XygQ7sV6Et6FpzvLvdf/iL1FMXAluRgUWJvKqe4IBPyWu2KyDF+2ZDMse3WhQYlYgNRqGCwfxOJGWtkvVO0L4YGJrLXKhY4yw2H+pQOHaugfGO8IYPV/vbPi+dB9OV89Zonu2iVjjDFFXI0xE7WSXCV3RQyed26Bq9BBO9DDQ== damadmai@fet.at"
- - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCmv/aixvhRzeQiD3XABD448WHW2sHSX5wj5TkqKmHG3MekovCjacEDwAEdH+3MzXzbQXCD8NOHxlvRsqfzsaIZw6al+i7hd7xeYzRAITeXAod/eQNJY71Czh1xt/rtfjgVrwFKe6kUo+RqUUBxOXjKNtCROxvsa/gxTSJD4xz/TGOTM7EbRfkOGBh3j/xmdBinURTACwKwHCR4SUnpAA7usY/QQGW22Nqczvj9SW1Un0TnYpMm7jAghGo7pvwInTerbbA2OQ07QEp9T/mAbPUks5QGEw1lwMZgEtl0EZrKxDoWjssGPw5ZA6RzwIggjuEN1zzE+pn9jWL+9sd2Tihr pet@fet.at"
- - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDEer+2Q3/bSJv2SpaGo8tjkQdSw/Kqoyy3XZ2RrtEqwzGozfvjyrZ0jd2Vy6LJ37o3n34brfVOvzeBaiSzc+5ciNgRVohaMydM6ADSGvZ9S2BGod1KonKfTbultWA1+BzJAjn7ZTjLlPJmceITYlh5uAnHrWQgZNPipMHLbKnSMUUd7AbkBy/nhg/ad5dO6e9TOXmEY+cNMCcA20R1i/O9nA1LIgXfnx1WKtW40gOf5YioHnhOMo8rNP5WlzZ1Lf5SiMJgxeT0covc3pq+hAHa+Y6KKdeO5oQ36RMi5FJUk2txQHGQtAjLMg0dv+bJgepIakM5wxekk9oY0J8inZOMh0mRH86KMH3SDwXt2xPomXfkGKeHVkM5VO6qfv8CzX/FjMoTTFGVaKDEPngbA8BIrPD7++gicdcnkmYOJLXgBDuJhhpis/Yp8F+F1tMBDT9LRLNvM18BXpekoFJNwTWJOAR8gktsiYP3VMt6oN1Y5lStvzv6MkhaEa0WGqjQoOJsQuI1roVHwlQhyWM/igCeO0Egb7qz/qPJHRRCgNfVjDO/rtFK09EjmG1bQrgOP7dJv0E+3scxilnoIED6ocCpKNVpc/okehgHwC+QdIpWrn5fPrXJt/hifguCn7KziWfQne8eIxaQOWBaZLdcY7HmgtQmOi3KRlKy+ORXtj/+MQ== hans@fet.at"
- - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDZAVxkHZYqjgCBcfHy0yggdVALZKoQbJP1TJAEYgLIAWFQ0ZPMGDaidOQiTzFTE0i35MUlQB6Rc+pTYnW/+h9rzktWbU/8RNirQve2XR5TWiRIUa13p31Xgjyw05O0uF3LEL/SmZruMHy25ncDXGF+xC2VllIttC+fLHJWLXIbWVujHdOA69fBqOonQrcPTsg1l4QQv6ZAxwVgCsbeOccZkdpoT0BJk03nflW+SGsKthTYX2VMGJlc/4QjArfZ2hTykr0I/lSA6E9FkFSLl65ejovGxCp1oXn484DlyajoXqJY7IOD86izXqkQSq4w4bLKEdrfQOnfGKe1XmxzFdk92SNEW41RXokNQ16xOBZzO1ZHkXd6hx0Pj6aBvUbs3PlCn4q764LKIcjSk7ADgeC5OBA4xgRxyZt9vuP93o7jl3vvqLWevsFa0j8orxC0D3cO5SMPbowW9LqrtqHynC0WltrtLT5+Q2tBSavP615NOu+bfcakgiWN8otv41ST+2hWka8qNptOxTRj/h7+MMOyi9bh1vjgB1KkOZYotJtFdXKFiYz+buIKwguWZWEni9uTRMiEsu84x8aJwdptPO0UIgZGroyUZJcWlUkwrkdE5T4cg9zP14M6zmogAYEI7oRX56FyspRVlA7J6VF/mcZ1z6ufH+97cle613gPKUVkpw== andis@fet.at"
- - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKrEdkD1Oecw++r77MVrga1e20FA+e/O37rhMc0etS5MvlbsAHd6Ftx2SIXVtwDnHDzyUAOJb8WlYPdG5r/QJYtXgVMGZrZ31UFdlAZq3K8ytczKkcMgnEEOWYSSyQRJlEW5LkZ9tD0hv1myIg5iw6Vpuqe6YFSkdDHtGxf0lnLAfi1XKwu7b7tARJz7teOAjaFzXumvsZlFx9BdufMW32uu7BSYWjSGcrEzMyyB/5C3kU/d5Q1ZTNK6tceopFr/K1lKBzvj85safD5BH8NpjvLe1QkzHu+C0AVxYNtqGHI5oWJbcR+UOwelBeEM/On+/Xq0ZIVmiLmFx03Qun8t1n berni@fet.at"
- - 'no-pty,no-agent-forwarding,no-X11-forwarding,command="shutdown -h +1" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCiI41+XkobMT0K8ZrHdCeomdGAIRMZbdX1VjGe5OWa72rcaDFmBtK7MxD5xPZEdSaDkn+Nrpwv5/j10MccvkAOI/tx6PIxcgDF52FnHLMMVrXRM3cnkm9CrBi4kCN0D2fpbDLhknJhiqftIcPdct/a9foZQwkWOzGUN2Rk0mCw2QzkGyWHNxOMzMjV0gpfAWPv6Jg+JKDl5EHf2xJTeJ/l0TG6O0lsc5YY/7cqjRJJzTVFDo1Gy+qNgff0mbPrhcbWepG5R1tjkdT++f8uuoVkBUamwkjwDpH2y57sdESEPB0C5ES2cglOp2X3MMN7EnUBHYU3mMiYU0wV+b7Q3oKmQuG86a2D+yEp+0+WFaUY/TMCNpslGOtTBrNLshMIX/bnrx/aF9DApl9L/kUIlSxwwBNiPIl4VVU1p5Zzj/YAPvRl0kAKjosOZgl108JeRUbhQSGVrcODyhaIMQv4BAzHnV0kii7jNACHhqBR36eo3N6HX7GkbnU1YadZRcrxrpE9z9mrXuqWxzl4Cmz1yHb1JTwsnQQ2Dy0trIklQjEmLxvG8zpxHLV3EQmtIMK/g2Mk6VTdz9HZnwYLU7Mj/uZk0DWhTZ5Eyj6QAbcw2gLPLEUmdQhkHSoQKxHY0at3OjGFGydyc/3n7B7d578uxVBrp04uhTbW7SDi6mYGCkvCRQ== nut ups shutdown'
-
+ - key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCzkK6ENya4mKcoG9iuMaodMpifeCgZK56zVF1zxyZhLtUyBx//qsLCXEdBNiGJY57Yp4l0PJKk9B4hpCFKuz6H622l84SOHzXhmFQUXWe/L6x4kRfQJvhBCNMi9brfR0n6AwX59RNRsbUeUjb7RuhCrzpbW0iWYjv/H9rjeyfY5Ne9dUUeBQDcsM1O7XfZJWwA5nxEGjbDB7l4/K43DoqaqzHOEOoETmHGfugO7A5QwhRmblu90pLD4+DOPv/4LGBRNpS8FyRzYrEJm7yUyF7nDzR+0xlLCapU4pKhmIFfSv4afsuBFvLb6Rgln5wUt2KIPh/qnqSP9jZGovYOadC0yb70dec7nnfwXTmqwzdwXtBlo3UzbPwt0iJG9fhYCw83Bkt/GpOsIW2fcxZhJ8CUeBw3Ox71lkeozb49oRMeHzUpYckrFt1FGxUWuHHykCrOXcxso0MRfKjl9RPUc+O5oQDG1KAoTd9doB3jygVr68wYVc/4kTTsXUlMIBMOUiek8XygQ7sV6Et6FpzvLvdf/iL1FMXAluRgUWJvKqe4IBPyWu2KyDF+2ZDMse3WhQYlYgNRqGCwfxOJGWtkvVO0L4YGJrLXKhY4yw2H+pQOHaugfGO8IYPV/vbPi+dB9OV89Zonu2iVjjDFFXI0xE7WSXCV3RQyed26Bq9BBO9DDQ== damadmai@fet.at"
+ - key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCmv/aixvhRzeQiD3XABD448WHW2sHSX5wj5TkqKmHG3MekovCjacEDwAEdH+3MzXzbQXCD8NOHxlvRsqfzsaIZw6al+i7hd7xeYzRAITeXAod/eQNJY71Czh1xt/rtfjgVrwFKe6kUo+RqUUBxOXjKNtCROxvsa/gxTSJD4xz/TGOTM7EbRfkOGBh3j/xmdBinURTACwKwHCR4SUnpAA7usY/QQGW22Nqczvj9SW1Un0TnYpMm7jAghGo7pvwInTerbbA2OQ07QEp9T/mAbPUks5QGEw1lwMZgEtl0EZrKxDoWjssGPw5ZA6RzwIggjuEN1zzE+pn9jWL+9sd2Tihr pet@fet.at"
+ - key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDEer+2Q3/bSJv2SpaGo8tjkQdSw/Kqoyy3XZ2RrtEqwzGozfvjyrZ0jd2Vy6LJ37o3n34brfVOvzeBaiSzc+5ciNgRVohaMydM6ADSGvZ9S2BGod1KonKfTbultWA1+BzJAjn7ZTjLlPJmceITYlh5uAnHrWQgZNPipMHLbKnSMUUd7AbkBy/nhg/ad5dO6e9TOXmEY+cNMCcA20R1i/O9nA1LIgXfnx1WKtW40gOf5YioHnhOMo8rNP5WlzZ1Lf5SiMJgxeT0covc3pq+hAHa+Y6KKdeO5oQ36RMi5FJUk2txQHGQtAjLMg0dv+bJgepIakM5wxekk9oY0J8inZOMh0mRH86KMH3SDwXt2xPomXfkGKeHVkM5VO6qfv8CzX/FjMoTTFGVaKDEPngbA8BIrPD7++gicdcnkmYOJLXgBDuJhhpis/Yp8F+F1tMBDT9LRLNvM18BXpekoFJNwTWJOAR8gktsiYP3VMt6oN1Y5lStvzv6MkhaEa0WGqjQoOJsQuI1roVHwlQhyWM/igCeO0Egb7qz/qPJHRRCgNfVjDO/rtFK09EjmG1bQrgOP7dJv0E+3scxilnoIED6ocCpKNVpc/okehgHwC+QdIpWrn5fPrXJt/hifguCn7KziWfQne8eIxaQOWBaZLdcY7HmgtQmOi3KRlKy+ORXtj/+MQ== hans@fet.at"
+ - key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDZAVxkHZYqjgCBcfHy0yggdVALZKoQbJP1TJAEYgLIAWFQ0ZPMGDaidOQiTzFTE0i35MUlQB6Rc+pTYnW/+h9rzktWbU/8RNirQve2XR5TWiRIUa13p31Xgjyw05O0uF3LEL/SmZruMHy25ncDXGF+xC2VllIttC+fLHJWLXIbWVujHdOA69fBqOonQrcPTsg1l4QQv6ZAxwVgCsbeOccZkdpoT0BJk03nflW+SGsKthTYX2VMGJlc/4QjArfZ2hTykr0I/lSA6E9FkFSLl65ejovGxCp1oXn484DlyajoXqJY7IOD86izXqkQSq4w4bLKEdrfQOnfGKe1XmxzFdk92SNEW41RXokNQ16xOBZzO1ZHkXd6hx0Pj6aBvUbs3PlCn4q764LKIcjSk7ADgeC5OBA4xgRxyZt9vuP93o7jl3vvqLWevsFa0j8orxC0D3cO5SMPbowW9LqrtqHynC0WltrtLT5+Q2tBSavP615NOu+bfcakgiWN8otv41ST+2hWka8qNptOxTRj/h7+MMOyi9bh1vjgB1KkOZYotJtFdXKFiYz+buIKwguWZWEni9uTRMiEsu84x8aJwdptPO0UIgZGroyUZJcWlUkwrkdE5T4cg9zP14M6zmogAYEI7oRX56FyspRVlA7J6VF/mcZ1z6ufH+97cle613gPKUVkpw== andis@fet.at"
+ - key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKrEdkD1Oecw++r77MVrga1e20FA+e/O37rhMc0etS5MvlbsAHd6Ftx2SIXVtwDnHDzyUAOJb8WlYPdG5r/QJYtXgVMGZrZ31UFdlAZq3K8ytczKkcMgnEEOWYSSyQRJlEW5LkZ9tD0hv1myIg5iw6Vpuqe6YFSkdDHtGxf0lnLAfi1XKwu7b7tARJz7teOAjaFzXumvsZlFx9BdufMW32uu7BSYWjSGcrEzMyyB/5C3kU/d5Q1ZTNK6tceopFr/K1lKBzvj85safD5BH8NpjvLe1QkzHu+C0AVxYNtqGHI5oWJbcR+UOwelBeEM/On+/Xq0ZIVmiLmFx03Qun8t1n berni@fet.at"
+ - key: 'no-pty,no-agent-forwarding,no-X11-forwarding,command="shutdown -h +1" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCiI41+XkobMT0K8ZrHdCeomdGAIRMZbdX1VjGe5OWa72rcaDFmBtK7MxD5xPZEdSaDkn+Nrpwv5/j10MccvkAOI/tx6PIxcgDF52FnHLMMVrXRM3cnkm9CrBi4kCN0D2fpbDLhknJhiqftIcPdct/a9foZQwkWOzGUN2Rk0mCw2QzkGyWHNxOMzMjV0gpfAWPv6Jg+JKDl5EHf2xJTeJ/l0TG6O0lsc5YY/7cqjRJJzTVFDo1Gy+qNgff0mbPrhcbWepG5R1tjkdT++f8uuoVkBUamwkjwDpH2y57sdESEPB0C5ES2cglOp2X3MMN7EnUBHYU3mMiYU0wV+b7Q3oKmQuG86a2D+yEp+0+WFaUY/TMCNpslGOtTBrNLshMIX/bnrx/aF9DApl9L/kUIlSxwwBNiPIl4VVU1p5Zzj/YAPvRl0kAKjosOZgl108JeRUbhQSGVrcODyhaIMQv4BAzHnV0kii7jNACHhqBR36eo3N6HX7GkbnU1YadZRcrxrpE9z9mrXuqWxzl4Cmz1yHb1JTwsnQQ2Dy0trIklQjEmLxvG8zpxHLV3EQmtIMK/g2Mk6VTdz9HZnwYLU7Mj/uZk0DWhTZ5Eyj6QAbcw2gLPLEUmdQhkHSoQKxHY0at3OjGFGydyc/3n7B7d578uxVBrp04uhTbW7SDi6mYGCkvCRQ== nut ups shutdown'
+ state: present
diff --git a/group_vars/fet_hosts b/group_vars/fet_hosts
index 2d07311..2793ed5 100644
--- a/group_vars/fet_hosts
+++ b/group_vars/fet_hosts
@@ -24,9 +24,11 @@ common_basic_packages:
- python3-apt
- python3-pycurl
# extra
- - lshw
- - gdisk
+ - cgroupfs-mount
- cryptsetup
+ - fuse
+ - gdisk
+ - lshw
- nvme-cli
common_sysctl: True
diff --git a/group_vars/fet_lxc_void b/group_vars/fet_lxc_void
index 3f9a804..982e651 100644
--- a/group_vars/fet_lxc_void
+++ b/group_vars/fet_lxc_void
@@ -1,2 +1,19 @@
---
common_apt: False
+common_xbps: True
+common_basic_packages:
+ - curl
+ - ncurses-term
+ - etckeeper
+ - git
+ - htop
+ - logrotate
+ - ncdu
+ - rsync
+ - strace
+ - sudo
+ - screen
+ - tmux
+ - tree
+ - vim
+ - zsh
diff --git a/host_vars/ariane b/host_vars/ariane
index 09f5f7d..e33661f 100644
--- a/host_vars/ariane
+++ b/host_vars/ariane
@@ -2,6 +2,7 @@
inventory_hostname: ariane.fet.htu.tuwien.ac.at
inventory_hostname_short: ariane
+common_interfaces: interfaces_ariane.j2
common_iptables_v4: "iptables_ariane_v4.j2"
common_iptables_v6: "iptables_ariane_v6.j2"
@@ -33,6 +34,28 @@ lxc:
- lxc.network.hwaddr = 2e:6d:b6:07:15:01
- lxc.pts = 6
+ - name: progress
+ revision: "01"
+ template: voidlinux
+ config:
+ - lxc.network.type = veth
+ - lxc.network.hwaddr = 2e:6d:b6:07:19:01
+ - lxc.network.link = br0
+ - lxc.network.flags = up
+ - lxc.pts = 6
+ - lxc.mount.entry = /zv1/daten/Scans /var/lib/lxc/lxc-progress-01/rootfs/mnt/scans none bind,create=dir 0 0
+
+ - name: sojus
+ revision: "01"
+ template: voidlinux
+ config:
+ - lxc.network.type = veth
+ - lxc.network.hwaddr = 2e:6d:b6:07:17:01
+ - lxc.network.link = br0
+ - lxc.network.flags = up
+ - lxc.pts = 6
+ - lxc.mount.entry = /zv1/sojus /var/lib/lxc/lxc-sojus-01/rootfs/home/backup/repos none bind,create=dir 0 0
+
- name: proteus
revision: "01"
template: debian
diff --git a/host_vars/backup01 b/host_vars/backup01
deleted file mode 100644
index 7b9530f..0000000
--- a/host_vars/backup01
+++ /dev/null
@@ -1 +0,0 @@
-inventory_hostname_short: backup01
\ No newline at end of file
diff --git a/host_vars/baroness b/host_vars/baroness
new file mode 100644
index 0000000..afd8f40
--- /dev/null
+++ b/host_vars/baroness
@@ -0,0 +1,42 @@
+inventory_hostname: baroness.fet.htu.tuwien.ac.at
+inventory_hostname_short: baroness
+
+borgbackup_binary_version: "1.1.6"
+borgbackup_binary_platform: "armv6"
+borgbackup_binary_uri: "https://borg.bauerj.eu/borg-{{ borgbackup_binary_version }}-{{ borgbackup_binary_platform }}"
+
+borgbackup_encryption_mode: "none"
+
+borgbackup_client_backup_server: sojus
+
+borgbackup_create_jobs:
+ - name: system
+ options: "--lock-wait 1800"
+ day: "*"
+ hour: "*" # default value = 1
+ minute: 0 # default value = 0
+ random_minute: 59 # default value : ignore randomization
+ directories:
+ - "/home/pi/baroness"
+ excludes: []
+
+borgbackup_prune_enabled: yes
+borgbackup_prune_jobs:
+ - name: system
+ prune_options: "--lock-wait 1800 --keep-daily=750 --keep-weekly=52 --keep-monthly=24 --keep-yearly=-1"
+ day: "*"
+ hour: 12 # default value = 1
+ minute: 0 # default value = 0
+ random_hour: 5 # default value : ignore randomization
+ random_minute: 59 # default value : ignore randomization
+
+borgbackup_check_enabled: yes
+borgbackup_check_jobs:
+ - name: system
+ check_options: "--lock-wait 28800"
+ day: 1
+ hour: 12 # default value = 1
+ minute: 0 # default value = 0
+ random_hour: 5 # default value : ignore randomization
+ random_minute: 59 # default value : ignore randomization
+ random_day: 27 # default value : ignore randomization
diff --git a/host_vars/lxc-betam-01 b/host_vars/betam
similarity index 100%
rename from host_vars/lxc-betam-01
rename to host_vars/betam
diff --git a/host_vars/buran b/host_vars/buran
new file mode 100644
index 0000000..52809fb
--- /dev/null
+++ b/host_vars/buran
@@ -0,0 +1,44 @@
+inventory_hostname: buran.fet.htu.tuwien.ac.at
+inventory_hostname_short: buran
+
+borgbackup_install_from_repo: False
+borgbackup_binary_platform: "borg-linux32"
+
+borgbackup_encryption_mode: "none"
+
+borgbackup_client_backup_server: sojus
+
+borgbackup_create_jobs:
+ - name: system
+ options: "--lock-wait 7200"
+ day: "*"
+ hour: 0 # default value = 1
+ minute: 0 # default value = 0
+ random_hour: 5 # default value : ignore randomization
+ random_minute: 59 # default value : ignore randomization
+ directories:
+ - "/var/lib/cyrus"
+ - "/var/spool/cyrus/mail"
+ - "/var/spool/sieve"
+ excludes: []
+
+borgbackup_prune_enabled: yes
+borgbackup_prune_jobs:
+ - name: system
+ prune_options: "--lock-wait 7200 --keep-daily=7 --keep-weekly=4 --keep-monthly=12 --keep-yearly=-1"
+ day: "*"
+ hour: 12 # default value = 1
+ minute: 0 # default value = 0
+ random_hour: 5 # default value : ignore randomization
+ random_minute: 59 # default value : ignore randomization
+
+borgbackup_check_enabled: yes
+borgbackup_check_jobs:
+ - name: system
+ check_options: "--lock-wait 28800"
+ day: 1
+ hour: 12 # default value = 1
+ minute: 0 # default value = 0
+ random_hour: 5 # default value : ignore randomization
+ random_minute: 59 # default value : ignore randomization
+ random_day: 27 # default value : ignore randomization
diff --git a/host_vars/lxc-laika-01 b/host_vars/laika
similarity index 100%
rename from host_vars/lxc-laika-01
rename to host_vars/laika
diff --git a/host_vars/maria-storage b/host_vars/maria-storage
new file mode 100644
index 0000000..486f8dc
--- /dev/null
+++ b/host_vars/maria-storage
@@ -0,0 +1,42 @@
+inventory_hostname: maria-storage.fet.htu.tuwien.ac.at
+inventory_hostname_short: maria-storage
+
+borgbackup_install_from_repo: False
+
+borgbackup_encryption_mode: "none"
+
+borgbackup_client_backup_server: sojus
+
+borgbackup_create_jobs:
+ - name: system
+ options: "--lock-wait 7200"
+ day: "*"
+ hour: 0 # default value = 1
+ minute: 0 # default value = 0
+ random_hour: 5 # default value : ignore randomization
+ random_minute: 59 # default value : ignore randomization
+ directories:
+ - "/var/lib/mysql"
+ - "/srv/save"
+ excludes: []
+
+borgbackup_prune_enabled: yes
+borgbackup_prune_jobs:
+ - name: system
+ prune_options: "--lock-wait 7200 --keep-daily=7 --keep-weekly=4 --keep-monthly=12 --keep-yearly=-1"
+ day: "*"
+ hour: 12 # default value = 1
+ minute: 0 # default value = 0
+ random_hour: 5 # default value : ignore randomization
+ random_minute: 59 # default value : ignore randomization
+
+borgbackup_check_enabled: yes
+borgbackup_check_jobs:
+ - name: system
+ check_options: "--lock-wait 28800"
+ day: 1
+ hour: 12 # default value = 1
+ minute: 0 # default value = 0
+ random_hour: 5 # default value : ignore randomization
+ random_minute: 59 # default value : ignore randomization
+ random_day: 27 # default value : ignore randomization
diff --git a/host_vars/nauka b/host_vars/nauka
new file mode 100644
index 0000000..9e184cf
--- /dev/null
+++ b/host_vars/nauka
@@ -0,0 +1,42 @@
+inventory_hostname: nauka.fet.htu.tuwien.ac.at
+inventory_hostname_short: nauka
+
+borgbackup_install_from_repo: False
+
+borgbackup_encryption_mode: "none"
+
+borgbackup_client_backup_server: sojus
+
+borgbackup_create_jobs:
+ - name: system
+ options: "--lock-wait 7200"
+ day: "*"
+ hour: 0 # default value = 1
+ minute: 0 # default value = 0
+ random_hour: 5 # default value : ignore randomization
+ random_minute: 59 # default value : ignore randomization
+ directories:
+ - "/var/lib/mysql"
+ - "/var/www"
+ excludes: []
+
+borgbackup_prune_enabled: yes
+borgbackup_prune_jobs:
+ - name: system
+ prune_options: "--lock-wait 7200 --keep-daily=7 --keep-weekly=4 --keep-monthly=12 --keep-yearly=-1"
+ day: "*"
+ hour: 12 # default value = 1
+ minute: 0 # default value = 0
+ random_hour: 5 # default value : ignore randomization
+ random_minute: 59 # default value : ignore randomization
+
+borgbackup_check_enabled: yes
+borgbackup_check_jobs:
+ - name: system
+ check_options: "--lock-wait 28800"
+ day: 1
+ hour: 12 # default value = 1
+ minute: 0 # default value = 0
+ random_hour: 5 # default value : ignore randomization
+ random_minute: 59 # default value : ignore randomization
+ random_day: 27 # default value : ignore randomization
diff --git a/host_vars/lxc-pet-01 b/host_vars/pet
similarity index 100%
rename from host_vars/lxc-pet-01
rename to host_vars/pet
diff --git a/host_vars/progress b/host_vars/progress
new file mode 100644
index 0000000..9551b87
--- /dev/null
+++ b/host_vars/progress
@@ -0,0 +1,6 @@
+inventory_hostname: progress.fet.htu.tuwien.ac.at
+inventory_hostname_short: progress
+
+common_iptables_v4: "iptables_progress_v4.j2"
+common_iptables_v6: "iptables_progress_v6.j2"
+printer_ip: 192.168.86.14
diff --git a/host_vars/lxc-proteus-01 b/host_vars/proteus
similarity index 100%
rename from host_vars/lxc-proteus-01
rename to host_vars/proteus
diff --git a/host_vars/sojus b/host_vars/sojus
new file mode 100644
index 0000000..3972b5d
--- /dev/null
+++ b/host_vars/sojus
@@ -0,0 +1,7 @@
+inventory_hostname: sojus.fet.htu.tuwien.ac.at
+inventory_hostname_short: sojus
+
+borgbackup_install_from_repo: True
+borgbackup_binary: "/usr/bin/borg"
+
+borgbackup_encryption_mode: "none"
diff --git a/host_vars/lxc-zyklon-01 b/host_vars/zyklon
similarity index 100%
rename from host_vars/lxc-zyklon-01
rename to host_vars/zyklon
diff --git a/hosts/production b/hosts/production
index 6ab8a92..7dfd430 100644
--- a/hosts/production
+++ b/hosts/production
@@ -13,5 +13,15 @@ all:
fet_lxc_void:
hosts:
zyklon:
+ sojus:
+ progress:
+ fet_qemu:
+ hosts:
+ maria-storage:
+ buran:
+ nauka:
+ fet_pi:
+ hosts:
+ baroness:
vars:
ansible_python_interpreter=/usr/bin/python3
diff --git a/roles/backup/defaults/main.yml b/roles/backup/defaults/main.yml
deleted file mode 100644
index 81d832e..0000000
--- a/roles/backup/defaults/main.yml
+++ /dev/null
@@ -1,2 +0,0 @@
----
-backup_borg: True
\ No newline at end of file
diff --git a/roles/backup/tasks/borg.yml b/roles/backup/tasks/borg.yml
deleted file mode 100644
index 4fad2c2..0000000
--- a/roles/backup/tasks/borg.yml
+++ /dev/null
@@ -1,21 +0,0 @@
----
-- name: install borg
- package: name="borgbackup" state=present
-
-- name: create repositories
- file:
- path: "{{item.path}}"
- state: directory
- with_items: "{{backup.repositories}}"
-
-- name: init borg repositories
- command: "borg init {{item.path}} --encryption=none"
- args:
- creates: "{{item.path}}/README"
- with_items: "{{backup.repositories}}"
-
-- name: create READMES
- template:
- src=borg_README.j2
- dest="{{item.path}}/README"
- with_items: "{{backup.repositories}}"
diff --git a/roles/backup/tasks/main.yml b/roles/backup/tasks/main.yml
deleted file mode 100644
index 83441d1..0000000
--- a/roles/backup/tasks/main.yml
+++ /dev/null
@@ -1,4 +0,0 @@
----
-- import_tasks: borg.yml
- when: backup_borg
- tags: ['backup', 'borg']
diff --git a/roles/backup/templates/borg_README.j2 b/roles/backup/templates/borg_README.j2
deleted file mode 100644
index 349390f..0000000
--- a/roles/backup/templates/borg_README.j2
+++ /dev/null
@@ -1,2 +0,0 @@
-This is a generate FET borg repository.
-Name: {{item.name}}
\ No newline at end of file
diff --git a/roles/backupclient/defaults/main.yml b/roles/backupclient/defaults/main.yml
deleted file mode 100644
index 81d832e..0000000
--- a/roles/backupclient/defaults/main.yml
+++ /dev/null
@@ -1,2 +0,0 @@
----
-backup_borg: True
\ No newline at end of file
diff --git a/roles/backupclient/tasks/borg.yml b/roles/backupclient/tasks/borg.yml
deleted file mode 100644
index 451b60c..0000000
--- a/roles/backupclient/tasks/borg.yml
+++ /dev/null
@@ -1,27 +0,0 @@
----
-- name: install borg
- package: name="borgbackup" state=present
-
-- name: create backup user
- user:
- name: borg_backup
- comment: "BackupUser für BORG Backup"
- group: root
- generate_ssh_key: yes
- ssh_key_bits: 4096
- ssh_key_file: .ssh/id_rsa
-
-- name: fetch pubickey
- shell: "cat /home/borg_backup/.ssh/id_rsa.pub"
- register: id_rsa_pub
- changed_when: false
-
-- name: Add authorized key to borg backup servers
- authorized_key:
- user: "root"
- key: "{{id_rsa_pub.stdout}}"
- key_options: 'command="borg serve --restrict-to-path /srv/rep1"'
- delegate_to: "{{item}}"
- with_items: "{{groups['backup']}}"
- when: id_rsa_pub.stdout is defined
-
diff --git a/roles/backupclient/tasks/main.yml b/roles/backupclient/tasks/main.yml
deleted file mode 100644
index 83441d1..0000000
--- a/roles/backupclient/tasks/main.yml
+++ /dev/null
@@ -1,4 +0,0 @@
----
-- import_tasks: borg.yml
- when: backup_borg
- tags: ['backup', 'borg']
diff --git a/roles/borg_client/.travis.yml b/roles/borg_client/.travis.yml
new file mode 100644
index 0000000..36bbf62
--- /dev/null
+++ b/roles/borg_client/.travis.yml
@@ -0,0 +1,29 @@
+---
+language: python
+python: "2.7"
+
+# Use the new container infrastructure
+sudo: false
+
+# Install ansible
+addons:
+ apt:
+ packages:
+ - python-pip
+
+install:
+ # Install ansible
+ - pip install ansible
+
+ # Check ansible version
+ - ansible --version
+
+ # Create ansible.cfg with correct roles_path
+ - printf '[defaults]\nroles_path=../' >ansible.cfg
+
+script:
+ # Basic role syntax check
+ - ansible-playbook tests/test.yml -i tests/inventory --syntax-check
+
+notifications:
+ webhooks: https://galaxy.ansible.com/api/v1/notifications/
\ No newline at end of file
diff --git a/roles/borg_client/LICENSE b/roles/borg_client/LICENSE
new file mode 100644
index 0000000..8dada3e
--- /dev/null
+++ b/roles/borg_client/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/roles/borg_client/README.md b/roles/borg_client/README.md
new file mode 100644
index 0000000..ff482ee
--- /dev/null
+++ b/roles/borg_client/README.md
@@ -0,0 +1,59 @@
+Borgbackup
+==========
+
+Ansible [Borgbackup](https://borgbackup.readthedocs.io/en/stable/) role.
+
+Features:
+ * Repository or binary installation
+ * Schedules regular backup jobs
+ * Schedules regular prune jobs to keep backup windows clean
+ * Flexible configuration to list backup targets
+
+Role Variables
+--------------
+
+see `defaults/main.yml`
+
+Example Playbook
+----------------
+
+ - hosts: all
+ roles:
+ - role: SphericalElephant.borgbackup
+ borgbackup_client: True
+ borgbackup_client_backup_server: backup01.example.com
+ borgbackup_create_jobs:
+ - name: system
+ day: "*"
+ hour: "0"
+ minute: "{{ 59 | random }}"
+ directories:
+ - /etc
+ - /home
+ - /var
+ excludes:
+ - 're:^/var/lib/apt'
+ - 're:^/var/[^/]+\/cache/'
+ borgbackup_prune_jobs:
+ - name: system
+ prune_options: "--keep-daily=7 --keep-weekly=4"
+ day: "*"
+ hour: "8"
+ minute: "0"
+ borgbackup_check_jobs:
+ - name: system
+ check_options: "--lock-wait 28800"
+ day: "1"
+ hour: "12"
+ minute: "0"
+
+
+You can easily assign client and server attributes from your inventory with something similar to the following:
+
+ borgbackup_client: "{{ (inventory_hostname in groups.borgbackup_server)|ternary(False, True) }}"
+ borgbackup_client_backup_server: "{{ groups.borgbackup_server[0] }}"
+
+License
+-------
+
+Apache 2.0
diff --git a/roles/borg_client/defaults/main.yml b/roles/borg_client/defaults/main.yml
new file mode 100644
index 0000000..ddaded0
--- /dev/null
+++ b/roles/borg_client/defaults/main.yml
@@ -0,0 +1,77 @@
+---
+borgbackup_install_from_repo: False
+borgbackup_binary_version: "1.1.6"
+borgbackup_binary_platform: "borg-linux64"
+borgbackup_binary_uri: "https://github.com/borgbackup/borg/releases/download/{{ borgbackup_binary_version }}/{{ borgbackup_binary_platform }}"
+borgbackup_binary: "/usr/local/bin/borg"
+
+borgbackup_encryption_mode: "none"
+borgbackup_passphrase: "yoursecret"
+
+borgbackup_server_user: "backup"
+borgbackup_server_group: "backup"
+borgbackup_server_home: "/home/backup"
+borgbackup_server_pool: "{{ borgbackup_server_home }}/repos"
+
+borgbackup_client_ssh_key_type: '{{ "ed25519"
+ if ("ssh-ed25519" in borgbackup_register_key_types.stdout_lines)
+ else "rsa" }}'
+
+borgbackup_client_ssh_key_file: "/root/.ssh/id_{{ borgbackup_client_ssh_key_type }}-backup"
+borgbackup_client_ssh_key_comment: 'root@{{ ansible_hostname }} generated by Ansible'
+borgbackup_client_scripts_dir: "/etc/borg"
+
+borgbackup_client_lastlog_dir: "/var/log/borg"
+
+# backup server IP or FQDN used during ansible installation AND backup operation.
+borgbackup_client_backup_server:
+
+# if defined, IP or FQDN used on backup operation. Usefull in case of LAN-free backup
+#borgbackup_client_backup_server_lanfreebackup:
+
+# you have to set at least a "create" job.
+# "prune" and "checks" jobs are optionnal, but you should use it too.
+borgbackup_create_jobs:
+
+# borgbackup jobs examples :
+#borgbackup_create_jobs:
+# - name: system
+# options: "--lock-wait 7200 --compression lzma"
+# day: "*"
+# hour: 0 # default value = 1
+# minute: 0 # default value = 0
+# random_hour: 5 # default value : ignore randomization
+# random_minute: 59 # default value : ignore randomization
+# directories:
+# - "/etc/"
+# - "/home"
+# excludes: []
+
+borgbackup_prune_enabled: yes
+#borgbackup_prune_jobs:
+# - name: system
+# prune_options: "--lock-wait 7200 --keep-daily=7 --keep-weekly=4 --keep-monthly=12 --keep-yearly=-1"
+# day: "*"
+# hour: 12 # default value = 1
+# minute: 0 # default value = 0
+# random_hour: 5 # default value : ignore randomization
+# random_minute: 59 # default value : ignore randomization
+
+borgbackup_check_enabled: yes
+#borgbackup_check_jobs:
+# - name: system
+# check_options: "--lock-wait 28800"
+# day: 1
+# hour: 12 # default value = 1
+# minute: 0 # default value = 0
+# random_hour: 5 # default value : ignore randomization
+# random_minute: 59 # default value : ignore randomization
+# random_day: 27 # default value : ignore randomization
+
+# about random :
+# TL;DR : if 'random_hour' is set, then 'hour' will be set by a random value within range 'hour' up to 'hour+random_hour'
+# purpose is to set indempotent random crontab values. Usefull when many jobs are croned toward a small number of repository servers.
+# random_hour : if defined, a indempotent random value is computed between 0 and the value specified.
+# Then, the crontab hour will be addition of hour and random_hour.
+# a modulo 24 is applied in order to ensure valid hour are specified.
+# random_minute and random_day works the same way.
diff --git a/roles/borg_client/meta/main.yml b/roles/borg_client/meta/main.yml
new file mode 100644
index 0000000..fc83234
--- /dev/null
+++ b/roles/borg_client/meta/main.yml
@@ -0,0 +1,20 @@
+galaxy_info:
+ author: Farhad Shahbazi
+ description: Borgbackup
+ company: Spherical Elephant GmbH
+ license: Apache
+ min_ansible_version: 2.1
+ platforms:
+ - name: Ubuntu
+ versions:
+ - all
+ - name: Debian
+ versions:
+ - jessie
+ - sid
+ - stretch
+ - name: Archlinux
+ galaxy_tags:
+ - backup
+
+dependencies: []
diff --git a/roles/borg_client/tasks/borgbackup_client.yml b/roles/borg_client/tasks/borgbackup_client.yml
new file mode 100644
index 0000000..c2955ba
--- /dev/null
+++ b/roles/borg_client/tasks/borgbackup_client.yml
@@ -0,0 +1,191 @@
+---
+- name: check available SSH key types
+ shell: ssh -Q key 2>/dev/null || echo "ssh-rsa"
+ register: borgbackup_register_key_types
+ changed_when: False
+ check_mode: no
+
+- name: generate backup ssh-key
+ user:
+ name: root
+ ssh_key_file: "{{ borgbackup_client_ssh_key_file }}"
+ ssh_key_type: "{{ borgbackup_client_ssh_key_type }}"
+ ssh_key_comment: "{{ borgbackup_client_ssh_key_comment }}"
+ ssh_key_bits: 4096
+ generate_ssh_key: yes
+
+- name: fetch backup ssh-pubkey
+ command: "cat {{ borgbackup_client_ssh_key_file }}.pub"
+ check_mode: no
+ register: borgbackup_client_ssh_pubkey_file
+ changed_when: False
+
+- name: add ssh-pubkey to backup server
+ delegate_to: "{{ borgbackup_client_backup_server }}"
+ # Start the delegate from the ansible master to avoid distributing more keys
+ connection: local
+ authorized_key:
+ user: "{{ borgbackup_server_user }}"
+ key: "{{ borgbackup_client_ssh_pubkey_file.stdout }}"
+ key_options: 'command="cd {{ borgbackup_server_pool }}/{{ inventory_hostname }};borg serve --restrict-to-path {{ borgbackup_server_pool }}/{{ inventory_hostname }}",restrict'
+
+- name: create repo path for host
+ delegate_to: "{{ borgbackup_client_backup_server }}"
+ # Start the delegate from the ansible master to avoid distributing more keys
+ connection: local
+ file:
+ path: "{{ borgbackup_server_pool }}/{{ inventory_hostname }}"
+ owner: "{{ borgbackup_server_user }}"
+ group: "{{ borgbackup_server_group }}"
+ mode: 0700
+ state: directory
+
+- name: backup scripts dir
+ file:
+ path: "{{ borgbackup_client_scripts_dir }}"
+ owner: root
+ group: root
+ mode: 0750
+ state: directory
+
+- name: backup supervision lastlog dir
+ file:
+ path: "{{ borgbackup_client_lastlog_dir }}"
+ owner: root
+ group: root
+ mode: 0755
+ state: directory
+
+- name: check if the repositories already exist
+ command: "{{ borgbackup_binary }} list {{ borgbackup_server_user }}@{{ borgbackup_client_backup_server_lanfreebackup | default(borgbackup_client_backup_server) }}:{{ item.name }}"
+ environment:
+ - BORG_RSH: "ssh -o StrictHostKeyChecking=no -i {{ borgbackup_client_ssh_key_file }}"
+ - BORG_PASSPHRASE: "{{ borgbackup_passphrase }}"
+ with_items: "{{ borgbackup_create_jobs }}"
+ register: list_repos
+ failed_when: False
+ changed_when: False
+ check_mode: no
+
+- name: initialize empty list of initialized repositories
+ set_fact:
+ initialized_repos: []
+
+- name: store only initialized repositories in the list
+ set_fact:
+ initialized_repos: "{{ initialized_repos }} + [ '{{ item.item.name }}' ]"
+ with_items: "{{ list_repos.results }}"
+ when: item.rc == 0
+
+- name: initialize repositories
+ command: "{{ borgbackup_binary }} init --encryption {{ borgbackup_encryption_mode }} {{ borgbackup_server_user }}@{{ borgbackup_client_backup_server_lanfreebackup | default(borgbackup_client_backup_server) }}:{{ item.name }}"
+ environment:
+ - BORG_RSH: "ssh -o StrictHostKeyChecking=no -i {{ borgbackup_client_ssh_key_file }}"
+ - BORG_PASSPHRASE: "{{ borgbackup_passphrase }}"
+ with_items: "{{ borgbackup_create_jobs }}"
+ register: borgbackup_initialize_result
+ failed_when: (borgbackup_initialize_result.rc != 0) and (borgbackup_initialize_result.stderr != "") and ('already exists' not in borgbackup_initialize_result.stderr)
+ when: item.name not in initialized_repos
+
+- name: generate filename for create / prune / check scripts
+ set_fact:
+ create_suffix_script_filename: "create_{{ borgbackup_client_backup_server.split('.')[0] }}"
+ prune_suffix_script_filename: "prune_{{ borgbackup_client_backup_server.split('.')[0] }}"
+ check_suffix_script_filename: "check_{{ borgbackup_client_backup_server.split('.')[0] }}"
+
+#
+# borg create scripts
+#
+- name: deploy borg create scripts
+ template:
+ dest: "{{ borgbackup_client_scripts_dir }}/{{ item.name }}_{{ create_suffix_script_filename }}.sh"
+ src: create_job.sh.j2
+ owner: root
+ group: root
+ mode: 0700
+ with_items: "{{ borgbackup_create_jobs }}"
+
+- name: schedule borg create scripts on cron
+ cron:
+ name: "borg backup {{ item.name }}"
+ user: root
+ job: "{{ borgbackup_client_scripts_dir }}/{{ item.name }}_{{ create_suffix_script_filename }}.sh 2>&1 | /usr/bin/logger -t borgbackup"
+ day: "{{ (item.day | default(1)) + (item.random_day | random(seed=item.name + check_suffix_script_filename + ansible_host))%28 if item.random_day is defined else item.day | default('*') }}"
+ hour: "{{ (item.hour | default(1)) + (item.random_hour | random(seed=item.name + create_suffix_script_filename + ansible_host))%24 if item.random_hour is defined else item.hour | default(1) }}"
+ minute: "{{ (item.minute | default(0)) + (item.random_minute | random(seed=ansible_host + item.name + create_suffix_script_filename))%60 if item.random_minute is defined else item.minute | default(0) }}"
+ state: present
+ cron_file: "borgbackup_{{ item.name }}_{{ create_suffix_script_filename }}"
+ with_items: "{{ borgbackup_create_jobs }}"
+
+- name: deploy borg create fake logs, when no log yet
+ shell: echo -ne "FAKE LOG\nterminating with success status, rc 0\n" | tee "{{ borgbackup_client_lastlog_dir }}/{{ item.name }}_{{ create_suffix_script_filename }}.lastlog"
+ args:
+ chdir: "{{ borgbackup_client_lastlog_dir }}"
+ creates: "{{ borgbackup_client_lastlog_dir }}/{{ item.name }}_{{ create_suffix_script_filename }}.lastlog"
+ with_items: "{{ borgbackup_create_jobs }}"
+
+#
+# borg prune scripts
+#
+- name: deploy borg prune scripts
+ template:
+ dest: "{{ borgbackup_client_scripts_dir }}/{{ item.name }}_{{ prune_suffix_script_filename }}.sh"
+ src: prune_job.sh.j2
+ owner: root
+ group: root
+ mode: 0700
+ with_items: "{{ borgbackup_prune_jobs }}"
+ when: borgbackup_prune_enabled
+
+- name: schedule borg prune scripts on cron
+ cron:
+ name: "borg prune {{ item.name }}"
+ user: root
+ job: "{{ borgbackup_client_scripts_dir }}/{{ item.name }}_{{ prune_suffix_script_filename }}.sh 2>&1 | /usr/bin/logger -t borgbackup"
+ day: "{{ (item.day | default(1)) + (item.random_day | random(seed=item.name + check_suffix_script_filename + ansible_host))%28 if item.random_day is defined else item.day | default('*') }}"
+ hour: "{{ (item.hour | default(1)) + (item.random_hour | random(seed=item.name + prune_suffix_script_filename + ansible_host))%24 if item.random_hour is defined else item.hour | default(2) }}"
+ minute: "{{ (item.minute | default(0)) + (item.random_minute | random(seed=ansible_host + item.name + prune_suffix_script_filename))%60 if item.random_minute is defined else item.minute | default(0) }}"
+ state: present
+ cron_file: "borgbackup_{{ item.name }}_{{ prune_suffix_script_filename }}"
+ with_items: "{{ borgbackup_prune_jobs }}"
+ when: borgbackup_prune_enabled
+
+- name: deploy borg prune fake logs, when no log yet
+ shell: echo -ne "FAKE LOG\nterminating with success status, rc 0\n" | tee "{{ borgbackup_client_lastlog_dir }}/{{ item.name }}_{{ prune_suffix_script_filename }}.lastlog"
+ args:
+ chdir: "{{ borgbackup_client_lastlog_dir }}"
+ creates: "{{ borgbackup_client_lastlog_dir }}/{{ item.name }}_{{ prune_suffix_script_filename }}.lastlog"
+ with_items: "{{ borgbackup_prune_jobs }}"
+
+#
+# borg check scripts
+#
+- name: deploy borg check scripts
+ template:
+ dest: "{{ borgbackup_client_scripts_dir }}/{{ item.name }}_{{ check_suffix_script_filename }}.sh"
+ src: check_job.sh.j2
+ owner: root
+ group: root
+ mode: 0700
+ with_items: "{{ borgbackup_check_jobs }}"
+ when: borgbackup_check_enabled
+
+- name: schedule borg check scripts on cron
+ cron:
+ name: "borg check {{ item.name }}"
+ user: root
+ job: "{{ borgbackup_client_scripts_dir }}/{{ item.name }}_{{ check_suffix_script_filename }}.sh 2>&1 | /usr/bin/logger -t borgbackup"
+ day: "{{ (item.day | default(1)) + (item.random_day | random(seed=item.name + check_suffix_script_filename + ansible_host))%28 if item.random_day is defined else item.day | default(1) }}"
+ hour: "{{ (item.hour | default(1)) + (item.random_hour | random(seed=item.name + check_suffix_script_filename + ansible_host))%24 if item.random_hour is defined else item.hour | default(3) }}"
+ minute: "{{ (item.minute | default(0)) + (item.random_minute | random(seed=ansible_host + item.name + check_suffix_script_filename))%60 if item.random_minute is defined else item.minute | default(0) }}"
+ state: present
+ cron_file: "borgbackup_{{ item.name }}_{{ check_suffix_script_filename }}"
+ with_items: "{{ borgbackup_check_jobs }}"
+ when: borgbackup_check_enabled
+
+- name: deploy borg check fake logs, when no log yet
+ shell: echo -ne "FAKE LOG\nterminating with success status, rc 0\n" | tee "{{ borgbackup_client_lastlog_dir }}/{{ item.name }}_{{ check_suffix_script_filename }}.lastlog"
+ args:
+ chdir: "{{ borgbackup_client_lastlog_dir }}"
+ creates: "{{ borgbackup_client_lastlog_dir }}/{{ item.name }}_{{ check_suffix_script_filename }}.lastlog"
+ with_items: "{{ borgbackup_check_jobs }}"
diff --git a/roles/borg_client/tasks/borgbackup_install.yml b/roles/borg_client/tasks/borgbackup_install.yml
new file mode 100644
index 0000000..10b4fff
--- /dev/null
+++ b/roles/borg_client/tasks/borgbackup_install.yml
@@ -0,0 +1,21 @@
+---
+- name: borgbackup - download borg binary
+ get_url:
+ url: "{{ borgbackup_binary_uri }}"
+ dest: "{{ borgbackup_binary }}-{{ borgbackup_binary_version }}"
+ mode: "755"
+ when: not borgbackup_install_from_repo
+
+- name: borgbackup - link install
+ file:
+ src: "{{ borgbackup_binary }}-{{ borgbackup_binary_version }}"
+ dest: "{{ borgbackup_binary }}"
+ state: link
+ force: yes
+ when: not borgbackup_install_from_repo
+
+- name: borgbackup - install borgbackup
+ package:
+ name: borg
+ state: latest
+ when: borgbackup_install_from_repo
diff --git a/roles/borg_client/tasks/main.yml b/roles/borg_client/tasks/main.yml
new file mode 100644
index 0000000..b59598e
--- /dev/null
+++ b/roles/borg_client/tasks/main.yml
@@ -0,0 +1,6 @@
+---
+- import_tasks: borgbackup_install.yml
+ tags: [ borg ]
+
+- import_tasks: borgbackup_client.yml
+ tags: [ borg ]
diff --git a/roles/borg_client/templates/check_job.sh.j2 b/roles/borg_client/templates/check_job.sh.j2
new file mode 100644
index 0000000..ddcaf84
--- /dev/null
+++ b/roles/borg_client/templates/check_job.sh.j2
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+set -e
+
+export BORG_RSH="ssh -i {{ borgbackup_client_ssh_key_file }}"
+export BORG_PASSPHRASE="{{ borgbackup_passphrase }}"
+
+REPOSITORY={{ borgbackup_server_user }}@{{ borgbackup_client_backup_server_lanfreebackup | default(borgbackup_client_backup_server) }}:{{ item.name }}
+
+{{ borgbackup_binary }} check --show-rc --verbose \
+ {{ item.check_options }} \
+ $REPOSITORY \
+ 2>&1 | tee {{ borgbackup_client_lastlog_dir }}/{{ item.name }}_{{ check_suffix_script_filename }}.lastlog \
+ | /usr/bin/logger -t borgbackup_check_{{ item.name }}_{{ borgbackup_client_backup_server }}
diff --git a/roles/borg_client/templates/create_job.sh.j2 b/roles/borg_client/templates/create_job.sh.j2
new file mode 100644
index 0000000..08564b1
--- /dev/null
+++ b/roles/borg_client/templates/create_job.sh.j2
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+set -e
+
+export BORG_RSH="ssh -i {{ borgbackup_client_ssh_key_file }}"
+export BORG_PASSPHRASE="{{ borgbackup_passphrase }}"
+
+REPOSITORY={{ borgbackup_server_user }}@{{ borgbackup_client_backup_server_lanfreebackup | default(borgbackup_client_backup_server) }}:{{ item.name }}
+
+{{ borgbackup_binary }} create --show-rc --verbose --stats \
+ {{ item.options | default('--compression zlib,6') }} \
+ $REPOSITORY::{{ ansible_hostname }}-$(date +%Y-%m-%d_%H-%M) \
+ {{ item.directories | join(' ') }} \
+ {% for e in item.excludes %}
+ --exclude '{{ e }}' \
+ {% endfor %}
+ 2>&1 | tee {{ borgbackup_client_lastlog_dir }}/{{ item.name }}_{{ create_suffix_script_filename }}.lastlog \
+ | /usr/bin/logger -t borgbackup_backup_{{ item.name }}_{{ borgbackup_client_backup_server }}
\ No newline at end of file
diff --git a/roles/borg_client/templates/prune_job.sh.j2 b/roles/borg_client/templates/prune_job.sh.j2
new file mode 100644
index 0000000..5977439
--- /dev/null
+++ b/roles/borg_client/templates/prune_job.sh.j2
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+set -e
+
+export BORG_RSH="ssh -i {{ borgbackup_client_ssh_key_file }}"
+export BORG_PASSPHRASE="{{ borgbackup_passphrase }}"
+
+REPOSITORY={{ borgbackup_server_user }}@{{ borgbackup_client_backup_server_lanfreebackup | default(borgbackup_client_backup_server) }}:{{ item.name }}
+
+{{ borgbackup_binary }} prune --show-rc --verbose --stats \
+ {{ item.prune_options }} \
+ $REPOSITORY \
+ 2>&1 | tee {{ borgbackup_client_lastlog_dir }}/{{ item.name }}_{{ prune_suffix_script_filename }}.lastlog \
+ | /usr/bin/logger -t borgbackup_prune_{{ item.name }}_{{ borgbackup_client_backup_server }}
diff --git a/roles/borg_server/.travis.yml b/roles/borg_server/.travis.yml
new file mode 100644
index 0000000..36bbf62
--- /dev/null
+++ b/roles/borg_server/.travis.yml
@@ -0,0 +1,29 @@
+---
+language: python
+python: "2.7"
+
+# Use the new container infrastructure
+sudo: false
+
+# Install ansible
+addons:
+ apt:
+ packages:
+ - python-pip
+
+install:
+ # Install ansible
+ - pip install ansible
+
+ # Check ansible version
+ - ansible --version
+
+ # Create ansible.cfg with correct roles_path
+ - printf '[defaults]\nroles_path=../' >ansible.cfg
+
+script:
+ # Basic role syntax check
+ - ansible-playbook tests/test.yml -i tests/inventory --syntax-check
+
+notifications:
+ webhooks: https://galaxy.ansible.com/api/v1/notifications/
\ No newline at end of file
diff --git a/roles/borg_server/LICENSE b/roles/borg_server/LICENSE
new file mode 100644
index 0000000..8dada3e
--- /dev/null
+++ b/roles/borg_server/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/roles/borg_server/README.md b/roles/borg_server/README.md
new file mode 100644
index 0000000..ff482ee
--- /dev/null
+++ b/roles/borg_server/README.md
@@ -0,0 +1,59 @@
+Borgbackup
+==========
+
+Ansible [Borgbackup](https://borgbackup.readthedocs.io/en/stable/) role.
+
+Features:
+ * Repository or binary installation
+ * Schedules regular backup jobs
+ * Schedules regular prune jobs to keep backup windows clean
+ * Flexible configuration to list backup targets
+
+Role Variables
+--------------
+
+see `defaults/main.yml`
+
+Example Playbook
+----------------
+
+ - hosts: all
+ roles:
+ - role: SphericalElephant.borgbackup
+ borgbackup_client: True
+ borgbackup_client_backup_server: backup01.example.com
+ borgbackup_create_jobs:
+ - name: system
+ day: "*"
+ hour: "0"
+ minute: "{{ 59 | random }}"
+ directories:
+ - /etc
+ - /home
+ - /var
+ excludes:
+ - 're:^/var/lib/apt'
+ - 're:^/var/[^/]+\/cache/'
+ borgbackup_prune_jobs:
+ - name: system
+ prune_options: "--keep-daily=7 --keep-weekly=4"
+ day: "*"
+ hour: "8"
+ minute: "0"
+ borgbackup_check_jobs:
+ - name: system
+ check_options: "--lock-wait 28800"
+ day: "1"
+ hour: "12"
+ minute: "0"
+
+
+You can easily assign client and server attributes from your inventory with something similar to the following:
+
+ borgbackup_client: "{{ (inventory_hostname in groups.borgbackup_server)|ternary(False, True) }}"
+ borgbackup_client_backup_server: "{{ groups.borgbackup_server[0] }}"
+
+License
+-------
+
+Apache 2.0
diff --git a/roles/borg_server/defaults/main.yml b/roles/borg_server/defaults/main.yml
new file mode 100644
index 0000000..2ba6d45
--- /dev/null
+++ b/roles/borg_server/defaults/main.yml
@@ -0,0 +1,14 @@
+---
+borgbackup_install_from_repo: False
+borgbackup_binary_version: "1.1.6"
+borgbackup_binary_platform: "borg-linux64"
+borgbackup_binary_uri: "https://github.com/borgbackup/borg/releases/download/{{ borgbackup_binary_version }}/{{ borgbackup_binary_platform }}"
+borgbackup_binary: "/usr/local/bin/borg"
+
+borgbackup_server_user: "backup"
+borgbackup_server_group: "backup"
+borgbackup_server_home: "/home/backup"
+borgbackup_server_pool: "{{ borgbackup_server_home }}/repos"
+
+borgbackup_encryption_mode: "none"
+borgbackup_passphrase: "yoursecret"
diff --git a/roles/borg_server/meta/main.yml b/roles/borg_server/meta/main.yml
new file mode 100644
index 0000000..fc83234
--- /dev/null
+++ b/roles/borg_server/meta/main.yml
@@ -0,0 +1,20 @@
+galaxy_info:
+ author: Farhad Shahbazi
+ description: Borgbackup
+ company: Spherical Elephant GmbH
+ license: Apache
+ min_ansible_version: 2.1
+ platforms:
+ - name: Ubuntu
+ versions:
+ - all
+ - name: Debian
+ versions:
+ - jessie
+ - sid
+ - stretch
+ - name: Archlinux
+ galaxy_tags:
+ - backup
+
+dependencies: []
diff --git a/roles/borg_server/tasks/borgbackup_install.yml b/roles/borg_server/tasks/borgbackup_install.yml
new file mode 100644
index 0000000..10b4fff
--- /dev/null
+++ b/roles/borg_server/tasks/borgbackup_install.yml
@@ -0,0 +1,21 @@
+---
+- name: borgbackup - download borg binary
+ get_url:
+ url: "{{ borgbackup_binary_uri }}"
+ dest: "{{ borgbackup_binary }}-{{ borgbackup_binary_version }}"
+ mode: "755"
+ when: not borgbackup_install_from_repo
+
+- name: borgbackup - link install
+ file:
+ src: "{{ borgbackup_binary }}-{{ borgbackup_binary_version }}"
+ dest: "{{ borgbackup_binary }}"
+ state: link
+ force: yes
+ when: not borgbackup_install_from_repo
+
+- name: borgbackup - install borgbackup
+ package:
+ name: borg
+ state: latest
+ when: borgbackup_install_from_repo
diff --git a/roles/borg_server/tasks/borgbackup_server.yml b/roles/borg_server/tasks/borgbackup_server.yml
new file mode 100644
index 0000000..2b64ed4
--- /dev/null
+++ b/roles/borg_server/tasks/borgbackup_server.yml
@@ -0,0 +1,40 @@
+---
+- name: borg_server - create group
+ group:
+ name: "{{ borgbackup_server_group }}"
+ state: present
+
+- name: borg_server - create user
+ user:
+ name: "{{ borgbackup_server_user }}"
+ group: "{{ borgbackup_server_group }}"
+ groups:
+ home: "{{ borgbackup_server_home }}"
+ createhome: yes
+ shell: /bin/bash
+ state: present
+
+- name: borg_server - manage permissions
+ file:
+ path: "{{ item }}"
+ owner: "{{ borgbackup_server_user }}"
+ group: "{{ borgbackup_server_group }}"
+ mode: 0700
+ state: directory
+ with_items:
+ - "{{ borgbackup_server_home }}"
+ - "{{ borgbackup_server_home }}/.ssh"
+ - "{{ borgbackup_server_pool }}"
+
+- name : borg_server - create authorized_keys
+ stat:
+ path: "{{ borgbackup_server_home }}/.ssh/authorized_keys"
+ register: authorized_keys
+
+- name: borg_server - manage permissions for authorized_keys
+ file:
+ path: "{{ borgbackup_server_home }}/.ssh/authorized_keys"
+ owner: "{{ borgbackup_server_user }}"
+ group: "{{ borgbackup_server_group }}"
+ mode: 0600
+ state: '{{ "file" if authorized_keys.stat.exists else "touch" }}'
diff --git a/roles/borg_server/tasks/main.yml b/roles/borg_server/tasks/main.yml
new file mode 100644
index 0000000..0394b37
--- /dev/null
+++ b/roles/borg_server/tasks/main.yml
@@ -0,0 +1,6 @@
+---
+- import_tasks: borgbackup_install.yml
+ tags: [ borg ]
+
+- import_tasks: borgbackup_server.yml
+ tags: [ borg ]
diff --git a/roles/common b/roles/common
index e347803..32cb76a 160000
--- a/roles/common
+++ b/roles/common
@@ -1 +1 @@
-Subproject commit e347803f6257b04aae3c3ef19a6c11ce7c56c5b6
+Subproject commit 32cb76a1d5eed1ec5a983325f7193298913ff333
diff --git a/roles/gitea/templates/gitea.conf.j2 b/roles/gitea/templates/gitea.conf.j2
index e209bb0..5a52c17 100644
--- a/roles/gitea/templates/gitea.conf.j2
+++ b/roles/gitea/templates/gitea.conf.j2
@@ -1,3 +1,5 @@
+# {{ ansible_managed }}
+
; App name that shows on every page title
APP_NAME = FET-Gitea
; Change it if you run locally
diff --git a/roles/maria-storage/handlers/main.yml b/roles/maria-storage/handlers/main.yml
new file mode 100644
index 0000000..03a5700
--- /dev/null
+++ b/roles/maria-storage/handlers/main.yml
@@ -0,0 +1,6 @@
+---
+- name: reload nfs
+ service: name=nfs-kernel-server enabled=yes state=reloaded
+
+- name: restart mariadb
+ service: name=mysql enabled=yes state=restarted
diff --git a/roles/maria-storage/tasks/main.yml b/roles/maria-storage/tasks/main.yml
new file mode 100644
index 0000000..40bdc0a
--- /dev/null
+++ b/roles/maria-storage/tasks/main.yml
@@ -0,0 +1,6 @@
+---
+- import_tasks: nfs.yml
+ tags: [ maria-storage, nfs ]
+
+- import_tasks: mariadb.yml
+ tags: [ maria-storage, mariadb ]
diff --git a/roles/maria-storage/tasks/mariadb.yml b/roles/maria-storage/tasks/mariadb.yml
new file mode 100644
index 0000000..87e42fa
--- /dev/null
+++ b/roles/maria-storage/tasks/mariadb.yml
@@ -0,0 +1,7 @@
+---
+- name: mariadb - install mariadb-server
+ package: name=mariadb-server
+
+- name: mariadb - config /etc/mysql/my.cnf
+ template: dest=/etc/mysql/my.cnf src=my.cnf.j2 owner=root group=root mode=0644
+ notify: restart mariadb
diff --git a/roles/maria-storage/tasks/nfs.yml b/roles/maria-storage/tasks/nfs.yml
new file mode 100644
index 0000000..26617b4
--- /dev/null
+++ b/roles/maria-storage/tasks/nfs.yml
@@ -0,0 +1,7 @@
+---
+- name: mariadb - install nfs-kernel-server
+ package: name=nfs-kernel-server
+
+- name: mariadb - nfs /etc/exports
+ template: dest=/etc/exports src=exports.j2 owner=root group=root mode=0644
+ notify: reload nfs
diff --git a/roles/maria-storage/templates/exports.j2 b/roles/maria-storage/templates/exports.j2
new file mode 100644
index 0000000..6b1d9a3
--- /dev/null
+++ b/roles/maria-storage/templates/exports.j2
@@ -0,0 +1,5 @@
+# {{ ansible_managed }}
+
+/srv/save/fetsite_production_1 192.168.95.0/24(rw,sync,acl,insecure,no_subtree_check)
+/srv/save/web_doc 192.168.95.0/24(rw,sync,acl,insecure,no_subtree_check)
+/srv/save/git_repo 192.168.95.0/24(rw,sync,acl,insecure,no_subtree_check)
diff --git a/roles/maria-storage/templates/my.cnf.j2 b/roles/maria-storage/templates/my.cnf.j2
new file mode 100644
index 0000000..737fbf1
--- /dev/null
+++ b/roles/maria-storage/templates/my.cnf.j2
@@ -0,0 +1,129 @@
+# {{ ansible_managed }}
+#
+# The MySQL database server configuration file.
+#
+# You can copy this to one of:
+# - "/etc/mysql/my.cnf" to set global options,
+# - "~/.my.cnf" to set user-specific options.
+#
+# One can use all long options that the program supports.
+# Run program with --help to get a list of available options and with
+# --print-defaults to see which it would actually understand and use.
+#
+# For explanations see
+# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
+
+# This will be passed to all mysql clients
+# It has been reported that passwords should be enclosed with ticks/quotes
+# escpecially if they contain "#" chars...
+# Remember to edit /etc/mysql/debian.cnf when changing the socket location.
+[client]
+port = 3306
+socket = /var/run/mysqld/mysqld.sock
+
+# Here is entries for some specific programs
+# The following values assume you have at least 32M ram
+
+# This was formally known as [safe_mysqld]. Both versions are currently parsed.
+[mysqld_safe]
+socket = /var/run/mysqld/mysqld.sock
+nice = 0
+
+[mysqld]
+#
+# * Basic Settings
+#
+user = mysql
+pid-file = /var/run/mysqld/mysqld.pid
+socket = /var/run/mysqld/mysqld.sock
+port = 3306
+basedir = /usr
+datadir = /var/lib/mysql
+tmpdir = /tmp
+lc-messages-dir = /usr/share/mysql
+skip-external-locking
+#
+# Instead of skip-networking the default is now to listen only on
+# localhost which is more compatible and is not less secure.
+bind-address = 0.0.0.0
+#
+# * Fine Tuning
+#
+key_buffer = 16M
+max_allowed_packet = 16M
+thread_stack = 192K
+thread_cache_size = 8
+# This replaces the startup script and checks MyISAM tables if needed
+# the first time they are touched
+myisam-recover = BACKUP
+#max_connections = 100
+#table_cache = 64
+#thread_concurrency = 10
+#
+# * Query Cache Configuration
+#
+query_cache_limit = 1M
+query_cache_size = 16M
+#
+# * Logging and Replication
+#
+# Both location gets rotated by the cronjob.
+# Be aware that this log type is a performance killer.
+# As of 5.1 you can enable the log at runtime!
+#general_log_file = /var/log/mysql/mysql.log
+#general_log = 1
+#
+# Error log - should be very few entries.
+#
+log_error = /var/log/mysql/error.log
+#
+# Here you can see queries with especially long duration
+#slow_query_log_file = /var/log/mysql/mysql-slow.log
+#slow_query_log = 1
+#long_query_time = 2
+#log_queries_not_using_indexes
+#
+# The following can be used as easy to replay backup logs or for replication.
+# note: if you are setting up a replication slave, see README.Debian about
+# other settings you may need to change.
+#server-id = 1
+#log_bin = /var/log/mysql/mysql-bin.log
+expire_logs_days = 10
+max_binlog_size = 100M
+#binlog_do_db = include_database_name
+#binlog_ignore_db = include_database_name
+#
+# * InnoDB
+#
+# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
+# Read the manual for more InnoDB related options. There are many!
+#
+# * Security Features
+#
+# Read the manual, too, if you want chroot!
+# chroot = /var/lib/mysql/
+#
+# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
+#
+# ssl-ca=/etc/mysql/cacert.pem
+# ssl-cert=/etc/mysql/server-cert.pem
+# ssl-key=/etc/mysql/server-key.pem
+
+
+
+[mysqldump]
+quick
+quote-names
+max_allowed_packet = 16M
+
+[mysql]
+#no-auto-rehash # faster start of mysql but no tab completition
+
+[isamchk]
+key_buffer = 16M
+
+#
+# * IMPORTANT: Additional settings that can override those from this file!
+# The files must end with '.cnf', otherwise they'll be ignored.
+#
+!includedir /etc/mysql/conf.d/
diff --git a/roles/scans/defaults/main.yml b/roles/scans/defaults/main.yml
new file mode 100644
index 0000000..9d06c5f
--- /dev/null
+++ b/roles/scans/defaults/main.yml
@@ -0,0 +1,4 @@
+---
+samba_users:
+ - name: dell
+ smbpasswd: delloscanner
diff --git a/roles/scans/handlers/main.yml b/roles/scans/handlers/main.yml
new file mode 100644
index 0000000..b90ebae
--- /dev/null
+++ b/roles/scans/handlers/main.yml
@@ -0,0 +1,3 @@
+---
+ - name: restart samba
+ service: name=smbd enabled=yes state=restarted
diff --git a/roles/scans/tasks/main.yml b/roles/scans/tasks/main.yml
new file mode 100644
index 0000000..d61bacc
--- /dev/null
+++ b/roles/scans/tasks/main.yml
@@ -0,0 +1,3 @@
+---
+- import_tasks: samba.yml
+ tags: [ samba ]
diff --git a/roles/scans/tasks/samba.yml b/roles/scans/tasks/samba.yml
new file mode 100644
index 0000000..66b0e6f
--- /dev/null
+++ b/roles/scans/tasks/samba.yml
@@ -0,0 +1,20 @@
+---
+- name: samba - install
+ package: name={{ item }}
+ with_items:
+ - samba
+
+- name: samba - /etc/smb.conf
+ template: dest=/etc/smb.conf src=smb.conf.j2 owner=root group=root mode=0644
+ notify: restart samba
+
+- name: samba - create users group
+ group: name=users gid=2000
+
+- name: samba - add smb users
+ user: "name={{ item['name'] }} shell=/bin/false group=users"
+ with_items: '{{ samba_users }}'
+
+- name: samba - set smbpasswds
+ shell: "(echo {{ item['smbpasswd'] }}; echo {{ item['smbpasswd'] }}) | smbpasswd -s -a {{ item['name'] }}"
+ with_items: '{{ samba_users }}'
diff --git a/roles/scans/templates/smb.conf.j2 b/roles/scans/templates/smb.conf.j2
new file mode 100644
index 0000000..0ac3ea9
--- /dev/null
+++ b/roles/scans/templates/smb.conf.j2
@@ -0,0 +1,26 @@
+# {{ ansible_managed }}
+
+[global]
+
+ workgroup = WORKGROUP
+ server string = PROGRESS
+
+ security = user
+ hosts allow = 192.168.86.14
+
+ log file = /var/log/samba/%m.log
+ max log size = 500
+
+ dns proxy = no
+ load printers = no
+ printing = bsd
+ printcap name = /dev/null
+ disable spoolss = yes
+
+[scans]
+ comment = scans
+ path = /mnt/scans
+ valid users = dell
+ public = no
+ browseable = yes
+ writeable = yes
diff --git a/site.yml b/site.yml
index 4b2aa7e..1588a60 100644
--- a/site.yml
+++ b/site.yml
@@ -34,22 +34,36 @@
roles:
- gitea
-- hosts: backup
+- hosts: sojus
roles:
- - backup
+ - borg_server
-- hosts: backupclient
+- hosts: maria-storage
roles:
- - backupclient
+# - maria-storage
+ - borg_client
-- hosts: ruby
- become: True
+- hosts: baroness
roles:
- - rvm1-ansible
-
-- hosts: test_common
- become: True
+ - borg_client
- hosts: fetlab
roles:
- fetlab
+
+- hosts: buran
+ roles:
+ - borg_client
+
+- hosts: nauka
+ roles:
+ - borg_client
+
+- hosts: progress
+ roles:
+ - scans
+
+#- hosts: ruby
+# become: True
+# roles:
+# - rvm1-ansible
diff --git a/templates/interfaces_ariane.j2 b/templates/interfaces_ariane.j2
new file mode 100644
index 0000000..b80f6ab
--- /dev/null
+++ b/templates/interfaces_ariane.j2
@@ -0,0 +1,19 @@
+# {{ ansible_managed }}
+
+source /etc/network/interfaces.d/*
+
+auto lo
+iface lo inet loopback
+
+allow-hotplug enp8s0
+iface enp8s0 inet dhcp
+
+auto br0
+iface br0 inet dhcp
+ bridge_ports enp9s0
+ bridge_fd 0
+ bridge_maxwait 0
+
+dns-nameservers 192.168.86.1
+#dns-nameservers 192.168.86.1 10.0.3.1
+#dns-nameserver 10.0.3.1
diff --git a/templates/iptables_progress_v4.j2 b/templates/iptables_progress_v4.j2
new file mode 100644
index 0000000..09ddf87
--- /dev/null
+++ b/templates/iptables_progress_v4.j2
@@ -0,0 +1,18 @@
+# {{ ansible_managed }}
+
+*filter
+:INPUT DROP [0:0]
+:FORWARD DROP [0:0]
+:OUTPUT ACCEPT [0:0]
+-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
+-A INPUT -p icmp -j ACCEPT
+-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
+-A INPUT -i lo -j ACCEPT
+-A INPUT -p udp -m udp -s {{ printer_ip }}/32 --dport 137 -j ACCEPT
+-A INPUT -p udp -m udp -s {{ printer_ip }}/32 --dport 138 -j ACCEPT
+-A INPUT -m state --state NEW -m tcp -p tcp -s {{ printer_ip }}/32 --dport 139 -j ACCEPT
+-A INPUT -m state --state NEW -m tcp -p tcp -s {{ printer_ip }}/32 --dport 445 -j ACCEPT
+-A INPUT -p tcp -j REJECT --reject-with tcp-reset
+-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
+-A INPUT -j REJECT --reject-with icmp-proto-unreachable
+COMMIT
diff --git a/templates/iptables_progress_v6.j2 b/templates/iptables_progress_v6.j2
new file mode 100644
index 0000000..d2927b5
--- /dev/null
+++ b/templates/iptables_progress_v6.j2
@@ -0,0 +1,12 @@
+# {{ ansible_managed }}
+
+*filter
+:INPUT DROP [0:0]
+:FORWARD DROP [0:0]
+:OUTPUT ACCEPT [0:0]
+-A INPUT -p tcp --syn -j DROP
+-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
+-A INPUT -p ipv6-icmp -j ACCEPT
+-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
+-A INPUT -i lo -j ACCEPT
+COMMIT