add establish-annex-link

This commit is contained in:
stupidcomputer 2024-10-08 18:54:14 -05:00
parent 4064d774ad
commit 928c65dfc4
1 changed files with 116 additions and 0 deletions

116
builds/utils/establish-annex-link Executable file
View File

@ -0,0 +1,116 @@
#!/bin/bash
printf "This tool is for establishing sshfs links to transfer git-annex repo contents.\n"
printf "server or client?\n"
printf 'EITHER OF `s` or `c`\n'
read -p "?> "
case "$REPLY" in
s)
printf "[] ensure that port 22 is unfiltered\n"
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
printf "[] starting sshd\n"
sudo systemctl start sshd
WIRELESS_INTERFACE=$(
nmcli --get-values GENERAL.DEVICE,GENERAL.TYPE device show |
sed '/^wifi/!{h;d;};x' |
head -n1)
IP_OF_INTERFACE=$(
ip address show dev $WIRELESS_INTERFACE |
grep 'inet ' |
awk -F' ' '{print $2}' |
awk -F'/' '{print $1}')
printf "[] instruct client to connect to %s\n" "$IP_OF_INTERFACE"
printf "[] waiting to stop sshd\n"
read
sudo systemctl stop sshd
printf "[] sshd stopped, but port 22 still open\n"
;;
c)
printf "What IP to connect to?\n"
printf "ENSURE THAT the IP is accessable on the current VLAN\n"
printf 'ONE OF `ipv4 address`'
read -p "?> " ADDRESS
INFORMED_GUESS=$(ssh usr@$ADDRESS hostname)
if [ -z "$INFORMED_GUESS" ]; then
printf "What hostname?\n"
mkdir -p ~/annex-remotes
ls ~/annex-remotes
read -p "?> " REMOTE_HOST
else
REMOTE_HOST=$INFORMED_GUESS
printf "[] using hostname %s\n" "$INFORMED_GUESS"
fi
printf "[] mounting fs via sshfs\n"
mkdir -p ~/annex-remotes/$REMOTE_HOST
fusermount3 -qu ~/annex-remotes/$REMOTE_HOST
sshfs usr@$ADDRESS:/home/usr/annex ~/annex-remotes/$REMOTE_HOST
printf "[] mounted fs\n"
# check if the fuse mount worked
df_output=$(df -h | grep -c '/home/usr/annex')
if [ "$df_output" -eq 0 ]; then
printf "It seems the sshfs mount didn't work. Exiting.\n"
exit 1
fi
# check if we need to make a copy of the annex on the new device
if [ ! -d ~/annex-remotes/$REMOTE_HOST/.git ]; then
printf "Should I do that with the current computer's git-annex store?\n\n"
printf '`y`) initialize with the local store\n'
printf '`n`) no, just mount the sshfs\n'
read -p '?> '
case $REPLY in
y)
cd ~/annex-remotes/$REMOTE_HOST
printf "[] cloning the local git-annex store\n"
git clone -v ~/annex
shopt -s dotglob # include dotfiles and dotdirs in wildcard
mv ./annex/* . # move everything up a dir
if find "annex" -maxdepth 1 -type f -o -type d -empty; then # if annex is empty...
printf "[] removing spurious ./annex directory\n"
rm -r ./annex # ...remove it
fi
git annex init "$REMOTE_HOST"
cd ~/annex
git remote add $REMOTE_HOST ~/annex-remotes/$REMOTE_HOST
;;
esac # it's okay that the `n` and `*` cases fall-through
fi
printf "[] waiting to stop sshfs\n"
read
fusermount3 -u ~/annex-remotes/$REMOTE_HOST
printf "[] unmounted sshfs\n"
;;
*)
printf "unknown\n"
;;
esac