Compare commits

..

17 commits

Author SHA1 Message Date
2c825d2b85
z9(group): remove all old ip references and change them to new ones
Some checks failed
/ build (pull_request) Failing after 2m46s
/ Ansible Lint (push) Successful in 3m57s
/ Ansible Lint (pull_request) Successful in 4m1s
2026-06-20 17:58:25 +02:00
17ed72cd83
z9(group): remove all z9 references as subdomain 2026-05-26 11:13:28 +02:00
57ae1456a0
unbound(role): move resolvd vars to task
All checks were successful
/ Ansible Lint (pull_request) Successful in 2m37s
/ Ansible Lint (push) Successful in 2m21s
/ build (pull_request) Successful in 29s
2026-05-26 10:43:56 +02:00
c051fc6337
unbound(role): make unbound thread number configurable
Some checks failed
/ Ansible Lint (pull_request) Failing after 2m34s
/ Ansible Lint (push) Failing after 2m36s
/ build (pull_request) Failing after 2m40s
2026-05-26 10:30:35 +02:00
960315d182
unbound(role): reformat config template and use all vcpus
Some checks failed
/ build (pull_request) Failing after 2m41s
/ Ansible Lint (push) Failing after 2m44s
/ Ansible Lint (pull_request) Failing after 2m44s
2026-05-26 10:21:29 +02:00
bb127d1375
unbound(role): remove tags inside role 2026-05-26 10:21:29 +02:00
84b1fa70ce
unbound(role): add FIXME note to unbound prometheus exporter install 2026-05-26 10:21:29 +02:00
0a74ac02c2
unbound(role): use existing deploy_systemd_resolved_config role and some reordering 2026-05-26 10:21:29 +02:00
a19262eae0
kea_dhcp(role): make stork-agent.env smaller and add link to documentation 2026-05-26 10:21:29 +02:00
09a4869ac1
kea_dhcp(role): fix indentation in template 2026-05-26 10:21:28 +02:00
2798e9e01c
kea_dhcp(role): add README.md 2026-05-26 10:21:28 +02:00
9bff86df7f
kea_dhcp(role): some fixes and removing arch part
- remove tags from tasks
- remove archlinux part
- use debian default package for kea
2026-05-26 10:21:28 +02:00
0fef65b2c2
z9-router(host): fix some spelling and a wireguard peer address 2026-05-26 10:21:28 +02:00
311a4114f9
z9-router(host): add ansible pull 2026-05-26 10:21:28 +02:00
3a091f7aa5
z9-router(host): rename rt1 to z9-router 2026-05-26 10:21:28 +02:00
bbf45e91f4
rt1(z9 host) unbound(role) kea_dhcp(role): create unbound and kea_dhcp role for rt1
- create unbound role
- create kea_dhcp role
- configure unbound and keadhcp on rt1(z9 host)
2026-05-26 10:21:28 +02:00
2fc93e6e62
rt1(z9 host): create host and configure networkd and nftables 2026-05-26 10:21:27 +02:00
26 changed files with 140 additions and 375 deletions

View file

@ -23,7 +23,7 @@ jobs:
apt -y install nodejs git rsync openssh-client apt -y install nodejs git rsync openssh-client
pip install --upgrade pip pip install --upgrade pip
- uses: actions/checkout@v7 - uses: actions/checkout@v6
- name: Install Python packages - name: Install Python packages
run: | run: |

View file

@ -10,7 +10,7 @@ jobs:
name: Ansible Lint name: Ansible Lint
runs-on: docker runs-on: docker
steps: steps:
- uses: actions/checkout@v7 - uses: actions/checkout@v6
- name: Install pip - name: Install pip
run: | run: |
apt update apt update

View file

