Attached please see patches for flamethrower and
systemimager which adds support to the bittorrent transport.
They are to be applied to trunk of
both trees.
This is still work-in-progress and
I'm not too happy about putting the BT setup (like tarring, seeding, setting up
tracker) in flamethrowerd. I think using a similar approach to Andrea's
(running a separate process) would be better.
Also, currently I create multiple
torrent files for each module, as discussed with Andrea, we can probably just
use one torrent (with the name of the image) to handle multiple
files/directories.
I have incorporated Andrea's idea of
having a staging directory for the tarballs and extended it such that it is
available for flamethrower (multicast or bt transport).
We're getting close to be able to
check code into trunk, I think a few more discussions and a few more tests and
we can agree on how best to merge our efforts and check it in so that everybody
can test.
Currently I'm using libbt, but I am
getting very poor performance with it when seeding and leeching
files.
I'm going to try libtorrent next, the
issue with that is it requires the boost system for building. I am not too
familar with the system but in my mind, this is additional dependency (libbt
only requires curl-devel, which isn't so bad).
Potentially we could use Andrea's
frozen python bt, but he mentioned that the frozen files are quite large - may
make our ramdisk quite bulky.
Okay that's it for now, if you have
any questions, feel free to ask.
Cheers,
Bernard
Index: lib/Flamethrower.pm =================================================================== --- lib/Flamethrower.pm (revision 55) +++ lib/Flamethrower.pm (working copy) @@ -76,6 +76,9 @@ 'rexmit_hello_interval' => { ARGCOUNT => ARGCOUNT_ONE }, 'ttl' => { ARGCOUNT => ARGCOUNT_ONE }, 'nosync' => { ARGCOUNT => ARGCOUNT_ONE }, + 'transport' => { ARGCOUNT => ARGCOUNT_ONE }, + 'bt_limit_upload' => { ARGCOUNT => ARGCOUNT_ONE }, + 'bt_max_upload' => { ARGCOUNT => ARGCOUNT_ONE }, ); Index: bin/flamethrowerd =================================================================== --- bin/flamethrowerd (revision 55) +++ bin/flamethrowerd (working copy) @@ -111,11 +111,25 @@ exit 1; } -my $file = "udp-sender"; -unless( Flamethrower->which($file,$ENV{PATH}) ){ - print ("Couldn't find $file in path: $ENV{PATH}\n"); - print ("Please install udp-sender, then try again.\n"); - exit 1; +my $pname = ""; + +# What transport are we using? +my $transport = $ft_config->transport(); + +if ($transport eq "bittorrent") { + $pname = "bittorrent-console"; + unless( Flamethrower->which($pname,$ENV{PATH}) ){ + print ("Couldn't find $pname in path: $ENV{PATH}\n"); + print ("Please install $pname, then try again.\n"); + exit 1; + } +} else { + $pname = "udp-sender"; + unless( Flamethrower->which($pname,$ENV{PATH}) ){ + print ("Couldn't find $pname in path: $ENV{PATH}\n"); + print ("Please install $pname, then try again.\n"); + exit 1; + } } &daemonize; @@ -335,9 +349,65 @@ return $cmd; } +# Usage: my $cmd = build_bittorrent_cmd($module); +sub build_bittorrent_cmd { + + my $module = shift; + my $tardir = "/tmp"; + + ############################################################################ + # + # Set vars for all options + # + ############################################################################ + + ############################################################################ + # + # Global settings + # + my $log; + if ( $ft_config->get("log") ) { + $log = " > " . $ft_config->get("log") . ".$module"; + } + + my $bt_max_upload_rate; + if ( $ft_config->get("bt_limit_upload") && $ft_config->get("bt_max_upload") ) { + $bt_max_upload_rate = " --max_upload_rate " . $ft_config->get("bt_max_upload"); + } else { + $bt_max_upload_rate = " --max_upload_rate 0" + } + # + ############################################################################ + + + ############################################################################ + # + # Module specific overrides + # + #my $dir; + #if ( $ft_config->get("${module}_dir") ) { + # $dir = $ft_config->get("${module}_dir"); + #} + # + ############################################################################ + + # Build command + # + my $cmd = qq(bittorrent-console --save_as $tardir/${module}.tar http://localhost/torrents/${module}.torrent); + #my $cmd = qq(bittorrent-console --save_as $tardir/${module}.tar http://localhost/torrents/${module}.torrent ); + $cmd .= $bt_max_upload_rate if(defined $bt_max_upload_rate); + #$cmd .= $slice_size if(defined $slice_size); + $cmd .= $log if(defined $log); + + return $cmd; +} + # Usage: update_directory(); sub update_directory { + my %portbases; + my $transport = $ft_config->transport(); + print "update_directory()\n" if ($debug); # Create our directory directory, if necessary. @@ -357,12 +427,14 @@ unlink <$dir/*>; + if ($transport ne "bittorrent") { + ############################################################################ # # Get list of explicitly specified portbase numbers so we don't # dynamically use one that already exists. # - my %portbases = $ft_config->varlist('_portbase$'); + %portbases = $ft_config->varlist('_portbase$'); # Be sure to include the flamethrower_directory port. $_ = $ft_config->get("flamethrower_directory_portbase"); @@ -387,6 +459,8 @@ # ############################################################################ + + } ############################################################################ # @@ -409,33 +483,36 @@ if ( ! defined($ft_config->get("${module}_dir")) ) { die("Please set DIR in flamethrower.conf for [$module]!"); } + + if ($transport ne "bittorrent") { - # PORTBASE - my $portbase; - if ($ft_config->varlist("${module}_portbase")) { + # PORTBASE + my $portbase; + if ($ft_config->varlist("${module}_portbase")) { - # portbase is already set - $portbase = $ft_config->get("${module}_portbase"); + # portbase is already set + $portbase = $ft_config->get("${module}_portbase"); - } else { + } else { - # Start with flamethrower_directory_portbase + 2. - $portbase = $ft_config->get("flamethrower_directory_portbase") + 2; + # Start with flamethrower_directory_portbase + 2. + $portbase = $ft_config->get("flamethrower_directory_portbase") + 2; - # If that port is already in use, increment by two until we - # get a free one. - while ( defined($portbases{$portbase}) ) { - $portbase += 2; - } + # If that port is already in use, increment by two until we + # get a free one. + while ( defined($portbases{$portbase}) ) { + $portbase += 2; + } - # Put it into module specific data structure - $ft_config->set("${module}_portbase", $portbase); + # Put it into module specific data structure + $ft_config->set("${module}_portbase", $portbase); - # Add our new portbase to the existing list. - $portbases{$portbase} = $portbase; + # Add our new portbase to the existing list. + $portbases{$portbase} = $portbase; + } + print FILE "PORTBASE=$portbase\n"; } - print FILE "PORTBASE=$portbase\n"; # ASYNC my $async; @@ -506,7 +583,24 @@ } print FILE "NOSYNC=$nosync\n" if ($nosync); + # TRANSPORT + my $transport; + if ($ft_config->varlist("${module}_transport")) { + # transport is already set + $transport = $ft_config->get("${module}_transport"); + } else { + # May or may not be set + # get it from global setting (if it exists) + if ($ft_config->varlist("^transport")) { + $transport= $ft_config->get("transport"); + + # Put it into module specific data structure + $ft_config->set("${module}_transport", $transport); + } + } + print FILE "TRANSPORT=$transport\n" if ($transport); + close(FILE); } @@ -521,6 +615,23 @@ read_config_file($conf_file); } my $dir = $ft_config->get("flamethrower_state_dir"); + my $transport = $ft_config->transport(); + my $log = $ft_config->get("log"); + my $tracker_port = "2222"; + + if ($transport eq "bittorrent") { + my $child_file = "${dir}/flamethrowerd.bttracker.pid"; + unless (-e $child_file) { + my $cmd = "bittorrent-tracker --port $tracker_port --dfile /tmp/flamethrower_bt_dfile >> $log &"; + my $child_pid = open(SENDER, "$cmd|") or die "Couldn't fork: $cmd"; + record_pid($child_file, $child_pid+1); + while(<SENDER>){ + print $_ if($debug); + } + close(SENDER); + } + } + my $modules = $ft_config->modules(); foreach my $module ( @$modules ) { my $file = "${dir}/flamethrowerd.${module}.pid"; @@ -553,14 +664,14 @@ my $state_dir = shift; my $parent_file = "${state_dir}/flamethrowerd.${module}.pid"; - my $child_file = "${state_dir}/flamethrowerd.${module}.udp-sender.pid"; + my $child_file = "${state_dir}/flamethrowerd.${module}.$pname.pid"; my $file; my $parent_pid; my $child_pid; print "cast($module, $state_dir)\n" if($debug); - + # Fork and cast if ($parent_pid = fork) { record_pid($parent_file, $parent_pid); @@ -570,7 +681,14 @@ print "casting $module\n" if($debug); - my $cmd = build_udp_sender_cmd($module); + my $cmd = ""; + if ($transport eq "bittorrent") { + # Make torrent if using the BitTorrent transport + maketorrent($module); + $cmd = build_bittorrent_cmd($module); + } else { + $cmd = build_udp_sender_cmd($module); + } print "cmd $cmd\n" if($debug); my $child_pid = open(SENDER, "$cmd|") or die "Couldn't fork: $cmd"; @@ -595,6 +713,40 @@ } } +# Usage: maketorrent($module); +sub maketorrent { + my $module = shift; + my $port = "2222"; + my $cmd = ""; + my $docroot = "/var/www/html"; + my $tardir = "/tmp"; + + my $interface; + if ( $ft_config->get("interface") ) { + $interface = $ft_config->get("interface"); + } + + (my $ip) = (`/sbin/ifconfig $interface`)[1] =~ /inet addr:(\S+)/; + + my $dir; + if ( $ft_config->get("${module}_dir") ) { + $dir = $ft_config->get("${module}_dir"); + } + + print "maketorrent $module\n" if($debug); + + # First, need to tar up the module + $cmd = "cd $dir && tar -cf $tardir/$module.tar *"; + + # Make torrent file using maketorrent + $cmd .= " && maketorrent-console http://$ip:$port/announce $tardir/$module.tar"; + + # Move resulting torrent to document root's torrents directory + $cmd .= " && mv $tardir/$module.tar.torrent $docroot/torrents/$module.torrent"; + print "cmd $cmd\n" if($debug); + system($cmd); +} + # Usage: read_config_file($file); sub read_config_file { my $file = shift; Index: etc/flamethrower.conf =================================================================== --- etc/flamethrower.conf (revision 55) +++ etc/flamethrower.conf (working copy) @@ -21,6 +21,12 @@ START_FLAMETHROWER_DAEMON = yes # +# Flamethrower transport to use. Currently supported transports are +# multicast (default) and bittorrent. +# +#TRANSPORT = bittorrent + +# # Port number where the Flamethrower configuration database can be # found on the Flamethrower server. (this is a udp-sender portbase # entry) @@ -297,7 +303,20 @@ # #TTL = 1 +# +# BITTORRENT TRANSPORT OPTIONS +# +# Limit upload rate for BitTorrent transport. Use in conjunction with +# BT_MAX_UPLOAD if you want to limit the upload rate. +# +#BT_LIMIT_UPLOAD = on +# +# Max upload rate for BitTorrent transport (in KB/s) +# +#BT_MAX_UPLOAD = 20 + + ################################################################################ # # MODULE SPECIFIC SETTINGS
Index: VERSION =================================================================== --- VERSION (revision 3389) +++ VERSION (working copy) @@ -1 +1 @@ -3.6.0 +3.8.0bt Index: systemimager.spec =================================================================== --- systemimager.spec (revision 3389) +++ systemimager.spec (working copy) @@ -181,6 +181,7 @@ URL: http://systemimager.org/ Distribution: System Installation Suite Obsoletes: systemimager-%{_build_arch}boot +BuildRequires: curl-devel Requires: systemimager-server >= %{version} AutoReqProv: no @@ -214,6 +215,7 @@ URL: http://systemimager.org/ Distribution: System Installation Suite Obsoletes: systemimager-%{_build_arch}initrd_template +BuildRequires: curl-devel Requires: systemimager-client >= %{version} AutoReqProv: no Index: initrd_source/make.d/bittorrent.rul =================================================================== --- initrd_source/make.d/bittorrent.rul (revision 0) +++ initrd_source/make.d/bittorrent.rul (revision 0) @@ -0,0 +1,38 @@ +# +# $Id$ +# +# http://sourceforge.net/projects/libbt +# +BT_VERSION = 1.05 +BT_TARBALL = libbt-$(BT_VERSION).tar.gz +BT_URL = http://easynews.dl.sourceforge.net/sourceforge/libbt/$(BT_TARBALL) +#BT_URL = http://download.systemimager.org/pub/bt/$(BT_TARBALL) +BT_DIR = libbt-$(BT_VERSION) +BT_BINARY = $(INITRD_SRC_DIR)/$(BT_DIR)/src/btget +BT_PATCHES = $(shell ls $(INITRD_PATCH_DIR)/bittorrent.*.patch 2>/dev/null | sort) + +ALL_SOURCE += $(INITRD_SRC_DIR)/$(BT_TARBALL) + +PHONY += bittorrent +libbt: $(BT_BINARY) + +$(BT_BINARY): $(INITRD_SRC_DIR)/$(BT_TARBALL) $(BT_PATCHES) \ + $(UCLIBC_TARGET) + rm -rf $(INITRD_SRC_DIR)/$(BT_DIR) + cd $(INITRD_SRC_DIR) && tar -xvzf $(BT_TARBALL) + + cd $(INITRD_SRC_DIR)/$(BT_DIR) && \ + cat $(BT_PATCHES) < /dev/null | patch -p1 + cd $(INITRD_SRC_DIR)/$(BT_DIR) && \ + ./configure PATH=$(INITRD_BUILD_PATH) + cd $(INITRD_SRC_DIR)/$(BT_DIR)/src && \ + $(MAKE) static + +$(INITRD_SRC_DIR)/$(BT_TARBALL): + [ -d $(INITRD_SRC_DIR) ] || mkdir -p $(INITRD_SRC_DIR) + $(GETSOURCE) $(BT_URL) $(INITRD_SRC_DIR) + +PHONY += bittorrent_clean +bittorrent_clean: + rm -rf $(INITRD_SRC_DIR)/$(BT_DIR) + Index: initrd_source/patches/bittorrent.btget-timeout.patch =================================================================== --- initrd_source/patches/bittorrent.btget-timeout.patch (revision 0) +++ initrd_source/patches/bittorrent.btget-timeout.patch (revision 0) @@ -0,0 +1,23 @@ +--- libbt-1.05/src/btget.c.orig 2005-12-09 15:50:12.000000000 -0800 ++++ libbt-1.05/src/btget.c 2005-12-29 18:49:39.000000000 -0800 +@@ -601,11 +601,10 @@ + } + } + +-#if 0 + if (optquiettmo > 0) { + static int lastcheck = 0; + static int donetime = 0; +- int check = (ctx->complete == 1) && peer_allcomplete( &ctx->downloads[0]->peerset); ++ int check = (complt == ctx->downloads[0]->fileset.npieces ) && peer_allcomplete( &ctx->downloads[0]->peerset); + if (check) { + if (!lastcheck) { + printf("=== All peers done!\n"); +@@ -619,7 +618,6 @@ + } + lastcheck = check; + } +-#endif + } + + return 0; Index: initrd_source/initrd.rul =================================================================== --- initrd_source/initrd.rul (revision 3389) +++ initrd_source/initrd.rul (working copy) @@ -109,6 +109,7 @@ build_dir: $(INITRD_DIR)/build_dir-stamp $(INITRD_DIR)/build_dir-stamp: $(SKEL_FILES) \ + $(BT_BINARY) \ $(BUSYBOX_BINARY) \ $(DEVFSD_BINARY) \ $(DHCLIENT_BINARY) \ @@ -136,6 +137,7 @@ # Copy over other binaries. cp -a $(DEVFSD_BINARY) $(INITRD_BUILD_DIR)/sbin cp -a $(DHCLIENT_BINARY) $(INITRD_BUILD_DIR)/sbin + cp -a $(BT_BINARY) $(INITRD_BUILD_DIR)/bin cp -a $(RSYNC_BINARY) $(INITRD_BUILD_DIR)/bin cp -a $(UDPCAST_BINARY) $(INITRD_BUILD_DIR)/bin Index: initrd_source/skel/etc/init.d/functions =================================================================== --- initrd_source/skel/etc/init.d/functions (revision 3389) +++ initrd_source/skel/etc/init.d/functions (working copy) @@ -188,6 +188,8 @@ echo "MONITOR_SERVER=$MONITOR_SERVER" >> /tmp/variables.txt echo "MONITOR_PORT=$MONITOR_PORT" >> /tmp/variables.txt + echo "TRANSPORT=$TRANSPORT" >> /tmp/variables.txt + echo "FLAMETHROWER_STAGING=$FLAMETHROWER_STAGING" >> /tmp/variables.txt } # ################################################################################ @@ -260,7 +262,7 @@ COUNT="$RETRY" logmsg "Killing off running processes." kill -9 $TMPFS_WATCHER_PID >/dev/null 2>/dev/null - killall -9 udp-receiver rsync >/dev/null 2>/dev/null + killall -9 btget udp-receiver rsync >/dev/null 2>/dev/null write_variables cat /etc/issue if [ ! -z $USELOGGER ] ; @@ -362,25 +364,34 @@ flamethrower_client() { if [ ! -z $FLAMETHROWER_TARPIPE ]; then - FLAMETHROWER_TARPIPE=tarpipe + FLAMETHROWER_TARPIPE=tarpipe fi + + # Stage to /tmp (tmpfs) unless otherwise specified + if [ -z $FLAMETHROWER_STAGING]; then + FLAMETHROWER_STAGING=/tmp + fi + logmsg - logmsg "flamethrower_client(${MODULE_NAME}) $FLAMETHROWER_TARPIPE " - logmsg --------------------------------------------------------------------- + logmsg "flamethrower_client(${MODULE_NAME}) $FLAMETHROWER_TARPIPE $FLAMETHROWER_STAGING" + logmsg --------------------------------------------------------------------------------- - # validate - if [ -z $PORTBASE ]; then - if [ -f ${FLAMETHROWER_DIRECTORY_DIR}/${MODULE_NAME} ]; then - . ${FLAMETHROWER_DIRECTORY_DIR}/${MODULE_NAME} - else - logmsg WARNING WARNING WARNING WARNING WARNING - logmsg You must either set PORTBASE, or have a sourceable file called - logmsg ${FLAMETHROWER_DIRECTORY_DIR}/MODULE_NAME - # allow for now to continue until overrides get their modules - return - #shellout + if [ -z $TRANSPORT ]; then + # validate for multicast transport + if [ -z $PORTBASE ]; then + if [ -f ${FLAMETHROWER_DIRECTORY_DIR}/${MODULE_NAME} ]; then + . ${FLAMETHROWER_DIRECTORY_DIR}/${MODULE_NAME} + else + logmsg WARNING WARNING WARNING WARNING WARNING + logmsg You must either set PORTBASE, or have a sourceable file called + logmsg ${FLAMETHROWER_DIRECTORY_DIR}/MODULE_NAME + # allow for now to continue until overrides get their modules + return + #shellout + fi fi fi + if [ -z $DIR ]; then logmsg "Must set DIR !!!" shellout @@ -388,20 +399,22 @@ mkdir -p $DIR fi - # build command - UDP_RECEIVER_OPTIONS="--interface ${DEVICE} --portbase $PORTBASE --nokbd" - if [ ! -z $TTL ]; then - UDP_RECEIVER_OPTIONS="$UDP_RECEIVER_OPTIONS --ttl $TTL" + if [ -z $TRANSPORT ]; then + # build command for multicast transport + UDP_RECEIVER_OPTIONS="--interface ${DEVICE} --portbase $PORTBASE --nokbd" + if [ ! -z $TTL ]; then + UDP_RECEIVER_OPTIONS="$UDP_RECEIVER_OPTIONS --ttl $TTL" + fi + if [ "$NOSYNC" = "on" ]; then + UDP_RECEIVER_OPTIONS="$UDP_RECEIVER_OPTIONS --nosync" + fi + if [ "$ASYNC" = "on" ]; then + UDP_RECEIVER_OPTIONS="$UDP_RECEIVER_OPTIONS --async" + fi + if [ ! -z $MCAST_ALL_ADDR ]; then + UDP_RECEIVER_OPTIONS="$UDP_RECEIVER_OPTIONS --mcast-all-addr $MCAST_ALL_ADDR" + fi fi - if [ "$NOSYNC" = "on" ]; then - UDP_RECEIVER_OPTIONS="$UDP_RECEIVER_OPTIONS --nosync" - fi - if [ "$ASYNC" = "on" ]; then - UDP_RECEIVER_OPTIONS="$UDP_RECEIVER_OPTIONS --async" - fi - if [ ! -z $MCAST_ALL_ADDR ]; then - UDP_RECEIVER_OPTIONS="$UDP_RECEIVER_OPTIONS --mcast-all-addr $MCAST_ALL_ADDR" - fi # Which tar opts should we use? If our tar has --overwrite capability, use it. # Summary: busybox tar doesn't (boel_binaries and prior). @@ -430,18 +443,26 @@ TAR_EXIT_STATUS=$? UDP_RECEIVER_EXIT_STATUS=0 else - logmsg udp-receiver $UDP_RECEIVER_OPTIONS --file /tmp/multicast.tar - udp-receiver $UDP_RECEIVER_OPTIONS --file /tmp/multicast.tar + if [ -z $TRANSPORT ]; then + logmsg udp-receiver $UDP_RECEIVER_OPTIONS --file $FLAMETHROWER_STAGING/multicast.tar + udp-receiver $UDP_RECEIVER_OPTIONS --file $FLAMETHROWER_STAGING/multicast.tar + else + logmsg "cd $FLAMETHROWER_STAGING && btget -q 1 -u http://$IMAGESERVER/torrents/${MODULE_NAME}.torrent" + cd $FLAMETHROWER_STAGING && btget -q 1 -u http://$IMAGESERVER/torrents/${MODULE_NAME}.torrent + fi UDP_RECEIVER_EXIT_STATUS=$? # untar it if [ "$UDP_RECEIVER_EXIT_STATUS" = "0" ]; then - logmsg tar ${TAR_OPTS} -f /tmp/multicast.tar -C ${DIR} - tar ${TAR_OPTS} -f /tmp/multicast.tar -C ${DIR} + if [ ! -z $TRANSPORT ]; then + mv $FLAMETHROWER_STAGING/${MODULE_NAME}.tar $FLAMETHROWER_STAGING/multicast.tar + fi + logmsg tar ${TAR_OPTS} -f $FLAMETHROWER_STAGING/multicast.tar -C ${DIR} + tar ${TAR_OPTS} -f $FLAMETHROWER_STAGING/multicast.tar -C ${DIR} TAR_EXIT_STATUS=$? fi # discard used tarball like an old sock (recommended by: Ramon Bastiaans <[EMAIL PROTECTED]>) - rm -f /tmp/multicast.tar + rm -f $FLAMETHROWER_STAGING/multicast.tar fi # did everything work properly @@ -481,6 +502,8 @@ unset TAR_OPTS unset SUCCESS unset FLAMETHROWER_TARPIPE + unset TRANSPORT + unset FLAMETHROWER_STAGING } # Index: initrd_source/skel/etc/dhclient-script.systemimager-prefix =================================================================== --- initrd_source/skel/etc/dhclient-script.systemimager-prefix (revision 3389) +++ initrd_source/skel/etc/dhclient-script.systemimager-prefix (working copy) @@ -18,6 +18,7 @@ # option-142 -> SSH_DOWNLOAD_URL # option-143 -> FLAMETHROWER_DIRECTORY_PORTBASE # option-144 -> TMPFS_STAGING +# option-145 -> TRANSPORT # option-208 -> SSH_DOWNLOAD_URL (depricated) # @@ -65,7 +66,7 @@ echo "TMPFS_STAGING=$new_option_144" >> $FILE echo "GATEWAY=$new_routers" >> $FILE echo "GATEWAYDEV=$interface" >> $FILE - +echo "TRANSPORT=$new_option_145" >> $FILE ################################################################################ # Index: initrd_source/skel/etc/dhclient.conf =================================================================== --- initrd_source/skel/etc/dhclient.conf (revision 3389) +++ initrd_source/skel/etc/dhclient.conf (working copy) @@ -14,6 +14,7 @@ # option-142 -> SSH_DOWNLOAD_URL # option-143 -> FLAMETHROWER_DIRECTORY_PORTBASE # option-144 -> TMPFS_STAGING +# option-145 -> TRANSPORT # option-208 -> SSH_DOWNLOAD_URL (depricated) # @@ -24,6 +25,7 @@ option-142, option-143, option-144, + option-145, option-208, subnet-mask, broadcast-address, Index: etc/flamethrower.conf =================================================================== --- etc/flamethrower.conf (revision 3389) +++ etc/flamethrower.conf (working copy) @@ -22,6 +22,12 @@ START_FLAMETHROWER_DAEMON = yes # +# Flamethrower transport to use. Currently supported transports are +# multicast (default) and bittorrent. +# +TRANSPORT = bittorrent + +# # Port number where the Flamethrower configuration database can be # found on the Flamethrower server. (this is a udp-sender portbase # entry) @@ -298,7 +304,20 @@ # #TTL = 1 +# +# BITTORRENT TRANSPORT OPTIONS +# +# Limit upload rate for BitTorrent transport. Use in conjunction with +# BT_MAX_UPLOAD if you want to limit the upload rate. +# +#BT_LIMIT_UPLOAD = on +# +# Max upload rate for BitTorrent transport (in KB/s) +# +#BT_MAX_UPLOAD = 20 + + ################################################################################ # # MODULE SPECIFIC SETTINGS Index: etc/init.d/systemimager-server-flamethrowerd =================================================================== --- etc/init.d/systemimager-server-flamethrowerd (revision 3389) +++ etc/init.d/systemimager-server-flamethrowerd (working copy) @@ -34,7 +34,12 @@ for PID_FILE in `ls ${STATE_DIR}/*` do if [ -f $PID_FILE ]; then - kill -9 `cat $PID_FILE` + PID=`cat $PID_FILE` + CPID=`ps -o pid= --ppid $PID` + kill -9 $PID + if [ ! -z $CPID ]; then + kill -9 $CPID + fi rm -f $PID_FILE echo -n "." fi Index: etc/autoinstallscript.template =================================================================== --- etc/autoinstallscript.template (revision 3389) +++ etc/autoinstallscript.template (working copy) @@ -213,6 +213,14 @@ RETRY=7 FLAMETHROWER_TARPIPE=y flamethrower_client +elif [ ! -z $TRANSPORT ]; then + + # Use BitTorrent transport + MODULE_NAME="${IMAGENAME}" + DIR=/a + RETRY=3 + FLAMETHROWER_STAGING=/a/tmp + flamethrower_client else # Use rsync if [ $NO_LISTING ]; then @@ -274,7 +282,7 @@ MODULE_NAME="override_${OVERRIDE}" DIR=/a RETRY=7 - FLAMETHROWER_TARPIPE=y + #FLAMETHROWER_TARPIPE=y flamethrower_client else # Use rsync Index: Makefile =================================================================== --- Makefile (revision 3389) +++ Makefile (working copy) @@ -477,6 +477,7 @@ $(BOEL_BINARIES_TARBALL): \ $(BC_BINARY) \ + $(BT_BINARY) \ $(TAR_BINARY) \ $(GZIP_BINARY) \ $(DISCOVER_BINARY) \ @@ -488,7 +489,6 @@ $(PARTED_BINARY) \ $(UTIL_LINUX_BINARIES) \ $(RAIDTOOLS_BINARIES) \ - $(MDADM_BINARIES) \ $(MKREISERFS_BINARY) \ $(MKJFS_BINARY) \ $(MKXFS_BINARY) \ @@ -506,6 +506,7 @@ mkdir -m 755 -p $(BOEL_BINARIES_DIR)/sbin mkdir -m 755 -p $(BOEL_BINARIES_DIR)/etc/ssh install -m 755 --strip $(BC_BINARY) $(BOEL_BINARIES_DIR)/bin/ + install -m 755 --strip $(BT_BINARY) $(BOEL_BINARIES_DIR)/bin/ install -m 755 --strip $(TAR_BINARY) $(BOEL_BINARIES_DIR)/bin/ install -m 755 --strip $(GZIP_BINARY) $(BOEL_BINARIES_DIR)/bin/ install -m 755 --strip $(DISCOVER_BINARY) $(BOEL_BINARIES_DIR)/sbin/ @@ -517,8 +518,6 @@ install -m 755 --strip $(UTIL_LINUX_BINARIES) $(BOEL_BINARIES_DIR)/sbin/ install -m 755 --strip $(RAIDTOOLS_BINARIES) $(BOEL_BINARIES_DIR)/sbin/ cd $(BOEL_BINARIES_DIR)/sbin/ && ln -f raidstart raidstop - #EF: mdadm will replace raidtools - install -m 755 --strip $(MDADM_BINARIES) $(BOEL_BINARIES_DIR)/sbin/ install -m 755 --strip $(MKREISERFS_BINARY) $(BOEL_BINARIES_DIR)/sbin/ install -m 755 --strip $(MKJFS_BINARY) $(BOEL_BINARIES_DIR)/sbin/ install -m 755 --strip $(OPENSSH_BINARIES) $(BOEL_BINARIES_DIR)/sbin/