diff --git a/.dockerignore b/.dockerignore
index 617f701597..434231fce9 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -7,6 +7,5 @@
!MANIFEST.in
!README.rst
!setup.py
-!synctl
**/__pycache__
diff --git a/MANIFEST.in b/MANIFEST.in
index f1e295e583..d744c090ac 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,4 +1,3 @@
-include synctl
include LICENSE
include VERSION
include *.rst
diff --git a/changelog.d/12140.misc b/changelog.d/12140.misc
new file mode 100644
index 0000000000..33a21a29f0
--- /dev/null
+++ b/changelog.d/12140.misc
@@ -0,0 +1 @@
+Move `synctl` into `synapse._scripts` and expose as an entry point.
\ No newline at end of file
diff --git a/docker/Dockerfile b/docker/Dockerfile
index 327275a9ca..24b5515eb9 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -46,7 +46,7 @@ RUN \
&& rm -rf /var/lib/apt/lists/*
# Copy just what we need to pip install
-COPY MANIFEST.in README.rst setup.py synctl /synapse/
+COPY MANIFEST.in README.rst setup.py /synapse/
COPY synapse/__init__.py /synapse/synapse/__init__.py
COPY synapse/python_dependencies.py /synapse/synapse/python_dependencies.py
diff --git a/docs/postgres.md b/docs/postgres.md
index 0562021da5..de4e2ba4b7 100644
--- a/docs/postgres.md
+++ b/docs/postgres.md
@@ -153,9 +153,9 @@ database file (typically `homeserver.db`) to another location. Once the
copy is complete, restart synapse. For instance:
```sh
-./synctl stop
+synctl stop
cp homeserver.db homeserver.db.snapshot
-./synctl start
+synctl start
```
Copy the old config file into a new config file:
@@ -192,10 +192,10 @@ Once that has completed, change the synapse config to point at the
PostgreSQL database configuration file `homeserver-postgres.yaml`:
```sh
-./synctl stop
+synctl stop
mv homeserver.yaml homeserver-old-sqlite.yaml
mv homeserver-postgres.yaml homeserver.yaml
-./synctl start
+synctl start
```
Synapse should now be running against PostgreSQL.
diff --git a/docs/turn-howto.md b/docs/turn-howto.md
index eba7ca6124..3a2cd04e36 100644
--- a/docs/turn-howto.md
+++ b/docs/turn-howto.md
@@ -238,8 +238,9 @@ After updating the homeserver configuration, you must restart synapse:
* If you use synctl:
```sh
- cd /where/you/run/synapse
- ./synctl restart
+ # Depending on how Synapse is installed, synctl may already be on
+ # your PATH. If not, you may need to activate a virtual environment.
+ synctl restart
```
* If you use systemd:
```sh
diff --git a/docs/upgrade.md b/docs/upgrade.md
index f9be3ac6bc..0d0bb066ee 100644
--- a/docs/upgrade.md
+++ b/docs/upgrade.md
@@ -47,7 +47,7 @@ this document.
3. Restart Synapse:
```bash
- ./synctl restart
+ synctl restart
```
To check whether your update was successful, you can check the running
@@ -85,6 +85,27 @@ process, for example:
dpkg -i matrix-synapse-py3_1.3.0+stretch1_amd64.deb
```
+# Upgrading to v1.55.0
+
+## `synctl` script has been moved
+
+The `synctl` script
+[has been made](https://github.com/matrix-org/synapse/pull/12140) an
+[entry point](https://packaging.python.org/en/latest/specifications/entry-points/)
+and no longer exists at the root of Synapse's source tree. If you wish to use
+`synctl` to manage your homeserver, you should invoke `synctl` directly, e.g.
+`synctl start` instead of `./synctl start` or `/path/to/synctl start`.
+
+You will need to ensure `synctl` is on your `PATH`.
+ - This is automatically the case when using
+ [Debian packages](https://packages.matrix.org/debian/) or
+ [docker images](https://hub.docker.com/r/matrixdotorg/synapse)
+ provided by Matrix.org.
+ - When installing from a wheel, sdist, or PyPI, a `synctl` executable is added
+ to your Python installation's `bin`. This should be on your `PATH`
+ automatically, though you might need to activate a virtual environment
+ depending on how you installed Synapse.
+
# Upgrading to v1.54.0
## Legacy structured logging configuration removal
diff --git a/scripts-dev/lint.sh b/scripts-dev/lint.sh
index 2f5f2c3566..c063fafa97 100755
--- a/scripts-dev/lint.sh
+++ b/scripts-dev/lint.sh
@@ -85,7 +85,7 @@ else
"synapse" "docker" "tests"
# annoyingly, black doesn't find these so we have to list them
"scripts-dev"
- "contrib" "synctl" "setup.py" "synmark" "stubs" ".ci"
+ "contrib" "setup.py" "synmark" "stubs" ".ci"
)
fi
fi
diff --git a/setup.py b/setup.py
index 318df16766..439ed75d72 100755
--- a/setup.py
+++ b/setup.py
@@ -155,6 +155,7 @@ setup(
# Application
"synapse_homeserver = synapse.app.homeserver:main",
"synapse_worker = synapse.app.generic_worker:main",
+ "synctl = synapse._scripts.synctl:main",
# Scripts
"export_signing_key = synapse._scripts.export_signing_key:main",
"generate_config = synapse._scripts.generate_config:main",
@@ -177,6 +178,5 @@ setup(
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
],
- scripts=["synctl"],
cmdclass={"test": TestCommand},
)
diff --git a/synctl b/synapse/_scripts/synctl.py
index 1ab36949c7..1ab36949c7 100755
--- a/synctl
+++ b/synapse/_scripts/synctl.py
diff --git a/tox.ini b/tox.ini
index 04d282a705..f1f96b27ea 100644
--- a/tox.ini
+++ b/tox.ini
@@ -42,7 +42,6 @@ lint_targets =
scripts-dev
stubs
contrib
- synctl
synmark
.ci
docker
|