@ -5,103 +5,12 @@ summary: >-
How our documentation is organized and what we do to balance ease of writing and understanding. How our documentation is organized and what we do to balance ease of writing and understanding.
--- ---
!!! info "Info" !!! info "ToDo"
If you're looking for a hands-on approach on how documentation is to be written you can find a [guide](../guides/writing-documentation.md) explaining the process. If you're unsure how to start you can find [templates](../guides/writing-documentation.md#3-addedit-your-markdown-file) there aswell. This section needs updating
## General Rules - Docs should be english
These rules are general formatting and writing decisions that apply to every document. Their goal is to provide a concise style across the whole documentation to keep the text easy to follow. - Guides are for step-by-step things
- Guides always have a "Goal" explicitly formulated
- Concepts and Configuration aim to make readers understand something in detail
- All documents written in this project should be written in **english** to maximize the compatability across readers.
- The documentation structure is intended to be followed, while not being **enforced** to keep a low entry barier for documentation authors.
- Use features like _Admonitions_ given by markdown and the theme whenever they can help by increasing the readability and outlining important parts. For instructions on how to use these theme specific features please refer down to the [MkDocs shadcn](https://asiffer.github.io/mkdocs-shadcn/) documentation.
## Defining a Document Scope
The scope for a document should be set to define responsibility and set boundaries to where that document applies. Especially lining out which services are affected by it. It **does not** need to be defined explicitly in the text, but should be kept in mind while writing.
!!! note "Example"
The scope for this document is aiming to convey the base concepts on how to structure concepts and configurations in this documentation. To provide high readability and a project wide concise structure that authors and readers can rely on.
We generally distinguish between concepts, configurations and guides in this documentation. Their separation should be clarified with folowing list:
- **Concept:** A concept includes an abstract definition about a specific structure while not going into implementation details. It is a document intending to further abstract the understanding of structure. It can also go into detail about _why_ we do things a certain way.
- **Configuration:** A configuration can be a follow up of a concept, explaining the specific implementation in a given environment.
- **Guide:** A guide is a step-by-step hands-on instruction for the reader to follow along. It can reference concepts and configurations. The important difference to the other two document types is that guides are goal oriented. Understanding how things work is secondary to achieving a specific thing.
## Structuring Concepts
!!! note "Goal"
The goal for a concept is to provide the reader with a structured detailed explanation about an abstract concept, conveying why this concept was choosen and how it is intended to be used.
### Describing the Concept
This section is a summary to give the reader a quick overview about the concept answering following questions:
- What is this concept about?
- Why is this concept needed?
- What does this concept do?
### Explaining the Concept
This section should be an in depth explanation about the concept, explaining the concept as detailed as needed for the reader to be able to transfer it into an implementation. The usage of graphs and diagrams is advised when they can help the reader understand the concept better.
### Referencing additional Sources
This section should include sources to other documentations, concepts and hand-on guides which the reader can look up to futher explore the defined concept.
## Structuring Configurations
!!! note "Goal"
A configuration document is intended to provide the reader with examples and best practices for configuring a specific item. It focuses on the technical implementation rather than an abstract concept.
### Describing the Configuration
This section should give the reader a quick overview which configuration files are being described.
### Providing the Configuration
Here the author should provide configuration sections or full templates. The configurations don't have to be fully complete, they're rather a more structured view on which options are important and what to watch out for.
### Discussing Authors Thoughts
A discussion why the author choose which configuration options and what to watch out for. Best practices should be taught here. This section can also link to outside sources.
### Referencing Documentation
Here the author should provide upstream documentation which includes configuration options and further explanations why and how they are used.
## Structuring Guides
!!! note "Goal"
A guide intends to provide a hands-on approach to the reader which they can follow step-by-step to archive the guides defined goal. A good example for a guide can be found at [Writing Documentation](../guides/writing-documentation.md).
### Defining the Goal
A guide should always have a goal defined in the beginning, using the _Admonition_ for a success box is highly advised. An example for a goal box is shown below:
/// tab | Source
```markdown
!!! success "Goal"
How to setup, write its baseline documentation in ansible, and deploy a service.
```
///
/// tab | Rendered
!!! success "Goal"
How to setup, write its baseline documentation in ansible, and deploy a service.
///
### Instructing the Reader
A guide should always have numbered instruction steps which are easy to follow. Important notices and information should written in _Admonitions_ as direct notices from the author to the reader. Dangerous steps or options should use a `danger` Admonition.
### Closing Up
While this section is optional, a guide should be finished with steps and facts that can be checked by the reader to ensure that the guide worked as intended and all steps are completed correctly.
## References
Here you can find useful documentation regarding writing documentation:
- [MkDocs](https://www.mkdocs.org/user-guide/): This is the official mkdocs documentation, although it mostly explains configuring the mkdocs instance rather than explaining the usage.
- [MkDocs shadcn](https://asiffer.github.io/mkdocs-shadcn/): This is our theme for MkDocs which has its own syntax and quircks which can help writing more readable documentation

View file

@ -38,7 +38,7 @@ Once you have cloned the repository, you can just edit a file in the [`docs/`](h
```shell ```shell
uv venv uv venv
uv pip install -r docs_requirements.txt uv pip install -r docs_requirements.txt
uv run mkdocs serve mkdocs serve
``` ```
When adding new content, you can use one of the templates below to get started: When adding new content, you can use one of the templates below to get started:

View file

@ -5,46 +5,43 @@ alloy_config_additional: "{{ lookup('ansible.builtin.template', 'resources/chaos
knot__dnssec_key_id: "auth-dns.hamburg.ccc.de-1" knot__dnssec_key_id: "auth-dns.hamburg.ccc.de-1"
knot__remotes: knot__remotes:
- id: erfadns.ber.ccc.de - id: ns-intern.hamburg.ccc.de
address: [ "2a02:8000:1000:101::196", "185.106.84.196" ] address: [ "2a00:14b0:f000:23::53", "172.31.17.53" ]
- id: ns.vie.ccc.de - id: ns.vie.ccc.de
address: [ "2a02:1b8:10:31::228", "146.255.57.228" ] address: [ "2a02:1b8:10:31::228", "146.255.57.228" ]
- id: ns2.vie.ccc.de
address: [ "2a02:8000:1000:102::188", "185.106.84.188" ]
knot__catalog_zones: knot__catalog_zones:
- domain: "hamburg.ccc.de.catalog." - domain: "hamburg.ccc.de.catalog."
notify_targets: [ "erfadns.ber.ccc.de" ] notify_targets: [ "ns.vie.ccc.de" ]
knot__zones: knot__zones:
- domain: "hh.ccc.de." - domain: "hh.ccc.de."
catalog_member: "hamburg.ccc.de.catalog." catalog_member: "hamburg.ccc.de.catalog."
notify_targets: [ "erfadns.ber.ccc.de" ] notify_targets: [ "ns-intern.hamburg.ccc.de", "ns.vie.ccc.de", "ns2.vie.ccc.de" ]
content: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/auth-dns/zones/hh.ccc.de.zone') }}" content: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/auth-dns/zones/hh.ccc.de.zone') }}"
- domain: "ccchh.net." - domain: "ccchh.net."
catalog_member: "hamburg.ccc.de.catalog." catalog_member: "hamburg.ccc.de.catalog."
notify_targets: [ "erfadns.ber.ccc.de", "ns.vie.ccc.de" ] notify_targets: [ "ns-intern.hamburg.ccc.de", "ns.vie.ccc.de", "ns2.vie.ccc.de" ]
content: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/auth-dns/zones/ccchh.net.zone') }}" content: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/auth-dns/zones/ccchh.net.zone') }}"
- domain: "hamburg.ccc.de." - domain: "hamburg.ccc.de."
catalog_member: "hamburg.ccc.de.catalog." catalog_member: "hamburg.ccc.de.catalog."
notify_targets: [ "erfadns.ber.ccc.de" ] notify_targets: [ "ns-intern.hamburg.ccc.de", "ns.vie.ccc.de", "ns2.vie.ccc.de" ]
content: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/auth-dns/zones/hamburg.ccc.de.zone') }}" content: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/auth-dns/zones/hamburg.ccc.de.zone') }}"
- domain: "eh20.easterhegg.eu." - domain: "eh20.easterhegg.eu."
catalog_member: "hamburg.ccc.de.catalog." catalog_member: "hamburg.ccc.de.catalog."
notify_targets: [ "erfadns.ber.ccc.de", "ns.vie.ccc.de" ] notify_targets: [ "ns-intern.hamburg.ccc.de", "ns.vie.ccc.de", "ns2.vie.ccc.de" ]
content: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/auth-dns/zones/eh20.easterhegg.eu.zone') }}" content: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/auth-dns/zones/eh20.easterhegg.eu.zone') }}"
- domain: "eh22.easterhegg.eu." - domain: "eh22.easterhegg.eu."
catalog_member: "hamburg.ccc.de.catalog." catalog_member: "hamburg.ccc.de.catalog."
notify_targets: [ "erfadns.ber.ccc.de", "ns.vie.ccc.de" ] notify_targets: [ "ns-intern.hamburg.ccc.de", "ns.vie.ccc.de", "ns2.vie.ccc.de" ]
content: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/auth-dns/zones/eh22.easterhegg.eu.zone') }}" content: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/auth-dns/zones/eh22.easterhegg.eu.zone') }}"
- domain: "diday.org."
catalog_member: "hamburg.ccc.de.catalog."
notify_targets: [ "erfadns.ber.ccc.de", "ns.vie.ccc.de" ]
content: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/auth-dns/zones/diday.org.zone') }}"
- domain: "3.2.0.0.0.0.0.f.0.b.4.1.0.0.a.2.ip6.arpa." - domain: "3.2.0.0.0.0.0.f.0.b.4.1.0.0.a.2.ip6.arpa."
notify_targets: [ "erfadns.ber.ccc.de" ] notify_targets: [ "ns-intern.hamburg.ccc.de", "ns.vie.ccc.de", "ns2.vie.ccc.de" ]
content: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/auth-dns/zones/3.2.0.0.0.0.0.f.0.b.4.1.0.0.a.2.ip6.arpa.zone') }}" content: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/auth-dns/zones/3.2.0.0.0.0.0.f.0.b.4.1.0.0.a.2.ip6.arpa.zone') }}"

