diff --git a/playbooks/orion.yml b/playbooks/orion.yml
index 8e7be707b23380b6d8da745a50fac5fd96221994..6a8f55c25ba173e7490aca417973d6760e6b512a 100644
--- a/playbooks/orion.yml
+++ b/playbooks/orion.yml
@@ -10,3 +10,4 @@
     - ssh_keys
     - { role: borg-client, backup_host: "borg@vostok.archlinux.org", backup_dir: "/backup/orion" }
     - archusers
+    - dbscripts
diff --git a/roles/dbscripts/files/cleanup.service b/roles/dbscripts/files/cleanup.service
new file mode 100644
index 0000000000000000000000000000000000000000..6c2576f8c4181e9daa4ca0374519caf59a5fda02
--- /dev/null
+++ b/roles/dbscripts/files/cleanup.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=Cleanup
+
+[Service]
+Type=oneshot
+User=cleanup
+ExecStart=/usr/bin/bash -c '/srv/repos/svn-community/dbscripts/cron-jobs/ftpdir-cleanup 2>&1 | /srv/repos/svn-community/dbscripts/cron-jobs/devlist-mailer "Community Cleanup" "arch-notifications@archlinux.org"'
+ExecStart=/usr/bin/bash -c '/srv/repos/svn-packages/dbscripts/cron-jobs/ftpdir-cleanup 2>&1 | /srv/repos/svn-packages/dbscripts/cron-jobs/devlist-mailer "Packages Cleanup" "arch-notifications@archlinux.org"'
diff --git a/roles/dbscripts/files/cleanup.timer b/roles/dbscripts/files/cleanup.timer
new file mode 100644
index 0000000000000000000000000000000000000000..c59b843640569e4b92f5c71f4527a2333fd8d484
--- /dev/null
+++ b/roles/dbscripts/files/cleanup.timer
@@ -0,0 +1,9 @@
+[Unit]
+Description=Cleanup
+
+[Timer]
+OnBootSec=15min
+OnUnitActiveSec=3h
+
+[Install]
+WantedBy=timers.target
diff --git a/roles/dbscripts/files/integrity-check.service b/roles/dbscripts/files/integrity-check.service
new file mode 100644
index 0000000000000000000000000000000000000000..0a56486154224aaacc46304792852868589638a9
--- /dev/null
+++ b/roles/dbscripts/files/integrity-check.service
@@ -0,0 +1,7 @@
+[Unit]
+Description=Integrity Check
+
+[Service]
+Type=oneshot
+User=svn-packages
+ExecStart=/srv/repos/svn-packages/dbscripts/cron-jobs/integrity-check arch-notifications@archlinux.org,arch-dev-public@archlinux.org
diff --git a/roles/dbscripts/files/integrity-check.timer b/roles/dbscripts/files/integrity-check.timer
new file mode 100644
index 0000000000000000000000000000000000000000..b1a3b57a4f1b64fa8610c1094489f4080b19c9cb
--- /dev/null
+++ b/roles/dbscripts/files/integrity-check.timer
@@ -0,0 +1,9 @@
+[Unit]
+Description=Integrity Check
+
+[Timer]
+OnCalendar=weekly
+Persistent=true
+
+[Install]
+WantedBy=timers.target
diff --git a/roles/dbscripts/files/lastsync.service b/roles/dbscripts/files/lastsync.service
new file mode 100644
index 0000000000000000000000000000000000000000..4f7b6c72d05d16754d39ed84f8d0eaa0640be4a9
--- /dev/null
+++ b/roles/dbscripts/files/lastsync.service
@@ -0,0 +1,7 @@
+[Unit]
+Description=lastsync
+
+[Service]
+Type=oneshot
+User=ftp
+ExecStart=/usr/bin/bash -c "date '+\%s\' > /srv/ftp/lastsync"
diff --git a/roles/dbscripts/files/lastsync.timer b/roles/dbscripts/files/lastsync.timer
new file mode 100644
index 0000000000000000000000000000000000000000..063269e1f006df3f9a77159ecb185626b895f763
--- /dev/null
+++ b/roles/dbscripts/files/lastsync.timer
@@ -0,0 +1,9 @@
+[Unit]
+Description=lastsync
+
+[Timer]
+OnBootSec=1min
+OnUnitActiveSec=1min
+
+[Install]
+WantedBy=timers.target
diff --git a/roles/dbscripts/files/sourceballs.service b/roles/dbscripts/files/sourceballs.service
new file mode 100644
index 0000000000000000000000000000000000000000..adc6a05c0cd0a1ba9b194a995c0ff51eec9331bb
--- /dev/null
+++ b/roles/dbscripts/files/sourceballs.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=Sourceballs
+
+[Service]
+Type=oneshot
+User=sourceballs
+ExecStart=/usr/bin/bash -c '/srv/repos/svn-community/dbscripts/cron-jobs/sourceballs 2>&1 | /srv/repos/svn-community/dbscripts/cron-jobs/devlist-mailer "Community Sourceballs" "arch-notifications@archlinux.org"'
+ExecStart=/usr/bin/bash -c '/srv/repos/svn-packages/dbscripts/cron-jobs/sourceballs 2>&1 | /srv/repos/svn-packages/dbscripts/cron-jobs/devlist-mailer "Packages Sourceballs" "arch-notifications@archlinux.org"'
+ExecStart=/usr/bin/find /home/sourceballs/sources -type f -mtime +7 -delete
diff --git a/roles/dbscripts/files/sourceballs.timer b/roles/dbscripts/files/sourceballs.timer
new file mode 100644
index 0000000000000000000000000000000000000000..e3d710315ace735ddf80ee8022b6f06b92aae82d
--- /dev/null
+++ b/roles/dbscripts/files/sourceballs.timer
@@ -0,0 +1,9 @@
+[Unit]
+Description=Sourceballs
+
+[Timer]
+OnBootSec=15min
+OnUnitActiveSec=8h
+
+[Install]
+WantedBy=timers.target
diff --git a/roles/dbscripts/tasks/main.yml b/roles/dbscripts/tasks/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..870b4a803ad8b7fc7f393b353712e1b782e88859
--- /dev/null
+++ b/roles/dbscripts/tasks/main.yml
@@ -0,0 +1,92 @@
+---
+
+- name: install svn and git
+  pacman: name=git,subversion state=present
+
+- name: create dbscripts users
+  user: name="{{ item }}" shell=/sbin/nologin
+  with_items:
+    - svn-packages
+    - svn-community
+    - sourceballs
+    - cleanup
+
+- name: create dbscripts paths
+  file: path="{{ item }}" state=directory
+  with_items:
+    - /srv/repos/svn-community
+    - /srv/repos/svn-packages
+
+- file: path="/srv/repos/svn-community/package-cleanup" state=directory owner=svn-community group=tu mode=0775
+- acl: name=/srv/repos/svn-community/package-cleanup entry="user:cleanup:rwx" state=present
+- acl: name=/srv/repos/svn-community/package-cleanup entry="default:user::rwx" state=present
+- acl: name=/srv/repos/svn-community/package-cleanup entry="default:user:cleanup:rwx" state=present
+- acl: name=/srv/repos/svn-community/package-cleanup entry="default:group::rwx" state=present
+- acl: name=/srv/repos/svn-community/package-cleanup entry="default:other::r-x" state=present
+
+- file: path="/srv/repos/svn-packages/package-cleanup" state=directory owner=svn-packages group=dev mode=0775
+- acl: name=/srv/repos/svn-packages/package-cleanup entry="user:cleanup:rwx" state=present
+- acl: name=/srv/repos/svn-packages/package-cleanup entry="default:user::rwx" state=present
+- acl: name=/srv/repos/svn-packages/package-cleanup entry="default:user:cleanup:rwx" state=present
+- acl: name=/srv/repos/svn-packages/package-cleanup entry="default:group::rwx" state=present
+- acl: name=/srv/repos/svn-packages/package-cleanup entry="default:other::r-x" state=present
+
+- file: path="/srv/repos/svn-community/source-cleanup" state=directory owner=sourceballs group=svn-community mode=0755
+- file: path="/srv/repos/svn-packages/source-cleanup" state=directory owner=sourceballs group=svn-packages mode=0755
+
+- file: path="/srv/repos/svn-community/svn" state=directory owner=svn-community group=svn-community mode=0755
+- acl: name=/srv/repos/svn-community/svn entry="default:user::rwx" state=present
+- acl: name=/srv/repos/svn-community/svn entry="default:group::r-x" state=present
+- acl: name=/srv/repos/svn-community/svn entry="default:other::r-x" state=present
+
+- file: path="/srv/repos/svn-packages/svn" state=directory owner=svn-packages group=svn-packages mode=0755
+- acl: name=/srv/repos/svn-packages/svn entry="default:user::rwx" state=present
+- acl: name=/srv/repos/svn-packages/svn entry="default:group::r-x" state=present
+- acl: name=/srv/repos/svn-packages/svn entry="default:other::r-x" state=present
+
+- file: path="/srv/repos/svn-community/tmp" state=directory owner=svn-community group=tu mode=1775
+- acl: name=/srv/repos/svn-community/tmp entry="user:sourceballs:rwx" state=present
+
+- file: path="/srv/repos/svn-packages/tmp" state=directory owner=svn-packages group=dev mode=1775
+- acl: name=/srv/repos/svn-packages/tmp entry="user:sourceballs:rwx" state=present
+
+- name: clone dbscripts git repo
+  git: dest=/srv/repos/{{ item }}/dbscripts repo=git://git.archlinux.org/dbscripts.git
+  with_items:
+    - svn-community
+    - svn-packages
+
+- name: make /srv/svn
+  file: path=/srv/svn state=directory
+
+- name: symlink /srv/svn/community to /srv/repos/svn-community/svn
+  file: path=/srv/svn/community src=/srv/repos/svn-community/svn state=link
+
+- name: symlink /srv/svn/packages to /srv/repos/svn-packages/svn
+  file: path=/srv/svn/packages src=/srv/repos/svn-packages/svn state=link
+
+- name: symlink /community to /srv/repos/svn-community/dbscripts
+  file: path=/community src=/srv/repos/svn-community/dbscripts state=link
+
+- name: symlink /packages to /srv/repos/svn-packages/dbscripts
+  file: path=/packages src=/srv/repos/svn-packages state=link
+
+- name: install systemd timers
+  copy: src={{ item }} dest=/etc/systemd/system/{{ item }} owner=root group=root mode=644
+  with_items:
+    - cleanup.timer
+    - cleanup.service
+    - sourceballs.timer
+    - sourceballs.service
+    - integrity-check.timer
+    - integrity-check.service
+    - lastsync.timer
+    - lastsync.service
+
+- name: activatre systemd timers
+  service: name={{ item }} enabled=yes state=started
+  with_items:
+    - cleanup.timer
+    - sourceballs.timer
+    - integrity-check.timer
+    - lastsync.timer