From efac98f87c5f7e3ee77aee936a258a836391a83a Mon Sep 17 00:00:00 2001 From: Rik Veenboer Date: Thu, 19 Dec 2024 15:13:29 +0100 Subject: [PATCH] snapshot remaining files --- .gitignore | 4 + collectd/etc/collectd.conf | 1077 +++++++++++++++++ collectd/etc/collectd.conf.d/btrfs-data.conf | 5 + collectd/etc/collectd.conf.d/df.conf | 6 + collectd/etc/collectd.conf.d/du-data.conf | 6 + collectd/etc/collectd.conf.d/power-data.conf | 5 + .../etc/collectd.conf.d/speedtest-data.conf | 6 + collectd/usr/local/bin/btrfs-data | 180 +++ collectd/usr/local/bin/du-data | 25 + collectd/usr/local/bin/power-data | 69 ++ collectd/usr/local/bin/speedtest-data | 12 + esphome/.gitignore | 5 + esphome/hub.yaml | 135 +++ esphome/sanne.yaml | 88 ++ homeassistant/automations.yaml | 1 + homeassistant/configuration.yaml | 28 + homeassistant/mqtt.yaml | 67 + homeassistant/scenes.yaml | 0 homeassistant/scripts.yaml | 0 openvpn-server/openvpn.conf | 31 + openvpn-server/ovpn_env.sh | 25 + openvpn-server/setup.sh | 9 + seafile/conf/ccnet.conf | 3 + seafile/conf/conf | 1 + seafile/conf/gunicorn.conf.py | 16 + seafile/conf/seafile.conf | 3 + seafile/conf/seahub_settings.py | 10 + seafile/version | 1 + 28 files changed, 1818 insertions(+) create mode 100644 collectd/etc/collectd.conf create mode 100644 collectd/etc/collectd.conf.d/btrfs-data.conf create mode 100644 collectd/etc/collectd.conf.d/df.conf create mode 100644 collectd/etc/collectd.conf.d/du-data.conf create mode 100644 collectd/etc/collectd.conf.d/power-data.conf create mode 100644 collectd/etc/collectd.conf.d/speedtest-data.conf create mode 100755 collectd/usr/local/bin/btrfs-data create mode 100755 collectd/usr/local/bin/du-data create mode 100755 collectd/usr/local/bin/power-data create mode 100755 collectd/usr/local/bin/speedtest-data create mode 100644 esphome/.gitignore create mode 100644 esphome/hub.yaml create mode 100644 esphome/sanne.yaml create mode 100644 homeassistant/automations.yaml create mode 100644 homeassistant/configuration.yaml create mode 100644 homeassistant/mqtt.yaml create mode 100644 homeassistant/scenes.yaml create mode 100644 homeassistant/scripts.yaml create mode 100644 openvpn-server/openvpn.conf create mode 100644 openvpn-server/ovpn_env.sh create mode 100755 openvpn-server/setup.sh create mode 100644 seafile/conf/ccnet.conf create mode 120000 seafile/conf/conf create mode 100644 seafile/conf/gunicorn.conf.py create mode 100644 seafile/conf/seafile.conf create mode 100644 seafile/conf/seahub_settings.py create mode 100644 seafile/version diff --git a/.gitignore b/.gitignore index 4876f95..4563aec 100644 --- a/.gitignore +++ b/.gitignore @@ -36,6 +36,10 @@ openvpn-server/pki/ openvpn-server/*.ovpn pgadmin/ rsnapshot/var/ +seafile/seafile-data/ +seafile/seafile-server-* +seafile/seahub-data/ seafile/database/ seafile/server/ inverter/data/ +grafana/ diff --git a/collectd/etc/collectd.conf b/collectd/etc/collectd.conf new file mode 100644 index 0000000..af316d9 --- /dev/null +++ b/collectd/etc/collectd.conf @@ -0,0 +1,1077 @@ +# Config file for collectd(1). +# +# Some plugins need additional configuration and are disabled by default. +# Please read collectd.conf(5) for details. +# +# You should also read /usr/share/doc/collectd-core/README.Debian.plugins +# before enabling any more plugins. + +############################################################################## +# Global # +#----------------------------------------------------------------------------# +# Global settings for the daemon. # +############################################################################## + +Hostname "sepia" +FQDNLookup true +#BaseDir "/var/lib/collectd" +#PluginDir "/usr/lib/collectd" +#TypesDB "/usr/share/collectd/types.db" "/etc/collectd/my_types.db" + +#----------------------------------------------------------------------------# +# When enabled, plugins are loaded automatically with the default options # +# when an appropriate block is encountered. # +# Disabled by default. # +#----------------------------------------------------------------------------# +#AutoLoadPlugin false + +#----------------------------------------------------------------------------# +# Interval at which to query values. This may be overwritten on a per-plugin # +# base by using the 'Interval' option of the LoadPlugin block: # +# # +# Interval 60 # +# # +#----------------------------------------------------------------------------# +#Interval 10 +Interval 60 + +#Timeout 2 +#ReadThreads 5 +#WriteThreads 5 + +# Limit the size of the write queue. Default is no limit. Setting up a limit +# is recommended for servers handling a high volume of traffic. +#WriteQueueLimitHigh 1000000 +#WriteQueueLimitLow 800000 + +############################################################################## +# Logging # +#----------------------------------------------------------------------------# +# Plugins which provide logging functions should be loaded first, so log # +# messages generated when loading or configuring other plugins can be # +# accessed. # +############################################################################## + +LoadPlugin logfile +#LoadPlugin syslog + + + LogLevel "info" + File "/var/lib/collectd/log/collectd.log" + Timestamp true + PrintSeverity false + + +# +# LogLevel info +# + +############################################################################## +# LoadPlugin section # +#----------------------------------------------------------------------------# +# Specify what features to activate. # +############################################################################## + +#LoadPlugin aggregation +#LoadPlugin amqp +#LoadPlugin apache +#LoadPlugin apcups +#LoadPlugin ascent +#LoadPlugin battery +#LoadPlugin bind +#LoadPlugin cgroups +#LoadPlugin conntrack +#LoadPlugin contextswitch +LoadPlugin cpu +LoadPlugin cpufreq +#LoadPlugin csv +#LoadPlugin curl +#LoadPlugin curl_json +#LoadPlugin curl_xml +#LoadPlugin dbi +LoadPlugin df +LoadPlugin disk +#LoadPlugin dns +#LoadPlugin email +LoadPlugin entropy +#LoadPlugin ethstat +#LoadPlugin exec +#LoadPlugin filecount +#LoadPlugin fscache +#LoadPlugin gmond +#LoadPlugin hddtemp +LoadPlugin interface +#LoadPlugin ipmi +#LoadPlugin iptables +#LoadPlugin ipvs +LoadPlugin irq +#LoadPlugin java +#LoadPlugin libvirt +LoadPlugin load +#LoadPlugin lvm +#LoadPlugin madwifi +#LoadPlugin mbmon +LoadPlugin md +#LoadPlugin memcachec +#LoadPlugin memcached +LoadPlugin memory +#LoadPlugin modbus +#LoadPlugin multimeter +#LoadPlugin mysql +#LoadPlugin netlink +LoadPlugin network +LoadPlugin nfs +#LoadPlugin nginx +#LoadPlugin notify_desktop +#LoadPlugin notify_email +#LoadPlugin ntpd +#LoadPlugin numa +#LoadPlugin nut +#LoadPlugin olsrd +#LoadPlugin openvpn +# +# Globals true +# +#LoadPlugin pinba +#LoadPlugin ping +#LoadPlugin postgresql +#LoadPlugin powerdns +LoadPlugin processes +#LoadPlugin protocols +# +# Globals true +# +#LoadPlugin rrdcached +LoadPlugin rrdtool +LoadPlugin sensors +#LoadPlugin serial +#LoadPlugin snmp +#LoadPlugin statsd +LoadPlugin swap +#LoadPlugin table +#LoadPlugin tail +#LoadPlugin tail_csv +#LoadPlugin tcpconns +#LoadPlugin teamspeak2 +#LoadPlugin ted +LoadPlugin thermal +#LoadPlugin tokyotyrant +#LoadPlugin unixsock +LoadPlugin uptime +LoadPlugin users +#LoadPlugin uuid +#LoadPlugin varnish +#LoadPlugin vmem +#LoadPlugin vserver +#LoadPlugin wireless +#LoadPlugin write_graphite +#LoadPlugin write_http +#LoadPlugin write_riemann +LoadPLugin smart + +############################################################################## +# Plugin configuration # +#----------------------------------------------------------------------------# +# In this section configuration stubs for each plugin are provided. A desc- # +# ription of those options is available in the collectd.conf(5) manual page. # +############################################################################## + +# +# +# #Host "unspecified" +# Plugin "cpu" +# PluginInstance "/[0,2,4,6,8]$/" +# Type "cpu" +# #TypeInstance "unspecified" +# +# SetPlugin "cpu" +# SetPluginInstance "even-%{aggregation}" +# +# GroupBy "Host" +# GroupBy "TypeInstance" +# +# CalculateNum false +# CalculateSum false +# CalculateAverage true +# CalculateMinimum false +# CalculateMaximum false +# CalculateStddev false +# +# + +# +# +# Host "localhost" +# Port "5672" +# VHost "/" +# User "guest" +# Password "guest" +# Exchange "amq.fanout" +# RoutingKey "collectd" +# Persistent false +# StoreRates false +# +# + +# +# +# URL "http://localhost/server-status?auto" +# User "www-user" +# Password "secret" +# VerifyPeer false +# VerifyHost false +# CACert "/etc/ssl/ca.crt" +# Server "apache" +# +# +# +# URL "http://some.domain.tld/status?auto" +# Host "some.domain.tld" +# Server "lighttpd" +# +# + +# +# Host "localhost" +# Port "3551" +# ReportSeconds true +# + +# +# URL "http://localhost/ascent/status/" +# User "www-user" +# Password "secret" +# VerifyPeer false +# VerifyHost false +# CACert "/etc/ssl/ca.crt" +# + +# +# URL "http://localhost:8053/" +# +# ParseTime false +# +# OpCodes true +# QTypes true +# ServerStats true +# ZoneMaintStats true +# ResolverStats false +# MemoryStats true +# +# +# QTypes true +# ResolverStats true +# CacheRRSets true +# +# Zone "127.in-addr.arpa/IN" +# +# + +# +# CGroup "libvirt" +# IgnoreSelected false +# + +# +# DataDir "/var/lib/collectd/csv" +# StoreRates false +# + +# +# +# URL "http://finance.google.com/finance?q=NYSE%3AAMD" +# User "foo" +# Password "bar" +# VerifyPeer false +# VerifyHost false +# CACert "/etc/ssl/ca.crt" +# MeasureResponseTime false +# +# Regex "]*> *([0-9]*\\.[0-9]+) *" +# DSType "GaugeAverage" +# Type "stock_value" +# Instance "AMD" +# +# +# + +# +## See: http://wiki.apache.org/couchdb/Runtime_Statistics +# +# Instance "httpd" +# +# Type "http_requests" +# +# +# +# Type "http_request_methods" +# +# +# +# Type "http_response_codes" +# +# +## Database status metrics: +# +# Instance "dbs" +# +# Type "gauge" +# +# +# Type "counter" +# +# +# Type "bytes" +# +# +# + +# +# +# Host "my_host" +# Instance "some_instance" +# User "collectd" +# Password "thaiNg0I" +# VerifyPeer true +# VerifyHost true +# CACert "/path/to/ca.crt" +# +# +# Type "magic_level" +# InstancePrefix "prefix-" +# InstanceFrom "td[1]" +# ValuesFrom "td[2]/span[@class=\"level\"]" +# +# +# + +# +# +# Statement "SELECT 'customers' AS c_key, COUNT(*) AS c_value \ +# FROM customers_tbl" +# MinVersion 40102 +# MaxVersion 50042 +# +# Type "gauge" +# InstancePrefix "customer" +# InstancesFrom "c_key" +# ValuesFrom "c_value" +# +# +# +# +# Driver "mysql" +# DriverOption "host" "localhost" +# DriverOption "username" "collectd" +# DriverOption "password" "secret" +# DriverOption "dbname" "custdb0" +# SelectDB "custdb0" +# Query "num_of_customers" +# Query "..." +# Host "..." +# +# + +# +# Disk "hda" +# Disk "/sda[23]/" +# IgnoreSelected false +# + +# +# Interface "eth0" +# IgnoreSource "192.168.0.1" +# SelectNumericQueryTypes false +# + +# +# SocketFile "/var/run/collectd-email" +# SocketGroup "collectd" +# SocketPerms "0770" +# MaxConns 5 +# + +# +# Interface "eth0" +# Map "rx_csum_offload_errors" "if_rx_errors" "checksum_offload" +# Map "multicast" "if_multicast" +# MappedOnly false +# + +# +# Exec user "/path/to/exec" +# Exec "user:group" "/path/to/exec" +# NotificationExec user "/path/to/exec" +# + +# +# +# Instance "foodir" +# Name "*.conf" +# MTime "-5m" +# Size "+10k" +# Recursive true +# IncludeHidden false +# +# + +# +# MCReceiveFrom "239.2.11.71" "8649" +# +# +# Type "swap" +# TypeInstance "total" +# DataSource "value" +# +# +# +# Type "swap" +# TypeInstance "free" +# DataSource "value" +# +# + +# +# Host "127.0.0.1" +# Port 7634 +# + +# +# Interface "eth0" +# IgnoreSelected false +# + + Interface "veth*" + IgnoreSelected true + + +# +# Sensor "some_sensor" +# Sensor "another_one" +# IgnoreSelected false +# NotifySensorAdd false +# NotifySensorRemove true +# NotifySensorNotPresent false +# + +# +# Chain "table" "chain" +# + +# +# Irq 7 +# Irq 8 +# Irq 9 +# IgnoreSelected true +# + +# +# JVMArg "-verbose:jni" +# JVMArg "-Djava.class.path=/usr/share/collectd/java/collectd-api.jar" +# +# LoadPlugin "org.collectd.java.GenericJMX" +# +# # See /usr/share/doc/collectd/examples/GenericJMX.conf +# # for an example config. +# +# + +# +# Connection "xen:///" +# RefreshInterval 60 +# Domain "name" +# BlockDevice "name:device" +# InterfaceDevice "name:device" +# IgnoreSelected false +# HostnameFormat name +# InterfaceFormat name +# + +# +# Interface "wlan0" +# IgnoreSelected false +# Source "SysFS" +# WatchSet "None" +# WatchAdd "node_octets" +# WatchAdd "node_rssi" +# WatchAdd "is_rx_acl" +# WatchAdd "is_scan_active" +# + +# +# Host "127.0.0.1" +# Port 411 +# + +# +# Device "/dev/md0" +# IgnoreSelected false +# + +# +# +# Server "localhost" +# Key "page_key" +# +# Regex "(\\d+) bytes sent" +# ExcludeRegex "" +# DSType CounterAdd +# Type "ipt_octets" +# Instance "type_instance" +# +# +# + +# +# +# Socket "/var/run/memcached.sock" +# or: +# Host "127.0.0.1" +# Port "11211" +# +# + +# +# +# RegisterBase 1234 +# RegisterType float +# Type gauge +# Instance "..." +# +# +# +# Address "addr" +# Port "1234" +# Interval 60 +# +# +# Instance "foobar" # optional +# Collect "data_name" +# +# +# + +# +# +# Host "database.serv.er" +# Port "3306" +# User "db_user" +# Password "secret" +# Database "db_name" +# MasterStats true +# +# +# +# Host "localhost" +# Socket "/var/run/mysql/mysqld.sock" +# SlaveStats true +# SlaveNotifications true +# +# + +# +# Interface "All" +# VerboseInterface "All" +# QDisc "eth0" "pfifo_fast-1:0" +# Class "ppp0" "htb-1:10" +# Filter "ppp0" "u32-1:0" +# IgnoreSelected false +# + +# +# # client setup: +# Server "ff18::efc0:4a42" "25826" +# +# SecurityLevel Encrypt +# Username "user" +# Password "secret" +# Interface "eth0" +# +# TimeToLive "128" +# +# # server setup: +# Listen "ff18::efc0:4a42" "25826" +# +# SecurityLevel Sign +# AuthFile "/etc/collectd/passwd" +# Interface "eth0" +# +# MaxPacketSize 1024 +# +# # proxy setup (client and server as above): +# Forward true +# +# # statistics about the network plugin itself +# ReportStats false +# +# # "garbage collection" +# CacheFlush 1800 +# + +# +# URL "http://localhost/status?auto" +# User "www-user" +# Password "secret" +# VerifyPeer false +# VerifyHost false +# CACert "/etc/ssl/ca.crt" +# + +# +# OkayTimeout 1000 +# WarningTimeout 5000 +# FailureTimeout 0 +# + +# +# SMTPServer "localhost" +# SMTPPort 25 +# SMTPUser "my-username" +# SMTPPassword "my-password" +# From "collectd@main0server.com" +# # on . +# # Beware! Do not use not more than two placeholders (%)! +# Subject "[collectd] %s on %s!" +# Recipient "email1@domain1.net" +# Recipient "email2@domain2.com" +# + +# +# Host "localhost" +# Port 123 +# ReverseLookups false +# IncludeUnitID true +# + +# +# UPS "upsname@hostname:port" +# + +# +# Host "127.0.0.1" +# Port "2006" +# CollectLinks "Summary" +# CollectRoutes "Summary" +# CollectTopology "Summary" +# + +# +# StatusFile "/etc/openvpn/openvpn-status.log" +# ImprovedNamingSchema false +# CollectCompression true +# CollectIndividualUsers true +# CollectUserCount false +# + +# +# IncludeDir "/my/include/path" +# BaseName "Collectd::Plugins" +# EnableDebugger "" +# LoadPlugin Monitorus +# LoadPlugin OpenVZ +# +# +# Foo "Bar" +# Qux "Baz" +# +# + +# +# Address "::0" +# Port "30002" +# +# Host "host name" +# Server "server name" +# Script "script name" +# +# + +# +# Host "host.foo.bar" +# Host "host.baz.qux" +# Interval 1.0 +# Timeout 0.9 +# TTL 255 +# SourceAddress "1.2.3.4" +# Device "eth0" +# MaxMissed -1 +# + +# +# +# Statement "SELECT magic FROM wizard WHERE host = $1;" +# Param hostname +# +# +# Type gauge +# InstancePrefix "magic" +# ValuesFrom "magic" +# +# +# +# +# Statement "SELECT COUNT(type) AS count, type \ +# FROM (SELECT CASE \ +# WHEN resolved = 'epoch' THEN 'open' \ +# ELSE 'resolved' END AS type \ +# FROM tickets) type \ +# GROUP BY type;" +# +# +# Type counter +# InstancePrefix "rt36_tickets" +# InstancesFrom "type" +# ValuesFrom "count" +# +# +# +# +# # See /usr/share/doc/collectd-core/examples/postgresql/collectd_insert.sql for details +# Statement "SELECT collectd_insert($1, $2, $3, $4, $5, $6, $7, $8, $9);" +# StoreRates true +# +# +# +# Host "hostname" +# Port 5432 +# User "username" +# Password "secret" +# +# SSLMode "prefer" +# KRBSrvName "kerberos_service_name" +# +# Query magic +# +# +# +# Interval 60 +# Service "service_name" +# +# Query backend # predefined +# Query rt36_tickets +# +# +# +# Service "collectd_store" +# Writer sqlstore +# # see collectd.conf(5) for details +# CommitInterval 30 +# +# + +# +# +# Collect "latency" +# Collect "udp-answers" "udp-queries" +# Socket "/var/run/pdns.controlsocket" +# +# +# Collect "questions" +# Collect "cache-hits" "cache-misses" +# Socket "/var/run/pdns_recursor.controlsocket" +# +# LocalSocket "/opt/collectd/var/run/collectd-powerdns" +# + +# +# Process "name" +# ProcessMatch "foobar" "/usr/bin/perl foobar\\.pl.*" +# + +# +# Value "/^Tcp:/" +# IgnoreSelected false +# + +# +# ModulePath "/path/to/your/python/modules" +# LogTraces true +# Interactive true +# Import "spam" +# +# +# spam "wonderful" "lovely" +# +# + +# +# DaemonAddress "unix:/var/run/rrdcached.sock" +# DataDir "/var/lib/rrdcached/db/collectd" +# CreateFiles true +# CreateFilesAsync false +# CollectStatistics true +# +# The following settings are rather advanced +# and should usually not be touched: +# StepSize 10 +# HeartBeat 20 +# RRARows 1200 +# RRATimespan 158112000 +# XFF 0.1 +# + + + DataDir "/var/lib/collectd/rrd" +# CacheTimeout 120 +# CacheFlush 900 +# WritesPerSecond 30 +# CreateFilesAsync false +# RandomTimeout 0 +# +# The following settings are rather advanced +# and should usually not be touched: +# StepSize 10 +# HeartBeat 20 +# RRARows 1200 +# RRATimespan 158112000 +# XFF 0.1 + + +# +# SensorConfigFile "/etc/sensors3.conf" +# Sensor "it8712-isa-0290/temperature-temp1" +# Sensor "it8712-isa-0290/fanspeed-fan3" +# Sensor "it8712-isa-0290/voltage-in8" +# IgnoreSelected false +# + +# See /usr/share/doc/collectd/examples/snmp-data.conf.gz for a +# comprehensive sample configuration. +# +# +# Type "voltage" +# Table false +# Instance "input_line1" +# Scale 0.1 +# Values "SNMPv2-SMI::enterprises.6050.5.4.1.1.2.1" +# +# +# Type "users" +# Table false +# Instance "" +# Shift -1 +# Values "HOST-RESOURCES-MIB::hrSystemNumUsers.0" +# +# +# Type "if_octets" +# Table true +# InstancePrefix "traffic" +# Instance "IF-MIB::ifDescr" +# Values "IF-MIB::ifInOctets" "IF-MIB::ifOutOctets" +# +# +# +# Address "192.168.0.2" +# Version 1 +# Community "community_string" +# Collect "std_traffic" +# Inverval 120 +# +# +# Address "192.168.0.42" +# Version 2 +# Community "another_string" +# Collect "std_traffic" "hr_users" +# +# +# Address "192.168.0.3" +# Version 1 +# Community "more_communities" +# Collect "powerplus_voltge_input" +# Interval 300 +# +# + +# +# Host "::" +# Port "8125" +# DeleteCounters false +# DeleteTimers false +# DeleteGauges false +# DeleteSets false +# TimerPercentile 90.0 +# + +# +# ReportByDevice false +# ReportBytes true +# + +# +# +# Instance "slabinfo" +# Separator " " +# +# Type gauge +# InstancePrefix "active_objs" +# InstancesFrom 0 +# ValuesFrom 1 +# +# +# Type gauge +# InstancePrefix "objperslab" +# InstancesFrom 0 +# ValuesFrom 4 +# +#
+#
+ +# +# +# Instance "exim" +# +# Regex "S=([1-9][0-9]*)" +# DSType "CounterAdd" +# Type "ipt_bytes" +# Instance "total" +# +# +# Regex "\\" +# ExcludeRegex "\\.*mail_spool defer" +# DSType "CounterInc" +# Type "counter" +# Instance "local_user" +# +# +# + +# +# +# Type "percent" +# Instance "dropped" +# ValueFrom 1 +# +# +# Type "bytes" +# Instance "wire-realtime" +# ValueFrom 2 +# +# +# Type "alerts_per_second" +# ValueFrom 3 +# +# +# Type "kpackets_wire_per_sec.realtime" +# ValueFrom 4 +# +# +# Instance "snort-eth0" +# Interval 600 +# Collect "dropped" "mbps" "alerts" "kpps" +# TimeFrom 0 +# +# + +# +# ListeningPorts false +# LocalPort "25" +# RemotePort "25" +# + +# +# Host "127.0.0.1" +# Port "51234" +# Server "8767" +# + +# +# Device "/dev/ttyUSB0" +# Retries 0 +# + +# +# ForceUseProcfs false +# Device "THRM" +# IgnoreSelected false +# + +# +# Host "localhost" +# Port "1978" +# + +# +# SocketFile "/var/run/collectd-unixsock" +# SocketGroup "collectd" +# SocketPerms "0660" +# DeleteSocket false +# + +# +# UUIDFile "/etc/uuid" +# + +# +# +# CollectCache true +# CollectBackend true +# CollectBan false # Varnish 3 only +# CollectConnections true +# CollectDirectorDNS false # Varnish 3 only +# CollectSHM true +# CollectESI false +# CollectFetch false +# CollectHCB false +# CollectObjects false +# CollectPurge false # Varnish 2 only +# CollectSession false +# CollectSMA false # Varnish 2 only +# CollectSMS false +# CollectSM false # Varnish 2 only +# CollectStruct false +# CollectTotals false +# CollectUptime false +# CollectdVCL false +# CollectWorkers false +# +# +# +# CollectCache true +# +# + +# +# Verbose false +# + +# +# +# Host "localhost" +# Port "2003" +# Protocol "udp" +# LogSendErrors true +# Prefix "collectd" +# Postfix "collectd" +# StoreRates true +# AlwaysAppendDS false +# EscapeCharacter "_" +# +# + +# +# +# User "collectd" +# Password "secret" +# VerifyPeer true +# VerifyHost true +# CACert "/etc/ssl/ca.crt" +# Format "Command" +# StoreRates false +# +# + +# +# +# Host "localhost" +# Port 5555 +# Protocol UDP +# StoreRates true +# AlwaysAppendDS false +# TTLFactor 2.0 +# +# Tag "foobar" +# + + + Filter "*.conf" + diff --git a/collectd/etc/collectd.conf.d/btrfs-data.conf b/collectd/etc/collectd.conf.d/btrfs-data.conf new file mode 100644 index 0000000..1bc3b43 --- /dev/null +++ b/collectd/etc/collectd.conf.d/btrfs-data.conf @@ -0,0 +1,5 @@ +#LoadPlugin exec +# +# +# Exec nobody "/host/usr/local/bin/btrfs-data" +# diff --git a/collectd/etc/collectd.conf.d/df.conf b/collectd/etc/collectd.conf.d/df.conf new file mode 100644 index 0000000..50822d3 --- /dev/null +++ b/collectd/etc/collectd.conf.d/df.conf @@ -0,0 +1,6 @@ + + MountPoint "/media/docker" + MountPoint "/media/scratch" + FSType "ext4" + IgnoreSelected false + diff --git a/collectd/etc/collectd.conf.d/du-data.conf b/collectd/etc/collectd.conf.d/du-data.conf new file mode 100644 index 0000000..13e7910 --- /dev/null +++ b/collectd/etc/collectd.conf.d/du-data.conf @@ -0,0 +1,6 @@ +LoadPlugin exec + + + Exec nobody "/host/usr/local/bin/du-data" + + diff --git a/collectd/etc/collectd.conf.d/power-data.conf b/collectd/etc/collectd.conf.d/power-data.conf new file mode 100644 index 0000000..08f5c9e --- /dev/null +++ b/collectd/etc/collectd.conf.d/power-data.conf @@ -0,0 +1,5 @@ +LoadPlugin exec + + + Exec collectd "/host/usr/local/bin/power-data" + diff --git a/collectd/etc/collectd.conf.d/speedtest-data.conf b/collectd/etc/collectd.conf.d/speedtest-data.conf new file mode 100644 index 0000000..7eba4e9 --- /dev/null +++ b/collectd/etc/collectd.conf.d/speedtest-data.conf @@ -0,0 +1,6 @@ +LoadPlugin exec + + + Exec nobody "/host/usr/local/bin/speedtest-data" + + diff --git a/collectd/usr/local/bin/btrfs-data b/collectd/usr/local/bin/btrfs-data new file mode 100755 index 0000000..494d1ec --- /dev/null +++ b/collectd/usr/local/bin/btrfs-data @@ -0,0 +1,180 @@ +#!/usr/bin/python + +# +# Imports +# +import sys +import time +import commands +import argparse + + +# +# Misc +# +#sys.tracebacklimit = 0 + + +# +# Global variables +# +size_data_total = 0 +size_data_exclusive = 0 +size_snapshot_total = 0 +size_snapshot_exclusive = 0 + + +# +# Methods +# +def get_subvol_list(path): + command = "btrfs subvolume list -t %s" % (path) + status, output = commands.getstatusoutput(command) + + if status is not 0: + raise Exception(command) + + # Every line contains the following values: subvol_id, gen, toplevel, path + return output.splitlines()[2:] + + +def get_id_root(name, path): + lines = get_subvol_list(path) + + # Filter lines where toplevel == 5 + subvol_ids = filter(lambda x: int(x.split()[2]) == 5, lines) + + # Try to retrieve the subvol_id for the root subvolume (if any) + if len(subvol_ids) == 1: + # The path contains a btrfs filesystem without subvolume for data + return int(subvol_ids[0].split()[0]) + else: + # The path contains a btrfs filesystem with multiple subvolumes for data + try: + return int(filter(lambda x: x.split()[3] == name, subvol_ids)[0].split()[0]) + except IndexError: + pass + + + # Volume not found, root is probably the btrfs default (5) + return 5 + +def get_id_subvolumes(path, subvol_id): + lines = get_subvol_list(path) + lines = filter(lambda x: int(x.split()[2]) == subvol_id, lines) + return list(map(lambda x: int(x.split()[0]), lines)) + + +def get_disk_usage(name, path): + id_root = get_id_root(name, path) + id_subvolumes = get_id_subvolumes(path, id_root) + + command = "btrfs qgroup show --raw %s" % (path) + status, output = commands.getstatusoutput(command) + + if status is not 0: + raise Exception(command) + + lines = output.splitlines()[2:] + + # Global variables + global size_data_total + global size_data_exclusive + global size_snapshot_total + global size_snapshot_exclusive + + # Total data volume in subvolume + size_data_total = 0 + + # Total data volume in snapshots + # -> this variable is useless + size_snapshot_total = 0 + + # Data exclusively in subvolume + # -> data that is not (yet) incorporated in a snapshot + size_data_exclusive = 0 + + + # Data exclusively available in snapshots + # -> data that was removed from volume + size_snapshot_exclusive = 0 + + for line in lines: + split = line.split() + subvol_id = int(split[0].split("/")[1]) + size_total = float(split[1]) + size_exclusive = float(split[2]) + + if subvol_id == id_root: + size_data_total = size_total + size_data_exclusive = size_exclusive + elif subvol_id in id_subvolumes: + size_snapshot_total += size_total + size_snapshot_exclusive += size_exclusive + +def rescan_quota(path): + command = "btrfs quota rescan %s" % (path) + status, output = commands.getstatusoutput(command) + if status is not 0: + Exception(command) + +def print_human_readable(name): + global size_data_total + global size_data_exclusive + global size_snapshot_exclusive + size_data_total = size_data_total / (1024*1e6) + size_data_exclusive = size_data_exclusive / (1024*1e6) + size_snapshot_exclusive = size_snapshot_exclusive / (1024*1e6) + print "%10s: %6.1f Gb, %6.1f Gb, %6.1f Gb" % (name, size_data_total, size_data_exclusive, size_snapshot_exclusive) + +def print_rrd(name): + timestamp = int(time.time()) + print("PUTVAL {}/exec-btrfs_{}/gauge-data_total {}:{:.1f}".format(hostname, name, timestamp, size_data_total)) + print("PUTVAL {}/exec-btrfs_{}/gauge-data_exclusive {}:{:.1f}".format(hostname, name, timestamp, size_data_exclusive)) + print("PUTVAL {}/exec-btrfs_{}/gauge-snapshot_total {}:{:.1f}".format(hostname, name, timestamp, size_snapshot_total)) + print("PUTVAL {}/exec-btrfs_{}/gauge-snapshot_exclusive {}:{:.1f}".format(hostname, name, timestamp, size_snapshot_exclusive)) + + +# +# Volumes to scan +# +hostname = "sepia" +interval = 10 +volumes = list() + +# 275 GB SSD +volumes.append(["@", "/host/root/"]) +volumes.append(["@home", "/host/root/home"]) +volumes.append(["opt", "/host/root/opt"]) + +# 2x 4TB HDD +volumes.append(["data", "/host/root/media/data"]) + + +# +# Command line arguments +# +parser = argparse.ArgumentParser(description='Get BTRFS disk usage') +parser.add_argument('-s', action='store_true', help='print in human readable format') +args = parser.parse_args() +human_readable = args.s + + +# +# Main +# +if (human_readable): + for (name, path) in volumes: + get_disk_usage(name, path) + print_human_readable(name) +else: + # RRD mode + while True: + for (name, path) in volumes: + get_disk_usage(name, path) + + print_rrd(name) + + sys.stdout.flush() + time.sleep(interval) + #rescan_quota(path) diff --git a/collectd/usr/local/bin/du-data b/collectd/usr/local/bin/du-data new file mode 100755 index 0000000..0caf2c0 --- /dev/null +++ b/collectd/usr/local/bin/du-data @@ -0,0 +1,25 @@ +#!/bin/bash +COLLECTION=sepia +INTERVAL=90 + +DIRS=$(cat < $CLIENTNAME.ovpn diff --git a/seafile/conf/ccnet.conf b/seafile/conf/ccnet.conf new file mode 100644 index 0000000..ad2ab80 --- /dev/null +++ b/seafile/conf/ccnet.conf @@ -0,0 +1,3 @@ +[General] +SERVICE_URL = https://herderin.veenboer.xyz/seafile + diff --git a/seafile/conf/conf b/seafile/conf/conf new file mode 120000 index 0000000..eaa1b30 --- /dev/null +++ b/seafile/conf/conf @@ -0,0 +1 @@ +/seafile/conf \ No newline at end of file diff --git a/seafile/conf/gunicorn.conf.py b/seafile/conf/gunicorn.conf.py new file mode 100644 index 0000000..d3778ad --- /dev/null +++ b/seafile/conf/gunicorn.conf.py @@ -0,0 +1,16 @@ +import os + +daemon = True +workers = 5 + +# default localhost:8000 +bind = "0.0.0.0:8000" + +# Pid +pids_dir = '/opt/haiwen/pids' +pidfile = os.path.join(pids_dir, 'seahub.pid') + +# for file upload, we need a longer timeout value (default is only 30s, too short) +timeout = 1200 + +limit_request_line = 8190 diff --git a/seafile/conf/seafile.conf b/seafile/conf/seafile.conf new file mode 100644 index 0000000..a6fbb1f --- /dev/null +++ b/seafile/conf/seafile.conf @@ -0,0 +1,3 @@ +[fileserver] +port=8082 +max_download_dir_size=8192 diff --git a/seafile/conf/seahub_settings.py b/seafile/conf/seahub_settings.py new file mode 100644 index 0000000..20bb3c2 --- /dev/null +++ b/seafile/conf/seahub_settings.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +SECRET_KEY = "by-t3pizx0b7b^x#4q8be4b@4n1g8vxle#bl@+gq8*x!2jt*g7" +SERVE_STATIC = False +MEDIA_URL = '/seafmedia/' +COMPRESS_URL = MEDIA_URL +STATIC_URL = MEDIA_URL + 'assets/' +SITE_ROOT = '/seafile/' +LOGIN_URL = '/seafile/accounts/login/' +FILE_SERVER_ROOT = 'https://herderin.veenboer.xyz/seafhttp' +SERVICE_URL = 'https://herderin.veenboer.xyz/seafile' diff --git a/seafile/version b/seafile/version new file mode 100644 index 0000000..77063fc --- /dev/null +++ b/seafile/version @@ -0,0 +1 @@ +9.0.4