View file

@ -0,0 +1,4 @@
nginx__version_spec: ""
nginx__configurations:
- name: diday.org
content: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/www2/nginx/diday.org.conf') }}"

View file

@ -90,6 +90,14 @@ all:
ansible_host: acmedns.hosts.hamburg.ccc.de ansible_host: acmedns.hosts.hamburg.ccc.de
ansible_user: chaos ansible_user: chaos
ansible_ssh_common_args: -J ssh://chaos@router.hamburg.ccc.de ansible_ssh_common_args: -J ssh://chaos@router.hamburg.ccc.de
www2:
ansible_host: www2.hosts.hamburg.ccc.de
ansible_user: chaos
ansible_ssh_common_args: -J ssh://chaos@router.hamburg.ccc.de
www3:
ansible_host: www3.hosts.hamburg.ccc.de
ansible_user: chaos
ansible_ssh_common_args: -J ssh://chaos@router.hamburg.ccc.de
auth-dns: auth-dns:
ansible_host: auth-dns.hamburg.ccc.de ansible_host: auth-dns.hamburg.ccc.de
ansible_user: chaos ansible_user: chaos
@ -121,6 +129,8 @@ base_config_hosts:
renovate: renovate:
spaceapiccc: spaceapiccc:
mjolnir: mjolnir:
www2:
www3:
auth-dns: auth-dns:
systemd_networkd_hosts: systemd_networkd_hosts:
hosts: hosts:
@ -168,6 +178,8 @@ nginx_hosts:
ntfy: ntfy:
sunders: sunders:
spaceapiccc: spaceapiccc:
www2:
www3:
public_reverse_proxy_hosts: public_reverse_proxy_hosts:
hosts: hosts:
public-reverse-proxy: public-reverse-proxy:
@ -210,6 +222,8 @@ alloy_hosts:
router: router:
sunders: sunders:
spaceapiccc: spaceapiccc:
www2:
www3:
auth-dns: auth-dns:
infrastructure_authorized_keys_hosts: infrastructure_authorized_keys_hosts:
hosts: hosts:
@ -232,6 +246,8 @@ infrastructure_authorized_keys_hosts:
renovate: renovate:
spaceapiccc: spaceapiccc:
mjolnir: mjolnir:
www2:
www3:
auth-dns: auth-dns:
lists: lists:
wiki_hosts: wiki_hosts:
@ -267,6 +283,8 @@ ansible_pull_hosts:
ntfy: ntfy:
spaceapiccc: spaceapiccc:
mjolnir: mjolnir:
# www2:
# www3:
auth-dns: auth-dns:
msmtp_hosts: msmtp_hosts:
hosts: hosts:

View file

