構成例
./ ├── 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でループする必要はなさそうだけれど、色々な記事に書かれている通りにやっても想定通り動いてくれなく、いまいち使い方がわからなかったので、素朴にループすることにした。
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
AlmaLinuxにビルドしてインストールする
git clone https://github.com/inotify-tools/inotify-tools
cd inotify-tools
dnf install autoconf automake libtool make
./autogen.sh
./configure --prefix=$HOME/.local
make
make install
バイナリをダウンロードして $HOME/.local/
にインストールする
# https://cmake.org/download/
curl -OL https://github.com/Kitware/CMake/releases/download/v3.23.0/cmake-3.23.0-linux-x86_64.tar.gz
tar -zxvf cmake-3.23.0-linux-x86_64.tar.gz
mkdir -p $HOME/.local/bin
mkdir -p $HOME/.local/man
mkdir -p $HOME/.local/share
mkdir -p $HOME/.local/doc
cd cmake-3.23.0-linux-x86_64
cp -R ./bin/* $HOME/.local/bin/
cp -R ./doc/* $HOME/.local/doc/
cp -R ./man/* $HOME/.local/man/
cp -R ./share/* $HOME/.local/share/
mkdir ~/ath10k_backup
sudo cp /lib/firmware/ath10k/QCA6174/hw3.0/* ~/ath10k_backup
mkdir ~/ath10k_work
cd ~/ath10k_work
wget https://github.com/linux-surface/ath10k-firmware-override/blob/main/board.bin?raw=true -O board.bin
wget https://github.com/kvalo/ath10k-firmware/blob/master/QCA6174/hw3.0/board-2.bin -O board-2.bin
# https://github.com/kvalo/ath10k-firmware/tree/master/QCA6174/hw3.0/4.4.1 のうち最新版(最終更新日が若い)をダウンロード
wget https://github.com/kvalo/ath10k-firmware/tree/master/QCA6174/hw3.0/4.4.1/firmware-6.bin_WLAN.RM.4.4.1-00282-QCARMSWPZ-1 -O firmware-6.bin
sudo cp board.bin /lib/firmware/ath10k/QCA6174/hw3.0/
sudo cp board-2.bin /lib/firmware/ath10k/QCA6174/hw3.0/
sudo cp firmware-6.bin /lib/firmware/ath10k/QCA6174/hw3.0/
sudo chmod +x /lib/firmware/ath10k/QCA6174/hw3.0/*
cd
rm -rf ~/ath10k_work
sudo reboot
説明の簡略化のために wget
でダウンロードするコマンドを書いているが、 wget
するためには有線でインターネットにつながっている必要がある。有線でつなぐことができない環境の場合は、ほかのインターネットにつながっている端末でファイルをダウンロードし、USBメモリなどで移せばOK。
インストールした端末(Surface GO)でSDカードのスロットが認識しないなどがあったが、Linux Surfaceを入れたら解決した
https://github.com/linux-surface/linux-surface
手順はWikiを参照
https://github.com/linux-surface/linux-surface/wiki/Installation-and-Setup#debian--ubuntu
https://github.com/linux-surface/linux-surface/wiki/Surface-Go-2#dual-booting-linux-and-windows
sudo vi /etc/default/keyboard
# KEYBOARD CONFIGURATION FILE # Consult the keyboard(5) manual page. XKBMODEL="pc105" XKBLAYOUT="jp" XKBVARIANT="" -XKBOPTIONS="" +XKBOPTIONS="ctrl:nocaps" BACKSPACE="guess"
echo export MOZ_USE_XINPUT2=1 | sudo tee /etc/profile.d/use-xinput2.sh
https://github.com/bulletmark/libinput-gestures
sudo apt remove xserver-xorg-input-synaptics sudo apt install xserver-xorg-input-libinput sudo reboot
sudo apt install gnome-tweaks gnome-tweaks
bash -c "$(wget -qO- https://git.io/vQgMr)"
118(Monokai Pro)に設定