Merge pull request #1025 from asdil12/syncthing

new pkg: [community]/syncthing
This commit is contained in:
Kevin Mihelich 2014-11-30 11:42:42 -07:00
commit 8cf4b8c23b
5 changed files with 197 additions and 0 deletions

View file

@ -0,0 +1,67 @@
# $Id:
# Maintainer : Martin Wimpress <code@flexion.org>
# Contributor: Sauyon Lee <sauyonl@sauyon.com>
# Contributor: Kevin MacMartin <prurigro@gmail.com>
# Contributor: korjjj <korjjj+aur@gmail.com>
# ALARM: Dominik Heidler <dominik@heidler.eu>
# - set the GOARM env var
# - set the goarch parameter
# - skip the testsuite (due to timeouts)
# - use the latest version (0.10.9) as we're at it
pkgname=syncthing
pkgver=0.10.9
pkgrel=1
pkgdesc="Open Source Continuous Replication / Cluster Synchronization Thing"
url="http://syncthing.net/"
license=('GPL3')
arch=('i686' 'x86_64')
depends=('glibc')
makedepends=('git' 'go' 'godep' 'inetutils' 'sed')
source=("$pkgname-$pkgver::git+https://github.com/syncthing/syncthing.git#tag=v${pkgver}"
"syncthing@.service"
"syncthing.service"
"syncthing.1")
sha1sums=('SKIP'
'204cad3823306c793a14a17a23220e26199160d4'
'2d3870eff21ad0724a48ba93e87064686693e3b9'
'17be8b3f99c577e325765abc251f597e204d7711')
install=${pkgname}.install
prepare() {
cd "${srcdir}"
mkdir -p "src/github.com/syncthing"
mv "${pkgname}-${pkgver}" "src/github.com/syncthing/${pkgname}"
}
build() {
export GOPATH="${srcdir}"
[ "$CARCH" == 'arm' ] && export GOARM=5
[ "$CARCH" == 'armv6h' ] && export GOARM=6
[ "$CARCH" == 'armv7h' ] && export GOARM=7
cd "${srcdir}/src/github.com/syncthing/${pkgname}"
# the env var is not enough - we need to specify the -goarch param
# until https://github.com/syncthing/syncthing/pull/1048 is merged
go run build.go -no-upgrade -goarch armv${GOARM} build
}
check() {
export GOPATH="${srcdir}"
[ "$CARCH" == 'arm' ] && export GOARM=5
[ "$CARCH" == 'armv6h' ] && export GOARM=6
[ "$CARCH" == 'armv7h' ] && export GOARM=7
cd "${srcdir}/src/github.com/syncthing/${pkgname}"
# each test has a time limit of 10sec - that is exceeded on arm (pandaboard = 20sec)
# see https://github.com/syncthing/syncthing/issues/1049
#go run build.go -no-upgrade -goarch armv${GOARM} test
}
package() {
cd "${srcdir}/src/github.com/syncthing/${pkgname}"
install -D -m 755 ${pkgname} "${pkgdir}/usr/bin/${pkgname}"
install -D -m 644 README.md "${pkgdir}/usr/share/doc/${pkgname}/README.md"
install -D -m 644 "${srcdir}/${pkgname}@.service" "${pkgdir}/usr/lib/systemd/system/${pkgname}@.service"
install -D -m 644 "${srcdir}/${pkgname}.service" "${pkgdir}/usr/lib/systemd/user/${pkgname}.service"
install -D -m 644 "${srcdir}/${pkgname}.1" "${pkgdir}/usr/share/man/man1/${pkgname}.1"
}

View file