@ -1,180 +0,0 @@
ansible_pull__age_private_key: ENC[AES256_GCM,data:QB0xpxP8pLfE2ExpCRD4joQzoEcbQZTiVEJbX3t9GyFEseZUtnUCO0ysFUc6hRs2BC9hoPXz6k/dZ0vNkniBmqcN5zTofZ8bg94=,iv:3NVVsae+pgbriTNzgT6rGCEzJjw368WgAKfQCi2qsmQ=,tag:AQSIxJCZOZ8dtlvcu4WMuw==,type:str]
sops:
lastmodified: "2026-06-01T19:05:50Z"
mac: ENC[AES256_GCM,data:ms4yaDEY/2DxC56rxagBRgfkHuy2/AGhZ0om3+gTVfG8/1p7v+qWXuWrNlDjefjhLKVCaf5yl749JZIjs8PP6rTKyTcteqVfoKwx+CFaEA9OmPOaENBV8Kpy2Rrkw8J4UBBKSoTKGFDAGtyysmqbS8eqDuEpb/TbfbbybJUNfe4=,iv:g4IHNmQELptweaqRE7P3LlBTwV+7jt6AfrPowzuziv4=,tag:YkBnOJA5IN1xDhI+umYSow==,type:str]
pgp:
- created_at: "2026-06-01T19:05:22Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQIMAxK/JaB2/SdtAQ//RL0kbXLXSfPux7TjkM/BzqbuQa/XMmPhMPLSawLjLMHa
+lAA6aSpHfX/seNQiLrS0mpXZFzvnPKgxacPx+vLAYGe46u+OXpthrKTStm2URNs
njTkuzCH8yQskaSyQKV3wPjOYTFWGOBAv7bFHenep9DIy5uwGDgYqR//fSP0nQwX
oCdegmWcymct/xhXzK+jcIbvgjD4Xfoc0Gt+IYUYF/FEZisZCRHhK5okt7uhxjcl
39qCVipK1ofWRt3vXkNaL4ySUEB0i03yotB7eX82wuGt7/ZdpZ9NLRLfrL+DwR4j
QrO0uGBrqya9d46Ftx2wz0eF5aZOLZwe6oBVBRSq4jQ2WPF/NLzEIuFl2cRrk941
4L7ZWf8RfYtbicDXhRThef5D43ZF/kYZRzX/oTpAzUInD+VYPo5j0b9mjQLf50jg
jGc/jDl8PpfG8Rrx1XZJLiplSZ508ZzuRb0yr5ZEt5oB7sYW+WzI4q8HulY2lLrp
S5TIeKtyhJGbZAJSgQFJXxSI2K7ZJJcqCvMccOgTNpbWvLlChgtRnSaDkgNhV6Ox
22C2IVg/8/90j4oDkTN6EWJcyBB3cSyfgyeDIIFiJdglX7J5w2IieMquWBUvitmg
ThIboVjDbKaDrJTRR9AxW7pDgtwJ9QtQmUcCUQS7jVRAdKpcYswuGaBuOvsAuYzU
aAEJAhBb1CFfTj/ZXcRYbr8b7viH1k/Rr0gOH1iWz6lGIJsLysEz/eieCdUzwXWF
zBW5zC5DiycUXGpD3uuEG8aF8w4alZR1ojrI8+J+Oq18j0tvjL3yRANSw/ADuDg5
n2kmm+LeZkP2
=GTgt
-----END PGP MESSAGE-----
fp: EF643F59E008414882232C78FFA8331EEB7D6B70
- created_at: "2026-06-01T19:05:22Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQEMA1QflAioE8i3AQf/XGTsK3l2dEjTmsBP/+F8Y21l0cIJNEUhsFeoAdbciWcC
LFeCeCnwVdMog6ZcJvhAZKghTYzm2/wfuolMLdSsci4yYM7G+cqZLxtBGrczUgvo
HRd4YbL/PY28SM9S37RhlT6KS8rbE9IzYiZDWHXvIDb4CCrmNrfZDUBthj+nbKI0
vxy5N1ZtrKKalAx1C4pL3zdxJD+2gV/4bzbl9gIs/tfNxj9zdlHORiWh+VT9YGwS
9S4atPuwVtGNjALj3ynGqTNAsjSTW/LNpITQO3NQP7TapdoJYfXyzQlq9e9eKn+F
eTer+RwxbkQVFhAf2ta6LARaIZuxbb2TXAs56Pot79JeAeGhN+rRrgzuSsPLzvsA
ffppf7aUTSyZhTR/w2XC0kJoq9a3RzxhvgxGH9ChoWi0Rww8CYNqOjs6wRNHoZEq
nIcKELugMRe+HOvxauhlKUS7PbkIyzWA8OUxp+KGdQ==
=bbYE
-----END PGP MESSAGE-----
fp: 21C9579E6503CA815A68ABD8541F9408A813C8B7
- created_at: "2026-06-01T19:05:22Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQIMAz5uSgHG2iMJARAAl+rfH2BzDc/DaciHospFYIGG1ZKIIXcLks/owL5gyTpE
xDJB+tC/GIrSPTqFZbpjtz1PmBEvJAwqdb5hTz0oux8X4xEHHwenmF1meBuyffX/
UrkNtog0hVhyV07XNpY0iVCbhKhskLf70jteZx5PZEobtE4aggp3MKRM5SSLmAsF
WL1bIucY/NBFsmNK8zc3GF7i9EqD2WtSKjGjaxLReJSUZB5+qdTe8vFo6bL+AHuh
yW2F3M6k5BMA8oJd6l2az29kbXAhjZS1eQX9WoVCYB2I8BHLSeM5XNkPShgCBcLK
DnNtUhSgKb6kcqJe63K3GwzNyzOVzzVrLP6TLk7kOoQgTocG+QlCJE5fVtynOCx6
sqiJfRpHWbNgWyfrlKtXmPgGP9vYTRUm/DhJKhuPNJi1zcEizVSXpApjaBvdFyzC
/e5+RZdv/CM4hN10ZYB559zuhM1eQCCI9jrd8QJYfr4cZpNG8SrRpLSBoXzisULc
1OKFpsaC/wCAHz6YKORmHDR1DC6ZvOtUL+bZ1cvU9kT5y8MlAyzWhz0jI8dk5CgV
4r4w3yC0sF4cwIR/fWkHfS2bBecdcAuy0mxS9LxxR8JZgXOyemprHw5qenyCEn3+
orTBbz0Y9CkIe+zfwmReqjBhKiwKKxcuEVXpUS6pEOoRyJj3VgRPohNX1bnem7DS
XgHliClcpKnUTIqt/XSQgfMyRSZkMEjNFQ8MFKBc+jM5L9/ePqOmNfli7tM8bbxt
y01x1AzFpQoMTrH6XtWHou2l8g9xqKwMnDjfFv3wXxaoabaZO0ZCP+KJjIzFWNA=
=0dtX
-----END PGP MESSAGE-----
fp: 18DFCE01456DAB52EA38A6584EDC64F35FA1D6A5
- created_at: "2026-06-01T19:05:22Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4DsZXvxFXTXoQSAQdAePJugVBFUtTJdt/Wm9/fEKLNhviCY8Hs2vrMfGk0UlYw
l6MV4EgwcL2G3kiUAkpFgyRQKFRTIdTMxqNy/zwjPQy1OZ+GvNGTCYO3Ig9bQcdq
0l4BjFXvf7siDLCF4B6+eaPRh6vCe1CL5Iz1+W9aaQtE+g8lsBMpSrHPrFPJIxgm
HM3Vla/58ncOAwKo15jCPW9fzR++wd4rs66dcQK6dclyfFfufSjmt2h5BPAUgHJZ
=hMBT
-----END PGP MESSAGE-----
fp: 9633412309CCB83BFA39BA5F2FEF746201D7FCFE
- created_at: "2026-06-01T19:05:22Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4DerEtaFuTeewSAQdAfG8vQNNlmvwPwvfgF1RQeLVakfatgGmCqo5sYgajky8w
VZoBn11zJgV8eeQHDdyKd61CPgNiWKbRSklpV3M8DUUSARFkjqAQSAnHv1gFxw+C
0l4BPThpjiQfWRH4CONZ3gg+d2iBpnpsw5pRZecK7usf3NvIEnn6fjkYTxQ6NpwV
Gijvov5TpDIg+6WexebxAV1BOXC37mBUjLWh65ii3f8Y75poOgnFstf9Q/czh2Qm
=dQPL
-----END PGP MESSAGE-----
fp: 057870A2C72CD82566A3EC983695F4FCBCAE4912
- created_at: "2026-06-01T19:05:22Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQIMAxjNhCKPP69fAQ//bBlTr4MlEDG/ebgtlD/ZMwLLLqshKwPj1Xrxww/oiDdd
TtyhJwxpXIarDjqFCAk7XRww+tdzOJsqDoL6QWeAT/hZSj9UpSmIKCYT2lZfuOfc
r1V1hyGJ+mj+8k3kDwrOIH2g2VhUQBQHzf7yDWdQYGO2+6lvjznWdYhqCir7mCCv
RAQYyM/TvQ8uQCEnzfge0+7iqXDlGLVG+gUg5gRkhl3sXYGgEZk48fQz+yIjoUXh
e+awrgatGxCGEuLUKqV/d+Yo7HDF8fmR0R3SfHzOU7X5MNa/5XLK8ebKe7c+zoJH
0GBFecnH7AJS69ZpO7+Lw7IpwLTnK0wEeytFTLwV4EGxIM4LC9wDPlSAsPD4eUzH
TyFnPV148n5EsK7DktJzKYal/AUVrHMNKmUk9S/dD5pjm3/FAyHUKwi8BJnOyLyn
q98RJwY5mBlaQk8MVrbm/S+bSk0isK2gOj8nlU7PN2H5b9c5PP6gEMcRSTeKoWhr
uGtSJR/9tQ6BXMIZ6LXgy7Kc1rqwaINe0fMjozjAtAHGF/ir8D9YHpvjktG3K6tP
11SX4TUQmEudWFG6faGPZB6YN8vuCPIFvYJ5atm3eimq6AL84YPxJcUmN3om+rS+
oOQy+578A8wFqo6gsxMKnnAYgm876AM95dTZ61uaT3zRce4DxWjd/ZwsVhjpUWTS
XgFPsrLiDnvTQh/Pl4/92vVAZSgnZX/iK92BtBYOgxJRKudO1v5BEjYLZ79pptsB
WxWDwCXxVsVuSn+WRaKZG1YGIMWXgxuh8xeXY+Jonr04XJjI5xvSwc7QleqJyWs=
=0Zep
-----END PGP MESSAGE-----
fp: F38C9D4228FC6F674E322D9C3326D914EB9B8F55
- created_at: "2026-06-01T19:05:22Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQIMA46L6MuPqfJqAQ/+M1k47rFaIxpZSyQTNTZFtYiAhFrd7wNd9scG9jv7VGZr
s2/ZTkKeYfUloSt9ADOvWL13odQA0UCtDHfbPlmbwNZi4sSuzFO7GAhXn8zeAnzl
QY3FbgOlARJBZgpJc3kWdWfsFBfrtUcrGeUOo7H4rp6LsALi6ZFSvfrtTgbqxsG8
j6K8VtPODXFrHoZ6d8rPWYbccw8DU/yu8k5l+TX8p1LB0ZX3/Vuic6eq3BvaJwQ9
WWIC52lq6WF5vTSsRlKsF8Wx0MT6cwE40QejlXvshBk2q4WxRE6EAWb/QRKG2zO6
0qYYKyBMf3wvG+xRibOxj9wjcKFZM9TK9GMd0nBENCdEbmd61EmSkKZ20GoyAHzb
YvDYmZaApO2KmR69XPBRMdfUYuVcIx6IRr1NbHOxRK8tDp+cmaTjFMpjJ5dQooAG
bICV9sBF0FsNPFtAUpQJt/DBEsYh+TzMDiXcYhJqXCXZfT5PKQJuKXUoFmuPXjlf
Xamndl7hzTBWV78MntslcxvoFLmaVcnqxJ4sMHFWw4uUxLfiJr9tsBuG5mDDobbV
Ut9elfKRN8kZDhPERjbsLOBLy96q6lZHw5p/LLWzhzGpusSUpbjym1TZHRuGgw2A
hvRYvxMddjVFnUYzZQ1nfiiPpfAboCi+izcDX/Z9lHizPwo1pgiJN3BozXqw3sHS
XgHIo9t0UErZXJBY4XgIYj1ZSxEcW68fWqvvWkzfapMXaD1bGqGYB5E0aYfnSEON
1knp9pUxz4J+Ji4iSj/xIdEu/P2PA4zC01mR+NzIP/BOvKXh+Jv+aIjQPKEa3DE=
=kAEV
-----END PGP MESSAGE-----
fp: 8996B62CBD159DCADD3B6DC08BB33A8ABCF7BC4A
- created_at: "2026-06-01T19:05:22Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4DQrf1tCqiJxoSAQdAEwmCynNMa+f2381le1p/R0Y+xFNicd+FuZIKQFuBHXAw
g8sG+4zBlfpTvC1nGrmISCh9pLU0GBGdkBj7H4tzTaOCFzUlGJ0/8YE+z59vMqGb
0l4B33k2zuTEv4o72mU3oUDbSR+GIIRrwkZP56OLYWD6cyxams0bYtPJPXIPLRgr
GqsaD7maL48YU0buIXgAqM/qLcGe4nASGbKDw/kfYYItpLY1qDtfa/HVa5UKN2gn
=r4IJ
-----END PGP MESSAGE-----
fp: B71138A6A8964A3C3B8899857B4F70C356765BAB
- created_at: "2026-06-01T19:05:22Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4DzAGzViGx4qcSAQdAN+NvSDt9JdoluBcood/rBQqjrFc2+SYdAfaUW2qo0GAw
+fWK4SOysY4vCvbv3o0IgLaSOoFFL4+une9pN9LT8LAu8TWB1BcrAgEXY4k0CWsN
0lgBKY5bpmJG/UYXX3fAnxVsJly22j8Twv9DqmWKNZZjC7A0Nr2hUZe/ju0wZMIH
/DrztZaEiL8wopwFuwYH8BDWqxy1fBNROYwfWpN+JATUQ15xMFxywFG6
=e2Sg
-----END PGP MESSAGE-----
fp: D2E9C0807BF681F5E164DAFC5EE1B61CD90954CD
- created_at: "2026-06-01T19:05:22Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQIMA2pVdGTIrZI+AQ/+KopAvH5xiQB82eguBeCcenEkKMay/nOFaJjBQEkDJsaT
1Bsw0Oj2raq1Z89MoOpzyxT1DiP8EaaBQAVn/A43oz8Fh5qQZ4dQSR4JhbiCdyEb
QNxE7WwcpCfcfE41SptrUscf1eMBSyu0nti4CwtZCcd06Sp9w31xwGhX4IqyMqgd
cTlxk7PDDnn5m3tuFTVJ6xfwY0JcdDQk0qIY+91hrJobfMPAtI3IooZFRV2rNAAr
BU5xECQ6xWniOzoU94tP2CiyCum6pdAvJNdyHJJfuBi/0wlJqJvG45uzp2FAxtuI
6DhQDk4YQcB7cVetiA4DgO7cychJHlmt/AqNLRCuPwmQUb8cRcFyfKkzUs4ECPwj
PalACOTDJYy2j8/cYnj0g15ec7JJRBEeMT5MNoh+TzQPyTibMlKqWwvjxQpBXwbH
qhoHrwAQZazZgobHtxAgaV5mbeOXZ5Ex099fsIGKNE4lBgWSSIy+nhBCCKE2Rk5U
soNZger/FKyp1wm8yjSBR1kRUZJ1vZlH+CwRZabiRznkUOZqp7oSDu9rJDz7qj4K
z9TTxdGvWktY6D5NjbqhwydKxOi5V4anaDGpUU7UN4zZFoMDq2SPOQ1lMnGsivnL
bsOv6Aw9N4T/BbkNklov4Re78in5gLW2F8tZuWDivzFrRYbBUhoc4FePu9I9omjU
aAEJAhCzKn6cD31zTqUO9EF4CYQ6c1JI9Rpc6BMbOUw7/yk1Za8LXwsMAVZ5W5S6
XAb2m30YyZTz5qTKDdPfp0g085PUIDd5i3FNOF+7KAOsHo6VYGwEEElDk+hqCxRW
X08L3B92wiCV
=09xQ
-----END PGP MESSAGE-----
fp: 878FEA3CB6A6F6E7CD80ECBE28506E3585F9F533
- created_at: "2026-06-01T19:05:22Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4DKKbvh61jX5USAQdAhQVLiF0+IM+jl18Og/DVWRLd2FuGmFZE1XrT5hNFRVEw
59z7hX9diyHbK6KGx2ef6By09bICq7EenpqSf9WOUBwnMWWNyDjFRxI7SCmYpGAO
1GgBCQIQDb/vnYH+8CLl2NsFUndXX6QnUaXpyb8RqC7fBFd1bj79VmYGAz2F/A+i
KV5FPdekeH/HIe9Mhwdu2vUUmKXgDJ+cuEyrmlMd5xCZp0jIE7ImBSgxVMmd4stc
eDcrp4EFzYXnBA==
=/qaN
-----END PGP MESSAGE-----
fp: 41FFAF3D519CF5C039FBD8414BCC213729AF0E49
unencrypted_suffix: _unencrypted
version: 3.12.2

