From: Antony Messerli Date: Fri, 15 Aug 2014 14:44:11 +0000 (-0500) Subject: Adds bittorrent support for live images X-Git-Tag: 039~32 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=338bad63937eb48be2503c3991f88f05c750deeb;p=thirdparty%2Fdracut.git Adds bittorrent support for live images This patch adds bittorrent support to 45url-lib for those that might want to retrieve the same live image for multiple systems at once without saturating the network. This patch requires ctorrent to be installed into initramfs. Torrent kernel command line format: root=live:torrent://example.com/liveboot.img.torrent Start a tracker: bttrack --bind --port 6969 --dfile dstate --reannounce_interval 60 Create the torrent: ctorrent -t live_image -u http://:6969/announce -s live_image.torrent Seed the initial torrent: ctorrent live_image.torrent Boot the live image. --- diff --git a/dracut.cmdline.7.asc b/dracut.cmdline.7.asc index 545bab429..2c7fd91f7 100644 --- a/dracut.cmdline.7.asc +++ b/dracut.cmdline.7.asc @@ -790,13 +790,14 @@ of your compressed filesystem image tarball. ===================== **root=**live:____:: -Boots a live image retrieved from ____. Valid handlers: __http, httpd, ftp, tftp__. +Boots a live image retrieved from ____. Valid handlers: __http, https, ftp, torrent, tftp__. + [listing] .Example -- root=live:http://example.com/liveboot.img root=live:ftp://ftp.example.com/liveboot.img +root=live:torrent://example.com/liveboot.img.torrent -- **rd.live.debug=**1:: diff --git a/modules.d/45url-lib/module-setup.sh b/modules.d/45url-lib/module-setup.sh index 1b785c242..c87f71862 100755 --- a/modules.d/45url-lib/module-setup.sh +++ b/modules.d/45url-lib/module-setup.sh @@ -17,6 +17,7 @@ depends() { install() { local _dir _crt _found _lib inst_simple "$moddir/url-lib.sh" "/lib/url-lib.sh" + inst_multiple -o ctorrent inst_multiple curl # also install libs for curl https inst_libdir_file "libnsspem.so*" diff --git a/modules.d/45url-lib/url-lib.sh b/modules.d/45url-lib/url-lib.sh index c9d143a28..d9cebd4dd 100755 --- a/modules.d/45url-lib/url-lib.sh +++ b/modules.d/45url-lib/url-lib.sh @@ -82,6 +82,36 @@ set_http_header() { echo "header = \"$1: $2\"" >> $CURL_HOME/.curlrc } +### TORRENT ########################################################## + +ctorrent_args="-E 0 -e 0" + +ctorrent_fetch_url() { + local url="$1" outloc="$2" + url=${url#*//} + torrent_outloc="$outloc.torrent" + echo "$url" > /proc/self/fd/0 + if [ -n "$outloc" ]; then + curl $curl_args --output - -- "$url" > "$torrent_outloc" || return $? + else + local outdir="$(mkuniqdir /tmp torrent_fetch_url)" + ( cd "$outdir"; curl $curl_args --remote-name "$url" || return $? ) + torrent_outloc="$outdir/$(ls -A $outdir)" + outloc=${torrent_outloc%.*} + fi + if ! [ -f "$torrent_outloc" ]; then + warn "Downloading '$url' failed!" + return 253 + fi + ctorrent $ctorrent_args -s $outloc $torrent_outloc >&2 + if ! [ -f "$outloc" ]; then + warn "Torrent download of '$url' failed!" + return 253 + fi + if [ -z "$2" ]; then echo "$outloc" ; fi +} +add_url_handler ctorrent_fetch_url torrent + ### NFS ############################################################## [ -e /lib/nfs-lib.sh ] && . /lib/nfs-lib.sh