diff options
| author | Xiao Pan <xyz@flylightning.xyz> | 2024-08-02 00:25:24 -0700 | 
|---|---|---|
| committer | Xiao Pan <xyz@flylightning.xyz> | 2024-08-02 00:25:24 -0700 | 
| commit | a3a4be4f36b8e901f1991352e10b3422c03f0d3c (patch) | |
| tree | 6c56d49215027aabd96dbbb1d6f364970c9cde63 /sh/upd | |
| parent | b6bbb3216efdb8ca9d7543a0483e45322af85e2c (diff) | |
upd: automate vrm monthly recurring maintenance
Diffstat (limited to 'sh/upd')
| -rwxr-xr-x | sh/upd | 55 | 
1 files changed, 50 insertions, 5 deletions
| @@ -1,6 +1,15 @@  #!/bin/sh +die () { +	echo "error: $*" >&2 +	exit 1 +} +  all () { +	# monthly_misc() needs to use qbittorrent-nox APIs, so I need to restart qbt before that, so I put qb() at top here, not perfect but good enough +	if [ "$hostname" = xyzia ]; then +		qb +	fi  	fast  	clean  	# don't run reflector if it is pp or aa or {it is studio and insp is in the same network} @@ -8,14 +17,11 @@ all () {  	if ! { [ "$hostname" = xyzpp ] || [ "$hostname" = xyzaa ] || { [ "$hostname" = xyzstudio ] && ping -4qc1 xyzinsp > /dev/null;};}; then  		refl  	fi -	if [ "$hostname" = xyzia ]; then -		qb -	fi -	[ "$hostname" = xyzinsp ] && music +	monthly_misc  	if [ "$hostname" = xyzinsp ] || [ "$hostname" = xyzpp ]; then  		userjs  	fi -	monthly_misc +	[ "$hostname" = xyzinsp ] && music  }  backup () { @@ -249,6 +255,45 @@ monthly_misc () {  			echo 'Wait for studio sudo prompt and enter password:'  			ssh -t studio 'sudo mv /tmp/mirrorlist /etc/pacman.d/mirrorlist && sudo chown root:root /etc/pacman.d/mirrorlist'  		fi + +		# https://github.com/qbittorrent/qBittorrent/wiki/WebUI-API-(qBittorrent-4.1) +		curl -s -X POST '10.0.0.4:57151/api/v2/search/updatePlugins' & +		for qbt_wireguard_ip in 10.0.0.3 10.0.0.4; do +			curl -s https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_best.txt | awk '$0{printf("%s\\n",$0)}' | xargs -0 -I {} curl -s -d json='{"add_trackers":"{}"}' "$qbt_wireguard_ip:57151/api/v2/app/setPreferences" & +			# another way: `jq -r '.[]|"\(.added_on)\t\(.hash)\t\(.name)"'` +			curl -s "$qbt_wireguard_ip:57151/api/v2/torrents/info?category=useful" | jq -r '.[]|[.added_on,.hash,.name]|@tsv' | grep 'archlinux.*\.iso' | sort -n | head -n-1 | awk '{print $2}' | while read -r hash; do +				# need POST to delete torrents. -d default POST, so no need `-X POST` +				curl -s -d "hashes=$hash" -d deleteFiles=true "$qbt_wireguard_ip:57151/api/v2/torrents/delete" +			done & +		done +		wait + +		while ! [ -d /run/media/xyz/Ventoy ]; do +			alarm 0 'Plug in usb flash drive' +			echo 'Plug in usb flash drive' +			sleep 10 +		done +		#[ -d /run/media/xyz/Ventoy ] || die "No usb flash drive" + +		rsync -vPu studio:~/downloads/torrents/useful/archlinux*.iso /run/media/xyz/Ventoy/archlinux-x86_64.iso +		# only check checksum and gpg signature on insp is sufficient for me, else too much work +		if curl -s -o /run/media/xyz/Ventoy/archlinux-x86_64.iso.sig https://mirror.fcix.net/archlinux/iso/latest/archlinux-x86_64.iso.sig; then +			gpg --verify /run/media/xyz/Ventoy/archlinux-x86_64.iso.sig || die 'Arch iso gpg signature check failed' +		else +			die 'Arch iso gpg signature download failed' +		fi +		# need to cd to iso file dir to checksum +		cd /run/media/xyz/Ventoy || exit +		curl -s https://mirror.fcix.net/archlinux/iso/latest/sha256sums.txt | grep archlinux-x86_64\.iso | tee /run/media/xyz/Ventoy/archlinux-x86_64.iso.sha256 | sha256sum -c || die 'Arch iso checksum does not match' +		# if stay at /run/media/xyz/Ventoy, will cause it be busy and can't be umount, which will cause `ventoy -u` fail +		# need to be after `wait`, because checksum need to be at ventoy dir +		cd || exit + +		disk="$(df /run/media/xyz/Ventoy/ | awk 'END{sub(/[[:digit:]]+$/,"",$1);printf("%s",$1)}')" +		sudo ventoy -l "$disk" | awk '/Ventoy:/{a=$2} /Ventoy Version in Disk:/{b=$NF;exit} END{exit((a==b)?1:0)}' && sudo ventoy -u "$disk" +		umount /run/media/xyz/Ventoy /run/media/xyz/FAT32DIR + +		alarm 0 'Unplug usb flash drive'  	fi  } | 