View file

@ -1 +0,0 @@
# add /etc/transmission-remote/settings.json here

View file

@ -6,9 +6,6 @@ all:
light: light:
ansible_host: light.ccchh.net ansible_host: light.ccchh.net
ansible_user: chaos ansible_user: chaos
opensourcetorrents:
ansible_host: opensourcetorrents.ccchh.net
ansible_user: chaos
thinkcccore0: thinkcccore0:
ansible_host: thinkcccore0.ccchh.net ansible_host: thinkcccore0.ccchh.net
waybackproxy: waybackproxy:

View file

@ -9,7 +9,6 @@ markdown_extensions:
- attr_list - attr_list
- codehilite - codehilite
- pymdownx.blocks.details - pymdownx.blocks.details
- pymdownx.blocks.tab
- pymdownx.superfences: - pymdownx.superfences:
css_class: codehilite css_class: codehilite

View file

@ -7,8 +7,8 @@ $TTL 7200
3600000 3600000
86400 ) 86400 )
@ NS auth-dns.hamburg.ccc.de. IN NS auth-dns.hamburg.ccc.de.
@ NS erfadns.ber.ccc.de. IN NS ns.vie.ccc.de.
; ccchh firewall / tunnelendpunkte: ; ccchh firewall / tunnelendpunkte:
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR fwhh.hamburg.ccc.de. 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR fwhh.hamburg.ccc.de.

