diff --git a/doc/accounts.md b/doc/accounts.md
index 741968ca4e7036541ec554b67af58f5848bb9338..fa91b09f2de6941eb9bfd4a44f8529091763f672 100644
--- a/doc/accounts.md
+++ b/doc/accounts.md
@@ -17,7 +17,7 @@ It also stores group memberships which in turn affects which users can log into
 which [hosts](https://db.torproject.org/machines.cgi).
 
 This document should be consistent with the [Tor membership
-policy](https://gitweb.torproject.org/community/policies.git/plain/membership.txt),
+policy](https://gitlab.torproject.org/tpo/community/policies/-/blob/HEAD/docs/membership.md),
 in case of discrepancy between the two documents, the membership
 policy overrules this document.
 
diff --git a/doc/ssh-jump-host.md b/doc/ssh-jump-host.md
index 5393b9b0de7f64c1ca71a50cabb776510b62ed63..0b9f3ea414433b52b9bbb99b25c7fce62fd886b4 100644
--- a/doc/ssh-jump-host.md
+++ b/doc/ssh-jump-host.md
@@ -42,8 +42,8 @@ it in your `.ssh/config`:
 Members of TPA might have a different configuration to login as root
 by default, but keep their normal user for key services:
 
-    # interact as a normal user with Puppet, LDAP, jump and git servers by default
-    Host puppet.torproject.org db.torproject.org ssh.people.torproject.org people.torproject.org gitlab.torproject.org git.torproject.org git-rw.torproject.org
+    # interact as a normal user with Puppet, LDAP, jump and gitlab servers by default
+    Host puppet.torproject.org db.torproject.org ssh.people.torproject.org people.torproject.org gitlab.torproject.org
       User USERNAME
 
     Host *.torproject.org
diff --git a/home.md b/home.md
index 252e81a1b4da57feafa1415c02d3f4eab308a4f7..40f707edc690727eca8fc07bd1a918b6612c6b67 100644
--- a/home.md
+++ b/home.md
@@ -22,8 +22,7 @@ The documentation is split into the following sections:
 
 <!-- when the above section is updated, _sidebar.md must be as well. -->
 
-Our source code is split between [gitweb](https://gitweb.torproject.org/) (under `admin/`) and
-[GitLab](https://gitlab.torproject.org/tpo/tpa).
+Our source code is all hosted on [GitLab](https://gitlab.torproject.org/tpo/tpa).
 
 ----
 
diff --git a/howto/Web-Key-Directory-[wkd]---How-keys-are-managed-in-Tor.md b/howto/Web-Key-Directory-[wkd]---How-keys-are-managed-in-Tor.md
index 66ad40e4ffbeb4ea5ef95dff57637b99791e006a..ab08caa3f3f1f31408501d5b3926701542032c41 100644
--- a/howto/Web-Key-Directory-[wkd]---How-keys-are-managed-in-Tor.md
+++ b/howto/Web-Key-Directory-[wkd]---How-keys-are-managed-in-Tor.md
@@ -24,7 +24,7 @@ Key retrivals can be tested using gpg's wks client:
     yay
 
 [wkd]: https://wiki.gnupg.org/WKD
-[keyring]: ssh://git@git-rw.torproject.org/admin/account-keyring
+[keyring]: ssh://db.torproject.org/srv/db.torproject.org/keyrings/keyring.git
 [debian-keyring]: https://salsa.debian.org/debian-keyring/keyring
 [debian-keyring-update-keyrings]: https://salsa.debian.org/debian-keyring/keyring/blob/publish-dane/scripts/update-keyrings
 
diff --git a/howto/backup.md b/howto/backup.md
index 5ef92ff39a42ea3c1cd317ddef9c19623e67dd50..ffa28af43f971fbf28b1dd8b7df9817af1077eee 100644
--- a/howto/backup.md
+++ b/howto/backup.md
@@ -1504,6 +1504,8 @@ area of the disk to hunt for file signatures.
 
         puppet agent --disable 'keeping control of postgresql startup -- anarcat 2023-11-08 tpo/tpa/team#41388'
 
+TODO split here?
+
  10. install the right PostgreSQL server (we're entering the actual
      PostgreSQL restore procedure here, getting out of scope):
 
diff --git a/howto/conference.md b/howto/conference.md
index e63ed4a762b6c09bea7244e6a6aeffcc7933fe9e..683f2cca2c13799648a88b91c4664585bc756ff1 100644
--- a/howto/conference.md
+++ b/howto/conference.md
@@ -346,7 +346,7 @@ N/A. Meet.coop has a [disclaimer][] that serves as a terms of service.
 <!-- community wiki, in: https://gitlab.torproject.org/tpo/community/team/-/wikis/Tor-Project-BBB-Account-Policy -->
 <!-- the above shouldn't be changed without also changing those -->
 
-1. Any [Tor Core Contributor](https://gitweb.torproject.org/community/policies.git/tree/membership.txt) can request a BBB account, and it can
+1. Any [Tor Core Contributor](https://gitlab.torproject.org/tpo/community/policies/-/blob/HEAD/docs/membership.md) can request a BBB account, and it can
    stay active as long as they remain a core contributor.
 
 2. Organizations and individuals, who are active partners of the Tor
diff --git a/howto/create-a-new-user.md b/howto/create-a-new-user.md
index aceba567cc6f50b59891553c0c8204f51ea2598d..951fcedd0df2805b05903ccf808076dd88f1bb14 100644
--- a/howto/create-a-new-user.md
+++ b/howto/create-a-new-user.md
@@ -11,8 +11,7 @@ user-facing user management procedures ([doc/accounts](doc/accounts)), see [issu
 
 This should be done only once.
 
-    git clone git@git-rw.torproject.org:admin/account-keyring.git
-    git -C account-keyring remote add alberti db.torproject.org:/srv/db.torproject.org/keyrings/keyring.git
+    git clone alberti db.torproject.org:/srv/db.torproject.org/keyrings/keyring.git
 
 It downloads the git repository that manages the OpenPGP keyring. This
 keyring is essential as it allows users to interact with the LDAP
diff --git a/howto/drbd.md b/howto/drbd.md
index 7ee963661d8af2ccc342b7d88f26f0e881795018..2b38ac1d9b79af81d337fd9736cd7f3e2f127a6a 100644
--- a/howto/drbd.md
+++ b/howto/drbd.md
@@ -166,4 +166,4 @@ There's a Nagios check for the DRBD service that ensures devices are
 synchronized. It will yield an `UNKNOWN` status when no device is
 created, so it's expected that new nodes are flagged until they host
 some content. The check is shipped as part of `tor-nagios-checks`, as
-`dsa-check-drbd`, see [dsa-check-drbd](https://gitweb.torproject.org/admin/tor-nagios.git/plain/tor-nagios-checks/checks/dsa-check-drbd).
+`dsa-check-drbd`, see [dsa-check-drbd](https://gitlab.torproject.org/tpo/tpa/tor-nagios/-/blob/main/tor-nagios-checks/checks/dsa-check-drbd?ref_type=heads).
diff --git a/howto/ldap.md b/howto/ldap.md
index 0393c6001c54adc0c885f40ee874403715f0f0c7..6a988ed9d33a9c142dedf3763d298beb6ab310bb 100644
--- a/howto/ldap.md
+++ b/howto/ldap.md
@@ -484,7 +484,7 @@ LDAP database, it is a different, and complex operation. You will only
 need to do this if you launch a new service that (say) requires a new
 password specifically for that service.
 
-The schema is maintained in the [userdir-ldap.git](https://gitweb.torproject.org/admin/userdir-ldap.git/) repository. It
+The schema is maintained in the [userdir-ldap.git](https://gitlab.torproject.org/tpo/tpa/userdir-ldap/) repository. It
 is stored in the `userdir-ldap.schema` file. Assuming the modified
 object is a `user`, you would need to edit the file in three places:
 
@@ -1363,7 +1363,7 @@ although some settings (like sudo passwords) require an extra
 confirmation by OpenPGP-signed message through the email gateway. It
 also lists machines known by LDAP.
 
-[userdir-ldap-cgi repository]: https://gitweb.torproject.org/admin/userdir-ldap-cgi.git/
+[userdir-ldap-cgi repository]: https://gitlab.torproject.org/tpo/tpa/userdir-ldap-cgi/
 
 The web interface also ships documentation in the form of HTML pages
 rendered through [WML][] templates.
@@ -1634,7 +1634,7 @@ analysis](https://salsa.debian.org/dsa-team/mirror/userdir-ldap/-/graphs/master)
 before that, between 1999 and 2007.
 
 [DSA userdir-ldap repository]: https://salsa.debian.org/dsa-team/mirror/userdir-ldap
-[userdir-ldap repository]: https://gitweb.torproject.org/admin/userdir-ldap.git/
+[userdir-ldap repository]: https://gitlab.torproject.org/tpo/tpa/userdir-ldap/
 
 The service is mostly in maintenance mode, both at DSA and in TPO,
 with small, incremental changes being made to the codebase over all
diff --git a/howto/ldap/graph.dot b/howto/ldap/graph.dot
index 715df13c864965f2a2310015c1337fa6487ab58d..3a1ba94e00e8076b0832fd217ec200a8ba50150e 100644
--- a/howto/ldap/graph.dot
+++ b/howto/ldap/graph.dot
@@ -61,7 +61,7 @@ digraph ldap {
                 PAM [ shape=cylinder ]
         }
         subgraph "clustergit" {
-                label = "git.torproject.org"
+                label = "git.torproject.org\n(retired)"
                 udreplicate_git [ label="ud-replicate" ]
                 sshdist -> udreplicate_git [ label=rsync ]
                 udreplicate_git -> { files_git, gitolite_authkeys }
diff --git a/howto/ldap/graph.svg b/howto/ldap/graph.svg
index e9a08ea5906a3f25e5ba491bda63747c790fbdcc..aa6f4272626db60b1ca46ce75806e106973abff5 100644
--- a/howto/ldap/graph.svg
+++ b/howto/ldap/graph.svg
@@ -1,610 +1,611 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+<!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: ldap Pages: 1 -->
-<svg width="3352pt" height="778pt"
- viewBox="0.00 0.00 3352.00 778.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 774)">
+<svg width="3151pt" height="515pt"
+ viewBox="0.00 0.00 3151.00 515.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 511)">
 <title>ldap</title>
-<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-774 3348,-774 3348,4 -4,4"/>
-<text text-anchor="middle" x="1672" y="-754.8" font-family="Liberation" font-size="14.00" fill="#000000">LDAP server architecture, torproject.org, october 2020</text>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-511 3147,-511 3147,4 -4,4"/>
+<text text-anchor="middle" x="1571.5" y="-491.8" font-family="Liberation" font-size="14.00">LDAP server architecture, torproject.org, october 2020</text>
 <g id="clust1" class="cluster">
 <title>clusterdb</title>
-<polygon fill="none" stroke="#000000" points="8,-8 8,-739 538,-739 538,-8 8,-8"/>
-<text text-anchor="middle" x="273" y="-723.8" font-family="Liberation" font-size="14.00" fill="#000000">db.torproject.org</text>
+<polygon fill="none" stroke="black" points="8,-8 8,-476 506,-476 506,-8 8,-8"/>
+<text text-anchor="middle" x="257" y="-460.8" font-family="Liberation" font-size="14.00">db.torproject.org</text>
 </g>
 <g id="clust5" class="cluster">
 <title>clusterexample</title>
-<polygon fill="none" stroke="#000000" points="2362,-352 2362,-630 3074,-630 3074,-352 2362,-352"/>
-<text text-anchor="middle" x="2718" y="-614.8" font-family="Liberation" font-size="14.00" fill="#000000">common to all hosts</text>
+<polygon fill="none" stroke="black" points="2220,-168 2220,-367 2890,-367 2890,-168 2220,-168"/>
+<text text-anchor="middle" x="2555" y="-351.8" font-family="Liberation" font-size="14.00">common to all hosts</text>
 </g>
 <g id="clust8" class="cluster">
 <title>clustergit</title>
-<polygon fill="none" stroke="#000000" points="1589,-192 1589,-427 2354,-427 2354,-192 1589,-192"/>
-<text text-anchor="middle" x="1971.5" y="-411.8" font-family="Liberation" font-size="14.00" fill="#000000">git.torproject.org</text>
+<polygon fill="none" stroke="black" points="1497,-81 1497,-258 2212,-258 2212,-81 1497,-81"/>
+<text text-anchor="middle" x="1854.5" y="-242.8" font-family="Liberation" font-size="14.00">git.torproject.org</text>
+<text text-anchor="middle" x="1854.5" y="-227.8" font-family="Liberation" font-size="14.00">(retired)</text>
 </g>
 <g id="clust12" class="cluster">
 <title>clusterdns</title>
-<polygon fill="none" stroke="#000000" points="910,-119 910,-521 1581,-521 1581,-119 910,-119"/>
-<text text-anchor="middle" x="1245.5" y="-505.8" font-family="Liberation" font-size="14.00" fill="#000000">DNS servers</text>
+<polygon fill="none" stroke="black" points="854,-8 854,-243 1489,-243 1489,-8 854,-8"/>
+<text text-anchor="middle" x="1171.5" y="-227.8" font-family="Liberation" font-size="14.00">DNS servers</text>
 </g>
 <g id="clust16" class="cluster">
 <title>clusterpuppet</title>
-<polygon fill="none" stroke="#000000" points="546,-352 546,-631 902,-631 902,-352 546,-352"/>
-<text text-anchor="middle" x="724" y="-615.8" font-family="Liberation" font-size="14.00" fill="#000000">puppet.torproject.org</text>
+<polygon fill="none" stroke="black" points="514,-168 514,-368 846,-368 846,-168 514,-168"/>
+<text text-anchor="middle" x="680" y="-352.8" font-family="Liberation" font-size="14.00">puppet.torproject.org</text>
 </g>
 <g id="clust17" class="cluster">
 <title>clustermail</title>
-<polygon fill="none" stroke="#000000" points="3082,-352 3082,-630 3336,-630 3336,-352 3082,-352"/>
-<text text-anchor="middle" x="3209" y="-614.8" font-family="Liberation" font-size="14.00" fill="#000000">eugeni.torproject.org</text>
+<polygon fill="none" stroke="black" points="2898,-168 2898,-367 3135,-367 3135,-168 2898,-168"/>
+<text text-anchor="middle" x="3016.5" y="-351.8" font-family="Liberation" font-size="14.00">eugeni.torproject.org</text>
 </g>
 <!-- LDAP -->
 <g id="node1" class="node">
 <title>LDAP</title>
-<path fill="none" stroke="#000000" d="M364,-704.7273C364,-706.5331 351.8982,-708 337,-708 322.1018,-708 310,-706.5331 310,-704.7273 310,-704.7273 310,-675.2727 310,-675.2727 310,-673.4669 322.1018,-672 337,-672 351.8982,-672 364,-673.4669 364,-675.2727 364,-675.2727 364,-704.7273 364,-704.7273"/>
-<path fill="none" stroke="#000000" d="M364,-704.7273C364,-702.9214 351.8982,-701.4545 337,-701.4545 322.1018,-701.4545 310,-702.9214 310,-704.7273"/>
-<text text-anchor="middle" x="337" y="-686.3" font-family="Liberaion" font-size="14.00" fill="#000000">LDAP</text>
+<path fill="none" stroke="black" d="M340,-441.73C340,-443.53 327.9,-445 313,-445 298.1,-445 286,-443.53 286,-441.73 286,-441.73 286,-412.27 286,-412.27 286,-410.47 298.1,-409 313,-409 327.9,-409 340,-410.47 340,-412.27 340,-412.27 340,-441.73 340,-441.73"/>
+<path fill="none" stroke="black" d="M340,-441.73C340,-439.92 327.9,-438.45 313,-438.45 298.1,-438.45 286,-439.92 286,-441.73"/>
+<text text-anchor="middle" x="313" y="-423.3" font-family="Liberaion" font-size="14.00">LDAP</text>
 </g>
 <!-- udmailgate -->
 <g id="node5" class="node">
 <title>udmailgate</title>
-<ellipse fill="none" stroke="#000000" cx="83" cy="-472" rx="66.8882" ry="18"/>
-<text text-anchor="middle" x="83" y="-468.3" font-family="Liberaion" font-size="14.00" fill="#000000">ud&#45;mailgate</text>
+<ellipse fill="none" stroke="black" cx="78" cy="-318" rx="61.99" ry="18"/>
+<text text-anchor="middle" x="78" y="-314.3" font-family="Liberaion" font-size="14.00">ud&#45;mailgate</text>
 </g>
 <!-- LDAP&#45;&gt;udmailgate -->
 <g id="edge1" class="edge">
 <title>LDAP&#45;&gt;udmailgate</title>
-<path fill="none" stroke="#000000" d="M308.8513,-665.8409C259.8482,-623.7831 159.453,-537.6171 110.7384,-495.807"/>
-<polygon fill="#000000" stroke="#000000" points="306.7756,-668.6717 316.6435,-672.5287 311.3346,-663.3599 306.7756,-668.6717"/>
-<polygon fill="#000000" stroke="#000000" points="112.9688,-493.1089 103.1009,-489.2519 108.4098,-498.4207 112.9688,-493.1089"/>
+<path fill="none" stroke="black" d="M276.2,-408.98C219.43,-387.74 199.88,-393.02 149,-368 134.04,-360.64 118.67,-350.42 106.07,-341.21"/>
+<polygon fill="black" stroke="black" points="275.06,-412.29 285.65,-412.63 277.58,-405.76 275.06,-412.29"/>
+<polygon fill="black" stroke="black" points="107.93,-338.24 97.83,-335.05 103.74,-343.84 107.93,-338.24"/>
 </g>
 <!-- ud&#45;generate -->
 <g id="node8" class="node">
 <title>ud&#45;generate</title>
-<ellipse fill="none" stroke="#000000" cx="422" cy="-472" rx="68.4888" ry="18"/>
-<text text-anchor="middle" x="422" y="-468.3" font-family="Liberaion" font-size="14.00" fill="#000000">ud&#45;generate</text>
+<ellipse fill="none" stroke="black" cx="394" cy="-318" rx="63.89" ry="18"/>
+<text text-anchor="middle" x="394" y="-314.3" font-family="Liberaion" font-size="14.00">ud&#45;generate</text>
 </g>
 <!-- LDAP&#45;&gt;ud&#45;generate -->
 <g id="edge4" class="edge">
 <title>LDAP&#45;&gt;ud&#45;generate</title>
-<path fill="none" stroke="#000000" d="M344.1009,-671.7884C359.0129,-633.5433 393.6616,-544.6796 411.2879,-499.4734"/>
-<polygon fill="#000000" stroke="#000000" points="414.6073,-500.5948 414.9791,-490.0064 408.0855,-498.0518 414.6073,-500.5948"/>
+<path fill="none" stroke="black" d="M326.01,-408.81C339.32,-391.23 360.12,-363.76 375.21,-343.83"/>
+<polygon fill="black" stroke="black" points="378.04,-345.88 381.29,-335.8 372.46,-341.66 378.04,-345.88"/>
 </g>
 <!-- userdir_ldap_cgi -->
 <g id="node11" class="node">
 <title>userdir_ldap_cgi</title>
-<ellipse fill="none" stroke="#000000" cx="252" cy="-472" rx="83.6854" ry="18"/>
-<text text-anchor="middle" x="252" y="-468.3" font-family="Liberaion" font-size="14.00" fill="#000000">userdir&#45;ldap&#45;cgi</text>
+<ellipse fill="none" stroke="black" cx="235" cy="-318" rx="77.19" ry="18"/>
+<text text-anchor="middle" x="235" y="-314.3" font-family="Liberaion" font-size="14.00">userdir&#45;ldap&#45;cgi</text>
 </g>
 <!-- LDAP&#45;&gt;userdir_ldap_cgi -->
 <g id="edge12" class="edge">
 <title>LDAP&#45;&gt;userdir_ldap_cgi</title>
-<path fill="none" stroke="#000000" d="M326.193,-662.2831C309.8531,-620.3761 279.0414,-541.3533 262.7408,-499.5469"/>
-<polygon fill="#000000" stroke="#000000" points="323.0055,-663.743 329.8991,-671.7884 329.5273,-661.2001 323.0055,-663.743"/>
-<polygon fill="#000000" stroke="#000000" points="265.9145,-498.0518 259.0209,-490.0064 259.3927,-500.5948 265.9145,-498.0518"/>
+<path fill="none" stroke="black" d="M294.57,-400.72C282.13,-383.65 265.77,-361.21 253.34,-344.16"/>
+<polygon fill="black" stroke="black" points="291.75,-402.79 300.47,-408.81 297.41,-398.67 291.75,-402.79"/>
+<polygon fill="black" stroke="black" points="255.96,-341.82 247.24,-335.8 250.31,-345.94 255.96,-341.82"/>
 </g>
 <!-- puppetd -->
 <g id="node40" class="node">
 <title>puppetd</title>
-<ellipse fill="none" stroke="#000000" cx="818" cy="-581" rx="76.0865" ry="18"/>
-<text text-anchor="middle" x="818" y="-577.3" font-family="Liberaion" font-size="14.00" fill="#000000">Puppet server</text>
+<ellipse fill="none" stroke="black" cx="767" cy="-318" rx="71.49" ry="18"/>
+<text text-anchor="middle" x="767" y="-314.3" font-family="Liberaion" font-size="14.00">Puppet server</text>
 </g>
 <!-- LDAP&#45;&gt;puppetd -->
 <g id="edge42" class="edge">
 <title>LDAP&#45;&gt;puppetd</title>
-<path fill="none" stroke="#000000" d="M364.111,-675.2123C367.0547,-673.9807 370.0525,-672.8748 373,-672 527.3779,-626.1797 580.2708,-682.0475 733,-631 751.7318,-624.7392 770.8418,-613.9679 786.1855,-604.0224"/>
-<polygon fill="#000000" stroke="#000000" points="788.3796,-606.766 794.753,-598.3025 784.4928,-600.9442 788.3796,-606.766"/>
-<text text-anchor="middle" x="758" y="-642.8" font-family="Liberation" font-size="14.00" fill="#000000">host metadata</text>
+<path fill="none" stroke="black" d="M340.16,-412.07C343.1,-410.9 346.08,-409.84 349,-409 494.39,-367.04 544.1,-417.77 687,-368 704.83,-361.79 722.92,-351.15 737.38,-341.38"/>
+<polygon fill="black" stroke="black" points="739.68,-344.04 745.87,-335.45 735.67,-338.3 739.68,-344.04"/>
+<text text-anchor="middle" x="702" y="-379.8" font-family="Liberation" font-size="14.00">host metadata</text>
 </g>
 <!-- master files -->
 <g id="node2" class="node">
 <title>master files</title>
-<polygon fill="none" stroke="#000000" points="459.5,-309 358.5,-309 358.5,-273 459.5,-273 459.5,-309"/>
-<text text-anchor="middle" x="409" y="-287.3" font-family="Liberaion" font-size="14.00" fill="#000000">master files</text>
+<polygon fill="none" stroke="black" points="431,-212 337,-212 337,-176 431,-176 431,-212"/>
+<text text-anchor="middle" x="384" y="-190.3" font-family="Liberaion" font-size="14.00">master files</text>
 </g>
 <!-- sshdist -->
 <g id="node3" class="node">
 <title>sshdist</title>
-<ellipse fill="none" stroke="#000000" cx="456" cy="-690" rx="74.187" ry="18"/>
-<text text-anchor="middle" x="456" y="-686.3" font-family="Liberaion" font-size="14.00" fill="#000000">sshdist@sshd</text>
+<ellipse fill="none" stroke="black" cx="428" cy="-427" rx="69.59" ry="18"/>
+<text text-anchor="middle" x="428" y="-423.3" font-family="Liberaion" font-size="14.00">sshdist@sshd</text>
 </g>
 <!-- master files&#45;&gt;sshdist -->
 <g id="edge10" class="edge">
 <title>master files&#45;&gt;sshdist</title>
-<path fill="none" stroke="#000000" d="M452.8615,-309.0168C479.7302,-323.2784 509,-346.1286 509,-378 509,-581 509,-581 509,-581 509,-611.7 491.7854,-642.8108 476.9779,-663.8927"/>
-<polygon fill="#000000" stroke="#000000" points="474.1215,-661.8695 471.0459,-672.0081 479.7727,-666.0003 474.1215,-661.8695"/>
+<path fill="none" stroke="black" d="M403.98,-212.13C424.31,-231.02 454.56,-263.46 467,-299 477.13,-327.94 475.94,-338.67 467,-368 463.39,-379.85 456.45,-391.47 449.42,-401.16"/>
+<polygon fill="black" stroke="black" points="446.61,-399.08 443.3,-409.14 452.16,-403.34 446.61,-399.08"/>
 </g>
 <!-- udreplicate_db -->
 <g id="node4" class="node">
 <title>udreplicate_db</title>
-<ellipse fill="none" stroke="#000000" cx="308" cy="-145" rx="67.6881" ry="18"/>
-<text text-anchor="middle" x="308" y="-141.3" font-family="Liberaion" font-size="14.00" fill="#000000">ud&#45;replicate</text>
+<ellipse fill="none" stroke="black" cx="304" cy="-107" rx="61.99" ry="18"/>
+<text text-anchor="middle" x="304" y="-103.3" font-family="Liberaion" font-size="14.00">ud&#45;replicate</text>
 </g>
 <!-- master files&#45;&gt;udreplicate_db -->
 <g id="edge6" class="edge">
 <title>master files&#45;&gt;udreplicate_db</title>
-<path fill="none" stroke="#000000" d="M396.4125,-272.8042C378.7768,-247.3111 346.6042,-200.8041 326.3148,-171.4749"/>
-<polygon fill="#000000" stroke="#000000" points="328.9965,-169.1992 320.4289,-162.9665 323.2397,-173.1817 328.9965,-169.1992"/>
+<path fill="none" stroke="black" d="M367.81,-175.8C355.95,-163.19 339.69,-145.92 326.55,-131.96"/>
+<polygon fill="black" stroke="black" points="329.02,-129.48 319.62,-124.6 323.93,-134.28 329.02,-129.48"/>
 </g>
 <!-- authkeys_sshdist -->
 <g id="node10" class="node">
 <title>authkeys_sshdist</title>
-<polygon fill="none" stroke="#000000" points="530,-52 334,-52 334,-16 530,-16 530,-52"/>
-<text text-anchor="middle" x="432" y="-30.3" font-family="Liberaion" font-size="14.00" fill="#000000">/etc/ssh/userkeys/sshdist</text>
+<polygon fill="none" stroke="black" points="498,-52 312,-52 312,-16 498,-16 498,-52"/>
+<text text-anchor="middle" x="405" y="-30.3" font-family="Liberaion" font-size="14.00">/etc/ssh/userkeys/sshdist</text>
 </g>
 <!-- sshdist&#45;&gt;authkeys_sshdist -->
 <g id="edge11" class="edge">
 <title>sshdist&#45;&gt;authkeys_sshdist</title>
-<path fill="none" stroke="#000000" d="M477.1146,-672.7181C498.6743,-652.9976 529,-618.5796 529,-581 529,-581 529,-581 529,-435.5 529,-353.7295 496,-336.2705 496,-254.5 496,-254.5 496,-254.5 496,-89.5 496,-73.4693 484.3975,-61.0282 471.0727,-52.026"/>
-<text text-anchor="middle" x="518" y="-287.3" font-family="Liberation" font-size="14.00" fill="#000000">uses</text>
+<path fill="none" stroke="black" d="M447.26,-409.69C453.1,-404.14 459.22,-397.66 464,-391 488.02,-357.55 480.32,-339.83 475,-299 462.59,-203.79 426.01,-94.02 411.27,-52.3"/>
+<text text-anchor="middle" x="483.5" y="-190.3" font-family="Liberation" font-size="14.00">uses</text>
 </g>
 <!-- udreplicate_example -->
 <g id="node13" class="node">
 <title>udreplicate_example</title>
-<ellipse fill="none" stroke="#000000" cx="2520" cy="-581" rx="67.6881" ry="18"/>
-<text text-anchor="middle" x="2520" y="-577.3" font-family="Liberaion" font-size="14.00" fill="#000000">ud&#45;replicate</text>
+<ellipse fill="none" stroke="black" cx="2369" cy="-318" rx="61.99" ry="18"/>
+<text text-anchor="middle" x="2369" y="-314.3" font-family="Liberaion" font-size="14.00">ud&#45;replicate</text>
 </g>
 <!-- sshdist&#45;&gt;udreplicate_example -->
 <g id="edge15" class="edge">
 <title>sshdist&#45;&gt;udreplicate_example</title>
-<path fill="none" stroke="#000000" d="M530.0043,-688.373C736.4962,-683.7672 1336.514,-669.9348 1835,-654 2105.2774,-645.3602 2185.2169,-712.6848 2443,-631 2460.6162,-625.4179 2478.0691,-614.6368 2491.8935,-604.5106"/>
-<polygon fill="#000000" stroke="#000000" points="2494.1617,-607.1829 2500.0013,-598.3426 2489.9234,-601.6117 2494.1617,-607.1829"/>
-<text text-anchor="middle" x="2431.5" y="-642.8" font-family="Liberation" font-size="14.00" fill="#000000">rsync</text>
+<path fill="none" stroke="black" d="M497.62,-426.19C816.06,-426.76 2125.82,-425.56 2299,-368 2315.51,-362.51 2331.59,-351.76 2344.16,-341.73"/>
+<polygon fill="black" stroke="black" points="2346.44,-344.39 2351.89,-335.3 2341.97,-339.01 2346.44,-344.39"/>
+<text text-anchor="middle" x="2266.5" y="-379.8" font-family="Liberation" font-size="14.00">rsync</text>
 </g>
 <!-- udreplicate_git -->
 <g id="node22" class="node">
 <title>udreplicate_git</title>
-<ellipse fill="none" stroke="#000000" cx="2278" cy="-378" rx="67.6881" ry="18"/>
-<text text-anchor="middle" x="2278" y="-374.3" font-family="Liberaion" font-size="14.00" fill="#000000">ud&#45;replicate</text>
+<ellipse fill="none" stroke="black" cx="2142" cy="-194" rx="61.99" ry="18"/>
+<text text-anchor="middle" x="2142" y="-190.3" font-family="Liberaion" font-size="14.00">ud&#45;replicate</text>
 </g>
 <!-- sshdist&#45;&gt;udreplicate_git -->
 <g id="edge23" class="edge">
 <title>sshdist&#45;&gt;udreplicate_git</title>
-<path fill="none" stroke="#000000" d="M526.4533,-684.1971C607.4585,-677.4219 744.4022,-665.6523 862,-654 1462.6609,-594.4828 1638.8464,-646.8162 2201,-427 2217.3424,-420.6097 2233.955,-410.5787 2247.5457,-401.2526"/>
-<polygon fill="#000000" stroke="#000000" points="2249.8617,-403.9017 2256.0072,-395.2712 2245.821,-398.1856 2249.8617,-403.9017"/>
-<text text-anchor="middle" x="1922.5" y="-532.8" font-family="Liberation" font-size="14.00" fill="#000000">rsync</text>
+<path fill="none" stroke="black" d="M492.74,-420.27C568.21,-413.54 696.69,-401.9 807,-391 1369.14,-335.47 1554.14,-485.91 2071,-258 2090.66,-249.33 2108.72,-233.14 2121.7,-219.35"/>
+<polygon fill="black" stroke="black" points="2124.62,-221.34 2128.73,-211.58 2119.43,-216.65 2124.62,-221.34"/>
+<text text-anchor="middle" x="1974.5" y="-314.3" font-family="Liberation" font-size="14.00">rsync</text>
 </g>
 <!-- udreplicate_dns -->
 <g id="node30" class="node">
 <title>udreplicate_dns</title>
-<ellipse fill="none" stroke="#000000" cx="1150" cy="-472" rx="67.6881" ry="18"/>
-<text text-anchor="middle" x="1150" y="-468.3" font-family="Liberaion" font-size="14.00" fill="#000000">ud&#45;replicate</text>
+<ellipse fill="none" stroke="black" cx="1080" cy="-194" rx="61.99" ry="18"/>
+<text text-anchor="middle" x="1080" y="-190.3" font-family="Liberaion" font-size="14.00">ud&#45;replicate</text>
 </g>
 <!-- sshdist&#45;&gt;udreplicate_dns -->
 <g id="edge28" class="edge">
 <title>sshdist&#45;&gt;udreplicate_dns</title>
-<path fill="none" stroke="#000000" d="M527.8885,-685.4378C637.2579,-677.6831 839.7346,-659.8998 906,-631 989.8136,-594.4471 1076.976,-530.1912 1120.9298,-495.6137"/>
-<polygon fill="#000000" stroke="#000000" points="1123.2152,-498.2684 1128.8773,-489.3135 1118.8666,-492.783 1123.2152,-498.2684"/>
-<text text-anchor="middle" x="1048.5" y="-577.3" font-family="Liberation" font-size="14.00" fill="#000000">rsync</text>
+<path fill="none" stroke="black" d="M494.21,-421.44C596.53,-413.62 787.8,-395.79 850,-368 934.68,-330.17 1017.48,-256.24 1056.61,-218.46"/>
+<polygon fill="black" stroke="black" points="1059.13,-220.89 1063.84,-211.4 1054.24,-215.88 1059.13,-220.89"/>
+<text text-anchor="middle" x="979.5" y="-314.3" font-family="Liberation" font-size="14.00">rsync</text>
 </g>
 <!-- udreplicate_eugeni -->
 <g id="node43" class="node">
 <title>udreplicate_eugeni</title>
-<ellipse fill="none" stroke="#000000" cx="3158" cy="-581" rx="67.6881" ry="18"/>
-<text text-anchor="middle" x="3158" y="-577.3" font-family="Liberaion" font-size="14.00" fill="#000000">ud&#45;replicate</text>
+<ellipse fill="none" stroke="black" cx="2968" cy="-318" rx="61.99" ry="18"/>
+<text text-anchor="middle" x="2968" y="-314.3" font-family="Liberaion" font-size="14.00">ud&#45;replicate</text>
 </g>
 <!-- sshdist&#45;&gt;udreplicate_eugeni -->
 <g id="edge44" class="edge">
 <title>sshdist&#45;&gt;udreplicate_eugeni</title>
-<path fill="none" stroke="#000000" d="M530.4348,-689.1666C793.4724,-686.1136 1703.8011,-674.6288 2455,-654 2731.9731,-646.394 2813.1142,-712.2863 3078,-631 3096.1532,-625.4293 3114.272,-614.6492 3128.6644,-604.5209"/>
-<polygon fill="#000000" stroke="#000000" points="3131.1003,-607.0759 3137.1111,-598.3511 3126.9714,-601.4232 3131.1003,-607.0759"/>
-<text text-anchor="middle" x="3066.5" y="-642.8" font-family="Liberation" font-size="14.00" fill="#000000">rsync</text>
+<path fill="none" stroke="black" d="M497.3,-425.18C742.18,-422.16 1589.67,-410.87 2289,-391 2557.97,-383.36 2637.86,-450.45 2894,-368 2911.21,-362.46 2928.18,-351.71 2941.52,-341.69"/>
+<polygon fill="black" stroke="black" points="2944.01,-344.18 2949.73,-335.27 2939.7,-338.67 2944.01,-344.18"/>
+<text text-anchor="middle" x="2882.5" y="-379.8" font-family="Liberation" font-size="14.00">rsync</text>
 </g>
 <!-- keyring -->
 <g id="node7" class="node">
 <title>keyring</title>
-<polygon fill="none" stroke="#000000" points="166,-52 96,-52 96,-16 166,-16 166,-52"/>
-<text text-anchor="middle" x="131" y="-30.3" font-family="Liberaion" font-size="14.00" fill="#000000">keyring</text>
+<polygon fill="none" stroke="black" points="178,-52 112,-52 112,-16 178,-16 178,-52"/>
+<text text-anchor="middle" x="145" y="-30.3" font-family="Liberaion" font-size="14.00">keyring</text>
 </g>
 <!-- udreplicate_db&#45;&gt;keyring -->
 <g id="edge7" class="edge">
 <title>udreplicate_db&#45;&gt;keyring</title>
-<path fill="none" stroke="#000000" d="M281.5013,-128.3822C251.4901,-109.5616 202.3628,-78.7529 168.4433,-57.4814"/>
-<polygon fill="#000000" stroke="#000000" points="170.0702,-54.3704 159.7388,-52.0226 166.3512,-60.3007 170.0702,-54.3704"/>
+<path fill="none" stroke="black" d="M271.82,-91.63C247.58,-80.81 214.1,-65.86 187.63,-54.04"/>
+<polygon fill="black" stroke="black" points="188.78,-50.72 178.22,-49.84 185.93,-57.11 188.78,-50.72"/>
 </g>
 <!-- local files -->
 <g id="node9" class="node">
 <title>local files</title>
-<polygon fill="none" stroke="#000000" points="316,-52 232,-52 232,-16 316,-16 316,-52"/>
-<text text-anchor="middle" x="274" y="-30.3" font-family="Liberaion" font-size="14.00" fill="#000000">local files</text>
+<polygon fill="none" stroke="black" points="293.5,-52 216.5,-52 216.5,-16 293.5,-16 293.5,-52"/>
+<text text-anchor="middle" x="255" y="-30.3" font-family="Liberaion" font-size="14.00">local files</text>
 </g>
 <!-- udreplicate_db&#45;&gt;local files -->
 <g id="edge8" class="edge">
 <title>udreplicate_db&#45;&gt;local files</title>
-<path fill="none" stroke="#000000" d="M302.3856,-126.6706C296.9964,-109.0766 288.7821,-82.2591 282.5741,-61.992"/>
-<polygon fill="#000000" stroke="#000000" points="285.8981,-60.893 279.6227,-52.3566 279.205,-62.9432 285.8981,-60.893"/>
+<path fill="none" stroke="black" d="M292.39,-89.17C286.49,-80.63 279.21,-70.08 272.64,-60.56"/>
+<polygon fill="black" stroke="black" points="275.43,-58.44 266.87,-52.2 269.67,-62.42 275.43,-58.44"/>
 </g>
 <!-- udreplicate_db&#45;&gt;authkeys_sshdist -->
 <g id="edge9" class="edge">
 <title>udreplicate_db&#45;&gt;authkeys_sshdist</title>
-<path fill="none" stroke="#000000" d="M327.375,-127.6563C347.9373,-109.2497 380.6231,-79.9906 403.9883,-59.0749"/>
-<polygon fill="#000000" stroke="#000000" points="406.4075,-61.6069 411.5239,-52.3294 401.7386,-56.3913 406.4075,-61.6069"/>
+<path fill="none" stroke="black" d="M326.67,-90.07C340.09,-80.63 357.32,-68.52 372.2,-58.06"/>
+<polygon fill="black" stroke="black" points="374.48,-60.73 380.65,-52.12 370.45,-55.01 374.48,-60.73"/>
 </g>
 <!-- udmailgate&#45;&gt;keyring -->
 <g id="edge3" class="edge">
 <title>udmailgate&#45;&gt;keyring</title>
-<path fill="none" stroke="#000000" d="M90.4622,-453.976C97.5074,-435.3052 107,-405.1172 107,-378 107,-378 107,-378 107,-89.5 107,-76.2729 112.814,-62.6214 118.7188,-52.1675"/>
-<text text-anchor="middle" x="124" y="-214.3" font-family="Liberation" font-size="14.00" fill="#000000">uses</text>
+<path fill="none" stroke="black" d="M82.09,-299.78C94.05,-249.44 128.88,-102.86 140.88,-52.35"/>
+<text text-anchor="middle" x="135.5" y="-146.8" font-family="Liberation" font-size="14.00">uses</text>
 </g>
 <!-- postfix_ldap -->
 <g id="node6" class="node">
 <title>postfix_ldap</title>
-<ellipse fill="none" stroke="#000000" cx="83" cy="-690" rx="42.4939" ry="18"/>
-<text text-anchor="middle" x="83" y="-686.3" font-family="Liberaion" font-size="14.00" fill="#000000">postfix</text>
+<ellipse fill="none" stroke="black" cx="78" cy="-427" rx="39.79" ry="18"/>
+<text text-anchor="middle" x="78" y="-423.3" font-family="Liberaion" font-size="14.00">postfix</text>
 </g>
 <!-- postfix_ldap&#45;&gt;udmailgate -->
 <g id="edge2" class="edge">
 <title>postfix_ldap&#45;&gt;udmailgate</title>
-<path fill="none" stroke="#000000" d="M83,-671.7884C83,-633.704 83,-545.4255 83,-500.0455"/>
-<polygon fill="#000000" stroke="#000000" points="86.5001,-500.0064 83,-490.0064 79.5001,-500.0065 86.5001,-500.0064"/>
+<path fill="none" stroke="black" d="M78,-408.81C78,-391.96 78,-366.02 78,-346.34"/>
+<polygon fill="black" stroke="black" points="81.5,-346.15 78,-336.15 74.5,-346.15 81.5,-346.15"/>
 </g>
 <!-- ud&#45;generate&#45;&gt;master files -->
 <g id="edge5" class="edge">
 <title>ud&#45;generate&#45;&gt;master files</title>
-<path fill="none" stroke="#000000" d="M420.706,-453.9833C418.4439,-422.4877 413.754,-357.1909 411.0474,-319.5061"/>
-<polygon fill="#000000" stroke="#000000" points="414.5156,-318.936 410.3081,-309.2125 407.5335,-319.4375 414.5156,-318.936"/>
+<path fill="none" stroke="black" d="M392.59,-299.78C390.94,-279.62 388.18,-245.96 386.23,-222.25"/>
+<polygon fill="black" stroke="black" points="389.71,-221.81 385.4,-212.13 382.73,-222.39 389.71,-221.81"/>
 </g>
 <!-- apache -->
 <g id="node12" class="node">
 <title>apache</title>
-<ellipse fill="none" stroke="#000000" cx="248" cy="-690" rx="44.393" ry="18"/>
-<text text-anchor="middle" x="248" y="-686.3" font-family="Liberaion" font-size="14.00" fill="#000000">apache</text>
+<ellipse fill="none" stroke="black" cx="226" cy="-427" rx="41.69" ry="18"/>
+<text text-anchor="middle" x="226" y="-423.3" font-family="Liberaion" font-size="14.00">apache</text>
 </g>
 <!-- apache&#45;&gt;userdir_ldap_cgi -->
 <g id="edge13" class="edge">
 <title>apache&#45;&gt;userdir_ldap_cgi</title>
-<path fill="none" stroke="#000000" d="M248.3342,-671.7884C249.033,-633.704 250.6527,-545.4255 251.4854,-500.0455"/>
-<polygon fill="#000000" stroke="#000000" points="254.9855,-500.069 251.6696,-490.0064 247.9866,-499.9405 254.9855,-500.069"/>
+<path fill="none" stroke="black" d="M227.45,-408.81C228.86,-391.96 231.05,-366.02 232.7,-346.34"/>
+<polygon fill="black" stroke="black" points="236.21,-346.41 233.56,-336.15 229.23,-345.82 236.21,-346.41"/>
 </g>
 <!-- userkeys -->
 <g id="node14" class="node">
 <title>userkeys</title>
-<polygon fill="none" stroke="#000000" points="2914,-396 2796,-396 2796,-360 2914,-360 2914,-396"/>
-<text text-anchor="middle" x="2855" y="-374.3" font-family="Liberaion" font-size="14.00" fill="#000000">SSH user keys</text>
+<polygon fill="none" stroke="black" points="2746.5,-212 2637.5,-212 2637.5,-176 2746.5,-176 2746.5,-212"/>
+<text text-anchor="middle" x="2692" y="-190.3" font-family="Liberaion" font-size="14.00">SSH user keys</text>
 </g>
 <!-- udreplicate_example&#45;&gt;userkeys -->
 <g id="edge16" class="edge">
 <title>udreplicate_example&#45;&gt;userkeys</title>
-<path fill="none" stroke="#000000" d="M2541.8291,-563.9069C2556.5647,-552.1639 2576.2969,-536.0377 2593,-521 2624.5316,-492.6123 2624.0965,-474.9339 2661,-454 2702.5369,-430.4377 2720.5866,-444.5484 2765,-427 2782.7042,-420.0048 2801.3316,-410.297 2817.0176,-401.3661"/>
-<polygon fill="#000000" stroke="#000000" points="2818.9895,-404.2685 2825.8841,-396.2239 2815.4777,-398.2132 2818.9895,-404.2685"/>
+<path fill="none" stroke="black" d="M2409.8,-304.44C2430.87,-297.78 2456.93,-289.29 2480,-281 2497.09,-274.86 2500.32,-270.12 2518,-266 2560.13,-256.18 2574.89,-274.21 2615,-258 2635.81,-249.59 2655.33,-233.49 2669.51,-219.67"/>
+<polygon fill="black" stroke="black" points="2672.27,-221.86 2676.81,-212.29 2667.29,-216.93 2672.27,-221.86"/>
 </g>
 <!-- known_hosts -->
 <g id="node16" class="node">
 <title>known_hosts</title>
-<polygon fill="none" stroke="#000000" points="2684,-396 2516,-396 2516,-360 2684,-360 2684,-396"/>
-<text text-anchor="middle" x="2600" y="-374.3" font-family="Liberaion" font-size="14.00" fill="#000000">/etc/ssh/known_hosts</text>
+<polygon fill="none" stroke="black" points="2462,-212 2300,-212 2300,-176 2462,-176 2462,-212"/>
+<text text-anchor="middle" x="2381" y="-190.3" font-family="Liberaion" font-size="14.00">/etc/ssh/known_hosts</text>
 </g>
 <!-- udreplicate_example&#45;&gt;known_hosts -->
 <g id="edge17" class="edge">
 <title>udreplicate_example&#45;&gt;known_hosts</title>
-<path fill="none" stroke="#000000" d="M2527.0995,-562.9851C2541.1187,-527.4113 2572.4379,-447.9389 2589.0946,-405.6725"/>
-<polygon fill="#000000" stroke="#000000" points="2592.3912,-406.8532 2592.8014,-396.2663 2585.8787,-404.2867 2592.3912,-406.8532"/>
+<path fill="none" stroke="black" d="M2370.69,-299.78C2372.68,-279.62 2375.99,-245.96 2378.32,-222.25"/>
+<polygon fill="black" stroke="black" points="2381.82,-222.43 2379.31,-212.13 2374.85,-221.74 2381.82,-222.43"/>
 </g>
 <!-- files_example -->
 <g id="node17" class="node">
 <title>files_example</title>
-<polygon fill="none" stroke="#000000" points="2498,-396 2444,-396 2444,-360 2498,-360 2498,-396"/>
-<text text-anchor="middle" x="2471" y="-374.3" font-family="Liberaion" font-size="14.00" fill="#000000">...</text>
+<polygon fill="none" stroke="black" points="2534,-212 2480,-212 2480,-176 2534,-176 2534,-212"/>
+<text text-anchor="middle" x="2507" y="-190.3" font-family="Liberaion" font-size="14.00">...</text>
 </g>
 <!-- udreplicate_example&#45;&gt;files_example -->
 <g id="edge18" class="edge">
 <title>udreplicate_example&#45;&gt;files_example</title>
-<path fill="none" stroke="#000000" d="M2515.6516,-562.9851C2507.101,-527.5614 2488.0435,-448.6088 2477.8092,-406.2095"/>
-<polygon fill="#000000" stroke="#000000" points="2481.1579,-405.1659 2475.4091,-396.2663 2474.3533,-406.8084 2481.1579,-405.1659"/>
+<path fill="none" stroke="black" d="M2403.24,-302.81C2424.63,-292.69 2451.67,-277.43 2471,-258 2481.38,-247.57 2489.78,-233.55 2495.84,-221.38"/>
+<polygon fill="black" stroke="black" points="2499.11,-222.66 2500.2,-212.12 2492.78,-219.68 2499.11,-222.66"/>
 </g>
 <!-- NSS -->
 <g id="node18" class="node">
 <title>NSS</title>
-<path fill="none" stroke="#000000" d="M2426,-392.7273C2426,-394.5331 2413.8982,-396 2399,-396 2384.1018,-396 2372,-394.5331 2372,-392.7273 2372,-392.7273 2372,-363.2727 2372,-363.2727 2372,-361.4669 2384.1018,-360 2399,-360 2413.8982,-360 2426,-361.4669 2426,-363.2727 2426,-363.2727 2426,-392.7273 2426,-392.7273"/>
-<path fill="none" stroke="#000000" d="M2426,-392.7273C2426,-390.9214 2413.8982,-389.4545 2399,-389.4545 2384.1018,-389.4545 2372,-390.9214 2372,-392.7273"/>
-<text text-anchor="middle" x="2399" y="-374.3" font-family="Liberaion" font-size="14.00" fill="#000000">NSS</text>
+<path fill="none" stroke="black" d="M2282,-208.73C2282,-210.53 2269.9,-212 2255,-212 2240.1,-212 2228,-210.53 2228,-208.73 2228,-208.73 2228,-179.27 2228,-179.27 2228,-177.47 2240.1,-176 2255,-176 2269.9,-176 2282,-177.47 2282,-179.27 2282,-179.27 2282,-208.73 2282,-208.73"/>
+<path fill="none" stroke="black" d="M2282,-208.73C2282,-206.92 2269.9,-205.45 2255,-205.45 2240.1,-205.45 2228,-206.92 2228,-208.73"/>
+<text text-anchor="middle" x="2255" y="-190.3" font-family="Liberaion" font-size="14.00">NSS</text>
 </g>
 <!-- udreplicate_example&#45;&gt;NSS -->
 <g id="edge19" class="edge">
 <title>udreplicate_example&#45;&gt;NSS</title>
-<path fill="none" stroke="#000000" d="M2509.2621,-562.9851C2487.9238,-527.1862 2440.087,-446.9312 2415.0188,-404.8745"/>
-<polygon fill="#000000" stroke="#000000" points="2418.0144,-403.0641 2409.8878,-396.2663 2412.0015,-406.6482 2418.0144,-403.0641"/>
+<path fill="none" stroke="black" d="M2343.34,-301.46C2327,-290.68 2306.13,-275.22 2291,-258 2281.42,-247.1 2273.17,-233.25 2266.99,-221.32"/>
+<polygon fill="black" stroke="black" points="2270.08,-219.66 2262.5,-212.25 2263.81,-222.76 2270.08,-219.66"/>
 </g>
 <!-- PAM -->
 <g id="node19" class="node">
 <title>PAM</title>
-<path fill="none" stroke="#000000" d="M2756,-392.7273C2756,-394.5331 2743.8982,-396 2729,-396 2714.1018,-396 2702,-394.5331 2702,-392.7273 2702,-392.7273 2702,-363.2727 2702,-363.2727 2702,-361.4669 2714.1018,-360 2729,-360 2743.8982,-360 2756,-361.4669 2756,-363.2727 2756,-363.2727 2756,-392.7273 2756,-392.7273"/>
-<path fill="none" stroke="#000000" d="M2756,-392.7273C2756,-390.9214 2743.8982,-389.4545 2729,-389.4545 2714.1018,-389.4545 2702,-390.9214 2702,-392.7273"/>
-<text text-anchor="middle" x="2729" y="-374.3" font-family="Liberaion" font-size="14.00" fill="#000000">PAM</text>
+<path fill="none" stroke="black" d="M2606,-208.73C2606,-210.53 2593.9,-212 2579,-212 2564.1,-212 2552,-210.53 2552,-208.73 2552,-208.73 2552,-179.27 2552,-179.27 2552,-177.47 2564.1,-176 2579,-176 2593.9,-176 2606,-177.47 2606,-179.27 2606,-179.27 2606,-208.73 2606,-208.73"/>
+<path fill="none" stroke="black" d="M2606,-208.73C2606,-206.92 2593.9,-205.45 2579,-205.45 2564.1,-205.45 2552,-206.92 2552,-208.73"/>
+<text text-anchor="middle" x="2579" y="-190.3" font-family="Liberaion" font-size="14.00">PAM</text>
 </g>
 <!-- udreplicate_example&#45;&gt;PAM -->
 <g id="edge20" class="edge">
 <title>udreplicate_example&#45;&gt;PAM</title>
-<path fill="none" stroke="#000000" d="M2532.4105,-563.1286C2558.4175,-525.9147 2617.3577,-442.8935 2631,-435 2655.0486,-421.0854 2669.0664,-441.1114 2693,-427 2701.9085,-421.7475 2709.2708,-413.339 2714.9658,-404.9593"/>
-<polygon fill="#000000" stroke="#000000" points="2717.9961,-406.7138 2720.2919,-396.3707 2712.0471,-403.0246 2717.9961,-406.7138"/>
+<path fill="none" stroke="black" d="M2403.71,-302.86C2419.91,-296.24 2439.45,-288.24 2457,-281 2473.02,-274.39 2476.33,-270.74 2493,-266 2514.65,-259.85 2524.49,-270.8 2543,-258 2555.63,-249.26 2564.4,-234.56 2570.11,-221.55"/>
+<polygon fill="black" stroke="black" points="2573.44,-222.65 2573.9,-212.06 2566.94,-220.05 2573.44,-222.65"/>
 </g>
 <!-- note -->
 <g id="node15" class="node">
 <title>note</title>
-<polygon fill="none" stroke="#000000" points="3059.5,-599 2688.5,-599 2688.5,-563 3065.5,-563 3065.5,-593 3059.5,-599"/>
-<polyline fill="none" stroke="#000000" points="3059.5,-599 3059.5,-593 "/>
-<polyline fill="none" stroke="#000000" points="3065.5,-593 3059.5,-593 "/>
-<text text-anchor="middle" x="2877" y="-577.3" font-family="Liberaion" font-size="14.00" fill="#000000">deployed from tarball to /var/lib/misc/userkeys/%u</text>
+<polygon fill="none" stroke="black" points="2875.5,-336 2530.5,-336 2530.5,-300 2881.5,-300 2881.5,-330 2875.5,-336"/>
+<polyline fill="none" stroke="black" points="2875.5,-336 2875.5,-330 "/>
+<polyline fill="none" stroke="black" points="2881.5,-330 2875.5,-330 "/>
+<text text-anchor="middle" x="2706" y="-314.3" font-family="Liberaion" font-size="14.00">deployed from tarball to /var/lib/misc/userkeys/%u</text>
 </g>
 <!-- note&#45;&gt;userkeys -->
 <g id="edge14" class="edge">
 <title>note&#45;&gt;userkeys</title>
-<path fill="none" stroke="#000000" d="M2875.0476,-562.9851C2870.8833,-524.5594 2861.1681,-434.9143 2856.9796,-396.2663"/>
+<path fill="none" stroke="black" d="M2704.02,-299.78C2701.36,-276.53 2696.63,-235.34 2693.97,-212.13"/>
 </g>
 <!-- sudo -->
 <g id="node20" class="node">
 <title>sudo</title>
-<ellipse fill="none" stroke="#000000" cx="2638" cy="-581" rx="32.4942" ry="18"/>
-<text text-anchor="middle" x="2638" y="-577.3" font-family="Liberaion" font-size="14.00" fill="#000000">sudo</text>
+<ellipse fill="none" stroke="black" cx="2481" cy="-318" rx="31.7" ry="18"/>
+<text text-anchor="middle" x="2481" y="-314.3" font-family="Liberaion" font-size="14.00">sudo</text>
 </g>
 <!-- sudo&#45;&gt;PAM -->
 <g id="edge21" class="edge">
 <title>sudo&#45;&gt;PAM</title>
-<path fill="none" stroke="#000000" d="M2645.9165,-563.3402C2661.8428,-527.8122 2697.8493,-447.4901 2716.8049,-405.2045"/>
-<polygon fill="#000000" stroke="#000000" points="2720.0097,-406.6114 2720.9066,-396.0546 2713.6222,-403.748 2720.0097,-406.6114"/>
-<text text-anchor="middle" x="2711" y="-468.3" font-family="Liberation" font-size="14.00" fill="#000000">uses</text>
+<path fill="none" stroke="black" d="M2498.37,-302.91C2511.59,-291.63 2529.71,-274.96 2543,-258 2551.89,-246.66 2560.02,-232.87 2566.3,-221.09"/>
+<polygon fill="black" stroke="black" points="2569.44,-222.64 2570.92,-212.15 2563.22,-219.43 2569.44,-222.64"/>
+<text text-anchor="middle" x="2550.5" y="-269.8" font-family="Liberation" font-size="14.00">uses</text>
 </g>
 <!-- sshd -->
 <g id="node21" class="node">
 <title>sshd</title>
-<ellipse fill="none" stroke="#000000" cx="2402" cy="-581" rx="32.4942" ry="18"/>
-<text text-anchor="middle" x="2402" y="-577.3" font-family="Liberaion" font-size="14.00" fill="#000000">sshd</text>
+<ellipse fill="none" stroke="black" cx="2259" cy="-318" rx="30.59" ry="18"/>
+<text text-anchor="middle" x="2259" y="-314.3" font-family="Liberaion" font-size="14.00">sshd</text>
 </g>
 <!-- sshd&#45;&gt;NSS -->
 <g id="edge22" class="edge">
 <title>sshd&#45;&gt;NSS</title>
-<path fill="none" stroke="#000000" d="M2401.7338,-562.9851C2401.2114,-527.6365 2400.0484,-448.9431 2399.4209,-406.4795"/>
-<polygon fill="#000000" stroke="#000000" points="2402.9174,-406.2135 2399.2699,-396.2663 2395.9182,-406.317 2402.9174,-406.2135"/>
-<text text-anchor="middle" x="2418" y="-468.3" font-family="Liberation" font-size="14.00" fill="#000000">uses</text>
+<path fill="none" stroke="black" d="M2258.44,-299.78C2257.77,-279.62 2256.67,-245.96 2255.89,-222.25"/>
+<polygon fill="black" stroke="black" points="2259.39,-222.01 2255.56,-212.13 2252.39,-222.24 2259.39,-222.01"/>
+<text text-anchor="middle" x="2272.5" y="-269.8" font-family="Liberation" font-size="14.00">uses</text>
 </g>
 <!-- files_git -->
 <g id="node23" class="node">
 <title>files_git</title>
-<polygon fill="none" stroke="#000000" points="2334,-236 2280,-236 2280,-200 2334,-200 2334,-236"/>
-<text text-anchor="middle" x="2307" y="-214.3" font-family="Liberaion" font-size="14.00" fill="#000000">...</text>
+<polygon fill="none" stroke="black" points="2195,-125 2141,-125 2141,-89 2195,-89 2195,-125"/>
+<text text-anchor="middle" x="2168" y="-103.3" font-family="Liberaion" font-size="14.00">...</text>
 </g>
 <!-- udreplicate_git&#45;&gt;files_git -->
 <g id="edge24" class="edge">
 <title>udreplicate_git&#45;&gt;files_git</title>
-<path fill="none" stroke="#000000" d="M2281.2703,-359.957C2286.2961,-332.2286 2295.9594,-278.9135 2301.9072,-246.0982"/>
-<polygon fill="#000000" stroke="#000000" points="2305.3575,-246.6865 2303.6972,-236.2226 2298.4697,-245.438 2305.3575,-246.6865"/>
+<path fill="none" stroke="black" d="M2147.26,-175.8C2150.86,-164.05 2155.69,-148.24 2159.79,-134.84"/>
+<polygon fill="black" stroke="black" points="2163.17,-135.76 2162.75,-125.18 2156.47,-133.71 2163.17,-135.76"/>
 </g>
 <!-- gitolite_authkeys -->
 <g id="node24" class="node">
 <title>gitolite_authkeys</title>
-<polygon fill="none" stroke="#000000" points="2261.5,-236 2060.5,-236 2060.5,-200 2261.5,-200 2261.5,-236"/>
-<text text-anchor="middle" x="2161" y="-214.3" font-family="Liberaion" font-size="14.00" fill="#000000">~git/.ssh/authorized_keys</text>
+<polygon fill="none" stroke="black" points="2123,-125 1937,-125 1937,-89 2123,-89 2123,-125"/>
+<text text-anchor="middle" x="2030" y="-103.3" font-family="Liberaion" font-size="14.00">~git/.ssh/authorized_keys</text>
 </g>
 <!-- udreplicate_git&#45;&gt;gitolite_authkeys -->
 <g id="edge25" class="edge">
 <title>udreplicate_git&#45;&gt;gitolite_authkeys</title>
-<path fill="none" stroke="#000000" d="M2265.0319,-360.2659C2244.4962,-332.1829 2204.3702,-277.3097 2180.3994,-244.5291"/>
-<polygon fill="#000000" stroke="#000000" points="2183.1137,-242.3114 2174.3857,-236.3053 2177.4633,-246.4433 2183.1137,-242.3114"/>
+<path fill="none" stroke="black" d="M2120.93,-177.01C2103.93,-164.11 2079.78,-145.78 2060.64,-131.25"/>
+<polygon fill="black" stroke="black" points="2062.59,-128.34 2052.51,-125.08 2058.36,-133.92 2062.59,-128.34"/>
 </g>
 <!-- sshd_git -->
 <g id="node25" class="node">
 <title>sshd_git</title>
-<ellipse fill="none" stroke="#000000" cx="2010" cy="-218" rx="32.4942" ry="18"/>
-<text text-anchor="middle" x="2010" y="-214.3" font-family="Liberaion" font-size="14.00" fill="#000000">sshd</text>
+<ellipse fill="none" stroke="black" cx="1888" cy="-107" rx="30.59" ry="18"/>
+<text text-anchor="middle" x="1888" y="-103.3" font-family="Liberaion" font-size="14.00">sshd</text>
 </g>
 <!-- gitolite -->
 <g id="node26" class="node">
 <title>gitolite</title>
-<ellipse fill="none" stroke="#000000" cx="2148" cy="-378" rx="44.393" ry="18"/>
-<text text-anchor="middle" x="2148" y="-374.3" font-family="Liberaion" font-size="14.00" fill="#000000">gitolite</text>
+<ellipse fill="none" stroke="black" cx="2021" cy="-194" rx="40.89" ry="18"/>
+<text text-anchor="middle" x="2021" y="-190.3" font-family="Liberaion" font-size="14.00">gitolite</text>
 </g>
 <!-- gitolite&#45;&gt;gitolite_authkeys -->
 <g id="edge26" class="edge">
 <title>gitolite&#45;&gt;gitolite_authkeys</title>
-<path fill="none" stroke="#000000" d="M2149.466,-359.957C2151.9627,-329.2277 2157.0128,-267.0737 2159.5194,-236.2226"/>
-<text text-anchor="middle" x="2173" y="-287.3" font-family="Liberation" font-size="14.00" fill="#000000">uses</text>
+<path fill="none" stroke="black" d="M2022.82,-175.8C2024.38,-161.05 2026.62,-139.92 2028.18,-125.18"/>
+<text text-anchor="middle" x="2041.5" y="-146.8" font-family="Liberation" font-size="14.00">uses</text>
 </g>
 <!-- gitolite&#45;&gt;sshd_git -->
 <g id="edge27" class="edge">
 <title>gitolite&#45;&gt;sshd_git</title>
-<path fill="none" stroke="#000000" d="M2133.2316,-360.8772C2106.5314,-329.9205 2050.5637,-265.0304 2024.2487,-234.5202"/>
-<text text-anchor="middle" x="2105" y="-287.3" font-family="Liberation" font-size="14.00" fill="#000000">uses</text>
+<path fill="none" stroke="black" d="M1998.74,-178.77C1973.45,-162.61 1932.53,-136.46 1908.15,-120.88"/>
+<text text-anchor="middle" x="1977.5" y="-146.8" font-family="Liberation" font-size="14.00">uses</text>
 </g>
 <!-- auto_dns_git -->
 <g id="node27" class="node">
 <title>auto_dns_git</title>
-<path fill="none" stroke="#000000" d="M1730.5,-392.7273C1730.5,-394.5331 1700.6936,-396 1664,-396 1627.3064,-396 1597.5,-394.5331 1597.5,-392.7273 1597.5,-392.7273 1597.5,-363.2727 1597.5,-363.2727 1597.5,-361.4669 1627.3064,-360 1664,-360 1700.6936,-360 1730.5,-361.4669 1730.5,-363.2727 1730.5,-363.2727 1730.5,-392.7273 1730.5,-392.7273"/>
-<path fill="none" stroke="#000000" d="M1730.5,-392.7273C1730.5,-390.9214 1700.6936,-389.4545 1664,-389.4545 1627.3064,-389.4545 1597.5,-390.9214 1597.5,-392.7273"/>
-<text text-anchor="middle" x="1664" y="-374.3" font-family="Liberaion" font-size="14.00" fill="#000000">dns/auto&#45;dns.git</text>
+<path fill="none" stroke="black" d="M1630.5,-208.73C1630.5,-210.53 1602.49,-212 1568,-212 1533.51,-212 1505.5,-210.53 1505.5,-208.73 1505.5,-208.73 1505.5,-179.27 1505.5,-179.27 1505.5,-177.47 1533.51,-176 1568,-176 1602.49,-176 1630.5,-177.47 1630.5,-179.27 1630.5,-179.27 1630.5,-208.73 1630.5,-208.73"/>
+<path fill="none" stroke="black" d="M1630.5,-208.73C1630.5,-206.92 1602.49,-205.45 1568,-205.45 1533.51,-205.45 1505.5,-206.92 1505.5,-208.73"/>
+<text text-anchor="middle" x="1568" y="-190.3" font-family="Liberaion" font-size="14.00">dns/auto&#45;dns.git</text>
 </g>
 <!-- auto_dns -->
 <g id="node36" class="node">
 <title>auto_dns</title>
-<polygon fill="none" stroke="#000000" points="1360.5,-309 1279.5,-309 1279.5,-273 1360.5,-273 1360.5,-309"/>
-<text text-anchor="middle" x="1320" y="-287.3" font-family="Liberaion" font-size="14.00" fill="#000000">auto_dns</text>
+<polygon fill="none" stroke="black" points="1280.5,-125 1203.5,-125 1203.5,-89 1280.5,-89 1280.5,-125"/>
+<text text-anchor="middle" x="1242" y="-103.3" font-family="Liberaion" font-size="14.00">auto_dns</text>
 </g>
 <!-- auto_dns_git&#45;&gt;auto_dns -->
 <g id="edge33" class="edge">
 <title>auto_dns_git&#45;&gt;auto_dns</title>
-<path fill="none" stroke="#000000" d="M1614.6035,-360.4844C1604.8669,-357.3899 1594.6704,-354.3965 1585,-352 1559.1847,-345.6026 1552.1267,-346.9754 1526,-342 1459.3748,-329.3123 1439.8264,-328.4359 1370.1977,-308.8607"/>
-<polygon fill="#000000" stroke="#000000" points="1371.0834,-305.4739 1360.5075,-306.1082 1369.1706,-312.2075 1371.0834,-305.4739"/>
-<text text-anchor="middle" x="1552" y="-330.8" font-family="Liberation" font-size="14.00" fill="#000000">git pull</text>
+<path fill="none" stroke="black" d="M1521.88,-176.54C1512.4,-173.46 1502.43,-170.45 1493,-168 1469.8,-161.97 1463.49,-162.8 1440,-158 1376.12,-144.95 1357.3,-143.84 1290.41,-124.94"/>
+<polygon fill="black" stroke="black" points="1291.22,-121.53 1280.64,-122.15 1289.29,-128.26 1291.22,-121.53"/>
+<text text-anchor="middle" x="1463" y="-146.8" font-family="Liberation" font-size="14.00">git pull</text>
 </g>
 <!-- domains_git -->
 <g id="node28" class="node">
 <title>domains_git</title>
-<path fill="none" stroke="#000000" d="M1879.5,-392.7273C1879.5,-394.5331 1850.1419,-396 1814,-396 1777.8581,-396 1748.5,-394.5331 1748.5,-392.7273 1748.5,-392.7273 1748.5,-363.2727 1748.5,-363.2727 1748.5,-361.4669 1777.8581,-360 1814,-360 1850.1419,-360 1879.5,-361.4669 1879.5,-363.2727 1879.5,-363.2727 1879.5,-392.7273 1879.5,-392.7273"/>
-<path fill="none" stroke="#000000" d="M1879.5,-392.7273C1879.5,-390.9214 1850.1419,-389.4545 1814,-389.4545 1777.8581,-389.4545 1748.5,-390.9214 1748.5,-392.7273"/>
-<text text-anchor="middle" x="1814" y="-374.3" font-family="Liberaion" font-size="14.00" fill="#000000">dns/domains.git</text>
+<path fill="none" stroke="black" d="M1771.5,-208.73C1771.5,-210.53 1743.93,-212 1710,-212 1676.07,-212 1648.5,-210.53 1648.5,-208.73 1648.5,-208.73 1648.5,-179.27 1648.5,-179.27 1648.5,-177.47 1676.07,-176 1710,-176 1743.93,-176 1771.5,-177.47 1771.5,-179.27 1771.5,-179.27 1771.5,-208.73 1771.5,-208.73"/>
+<path fill="none" stroke="black" d="M1771.5,-208.73C1771.5,-206.92 1743.93,-205.45 1710,-205.45 1676.07,-205.45 1648.5,-206.92 1648.5,-208.73"/>
+<text text-anchor="middle" x="1710" y="-190.3" font-family="Liberaion" font-size="14.00">dns/domains.git</text>
 </g>
 <!-- domains -->
 <g id="node35" class="node">
 <title>domains</title>
-<polygon fill="none" stroke="#000000" points="1455.5,-309 1378.5,-309 1378.5,-273 1455.5,-273 1455.5,-309"/>
-<text text-anchor="middle" x="1417" y="-287.3" font-family="Liberaion" font-size="14.00" fill="#000000">domains</text>
+<polygon fill="none" stroke="black" points="1371.5,-125 1298.5,-125 1298.5,-89 1371.5,-89 1371.5,-125"/>
+<text text-anchor="middle" x="1335" y="-103.3" font-family="Liberaion" font-size="14.00">domains</text>
 </g>
 <!-- domains_git&#45;&gt;domains -->
 <g id="edge32" class="edge">
 <title>domains_git&#45;&gt;domains</title>
-<path fill="none" stroke="#000000" d="M1769.5287,-360.2917C1759.9212,-357.0564 1749.7251,-354.058 1740,-352 1685.041,-340.3698 1668.6058,-355.1892 1614,-342 1597.1512,-337.9304 1594.6755,-331.7298 1578,-327 1531.9413,-313.936 1516.0311,-321.0323 1465.4245,-308.7472"/>
-<polygon fill="#000000" stroke="#000000" points="1466.1121,-305.3104 1455.5562,-306.2185 1464.3744,-312.0913 1466.1121,-305.3104"/>
-<text text-anchor="middle" x="1640" y="-330.8" font-family="Liberation" font-size="14.00" fill="#000000">git pull</text>
+<path fill="none" stroke="black" d="M1668.69,-176.26C1659.38,-173.05 1649.46,-170.06 1640,-168 1589,-156.91 1573.75,-170.16 1523,-158 1505.74,-153.86 1503.07,-147.86 1486,-143 1443.31,-130.84 1428.57,-136.43 1381.56,-124.81"/>
+<polygon fill="black" stroke="black" points="1382.27,-121.38 1371.71,-122.25 1380.51,-128.15 1382.27,-121.38"/>
+<text text-anchor="middle" x="1546" y="-146.8" font-family="Liberation" font-size="14.00">git pull</text>
 </g>
 <!-- letsencrypt_domains_git -->
 <g id="node29" class="node">
 <title>letsencrypt_domains_git</title>
-<path fill="none" stroke="#000000" d="M2086,-392.7273C2086,-394.5331 2043.8677,-396 1992,-396 1940.1323,-396 1898,-394.5331 1898,-392.7273 1898,-392.7273 1898,-363.2727 1898,-363.2727 1898,-361.4669 1940.1323,-360 1992,-360 2043.8677,-360 2086,-361.4669 2086,-363.2727 2086,-363.2727 2086,-392.7273 2086,-392.7273"/>
-<path fill="none" stroke="#000000" d="M2086,-392.7273C2086,-390.9214 2043.8677,-389.4545 1992,-389.4545 1940.1323,-389.4545 1898,-390.9214 1898,-392.7273"/>
-<text text-anchor="middle" x="1992" y="-374.3" font-family="Liberaion" font-size="14.00" fill="#000000">letsencrypt&#45;domains.git</text>
+<path fill="none" stroke="black" d="M1962.5,-208.73C1962.5,-210.53 1923.73,-212 1876,-212 1828.27,-212 1789.5,-210.53 1789.5,-208.73 1789.5,-208.73 1789.5,-179.27 1789.5,-179.27 1789.5,-177.47 1828.27,-176 1876,-176 1923.73,-176 1962.5,-177.47 1962.5,-179.27 1962.5,-179.27 1962.5,-208.73 1962.5,-208.73"/>
+<path fill="none" stroke="black" d="M1962.5,-208.73C1962.5,-206.92 1923.73,-205.45 1876,-205.45 1828.27,-205.45 1789.5,-206.92 1789.5,-208.73"/>
+<text text-anchor="middle" x="1876" y="-190.3" font-family="Liberaion" font-size="14.00">letsencrypt&#45;domains.git</text>
 </g>
 <!-- le_snippets -->
 <g id="node37" class="node">
 <title>le_snippets</title>
-<polygon fill="none" stroke="#000000" points="1572.5,-309 1473.5,-309 1473.5,-273 1572.5,-273 1572.5,-309"/>
-<text text-anchor="middle" x="1523" y="-287.3" font-family="Liberaion" font-size="14.00" fill="#000000">le_snippets</text>
+<polygon fill="none" stroke="black" points="1480.5,-125 1389.5,-125 1389.5,-89 1480.5,-89 1480.5,-125"/>
+<text text-anchor="middle" x="1435" y="-103.3" font-family="Liberaion" font-size="14.00">le_snippets</text>
 </g>
 <!-- letsencrypt_domains_git&#45;&gt;le_snippets -->
 <g id="edge34" class="edge">
 <title>letsencrypt_domains_git&#45;&gt;le_snippets</title>
-<path fill="none" stroke="#000000" d="M1926.8516,-360.4384C1914.342,-357.3835 1901.3062,-354.4164 1889,-352 1755.1008,-325.7082 1718.4144,-337.6504 1585,-309 1584.113,-308.8095 1583.2202,-308.6131 1582.3227,-308.4113"/>
-<polygon fill="#000000" stroke="#000000" points="1583.1284,-305.0053 1572.5871,-306.069 1581.4909,-311.8111 1583.1284,-305.0053"/>
-<text text-anchor="middle" x="1867.5" y="-330.8" font-family="Liberation" font-size="14.00" fill="#000000">push hook</text>
+<path fill="none" stroke="black" d="M1816.94,-176.39C1805.1,-173.36 1792.69,-170.4 1781,-168 1654.23,-141.94 1619.39,-152.82 1493,-125 1492.25,-124.84 1491.5,-124.67 1490.74,-124.49"/>
+<polygon fill="black" stroke="black" points="1491.3,-121.03 1480.76,-122.04 1489.63,-127.82 1491.3,-121.03"/>
+<text text-anchor="middle" x="1755" y="-146.8" font-family="Liberation" font-size="14.00">push hook</text>
 </g>
 <!-- dns_sshfp -->
 <g id="node31" class="node">
 <title>dns_sshfp</title>
-<polygon fill="none" stroke="#000000" points="1261,-309 1173,-309 1173,-273 1261,-273 1261,-309"/>
-<text text-anchor="middle" x="1217" y="-287.3" font-family="Liberaion" font-size="14.00" fill="#000000">dns_sshfp</text>
+<polygon fill="none" stroke="black" points="1185,-125 1103,-125 1103,-89 1185,-89 1185,-125"/>
+<text text-anchor="middle" x="1144" y="-103.3" font-family="Liberaion" font-size="14.00">dns_sshfp</text>
 </g>
 <!-- udreplicate_dns&#45;&gt;dns_sshfp -->
 <g id="edge29" class="edge">
 <title>udreplicate_dns&#45;&gt;dns_sshfp</title>
-<path fill="none" stroke="#000000" d="M1156.6692,-453.9833C1168.3778,-422.3525 1192.7061,-356.6298 1206.6271,-319.0224"/>
-<polygon fill="#000000" stroke="#000000" points="1210.0692,-319.8056 1210.2584,-309.2125 1203.5045,-317.3755 1210.0692,-319.8056"/>
+<path fill="none" stroke="black" d="M1092.64,-176.21C1101.88,-163.95 1114.55,-147.11 1125,-133.24"/>
+<polygon fill="black" stroke="black" points="1127.94,-135.14 1131.16,-125.05 1122.35,-130.93 1127.94,-135.14"/>
 </g>
 <!-- dns_zone -->
 <g id="node32" class="node">
 <title>dns_zone</title>
-<polygon fill="none" stroke="#000000" points="1154.5,-309 1071.5,-309 1071.5,-273 1154.5,-273 1154.5,-309"/>
-<text text-anchor="middle" x="1113" y="-287.3" font-family="Liberaion" font-size="14.00" fill="#000000">dns_zone</text>
+<polygon fill="none" stroke="black" points="1084.5,-125 1005.5,-125 1005.5,-89 1084.5,-89 1084.5,-125"/>
+<text text-anchor="middle" x="1045" y="-103.3" font-family="Liberaion" font-size="14.00">dns_zone</text>
 </g>
 <!-- udreplicate_dns&#45;&gt;dns_zone -->
 <g id="edge30" class="edge">
 <title>udreplicate_dns&#45;&gt;dns_zone</title>
-<path fill="none" stroke="#000000" d="M1146.317,-453.9833C1139.8511,-422.3525 1126.416,-356.6298 1118.7283,-319.0224"/>
-<polygon fill="#000000" stroke="#000000" points="1122.1549,-318.3088 1116.723,-309.2125 1115.2968,-319.7109 1122.1549,-318.3088"/>
+<path fill="none" stroke="black" d="M1072.92,-175.8C1068.03,-163.93 1061.44,-147.93 1055.89,-134.45"/>
+<polygon fill="black" stroke="black" points="1059.12,-133.09 1052.07,-125.18 1052.64,-135.75 1059.12,-133.09"/>
 </g>
 <!-- zone_files -->
 <g id="node38" class="node">
 <title>zone_files</title>
-<path fill="none" stroke="#000000" d="M1330.5,-159.7273C1330.5,-161.5331 1302.4865,-163 1268,-163 1233.5135,-163 1205.5,-161.5331 1205.5,-159.7273 1205.5,-159.7273 1205.5,-130.2727 1205.5,-130.2727 1205.5,-128.4669 1233.5135,-127 1268,-127 1302.4865,-127 1330.5,-128.4669 1330.5,-130.2727 1330.5,-130.2727 1330.5,-159.7273 1330.5,-159.7273"/>
-<path fill="none" stroke="#000000" d="M1330.5,-159.7273C1330.5,-157.9214 1302.4865,-156.4545 1268,-156.4545 1233.5135,-156.4545 1205.5,-157.9214 1205.5,-159.7273"/>
-<text text-anchor="middle" x="1268" y="-141.3" font-family="Liberaion" font-size="14.00" fill="#000000">BIND zone files</text>
+<path fill="none" stroke="black" d="M1252,-48.73C1252,-50.53 1225.56,-52 1193,-52 1160.44,-52 1134,-50.53 1134,-48.73 1134,-48.73 1134,-19.27 1134,-19.27 1134,-17.47 1160.44,-16 1193,-16 1225.56,-16 1252,-17.47 1252,-19.27 1252,-19.27 1252,-48.73 1252,-48.73"/>
+<path fill="none" stroke="black" d="M1252,-48.73C1252,-46.92 1225.56,-45.45 1193,-45.45 1160.44,-45.45 1134,-46.92 1134,-48.73"/>
+<text text-anchor="middle" x="1193" y="-30.3" font-family="Liberaion" font-size="14.00">BIND zone files</text>
 </g>
 <!-- dns_sshfp&#45;&gt;zone_files -->
 <g id="edge35" class="edge">
 <title>dns_sshfp&#45;&gt;zone_files</title>
-<path fill="none" stroke="#000000" d="M1223.3561,-272.8042C1232.0983,-247.7775 1247.9148,-202.4988 1258.1837,-173.1017"/>
-<polygon fill="#000000" stroke="#000000" points="1261.5702,-174.0199 1261.5638,-163.4251 1254.9618,-171.7115 1261.5702,-174.0199"/>
+<path fill="none" stroke="black" d="M1155.86,-88.81C1161.76,-80.27 1169,-69.77 1175.52,-60.32"/>
+<polygon fill="black" stroke="black" points="1178.45,-62.25 1181.25,-52.03 1172.69,-58.27 1178.45,-62.25"/>
 </g>
 <!-- dns_zone&#45;&gt;zone_files -->
 <g id="edge36" class="edge">
 <title>dns_zone&#45;&gt;zone_files</title>
-<path fill="none" stroke="#000000" d="M1132.3175,-272.8042C1159.6991,-247.0125 1209.9157,-199.7117 1240.9797,-170.4514"/>
-<polygon fill="#000000" stroke="#000000" points="1243.5596,-172.8295 1248.4391,-163.4251 1238.76,-167.734 1243.5596,-172.8295"/>
+<path fill="none" stroke="black" d="M1078.13,-88.89C1083.42,-86.22 1088.85,-83.51 1094,-81 1110.95,-72.74 1129.67,-63.96 1146.24,-56.3"/>
+<polygon fill="black" stroke="black" points="1148.09,-59.3 1155.71,-51.93 1145.16,-52.94 1148.09,-59.3"/>
 </g>
 <!-- puppet_agent -->
 <g id="node33" class="node">
 <title>puppet_agent</title>
-<ellipse fill="none" stroke="#000000" cx="991" cy="-472" rx="73.387" ry="18"/>
-<text text-anchor="middle" x="991" y="-468.3" font-family="Liberaion" font-size="14.00" fill="#000000">Puppet agent</text>
+<ellipse fill="none" stroke="black" cx="931" cy="-194" rx="68.79" ry="18"/>
+<text text-anchor="middle" x="931" y="-190.3" font-family="Liberaion" font-size="14.00">Puppet agent</text>
 </g>
 <!-- puppet_includes -->
 <g id="node34" class="node">
 <title>puppet_includes</title>
-<polygon fill="none" stroke="#000000" points="1053.5,-309 918.5,-309 918.5,-273 1053.5,-273 1053.5,-309"/>
-<text text-anchor="middle" x="986" y="-287.3" font-family="Liberaion" font-size="14.00" fill="#000000">puppet_includes</text>
+<polygon fill="none" stroke="black" points="987.5,-125 862.5,-125 862.5,-89 987.5,-89 987.5,-125"/>
+<text text-anchor="middle" x="925" y="-103.3" font-family="Liberaion" font-size="14.00">puppet_includes</text>
 </g>
 <!-- puppet_agent&#45;&gt;puppet_includes -->
 <g id="edge31" class="edge">
 <title>puppet_agent&#45;&gt;puppet_includes</title>
-<path fill="none" stroke="#000000" d="M990.5023,-453.9833C989.6323,-422.4877 987.8285,-357.1909 986.7875,-319.5061"/>
-<polygon fill="#000000" stroke="#000000" points="990.278,-319.112 986.5031,-309.2125 983.2807,-319.3053 990.278,-319.112"/>
+<path fill="none" stroke="black" d="M929.79,-175.8C928.96,-164.16 927.86,-148.55 926.92,-135.24"/>
+<polygon fill="black" stroke="black" points="930.41,-134.9 926.21,-125.18 923.43,-135.4 930.41,-134.9"/>
 </g>
 <!-- puppet_includes&#45;&gt;zone_files -->
 <g id="edge37" class="edge">
 <title>puppet_includes&#45;&gt;zone_files</title>
-<path fill="none" stroke="#000000" d="M1017.916,-272.8979C1054.0203,-252.5943 1114.7322,-218.9763 1168,-192 1184.5949,-183.5959 1202.9657,-174.8151 1219.3862,-167.1487"/>
-<polygon fill="#000000" stroke="#000000" points="1221.2063,-170.1624 1228.8007,-162.7748 1218.257,-163.814 1221.2063,-170.1624"/>
+<path fill="none" stroke="black" d="M972.03,-88.89C980.3,-86.1 988.87,-83.36 997,-81 1038.75,-68.89 1086.2,-57.69 1123.96,-49.37"/>
+<polygon fill="black" stroke="black" points="1124.81,-52.76 1133.84,-47.21 1123.32,-45.93 1124.81,-52.76"/>
 </g>
 <!-- domains&#45;&gt;zone_files -->
 <g id="edge38" class="edge">
 <title>domains&#45;&gt;zone_files</title>
-<path fill="none" stroke="#000000" d="M1398.4303,-272.8042C1372.1086,-247.0125 1323.8359,-199.7117 1293.9744,-170.4514"/>
-<polygon fill="#000000" stroke="#000000" points="1296.3959,-167.924 1286.8037,-163.4251 1291.4968,-172.9239 1296.3959,-167.924"/>
+<path fill="none" stroke="black" d="M1304.64,-88.79C1299.77,-86.13 1294.77,-83.45 1290,-81 1273.65,-72.59 1255.5,-63.83 1239.36,-56.24"/>
+<polygon fill="black" stroke="black" points="1240.66,-52.99 1230.12,-51.92 1237.7,-59.33 1240.66,-52.99"/>
 </g>
 <!-- auto_dns&#45;&gt;zone_files -->
 <g id="edge39" class="edge">
 <title>auto_dns&#45;&gt;zone_files</title>
-<path fill="none" stroke="#000000" d="M1313.5193,-272.8042C1304.6057,-247.7775 1288.479,-202.4988 1278.0088,-173.1017"/>
-<polygon fill="#000000" stroke="#000000" points="1281.2147,-171.6711 1274.5624,-163.4251 1274.6205,-174.0198 1281.2147,-171.6711"/>
+<path fill="none" stroke="black" d="M1230.14,-88.81C1224.24,-80.27 1217,-69.77 1210.48,-60.32"/>
+<polygon fill="black" stroke="black" points="1213.31,-58.27 1204.75,-52.03 1207.55,-62.25 1213.31,-58.27"/>
 </g>
 <!-- le_snippets&#45;&gt;zone_files -->
 <g id="edge40" class="edge">
 <title>le_snippets&#45;&gt;zone_files</title>
-<path fill="none" stroke="#000000" d="M1491.4762,-272.9511C1445.2167,-246.4652 1358.9483,-197.0724 1308.1935,-168.0127"/>
-<polygon fill="#000000" stroke="#000000" points="1309.8691,-164.939 1299.4517,-163.0077 1306.3909,-171.0138 1309.8691,-164.939"/>
+<path fill="none" stroke="black" d="M1400.84,-88.98C1394.35,-86.09 1387.53,-83.29 1381,-81 1342.44,-67.5 1298.11,-56.45 1262.18,-48.57"/>
+<polygon fill="black" stroke="black" points="1262.8,-45.12 1252.28,-46.43 1261.32,-51.96 1262.8,-45.12"/>
 </g>
 <!-- PuppetDB -->
 <g id="node39" class="node">
 <title>PuppetDB</title>
-<path fill="none" stroke="#000000" d="M861.5,-392.7273C861.5,-394.5331 842.0026,-396 818,-396 793.9974,-396 774.5,-394.5331 774.5,-392.7273 774.5,-392.7273 774.5,-363.2727 774.5,-363.2727 774.5,-361.4669 793.9974,-360 818,-360 842.0026,-360 861.5,-361.4669 861.5,-363.2727 861.5,-363.2727 861.5,-392.7273 861.5,-392.7273"/>
-<path fill="none" stroke="#000000" d="M861.5,-392.7273C861.5,-390.9214 842.0026,-389.4545 818,-389.4545 793.9974,-389.4545 774.5,-390.9214 774.5,-392.7273"/>
-<text text-anchor="middle" x="818" y="-374.3" font-family="Liberaion" font-size="14.00" fill="#000000">PuppetDB</text>
+<path fill="none" stroke="black" d="M808.5,-208.73C808.5,-210.53 789.9,-212 767,-212 744.1,-212 725.5,-210.53 725.5,-208.73 725.5,-208.73 725.5,-179.27 725.5,-179.27 725.5,-177.47 744.1,-176 767,-176 789.9,-176 808.5,-177.47 808.5,-179.27 808.5,-179.27 808.5,-208.73 808.5,-208.73"/>
+<path fill="none" stroke="black" d="M808.5,-208.73C808.5,-206.92 789.9,-205.45 767,-205.45 744.1,-205.45 725.5,-206.92 725.5,-208.73"/>
+<text text-anchor="middle" x="767" y="-190.3" font-family="Liberaion" font-size="14.00">PuppetDB</text>
 </g>
 <!-- puppetd&#45;&gt;puppet_agent -->
 <g id="edge43" class="edge">
 <title>puppetd&#45;&gt;puppet_agent</title>
-<path fill="none" stroke="#000000" d="M845.0313,-563.9688C874.7391,-545.2511 922.5854,-515.1051 955.346,-494.4641"/>
-<polygon fill="#000000" stroke="#000000" points="957.5636,-497.2037 964.1586,-488.9117 953.8321,-491.2812 957.5636,-497.2037"/>
-<text text-anchor="middle" x="946" y="-532.8" font-family="Liberation" font-size="14.00" fill="#000000">TLSA records</text>
+<path fill="none" stroke="black" d="M790.45,-300.73C807.18,-289.03 830.14,-272.77 850,-258 867.61,-244.9 887.03,-229.82 902.44,-217.7"/>
+<polygon fill="black" stroke="black" points="904.86,-220.24 910.55,-211.3 900.53,-214.75 904.86,-220.24"/>
+<text text-anchor="middle" x="880.5" y="-269.8" font-family="Liberation" font-size="14.00">TLSA records</text>
 </g>
 <!-- puppetd&#45;&gt;PuppetDB -->
 <g id="edge41" class="edge">
 <title>puppetd&#45;&gt;PuppetDB</title>
-<path fill="none" stroke="#000000" d="M818,-552.8211C818,-514.1637 818,-445.0788 818,-406.338"/>
-<polygon fill="#000000" stroke="#000000" points="814.5001,-552.9851 818,-562.9851 821.5001,-552.9851 814.5001,-552.9851"/>
-<polygon fill="#000000" stroke="#000000" points="821.5001,-406.2663 818,-396.2663 814.5001,-406.2664 821.5001,-406.2663"/>
+<path fill="none" stroke="black" d="M767,-289.65C767,-269.52 767,-242.28 767,-222.19"/>
+<polygon fill="black" stroke="black" points="763.5,-289.78 767,-299.78 770.5,-289.78 763.5,-289.78"/>
+<polygon fill="black" stroke="black" points="770.5,-222.13 767,-212.13 763.5,-222.13 770.5,-222.13"/>
 </g>
 <!-- abridged -->
 <g id="node41" class="node">
 <title>abridged</title>
-<polygon fill="none" stroke="#000000" points="718,-600 554,-600 554,-562 724,-562 724,-594 718,-600"/>
-<polyline fill="none" stroke="#000000" points="718,-600 718,-594 "/>
-<polyline fill="none" stroke="#000000" points="724,-594 718,-594 "/>
-<text text-anchor="middle" x="639" y="-584.8" font-family="Liberaion" font-size="14.00" fill="#000000">(ud&#45;replicate omitted</text>
-<text text-anchor="middle" x="639" y="-569.8" font-family="Liberaion" font-size="14.00" fill="#000000">for brevity)</text>
+<polygon fill="none" stroke="black" points="671.5,-337 522.5,-337 522.5,-299 677.5,-299 677.5,-331 671.5,-337"/>
+<polyline fill="none" stroke="black" points="671.5,-337 671.5,-331 "/>
+<polyline fill="none" stroke="black" points="677.5,-331 671.5,-331 "/>
+<text text-anchor="middle" x="600" y="-321.8" font-family="Liberaion" font-size="14.00">(ud&#45;replicate omitted</text>
+<text text-anchor="middle" x="600" y="-306.8" font-family="Liberaion" font-size="14.00">for brevity)</text>
 </g>
 <!-- postfix_mail -->
 <g id="node42" class="node">
 <title>postfix_mail</title>
-<ellipse fill="none" stroke="#000000" cx="3286" cy="-581" rx="42.4939" ry="18"/>
-<text text-anchor="middle" x="3286" y="-577.3" font-family="Liberaion" font-size="14.00" fill="#000000">postfix</text>
+<ellipse fill="none" stroke="black" cx="3087" cy="-318" rx="39.79" ry="18"/>
+<text text-anchor="middle" x="3087" y="-314.3" font-family="Liberaion" font-size="14.00">postfix</text>
 </g>
 <!-- aliases -->
 <g id="node44" class="node">
 <title>aliases</title>
-<polygon fill="none" stroke="#000000" points="3324,-396 3094,-396 3094,-360 3324,-360 3324,-396"/>
-<text text-anchor="middle" x="3209" y="-374.3" font-family="Liberaion" font-size="14.00" fill="#000000">/etc/postfix/debian aliases file</text>
+<polygon fill="none" stroke="black" points="3123,-212 2909,-212 2909,-176 3123,-176 3123,-212"/>
+<text text-anchor="middle" x="3016" y="-190.3" font-family="Liberaion" font-size="14.00">/etc/postfix/debian aliases file</text>
 </g>
 <!-- postfix_mail&#45;&gt;aliases -->
 <g id="edge46" class="edge">
 <title>postfix_mail&#45;&gt;aliases</title>
-<path fill="none" stroke="#000000" d="M3279.1668,-562.9851C3264.5915,-524.5594 3230.5882,-434.9143 3215.9286,-396.2663"/>
-<text text-anchor="middle" x="3280" y="-468.3" font-family="Liberation" font-size="14.00" fill="#000000">uses</text>
+<path fill="none" stroke="black" d="M3077.28,-300.29C3063.83,-277.19 3039.69,-235.7 3026.06,-212.29"/>
+<text text-anchor="middle" x="3081.5" y="-269.8" font-family="Liberation" font-size="14.00">uses</text>
 </g>
 <!-- udreplicate_eugeni&#45;&gt;aliases -->
 <g id="edge45" class="edge">
 <title>udreplicate_eugeni&#45;&gt;aliases</title>
-<path fill="none" stroke="#000000" d="M3162.5259,-562.9851C3171.4255,-527.5614 3191.2609,-448.6088 3201.9129,-406.2095"/>
-<polygon fill="#000000" stroke="#000000" points="3205.3688,-406.8178 3204.4109,-396.2663 3198.5797,-405.1121 3205.3688,-406.8178"/>
+<path fill="none" stroke="black" d="M2974.67,-300.04C2982.65,-279.76 2996.1,-245.57 3005.48,-221.73"/>
+<polygon fill="black" stroke="black" points="3008.82,-222.8 3009.23,-212.21 3002.31,-220.24 3008.82,-222.8"/>
 </g>
 </g>
 </svg>
diff --git a/howto/new-person.md b/howto/new-person.md
index 4d1410d2af3de073e8cf5823ab00130e7a88ffa6..ccf0a6daab5a8397691de271114140af7435467c 100644
--- a/howto/new-person.md
+++ b/howto/new-person.md
@@ -37,9 +37,6 @@ user management procedures, see [issue 40129](https://gitlab.torproject.org/tpo/
      legacy alert dashboard
    * [GitLab](howto/gitlab): <https://gitlab.torproject.org/> - issue tracking,
      project management, and git repository hosting
-   * [git](howto/git): <https://gitweb.torproject.org/>, or
-     `git@git-rw.torproject.org` over SSH - legacy git repository
-     hosting
    * [git repositories list](https://gitlab.torproject.org/tpo/tpa/repos), clone this first
    * [web sites and team](https://gitlab.torproject.org/tpo/web/team)
    * see also the full [service list](service)
@@ -92,8 +89,7 @@ user management procedures, see [issue 40129](https://gitlab.torproject.org/tpo/
 # More advanced documentation
 
  1. [Account creation procedures](howto/create-a-new-user)
- 2. Password manager procedures (undocumented, see
-    `ssh://git@git-rw.torproject.org/admin/tor-passwords.git` for now)
+ 2. [Password management](service/password-manager)
  3. [Adding](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/howto/static-component#adding-a-new-component) and [removing](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/howto/static-component#removing-a-component) websites in the [static mirror
     system](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/howto/static-component)
  4. [Editing DNS](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/howto/dns#editing-a-zone)
@@ -126,7 +122,7 @@ Here's a checklist that should be copy-pasted in a ticket, for basic TPA access:
  4. [ ] GitLab `tpo/web` group membership, "Maintainer" level
  5. [ ] [New LDAP account](howto/create-a-new-user)
  6. [ ] [Nagios](howto/nagios) access, contact should be created in
-    `ssh://git@git-rw.torproject.org/admin/tor-nagios`, password in
+    `nagiosadm@nagios.torproject.org:/home/nagiosadm/tor-nagios`, password in
     `/etc/icinga/htpasswd.users` directly on the server
  7. [ ] [Nextcloud](https://nc.torproject.net) account with groups TPI and TPA.
  8. [ ] `torproject-admin@` and `torproject-admin-vcs@` aliases
diff --git a/howto/rt.md b/howto/rt.md
index be5d20dafcea14e569b242947015f2111d554ae1..0c938df2cbe017b16f08e1b98a5f1daea5b3e2c6 100644
--- a/howto/rt.md
+++ b/howto/rt.md
@@ -124,7 +124,7 @@ The support help desk coordinator handles the following tasks:
  * Make the life of support assistants as good as it can be.
  * Be the contact point for other parts of the project regarding help desk matters.
  * Lead discussions about non-technical aspects of help requests to conclusions.
- * Maintain the [`support-tools` Git repository](https://gitweb.torproject.org/support-tools).
+ * Maintain the [`support-tools` Git repository](https://gitlab.torproject.org/tpo/tpa/support-tools).
  * Keep an eye on the [calendar](./doc/support/Calendar) for the 'help' queue.
 
 ## Create accounts for webchat / stats
@@ -145,7 +145,7 @@ Administration of the private mailing list is done through
 To create the monthly report chart, one should use the script
 `rude.torproject.org:/srv/rtstuff/support-tools/monthly-report/monthly_stats.py`.
 
-Also, each month data need to be added for the quarterly reports for the [business graph](https://gitweb.torproject.org/support-tools.git/tree/HEAD:/queue-graphs/data) and for the [time graph](https://gitweb.torproject.org/support-tools.git/tree/HEAD:/response-time/dataresponse).
+Also, each month data need to be added for the quarterly reports for the [business graph](https://gitlab.torproject.org/tpo/tpa/support-tools/-/tree/master/queue-graphs/data?ref_type=heads) and for the [time graph](https://gitlab.torproject.org/tpo/tpa/support-tools/-/tree/master/response-time/data?ref_type=heads).
 
 Data for the business graph is generated by `monthly_stats`. Data for the response time graph is generated by running `rude.torproject.org:/srv/rtstuff/support-tools/response-time/response_time.py`.
 
@@ -250,7 +250,7 @@ The support help desk coordinator needs the following assets to perform their du
 
  * Administration password for the support-team-private mailing list.
  * Being owner in the support-team-private mailing list configuration.
- * Commit access to [help wiki Git repository](https://gitweb.torproject.org/project/help/wiki.git).
+ * Commit access to [help wiki Git repository](https://gitlab.torproject.org/tpo/tpa/wiki-replica/).
  * Shell access to [rude.torproject.org](https://db.torproject.org/machines.cgi?host=rude).
  * LDAP account member of the `rtfolks` group.
  * LDAP account member of the `support` group.
@@ -350,7 +350,7 @@ A global _Scrip_ is responsible for this. It will be default use the global temp
 
 ## Expiration of old tickets
 
-Tickets (and affiliated users) get erased from the RT database after 100 days. This is done by the [expire-old-tickets script](https://gitweb.torproject.org/support-tools.git/blob/HEAD:/expire-old-tickets/expire-old-tickets). The script is run everyday at 06:02 UTC through a _cronjob_ run as user `colin`.
+Tickets (and affiliated users) get erased from the RT database after 100 days. This is done by the [expire-old-tickets script](https://gitlab.torproject.org/tpo/tpa/support-tools/-/blob/master/expire-old-tickets/expire-old-tickets?ref_type=heads). The script is run everyday at 06:02 UTC through a _cronjob_ run as user `colin`.
 
 Encrypted SQL dumps of the data removed from the database will be written to `/srv/rtstuff/shredded` and must be put away regularly.
 
@@ -358,7 +358,7 @@ Encrypted SQL dumps of the data removed from the database will be written to `/s
 
 RT articles are dumped into text files and then pushed to the [rt-articles Git repository](https://people.torproject.org/~colin/rt-articles.git). An email is sent each time there's a new commit, so collective reviews can happen by the rest of the support team.
 
-The machinery is [spread through several scripts](https://gitweb.torproject.org/support-tools.git/tree/HEAD:/rt-articles). The one run on `rude` is [dump_rt_articles](https://gitweb.torproject.org/support-tools.git/blob/HEAD:/rt-articles/dump_rt_articles), and it will run everyday through a _cronjob_ as user `colin`.
+The machinery is [spread through several scripts](https://gitlab.torproject.org/tpo/tpa/support-tools/-/tree/master/rt-articles?ref_type=heads). The one run on `rude` is [dump_rt_articles](https://gitlab.torproject.org/tpo/tpa/support-tools/-/blob/master/rt-articles/dump_rt_articles), and it will run everyday through a _cronjob_ as user `colin`.
 
 ## Issues
 
@@ -414,7 +414,7 @@ this:
 
     /srv/rtstuff/support-tools/train-spam-filters/train_spam_filters && bin/spam-learn && find Maildir/.spam.learned Maildir/.xham.learned -type f -delete
 
-The [train_spam_filters](https://gitweb.torproject.org/support-tools.git/tree/train-spam-filters/train_spam_filters) script basically does this:
+The [train_spam_filters](https://gitlab.torproject.org/tpo/tpa/support-tools/-/tree/master/train-spam-filters/train_spam_filters) script basically does this:
 
  1. for each mail in the `Maildir/.help*` archive
  2. find its Message-Id header
diff --git a/policy/tpa-rfc-1-policy.md b/policy/tpa-rfc-1-policy.md
index 6fde296c6d22c78d97d95de45c8717bec755d705..e976de8d1c21cb63959757864b15e9ccfa3cbcde 100644
--- a/policy/tpa-rfc-1-policy.md
+++ b/policy/tpa-rfc-1-policy.md
@@ -46,7 +46,7 @@ It also does not cover the larger [Tor Project policies][] as a
 whole. When there is a conflict between the policies defined here and
 the larger Tor policies, the latter policies overrule.
 
-[Tor Project policies]: https://gitweb.torproject.org/community/policies.git/tree/
+[Tor Project policies]: https://gitlab.torproject.org/tpo/community/policies/
 
 ## Communication
 
diff --git a/policy/tpa-rfc-39-nextcloud-account-policy.md b/policy/tpa-rfc-39-nextcloud-account-policy.md
index 8f887f7bb99147f06e19c86197fde28c82175c5f..8dfb6c7f4a9ca9e11d37acb8f46b513c517ee92f 100644
--- a/policy/tpa-rfc-39-nextcloud-account-policy.md
+++ b/policy/tpa-rfc-39-nextcloud-account-policy.md
@@ -14,7 +14,7 @@ Project infrastructure.
 
 # Proposal
 
-Nextcloud user accounts are available for all [Core Contributors](https://gitweb.torproject.org/community/policies.git/tree/membership.txt).
+Nextcloud user accounts are available for all [Core Contributors](https://gitlab.torproject.org/tpo/community/policies/-/blob/HEAD/membership.txt).
 Other accounts may be created on a case-by-case basis. For now, bots are the only exception, and the dangerzone-bot is the only known bot to be in operation.
 
 # Approval
diff --git a/policy/tpa-rfc-7-root.md b/policy/tpa-rfc-7-root.md
index 237ab684e5f32850621bfe86b2ae1e0213be07a2..db1185f886594b9128fb36889fa58e728bbc4ec3 100644
--- a/policy/tpa-rfc-7-root.md
+++ b/policy/tpa-rfc-7-root.md
@@ -73,7 +73,7 @@ hardware resources) to do so as well.
 This policy complements the [Tor Core Membership policy][] but
 concerns only membership to the TPA team and access to servers.
 
-[Tor Core Membership policy]: https://gitweb.torproject.org/community/policies.git/plain/membership.txt
+[Tor Core Membership policy]: https://gitlab.torproject.org/tpo/community/policies/-/raw/HEAD/docs/membership.md
 
 ## Access levels
 
diff --git a/service/blog.md b/service/blog.md
index bf4e0d7bbf858c15bf013667a94ea688effad20c..8ef531537bab05d061a75bf6684b2829ff9ed4e4 100644
--- a/service/blog.md
+++ b/service/blog.md
@@ -370,7 +370,7 @@ We should migrate the site to an SSG as soon as possible.
  * Archive of existing blog post comments (see rationale [here](https://gitlab.torproject.org/tpo/web/blog-trac/-/issues/33115 at bottom))
  * Web-based "admin" interface
  * RSS/Atom feeds per-tag and per-author
- * [Styleguide](https://styleguide.torproject.org/) compliant template already exists ([Lektor](https://gitweb.torproject.org/project/web/template.git/), [Hugo](https://github.com/irl/torproject-hugo))
+ * [Styleguide](https://styleguide.torproject.org/) compliant template already exists ([Lektor](https://gitlab.torproject.org/tpo/web/template), [Hugo](https://github.com/irl/torproject-hugo))
 
 #### Non-goals
 
diff --git a/service/jenkins.md b/service/jenkins.md
index 02a19dc88812719f96195e4c5630f91c67d465a6..4e5ba84f46bec2cbcf7f698013cab025c56ac95b 100644
--- a/service/jenkins.md
+++ b/service/jenkins.md
@@ -105,7 +105,7 @@ special hook on the git server (in
 kicks the `/srv/jenkins.torproject.org/bin/update` script on the
 Jenkins server, over SSH, which, ultimately, runs:
 
-[jenkins/jobs.git]: https://gitweb.torproject.org/project/jenkins/jobs.git
+[jenkins/jobs.git]: https://gitlab.torproject.org/tpo/tpa/jenkins-jobs
 
     jenkins-jobs --conf "$BASE"/etc/jenkins_jobs.ini update .
 
@@ -174,7 +174,7 @@ That, in turns, runs this script:
 latter is the path to the HTTP URL of the git repository being
 updated. 
 
-The `hook` script is part of the [jenkins/tools.git](https://gitweb.torproject.org/project/jenkins/tools.git/) repository.
+The `hook` script is part of the [jenkins-tools.git](https://gitlab.torproject.org/tpo/tpa/jenkins-tools/) repository.
 
 It depends on the `~git/.jenkins-config` file which defines the
 `JENKINS_URL` variable, which itself includes the username (`git`),
@@ -221,7 +221,7 @@ find the right job script to run.
 
 Scripts are generally the `build` command inside a directory, for
 example Hugo websites are built with
-[slaves/linux/hugo-website/build](https://gitweb.torproject.org/project/jenkins/tools.git/tree/slaves/linux/hugo-website/build), because the base name of the job
+[slaves/linux/hugo-website/build](https://gitlab.torproject.org/tpo/tpa/jenkins-tools/-/tree/HEAD/slaves/linux/hugo-website/build), because the base name of the job
 template is `hugo-website`.. The build ends up in
 `RESULT/output.tar.gz`, which gets passed to the `install` job
 (e.g. `hugo-website-$site-install`). That job then ships the files off
@@ -241,11 +241,11 @@ actually happens through git, see above.
 To recapitulate, the following Git repositories configure Jenkins job
 and how they operate:
 
- * [jenkins/tools.git](https://gitweb.torproject.org/project/jenkins/tools.git/): wrapper scripts and glue
- * [jenkins/jobs.git](https://gitweb.torproject.org/project/jenkins/jobs.git/): YAML job definitions for [Jenkins Job
+ * [jenkins-tools.git](https://gitlab.torproject.org/tpo/tpa/jenkins-tools/): wrapper scripts and glue
+ * [jenkins-jobs.git](https://gitlab.torproject.org/tpo/tpa/jenkins-jobs): YAML job definitions for [Jenkins Job
    Builder][]
 
-Also note the [build scripts](https://gitweb.torproject.org/admin/static-builds.git/) that are used to build static
+Also note the [build scripts](https://gitlab.torproject.org/tpo/tpa/static-builds/) that are used to build static
 websites, as explained in the [static site mirroring
 documentation](howto/static-component).
 
@@ -275,7 +275,7 @@ The Jenkins packages in Debian are not in a good shape: it was
 
 ### Configured jobs
 
-The following jobs are currently configured in [jenkins/jobs.git](https://gitweb.torproject.org/project/jenkins/jobs.git/):
+The following jobs are currently configured in [jenkins-jobs.git](https://gitlab.torproject.org/tpo/tpa/jenkins-jobs):
 
  * [hugo-website.yaml](https://gitweb.torproject.org/project/jenkins/jobs.git/tree/hugo-website.yaml) - builds websites with [Hugo](https://gohugo.io/) and
    publishes them to the static mirror system. jobs based on this
diff --git a/service/lists.md b/service/lists.md
index 022936214abe07dd424fbc97e5717e89847d27d2..ddcf71c03a2d15f75731c50a7fd408b4792c5b7f 100644
--- a/service/lists.md
+++ b/service/lists.md
@@ -118,7 +118,7 @@ In additional to our [public email lists](https://www.torproject.org/docs/docume
 of communication channels reserved for core contributors. This is not
 a secret inner cabal, but rather community members (both paid and
 unpaid) who have been long-time contributors with the project. (See
-our [Core Contributor Guidelines](https://gitweb.torproject.org/community/policies.git/tree/membership.txt).)
+our [Core Contributor Guidelines](https://gitlab.torproject.org/tpo/community/policies/-/blob/HEAD/docs/membership.md).)
 
 Why do we have these internal discussions? Funding proposals, trip
 reports, and other things sometimes include details that shouldn't be
@@ -132,7 +132,7 @@ and might change if we find something better.
 
 Internal communication channels are open only to core
 contributors. For information on becoming a core contributor, see the
-[Core Contributor Guidelines](https://gitweb.torproject.org/community/policies.git/tree/membership.txt).
+[Core Contributor Guidelines](https://gitlab.torproject.org/tpo/community/policies/-/blob/HEAD/docs/membership.md).
 
 # Reference
 
diff --git a/service/password-manager.md b/service/password-manager.md
index 8b3371ca2e760092ca0c9f0539e3b03f1b21b4c8..b9f44dffef5c27dc82833715d79fb185c9eac9eb 100644
--- a/service/password-manager.md
+++ b/service/password-manager.md
@@ -345,7 +345,7 @@ repository, and configure your environment.
 First, you need to get access to the password manager which is
 currently hosted on the legacy Git repository:
 
-    git clone git@git-rw.torproject.org:admin/tor-passwords.git ~/.password-store
+    git clone git@puppet.torproject.org:/srv/puppet.torproject.org/git/tor-passwords.git ~/.password-store
 
 If you do not have access, it's because your onboarding didn't happen
 correctly, or that this guide is not for you.
@@ -355,7 +355,7 @@ default password-store path, in `~/.password-store`. If you are
 *already* using `pass`, there's likely already things there, so you
 will probably want to clone it in a subdirectory, like this:
 
-    git clone git@git-rw.torproject.org:admin/tor-passwords.git ~/.password-store/tor
+    git clone git@puppet.torproject.org:/srv/puppet.torproject.org/git/tor-passwords.git ~/.password-store/tor
 
 You can also clone the password store elsewhere and use a symbolic
 link to `~/.password-store` to reference it.
diff --git a/service/status.md b/service/status.md
index c999aca51ff5d7cc0d4fd1b8a7678b3f1bac5a95..6a77fe32d737bc8c6350a9aacdf39d5700393b00 100644
--- a/service/status.md
+++ b/service/status.md
@@ -549,10 +549,10 @@ This involved:
 
  * a new [static component](howto/static-component) owned by `torwww` (in the
    `tor-puppet.git` repository)
- * a new [build script](https://gitweb.torproject.org/project/jenkins/tools.git/tree/slaves/linux/hugo-website-status?id=7fff67041e41206fef7d128ac60488db375652a1) in the [jenkins/tools.git](https://gitweb.torproject.org/project/jenkins/tools.git/) repository
- * a new [build job](https://gitweb.torproject.org/project/jenkins/jobs.git/commit/?id=170fd9879ff0da65670aaa36c20e63c0db1ed039) in the [jenkins/jobs.git](https://gitweb.torproject.org/project/jenkins/jobs.git/) repository
- * a [new entry](https://gitweb.torproject.org/admin/static-builds.git/commit/?id=b2344aa1d68f4f065764c6f23d14494020b81f86) in the [ssh wrapper](https://gitweb.torproject.org/admin/static-builds.git/tree/ssh-wrap?id=b2344aa1d68f4f065764c6f23d14494020b81f86) in the
-   [admin/static-builds.git](https://gitweb.torproject.org/admin/static-builds.git/) repository
+ * a new [build script](https://gitlab.torproject.org/tpo/tpa/jenkins-tools/-/blob/e1a8a98b6e73bf10d2c2d89975014a334f388c21/slaves/linux/hugo-website-status) in the [jenkins/tools.git](https://gitlab.torproject.org/tpo/tpa/jenkins-tools/) repository
+ * a new [build job](https://gitlab.torproject.org/tpo/tpa/jenkins-jobs/-/commit/170fd9879ff0da65670aaa36c20e63c0db1ed039) in the [jenkins/jobs.git](https://gitlab.torproject.org/tpo/tpa/jenkins-jobs/) repository
+ * a [new entry](https://gitlab.torproject.org/tpo/tpa/static-builds/-/commit/b2344aa1d68f4f065764c6f23d14494020b81f86) in the [ssh wrapper](https://gitlab.torproject.org/tpo/tpa/static-builds/-/blob/b2344aa1d68f4f065764c6f23d14494020b81f86/ssh-wrap) in the
+   [admin/static-builds.git](https://gitlab.torproject.org/tpo/tpa/static-builds/) repository
  * a new [gitolite](howto/git) repository with hooks to ping the Jenkins server and
    mirror to GitLab
 
diff --git a/service/styleguide.md b/service/styleguide.md
index 6fb387b658c43ca0ca6f59c3226332b25ae368d3..99ce00fdd4983fc96e3db41788ff5545cffe032d 100644
--- a/service/styleguide.md
+++ b/service/styleguide.md
@@ -4,6 +4,6 @@
 
 The Tor Styleguide is based on Bootstrap, an open-source toolkit for developing with HTML, CSS, and JS. To use the Tor styleguide, you can download our css style and import it in your project. Please refer to the Styleguide [getting started](https://styleguide.torproject.org/getting-started/) page for more information.
 
-Tor Styleguide is based on [Lektor](https://www.getlektor.com/). You can also check [Styleguide repository](https://gitweb.torproject.org/project/web/styleguide.git/).
+Tor Styleguide is based on [Lektor](https://www.getlektor.com/). You can also check [Styleguide repository](https://gitlab.torproject.org/tpo/web/styleguide/).
 
-The Styleguide is hosted at several computers for redundancy, and these computers are together called "the www rotation". Please check the [static sites](https://help.torproject.org/tsa/doc/static-sites/) help page for more info.
+The Styleguide is hosted at several computers for redundancy, and these computers are together called "the www rotation". Please check the [static sites](doc/static-sites/) help page for more info.