[folders] # DISTFILES_DIR # Define a dir to store distfiles # Default: # distfiles_dir=./distfiles distfiles_dir=./distfiles # SEGMENTS_DIR # Define a dir to store distfiles' segments # Default: # segments_dir=./tmp segments_dir=./tmp [pkg_list] # PKG_LIST_DIR # Define a dir with pkg.list file # Default: # pkg_list_dir=./ pkg_list_dir=./ # SYNOPSIS: del_pkg_list_when_dld_finished=0 | 1 # - If del_pkg_list_when_dld_finished set to 1: # Segget deletes pkg.list file, after all distfiles were successfuly fetched. # Default: # del_pkg_list_when_dld_finished=1 del_pkg_list_when_dld_finished=1 [portage] # SYNOPSIS: fetch_only=0 | 1 # NOT IMPLEMENTED YET: fetch_only=0 [distfiles] # MAX_CONNECTION_NUM_PER_DISTFILE # Each distfile can have up to max_connection_num_per_distfile simultaneous # connections. # Minimum value: 1 # Maximum value: 20 # Default: # max_connection_num_per_distfile=3 max_connection_num_per_distfile=3 [segments] # MAX_SEGMENT_SIZE # Define maximum segment size in bytes. # Minimum value: 10000 # Maximum value: 10000000 # Default: # max_segment_size=500000 max_segment_size=500000 # SYNOPSIS: resume_on=0 | 1 # - If resume_on set to 1: # Before starting downloading a segment segget checks whether this segment is # already downloaded, checks segments size and if size mathces considers this # segment to be downloaded and skips downloading process. # - If resume_on set to 0: # Segget always starts new fetch for a segment regardless of the fact whether it # is downloaded or not. # Default: # resume_on=1 resume_on=1 # MAX_TRIES # If segment download was unsuccessful, new attempts are made. When attempts # number reaches max_tries, segment gets FAILED status and error logged to error_log # Minimum value: 1 # Maximum value: -1 (for no limit) # Default: # max_tries=10 max_tries=10 [connections] # MAX_CONNECTIONS # Define maximum number of connections # Minimum value: 1 # Maximum value: 20 # Default: # max_connections=10 max_connections=10 # CURRENT_SPEED_TIME_INTERVAL_MSECS # segget transfers may have bursty nature of their traffic. Therefore, while # measuring current speed, segget actually calculates average speed during # current_speed_time_interval_msecs time interval, defined in milliseconds. # Minimum value: 100 # Maximum value: 60000 # Default: # current_speed_time_interval_msecs=1000 current_speed_time_interval_msecs=1000 # NOT IMPLEMENTED YET: max_total_speed=50000 [mirrors] # MAX_CONNECTIONS_NUM_PER_MIRROR # Define how many simultaneous downloads from one mirror segget is allowed to # have. While choosing a mirror segget will skip mirrors with # max_connections_num_per_mirror active downloads. # Minimum value: 1 # Maximum value: 10 # Default: # max_connections_num_per_mirror=1 max_connections_num_per_mirror=1 # SYNOPSIS: collect_benchmark_stats_on=0 | 1 # - If set to 1, stats on mirrors performance will be collected. # default: # collect_benchmark_stats_on=1 (Note: at the moment can NOT be changed) collect_benchmark_stats_on=1 # SYNOPSIS: use_benchmark_stats=0 | 1 # If use_benchmark_stats=1 statistics on mirrors is used to rate them # and therefore improve performance. # Each time connection from a particular mirror closes mirror->dld_time, # and mirror->dld_size get increased (in case of unsuccessful connection # only time gets increased), so avg speed for a mirror can be # calculated: # # mirror->avg_speed=mirror->dld_size/mirror->dld_time. (1) # # When new segment is going to be started segget goes through the list of # the mirrors distfile/segment has, and asks each mirror for self_rating: # # "ulong self_rating=mirror->mirror_on_the_wall();". # # This way segget chooses a mirror with the best self_rating. To calculate # self_rating mirrors use the following formula: # # self_rating=dld_time/dld_size*honesty. (2) # # So mirrors actually say how bad they are. # Even mirrors can have critical times, so to give mirrors another chance # honesty was added to the formula (2). honesty can get values in # interval (0,1]. Each time connection from a mirror opens or closes mirror # sets its honesty=1. If mirror was asked for self_evaluation with # mirror->mirror_on_the_wall(), but wasn't chosen its honesty decreases # somewhat (see [mirror].benchmark_oblivion option), so next time it will # lie little bit more about how bad it's. # Default: # use_benchmark_results=1 # ***Note: at the moment use_benchmark_results can NOT be set to 0 use_benchmark_stats=1 # BENCHMARK_OBLIVION # benchmark_oblivion option allows to adjust how fast segget "forgets" # benchmarking statistics on mirrors performance. # Each time mirror->mirror_on_the_wall() called, mirror decreases its # honesty (to have more chances next time) using the following formula: # # honesty=honesty*100/(100+settings.benchmark_oblivion) (3) # # Therefore, setting benchmark_oblivion=100 will make mirror look twice # less bad next time mirror->mirror_on_the_wall() called. # Minimum value: 0 (Beware: setting to 0, will can exclude unlucky mirrors) # Maximum value: 1000 # Default: # benchmark_oblivion=5 benchmark_oblivion=5 [provide_mirror_to_others] # PROVIDE_MIRROR_DIR # Define a dir for making symlinks to downloaded distfiles. This dir can be # used to provide local mirror for other hosts (with help of Apache, vsftp, etc). # If set to none, segget will not make symlinks. # Default: # provide_mirror_dir=none provide_mirror_dir=./provide_mirror_dir # SYNOPSIS: PROVIDE_MIRROR_FILES_RESTRICT_LIST_ON= 0 | 1 # If PROVIDE_MIRROR_DIR=none this option will be ignored. # - If set to 1, segget will compare distfile name with the list of forbiden # patterns from the restricted.conf file. If distfile name contains any of the # patterns, no symlink will be provided to this distfile. # Default: # provide_mirror_files_restrict_list_on=0 provide_mirror_files_restrict_list_on=0 [provide_proxy_fetcher_to_others] # PROVIDE_PROXY_FETCHER_IP # Define an ip address segget will use to provide access for tuiclients. # The parameter should be a string holding your host dotted IP address. # Default: # provide_proxy_fetcher_ip=none provide_proxy_fetcher_ip=127.0.0.1 # PROVIDE_PROXY_FETCHER_PORT # Define a port segget will use to provide access for tuiclients. # The parameter should be an integer. # Minimum value: 1 # Maximum value: 65535 # Default: # provide_proxy_fetcher_port=3131 provide_proxy_fetcher_port=3130 [networks] # NETWORK0_PRIORITY # Define priority as a value in range from lowest 0 to highest 10. # Segget tries to use networks with higher priority levels first, and in case of # failure will switch to networks with lower priority levels. # Segget will NOT use network if its priority level set to 0. Therefore at least # one network must have priority level higher than 0. # Networks with local mirrors usually would have higher priority than that of # networks with remote mirrors. # Segget can have up to 10 networks (from network0 to network9). # Settings for each network should be defined in network#.conf file, where # instead of # should be network number. For network0 it's network0.conf # Default: # network0_priority=10 # network1_priority=0 # network2_priority=0 # network3_priority=0 # network4_priority=0 # network5_priority=0 # network6_priority=0 # network7_priority=0 # network8_priority=0 # network9_priority=0 network0_priority=10 network1_priority=0 network2_priority=0 network3_priority=0 network4_priority=0 network5_priority=0 network6_priority=0 network7_priority=0 network8_priority=0 network9_priority=0 [schedule] [user-data] # USER_AGENT # Set the User-Agent: header in the http request sent to the remote server. # This can be used to fool servers or scripts. # Default: # user_agent=segget user_agent=segget # Specify the user and password for authentication on a ftp servers. # NOT IMPLEMENTED YET: ftp-user=anonymous # NOT IMPLEMENTED YET: ftp-password=me@mail.ru [ui_server] # tuiclient monitors segget's activity by establishing tcp connection # with segget daemon (ui_server part of it). # UI_IP # Define an ip address segget will use to provide access for tuiclients. # The parameter should be a string holding your host dotted IP address. # Default: # ui_ip=127.0.0.1 ui_ip=127.0.0.1 # UI_PORT # Define a port segget will use to provide access for tuiclients. # The parameter should be an integer. # Minimum value: 1 # Maximum value: 65535 # Default: # ui_port=9999 ui_port=9999 [request_server] # request application adds distfiles to segget daemon queue by establishing tcp connection # with segget daemon (request_server part of it). # REQUEST_IP # Define an ip address segget will use to provide access for tuiclients. # The parameter should be a string holding your host dotted IP address. # Default: # request_ip=127.0.0.1 request_ip=127.0.0.1 # REQUEST_PORT # Define a port segget will use to provide access for tuiclients. # The parameter should be an integer. # Minimum value: 1 # Maximum value: 65535 # Default: # request_port=10000 request_port=10000 [scripting_and_scheduling] # Segget provides Python scripting functionalyty to support scheduling. # Each time segget tries to start a new connection certain network it calls # a python script (client.py) to accept or reject this connection and # if necessary adjusts its settings. # PYTHON_PATH # Define path to python # Default: # python_path=/usr/bin/python python_path=/usr/bin/python # SCRIPTS_DIR # Define path to a dir with python scripts. Before establishing connection for # a particular segment via network# segget checks SCRIPTS_DIR. # If SCRIPTS_DIR contains net#.py file, segget will launch schedule() function # from this file to apply settings for connetion and accept or reject this # segment for the moment. net#.py file is a causual python script file # with a user-writen schedule() function. # It's necessary to import functions before using get("variable"), # set("variable",value), accept_segment() and reject_segment() in schedule(). # get() function can obtain values for the following variables: # connection.num, connection.url, connection.max_speed_limit, # network.num, network.mode, network.active_connections_count, # distfile.name, distfile.size, distfile.dld_segments_count, # distfile.segments_count, distfile.active_connections_count, # segment.num, segment.try_num, segment.size, segment.range # set() function can change connection.max_speed_limit, see example: # -----------------EXAMPLE STARTS----------------- # from functions import * # import time; # def schedule(): # localtime = time.localtime(time.time()); # hour=localtime[3]; # # disable downloading distfiles that have size more than 5 000 000 bytes # # from 8-00 to 22-00. # if hour>8 and hour<21 and (get("distfile.size"))>5000000: # print "reject because distfile is too big" # reject_segment() # # set speed limit 50 000 cps for distfiles larger than 1 000 000 bytes # if get("distfile.size")>1000000: # print "limit connection speed" # set(connection.max_speed_limit, 50000) # accept_segment() # -----------------EXAMPLE ENDS----------------- # From example above localtime returns following tuple: # Index Attributes Values # 0 tm_year e.i.: 2008 # 1 tm_mon 1 to 12 # 2 tm_mday 1 to 31 # 3 tm_hour 0 to 23 # 4 tm_min 0 to 59 # 5 tm_sec 0 to 61 (60 or 61 are leap-seconds) # 6 tm_wday 0 to 6 (0 is Monday) # 7 tm_yday 1 to 366 (Julian day) # 8 tm_isdst -1, 0, 1, -1 means library determines DST # Therefore localtime[3] provides hours. # Segment will be accecpted by default if it was neither accepted nor rejected # during the schedule() function. # sagget saves logs of resulting stdout and stderr in the log folder # separatly for each network. Hence, if there's an error in net3.py file python # error message would be saved to net3_script_stderr.log. Results of print would # be saved in net3_script_stdout.log. # Default: # scripts_dir=./scripts scripts_dir=./scripts # script_socket_path # Segget uses AF_UNIX domain sockets for communication with python. # Specify path for the socket on your filesystem. # NOTE !: Default value can NOT be changed yet (option under development). # Default: # script_socket_path=/tmp/segget_script_socket script_socket_path=/tmp/segget_script_socket [logs] # LOGS_DIR # Define a dir to store log files. # Default: # logs_dir=./logs logs_dir=/home/mona/idfetcha/logs # GENERAL_LOG_FILE # Define a file name to store general log. # Set to none to disable loggin. # Default: # general_log_file=segget.log general_log_file=segget.log # GENERAL_LOG_TIME_FORMAT # Set time format for general log as a string containing any combination of # regular characters and special format specifiers. These format specifiers are # replaced by the function to the corresponding values to represent the time # specified in timeptr. They all begin with a percentage (%) sign, and are: # %a Abbreviated weekday name [For example: Thu] # %A Full weekday name [For example: Thursday] # %b Abbreviated month name [For example: Aug] # %B Full month name [For example: August] # %c Date and time representation [For example: Thu Aug 23 14:55:02 2001] # %d Day of the month (01-31) [For example: 23] # %H Hour in 24h format (00-23) [For example: 14] # %I Hour in 12h format (01-12) [For example: 02] # %j Day of the year (001-366) [For example: 235] # %m Month as a decimal number (01-12) [For example: 08] # %M Minute (00-59) [For example: 55] # %p AM or PM designation [For example: PM] # %S Second (00-61) [For example: 02] # %U Week number with the first Sunday # as the first day of week one (00-53) [For example: 33] # %w Weekday as a decimal number with # Sunday as 0 (0-6) [For example: 4] # %W Week number with the first Monday as # the first day of week one (00-53) [For example: 34] # %x Date representation [For example: 08/23/01] # %X Time representation [For example: 14:55:02] # %y Year, last two digits (00-99) [For example: 01] # %Y Year [For example: 2001] # %Z Timezone name or abbreviation [For example: CDT] # %% A % sign [For example: %] # # For instace general_log_time_format=Time: %m/%d %X # # Default: # general_log_time_format=%m/%d %X general_log_time_format=%m/%d %X # ERROR_LOG_FILE # Define a file name to store error log. # Set to none to disable loggin. # Default: # error_log_file=segget.log error_log_file=error.log # ERROR_LOG_TIME_FORMAT # Set time format for error log as a string containing any combination of # regular characters and special format specifiers. See GENERAL_LOG_TIME_FORMAT # for details on format specifiers. # Default: # error_log_time_format=%m/%d %X error_log_time_format=%m/%d %X # DEBUG_LOG_FILE # Define a file name to store debug log. # Set to none to disable loggin. # Default: # debug_log_file=segget.log debug_log_file=debug.log # DEBUG_LOG_TIME_FORMAT # Set time format for debug log as a string containing any combination of # regular characters and special format specifiers. See GENERAL_LOG_TIME_FORMAT # for details on format specifiers. # Default: # debug_log_time_format=%m/%d %X debug_log_time_format=%m/%d %X