View file

@ -8,7 +8,7 @@ $TTL 60 ; 1 minutes
) )
@ NS auth-dns.hamburg.ccc.de. @ NS auth-dns.hamburg.ccc.de.
@ NS erfadns.ber.ccc.de. @ NS ns.vie.ccc.de.
; ;
@ -138,11 +138,3 @@ octopi A 10.89.212.31
;zigbee2mqtt A 185.161.129.132 ; Old entry probably deprecadet ;zigbee2mqtt A 185.161.129.132 ; Old entry probably deprecadet
;
; Public Club Services
;
opensourcetorrents A 185.161.130.67
AAAA 2a07:c481:1:35::42

View file

@ -1,44 +0,0 @@
$TTL 3600
@ SOA auth-dns.hamburg.ccc.de. noc.hamburg.ccc.de. (
1 ; serial (overwritten by knot automatically)
10800 ; refresh
3600 ; retry
3600000 ; expire
86400 ; minimum/negative ttl
)
@ NS auth-dns.hamburg.ccc.de.
@ NS erfadns.ber.ccc.de.
;
; Main Site
;
*.diday.org. A 212.12.48.125
*.diday.org. AAAA 2a00:14b0:4200:3000:125::1
diday.org. A 212.12.48.125
diday.org. AAAA 2a00:14b0:4200:3000:125::1
diday.org. TXT "google-site-verification=pJq0LANnNJlkIflKgwbBOOt8GLuU5ywlW6RXhtPwdmE"
;
; Mail Setup
;
diday.org. MX 10 cow.hamburg.ccc.de.
diday.org. TXT "v=spf1 mx ip4:212.12.51.133 ip6:2a00:14b0:f000:23:51:133:0:1 ip4:212.12.48.122 ip6:2a00:14b0:4200:3000:122::1 -all"
_dmarc.diday.org. TXT "v=DMARC1; p=none"
dkim._domainkey.diday.org. TXT "v=DKIM1;k=rsa;t=s;s=email;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2YlBjR5oNm7eDeMXmQF6Izx1A17+vBHNapHlV2Rlj3N4Cjo9kSn0y8rlrqkASUKszDgToGrh1vkHhtYN6EE5QS5iVVSnXcWPiHnBzrxK4OmhVZZtrgGsM17pq9udAEEapc371dQQsL3WhXOvilGGSIQ9u5VDlc+y/ApXi79J6DHSf66t0JUU1e8vLn8ZI8hcXe3nsHXqbW4ot24rk8EvaugsK40jbhqxZ+BrJTBq/iP8w5RsF6KdYjTaqPfr/D4dbvUU6fc8jLyy3OWZgSkkOmv7m0UdbOm2Kk6c+1hNjQJZVEhQrpGrpAcjE37/v8ZNbQMgaasiugH6ElnKb13ZQIDAQAB"
events.diday.org. A 91.98.167.209
events.diday.org. AAAA 2a01:4f8:c2c:44b::1
termine.diday.org. CNAME events.diday.org.
;
; Local Delegation or sub-sites
;
darmstadt.diday.org. DS 60883 14 2 351d5314bd499060db6de802dc06104cc9ef54ce91c783def8d20e2e9cd99b99
darmstadt.diday.org. DS 60883 14 4 4dc93f94c226ecdbb0adbae32064c5ff9a52e9be80973a2ff99218e7bc5af19ab50d9f13f552f1a7900f781fbd7e8205
darmstadt.diday.org. NS jerry.hax404.de.
darmstadt.diday.org. NS summer.hax404.de.

