Git Product home page Git Product logo

Comments (9)

smaller09 avatar smaller09 commented on June 25, 2024 4

temporary fix:
/etc/init.d/aria2 add BOLD line.
procd_add_jail "$NAME.$section" log
procd_add_jail_mount "/usr/lib" #fix "errorCode=1 OSSL_PROVIDER_load 'legacy' failed"
procd_add_jail_mount "$ca_certificate" "$certificate" "$rpc_certificate" "$rpc_private_key"
procd_add_jail_mount_rw "$dir" "$config_dir" "$log"
procd_close_instance

from aria2.

ArielHeleneto avatar ArielHeleneto commented on June 25, 2024 2

@ArielHeleneto `#!/bin/sh /etc/rc.common

Copyright (C) 2016-2017 Hsing-wang Liao [email protected]

Licensed to the public under the Apache License 2.0.

START=99 USE_PROCD=1

NAME=aria2 PROG=/usr/bin/aria2c

_info() { logger -p daemon.info -t "$NAME" "$*" }

_err() { logger -p daemon.err -t "$NAME" "$*" }

_make_dir() { local d for d in "$@"; do if [ ! -d "$d" ]; then mkdir -p "$d" 2>/dev/null || return 1 fi done

return 0

}

_create_file() { touch "$@" 2>/dev/null }

_change_owner() { local u="$1"; shift

local d
for d in "$@"; do
	if [ -f "$d" ]; then
		chown "$u" "$d" 2>/dev/null || return 1
	elif [ -d "$d" ]; then
		chown -R "$u" "$d" 2>/dev/null || return 1
	fi
done

return 0

}

_change_file_mode() { local mod="$1"; shift chmod "$mod" "$@" 2>/dev/null }

_reset_dir_mode() { local d for d in "$@"; do if [ -d "$d" ]; then find "$d" -type d -exec chmod 755 {} ; 2>/dev/null find "$d" -type f -exec chmod 644 {} ; 2>/dev/null fi done }

append_options() { local o; local v for o in "$@"; do v="$(eval echo "$$o")" [ -n "$v" ] && echo "${o//_/-}=$v" >>"$config_file_tmp" done }

append_setting() { local s="$1" [ -n "$s" ] && echo "$s" >>"$config_file_tmp" }

append_header() { local h="$1" [ -n "$h" ] && echo "header="$h"" >>"$config_file_tmp" }

aria2_validate() { uci_load_validate "$NAME" aria2 "$1" "$2" 'enabled:bool:0' 'enable_logging:bool' 'enable_proxy:bool' 'config_dir:string:/var/etc/aria2' 'user:string' 'all_proxy:string' 'all_proxy_passwd:string' 'all_proxy_user:string' 'auto_save_interval:range(0,600)' 'bt_enable_lpd:or("true","false")' 'bt_detach_seed_only:or("true","false")' 'bt_load_saved_metadata:or("true","false")' 'bt_prioritize_piece:string' 'bt_max_open_files:uinteger' 'bt_max_peers:uinteger' 'bt_remove_unselected_file:or("true","false")' 'bt_request_peer_speed_limit:string' 'bt_save_metadata:or("true","false")' 'bt_seed_unverified:or("true","false")' 'bt_stop_timeout:uinteger' 'bt_tracker:list(string)' 'ca_certificate:file' 'certificate:file' 'check_certificate:or("true","false"):true' 'check_integrity:or("true","false")' 'connect_timeout:uinteger' 'dht_listen_port:string' 'dir:string' 'disable_ipv6:or("true","false")' 'disk_cache:string' 'enable_dht:or("true","false"):true' 'enable_dht6:or("true","false")' 'enable_peer_exchange:or("true","false")' 'event_poll:or("epoll","kqueue","port","poll","select")' 'file_allocation:or("none","prealloc","trunc","falloc")' 'follow_torrent:or("true","false","mem")' 'force_save:or("true","false")' 'http_accept_gzip:or("true","false")' 'http_no_cache:or("true","false")' 'listen_port:string' 'log:string' 'log_level:or("debug","info","notice","warn","error")' 'lowest_speed_limit:string' 'max_concurrent_downloads:uinteger' 'max_connection_per_server:uinteger' 'max_download_limit:string' 'max_overall_download_limit:string' 'max_overall_upload_limit:string' 'max_tries:uinteger' 'max_upload_limit:string' 'min_split_size:string' 'pause:or("true","false")' 'pause_metadata:or("true","false")' 'peer_id_prefix:string' 'private_key:file' 'retry_wait:uinteger' 'rpc_auth_method:or("none","user_pass","token")' 'rpc_certificate:file' 'rpc_listen_port:range(1024,65535)' 'rpc_passwd:string' 'rpc_private_key:file' 'rpc_secret:string' 'rpc_secure:or("true","false")' 'rpc_user:string' 'save_session_interval:uinteger' 'seed_ratio:ufloat' 'seed_time:ufloat' 'split:uinteger' 'timeout:uinteger' 'user_agent:string' }

aria2_start() { local section="$1" [ "$2" = "0" ] || { _err "Validation failed."; return 1; }

[ "$enabled" = "1" ] || { _info "Instance \"$section\" disabled."; return 1; }
[ -n "$dir" ] || { _err "Please set download dir."; return 1; }
[ -d "$dir" ] || { _err "Please create download dir first."; return 1; }

config_file="$config_dir/$NAME.conf.$section"
config_file_tmp="$config_dir/$NAME.conf.tmp"
session_file="$config_dir/$NAME.session.$section"

_make_dir "$config_dir" || {
	_err "Can't create config dir: $config_dir"
	return 1
}

_create_file "$session_file" "$config_file" "$config_file_tmp" || {
	_err "Can't create files: $session_file, $config_file, $config_file_tmp"
	return 1
}

# create tmp file
cat >"$config_file_tmp" <<-EOF
	# Auto generated file, changes to this file will be lost.
EOF

append_setting "dir=$dir"
append_setting "enable-rpc=true"
append_setting "rpc-allow-origin-all=true"
append_setting "rpc-listen-all=true"
append_setting "quiet=true"
append_setting "continue=true"
append_setting "input-file=$session_file"
append_setting "save-session=$session_file"

if [ -z "$enable_logging" ]; then
	append_options "log" "log_level"
elif [ "$enable_logging" = "1" ]; then
	log=${log:-"/var/log/aria2.log"}

	local log_dir
	log_dir="$(dirname "$log")"

	_make_dir "$log_dir" || {
		_err "Can't create log dir: $log_dir"
		return 1
	}

	# create or clear log file
	echo >"$log"

	append_setting "log=$log"
	append_options "log_level"
fi

if [ -z "$enable_proxy" ] || [ "$enable_proxy" = "1" ]; then
	append_options "all_proxy" "all_proxy_user" "all_proxy_passwd"
fi

unset_auth_method() {
	uci -q batch <<-EOF
		set $NAME.$section.rpc_auth_method=""
		commit $NAME
	EOF
}

if [ -z "$rpc_auth_method" ]; then
	if [ -n "$rpc_secret" ]; then
		append_setting "rpc-secret=$rpc_secret"
	elif [ -n "$rpc_user" ]; then
		append_setting "rpc-user=$rpc_user"
		append_setting "rpc-passwd=$rpc_passwd"
	else
		_info "It is recommended to set RPC secret."
	fi
elif [ "$rpc_auth_method" = "token" ]; then
	if [ -n "$rpc_secret" ]; then
		append_setting "rpc-secret=$rpc_secret"
	else
		unset_auth_method
	fi
elif [ "$rpc_auth_method" = "user_pass" ]; then
	if [ -n "$rpc_user" ]; then
		append_setting "rpc-user=$rpc_user"
		append_setting "rpc-passwd=$rpc_passwd"
	else
		_info "Please set RPC user."
		unset_auth_method
	fi
fi

if [ ."$rpc_secure" = ."true" ] && [ -n "$rpc_certificate" ]; then
	append_setting "rpc-secure=true"
	append_options "rpc_certificate" "rpc_private_key"
fi

if [ ."$check_certificate" = ."true" ]; then
	append_setting "check-certificate=true"
	append_options "ca_certificate"
elif [ ."$check_certificate" = ."false" ]; then
	append_setting "check-certificate=false"
fi

if [ ."$enable_dht" = ."true" ]; then
	dht_file="$config_dir/dht.dat.$section"
	_create_file "$dht_file" || {
		_err "Can't create DHT file: $dht_file"
		return 1
	}

	append_setting "enable-dht=true"
	append_setting "dht-file-path=$dht_file"
fi

if [ ."$enable_dht6" = ."true" ] && [ ."$disable_ipv6" != ."true" ]; then
	dht6_file="$config_dir/dht6.dat.$section"
	_create_file "$dht6_file" || {
		_err "Can't create DHT6 file: $dht6_file"
		return 1
	}

	append_setting "enable-dht6=true"
	append_setting "dht-file-path6=$dht6_file"
fi

if [ -n "$bt_tracker" ]; then
	local bt_tracker_list; local t
	for t in $bt_tracker; do
		if [ -z "$bt_tracker_list" ]; then
			bt_tracker_list="$t"
		else
			bt_tracker_list="$bt_tracker_list,$t"
		fi
	done

	append_setting "bt-tracker=$bt_tracker_list"
fi

append_options "auto_save_interval" "bt_enable_lpd" "bt_max_open_files" "bt_max_peers" \
	"bt_remove_unselected_file" "bt_request_peer_speed_limit" "bt_prioritize_piece" \
	"bt_stop_timeout" "bt_detach_seed_only" "bt_save_metadata" "bt_load_saved_metadata" \
	"bt_seed_unverified" "certificate" "check_integrity" "connect_timeout" "dht_listen_port" \
	"disable_ipv6" "disk_cache" "enable_peer_exchange" "event_poll" "file_allocation" \
	"follow_torrent" "force_save" "http_accept_gzip" "http_no_cache" "listen_port" \
	"lowest_speed_limit" "max_concurrent_downloads" "max_connection_per_server" \
	"max_download_limit" "max_overall_download_limit" "max_overall_upload_limit" "max_tries" \
	"max_upload_limit" "min_split_size" "pause" "pause_metadata" "peer_id_prefix" "private_key" \
	"retry_wait" "rpc_listen_port" "save_session_interval" "seed_ratio" "seed_time" "split" "timeout" \
	"user_agent"

config_list_foreach "$section" "header" append_header
config_list_foreach "$section" "extra_settings" append_setting

sed '/^$/d' "$config_file_tmp" >"$config_file"
rm -f "$config_file_tmp"

_reset_dir_mode "$config_dir"
_change_file_mode 600 "$config_file"

if [ -n "$user" ]; then
	if ( user_exists "$user" && _change_owner "$user" "$config_dir" "$log" ); then
			_info "Aria2 will run with user '$user'."
			if [ "$user" != "root" ]; then
				_info "Please make sure user '$user' has write access to download dir: $dir"
			fi
	else
		_info "Setting run user to '$user' failed, default user will be used."
		user=
	fi
fi

procd_open_instance "$NAME.$section"
procd_set_param command "$PROG"
procd_append_param command --conf-path="$config_file"

procd_set_param respawn
procd_set_param stdout 1
procd_set_param stderr 1

procd_set_param file "$config_file"
[ -n "$user" ] && \
	procd_set_param user "$user"

procd_add_jail "$NAME.$section" log
    procd_add_jail_mount "/usr/lib"
procd_add_jail_mount "$ca_certificate" "$certificate" "$rpc_certificate" "$rpc_private_key"
procd_add_jail_mount_rw "$dir" "$config_dir" "$log"
procd_close_instance

}

service_triggers() { procd_add_reload_trigger "$NAME" procd_add_validation aria2_validate }

start_service() { config_load "$NAME" config_foreach aria2_validate "aria2" aria2_start } `

