あまり手をつけていないが、少しずつやっている
母艦PCとのファイル同期に、開発中はsftpとかで良いんだろうが
例えば、何か作った後に、データを更新させたいといった時
sshはなんか心理的にやだった(何が
フォトフレームとした場合も、写真の更新取得先はdropboxやnextcloudなどクラウドストレージかもしれないし。何かしら同期させる手段が欲しい。
でも個別にサービスに対応させるのはしんどい。
davfs2を最初考えたけど、うまいことマウント出来ずに挫折した。
webdav以外にもつながりたいかもしれないし。
そんなことを悩んでいたら、rcloneというソフトに出会った。
rcloneはすごそう
- Rclone syncs your files to cloud storage
すごいたくさん対応してるー!
https://rclone.org/#providers
Dropboxもあるし、Google Photos、Nextcloud、webdavなんかもある!
これを導入できれば、スッキリできるかもしれない。
お試し導入してみる
まずはどんなものかを味わうために、ビルド済みのやつを持ってきてみる。
https://rclone.org/downloads/
の[ARMv6 - 32 Bit][linux]というやつ
rclone-v1.54.0-linux-arm.zip
これを展開して、LicheePiに転送。
# ./rclone version
rclone v1.54.0
- os/arch: linux/arm
- go version: go1.15.7
さすが golang すんなり起動するのがすごいね。
対向サーバーは?
さてさて、対向となるサーバーはどうしようかと、あまり手間かけたくないし。
簡易的なwebサーバーで良いんだけど。
なんとなくwebdav使ってみたくて、あれこれ探していたら、wsgidavというソフトに出会った。
https://wsgidav.readthedocs.io/en/latest/index.html
https://qiita.com/Brad-55/items/5b596b76ef7dc1be9a39
インストールはとっても簡単
pip install --upgrade wsgidav
これでOK!
起動もとても簡単!
wsgidav --host=0.0.0.0 --port=8888 --root=/home/adeno/develop/wsgidav --auth=anonymous
これで、とりあえず、認証なしのwebdavサービスが出来上がる。すてき。
さて、やってみよう
これもとても簡単
https://rclone.org/webdav/
に従いやっていくだけ
# ./rclone ls chihiro:
1970/01/02 08:10:10 NOTICE: Time may be set wrong - time from "192.168.100.10:8888" is -448164h47m5.409855313s different from this computer
476690 Screenshot from 2020-04-17 15-46-39.png
540108 Screenshot from 2020-04-17 15-48-22.png
272475 chihiro001.jpg
376802 chihiro002.jpg
441756 chihiro003.jpg
297234 chihiro004.jpg
160027 chihiro005.jpg
224296 chihiro006.jpg
276833 chihiro007.jpg
296495 chihiro008.jpg
おっと、日時設定してなかった。
日時設定
とりあえず手動で
# date --set "2021-02-17 6:00:00"
Wed Feb 17 06:00:00 UTC 2021
あれ、UTCだ。
BR2_TARGET_TZ_INFO=y
BR2_TARGET_TZ_ZONELIST="default"
BR2_TARGET_LOCALTIME="Asia/Tokyo"
これで、再度ビルドして
# date --set "2021-02-20 19:38:00"
Sat Feb 20 19:38:00 JST 2021
これでOK
NTP導入
手動でうまく行くことがわかったので、今度は自動で調時させたい。
クライアント側
chronyというのを使ってみる。
BR2_PACKAGE_CHRONY=y
サーバー側
特に何も考えずに、以下を参考に
https://tecadmin.net/setup-time-synchronisation-ntp-server-on-ubuntu-linuxmint/
$ sudo apt install ntp
/etc/ntp.confに追記
restrict 192.168.100.0 mask 255.255.255.0 nomodify notrap
あとはリロード
sudo service ntp reload
ファイアウォールも忘れてはいけない
123/tcpを許可する
実行
# cat /etc/chrony.conf
server 192.168.100.10
leapsecmode slew
makestep 1.0 3
# /etc/init.d/S49chrony restart
# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^? 192.168.100.10 3 6 1 30 -18678d[-18678d] +/- 134ms
# chronyc makestep
200 OK
<3分くらい後に>
# date
Mon Feb 22 06:18:51 JST 2021
makestep 1.0 3
により、サービス起動時に1.0秒以上のズレがあった場合には即時調時されるっぽい。
buildrootと連携(rcloneパッケージの作成)
今後も見据えてmenuconfigから選択できるようにしたい。
このあたりを参考に
https://buildroot.org/downloads/manual/manual.html#outside-br-custom
https://buildroot.org/downloads/manual/manual.html#adding-packages
パッケージの追加
構成を考える
br2-externalにて指定している外部ツリー
ex_licheepizerodock
の下にpackageディレクトリを作成してもろもろ置いていく。
今回は思考停止して「rclone」とした。
tabが重要なので、エディタのtab→スペース変換はoffにしないとハマる。
ex_licheepizerodock$ tree
.
├── Config.in
<>
├── external.desc
├── external.mk
├── package
│ └── rclone
│ ├── Config.in
│ └── rclone.mk
Config.inとexternal.mkの変更
Config.inの変更
source "$BR2_EXTERNAL_LICHEEPI_ZERO_DOCK_EX_PATH/package/rclone/Config.in"
external.mkの変更
include $(sort $(wildcard $(BR2_EXTERNAL_LICHEEPI_ZERO_DOCK_EX_PATH)/package/*/*.mk))
package内のConfig.inと.mkの作成
Config.inの作成
config BR2_PACKAGE_RCLONE
bool "rclone sync"
help
Rclone syncs your files to cloud storage
rclone.mkの作成
超絶シンプル。zip展開して、バイナリをコピーするだけ。
################################################################################
#
# Rclone syncs.
#
################################################################################
RCLONE_SOURCE = rclone-current-linux-arm.zip
RCLONE_SITE = https://downloads.rclone.org
RCLONE_LICENSE = MIT
RCLONE_SOURCE_BASENAME = rclone
RCLONE_BIN_NAME = rclone
define RCLONE_EXTRACT_CMDS
unzip -j $(DL_DIR)/$(RCLONE_SOURCE_BASENAME)/$(RCLONE_SOURCE) -d $(@D)
endef
define RCLONE_INSTALL_TARGET_CMDS
@echo BR2_PACKAGE_RCLONE_INSTALL_TARGET_CMDS
$(INSTALL) -D -m 0755 $(@D)/$(RCLONE_BIN_NAME) $(TARGET_DIR)/usr/bin
endef
$(eval $(generic-package))
これでOK!