bbb

logo
  1. Rasberry Piを起動
  2. passwd で root のパスワードを設定
  3. vim /etc/config/network で ネットワークの設定を変更
# config interface 'lan' を以下のようにする
config interface 'lan'
        option proto 'static'
        option ipaddr '192.168.1.254'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option gateway '192.168.1.1'
        option device 'eth0'
        option dns '192.168.1.1'
  1. service network restart

これで ssh root@192.168.1.254 で OpenWrt にssh接続できるようになる

https://imask.js.org/

HTML

<input id="input" type="text"> <div id="raw"></div>

Javascript

const mask = new IMask(document.getElementById('input'), { mask: 'HH:mm 〜 HH:mm', lazy: false, blocks: { HH: { mask: IMask.MaskedRange, from: 0, to: 23 }, mm: { mask: IMask.MaskedRange, from: 0, to: 59 } } }); mask.on("accept", function () { document.getElementById('raw').innerHTML = mask.unmaskedValue; });

HTML

<input id="input" placeholder="HH:mm 〜 HH:mm" />

Javascript

let result = ''; new Cleave('#input', { blocks: [2, 2, 2, 2], delimiters: [':', ' 〜 ', ':'], numericOnly: true, onValueChanged: function (e) { let { rawValue } = e.target; if (result === rawValue) { return; } result = ''; this.properties.blocks.forEach((len, index) => { if (rawValue.length) { let sub = rawValue.slice(0, len); const sub0 = sub.slice(0, 1); const rest = rawValue.slice(len); switch (index) { case 0: case 2: if (Number(sub0) > 2) { sub = `0${sub0}`; } else if (Number(sub) > 24) { sub = '24'; } break; case 1: case 3: if (Number(sub0) > 5) { sub = `0${sub0}`; } else if (Number(sub) > 60) { sub = '00'; } break; default: break; } result += sub; rawValue = rest; } }); this.setRawValue(result); }, });

構成例

./ ├── rsync-remote.sh └── sync/

rsync-remote.sh の中身:

#!/bin/bash if [ -z $(command -v watchman-wait) ]; then echo "require watchman" exit 1 fi if [ -z $(command -v rsync) ]; then echo "require rsync" exit 1 fi ssh_port=22 argv=() while [ $# -gt 0 ] do case $1 in --init-copy) init_copy=true ;; --ssh-port) ssh_port=$2 shift ;; -*) opterr=true echo "invalid option: $1" ;; *) argv+=("$1") ;; esac shift done if [ $opterr ]; then exit 1 fi if [[ "${#argv[@]}" -lt 1 ]]; then echo "Too few arguments." exit 1 elif [[ "${#argv[@]}" -gt 2 ]]; then echo "Too many arguments." exit 1 fi source_path=${argv[0]} target_path=${argv[1]} if [ ! -d $source_path ]; then echo "not exists directory: $source_path" exit 1 fi if [[ $source_path =~ [^/]$ ]]; then echo "bad path: $source_path" exit 1 fi if [[ $target_path =~ [^/]$ ]]; then echo "bad path: $target_path" exit 1 fi cd $source_path if [ $init_copy ]; then echo -e "copy from $target_path to $source_path" rsync -v -e "ssh -p $ssh_port" -azph --delete $target_path ./ fi echo -e "----------------------------------------------" echo -e "start watch loop(watchman)" echo -e "source:\t$(pwd)/" echo -e "target:\t$target_path" echo -e "----------------------------------------------\n" while : do result=$(watchman-wait ./) rsync -e "ssh -p $ssh_port" -azphv --delete ./ $target_path done

使い方:

# ./sync/foo/ を リモート先の ~/foo/ に同期する bash ./rsync-remote.sh ./sync/foo/ user@remotehost:~/foo/ # ssh のポートを指定する場合 bash ./rsync-remote.sh --port 2222 ./sync/foo/ user@remotehost:~/foo/ # 監視前に1回だけ リモート先の ~/foo/ を ./sync/foo/ に同期する(逆流) bash ./rsync-remote.sh --port 2222 --init-copy ./sync/foo/ user@remotehost:~/foo/

watchman trigger を使えば、whileでループする必要はなさそうだけれど、色々な記事に書かれている通りにやっても想定通り動いてくれなく、いまいち使い方がわからなかったので、素朴にループすることにした。

$HOME/.local にインストール

git clone https://github.com/WayneD/rsync cd rsync ./configure --prefix=$HOME/.local # 不要なものはここでフラグを立てて無効化可能 # ./configure --prefix=$HOME/.local --disable-md2man --disable-xxhash --disable-zstd --disable-lz4 make make install

watchman$HOME/.local にインストールする

mkdir -p $HOME/.local/{bin,lib} /usr/local/var/run/watchman # https://github.com/facebook/watchman/releases から最新のバイナリをダウンロードする curl -LO https://github.com/facebook/watchman/releases/download/v2022.04.18.00/watchman-v2022.04.18.00-macos.zip unzip watchman-v2022.04.18.00-macos.zip cd watchman-v2022.04.18.00-macos cp ./bin/* $HOME/.local/bin/ cp ./lib/* $HOME/.local/lib/ sudo chmod 2777 /usr/local/var/run/watchman

$HOME/.bashrc$HOME/.zshrc などでパスを通す

export PATH=$HOME/.local/bin:$PATH export DYLD_LIBRARY_PATH=$HOME/.local/lib:$DYLD_LIBRARY_PATH

https://go.dev/dl/ から最新のアーカイブをダウンロードしてインストールする

# M1 macに入れる curl -LO https://go.dev/dl/go1.18.1.darwin-arm64.tar.gz tar -zxvf go1.18.1.darwin-arm64.tar.gz cd go mkdir ~/.go cp -R ./* ~/.go/ export PATH=$HOME/.go/bin:$PATH export GOROOT=$HOME/.go
git clone https://github.com/emcrisostomo/fswatch.git cd fswatch ./configure --prefix=$HOME/.local make make install
git clone --depth=1 https://github.com/Homebrew/brew $HOME/.brew export PATH="$HOME/.brew/bin:$HOME/.brew/sbin:$PATH" brew update