diff --git a/UIDs b/UIDs --- a/UIDs +++ b/UIDs @@ -3,3 +3,4 @@ 832 chaton 9001 salt 9002 deploy +8900 zr diff --git a/_modules/node.py b/_modules/node.py --- a/_modules/node.py +++ b/_modules/node.py @@ -80,3 +80,16 @@ ''' value = _get_property(key, nodename, False) return bool(value) + + +def has_role(role, nodename=None): + ''' + A function to determine if a node has the specified role. + + Returns a boolean, False if not found. + + CLI Example: + + salt * node.has_role devserver + ''' + return role in list('roles', nodename) diff --git a/map.jinja b/map.jinja --- a/map.jinja +++ b/map.jinja @@ -132,7 +132,7 @@ 'emacs': 'emacs-nox11', 'exiftool': 'p5-Image-ExifTool-devel', 'imagemagick': 'ImageMagick', - 'mariadb': 'mariadb101-server', + 'mariadb': 'mariadb102-server', 'node': 'node', 'pear': 'pear', 'phpcs': 'pear-PHP_CodeSniffer', diff --git a/pillar/nodes/nodes.sls b/pillar/nodes/nodes.sls --- a/pillar/nodes/nodes.sls +++ b/pillar/nodes/nodes.sls @@ -32,6 +32,8 @@ roles: - devserver - saltmaster + zfs: + pool: arcology network: ipv4_interface: igb0 ipv4_address: 163.172.49.16 diff --git a/pillar/webserver-legacy/sites.sls b/pillar/webserver-legacy/sites.sls --- a/pillar/webserver-legacy/sites.sls +++ b/pillar/webserver-legacy/sites.sls @@ -33,6 +33,7 @@ web_static_sites: nasqueron.org: - www + - assets - docker - ftp - trustspace diff --git a/roles/webserver-legacy/init.sls b/roles/dbserver-mysql/init.sls copy from roles/webserver-legacy/init.sls copy to roles/dbserver-mysql/init.sls --- a/roles/webserver-legacy/init.sls +++ b/roles/dbserver-mysql/init.sls @@ -1,15 +1,10 @@ # ------------------------------------------------------------- -# Salt — Sites to provision on the legacy web server -# -# Currently, this is deployed to ysul.nasqueron.org +# Salt — Database server — MySQL # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Project: Nasqueron +# Created: 2017-10-27 # License: Trivial work, not eligible to copyright # ------------------------------------------------------------- include: - - .account - - .directories - - .static-sites - - .be/dereckson - - .org/nasqueron + - .mysql-server diff --git a/roles/dbserver-mysql/mysql-server/cnf.sls b/roles/dbserver-mysql/mysql-server/cnf.sls new file mode 100644 --- /dev/null +++ b/roles/dbserver-mysql/mysql-server/cnf.sls @@ -0,0 +1,30 @@ +# ------------------------------------------------------------- +# Salt — Database server — MySQL +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Project: Nasqueron +# Created: 2017-10-27 +# License: Trivial work, not eligible to copyright +# ------------------------------------------------------------- + +{% from "map.jinja" import dirs with context %} + +# ------------------------------------------------------------- +# Main my.cnf +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +{% set use_zfs = salt['node.has']()['zfs:pool'] %} +{% set tank = salt['pillar.get']("nodes:" + grains['id'] + ":zfs:pool", '') %} + +{{ dirs.etc }}/my.cnf: + file.managed: + - source: salt://roles/dbserver-mysql/mysql-server/files/my.cnf + - template: jinja + - context: + etc: {{ dirs.etc }} + use_zfs: {{ use_zfs }} + zfs_tank: {{ tank }} + +/var/run/mysqld: + file.directory: + - user: mysql + - dir_mode: 755 diff --git a/roles/dbserver-mysql/mysql-server/files/my.cnf b/roles/dbserver-mysql/mysql-server/files/my.cnf new file mode 100644 --- /dev/null +++ b/roles/dbserver-mysql/mysql-server/files/my.cnf @@ -0,0 +1,70 @@ +# ------------------------------------------------------------- +# MySQL configuration +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Project: Nasqueron +# Created: 2015-04-21 +# License: Trivial work, not eligible to copyright +# ------------------------------------------------------------- + +# ------------------------------------------------------------- +# Client +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +[client] +port = 3306 +socket = /var/run/mysqld/mysqld.sock + +# ------------------------------------------------------------- +# Server wrapper +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +[mysqld_safe] +pid-file = /var/run/mysqld/mysqld.pid +socket = /var/run/mysqld/mysqld.sock +nice = 0 + +# ------------------------------------------------------------- +# Generic server settings +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +[mysqld] +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 +explicit_defaults_for_timestamp + +# ------------------------------------------------------------- +# InnoDB / XtraDB configuration +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +innodb_buffer_pool_size = 410M + +{% if use_zfs %} +innodb_data_home_dir = /{{ tank }}/mysql-innodb-data +innodb_log_group_home_dir = /{{ tank }}/mysql-innodb-logs + +skip-innodb_doublewrite +{% endif %} + +# ------------------------------------------------------------- +# Applications configuration +# +# :: Phabricator +# :: OTRS +# +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +# Phabricator +sql_mode = STRICT_ALL_TABLES +max_allowed_packet = 33554432 +ft_stopword_file = {{ etc }}/mysql/stopwords.txt +ft_min_word_len = 3 +ft_boolean_syntax = ' |-><()~*:""&^' + +# OTRS +key_buffer_size = 32M diff --git a/roles/webserver-legacy/init.sls b/roles/dbserver-mysql/mysql-server/init.sls copy from roles/webserver-legacy/init.sls copy to roles/dbserver-mysql/mysql-server/init.sls --- a/roles/webserver-legacy/init.sls +++ b/roles/dbserver-mysql/mysql-server/init.sls @@ -1,15 +1,11 @@ # ------------------------------------------------------------- -# Salt — Sites to provision on the legacy web server -# -# Currently, this is deployed to ysul.nasqueron.org +# Salt — Database server — MySQL # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Project: Nasqueron +# Created: 2017-10-27 # License: Trivial work, not eligible to copyright # ------------------------------------------------------------- include: - - .account - - .directories - - .static-sites - - .be/dereckson - - .org/nasqueron + - .software + - .cnf diff --git a/roles/dbserver-mysql/mysql-server/software.sls b/roles/dbserver-mysql/mysql-server/software.sls new file mode 100644 --- /dev/null +++ b/roles/dbserver-mysql/mysql-server/software.sls @@ -0,0 +1,18 @@ +# ------------------------------------------------------------- +# Salt — Database server — MySQL +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Project: Nasqueron +# Created: 2017-10-27 +# License: Trivial work, not eligible to copyright +# ------------------------------------------------------------- + +{% from "map.jinja" import packages with context %} + +# ------------------------------------------------------------- +# MySQL server +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +mysql_server_software: + pkg.installed: + - pkgs: + - {{ packages.mariadb }} diff --git a/roles/devserver/userland-software/files/make.conf b/roles/devserver/userland-software/files/make.conf new file mode 100644 --- /dev/null +++ b/roles/devserver/userland-software/files/make.conf @@ -0,0 +1,3 @@ +DEVELOPER=yes + +DEFAULT_VERSIONS+= php=7.1 mysql=10.2m apache=2.4 python=3.6 python3=3.6 python2=2.7 tcl=8.6 diff --git a/roles/devserver/userland-software/init.sls b/roles/devserver/userland-software/init.sls --- a/roles/devserver/userland-software/init.sls +++ b/roles/devserver/userland-software/init.sls @@ -15,3 +15,4 @@ - .dev - .misc - .phabricator + - .psysh diff --git a/roles/devserver/userland-software/misc.sls b/roles/devserver/userland-software/misc.sls --- a/roles/devserver/userland-software/misc.sls +++ b/roles/devserver/userland-software/misc.sls @@ -73,8 +73,27 @@ - portshaker - porttools - poudriere + - portsearch + +portsearch_database: + cmd.run: + - name: portsearch -u + - creates: /var/db/portsearch + - require: + - pkg: devserver_software_misc_ports + +/etc/make.conf: + file.managed: + - source: salt://roles/devserver/userland-software/files/make.conf {% endif %} +devserver_software_misc_p2p: + pkg: + - installed + - pkgs: + - transmission-daemon + - transmission-web + devserver_software_misc_gadgets: pkg: - installed diff --git a/roles/devserver/userland-software/psysh.sls b/roles/devserver/userland-software/psysh.sls new file mode 100644 --- /dev/null +++ b/roles/devserver/userland-software/psysh.sls @@ -0,0 +1,52 @@ +# ------------------------------------------------------------- +# Salt — Provision dev software +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Project: Nasqueron +# Created: 2017-11-03 +# License: Trivial work, not eligible to copyright +# ------------------------------------------------------------- + +{% from "map.jinja" import dirs with context %} + +# ------------------------------------------------------------- +# Prepare for installation +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +/usr/local/share/psysh: + file.directory: + - dir_mode: 755 + +# ------------------------------------------------------------- +# Fetch software and PHP manual +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +psysh_software: + archive.extracted: + - name: /opt/psysh + - enforce_toplevel: False + - source: https://github.com/bobthecow/psysh/releases/download/v0.8.13/psysh-v0.8.13.tar.gz + - source_hash: 4436931f4baeac0b6709d89efe5a517dbcdfb3335e90d9bf5deb83207f90e293 + +/usr/local/share/psysh/php_manual.sqlite: + file.managed: + - source: http://psysh.org/manual/en/php_manual.sqlite + - skip_verify: True + - require: + - file: /usr/local/share/psysh + +# ------------------------------------------------------------- +# Install binary +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +psysh_permissions: + file.managed: + - name: /opt/psysh/psysh + - mode: 755 + - require: + - archive: psysh_software + +{{ dirs.bin }}/psysh: + file.symlink: + - target: /opt/psysh/psysh + - require: + - file: psysh_permissions diff --git a/roles/shellserver/userland-software/base.sls b/roles/shellserver/userland-software/base.sls --- a/roles/shellserver/userland-software/base.sls +++ b/roles/shellserver/userland-software/base.sls @@ -55,6 +55,7 @@ - toilet - tmux - tree + - unrar - whois - woof {% if grains['os_family'] == 'Debian' %} diff --git a/roles/shellserver/userland-software/files/html-directories.sh b/roles/shellserver/userland-software/files/html-directories.sh new file mode 100755 --- /dev/null +++ b/roles/shellserver/userland-software/files/html-directories.sh @@ -0,0 +1,18 @@ +#!/bin/sh +# +# Generates HTML directories listing, similar to nginx autoindex output +# +# Usage: html-directories [directory] + +DIR=$1 +[ -z "$DIR" ] && DIR="." +TITLE="Index of $DIR" + +echo "<html>" +echo "<head><title>$TITLE</title></head>" +echo '<body bgcolor="white">' +echo "<h1>$TITLE</h1><hr>" +echo '<pre><a href="../">../</a>' +find $DIR -type d -depth 1 -exec echo "<a href=\"{}\">$(basename "{}")/</a>" \; +echo "</pre><hr></body>" +echo "</html>" diff --git a/roles/shellserver/userland-software/web.sls b/roles/shellserver/userland-software/web.sls --- a/roles/shellserver/userland-software/web.sls +++ b/roles/shellserver/userland-software/web.sls @@ -6,7 +6,7 @@ # License: Trivial work, not eligible to copyright # ------------------------------------------------------------- -{% from "map.jinja" import packages with context %} +{% from "map.jinja" import dirs, packages with context %} # ------------------------------------------------------------- # nginx @@ -34,3 +34,8 @@ pkg.installed: - pkgs: - igal2 + +{{ dirs.bin }}/html-directories: + file.managed: + - source: salt://roles/shellserver/userland-software/files/html-directories.sh + - mode: 755 diff --git a/roles/webserver-legacy/files/dot.arcrc.json b/roles/webserver-legacy/files/dot.arcrc.json new file mode 100644 --- /dev/null +++ b/roles/webserver-legacy/files/dot.arcrc.json @@ -0,0 +1,5 @@ +{ + "config": { + "default": "https://devcentral.nasqueron.org/" + } +} diff --git a/roles/webserver-legacy/init.sls b/roles/webserver-legacy/init.sls --- a/roles/webserver-legacy/init.sls +++ b/roles/webserver-legacy/init.sls @@ -10,6 +10,7 @@ include: - .account - .directories + - .zr - .static-sites - .be/dereckson - .org/nasqueron diff --git a/roles/webserver-legacy/zr.sls b/roles/webserver-legacy/zr.sls new file mode 100644 --- /dev/null +++ b/roles/webserver-legacy/zr.sls @@ -0,0 +1,121 @@ +# ------------------------------------------------------------- +# Salt — Sites to provision on the legacy web serves +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Project: Nasqueron +# Created: 2017-04-28 +# License: Trivial work, not eligible to copyright +# ------------------------------------------------------------- + +{% from "map.jinja" import dirs with context %} +{% set zr_home = "/home/zr" %} + +# ------------------------------------------------------------- +# But first, we interrupt your configuration for some ASCI art. +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# +# +# ___ ___ ___ ___ ___ +# / /\ / /\ /__/\ /__/| / /\ +# / /::| / /:/_ | |::\ | |:| / /:/_ +# / /:/:| / /:/ /\ | |:|:\ | |:| / /:/ /\ +# / /:/|:|__ / /:/ /:/_ __|__|:|\:\ __| |:| / /:/ /:/_ +# /__/:/ |:| /\ /__/:/ /:/ /\ /__/::::| \:\ /__/\_|:|____ /__/:/ /:/ /\ +# \__\/ |:|/:/ \ \:\/:/ /:/ \ \:\~~\__\/ \ \:\/:::::/ \ \:\/:/ /:/ +# | |:/:/ \ \::/ /:/ \ \:\ \ \::/~~~~ \ \::/ /:/ +# | |::/ \ \:\/:/ \ \:\ \ \:\ \ \:\/:/ +# | |:/ \ \::/ \ \:\ \ \:\ \ \::/ +# |__|/ ___ \__\/ ___ \__\/ \__\/ ___ \__\/ ___ +# / /\ /__/\ ___ /__/\ / /\ +# / /::\ \ \:\ /__/| \ \:\ / /:/_ +# / /:/\:\ \__\:\ | |:| \ \:\ / /:/ /\ +# / /:/~/:/ ___ / /::\ | |:| _____\__\:\ / /:/ /:/_ +# /__/:/ /:/___ /__/\ /:/\:\ __|__|:| /__/::::::::\ /__/:/ /:/ /\ +# \ \:\/:::::/ \ \:\/:/__\/ /__/::::\ \ \:\~~\~~\/ \ \:\/:/ /:/ +# \ \::/~~~~ \ \::/ ~\~~\:\ \ \:\ ~~~ \ \::/ /:/ +# \ \:\ \ \:\ \ \:\ \ \:\ \ \:\/:/ +# \ \:\ \ \:\ \__\/ \ \:\ \ \::/ +# \__\/ \__\/ \__\/ \__\/ +# + +# ------------------------------------------------------------- +# Required software +# +# :: jq +# :: arc +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +zr_required_sofware: + pkg.installed: + - pkgs: + - jq + # Devserver role provides their own Git clone of Arcanist + # For other servers, we need the package. + {% if not salt['node.has_role']('devserver') %} + - arcanist + {% endif %} + +# ------------------------------------------------------------- +# Account +# +# This account is used by Jenkins jobs to deploy artefacts +# after a build. +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +zr_account: + user.present: + - name: zr + - fullname: Zemke-Rhyne + - uid: 8900 + - gid: 9002 + - home: {{ zr_home }} + +# ------------------------------------------------------------- +# Deploy files and directory +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +{% for dir in ['data', 'lib'] %} +{{ zr_home }}/{{ dir }}: + file.recurse: + - source: salt://software/zemke-rhyne/{{ dir }} + - include_empty: True + - clean: False + - dir_mode: 755 + - file_mode: 644 + - user: 8900 + - group: 9002 +{% endfor %} + +{{ zr_home }}/bin: + file.recurse: + - source: salt://software/zemke-rhyne/bin + - dir_mode: 755 + - file_mode: 755 + - user: 8900 + - group: 9002 + +{% for file in ['README', 'Makefile', '.arcconfig', '.arclint'] %} +{{ zr_home }}/{{ file }}: + file.managed: + - source: salt://software/zemke-rhyne/{{ file }} + - mode: 644 + - user: 8900 + - group: 9002 +{% endfor %} + +{{ zr_home }}/.arcrc: + file.managed: + - source: salt://roles/webserver-legacy/files/dot.arcrc.json + - replace: False + - mode: 600 + - user: 8900 + - group: 9002 + +zr_make: + cmd.run: + - name: make + - runas: zr + - cwd: {{ zr_home }} + - creates: {{ zr_home }}/.ssh/authorized_keys + - require: + - user: zr_account + - file: {{ zr_home }}/Makefile diff --git a/top.sls b/top.sls --- a/top.sls +++ b/top.sls @@ -19,6 +19,7 @@ - roles/saltmaster 'ysul': - roles/paas-jails + - roles/dbserver-mysql - roles/webserver-core - roles/webserver-legacy - roles/webserver-varnish