View file

@ -7,8 +7,8 @@ $TTL 7200
3600000 3600000
86400 ) 86400 )
@ NS auth-dns.hamburg.ccc.de. IN NS auth-dns.hamburg.ccc.de.
@ NS erfadns.ber.ccc.de. IN NS ns.vie.ccc.de.
IN MX 5 nomail.ccc.de. IN MX 5 nomail.ccc.de.
;IN MX 10 local-mail.hamburg.ccc.de. ;IN MX 10 local-mail.hamburg.ccc.de.

View file

@ -7,8 +7,8 @@ $TTL 600
3600000 3600000
86400 ) 86400 )
@ NS auth-dns.hamburg.ccc.de. IN NS auth-dns.hamburg.ccc.de.
@ NS erfadns.ber.ccc.de. IN NS ns.vie.ccc.de.
IN A 212.12.48.125 IN A 212.12.48.125
IN AAAA 2a00:14b0:4200:3000:125::1 IN AAAA 2a00:14b0:4200:3000:125::1

View file

@ -14,8 +14,8 @@ $TTL 7200
3600000 3600000
86400 ) 86400 )
@ NS auth-dns.hamburg.ccc.de. IN NS ns.hamburg.ccc.de.
@ NS erfadns.ber.ccc.de. IN NS ns.vie.ccc.de.
$TTL 60 $TTL 60
IN MX 10 cow.hamburg.ccc.de. IN MX 10 cow.hamburg.ccc.de.

View file

@ -15,8 +15,8 @@ $TTL 7200
3600000 3600000
86400 ) 86400 )
@ NS auth-dns.hamburg.ccc.de. IN NS ns.hamburg.ccc.de.
@ NS erfadns.ber.ccc.de. IN NS ns.vie.ccc.de.
IN MX 5 nomail.ccc.de. IN MX 5 nomail.ccc.de.
; IN MX 10 local-mail.hamburg.ccc.de. ; IN MX 10 local-mail.hamburg.ccc.de.

View file

@ -22,7 +22,7 @@
services: services:
keycloak: keycloak:
image: git.hamburg.ccc.de/ccchh/oci-images/keycloak:26.6.0 image: git.hamburg.ccc.de/ccchh/oci-images/keycloak:26.5.7
pull_policy: always pull_policy: always
restart: unless-stopped restart: unless-stopped
command: start --optimized command: start --optimized

View file

@ -87,9 +87,6 @@ map $host $upstream_acme_challenge_host {
staging.docs.c3voc.de public-web-static.hosts.hamburg.ccc.de:31820; staging.docs.c3voc.de public-web-static.hosts.hamburg.ccc.de:31820;
infra-docs.hamburg.ccc.de public-web-static.hosts.hamburg.ccc.de:31820; infra-docs.hamburg.ccc.de public-web-static.hosts.hamburg.ccc.de:31820;
staging.infra-docs.hamburg.ccc.de public-web-static.hosts.hamburg.ccc.de:31820; staging.infra-docs.hamburg.ccc.de public-web-static.hosts.hamburg.ccc.de:31820;
ueberwachungsfrei.eu public-web-static.hosts.hamburg.ccc.de:31820;
überwachungsfrei.eu public-web-static.hosts.hamburg.ccc.de:31820;
xn--berwachungsfrei-yvb.eu public-web-static.hosts.hamburg.ccc.de:31820;
default ""; default "";
} }