I found the problem - libopenssl-legacy package is not build in my system and it should be a dependces

from aria2.

Karlin97 avatar Karlin97 commented on June 25, 2024 1

the same problem

from aria2.

invisible789 avatar invisible789 commented on June 25, 2024 1

@ArielHeleneto
`#!/bin/sh /etc/rc.common

Copyright (C) 2016-2017 Hsing-wang Liao [email protected]

Licensed to the public under the Apache License 2.0.

START=99
USE_PROCD=1

NAME=aria2
PROG=/usr/bin/aria2c

_info() {
logger -p daemon.info -t "$NAME" "$*"
}

_err() {
logger -p daemon.err -t "$NAME" "$*"
}

_make_dir() {
local d
for d in "$@"; do
if [ ! -d "$d" ]; then
mkdir -p "$d" 2>/dev/null || return 1
fi
done

return 0

}

_create_file() {
touch "$@" 2>/dev/null
}

_change_owner() {
local u="$1"; shift

local d
for d in "$@"; do
	if [ -f "$d" ]; then
		chown "$u" "$d" 2>/dev/null || return 1
	elif [ -d "$d" ]; then
		chown -R "$u" "$d" 2>/dev/null || return 1
	fi
done

return 0

}

_change_file_mode() {
local mod="$1"; shift
chmod "$mod" "$@" 2>/dev/null
}

_reset_dir_mode() {
local d
for d in "$@"; do
if [ -d "$d" ]; then
find "$d" -type d -exec chmod 755 {} ; 2>/dev/null
find "$d" -type f -exec chmod 644 {} ; 2>/dev/null
fi
done
}

append_options() {
local o; local v
for o in "$@"; do
v="$(eval echo "$$o")"
[ -n "$v" ] &&
echo "${o//_/-}=$v" >>"$config_file_tmp"
done
}

append_setting() {
local s="$1"
[ -n "$s" ] &&
echo "$s" >>"$config_file_tmp"
}

append_header() {
local h="$1"
[ -n "$h" ] &&
echo "header="$h"" >>"$config_file_tmp"
}

aria2_validate() {
uci_load_validate "$NAME" aria2 "$1" "$2"
'enabled:bool:0'
'enable_logging:bool'
'enable_proxy:bool'
'config_dir:string:/var/etc/aria2'
'user:string'
'all_proxy:string'
'all_proxy_passwd:string'
'all_proxy_user:string'
'auto_save_interval:range(0,600)'
'bt_enable_lpd:or("true","false")'
'bt_detach_seed_only:or("true","false")'
'bt_load_saved_metadata:or("true","false")'
'bt_prioritize_piece:string'
'bt_max_open_files:uinteger'
'bt_max_peers:uinteger'
'bt_remove_unselected_file:or("true","false")'
'bt_request_peer_speed_limit:string'
'bt_save_metadata:or("true","false")'
'bt_seed_unverified:or("true","false")'
'bt_stop_timeout:uinteger'
'bt_tracker:list(string)'
'ca_certificate:file'
'certificate:file'
'check_certificate:or("true","false"):true'
'check_integrity:or("true","false")'
'connect_timeout:uinteger'
'dht_listen_port:string'
'dir:string'
'disable_ipv6:or("true","false")'
'disk_cache:string'
'enable_dht:or("true","false"):true'
'enable_dht6:or("true","false")'
'enable_peer_exchange:or("true","false")'
'event_poll:or("epoll","kqueue","port","poll","select")'
'file_allocation:or("none","prealloc","trunc","falloc")'
'follow_torrent:or("true","false","mem")'
'force_save:or("true","false")'
'http_accept_gzip:or("true","false")'
'http_no_cache:or("true","false")'
'listen_port:string'
'log:string'
'log_level:or("debug","info","notice","warn","error")'
'lowest_speed_limit:string'
'max_concurrent_downloads:uinteger'
'max_connection_per_server:uinteger'
'max_download_limit:string'
'max_overall_download_limit:string'
'max_overall_upload_limit:string'
'max_tries:uinteger'
'max_upload_limit:string'
'min_split_size:string'
'pause:or("true","false")'
'pause_metadata:or("true","false")'
'peer_id_prefix:string'
'private_key:file'
'retry_wait:uinteger'
'rpc_auth_method:or("none","user_pass","token")'
'rpc_certificate:file'
'rpc_listen_port:range(1024,65535)'
'rpc_passwd:string'
'rpc_private_key:file'
'rpc_secret:string'
'rpc_secure:or("true","false")'
'rpc_user:string'
'save_session_interval:uinteger'
'seed_ratio:ufloat'
'seed_time:ufloat'
'split:uinteger'
'timeout:uinteger'
'user_agent:string'
}

aria2_start() {
local section="$1"
[ "$2" = "0" ] || { _err "Validation failed."; return 1; }

[ "$enabled" = "1" ] || { _info "Instance \"$section\" disabled."; return 1; }
[ -n "$dir" ] || { _err "Please set download dir."; return 1; }
[ -d "$dir" ] || { _err "Please create download dir first."; return 1; }

config_file="$config_dir/$NAME.conf.$section"
config_file_tmp="$config_dir/$NAME.conf.tmp"
session_file="$config_dir/$NAME.session.$section"

_make_dir "$config_dir" || {
	_err "Can't create config dir: $config_dir"
	return 1
}

_create_file "$session_file" "$config_file" "$config_file_tmp" || {
	_err "Can't create files: $session_file, $config_file, $config_file_tmp"
	return 1
}

# create tmp file
cat >"$config_file_tmp" <<-EOF
	# Auto generated file, changes to this file will be lost.
EOF

append_setting "dir=$dir"
append_setting "enable-rpc=true"
append_setting "rpc-allow-origin-all=true"
append_setting "rpc-listen-all=true"
append_setting "quiet=true"
append_setting "continue=true"
append_setting "input-file=$session_file"
append_setting "save-session=$session_file"

if [ -z "$enable_logging" ]; then
	append_options "log" "log_level"
elif [ "$enable_logging" = "1" ]; then
	log=${log:-"/var/log/aria2.log"}

	local log_dir
	log_dir="$(dirname "$log")"

	_make_dir "$log_dir" || {
		_err "Can't create log dir: $log_dir"
		return 1
	}

	# create or clear log file
	echo >"$log"

	append_setting "log=$log"
	append_options "log_level"
fi

if [ -z "$enable_proxy" ] || [ "$enable_proxy" = "1" ]; then
	append_options "all_proxy" "all_proxy_user" "all_proxy_passwd"
fi

unset_auth_method() {
	uci -q batch <<-EOF
		set $NAME.$section.rpc_auth_method=""
		commit $NAME
	EOF
}

if [ -z "$rpc_auth_method" ]; then
	if [ -n "$rpc_secret" ]; then
		append_setting "rpc-secret=$rpc_secret"
	elif [ -n "$rpc_user" ]; then
		append_setting "rpc-user=$rpc_user"
		append_setting "rpc-passwd=$rpc_passwd"
	else
		_info "It is recommended to set RPC secret."
	fi
elif [ "$rpc_auth_method" = "token" ]; then
	if [ -n "$rpc_secret" ]; then
		append_setting "rpc-secret=$rpc_secret"
	else
		unset_auth_method
	fi
elif [ "$rpc_auth_method" = "user_pass" ]; then
	if [ -n "$rpc_user" ]; then
		append_setting "rpc-user=$rpc_user"
		append_setting "rpc-passwd=$rpc_passwd"
	else
		_info "Please set RPC user."
		unset_auth_method
	fi
fi

if [ ."$rpc_secure" = ."true" ] && [ -n "$rpc_certificate" ]; then
	append_setting "rpc-secure=true"
	append_options "rpc_certificate" "rpc_private_key"
fi

if [ ."$check_certificate" = ."true" ]; then
	append_setting "check-certificate=true"
	append_options "ca_certificate"
elif [ ."$check_certificate" = ."false" ]; then
	append_setting "check-certificate=false"
fi

if [ ."$enable_dht" = ."true" ]; then
	dht_file="$config_dir/dht.dat.$section"
	_create_file "$dht_file" || {
		_err "Can't create DHT file: $dht_file"
		return 1
	}

	append_setting "enable-dht=true"
	append_setting "dht-file-path=$dht_file"
fi

if [ ."$enable_dht6" = ."true" ] && [ ."$disable_ipv6" != ."true" ]; then
	dht6_file="$config_dir/dht6.dat.$section"
	_create_file "$dht6_file" || {
		_err "Can't create DHT6 file: $dht6_file"
		return 1
	}

	append_setting "enable-dht6=true"
	append_setting "dht-file-path6=$dht6_file"
fi

if [ -n "$bt_tracker" ]; then
	local bt_tracker_list; local t
	for t in $bt_tracker; do
		if [ -z "$bt_tracker_list" ]; then
			bt_tracker_list="$t"
		else
			bt_tracker_list="$bt_tracker_list,$t"
		fi
	done

	append_setting "bt-tracker=$bt_tracker_list"
fi

append_options "auto_save_interval" "bt_enable_lpd" "bt_max_open_files" "bt_max_peers" \
	"bt_remove_unselected_file" "bt_request_peer_speed_limit" "bt_prioritize_piece" \
	"bt_stop_timeout" "bt_detach_seed_only" "bt_save_metadata" "bt_load_saved_metadata" \
	"bt_seed_unverified" "certificate" "check_integrity" "connect_timeout" "dht_listen_port" \
	"disable_ipv6" "disk_cache" "enable_peer_exchange" "event_poll" "file_allocation" \
	"follow_torrent" "force_save" "http_accept_gzip" "http_no_cache" "listen_port" \
	"lowest_speed_limit" "max_concurrent_downloads" "max_connection_per_server" \
	"max_download_limit" "max_overall_download_limit" "max_overall_upload_limit" "max_tries" \
	"max_upload_limit" "min_split_size" "pause" "pause_metadata" "peer_id_prefix" "private_key" \
	"retry_wait" "rpc_listen_port" "save_session_interval" "seed_ratio" "seed_time" "split" "timeout" \
	"user_agent"

config_list_foreach "$section" "header" append_header
config_list_foreach "$section" "extra_settings" append_setting

sed '/^$/d' "$config_file_tmp" >"$config_file"
rm -f "$config_file_tmp"

_reset_dir_mode "$config_dir"
_change_file_mode 600 "$config_file"

if [ -n "$user" ]; then
	if ( user_exists "$user" && _change_owner "$user" "$config_dir" "$log" ); then
			_info "Aria2 will run with user '$user'."
			if [ "$user" != "root" ]; then
				_info "Please make sure user '$user' has write access to download dir: $dir"
			fi
	else
		_info "Setting run user to '$user' failed, default user will be used."
		user=
	fi
fi

procd_open_instance "$NAME.$section"
procd_set_param command "$PROG"
procd_append_param command --conf-path="$config_file"

procd_set_param respawn
procd_set_param stdout 1
procd_set_param stderr 1

procd_set_param file "$config_file"
[ -n "$user" ] && \
	procd_set_param user "$user"

procd_add_jail "$NAME.$section" log
    procd_add_jail_mount "/usr/lib"
procd_add_jail_mount "$ca_certificate" "$certificate" "$rpc_certificate" "$rpc_private_key"
procd_add_jail_mount_rw "$dir" "$config_dir" "$log"
procd_close_instance

}

service_triggers() {
procd_add_reload_trigger "$NAME"
procd_add_validation aria2_validate
}

start_service() {
config_load "$NAME"
config_foreach aria2_validate "aria2" aria2_start
}
`

from aria2.

invisible789 avatar invisible789 commented on June 25, 2024

temporary fix: /etc/init.d/aria2 add BOLD line. procd_add_jail "$NAME.$section" log procd_add_jail_mount "/usr/lib" #fix "errorCode=1 OSSL_PROVIDER_load 'legacy' failed" procd_add_jail_mount "$ca_certificate" "$certificate" "$rpc_certificate" "$rpc_private_key" procd_add_jail_mount_rw "$dir" "$config_dir" "$log" procd_close_instance

Sir you're super genius, fixed for now, i hope to see permanent fix soon, thank you so much

from aria2.

ArielHeleneto avatar ArielHeleneto commented on June 25, 2024

hi it doesn't work for me anymore. @smaller09 The problems is still there

my /etc/init.d/aria2

#!/bin/sh /etc/rc.common
# Copyright (C) 2016-2017 Hsing-wang Liao <[email protected]>
# Licensed to the public under the Apache License 2.0.

START=99
USE_PROCD=1

NAME=aria2
PROG=/usr/bin/aria2c

_info() {
	logger -p daemon.info -t "$NAME" "$*"
}

_err() {
	logger -p daemon.err -t "$NAME" "$*"
}

_make_dir() {
	local d
	for d in "$@"; do
		if [ ! -d "$d" ]; then
			mkdir -p "$d" 2>/dev/null || return 1
		fi
	done

	return 0
}

_create_file() {
	touch "$@" 2>/dev/null
}

_change_owner() {
	local u="$1"; shift

	local d
	for d in "$@"; do
		if [ -f "$d" ]; then
			chown "$u" "$d" 2>/dev/null || return 1
		elif [ -d "$d" ]; then
			chown -R "$u" "$d" 2>/dev/null || return 1
		fi
	done

	return 0
}

_change_file_mode() {
	local mod="$1"; shift
	chmod "$mod" "$@" 2>/dev/null
}

_reset_dir_mode() {
	local d
	for d in "$@"; do
		if [ -d "$d" ]; then
			find "$d" -type d -exec chmod 755 {} \; 2>/dev/null
			find "$d" -type f -exec chmod 644 {} \; 2>/dev/null
		fi
	done
}

append_options() {
	local o; local v
	for o in "$@"; do
		v="$(eval echo "\$$o")"
		[ -n "$v" ] && \
			echo "${o//_/-}=$v" >>"$config_file_tmp"
	done
}

append_setting() {
	local s="$1"
	[ -n "$s" ] && \
		echo "$s" >>"$config_file_tmp"
}

append_header() {
	local h="$1"
	[ -n "$h" ] && \
		echo "header=\"$h\"" >>"$config_file_tmp"
}

aria2_validate() {
	uci_load_validate "$NAME" aria2 "$1" "$2" \
		'enabled:bool:0' \
		'enable_logging:bool' \
		'enable_proxy:bool' \
		'config_dir:string:/var/etc/aria2' \
		'user:string' \
		'all_proxy:string' \
		'all_proxy_passwd:string' \
		'all_proxy_user:string' \
		'auto_save_interval:range(0,600)' \
		'bt_enable_lpd:or("true","false")' \
		'bt_detach_seed_only:or("true","false")' \
		'bt_load_saved_metadata:or("true","false")' \
		'bt_prioritize_piece:string' \
		'bt_max_open_files:uinteger' \
		'bt_max_peers:uinteger' \
		'bt_remove_unselected_file:or("true","false")' \
		'bt_request_peer_speed_limit:string' \
		'bt_save_metadata:or("true","false")' \
		'bt_seed_unverified:or("true","false")' \
		'bt_stop_timeout:uinteger' \
		'bt_tracker:list(string)' \
		'ca_certificate:file' \
		'certificate:file' \
		'check_certificate:or("true","false"):true' \
		'check_integrity:or("true","false")' \
		'connect_timeout:uinteger' \
		'dht_listen_port:string' \
		'dir:string' \
		'disable_ipv6:or("true","false")' \
		'disk_cache:string' \
		'enable_dht:or("true","false"):true' \
		'enable_dht6:or("true","false")' \
		'enable_peer_exchange:or("true","false")' \
		'event_poll:or("epoll","kqueue","port","poll","select")' \
		'file_allocation:or("none","prealloc","trunc","falloc")' \
		'follow_torrent:or("true","false","mem")' \
		'force_save:or("true","false")' \
		'http_accept_gzip:or("true","false")' \
		'http_no_cache:or("true","false")' \
		'listen_port:string' \
		'log:string' \
		'log_level:or("debug","info","notice","warn","error")' \
		'lowest_speed_limit:string' \
		'max_concurrent_downloads:uinteger' \
		'max_connection_per_server:uinteger' \
		'max_download_limit:string' \
		'max_overall_download_limit:string' \
		'max_overall_upload_limit:string' \
		'max_tries:uinteger' \
		'max_upload_limit:string' \
		'min_split_size:string' \
		'pause:or("true","false")' \
		'pause_metadata:or("true","false")' \
		'peer_id_prefix:string' \
		'private_key:file' \
		'retry_wait:uinteger' \
		'rpc_auth_method:or("none","user_pass","token")' \
		'rpc_certificate:file' \
		'rpc_listen_port:range(1024,65535)' \
		'rpc_passwd:string' \
		'rpc_private_key:file' \
		'rpc_secret:string' \
		'rpc_secure:or("true","false")' \
		'rpc_user:string' \
		'save_session_interval:uinteger' \
		'seed_ratio:ufloat' \
		'seed_time:ufloat' \
		'split:uinteger' \
		'timeout:uinteger' \
		'user_agent:string'
}

aria2_start() {
	local section="$1"
	[ "$2" = "0" ] || { _err "Validation failed."; return 1; }

	[ "$enabled" = "1" ] || { _info "Instance \"$section\" disabled."; return 1; }
	[ -n "$dir" ] || { _err "Please set download dir."; return 1; }
	[ -d "$dir" ] || { _err "Please create download dir first."; return 1; }

	config_file="$config_dir/$NAME.conf.$section"
	config_file_tmp="$config_dir/$NAME.conf.tmp"
	session_file="$config_dir/$NAME.session.$section"

	_make_dir "$config_dir" || {
		_err "Can't create config dir: $config_dir"
		return 1
	}

	_create_file "$session_file" "$config_file" "$config_file_tmp" || {
		_err "Can't create files: $session_file, $config_file, $config_file_tmp"
		return 1
	}

	# create tmp file
	cat >"$config_file_tmp" <<-EOF
		# Auto generated file, changes to this file will be lost.
	EOF

	append_setting "dir=$dir"
	append_setting "enable-rpc=true"
	append_setting "rpc-allow-origin-all=true"
	append_setting "rpc-listen-all=true"
	append_setting "quiet=true"
	append_setting "continue=true"
	append_setting "input-file=$session_file"
	append_setting "save-session=$session_file"

	if [ -z "$enable_logging" ]; then
		append_options "log" "log_level"
	elif [ "$enable_logging" = "1" ]; then
		log=${log:-"/var/log/aria2.log"}

		local log_dir
		log_dir="$(dirname "$log")"

		_make_dir "$log_dir" || {
			_err "Can't create log dir: $log_dir"
			return 1
		}

		# create or clear log file
		echo >"$log"

		append_setting "log=$log"
		append_options "log_level"
	fi

	if [ -z "$enable_proxy" ] || [ "$enable_proxy" = "1" ]; then
		append_options "all_proxy" "all_proxy_user" "all_proxy_passwd"
	fi

	unset_auth_method() {
		uci -q batch <<-EOF
			set $NAME.$section.rpc_auth_method=""
			commit $NAME
		EOF
	}

	if [ -z "$rpc_auth_method" ]; then
		if [ -n "$rpc_secret" ]; then
			append_setting "rpc-secret=$rpc_secret"
		elif [ -n "$rpc_user" ]; then
			append_setting "rpc-user=$rpc_user"
			append_setting "rpc-passwd=$rpc_passwd"
		else
			_info "It is recommended to set RPC secret."
		fi
	elif [ "$rpc_auth_method" = "token" ]; then
		if [ -n "$rpc_secret" ]; then
			append_setting "rpc-secret=$rpc_secret"
		else
			unset_auth_method
		fi
	elif [ "$rpc_auth_method" = "user_pass" ]; then
		if [ -n "$rpc_user" ]; then
			append_setting "rpc-user=$rpc_user"
			append_setting "rpc-passwd=$rpc_passwd"
		else
			_info "Please set RPC user."
			unset_auth_method
		fi
	fi

	if [ ."$rpc_secure" = ."true" ] && [ -n "$rpc_certificate" ]; then
		append_setting "rpc-secure=true"
		append_options "rpc_certificate" "rpc_private_key"
	fi

	if [ ."$check_certificate" = ."true" ]; then
		append_setting "check-certificate=true"
		append_options "ca_certificate"
	elif [ ."$check_certificate" = ."false" ]; then
		append_setting "check-certificate=false"
	fi

	if [ ."$enable_dht" = ."true" ]; then
		dht_file="$config_dir/dht.dat.$section"
		_create_file "$dht_file" || {
			_err "Can't create DHT file: $dht_file"
			return 1
		}

		append_setting "enable-dht=true"
		append_setting "dht-file-path=$dht_file"
	fi

	if [ ."$enable_dht6" = ."true" ] && [ ."$disable_ipv6" != ."true" ]; then
		dht6_file="$config_dir/dht6.dat.$section"
		_create_file "$dht6_file" || {
			_err "Can't create DHT6 file: $dht6_file"
			return 1
		}

		append_setting "enable-dht6=true"
		append_setting "dht-file-path6=$dht6_file"
	fi

	if [ -n "$bt_tracker" ]; then
		local bt_tracker_list; local t
		for t in $bt_tracker; do
			if [ -z "$bt_tracker_list" ]; then
				bt_tracker_list="$t"
			else
				bt_tracker_list="$bt_tracker_list,$t"
			fi
		done

		append_setting "bt-tracker=$bt_tracker_list"
	fi

	append_options "auto_save_interval" "bt_enable_lpd" "bt_max_open_files" "bt_max_peers" \
		"bt_remove_unselected_file" "bt_request_peer_speed_limit" "bt_prioritize_piece" \
		"bt_stop_timeout" "bt_detach_seed_only" "bt_save_metadata" "bt_load_saved_metadata" \
		"bt_seed_unverified" "certificate" "check_integrity" "connect_timeout" "dht_listen_port" \
		"disable_ipv6" "disk_cache" "enable_peer_exchange" "event_poll" "file_allocation" \
		"follow_torrent" "force_save" "http_accept_gzip" "http_no_cache" "listen_port" \
		"lowest_speed_limit" "max_concurrent_downloads" "max_connection_per_server" \
		"max_download_limit" "max_overall_download_limit" "max_overall_upload_limit" "max_tries" \
		"max_upload_limit" "min_split_size" "pause" "pause_metadata" "peer_id_prefix" "private_key" \
		"retry_wait" "rpc_listen_port" "save_session_interval" "seed_ratio" "seed_time" "split" "timeout" \
		"user_agent"

	config_list_foreach "$section" "header" append_header
	config_list_foreach "$section" "extra_settings" append_setting

	sed '/^$/d' "$config_file_tmp" >"$config_file"
	rm -f "$config_file_tmp"

	_reset_dir_mode "$config_dir"
	_change_file_mode 600 "$config_file"

	if [ -n "$user" ]; then
		if ( user_exists "$user" && _change_owner "$user" "$config_dir" "$log" ); then
				_info "Aria2 will run with user '$user'."
				if [ "$user" != "root" ]; then
					_info "Please make sure user '$user' has write access to download dir: $dir"
				fi
		else
			_info "Setting run user to '$user' failed, default user will be used."
			user=
		fi
	fi

	procd_open_instance "$NAME.$section"
	procd_set_param command "$PROG"
	procd_append_param command --conf-path="$config_file"

	procd_set_param respawn
	procd_set_param stdout 1
	procd_set_param stderr 1

	procd_set_param file "$config_file"
	[ -n "$user" ] && \
		procd_set_param user "$user"

	procd_add_jail "$NAME.$section" log
                procd_add_jail_mount "/usr/lib"
	procd_add_jail_mount "$ca_certificate" "$certificate" "$rpc_certificate" "$rpc_private_key"
	procd_add_jail_mount_rw "$dir" "$config_dir" "$log"
	procd_close_instance
}

service_triggers() {
	procd_add_reload_trigger "$NAME"
	procd_add_validation aria2_validate
}

start_service() {
	config_load "$NAME"
	config_foreach aria2_validate "aria2" aria2_start
}

from aria2.

invisible789 avatar invisible789 commented on June 25, 2024

@ArielHeleneto
Idk why it's not fixed with you, this temporary fix is fine and working flawlessly

from aria2.

invisible789 avatar invisible789 commented on June 25, 2024

@ArielHeleneto
Yes, that's mandatory for workaround to work

from aria2.

flashlab avatar flashlab commented on June 25, 2024

Downgrade to v1.36.0 fix the issue

from aria2.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.