@ -0,0 +1,94 @@
.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "SYNCTHING" "" "May 2014" "" "syncthing"
.
.SH "Project Goals"
This is the \fBsyncthing\fR project\. The following are the project goals:
.
.IP "1." 4
Define a protocol for synchronization of a file repository between a number of collaborating nodes\. The protocol should be well defined, unambiguous, easily understood, free to use, efficient, secure and language neutral\. This is the Block Exchange Protocol \fIhttps://github\.com/calmh/syncthing/blob/master/protocol/PROTOCOL\.md\fR\.
.
.IP "2." 4
Provide the reference implementation to demonstrate the usability of said protocol\. This is the \fBsyncthing\fR utility\. It is the hope that alternative, compatible implementations of the protocol will come to exist\.
.
.IP "" 0
.
.P
The two are evolving together; the protocol is not to be considered stable until syncthing 1\.0 is released, at which point it is locked down for incompatible changes\.
.
.P
Syncthing does not use the BitTorrent protocol\. The reasons for this are 1) we don\'t know if BitTorrent Sync does either, so there\'s nothing to be compatible with, 2) BitTorrent includes a lot of functionality for making sure large swarms of selfish agents behave and somehow work towards a common goal\. Here we have a much smaller swarm of cooperative agents and a simpler approach will suffice\.
.
.SH "Systemd"
The systemd services for Syncthing and its discovery server can be used to start, stop, restart and enable them to run at boot\.
.
.SS "Syncthing"
Syncthing is the main sync client and can be controlled using systemd using the commands below\. Since Syncthing is run for a particular user, replace \'username\' in the commands below with the name of the user you want it to run it under\.
.
.IP "" 4
.
.nf
Start Syncthing: systemctl start syncthing@username
Stop Syncthing: systemctl stop syncthing@username
Restart Syncthing: systemctl restart syncthing@username
Enable Syncthing at Boot: systemctl enable syncthing@username
Disable Syncthing at Boot: systemctl disable syncthing@username
.
.fi
.
.IP "" 0
.
.SS "Discovery Server"
The discovery server is an optional service that can be run and connected to by Syncthing in place of the default\. To have clients connect to a custom discovery server, you\'ll want to start the service on your server, then open "\fI~/\.syncthing/config\.xml\fR" and replace "\fIannounce\.syncthing\.net\fR" with your custom discovery server\'s address\.
.
.IP "" 4
.
.nf
Start Discovery Server Service: systemctl start syncthing\-discosrv
Stop Discovery Server Service: systemctl stop syncthing\-discosrv
Restart Discovery Server Service: systemctl restart syncthing\-discosrv
Enable Discovery Server at Boot: systemctl enable syncthing\-discosrv
Disable Discovery Server at Boot: systemctl disable syncthing\-discosrv
.
.fi
.
.IP "" 0
.
.SH "Configuring"
The config folder is automatically generated when syncthing is run for the first time, and can be found (by default) @ \'~/\.syncthing\'\.
.
.P
The admin GUI starts automatically when the service is running, and remains available (by default) @ \fIhttp://localhost:8080\fR\.
.
.P
On the left is the list of "repositories", or directories to synchronize\. On the right is the list of nodes\. Currently there is only one node, the local node\. The first thing you need to do is tell each node about the other node so they can talk to each other\. Click the "Add Node" button on each node\. You\'ll get the "Add Node" dialog, where you need to input the node ID of the other node and give it a short name\. If you have both nodes GUI available on the same machine (say via remote desktop or a port forward) you can simply cut and paste the node ID from the bottom of one dialog to the other\. Otherwise it is probably easiest to send the ID:s in a mail to yourself or something similar\.
.
.P
The node IDs are quite long and unwieldy, but this is part of the security of the system\. They uniquely identify node\'s key so that each node can be assured of who it\'s talking to\. The node ID is not a password and does not need to be kept secret\.
.
.P
Once you click "Save" the new node will appear on right side of the GUI and a prompt will be shown to indicate the need for a restart\.
.
.P
Syncthing needs to be restarted for configuration changes like new nodes and repositories to take effect\. We shouldn\'t restart just yet though, because we also need to share the repository with the new node\. Click "Edit" on the repository to the left, and check the checkbox for the other node before saving and restarting\.
.
.P
When you click restart syncthing will first restart, then come back up and after a while (up to a minute) connect to the other node\.
.
.P
At this point the two nodes share an empty directory\. Adding files to the Sync directory on either node will synchronize those files to the other side\. Each node scans for changes every sixty seconds, so changes can take a bit over a minute to propagate to the other side\.
.
.P
An up to date version of this documentation that includes images can be found @ \fIhttp://discourse\.syncthing\.net/t/getting\-started/46\fR\.
.
.SH "Online Documentation"
Additional documentation can be found online @ discourse site \fIhttp://discourse\.syncthing\.net/category/documentation\fR\.
.
.SH "License"
All documentation and protocol specifications are licensed under the Creative Commons Attribution 4\.0 International License \fIhttp://creativecommons\.org/licenses/by/4\.0/\fR\.
.
.P
All code is licensed under the MIT License \fIhttps://github\.com/calmh/syncthing/blob/master/LICENSE\fR\.

View file

@ -0,0 +1,13 @@
post_install() {
cat << EOF
To start and/or enable syncthing execute the following,
replacing 'user' with your username.
systemctl start syncthing@user
systemctl enable syncthing@user
EOF
}
post_upgrade() {
post_install
}

View file

@ -0,0 +1,11 @@
[Unit]
Description=Syncthing service for %u
After=network.target
[Service]
Environment=STNORESTART=yes
ExecStart=/usr/bin/syncthing
Restart=on-success
[Install]
WantedBy=default.target

View file

@ -0,0 +1,12 @@
[Unit]
Description=Syncthing service for %i
After=network.target
[Service]
User=%i
Environment=STNORESTART=yes
ExecStart=/usr/bin/syncthing
Restart=always
[Install]
WantedBy=multi-user.target