View file

@ -110,9 +110,6 @@ stream {
staging.docs.c3voc.de public-web-static.hosts.hamburg.ccc.de:8443; staging.docs.c3voc.de public-web-static.hosts.hamburg.ccc.de:8443;
infra-docs.hamburg.ccc.de public-web-static.hosts.hamburg.ccc.de:8443; infra-docs.hamburg.ccc.de public-web-static.hosts.hamburg.ccc.de:8443;
staging.infra-docs.hamburg.ccc.de public-web-static.hosts.hamburg.ccc.de:8443; staging.infra-docs.hamburg.ccc.de public-web-static.hosts.hamburg.ccc.de:8443;
ueberwachungsfrei.eu public-web-static.hosts.hamburg.ccc.de:8443;
überwachungsfrei.eu public-web-static.hosts.hamburg.ccc.de:8443;
xn--berwachungsfrei-yvb.eu public-web-static.hosts.hamburg.ccc.de:8443;
} }
server { server {

View file

@ -0,0 +1,80 @@
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name diday.org;
# use our router as resolver
#resolver 10.31.208.1; # is this needed???
# configure the ngx_http_realip_module to set $remote_addr and $remote_port to the
# information passed through from public-reverse-proxy.hamburg.ccc.de via proxy-protocol
set_real_ip_from 2a00:14b0:4200:3000:125::1;
real_ip_header proxy_protocol;
# configure tls trustchain
ssl_certificate /dev/null;
ssl_certificate_key /dev/null;
ssl_trusted_certificate /dev/null;
#
# configure site
#
root /var/www/diday.org;
error_page 404 /404.html;
index index.html;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
# return a redirect based on the map loaded from the webroot
if ($did_redirect_target ~ ^301:(.*)$) {
return 301 $1;
}
if ($did_redirect_target ~ ^302:(.*)$) {
return 302 $1;
}
# deny access to the redirects config file
location = /nginx-redirects.conf {
deny all;
return 404;
}
# dynamically redirect the user to the language they prefer
location = / {
set $lang "de";
if ($http_accept_language ~* "^en") {
set $lang "en";
}
return 302 /$lang/;
}
# configure decap-cms content-type and caching rules
location = /admin/cms.js {
expires -1;
add_header Cache-Control "no-store";
}
location = /admin/config.yml {
expires -1;
add_header Cache-Control "no-store";
types { }
default_type text/yaml;
}
# configure asset caching
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2?)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# we are using the Astro Image Pipeline, therefore DecapCMS can't access image previews
location /admin/src/ {
log_not_found off;
return 404;
}
location / {
try_files $uri $uri/ =404;
}
}

View file

@ -75,11 +75,11 @@ endpoints:
conditions: conditions:
- "[DNS_RCODE] == NOERROR" - "[DNS_RCODE] == NOERROR"
- name: auth-dns (pve01.ccchh.net) - name: auth-dns (club-assistant.ccchh.net)
url: "auth-dns.hamburg.ccc.de" url: "auth-dns.hamburg.ccc.de"
<<: *services_chaosknoten_defaults <<: *services_chaosknoten_defaults
dns: dns:
query-name: "pve01.ccchh.net" query-name: "club-assistant.ccchh.net"
query-type: "AAAA" query-type: "AAAA"
conditions: conditions:
- "[DNS_RCODE] == NOERROR" - "[DNS_RCODE] == NOERROR"

View file

@ -124,7 +124,7 @@ endpoints:
conditions: conditions:
- "[STATUS] == 200" - "[STATUS] == 200"
- "[CERTIFICATE_EXPIRATION] > 48h" - "[CERTIFICATE_EXPIRATION] > 48h"
- "[BODY] == pat(*STATUS_CANARY_HAMBURG_CCC_DE_DO_NOT_TOUCH*)" - "[BODY] == pat(*Wir sind der Chaos Computer Club der Hansestadt Hamburg.*)"
- name: spaceapi.ccc.de - name: spaceapi.ccc.de
url: "https://spaceapi.ccc.de" url: "https://spaceapi.ccc.de"
@ -238,4 +238,4 @@ endpoints:
conditions: conditions:
- "[STATUS] == 200" - "[STATUS] == 200"
- "[CERTIFICATE_EXPIRATION] > 48h" - "[CERTIFICATE_EXPIRATION] > 48h"
- "[BODY] == pat(*STATUS_CANARY_HAMBURG_CCC_DE_DO_NOT_TOUCH*)" - "[BODY] == pat(*Wir sind der Chaos Computer Club der Hansestadt Hamburg.*)"

View file

@ -33,7 +33,6 @@
owner: knot owner: knot
group: knot group: knot
mode: u=rw,g=r mode: u=rw,g=r
validate: "kzonecheck -v -o '{{ item.domain }}' %s"
# this seems weird but hear me out: # this seems weird but hear me out:
# if we don't disable SLAAC, the node automatically gets an address based on IPv6 Router-Advertisements # if we don't disable SLAAC, the node automatically gets an address based on IPv6 Router-Advertisements

View file

@ -1,7 +1,7 @@
# {{ ansible_managed }} # {{ ansible_managed }}
network: network:
ethernets: ethernets:
{%- for i_iface_name in ansible_facts["interfaces"] -%} {%- for i_iface_name in ansible_interfaces -%}
{%- if i_iface_name != "lo" -%} {%- if i_iface_name != "lo" -%}
{%- set i_iface = ansible_facts[i_iface_name] %} {%- set i_iface = ansible_facts[i_iface_name] %}
@ -11,3 +11,4 @@ network:
accept-ra: false accept-ra: false
{% endif %} {% endif %}
{% endfor %} {% endfor %}