summaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
Diffstat (limited to 'share')
-rw-r--r--share/apache/conf/ceph-info.conf11
l---------share/ceph-info/web/ceph-df.txt1
l---------share/ceph-info/web/ceph-osd-df.txt1
l---------share/ceph-info/web/ceph-osd-tree.txt1
l---------share/ceph-info/web/ceph-status.txt1
l---------share/ceph-info/web/ceph-version.txt1
l---------share/ceph-info/web/ceph-watch.log1
l---------share/ceph-info/web/date.txt1
-rw-r--r--share/ceph-info/web/index.html34
l---------share/ceph-info/web/jquery.min.js1
-rw-r--r--share/ceph-info/web/logtail.js192
-rw-r--r--share/cron/ceph-info1
-rw-r--r--share/cron/cephfs-snap4
-rw-r--r--share/logrotate/ceph-log17
-rw-r--r--share/logrotate/cephfs-snap11
-rw-r--r--share/man/Makefile43
-rw-r--r--share/man/ceph-info.1.txt93
-rw-r--r--share/man/ceph-log.1.txt88
-rw-r--r--share/man/ceph-remove-osd.1.txt64
-rw-r--r--share/man/cephfs-snap.1.txt72
-rw-r--r--share/man/storage-tools.7.txt91
-rw-r--r--share/systemd/ceph-log.service11
22 files changed, 740 insertions, 0 deletions
diff --git a/share/apache/conf/ceph-info.conf b/share/apache/conf/ceph-info.conf
new file mode 100644
index 0000000..a1136e0
--- /dev/null
+++ b/share/apache/conf/ceph-info.conf
@@ -0,0 +1,11 @@
+<IfModule alias_module>
+ Alias /ceph-info /usr/share/storage-tools/ceph-info/web
+</IfModule>
+
+<Directory /usr/share/storage-tools/ceph-info/web>
+ Options FollowSymlinks
+ Options -Indexes
+
+ AllowOverride None
+ Require all granted
+</Directory>
diff --git a/share/ceph-info/web/ceph-df.txt b/share/ceph-info/web/ceph-df.txt
new file mode 120000
index 0000000..dff3a13
--- /dev/null
+++ b/share/ceph-info/web/ceph-df.txt
@@ -0,0 +1 @@
+/var/log/storage-tools/ceph-info/ceph-df.txt \ No newline at end of file
diff --git a/share/ceph-info/web/ceph-osd-df.txt b/share/ceph-info/web/ceph-osd-df.txt
new file mode 120000
index 0000000..c5de915
--- /dev/null
+++ b/share/ceph-info/web/ceph-osd-df.txt
@@ -0,0 +1 @@
+/var/log/storage-tools/ceph-info/ceph-osd-df.txt \ No newline at end of file
diff --git a/share/ceph-info/web/ceph-osd-tree.txt b/share/ceph-info/web/ceph-osd-tree.txt
new file mode 120000
index 0000000..019a0bb
--- /dev/null
+++ b/share/ceph-info/web/ceph-osd-tree.txt
@@ -0,0 +1 @@
+/var/log/storage-tools/ceph-info/ceph-osd-tree.txt \ No newline at end of file
diff --git a/share/ceph-info/web/ceph-status.txt b/share/ceph-info/web/ceph-status.txt
new file mode 120000
index 0000000..c7042bb
--- /dev/null
+++ b/share/ceph-info/web/ceph-status.txt
@@ -0,0 +1 @@
+/var/log/storage-tools/ceph-info/ceph-status.txt \ No newline at end of file
diff --git a/share/ceph-info/web/ceph-version.txt b/share/ceph-info/web/ceph-version.txt
new file mode 120000
index 0000000..f440f1b
--- /dev/null
+++ b/share/ceph-info/web/ceph-version.txt
@@ -0,0 +1 @@
+/var/log/storage-tools/ceph-info/ceph-version.txt \ No newline at end of file
diff --git a/share/ceph-info/web/ceph-watch.log b/share/ceph-info/web/ceph-watch.log
new file mode 120000
index 0000000..3644891
--- /dev/null
+++ b/share/ceph-info/web/ceph-watch.log
@@ -0,0 +1 @@
+/var/log/storage-tools/ceph-log/ceph-watch.log \ No newline at end of file
diff --git a/share/ceph-info/web/date.txt b/share/ceph-info/web/date.txt
new file mode 120000
index 0000000..22fb159
--- /dev/null
+++ b/share/ceph-info/web/date.txt
@@ -0,0 +1 @@
+/var/log/storage-tools/ceph-info/date.txt \ No newline at end of file
diff --git a/share/ceph-info/web/index.html b/share/ceph-info/web/index.html
new file mode 100644
index 0000000..b55f637
--- /dev/null
+++ b/share/ceph-info/web/index.html
@@ -0,0 +1,34 @@
+<html>
+ <head>
+ <title>ceph-info</title>
+ <script type="text/javascript" src="jquery.min.js"></script>
+ <script type="text/javascript" src="logtail.js"></script>
+ <meta http-equiv="refresh" content="300" />
+ </head>
+
+ <body>
+ <h1>ceph-info</h1>
+
+ <h2>$ ceph --watch</h2>
+ <div id="header"><a id="pause" href='#'>Pause</a></div>
+ <pre id="data">Loading...</pre>
+
+ <h2>$ ceph status</h2>
+ <p><iframe src="ceph-status.txt" frameborder="0" height="250" width="95%"></iframe></p>
+
+ <h2>$ ceph df</h2>
+ <p><iframe src="ceph-df.txt" frameborder="0" height="250" width="95%"></iframe></p>
+
+ <h2>$ ceph osd df</h2>
+ <p><iframe src="ceph-osd-df.txt" frameborder="0" height="250" width="95%"></iframe></p>
+
+ <h2>$ ceph osd tree</h2>
+ <p><iframe src="ceph-osd-tree.txt" frameborder="0" height="250" width="95%"></iframe></p>
+
+ <h2>$ ceph version</h2>
+ <p><iframe src="ceph-version.txt" frameborder="0" height="25" width="95%"></iframe></p>
+
+ <h3>Last Updated:</h3>
+ <p><iframe src="date.txt" frameborder="0" height="25" width="95%"></iframe></p>
+ </body>
+</html>
diff --git a/share/ceph-info/web/jquery.min.js b/share/ceph-info/web/jquery.min.js
new file mode 120000
index 0000000..7fff887
--- /dev/null
+++ b/share/ceph-info/web/jquery.min.js
@@ -0,0 +1 @@
+/usr/share/javascript/jquery/jquery.min.js \ No newline at end of file
diff --git a/share/ceph-info/web/logtail.js b/share/ceph-info/web/logtail.js
new file mode 100644
index 0000000..b7d969c
--- /dev/null
+++ b/share/ceph-info/web/logtail.js
@@ -0,0 +1,192 @@
+/* Copyright (c) 2012: Daniel Richman. License: GNU GPL 3 */
+/* Additional features: Priyesh Patel */
+
+(function () {
+
+var dataelem = "#data";
+var pausetoggle = "#pause";
+var scrollelems = ["html", "body"];
+
+var url = "ceph-watch.log";
+var fix_rn = true;
+var load = 10 * 1024; /* 10KB */
+var poll = 1000; /* 1s */
+
+var kill = false;
+var loading = false;
+var pause = false;
+var reverse = true;
+var log_data = "";
+var log_file_size = 0;
+
+/* :-( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt */
+function parseInt2(value) {
+ if(!(/^[0-9]+$/.test(value))) throw "Invalid integer " + value;
+ var v = Number(value);
+ if (isNaN(v)) throw "Invalid integer " + value;
+ return v;
+}
+
+function get_log() {
+ if (kill | loading) return;
+ loading = true;
+
+ var range;
+ var first_load;
+ var must_get_206;
+ if (log_file_size === 0) {
+ /* Get the last 'load' bytes */
+ range = "-" + load.toString();
+ first_load = true;
+ must_get_206 = false;
+ } else {
+ /* Get the (log_file_size - 1)th byte, onwards. */
+ range = (log_file_size - 1).toString() + "-";
+ first_load = false;
+ must_get_206 = log_file_size > 1;
+ }
+
+ /* The "log_file_size - 1" deliberately reloads the last byte, which we already
+ * have. This is to prevent a 416 "Range unsatisfiable" error: a response
+ * of length 1 tells us that the file hasn't changed yet. A 416 shows that
+ * the file has been trucnated */
+
+ $.ajax(url, {
+ dataType: "text",
+ cache: false,
+ headers: {Range: "bytes=" + range},
+ success: function (data, s, xhr) {
+ loading = false;
+
+ var content_size;
+
+ if (xhr.status === 206) {
+ var c_r = xhr.getResponseHeader("Content-Range");
+ if (!c_r)
+ throw "Server did not respond with a Content-Range";
+
+ log_file_size = parseInt2(c_r.split("/")[1]);
+ content_size = parseInt2(xhr.getResponseHeader("Content-Length"));
+ } else if (xhr.status === 200) {
+ if (must_get_206)
+ throw "Expected 206 Partial Content";
+
+ content_size = log_file_size =
+ parseInt2(xhr.getResponseHeader("Content-Length"));
+ } else {
+ throw "Unexpected status " + xhr.status;
+ }
+
+ if (first_load && data.length > load)
+ throw "Server's response was too long";
+
+ var added = false;
+
+ if (first_load) {
+ /* Clip leading part-line if not the whole file */
+ if (content_size < log_file_size) {
+ var start = data.indexOf("\n");
+ log_data = data.substring(start + 1);
+ } else {
+ log_data = data;
+ }
+
+ added = true;
+ } else {
+ /* Drop the first byte (see above) */
+ log_data += data.substring(1);
+
+ if (log_data.length > load) {
+ var start = log_data.indexOf("\n", log_data.length - load);
+ log_data = log_data.substring(start + 1);
+ }
+
+ if (data.length > 1)
+ added = true;
+ }
+
+ if (added)
+ show_log(added);
+ setTimeout(get_log, poll);
+ },
+ error: function (xhr, s, t) {
+ loading = false;
+
+ if (xhr.status === 416 || xhr.status == 404) {
+ /* 416: Requested range not satisfiable: log was truncated. */
+ /* 404: Retry soon, I guess */
+
+ log_file_size = 0;
+ log_data = "";
+ show_log();
+
+ setTimeout(get_log, poll);
+ } else {
+ throw "Unknown AJAX Error (status " + xhr.status + ")";
+ }
+ }
+ });
+}
+
+function scroll(where) {
+ for (var i = 0; i < scrollelems.length; i++) {
+ var s = $(scrollelems[i]);
+ if (where === -1)
+ s.scrollTop(s.height());
+ else
+ s.scrollTop(where);
+ }
+}
+
+function show_log() {
+ if (pause) return;
+
+ var t = log_data;
+
+ if (reverse) {
+ var t_a = t.split(/\n/g);
+ t_a.reverse();
+ if (t_a[0] == "")
+ t_a.shift();
+ t = t_a.join("\n");
+ }
+
+ if (fix_rn)
+ t = t.replace(/\n/g, "\r\n");
+
+ $(dataelem).text(t);
+ if (!reverse)
+ scroll(-1);
+}
+
+function error(what) {
+ kill = true;
+
+ $(dataelem).text("An error occured :-(.\r\n" +
+ "Reloading may help; no promises.\r\n" +
+ what);
+ scroll(0);
+
+ return false;
+}
+
+$(document).ready(function () {
+ window.onerror = error;
+
+ /* If URL is /logtail/?noreverse display in chronological order */
+ var hash = location.search.replace(/^\?/, "");
+ if (hash == "noreverse")
+ reverse = false;
+
+ /* Add pause toggle */
+ $(pausetoggle).click(function (e) {
+ pause = !pause;
+ $(pausetoggle).text(pause ? "Unpause" : "Pause");
+ show_log();
+ e.preventDefault();
+ });
+
+ get_log();
+});
+
+})();
diff --git a/share/cron/ceph-info b/share/cron/ceph-info
new file mode 100644
index 0000000..9041e34
--- /dev/null
+++ b/share/cron/ceph-info
@@ -0,0 +1 @@
+*/10 * * * * root [ -e /usr/bin/ceph-info ] && /usr/bin/ceph-info
diff --git a/share/cron/cephfs-snap b/share/cron/cephfs-snap
new file mode 100644
index 0000000..40340b6
--- /dev/null
+++ b/share/cron/cephfs-snap
@@ -0,0 +1,4 @@
+0 * * * * root [ -e /usr/bin/cephfs-snap ] && /usr/bin/cephfs-snap hourly
+0 0 * * * root [ -e /usr/bin/cephfs-snap ] && /usr/bin/cephfs-snap daily
+0 0 * * 1 root [ -e /usr/bin/cephfs-snap ] && /usr/bin/cephfs-snap weekly
+0 0 * 1 * root [ -e /usr/bin/cephfs-snap ] && /usr/bin/cephfs-snap monthly
diff --git a/share/logrotate/ceph-log b/share/logrotate/ceph-log
new file mode 100644
index 0000000..cdf8bc7
--- /dev/null
+++ b/share/logrotate/ceph-log
@@ -0,0 +1,17 @@
+/var/log/storage-tools/ceph-log/ceph-watch.log {
+ compress
+ create 0644 root root
+ dateext
+ dateformat -%Y%m%d
+ dateyesterday
+ missingok
+ daily
+ notifempty
+ rotate 365
+ prerotate
+ service ceph-log stop > /dev/null 2>&1
+ endscript
+ postrotate
+ service ceph-log start > /dev/null 2>&1
+ endscript
+}
diff --git a/share/logrotate/cephfs-snap b/share/logrotate/cephfs-snap
new file mode 100644
index 0000000..e948edf
--- /dev/null
+++ b/share/logrotate/cephfs-snap
@@ -0,0 +1,11 @@
+/var/log/storage-tools/cephfs-snap/cephfs-snap.log {
+ compress
+ create 0640 root adm
+ dateext
+ dateformat -%Y%m
+ dateyesterday
+ missingok
+ monthly
+ notifempty
+ rotate 12
+}
diff --git a/share/man/Makefile b/share/man/Makefile
new file mode 100644
index 0000000..03b5914
--- /dev/null
+++ b/share/man/Makefile
@@ -0,0 +1,43 @@
+# Makefile
+
+# storage-tools - Additional utilities to manage storage related tasks
+# Copyright (C) 2014-2017 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Depends: asciidoc dblatex docbook-xsl libxml2-utils source-highlight
+
+A2X = a2x \
+ --asciidoc-opts "-a revdate=$(shell cat ../../VERSION.txt)" \
+ --doctype=manpage
+
+SHELL := sh -e
+
+all: build
+
+clean:
+ rm -f *.[0-9]
+ rm -f *.xml
+
+build: man
+
+rebuild: clean build
+
+man: *.txt
+ for FILE in *.txt; \
+ do \
+ $(A2X) --format=manpage $${FILE}; \
+ done
+
+.PHONY: all clean build rebuild man
diff --git a/share/man/ceph-info.1.txt b/share/man/ceph-info.1.txt
new file mode 100644
index 0000000..72c50b1
--- /dev/null
+++ b/share/man/ceph-info.1.txt
@@ -0,0 +1,93 @@
+// storage-tools - Additional utilities to manage storage related tasks
+// Copyright (C) 2014-2017 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+CEPH-INFO(1)
+============
+:doctype: manpage
+:man manual: Open Infrastructure
+:man source: storage-tools
+:man version: {revnumber}
+
+
+NAME
+----
+ceph-info - show Ceph cluster information as a website.
+
+
+SYNOPSIS
+--------
+*ceph-info*
+
+
+DESCRIPTION
+-----------
+When operating large, central storage systems the trust of the users that their
+data is always safe is paramount. Specifically in the enterprise environment,
+gaining trust from the users to save their data on your Ceph cluster (which
+is "just" SDS) can be achieved with technical transparency.
+
+The ceph-info program shows Ceph cluster information as a website where anyone
+interested can observe the clusters health and action transparently, without
+requireing Ceph specific knowledge or access privileges.
+
+For the system administrators it provides a neat "one page" overview of all
+essential health information of the cluster, rather than to do the same commands
+over the command line.
+
+The info page is by default visible on http://localhost/ceph-info
+
+
+OPTIONS
+-------
+The ceph-info program has no options.
+
+
+FILES
+-----
+The following files are used:
+
+*/etc/default/storage-tools*::
+ Configuration file.
+
+*/var/log/storage-tools/ceph-info/*.txt*::
+ Ceph cluster information dumps.
+
+*/usr/share/storage-tools/ceph-info/web*::
+ ceph-info document root.
+
+
+SEE ALSO
+--------
+storage-tools(7).
+
+
+HOMEPAGE
+--------
+More information about storage-tools and the Open Infrastructure project can be
+found on the homepage at https://open-infrastructure.net.
+
+
+CONTACT
+-------
+Bug reports, feature requests, help, patches, support and everything else
+are welcome on the Open Infrastructure Software Mailing List <software@lists.open-infrastructure.net>.
+
+Debian specific bugs can also be reported in the Debian Bug Tracking System at https://bugs.debian.org.
+
+
+AUTHORS
+-------
+storage-tools was written by Daniel Baumann <daniel.baumann@open-infrastructure.net>.
diff --git a/share/man/ceph-log.1.txt b/share/man/ceph-log.1.txt
new file mode 100644
index 0000000..c3fe237
--- /dev/null
+++ b/share/man/ceph-log.1.txt
@@ -0,0 +1,88 @@
+// storage-tools - Additional utilities to manage storage related tasks
+// Copyright (C) 2014-2017 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+CEPH-LOG(1)
+===========
+:doctype: manpage
+:man manual: Open Infrastructure
+:man source: storage-tools
+:man version: {revnumber}
+
+
+NAME
+----
+ceph-log - store Ceph cluster log as a logfile
+
+
+SYNOPSIS
+--------
+*ceph-log*
+
+
+DESCRIPTION
+-----------
+When operating a Ceph storage cluster, the command 'ceph -w' let's the system
+administrator watch everything that is happening in a ceph cluster, such as the
+health state of the cluster, any cluster changes and any commands and mounts
+from clients that are happening.
+
+Unfortunatly the 'ceph -w' command is a tool that a system administrator uses
+for real time information, means there is no history or looking backward what
+happened at a given time.
+
+The ceph-log program stores the output of 'ceph -w' into a logfile and rotate
+its. This allows the system administrator to go back and check what exactly
+happened in detail within a Ceph storage cluster at any given time.
+
+
+OPTIONS
+-------
+The ceph-log program has no options.
+
+
+FILES
+-----
+The following files are used:
+
+*/etc/default/storage-tools*::
+ Configuration file.
+
+*/var/log/storage-tools/ceph-log/ceph-watch.log*::
+ Ceph cluster logfile.
+
+
+SEE ALSO
+--------
+storage-tools(7).
+
+
+HOMEPAGE
+--------
+More information about storage-tools and the Open Infrastructure project can be
+found on the homepage at https://open-infrastructure.net.
+
+
+CONTACT
+-------
+Bug reports, feature requests, help, patches, support and everything else
+are welcome on the Open Infrastructure Software Mailing List <software@lists.open-infrastructure.net>.
+
+Debian specific bugs can also be reported in the Debian Bug Tracking System at https://bugs.debian.org.
+
+
+AUTHORS
+-------
+storage-tools was written by Daniel Baumann <daniel.baumann@open-infrastructure.net>.
diff --git a/share/man/ceph-remove-osd.1.txt b/share/man/ceph-remove-osd.1.txt
new file mode 100644
index 0000000..28b6062
--- /dev/null
+++ b/share/man/ceph-remove-osd.1.txt
@@ -0,0 +1,64 @@
+// storage-tools - Additional utilities to manage storage related tasks
+// Copyright (C) 2014-2017 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+CEPH-REMOVE-OSD(1)
+==================
+:doctype: manpage
+:man manual: Open Infrastructure
+:man source: storage-tools
+:man version: {revnumber}
+
+
+NAME
+----
+ceph-remove-osd - shortcut for removing an Ceph OSD instance completly.
+
+
+SYNOPSIS
+--------
+*ceph-remove-osd* OSD
+
+
+DESCRIPTION
+-----------
+When replacing a broken disk in a Ceph storage cluster, the correct OSD
+needs to be shut down properly and its keys removed.
+
+ceph-remove-osd does all required steps.
+
+
+SEE ALSO
+--------
+storage-tools(7).
+
+
+HOMEPAGE
+--------
+More information about storage-tools and the Open Infrastructure project can be
+found on the homepage at https://open-infrastructure.net.
+
+
+CONTACT
+-------
+Bug reports, feature requests, help, patches, support and everything else
+are welcome on the Open Infrastructure Software Mailing List <software@lists.open-infrastructure.net>.
+
+Debian specific bugs can also be reported in the Debian Bug Tracking System at https://bugs.debian.org.
+
+
+AUTHORS
+-------
+storage-tools was written by Daniel Baumann <daniel.baumann@open-infrastructure.net>.
diff --git a/share/man/cephfs-snap.1.txt b/share/man/cephfs-snap.1.txt
new file mode 100644
index 0000000..972bcd0
--- /dev/null
+++ b/share/man/cephfs-snap.1.txt
@@ -0,0 +1,72 @@
+// storage-tools - Additional utilities to manage storage related tasks
+// Copyright (C) 2014-2017 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+CEPHFS-SNAP(1)
+==============
+:doctype: manpage
+:man manual: Open Infrastructure
+:man source: storage-tools
+:man version: {revnumber}
+
+
+NAME
+----
+cephfs-snap - create CephFS snapshots periodically
+
+
+SYNOPSIS
+--------
+*cephfs-snap* {hourly|daily|weekly|monthly}
+
+
+DESCRIPTION
+-----------
+CephFS supports creating snapshots of the filesystem as a simple means of
+backups.
+
+The cephfs-snap program is a simple tool to do this periodically.
+
+
+FILES
+-----
+The following files are used:
+
+*/etc/default/storage-tools*::
+ Configuration file.
+
+
+SEE ALSO
+--------
+storage-tools(7).
+
+
+HOMEPAGE
+--------
+More information about storage-tools and the Open Infrastructure project can be
+found on the homepage at https://open-infrastructure.net.
+
+
+CONTACT
+-------
+Bug reports, feature requests, help, patches, support and everything else
+are welcome on the Open Infrastructure Software Mailing List <software@lists.open-infrastructure.net>.
+
+Debian specific bugs can also be reported in the Debian Bug Tracking System at https://bugs.debian.org.
+
+
+AUTHORS
+-------
+storage-tools was written by Daniel Baumann <daniel.baumann@open-infrastructure.net>.
diff --git a/share/man/storage-tools.7.txt b/share/man/storage-tools.7.txt
new file mode 100644
index 0000000..20bae0b
--- /dev/null
+++ b/share/man/storage-tools.7.txt
@@ -0,0 +1,91 @@
+// storage-tools - Additional utilities to manage storage related tasks
+// Copyright (C) 2014-2017 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+STORAGE-TOOLS(7)
+================
+:doctype: manpage
+:man manual: Open Infrastructure
+:man source: storage-tools
+:man version: {revnumber}
+
+
+NAME
+----
+storage-tools - Additional utilities to manage storage related tasks
+
+
+DESCRIPTION
+-----------
+"Computer data storage [...] is a technology consisting of computer components
+and recording media used to retain digital data. It is a core function and
+fundamental component of computers."
+ -- Wikipedia (https://en.wikipedia.org/wiki/Data_storage_device)
+
+storage-tools contains additional utilities to manage storage related tasks.
+
+
+DOWNLOAD
+--------
+ * Upstream Releases: https://files.open-infrastructure.net/software/storage-tools/upstream
+ * Upstream Sources: https://sources.open-infrastructure.net/software/storage-tools
+ * Debian Releases: https://files.open-infrastructure.net/software/storage-tools/debian
+ * Debian Sources: https://sources.progress-linux.org/users/daniel/debian/packages/open-infrastructure-storage-tools
+
+
+INSTALLATION
+------------
+
+SOURCE
+~~~~~~
+ 1. sudo apt install asciidoc git docbook-xml docbook-xsl libxml2-utils make xsltproc
+ 2. git clone https://sources.open-infrastructure.net/software/storage-tools
+ 3. cd storage-tools && sudo make install
+
+
+DEVELOPMENT
+-----------
+Bug reports, feature requests, help, patches, support and everything else
+are welcome on the Open Infrastructure Software Mailing List:
+
+ * https://lists.open-infrastructure.net/listinfo/software
+
+Please base patches against the 'next' Git branch using common sense:
+
+ * https://www.kernel.org/doc/Documentation/SubmittingPatches
+
+Debian specific bugs can also be reported in the Debian Bug Tracking System:
+
+ * https://bugs.debian.org
+
+
+TOOLS
+-----
+*ceph-log(1):*::
+ store Ceph cluster log as a logfile.
+
+*ceph-info(1):*::
+ show Ceph cluster information as a website.
+
+*cephfs-snap(1):*::
+ create CephFS snapshots periodically.
+
+*ceph-remove-osd(1):*::
+ shortcut for removing an Ceph OSD instance completly.
+
+
+AUTHORS
+-------
+ * Daniel Baumann <daniel.baumann@open-infrastructure.net>
diff --git a/share/systemd/ceph-log.service b/share/systemd/ceph-log.service
new file mode 100644
index 0000000..5293499
--- /dev/null
+++ b/share/systemd/ceph-log.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=ceph-log
+Documentation=man:ceph-log
+After=network.target
+
+[Service]
+ExecStart=/usr/bin/ceph-log
+Type=simple
+
+[Install]
+WantedBy=multi-user.target