"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
-<!-- 2024-05-08 Wed 14:42 -->
+<!-- 2024-09-03 Tue 08:43 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>A Small Institute</title>
members off campus.
</p>
-<pre class="example" id="org45c8e96">
+<pre class="example" id="orgc59e2f6">
=
_|||_
=-The-Institute-=
</pre>
</div>
-<div class="TEXT" id="org42b732b">
+<div class="TEXT" id="orga0874e6">
<p>
=> 10.62.17.0/24
</p>
campground Wi-Fi access point, etc.</li>
</ol>
-<pre class="example" id="org42f1391">
+<pre class="example" id="org393f96f">
=============== | ==================================================
| Premises
(Campus ISP)
following topology.
</p>
-<pre class="example" id="org3745e1f">
+<pre class="example" id="orgbaffd1d">
=============== | ==================================================
| Premises
(House ISP)
institute's servers. At the moment there is just the one.
</p>
</div>
-<div id="outline-container-orgf4bacc5" class="outline-3">
-<h3 id="orgf4bacc5"><span class="section-number-3">6.1.</span> Include Particulars</h3>
+<div id="outline-container-org76ba4d0" class="outline-3">
+<h3 id="org76ba4d0"><span class="section-number-3">6.1.</span> Include Particulars</h3>
<div class="outline-text-3" id="text-6-1">
<p>
The <code>all</code> role's task contains a reference to a common institute
certificates signed by the institute CA.
</p>
</div>
-<div id="outline-container-org3abef52" class="outline-3">
-<h3 id="org3abef52"><span class="section-number-3">7.1.</span> Include Particulars</h3>
+<div id="outline-container-org530ccf9" class="outline-3">
+<h3 id="org530ccf9"><span class="section-number-3">7.1.</span> Include Particulars</h3>
<div class="outline-text-3" id="text-7-1">
<p>
The first task, as in <a href="#orgd60dcd1">The All Role</a>, is to include the institute
</div>
</div>
</div>
-<div id="outline-container-org5206757" class="outline-3">
-<h3 id="org5206757"><span class="section-number-3">7.2.</span> Configure Hostname</h3>
+<div id="outline-container-orgaab41cc" class="outline-3">
+<h3 id="orgaab41cc"><span class="section-number-3">7.2.</span> Configure Hostname</h3>
<div class="outline-text-3" id="text-7-2">
<p>
This task ensures that Front's <q>/etc/hostname</q> and <q>/etc/mailname</q> are
</div>
</div>
</div>
-<div id="outline-container-org6909535" class="outline-3">
-<h3 id="org6909535"><span class="section-number-3">7.3.</span> Add Administrator to System Groups</h3>
+<div id="outline-container-org1c6c567" class="outline-3">
+<h3 id="org1c6c567"><span class="section-number-3">7.3.</span> Add Administrator to System Groups</h3>
<div class="outline-text-3" id="text-7-3">
<p>
The administrator often needs to read (directories of) log files owned
</div>
</div>
</div>
-<div id="outline-container-org4e16e32" class="outline-3">
-<h3 id="org4e16e32"><span class="section-number-3">7.5.</span> Configure Monkey</h3>
+<div id="outline-container-org3c1e478" class="outline-3">
+<h3 id="org3c1e478"><span class="section-number-3">7.5.</span> Configure Monkey</h3>
<div class="outline-text-3" id="text-7-5">
<p>
The small institute runs cron jobs and web scripts that generate
</div>
</div>
</div>
-<div id="outline-container-orgeed5ae9" class="outline-3">
-<h3 id="orgeed5ae9"><span class="section-number-3">7.7.</span> Install Unattended Upgrades</h3>
+<div id="outline-container-orgc0c5126" class="outline-3">
+<h3 id="orgc0c5126"><span class="section-number-3">7.7.</span> Install Unattended Upgrades</h3>
<div class="outline-text-3" id="text-7-7">
<p>
The institute prefers to install security updates as soon as possible.
</div>
</div>
</div>
-<div id="outline-container-orgc8ba404" class="outline-3">
-<h3 id="orgc8ba404"><span class="section-number-3">7.8.</span> Configure User Accounts</h3>
+<div id="outline-container-orgd6eddb7" class="outline-3">
+<h3 id="orgd6eddb7"><span class="section-number-3">7.8.</span> Configure User Accounts</h3>
<div class="outline-text-3" id="text-7-8">
<p>
User accounts are created immediately so that Postfix and Dovecot can
</div>
</div>
</div>
-<div id="outline-container-org19b4e27" class="outline-3">
-<h3 id="org19b4e27"><span class="section-number-3">7.9.</span> Install Server Certificate</h3>
+<div id="outline-container-orgcf49e25" class="outline-3">
+<h3 id="orgcf49e25"><span class="section-number-3">7.9.</span> Install Server Certificate</h3>
<div class="outline-text-3" id="text-7-9">
<p>
The servers on Front use the same certificate (and key) to
</div>
</div>
</div>
-<div id="outline-container-orgbb94cf7" class="outline-3">
-<h3 id="orgbb94cf7"><span class="section-number-3">7.12.</span> Configure Dovecot IMAPd</h3>
+<div id="outline-container-org08dd9e3" class="outline-3">
+<h3 id="org08dd9e3"><span class="section-number-3">7.12.</span> Configure Dovecot IMAPd</h3>
<div class="outline-text-3" id="text-7-12">
<p>
Front uses Dovecot's IMAPd to allow user Fetchmail jobs on Core to
</div>
</div>
</div>
-<div id="outline-container-org7469fd3" class="outline-3">
-<h3 id="org7469fd3"><span class="section-number-3">7.14.</span> Configure OpenVPN</h3>
+<div id="outline-container-orgaf75396" class="outline-3">
+<h3 id="orgaf75396"><span class="section-number-3">7.14.</span> Configure OpenVPN</h3>
<div class="outline-text-3" id="text-7-14">
<p>
Front uses OpenVPN to provide the institute's public VPN service. The
<a href="roles_t/front/handlers/main.yml"><q>roles_t/front/handlers/main.yml</q></a><pre class="src src-conf">
- name: Reload Systemd.
become: yes
- command: systemctl daemon-reload
+ systemd:
+ daemon-reload: yes
</pre>
</div>
account. (For details, see <a href="#org8d60b7b">The Core Machine</a>.)
</p>
</div>
-<div id="outline-container-org168f170" class="outline-3">
-<h3 id="org168f170"><span class="section-number-3">8.1.</span> Include Particulars</h3>
+<div id="outline-container-org215b0ac" class="outline-3">
+<h3 id="org215b0ac"><span class="section-number-3">8.1.</span> Include Particulars</h3>
<div class="outline-text-3" id="text-8-1">
<p>
The first task, as in <a href="#org9240129">The Front Role</a>, is to include the institute
</div>
</div>
</div>
-<div id="outline-container-org12b7127" class="outline-3">
-<h3 id="org12b7127"><span class="section-number-3">8.2.</span> Configure Hostname</h3>
+<div id="outline-container-org8638d54" class="outline-3">
+<h3 id="org8638d54"><span class="section-number-3">8.2.</span> Configure Hostname</h3>
<div class="outline-text-3" id="text-8-2">
<p>
This task ensures that Core's <q>/etc/hostname</q> and <q>/etc/mailname</q> are
</div>
</div>
</div>
-<div id="outline-container-org965db3d" class="outline-3">
-<h3 id="org965db3d"><span class="section-number-3">8.3.</span> Configure Systemd Resolved</h3>
+<div id="outline-container-orgf60b98e" class="outline-3">
+<h3 id="orgf60b98e"><span class="section-number-3">8.3.</span> Configure Systemd Resolved</h3>
<div class="outline-text-3" id="text-8-3">
<p>
Core runs the campus name server, so Resolved is configured to use it
<a href="roles_t/core/handlers/main.yml"><q>roles_t/core/handlers/main.yml</q></a><pre class="src src-conf">
- name: Reload Systemd.
become: yes
- command: systemctl daemon-reload
+ systemd:
+ daemon-reload: yes
- name: Restart Systemd resolved.
become: yes
<h3 id="org2134214"><span class="section-number-3">8.6.</span> Configure BIND9</h3>
<div class="outline-text-3" id="text-8-6">
<p>
-Core uses BIND9 to provide a private-view name service for the
-institute as described in <a href="#org12ea1d0">The Name Service</a>. The configuration
-supports reverse name lookups, resolving many private network
-addresses to private domain names.
+Core uses BIND9 to provide name service for the institute as described
+in <a href="#org12ea1d0">The Name Service</a>. The configuration supports reverse name lookups,
+resolving many private network addresses to private domain names.
</p>
<p>
</div>
</div>
</div>
-<div id="outline-container-orgd1f4c06" class="outline-3">
-<h3 id="orgd1f4c06"><span class="section-number-3">8.7.</span> Add Administrator to System Groups</h3>
+<div id="outline-container-org13a7457" class="outline-3">
+<h3 id="org13a7457"><span class="section-number-3">8.7.</span> Add Administrator to System Groups</h3>
<div class="outline-text-3" id="text-8-7">
<p>
The administrator often needs to read (directories of) log files owned
</div>
</div>
</div>
-<div id="outline-container-org91d0903" class="outline-3">
-<h3 id="org91d0903"><span class="section-number-3">8.8.</span> Configure Monkey</h3>
+<div id="outline-container-org920462d" class="outline-3">
+<h3 id="org920462d"><span class="section-number-3">8.8.</span> Configure Monkey</h3>
<div class="outline-text-3" id="text-8-8">
<p>
The small institute runs cron jobs and web scripts that generate
</div>
</div>
</div>
-<div id="outline-container-org10376d0" class="outline-3">
-<h3 id="org10376d0"><span class="section-number-3">8.9.</span> Install Unattended Upgrades</h3>
+<div id="outline-container-orgc30ba4d" class="outline-3">
+<h3 id="orgc30ba4d"><span class="section-number-3">8.9.</span> Install Unattended Upgrades</h3>
<div class="outline-text-3" id="text-8-9">
<p>
The institute prefers to install security updates as soon as possible.
</div>
</div>
</div>
-<div id="outline-container-org8597071" class="outline-3">
-<h3 id="org8597071"><span class="section-number-3">8.11.</span> Configure User Accounts</h3>
+<div id="outline-container-org873ab4b" class="outline-3">
+<h3 id="org873ab4b"><span class="section-number-3">8.11.</span> Configure User Accounts</h3>
<div class="outline-text-3" id="text-8-11">
<p>
User accounts are created immediately so that backups can begin
</div>
</div>
</div>
-<div id="outline-container-org2e22fe0" class="outline-3">
-<h3 id="org2e22fe0"><span class="section-number-3">8.12.</span> Install Server Certificate</h3>
+<div id="outline-container-org0b2d499" class="outline-3">
+<h3 id="org0b2d499"><span class="section-number-3">8.12.</span> Install Server Certificate</h3>
<div class="outline-text-3" id="text-8-12">
<p>
The servers on Core use the same certificate (and key) to authenticate
</div>
</div>
</div>
-<div id="outline-container-org9e726e1" class="outline-3">
-<h3 id="org9e726e1"><span class="section-number-3">8.16.</span> Configure Dovecot IMAPd</h3>
+<div id="outline-container-orge854133" class="outline-3">
+<h3 id="orge854133"><span class="section-number-3">8.16.</span> Configure Dovecot IMAPd</h3>
<div class="outline-text-3" id="text-8-16">
<p>
Core uses Dovecot's IMAPd to store and serve member emails. As on
configurations, etc.
</p>
</div>
-<div id="outline-container-org97c93fd" class="outline-3">
-<h3 id="org97c93fd"><span class="section-number-3">9.1.</span> Include Particulars</h3>
+<div id="outline-container-orgd5b1e01" class="outline-3">
+<h3 id="orgd5b1e01"><span class="section-number-3">9.1.</span> Include Particulars</h3>
<div class="outline-text-3" id="text-9-1">
<p>
The following should be familiar boilerplate by now.
<p>
Installation and configuration of the DHCP daemon follows. Note that
-the daemon listens <i>only</i> on the Gate-WiFi network interface.
+the daemon listens <i>only</i> on the Gate-WiFi network interface. Also
+note the drop-in <code>Requires</code> dependency, without which the DHCP server
+intermittently fails, finding the <code>wifi</code> interface has no IPv4
+addresses (or perhaps finding no <code>wifi</code> interface at all?).
</p>
<div class="org-src-container">
<span class="org-variable-name">regexp: ^INTERFACESv4</span>=
notify: Restart DHCP server.
+- name: Configure DHCP server dependence on interface.
+ become: yes
+ copy:
+ content: |
+ [<span class="org-type">Unit</span>]
+ <span class="org-variable-name">Requires</span>=network-online.target
+ dest: /etc/systemd/system/isc-dhcp-server.service.d/depend.conf
+ notify: Reload Systemd.
+
- name: Configure DHCP for WiFiAP service.
become: yes
copy:
systemd:
service: isc-dhcp-server
state: restarted
+
+- name: Reload Systemd.
+ become: yes
+ systemd:
+ daemon-reload: yes
</pre>
</div>
</div>
</div>
-<div id="outline-container-org013399e" class="outline-3">
-<h3 id="org013399e"><span class="section-number-3">9.6.</span> Install Server Certificate</h3>
+<div id="outline-container-orge4e2eb5" class="outline-3">
+<h3 id="orge4e2eb5"><span class="section-number-3">9.6.</span> Install Server Certificate</h3>
<div class="outline-text-3" id="text-9-6">
<p>
The (OpenVPN) server on Gate uses an institute certificate (and key)
</div>
</div>
</div>
-<div id="outline-container-org9453d8e" class="outline-3">
-<h3 id="org9453d8e"><span class="section-number-3">9.7.</span> Configure OpenVPN</h3>
+<div id="outline-container-orgd47bbbe" class="outline-3">
+<h3 id="orgd47bbbe"><span class="section-number-3">9.7.</span> Configure OpenVPN</h3>
<div class="outline-text-3" id="text-9-7">
<p>
Gate uses OpenVPN to provide the institute's campus VPN service. Its
configured manually.
</p>
</div>
-<div id="outline-container-org72203b0" class="outline-3">
-<h3 id="org72203b0"><span class="section-number-3">10.1.</span> Include Particulars</h3>
+<div id="outline-container-org757a1ed" class="outline-3">
+<h3 id="org757a1ed"><span class="section-number-3">10.1.</span> Include Particulars</h3>
<div class="outline-text-3" id="text-10-1">
<p>
The following should be familiar boilerplate by now.
</div>
</div>
</div>
-<div id="outline-container-orge42346a" class="outline-3">
-<h3 id="orge42346a"><span class="section-number-3">10.2.</span> Configure Hostname</h3>
+<div id="outline-container-orgc2c0904" class="outline-3">
+<h3 id="orgc2c0904"><span class="section-number-3">10.2.</span> Configure Hostname</h3>
<div class="outline-text-3" id="text-10-2">
<p>
Clients should be using the expected host name.
</div>
</div>
</div>
-<div id="outline-container-orgba5d3f1" class="outline-3">
-<h3 id="orgba5d3f1"><span class="section-number-3">10.3.</span> Configure Systemd Resolved</h3>
+<div id="outline-container-org8550267" class="outline-3">
+<h3 id="org8550267"><span class="section-number-3">10.3.</span> Configure Systemd Resolved</h3>
<div class="outline-text-3" id="text-10-3">
<p>
Campus machines use the campus name server on Core (or <code>dns.google</code>),
<a href="roles_t/campus/handlers/main.yml"><q>roles_t/campus/handlers/main.yml</q></a><pre class="src src-conf">---
- name: Reload Systemd.
become: yes
- command: systemctl daemon-reload
+ systemd:
+ daemon-reload: yes
- name: Restart Systemd resolved.
become: yes
</div>
</div>
</div>
-<div id="outline-container-org3e078d4" class="outline-3">
-<h3 id="org3e078d4"><span class="section-number-3">10.5.</span> Add Administrator to System Groups</h3>
+<div id="outline-container-org6f719ec" class="outline-3">
+<h3 id="org6f719ec"><span class="section-number-3">10.5.</span> Add Administrator to System Groups</h3>
<div class="outline-text-3" id="text-10-5">
<p>
The administrator often needs to read (directories of) log files owned
</div>
</div>
</div>
-<div id="outline-container-orgae71e41" class="outline-3">
-<h3 id="orgae71e41"><span class="section-number-3">10.6.</span> Install Unattended Upgrades</h3>
+<div id="outline-container-org915c5c3" class="outline-3">
+<h3 id="org915c5c3"><span class="section-number-3">10.6.</span> Install Unattended Upgrades</h3>
<div class="outline-text-3" id="text-10-6">
<p>
The institute prefers to install security updates as soon as possible.
two files are generated, for the campus and public VPNs.</li>
<li><code>./inst client campus NEW</code> <br />
-A <code>campus</code> host is an Debian host (with or without desktop) that is
+A <code>campus</code> host is a Debian host (with or without desktop) that is
used by the institute generally, is <i>not</i> the property of a member,
never roams off campus, and so is remotely administered with
Ansible. One file is generated, <q>campus.ovpn</q>.</li>
</div></div>
<div id="postamble" class="status">
<p class="author">Author: Matt Birkholz</p>
-<p class="date">Created: 2024-05-08 Wed 14:42</p>
+<p class="date">Created: 2024-09-03 Tue 08:43</p>
<p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
</body>