在树莓派中使用SYNCTHING

在树莓派中使用SYNCTHING

为什么会有这篇文章

之前使用同步产品的路线owncloud->nextcloud现在准备换成syncthing,当然各有各的好处nextcloud做为owncloud的升级产品在扩展方面做得更好,但是这两个同步软件都有一个共同的问题:当文件过多的时候(40GB左右的代码,尤其是node_modules,vendor这类文件过多的情况下)同步起来就非常的慢了。和btsync相比我为啥选择syncthing?别问为啥,就是因为开源。

raybet雷竞技网页版入口和下载

源码

wget https://github.com/syncthing/syncthing/releases/tag/v0.14.36
tar -zxvf syncthing-linux-arm-v0.14.36.tar.gz ~

然后执行

~/syncthing-linux-arm-v0.14.36/syncthing

然后可以看到一堆输出信息,例如监听的端口,NAT信息等

可以使用CTRL+C来停止运行

编辑配置文件

编辑默认配置文件

vim ~/.config/syncthing/config.xml
<gui enabled="true" tls="true" debugging="false">
        <address>127.0.0.1:8384</address>
        <user>root</user>
        <password>$2a$10$07NavS/KNzAxDKrjFguh.uRkAKvtT27tHL.7JYLPrfnthOQgYIjKm</password>
        <apikey>ZWMsAMUHSJLMxLn9dM6WneZApSmPLnJF</apikey>
        <theme>default</theme>
</gui>

默认监听地址是127.0.0.1如果想要外网访问只需要修改为0.0.0.0,如果要使用https链接可以把tls改为true

如果外网访问,可以通过_http://your_ip_address:8384__来访问了,不过记得在防火墙做一个_tcp 8384__的端口转发,否则是打不开GUI界面的。

在第一次运行时最好设置下访问的用户名和密码。为了安全靠考虑,毕竟有些内容是比较隐私的。

修改后

<gui enabled="true" tls="true" debugging="false">
        <address>0.0.0.0:8384</address>
        <user>root</user>
        <password>$2a$10$07NavS/KNzAxDKrjFguh.uRkAKvtT27tHL.7JYLPrfnthOQgYIjKm</password>
        <apikey>ZWMsAMUHSJLMxLn9dM6WneZApSmPLnJF</apikey>
        <theme>default</theme>
</gui>

设置syncthing自动启动

/etc/init.d目录下面建立启动文件

sudo vim /etc/init.d/syncthing

脚本内容如下:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          Syncthing
# Required-Start:    $local_fs $remote_fs $network
# Required-Stop:     $local_fs $remote_fs $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Syncthing
# Description:       Syncthing is for backups
### END INIT INFO

# Documentation available at
# http://refspecs.linuxfoundation.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/iniscrptfunc.html
# Debian provides some extra functions though
. /lib/lsb/init-functions

DAEMON_NAME="syncthing"
DAEMON_USER=pi
DAEMON_PATH="/home/pi/syncthing-linux-arm-v0.14.36/syncthing"
DAEMON_OPTS=""
DAEMON_PWD="${PWD}"
DAEMON_DESC=$(get_lsb_header_val $0 "Short-Description")
DAEMON_PID="/var/run/${DAEMON_NAME}.pid"
DAEMON_NICE=0
DAEMON_LOG='/var/log/syncthing'

[ -r "/etc/default/${DAEMON_NAME}" ] && . "/etc/default/${DAEMON_NAME}"

do_start() {
  local result

    pidofproc -p "${DAEMON_PID}" "${DAEMON_PATH}" > /dev/null
    if [ $? -eq 0 ]; then
        log_warning_msg "${DAEMON_NAME} is already started"
        result=0
    else
        log_daemon_msg "Starting ${DAEMON_DESC}" "${DAEMON_NAME}"
        touch "${DAEMON_LOG}"
        chown $DAEMON_USER "${DAEMON_LOG}"
        chmod u+rw "${DAEMON_LOG}"
        if [ -z "${DAEMON_USER}" ]; then
            start-stop-daemon --start --quiet --oknodo --background \
                --nicelevel $DAEMON_NICE \
                --chdir "${DAEMON_PWD}" \
                --pidfile "${DAEMON_PID}" --make-pidfile \
                --exec "${DAEMON_PATH}" -- $DAEMON_OPTS
            result=$?
        else
            start-stop-daemon --start --quiet --oknodo --background \
                --nicelevel $DAEMON_NICE \
                --chdir "${DAEMON_PWD}" \
                --pidfile "${DAEMON_PID}" --make-pidfile \
                --chuid "${DAEMON_USER}" \
                --exec "${DAEMON_PATH}" -- $DAEMON_OPTS
            result=$?
        fi
        log_end_msg $result
    fi
    return $result
}

do_stop() {
    local result

    pidofproc -p "${DAEMON_PID}" "${DAEMON_PATH}" > /dev/null
    if [ $? -ne 0 ]; then
        log_warning_msg "${DAEMON_NAME} is not started"
        result=0
    else
        log_daemon_msg "Stopping ${DAEMON_DESC}" "${DAEMON_NAME}"
        killproc -p "${DAEMON_PID}" "${DAEMON_PATH}"
        result=$?
        log_end_msg $result
        rm "${DAEMON_PID}"
    fi
    return $result
}

do_restart() {
    local result
    do_stop
    result=$?
    if [ $result = 0 ]; then
        do_start
        result=$?
    fi
    return $result
}

do_status() {
    local result
    status_of_proc -p "${DAEMON_PID}" "${DAEMON_PATH}" "${DAEMON_NAME}"
    result=$?
    return $result
}

do_usage() {
    echo $"Usage: $0 {start | stop | restart | status}"
    exit 1
}

case "$1" in
start)   do_start;   exit $? ;;
stop)    do_stop;    exit $? ;;
restart) do_restart; exit $? ;;
status)  do_status;  exit $? ;;
*)       do_usage;   exit  1 ;;
esac

然后就是设置执行权限以及添加默认启动

sudo chmod +x /etc/init.d/syncthing #加可执行权限
sudo update-rc.d syncthing defaults #添加默认启动

图形界面也是可以关闭syncthing的,也可以通过脚本关闭

sudo update-rc.d syncthing remove

一共4句命令

sudo service syncthing start
sudo service syncthing stop
sudo service syncthing restart
sudo service syncthing status