树莓派搭建私人同步盘

同步盘,就是把不同设备的某些文件夹同步起来,随时都是最新的版本。

大家最熟悉的应该就是百度云同步盘了。可是如果你不想将敏感文件上传网络,或者想同步被百度云干掉的文件,又或者想和朋友一起共享一个文件夹,那么就用树莓派来搭建一个私人同步盘吧~~~

我们用到的软件是开源的syncthing,官网连接:

https://syncthing.net/

syncthing可以理解为一个后台的服务,实时监测文件夹内容变化,和各个设备保持同步。syncthing有强大的分享功能,可以将文件夹分享给任何syncthing的用户,并且可以设置仅发送或者发送接收的权限。syncthing还自带了好几种版本管理功能,最简单的回收站式管理,允许内容远程被删除以后,在自定义时间内保存一个副本以供恢复。

因为是私有的,并不会将内容上传到网络,但是也带了问题,最起码要有两台设备同时在线,同步才能实现。这时候,功耗极低的树莓派zero,就非常适合做一个服务器24小时接受同步了。搭配Pisugar电池套件,即使断电也能运行6小时,保证服务器一直可用。

树莓派安装syncthing

方法一

使用Pisugar全自动安装脚本,两行代码搞定常用应用安装,懒得不要不要的~~~

git clone https://github.com/PiSugar/sugar-startup.git
sudo -s . ./sugar-startup/start.sh

安装时间视网速而定,大概50分钟全部安装完毕,需要耐心等待。

脚本不仅包含了syncthing,还包含了很多常用的软件和设置,例如更改软件源,screen,输入法,aria2,远程桌面等,喜欢的话可以在github点小星星哟~~

方法二

官网下载,自行添加开机自启动

首先使用wget将压缩包取回来,树莓派所需的版本是linux针对ARM的发行,目前最新的版本是1.0.1。

下载以后将压缩包解压

#下载压缩包
wget https://github.com/syncthing/syncthing/releases/download/v1.0.1/syncthing-linux-arm-v1.0.1.tar.gz
#解压
tar -zxvf syncthing-linux-arm-v1.0.1.tar.gz

为了方便后续的升级和添加自启动,更改文件夹名称

#更改目录名称
mv syncthing-linux-arm-v1.0.1 syncthing

进入目录,给syncthing增加执行权限,其实这时候syncthing就已经可以使用了。

#进入目录
cd syncthing
#增加执行权限
sudo chmod +x syncthing

运行一次

~/syncthing/syncthing

如果是桌面版,就会自动打开浏览器,进入设置页面了。如果不是的话,就需要网络访问,这里需要改一下配置。ctrl+c结束进程以后,先打开配置文件:

sudo nano /home/pi/.config/syncthing/config.xml

找到:

<gui enabled="true" tls="false">
<address>127.0.0.1:8384</address>
<apikey>XXXXXX</apikey>
</gui>

将127.0.0.1:8384更改为0.0.0.0:8384

然后ctrl+x保存退出。

再次运行syncthing,不要中断程序,电脑访问 http://树莓派的IP:8384,就能看到syncthingwebUI了,大概这个样子:

syncthing的具体使用,大家就自行摸索了。接下来,为syncthing添加树莓派开机自启动

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

偷懒的话,也可以去我们的githubsyncthing这个文件放到/etc/init.d 目录下。

以下是自建文件的方式和内容:

sudo nano /etc/init.d/syncthing

内容写入(直接复制过去,tips:linux的粘贴是shift+ins):

#!/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/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

ctrl+x保存退出。

无论是自建还是下载我们的问题件,都需要增加一个可执行的权限。然后添加到开机自启动:

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

到这里,树莓派上的syncthing就已经全部设置完成了。

windows安装syncthing

windows下使用syncthing非常简单,直接下载SyncTrayzor,安装后就可以使用了就可以使用了。

下载地址:https://github.com/canton7/SyncTrayzor/releases/tag/v1.1.22

打开后就是熟悉的界面,将树莓派上的ID,添加到windows端的设备中,就可以共享文件夹了。

一些问题

自行安装的小伙伴可能有一些问题

1.为什么没法运行syncthing

可能是忘记了给他运行权限,和windows操作习惯不同,一定要增加了运行权限才能运行。

2.为什么没能自启动

需要检查是否没有将syncthing的默认文件夹改名。因为后续的启动脚本中使用了绝对路径,如果没有改名,那么就无法找到正确的文件,自然就无法自动启动了。

当然也要看一下,是不是忘了给启动脚本执行的权限

还有什么其他问题欢迎留言,也请大家多多支持我们的Piusugar项目~~~