Skip to content

Instantly share code, notes, and snippets.

@olbat
Last active August 16, 2023 11:05
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save olbat/1047463799ab8e617c36698825420bc9 to your computer and use it in GitHub Desktop.
Save olbat/1047463799ab8e617c36698825420bc9 to your computer and use it in GitHub Desktop.
Synology DonwloadStation blocklist update script
#!/bin/bash
set -euo pipefail
BLOCKLIST_URL='https://list.iblocklist.com/?list=bt_level1&fileformat=p2p&archiveformat=gz'
BLOCKLIST_FILE=/var/packages/DownloadStation/etc/download/blocklists/level1
echo "Clean old blocklist"
rm -f $(dirname $BLOCKLIST_FILE)/*
echo "Download new blocklist"
curl -sSLf --retry 10 --retry-delay 60 --max-time 30 "$BLOCKLIST_URL" \
| gzip -cd - \
| sed -e '/^\s*#/d' -e '/^\s*$/d' \
> $BLOCKLIST_FILE
# patch configuration & service files that might be overwritten after a package update:
# - enable blocklists in transmissiond config file
# - prevent this config file to be deleted by the service's startup script
echo "Patch service files"
sed -i /var/packages/DownloadStation/etc/download/settings.json \
-e 's/\(^\s*"blocklist-enabled"\s*:\)[^,]*/\1 true/' \
-e 's/\(^\s*"blocklist-url"\s*:\)[^,]*/\1 ""/'
sed -i /var/packages/DownloadStation/scripts/start-stop-status \
-e 's|\(^\s*rm .\+/settings.json\s*$\)|#\1|'
echo "Restart DownloadStation"
#synoservicectl --restart pkgctl-DownloadStation
/var/packages/DownloadStation/target/scripts/S25download.sh restart
echo "Verify that the blocklist file was loaded by transmissiond"
sleep 10 # wait for transmissiond to finish starting up
[ -s "$BLOCKLIST_FILE".bin ] \
|| { echo "Missing bin file: blocklist was not loaded by transmissiond"; exit 1; }
# transmissiond logfile: /var/services/download/transmissiond.log
@nexttoyou
Copy link

nexttoyou commented Nov 24, 2021

Unfortunately, when running this script via the Synology Task Manager as root it returns the error could not change directory to "/root": Permission denied while running it as admin results in sed: can't read /var/packages/DownloadStation/etc/download/settings.json: Permission denied. When running your script directly via SSH on the Synology it finishes with Missing bin file: blocklist was not loaded by transmissiond. Would it be possible for you to give some advice?

@olbat
Copy link
Author

olbat commented Nov 29, 2021

It looks like your runtime environment is not correct. Either you are trying to execute the script from a user that does not have access to the file or the file is not executable.

Do you have more information about the version your system and the runtime environment?

@nexttoyou
Copy link

The file is executable but it seems that the script needs to be at a specific place I unfortunately do not know as there is no further documentation (or is there?). I finally removed the Transmission part of the script and added a line in the beginning so at least it doesn’t complain anymore. Most certainly I’m missing something and would love to be better informed. Many thanks!

@pokemaster974
Copy link

Hi @olbat, got exactly the same issue than @nexttoyou
I do a vi /etc/block.sh and a chmod +x /etc/block.sh

Then task scheduler with bash /etc/block.sh
as root : could not change directory to "/root": Permission denied
as admin results in sed: can't read /var/packages/DownloadStation/etc/download/settings.json: Permission denied
directly into ssh : curl error 16

Regards

@pokemaster974
Copy link

pokemaster974 commented Jun 12, 2022

However, I confirm that script downloads because after removing level1 and level1.bin, a ls command in the dir after execute the script shows the 2 files again.
But don't know if errors about permissions prevents the script to be efficient.

Tâche : Blocklist
État actuel : 0 (Normal)
Sortie standard/erreur :
Clean old blocklist
Download new blocklist
Patch service files
Restart DownloadStation
Stopping scheduler ...
131 (process ID) old priority -20, new priority -5
pgsql is enabled.
Update download queue table and set all pid to -1
test upload_rate in download_queue table
test seeders in download_queue table
could not change directory to "/root": Permission denied
Check current amule version...
No need to upgrade amule.conf...
test destination column in download_queue table
test rss_feed table in download db
test uid column in user_setting table
test enable_watchffolder column in user_setting table
test unzip_password column in download_queue table
test unzip_progress column in download_queue table
test is_regex column in rss_filter table
test task_plugin table in download db
test thumbnail table in download db
test thumbnail_status column in download_queue table
test completed_time column in download_queue table
test waiting_until_time column in download_queue table
test colume one in view test_filter_view
test aftertaskdeleted trigger function
could not change directory to "/root": Permission denied
test given_filename, referer, cookie_path column in download_queue table
test torrent_oid column in download_queue table
test notification table in download db
test if notification_view
test task trigger function
could not change directory to "/root": Permission denied
CREATE FUNCTION
could not change directory to "/root": Permission denied
test if function lo_unlink_non_raise is defined
Starting Download Station scheduler daemon ...
131 (process ID) old priority -5, new priority -20
Verify that the blocklist file was loaded by transmissiond

@olbat
Copy link
Author

olbat commented Jun 13, 2022

Again, it looks that you all have an issue with the script's runtime environment.
Please make sure that the script is executable and being run with a user that has the relevant access.

@redking974
Copy link

Don't remember if script was loaded directly from the scheduler or via .sh but if 2nd case it have been chmod. And root in my case and case of @nexttoyou.
No issue from the other script where I found your comment.
Regards.

@olbat
Copy link
Author

olbat commented Jun 23, 2022

Just look at the script, every single paths are fully qualified. The script doesn't assume that you run it from a specific directory. Again it's just a matter of runtime environment and user permissions.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment