ラベル webdav の投稿を表示しています。 すべての投稿を表示
ラベル webdav の投稿を表示しています。 すべての投稿を表示

2022年12月30日金曜日

メディアサーバー構築2

メディアサーバー構築2

書こう書こうと思っていたら、9ヶ月近く経過していた。
時間が経つのはおそろしい。

メディアサーバーとして、ミニPCを入手した。もろもろ準備を行う。

wifi有効化

システム > ドライバーマネージャー


インストール

  • kodi
  • nextcloud clinet
  • ssh server

nextcloud クライアント

kodiのソース設定でwebdavを選ぶことが出来たが、webdavはちょっと遅かったので、nextcloud clientで同期した。
nextcloudのクライアントアプリで、同期するフォルダやファイルサイズの制限ができる。

これで、勝手に同期してくれる。

kodi

kodi自動起動

[設定マネージャー]→[セッションと起動]→kodiとnextcloudを指定する

ソース設定

nextcloudのディレクトリを指定する

ssh server

ホスト名でアクセスしたい

mDNSでホスト名でアクセスしたい。
avahiを使用しない方法があるのか
https://wiki.archlinux.jp/index.php/Systemd-resolved#mDNS
https://qiita.com/slug/items/4c7121af229b9a6c92c4
https://0e39bf7b.blog/posts/mdns-on-ubuntu-server/

が、ホスト名.localでアクセスすることが出来なかった。

仕方がないので、avahiをインストール
https://wiki.archlinux.jp/index.php/Avahi

sudo apt-get install avahi-daemon libnss-mdns
adeno@nipogi:~$ sudo systemctl status avahi-daemon.service 
● avahi-daemon.service - Avahi mDNS/DNS-SD Stack
     Loaded: loaded (/lib/systemd/system/avahi-daemon.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-12-30 10:50:04 JST; 10min ago
TriggeredBy: ● avahi-daemon.socket
   Main PID: 7685 (avahi-daemon)
     Status: "avahi-daemon 0.7 starting up."
      Tasks: 2 (limit: 14065)
     Memory: 1.4M
     CGroup: /system.slice/avahi-daemon.service
             ├─7685 avahi-daemon: running [nipogi.local]
             └─7687 avahi-daemon: chroot helper

sshサーバー

一応、公開鍵暗号認証方式にして、パスワード認証を切っておく
https://wiki.archlinux.jp/index.php/SSH_鍵
https://blog.htkyama.org/ssh_ed25519

リモコンが欲しい

wiiリモコンを中古でゲット
https://wiki.archlinux.jp/index.php/XWiimote
https://github.com/xwiimote/xwiimote
https://manpages.ubuntu.com/manpages/jammy/en/man4/xorg-xwiimote.4.html

キーのマッピングは以下を参考
https://ja.gadget-info.com/46371-20-kodi-keyboard-shortcuts-every-kodi-user-should-know
http://hide817.blog.fc2.com/blog-entry-6.html?sp
https://kodi.wiki/view/Keymap#Keyboards

変更無しで動いたもの

- +:音量アップ
- -:音量ダウン
- A:決定(リターン)
- B:なし
- HOME:なし
- 1:なし
- 2:なし
- 十字キー:操作

変更する

- B:BackSpace(戻る)
- HOME:ESC(取消)
- 1:スペース(スライドショー)
- 2:なし

sudo apt-get install xwiimote libxwiimote xserver-xorg-input-xwiimote
sudo usermod -aG input kodi

sudo xwiishow 1
xwiikeymap
/usr/share/X11/xorg.conf.d/50-xorg-fix-xwiimote.conf

adeno@nipogi:~$ cat /usr/share/X11/xorg.conf.d/50-xorg-fix-xwiimote.conf 
# X11 xorg Wii Remote raw input config
# XWiimote reports accelerometer and IR data as absolute axes. Disable them to
# avoid weird mouse behaviour. To use IR data as mouse input, use the xwiimote
# tools or xf86-input-xwiimote which overwrites this.
# This only disables the raw input from the kernel devices. If you use the
# xwiimote tools to emulate mouses/keyboards, then they are not affected by
# this.

Section "InputClass"
	Identifier "Nintendo Wii Remote Raw Input Blacklist"
	MatchProduct "Nintendo Wii Remote"
	Option "Ignore" "on"
	Option "MapB" "KEY_BACKSPACE"
    Option "MapHome" "KEY_Escape"
    Option "MapOne" "KEY_Space"
    Option "MapTwo" "KEY_I"
EndSection

これでとりあえずはいいか?

2021年5月8日土曜日

Lichee Pi Zeroで母艦PCとファイル同期させる

あまり手をつけていないが、少しずつやっている
母艦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!