This repository has been archived by the owner on Dec 28, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 10
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
55 changed files
with
5,550 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
|
||
# You can use most aria2 command-line options, replace '-' with '_'. | ||
# eg. 'rpc-secret' ==> 'rpc_secret' | ||
# | ||
# We do not support all options at this time. But you can add any option | ||
# with 'list extra_settings'. | ||
# | ||
# You can also add new config sections to define multi instance. | ||
# | ||
config aria2 'main' | ||
option enabled '0' | ||
option user 'nobody' | ||
option dir '/mnt/sataa1' | ||
option config_dir '/var/etc/aria2' | ||
option bt_enable_lpd 'true' | ||
option enable_dht 'true' | ||
option follow_torrent 'true' | ||
option file_allocation 'none' | ||
option save_session_interval '30' | ||
|
||
# Add addition Headers here. | ||
# eg. list header 'Content-Encoding: gzip' | ||
list header '' | ||
|
||
# Add BT trackers here. | ||
# eg. list bt_tracker 'http://tracker.example.com/announce' | ||
list bt_tracker '' | ||
|
||
# Add extra settings here. | ||
# eg. list extra_settings 'option=value' | ||
list extra_settings '' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,357 @@ | ||
#!/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 "$config_file" | ||
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 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
../init.d/aria2 |
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
libstdc++.so.6.0.24 |
Binary file not shown.
Oops, something went wrong.