diff --git a/docs/servers.md b/docs/servers.md index deb392ef20440b9da66db3f0be21421e1c68b5a7..42e6e5b56dab9ef399e96ec3950de9d21f871227 100644 --- a/docs/servers.md +++ b/docs/servers.md @@ -131,11 +131,6 @@ Prometheus, and Grafana server which receives selected performance/metrics from - [Grafana](https://dashboards.archlinux.org) and [docs/grafana.md](./docs/grafana.md) - Prometheus -## patchwork.archlinux.org - -### Services - - patchwork - ## redirect.archlinux.org ### Services diff --git a/docs/ssh-hostkeys.txt b/docs/ssh-hostkeys.txt index e89944a9f47a171973ee4a3e1cd831b9a037326b..25eb90e7d7ef41de5952f0ac14d4bcf871aefd62 100644 --- a/docs/ssh-hostkeys.txt +++ b/docs/ssh-hostkeys.txt @@ -240,17 +240,6 @@ 256 MD5:fe:a1:ab:4d:f6:5d:76:f9:a3:99:be:fd:51:ee:77:ed root@archlinux-packer (ED25519) 3072 MD5:ad:ee:a6:6d:b7:9b:f0:f7:78:9f:df:b4:53:2e:5f:9f root@archlinux-packer (RSA) -# patchwork.archlinux.org -1024 SHA256:FRn2yrB4ABYzLFs9muVWw/4PRq3ahNoV0EnweAip87g root@archlinux-packer (DSA) -256 SHA256:Zmox+d8LXNaUo4d8ywmPXTHyjV7mCCAFYycEZd73c6w root@archlinux-packer (ECDSA) -256 SHA256:xdY/tDi/x0z2SDTxzCrrt+Oygn5IYI0kMyN9JlPesw4 root@archlinux-packer (ED25519) -3072 SHA256:erHz5RJTWqaKPUCB/bZMBxQfXQIi23rrrOOTPH+KUtc root@archlinux-packer (RSA) - -1024 MD5:44:f4:b3:50:0e:ef:bb:ee:b6:85:06:b6:fb:bd:02:6f root@archlinux-packer (DSA) -256 MD5:6c:f2:1b:97:21:77:f2:b2:03:e7:9a:8f:aa:0d:c6:6c root@archlinux-packer (ECDSA) -256 MD5:6b:03:f5:0e:0f:4c:50:34:7a:19:f8:28:48:5b:93:09 root@archlinux-packer (ED25519) -3072 MD5:0a:03:c6:ef:a1:9d:24:a7:59:ce:bb:41:87:6a:e0:af root@archlinux-packer (RSA) - # phrik.archlinux.org 1024 SHA256:+482UWH5/pSMZ8VoIgkGZxGOm1tZ72rI5RrZsnQHDVk root@archlinux-packer (DSA) 256 SHA256:qL+sG+DBwRKII1uPVcFHKQUfQNd7sW0x6iop6/Ki1Og root@archlinux-packer (ECDSA) diff --git a/docs/ssh-known_hosts.txt b/docs/ssh-known_hosts.txt index 8275c63e129db4ae5817bf9fade4ecd4393504c3..8e3c0f04ea2bd63285791dab811cae09cd8697c6 100644 --- a/docs/ssh-known_hosts.txt +++ b/docs/ssh-known_hosts.txt @@ -120,11 +120,6 @@ monitoring.archlinux.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAA monitoring.archlinux.org ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJCU4tNW4WHTQ43+HBbho/sbsU3BCzildSOziaJrVNvE monitoring.archlinux.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDVAMU3iku88nPDAKjB++je4RRRkotwNdJEhRcO45Ujslhbq67D6BwcnaliR0ekZuhkQFs13dTNVGeb1VqN3I/wHVaECsd/Gz7Q2M5Ki2CqdUR8ztGaW/eWpY9r8Yk+h/fWdnZdnJPYhk7uZftJI9buqyqpkthvjQy9fZ2wyOb/BAk+7BYUdclcvCEMlW9HQljpgmj7snjTpMYMN0t3U7X3xydcOO6PwNIoSikufuMmbtCqtsUx/Xl1mVU2Xi584L8arjoKn9a4OjMUDorqAlFLeco6bWn5XEdfim6e+W55ZKg333j4KGMBFVW5Dk5mZGKfykalq4WONMe3nu0m4EqYFA/rGG/smliqjxCbWu9N6eDw1gKYOeq5gzx7ppQ9zL3BjL3gl+AbeUckxNCQ+zM66amZC6GmciiMq+hnpqeTUhocaGeriGVda4vO+IlCp4Wwx1zqcCZaHyzt/eIWT9DuXDqHq4gAshluGUR0gFTJ/0qhrYxQA/dW681LE3r9YLE= -# patchwork.archlinux.org -patchwork.archlinux.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOpXUEDbpDxSTdEAZ9At+cpAxEiJBmAf/CbXkQ/868QjYmOg1nKrkBfEWStxH+TQJf7jb3W7wc8WRh1yb26IqfU= -patchwork.archlinux.org ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB/UP7+uXVjWrH21grHC62KETnkCt5+HPrfhgGwYkFFy -patchwork.archlinux.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC+Ykvy67N1lQbk5aKlDhN62+ymDr1MbBBwu+e5rXuxUcuKrNcK1reOqdMgGoxXE5ip6DvFTu1oxKDaHEeVH7tEdiDaC+cHljQEDjNd0qzdoyfxiL9PN9YcOgtUsBpKzOzORTc9n8grfG/bVeI2QLAorGk9sKVNsFDgawKTv5MVnhw4hE6Nbx+qZhtb5u9nJclhNv+MKI/y/3SrKibOU3yONlEDuiq5/zK8UkgTAnQ+F1TgjscqTwinFh0jEVAAqivNaWSIwBrjZDf9p433lOprotDAr0jZm/F+mPybZJhe1OXNutM5cnEZ2vEvJE52X2p60Hpo4vGtOrfLvSpub6aXaX9hAs2Pf+OPbHU6AET/nOz6GlzvUOs9H8fPyXn+JUjm1YXiqSZZHiA7V9qoNNcP2zaOPXW8tJEVV71r2pfA/fJ/L18bg8OgUIn4iRjODl8q29ZmRh4h4Azm41fwksQZq2rxBuE4likUikg6AkJtd/qWHAMwLRTQrTtho2GxN50= - # phrik.archlinux.org phrik.archlinux.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHHPJ79o6go5pRmE5eoeHe6kS9gM7Nsx///MA/tpmyqY/8ktgYu6MTnvSYKdgF1O4oSTfsU5mc7grpq7Qsl8+tA= phrik.archlinux.org ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO45OY6f+b4KyFq13PyxjN/EcU11cgVZ1CrQZN2hGP0h diff --git a/host_vars/patchwork.archlinux.org/misc b/host_vars/patchwork.archlinux.org/misc deleted file mode 100644 index a4a01be38ce4bb0abe45badcb2501bcd96147115..0000000000000000000000000000000000000000 --- a/host_vars/patchwork.archlinux.org/misc +++ /dev/null @@ -1,6 +0,0 @@ -filesystem: btrfs -memcached_socket: "/run/memcached/patchwork.sock" -fetchmail_user: "patchwork@archlinux.org" -fetchmail_delivery_cmd: "/usr/local/bin/patchwork-parsemail-wrapper.sh" -wireguard_address: 10.0.0.23 -wireguard_public_key: DVeDuKQKf4FzfgS8hp3iZj1tD7gi3SJm8GqDfA+XZn4= diff --git a/host_vars/patchwork.archlinux.org/vault_patchwork.yml b/host_vars/patchwork.archlinux.org/vault_patchwork.yml deleted file mode 100644 index 493fa7c8b11b034f1bfaca0deb61cf24b2aa0386..0000000000000000000000000000000000000000 --- a/host_vars/patchwork.archlinux.org/vault_patchwork.yml +++ /dev/null @@ -1,8 +0,0 @@ -$ANSIBLE_VAULT;1.1;AES256 -33383339643636623338323330653738393661623238353864393963393938303337366134313238 -3036353833313862346538376362383461636338343439310a643230383865343239626664636530 -66636632306132656361653465323666646263623933353336623630393166353561656238653834 -6166303662626237340a316331336131326163613861316465343064343061393662333166396365 -64396538343236396365646464366130333866346134616639373530663539333733666637303066 -66616662346532376633326233663734616365383835376232333962306433663335383030626530 -623535653132383862346136343937326638 diff --git a/host_vars/patchwork.archlinux.org/vault_wireguard.yml b/host_vars/patchwork.archlinux.org/vault_wireguard.yml deleted file mode 100644 index 146dc4eda0abdcf441a7e91e36f4135c5a782181..0000000000000000000000000000000000000000 --- a/host_vars/patchwork.archlinux.org/vault_wireguard.yml +++ /dev/null @@ -1,9 +0,0 @@ -$ANSIBLE_VAULT;1.1;AES256 -38316462656565326465366437633163303835333463653631653833646662323430656439356633 -3364626234343837363333353866616134303032653865640a663834313462616236623432613533 -31363631356464393535373731613538376636396166643862613261643431323631613133623833 -6665386233306337360a623066343237366136653631316436616438333662363666316161653162 -33656137653236653433636666343532383834313530613533323363646361353038383661326632 -61613934613539653439356161646439393931343066333466623836306433623333393266363938 -38366665376633346261616635663465636162393366323834346537633434366631326662333834 -33646334393733306363 diff --git a/hosts b/hosts index d7db9727eab3bda87465a3afe954e2df4a90e26e..d2733b131a9bcdb3f91f31a3693637142a4ab1f4 100644 --- a/hosts +++ b/hosts @@ -44,7 +44,6 @@ mail.archlinux.org matrix.archlinux.org md.archlinux.org monitoring.archlinux.org -patchwork.archlinux.org phrik.archlinux.org quassel.archlinux.org reproducible.archlinux.org @@ -68,7 +67,6 @@ lists.archlinux.org man.archlinux.org matrix.archlinux.org md.archlinux.org -patchwork.archlinux.org quassel.archlinux.org state.archlinux.org @@ -92,7 +90,6 @@ repro1.pkgbuild.com repro2.pkgbuild.com [memcached] -patchwork.archlinux.org wiki.archlinux.org [prometheus] @@ -123,7 +120,6 @@ matrix.archlinux.org md.archlinux.org mirror.pkgbuild.com monitoring.archlinux.org -patchwork.archlinux.org phrik.archlinux.org quassel.archlinux.org redirect.archlinux.org diff --git a/playbooks/patchwork.archlinux.org.yml b/playbooks/patchwork.archlinux.org.yml deleted file mode 100644 index 4776e4c8aa93b6f66516f9546bbd18d40d9908be..0000000000000000000000000000000000000000 --- a/playbooks/patchwork.archlinux.org.yml +++ /dev/null @@ -1,21 +0,0 @@ -- name: Setup patchwork.archlinux.org - hosts: patchwork.archlinux.org - remote_user: root - roles: - - { role: common } - - { role: sshd } - - { role: root_ssh } - - { role: borg_client, tags: ["borg"] } - - { role: certbot } - - { role: nginx } - - { role: postfix, postfix_relayhost: "mail.archlinux.org" } - - { role: fetchmail } - - { role: postgres } - - { role: sudo } - - { role: uwsgi } - - { role: memcached } - - { role: patchwork } - - { role: fail2ban } - - { role: prometheus_exporters } - - { role: promtail } - - { role: wireguard } diff --git a/roles/patchwork/defaults/main.yml b/roles/patchwork/defaults/main.yml deleted file mode 100644 index 16dc017c1f02afbfd00d5b35e019c90634626463..0000000000000000000000000000000000000000 --- a/roles/patchwork/defaults/main.yml +++ /dev/null @@ -1,15 +0,0 @@ -patchwork_dir: '/srv/http/patchwork' -patchwork_domain: 'patchwork.archlinux.org' -patchwork_nginx_conf: '/etc/nginx/nginx.d/patchwork.conf' -patchwork_forced_deploy: false -patchwork_admins: ["('Giancarlo Razzolini', 'grazzolini@archlinux.org')", "('Frederik Schwan', 'freswa@archlinux.org')"] -patchwork_version: 'v3.0.0' -patchwork_from_email: 'Arch Linux Patchwork <patchwork@patchwork.archlinux.org>' -patchwork_notification_frequency: '10m' - -patchwork_db: 'patchwork' -patchwork_db_host: 'localhost' -patchwork_db_user: 'patchwork' -patchwork_db_backup_user: 'patchwork_backup' -patchwork_db_backup_table_objs: 'ALL_IN_SCHEMA' -patchwork_db_backup_sequence_objs: 'ALL_IN_SCHEMA' diff --git a/roles/patchwork/handlers/main.yml b/roles/patchwork/handlers/main.yml deleted file mode 100644 index fa1c21bb0d3659dfd953f9f44d4e5173f32e674e..0000000000000000000000000000000000000000 --- a/roles/patchwork/handlers/main.yml +++ /dev/null @@ -1,6 +0,0 @@ -- name: Daemon reload - systemd: - daemon-reload: true - -- name: Restart patchwork memcached - service: name=patchwork-memcached state=restarted diff --git a/roles/patchwork/tasks/main.yml b/roles/patchwork/tasks/main.yml deleted file mode 100644 index daa39b9da8e8f1de92c4c3fb19ae9c54a1b197e6..0000000000000000000000000000000000000000 --- a/roles/patchwork/tasks/main.yml +++ /dev/null @@ -1,141 +0,0 @@ -- name: Run maintenance mode - include_role: - name: maintenance - vars: - service_name: "patchwork" - service_domain: "{{ patchwork_domain }}" - service_alternate_domains: [] - service_nginx_conf: "{{ patchwork_nginx_conf }}" - when: maintenance is defined - -- name: Install packages - pacman: name=gcc,git,python,python-psycopg2,sudo,uwsgi-plugin-python,python-pip state=present - -- name: Make patchwork user - user: name=patchwork shell=/bin/false home="{{ patchwork_dir }}" createhome=no - -- name: Fix home permissions - file: state=directory owner=patchwork group=patchwork mode=0755 path="{{ patchwork_dir }}" - -- name: Set patchwork groups - user: name=patchwork groups=uwsgi - -- name: Create ssl cert - include_role: - name: certificate - vars: - domains: ["{{ patchwork_domain }}"] - -- name: Set up nginx - template: src=nginx.d.conf.j2 dest="{{ patchwork_nginx_conf }}" owner=root group=root mode=644 - notify: - - Reload nginx - when: maintenance is not defined - tags: ['nginx'] - -- name: Make nginx log dir - file: path=/var/log/nginx/{{ patchwork_domain }} state=directory owner=root group=root mode=0755 - -- name: Clone patchwork repo - git: repo=https://github.com/getpatchwork/patchwork.git dest="{{ patchwork_dir }}" version="{{ patchwork_version }}" - become: true - become_user: patchwork - register: release - -- name: Make virtualenv - command: python -m venv "{{ patchwork_dir }}"/env creates="{{ patchwork_dir }}/env/bin/python" - become: true - become_user: patchwork - -- name: Install from requirements into virtualenv - pip: requirements="{{ patchwork_dir }}/requirements-prod.txt" virtualenv="{{ patchwork_dir }}/env" extra_args="--no-binary :all:" - become: true - become_user: patchwork - register: virtualenv - -- name: Fix home permissions - file: state=directory owner=patchwork group=patchwork mode=0755 path="{{ patchwork_dir }}" - -- name: Configure patchwork - template: src=production.py.j2 dest="{{ patchwork_dir }}/patchwork/settings/production.py" owner=patchwork group=patchwork mode=0660 - register: config - no_log: true - -- name: Create patchwork db users - postgresql_user: name={{ item.user }} password={{ item.password }} login_host="{{ patchwork_db_host }}" login_password="{{ vault_postgres_users.postgres }}" encrypted=yes - no_log: true - with_items: - - { user: "{{ patchwork_db_user }}", password: "{{ vault_patchwork_db_password }}" } - - { user: "{{ patchwork_db_backup_user }}", password: "{{ vault_patchwork_db_backup_password }}" } - -- name: Create patchwork db - postgresql_db: name="{{ patchwork_db }}" login_host="{{ patchwork_db_host }}" login_password="{{ vault_postgres_users.postgres }}" owner="{{ patchwork_db_user }}" - register: db_created - -- name: Django migrate - django_manage: app_path="{{ patchwork_dir }}" command=migrate virtualenv="{{ patchwork_dir }}/env" - become: true - become_user: patchwork - when: (db_created.changed or release.changed or config.changed or virtualenv.changed or patchwork_forced_deploy) - -- name: DB privileges for patchwork users - postgresql_privs: database="{{ patchwork_db }}" host="{{ patchwork_db_host }}" login="{{ patchwork_db_user }}" password="{{ vault_patchwork_db_password }}" - privs=CONNECT roles="{{ item }}" type=database - with_items: - - "{{ patchwork_db_backup_user }}" - -- name: Table privileges for patchwork users - postgresql_privs: database="{{ patchwork_db }}" host="{{ patchwork_db_host }}" login="{{ patchwork_db_user }}" password="{{ vault_patchwork_db_password }}" - privs=SELECT roles="{{ item.user }}" type=table objs="{{ item.objs }}" - with_items: - - { user: "{{ patchwork_db_backup_user }}", objs: "{{ patchwork_db_backup_table_objs }}" } - -- name: Sequence privileges for patchwork users - postgresql_privs: database="{{ patchwork_db }}" host="{{ patchwork_db_host }}" login="{{ patchwork_db_user }}" password="{{ vault_patchwork_db_password }}" - privs=SELECT roles="{{ item.user }}" type=sequence objs="{{ item.objs }}" - with_items: - - { user: "{{ patchwork_db_backup_user }}", objs: "{{ patchwork_db_backup_sequence_objs }}" } - -- name: Django collectstatic - django_manage: app_path="{{ patchwork_dir }}" command=collectstatic virtualenv="{{ patchwork_dir }}/env" - become: true - become_user: patchwork - when: (db_created.changed or release.changed or config.changed or virtualenv.changed or patchwork_forced_deploy) - -- name: Install patchwork parsemail script - template: src="patchwork-parsemail-wrapper.sh.j2" dest="/usr/local/bin/patchwork-parsemail-wrapper.sh" owner=root group=root mode=0755 - -- name: Install sudoer rights for fetchmail to call patchwork - template: src=sudoers-fetchmail-patchwork.j2 dest=/etc/sudoers.d/fetchmail-patchwork owner=root group=root mode=0440 - -- name: Install patchwork memcached service - template: src="patchwork-memcached.service.j2" dest="/etc/systemd/system/patchwork-memcached.service" owner=root group=root mode=0644 - notify: - - Daemon reload - -- name: Install patchwork notification service - template: src="patchwork-notification.service.j2" dest="/etc/systemd/system/patchwork-notification.service" owner=root group=root mode=0644 - notify: - - Daemon reload - -- name: Install patchwork notification timer - template: src="patchwork-notification.timer.j2" dest="/etc/systemd/system/patchwork-notification.timer" owner=root group=root mode=0644 - notify: - - Daemon reload - -- name: Deploy patchwork - template: src=patchwork.ini.j2 dest=/etc/uwsgi/vassals/patchwork.ini owner=patchwork group=http mode=0644 - -- name: Deploy new release - file: path=/etc/uwsgi/vassals/patchwork.ini state=touch owner=patchwork group=http mode=0644 - when: (release.changed or config.changed or virtualenv.changed or patchwork_forced_deploy) - -- name: Start and enable patchwork memcached service and notification timer - systemd: - name: "{{ item }}" - enabled: true - state: started - daemon_reload: true - with_items: - - patchwork-memcached.service - - patchwork-notification.timer diff --git a/roles/patchwork/templates/503.html.j2 b/roles/patchwork/templates/503.html.j2 deleted file mode 100644 index 1d40f4a1b87c8c5aeb309461adf04bb70d643210..0000000000000000000000000000000000000000 --- a/roles/patchwork/templates/503.html.j2 +++ /dev/null @@ -1,467 +0,0 @@ -<!DOCTYPE HTML> -<html> -<head> - <title>Arch Linux Patchwork Maintenance</title> - <meta name="robots" content="noindex,nofollow" /> - <style type="text/css"> - * { margin: 0; padding: 0; } - body { background: #f6f9fc; color: #222; font-family: sans-serif; } - a { text-decoration: none; color: #07b; outline: none; } - a:visited { color: #666; } - a:focus { color: #e90; } - a:hover { text-decoration: underline; color: #999; } - a:active { color: #e90; } - h2 { font-size: 1.5em; margin-bottom: 0.5em; border-bottom: 1px solid #888; } - #content { font-size: 0.812em; width: 95%; margin: 0 auto; padding-top: 20px; width: 500px; } - #content ul { margin-top: 5px; } - #content li { margin-left: 20px; } - #content div { margin: 20px auto; text-align: center; } - #content img { border: none; } - #footer { clear: both; padding-top: 10px; font-size: 0.7em; } - #archnavbar { height: 40px; padding: 10px 15px; background: #333; border-bottom: 5px #08c solid; } - #archnavbarlogo { float: left; margin: 0; padding: 0; height: 40px; width: 190px; background: url('data:image/png;base64,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') no-repeat; } - #archnavbarlogo h1 { margin: 0; padding: 0; text-indent: -9999px; } - #archnavbarlogo a { display: block; height: 40px; width: 190px; } - </style> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> -</head> -<body> - <div id="archnavbar"> - <div id="archnavbarlogo"><h1><a href="#">Arch Linux</a></h1></div> - </div> - <div id="content"> - <h2>Don't Panic!</h2> - <p>This site is down due to maintenance. We will be back soon. In the meantime you might get help at the following sites:</p> - <ul id="sitelinks"> - <li><a href="https://www.archlinux.org">Main page</a></li> - <li><a href="https://bbs.archlinux.org">Forums</a></li> - <li><a href="https://wiki.archlinux.org">Wiki</a></li> - <li>IRC: #archlinux on Libera Chat</li> - </ul> - <div> - <img src="data:image/png;base64, - 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" alt="Don't Panic!" /></div> - <div id="footer"> - Arch Linux - </div> - </div> - <script> - var sitelinks = document.getElementById('sitelinks').getElementsByTagName('a'); - - for (var i = 0; i < sitelinks.length; i++) { - if (sitelinks[i].href.indexOf(window.location.hostname) >= 0) { - sitelinks[i].parentNode.parentNode.removeChild( - sitelinks[i].parentNode); - i--; - } - } - </script> -</body> -</html> diff --git a/roles/patchwork/templates/nginx.d.conf.j2 b/roles/patchwork/templates/nginx.d.conf.j2 deleted file mode 100644 index 3a796bdc15e18ade4ab8180838f56d807f38833d..0000000000000000000000000000000000000000 --- a/roles/patchwork/templates/nginx.d.conf.j2 +++ /dev/null @@ -1,46 +0,0 @@ -upstream patchwork { - server unix:///run/uwsgi/patchwork.sock; -} - -server { - listen 80; - listen [::]:80; - server_name {{ patchwork_domain }}; - - access_log /var/log/nginx/{{ patchwork_domain }}/access.log reduced; - access_log /var/log/nginx/{{ patchwork_domain }}/access.log.json json_reduced; - error_log /var/log/nginx/{{ patchwork_domain }}/error.log; - - include snippets/letsencrypt.conf; - - location / { - access_log off; - return 301 https://$server_name$request_uri; - } -} - -server { - listen 443 ssl http2; - listen [::]:443 ssl http2; - server_name {{ patchwork_domain }}; - - access_log /var/log/nginx/{{ patchwork_domain }}/access.log reduced; - access_log /var/log/nginx/{{ patchwork_domain }}/access.log.json json_reduced; - error_log /var/log/nginx/{{ patchwork_domain }}/error.log; - - ssl_certificate /etc/letsencrypt/live/{{ patchwork_domain }}/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/{{ patchwork_domain }}/privkey.pem; - ssl_trusted_certificate /etc/letsencrypt/live/{{ patchwork_domain }}/chain.pem; - - location /static/ { - alias {{ patchwork_dir }}/htdocs/static/; - } - - location / { - access_log /var/log/nginx/{{ patchwork_domain }}/access.log main; - access_log /var/log/nginx/{{ patchwork_domain }}/access.log.json json_main; - include uwsgi_params; - uwsgi_pass patchwork; - } - -} diff --git a/roles/patchwork/templates/patchwork-memcached.service.j2 b/roles/patchwork/templates/patchwork-memcached.service.j2 deleted file mode 100644 index 463a9849f3fcda8c015947b6a87a2e0bd781e0f6..0000000000000000000000000000000000000000 --- a/roles/patchwork/templates/patchwork-memcached.service.j2 +++ /dev/null @@ -1,17 +0,0 @@ -[Unit] -Description=Patchwork Memcached Daemon -After=network.target - -[Service] -User=patchwork -Group=memcached -# Remove '-l 127.0.0.1' to listen on all addresses -ExecStart=/usr/bin/memcached -s /run/memcached/patchwork.sock -o modern -a 770 -Restart=always -PrivateTmp=yes -PrivateDevices=yes -ProtectSystem=full -MemoryDenyWriteExecute=yes - -[Install] -WantedBy=multi-user.target diff --git a/roles/patchwork/templates/patchwork-notification.service.j2 b/roles/patchwork/templates/patchwork-notification.service.j2 deleted file mode 100644 index 3a7b004af0d9ffcb6e7f6c10f0e0ea485241cfb0..0000000000000000000000000000000000000000 --- a/roles/patchwork/templates/patchwork-notification.service.j2 +++ /dev/null @@ -1,12 +0,0 @@ -[Unit] -Description=Patchwork notification service -After=network.target - -[Service] -Type=oneshot -User=patchwork -WorkingDirectory={{ patchwork_dir }} -ExecStart={{ patchwork_dir }}/env/bin/python manage.py cron - -[Install] -WantedBy=multi-user.target diff --git a/roles/patchwork/templates/patchwork-notification.timer.j2 b/roles/patchwork/templates/patchwork-notification.timer.j2 deleted file mode 100644 index 1c56a7119614716096b9df8df4b83c50aaee44b1..0000000000000000000000000000000000000000 --- a/roles/patchwork/templates/patchwork-notification.timer.j2 +++ /dev/null @@ -1,9 +0,0 @@ -[Unit] -Description=Patchwork notification timer - -[Timer] -OnUnitActiveSec={{ patchwork_notification_frequency }} -OnBootSec={{ patchwork_notification_frequency }} - -[Install] -WantedBy=timers.target diff --git a/roles/patchwork/templates/patchwork-parsemail-wrapper.sh.j2 b/roles/patchwork/templates/patchwork-parsemail-wrapper.sh.j2 deleted file mode 100644 index 4113ebde866636a20edbb4ecb21ea2a0f5c08b8a..0000000000000000000000000000000000000000 --- a/roles/patchwork/templates/patchwork-parsemail-wrapper.sh.j2 +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -sudo -u patchwork /usr/bin/env PW_PYTHON={{ patchwork_dir }}/env/bin/python {{ patchwork_dir }}/patchwork/bin/parsemail.sh diff --git a/roles/patchwork/templates/patchwork.ini.j2 b/roles/patchwork/templates/patchwork.ini.j2 deleted file mode 100644 index c9180c75e93ac5a7a0fb8b950118ebc2a2506de4..0000000000000000000000000000000000000000 --- a/roles/patchwork/templates/patchwork.ini.j2 +++ /dev/null @@ -1,16 +0,0 @@ -[uwsgi] -plugins=python -chdir={{ patchwork_dir }} -pythonpath={{ patchwork_dir }} -module=patchwork.wsgi:application -socket=/run/uwsgi/patchwork.sock -chmod-socket=660 -virtualenv={{ patchwork_dir }}/env -processes=2 -threads=2 -master=true -uid=patchwork -gid=http -thunder-lock = true -daemonize=/var/log/uwsgi/patchwork.log -stats=/run/uwsgi/patchwork-stats.sock diff --git a/roles/patchwork/templates/production.py.j2 b/roles/patchwork/templates/production.py.j2 deleted file mode 100644 index 43019d300e2eafcd1b9fbac026061ca15204cded..0000000000000000000000000000000000000000 --- a/roles/patchwork/templates/production.py.j2 +++ /dev/null @@ -1,93 +0,0 @@ -""" -Sample production-ready settings for patchwork project. - -Most of these are commented out as they will be installation dependent. - -Design based on: - http://www.revsys.com/blog/2014/nov/21/recommended-django-project-layout/ -""" - -from __future__ import absolute_import - -import os - -from .base import * # noqa - -# -# Core settings -# https://docs.djangoproject.com/en/1.6/ref/settings/#core-settings -# - -# Security -# -# You'll need to replace this to a random string. The following python code can -# be used to generate a secret key: -# -# import string, random -# chars = string.letters + string.digits + string.punctuation -# print repr("".join([random.choice(chars) for i in range(0,50)])) - -SECRET_KEY = '{{ vault_patchwork_secret_key }}' - -# Email -# -# Replace this with your own details - -EMAIL_HOST = os.getenv('EMAIL_HOST', 'localhost') -EMAIL_PORT = os.getenv('EMAIL_PORT', 25) -EMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER', '') -EMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD', '') -EMAIL_USE_TLS = True - -DEFAULT_FROM_EMAIL = '{{ patchwork_from_email }}' -SERVER_EMAIL = DEFAULT_FROM_EMAIL -NOTIFICATION_FROM_EMAIL = DEFAULT_FROM_EMAIL - -{% if patchwork_admins %} -ADMINS = ( -{% for admin in patchwork_admins %} - {{ admin }}, -{% endfor %} -) -{% else %} -ADMINS = () -{% endif %} - -# Database -# -# If you're using a postgres database, connecting over a local unix-domain -# socket, then the following setting should work for you. Otherwise, -# see https://docs.djangoproject.com/en/1.7/ref/settings/#databases - -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.postgresql_psycopg2', - 'NAME': '{{ patchwork_db }}', - 'USER': '{{ patchwork_db_user }}', - 'PASSWORD': '{{ vault_patchwork_db_password }}', - 'HOST': '{{ patchwork_db_host }}', - 'PORT': 5432, - }, -} - -# -# Static files settings -# https://docs.djangoproject.com/en/1.7/ref/settings/#static-files -# - -STATIC_ROOT = '{{ patchwork_dir }}/htdocs/static' - -TIME_ZONE = 'UTC' - -ALLOWED_HOSTS = ['{{ patchwork_domain }}'] - -## Define cache settings -CACHES = { - 'default': { - 'BACKEND' : 'django.core.cache.backends.memcached.MemcachedCache', - 'LOCATION': 'unix:/run/memcached/patchwork.sock', - } -} - -# We only support HTTPS -FORCE_HTTPS_LINKS = True diff --git a/roles/patchwork/templates/sudoers-fetchmail-patchwork.j2 b/roles/patchwork/templates/sudoers-fetchmail-patchwork.j2 deleted file mode 100644 index e0e2b2fdafe1b6f815f36b165064d78879f0add0..0000000000000000000000000000000000000000 --- a/roles/patchwork/templates/sudoers-fetchmail-patchwork.j2 +++ /dev/null @@ -1 +0,0 @@ -fetchmail ALL=(patchwork) NOPASSWD: /usr/bin/env PW_PYTHON={{ patchwork_dir }}/env/bin/python {{ patchwork_dir }}/patchwork/bin/parsemail.sh diff --git a/roles/postfix/defaults/main.yml b/roles/postfix/defaults/main.yml index 73e373014a7a89af767fd5ea440acf8521b981ef..1092661b8f06e8df03ff9b7657c8e49df06f42bc 100644 --- a/roles/postfix/defaults/main.yml +++ b/roles/postfix/defaults/main.yml @@ -1,7 +1,3 @@ -postfix_patchwork_enabled: false -postfix_patchwork_user: "patchwork" -postfix_patchwork_mail_handler: "/usr/local/bin/patchwork-parsemail-wrapper.sh" - mail_domain: "mail.archlinux.org" postfix_wiki_bounce_mail_handler: "/usr/local/bin/wiki-bouncehandler.pl" diff --git a/roles/postfix/templates/main.cf.j2 b/roles/postfix/templates/main.cf.j2 index d2c8386b28de95d0eac3aca4f1b76bc7082d0329..6633dc7a389f1773a21c11cf974e6f6502106f9d 100644 --- a/roles/postfix/templates/main.cf.j2 +++ b/roles/postfix/templates/main.cf.j2 @@ -167,18 +167,11 @@ local_recipient_maps = relocated_maps = ${indexed}/relocated relay_domains = -{%if postfix_patchwork_enabled %} - archlinux.org -{% endif %} transport_maps = ${indexed}/transport pcre:${config_directory}/transport.pcre -{% if postfix_patchwork_enabled %} -patchwork_destination_recipient_limit = 1 -{% endif %} - wiki_bouncehandler_destination_recipient_limit = 1 authorized_mailq_users = root diff --git a/roles/postfix/templates/master.cf.j2 b/roles/postfix/templates/master.cf.j2 index f0a01d44d1cafafc189034c314dd23aa9aabea6e..bcc0d108106b5946ed57e5310c97b51c6cbde538 100644 --- a/roles/postfix/templates/master.cf.j2 +++ b/roles/postfix/templates/master.cf.j2 @@ -82,10 +82,5 @@ lmtp unix - - n - - lmtp anvil unix - - n - 1 anvil scache unix - - n - 1 scache -{% if postfix_patchwork_enabled %} -patchwork unix - n n - - pipe - flags=DFRX user={{postfix_patchwork_user}} argv={{postfix_patchwork_mail_handler}} -{% endif %} - wiki_bouncehandler unix - n n - - pipe flags=DFRX user={{postfix_wiki_bounce_user}} argv=/usr/bin/systemd-cat {{postfix_wiki_bounce_mail_handler}} {{postfix_wiki_bounce_config}} diff --git a/roles/postfix/templates/transport.j2 b/roles/postfix/templates/transport.j2 index 8d483786e2c2e6773d04a3056923ea961c4d23ec..21dce04c3ede75f8a2d5b090199d3b17e096e122 100644 --- a/roles/postfix/templates/transport.j2 +++ b/roles/postfix/templates/transport.j2 @@ -4,6 +4,3 @@ #lists.archlinux.org mailman: gmail.com smtp-ipv4: -{% if postfix_patchwork_enabled %} -patchwork@archlinux.org patchwork: -{% endif %} diff --git a/tf-stage1/archlinux.tf b/tf-stage1/archlinux.tf index 1d5347d567d1a7d5bafdedcbd9fcfee533c0c9f7..5e76c6ced9886aa9345ad2195e4f905371e7fc3c 100644 --- a/tf-stage1/archlinux.tf +++ b/tf-stage1/archlinux.tf @@ -121,10 +121,6 @@ locals { server_type = "cx31" domain = "monitoring" } - "patchwork.archlinux.org" = { - server_type = "cx11" - domain = "patchwork" - } "phrik.archlinux.org" = { server_type = "cx11" domain = "phrik" @@ -174,6 +170,7 @@ locals { "tu-bylaws.aur" = "bbafd3ed82f336e0c52d3eb9774b2432" "reproducible-notes" = "8c657f2f2720db1c3db63be89605cf0d" "terms" = "0b62a71af2aa85fb491295b543b4c3d2" + "patchwork" = "37eeadf24d5cd6614e8edb1f12868a5e" } archlinux_page_gitlab_pages = {