passwd
で root のパスワードを設定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'
service network restart
これで ssh root@192.168.1.254
で OpenWrt にssh接続できるようになる
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