服务器 频道

在FreeBSD 5.4/OpenBSD上安装BT Server

  【IT168 服务器学院】在FreeBSD 5.4上安装 BT Server

   Author : MichaelBibby ( michaelbibby # gmail.com )

   Date   : 2005.12.17

  软件BitTorrent同时提供了tracker和downloader工具,本文仅以FreeBSD 5.4和OpenBSD 3.8为例,讲述如何使用BitTorrent来做BT Server。

  关于BitTorrent,请访问它的官方主页:

          http://www.bittorrent.com/

  另:在阅读本文前,强烈建议看完官方的文档 -- ‘File Server''s Guide'':

          http://www.bittorrent.com/guide.html

  CODE:[Copy to clipboard]内容:

          1:安装BitTorrent;

          2:使用bttrack.py、btdownload*.py、btmaketorrent.py ;

          3:修改bttrack.py,获取PID并将其写入''/var/run/bttrack.pid'';

          4:添加''/usr/local/etc/rc.d/bttrack.sh''脚本(仅适用于FB);

          5:修改/etc/rc.conf,为bttrack.sh添加entry(仅适用于FB);

          6:在OB中修改''/etc/rc*'',为''bttrack''添加entry;

  详细步骤:

  1:安装BitTorrent;

  BitTorrent已经包含在FB的ports/目录树中,可以通过ports安装,也可以通过''pkg_add -r''来安装预编译好的二进制包。port的具体位置是:

          /usr/ports/net/py-bittorrent

  如果不修改Makefile的话,默认会装上很多东西,比如cario、pygtk等等,有些可能是你不需要的,那就自动动手吧。

  OpenBSD中安装的BitTorrent比较干净,只安装几个基本的依赖包。Port的具体位置是:

          /usr/local/net/BitTorrent

  安装好后,bttrack.py等工具都放在''/usr/local/bin/''下了。

  注:在OB中,这些工具都不带''.py''扩展名,使用的时候注意区分。以下的部分仅以在FB上的文件名为例。

  2:使用bttrack.py、btdownload*.py、btmaketorrent.py ;

  2.1:使用''/usr/local/bin/bttrack.py''做为Tracker;

  一般的用法是:

  CODE:[Copy to clipboard]        # bttrack.py --port 6969 \

                                  --dfile /var/log/bttrack/dlinfo \

                                  --allowed_dir /home/torrents \

                                  --show_infopage 0 \

                                  --logfile /var/log/bttrack/bttrack.log

                                 

  这里只是加入了几个常用的参数,更多的参数可以通过不带参数的''bttrack.py''命令执行得到。

  简单解释一下几个参数的含义:

  CODE:[Copy to clipboard]        --port 6969

                  表示bttrack运行在6969端口。所以在做防火墙规则的时候要注意打开它。

          --dfile /var/log/bttrack/dlinfo

                  表示将当前下载信息存储在''/var/log/bttrack/dlinfo''文件中。

          --allowed_dir /home/torrents

                  表示在服务器上只允许该目录下的''torrent''文件连接BT Tracker。非该

                  目录的种子文件在下载时会报错。

          --show_infopage 0

                  表示是否打开info页面。也就是在访问服务器的6969端口时能否看到

                  Tracker的当前信息。

          --logfile /var/log/bttrack/bttrack.log

                  表示将Tracker的日志信息写入        ''/var/log/bttrack/bttrack.log''中。

                 

  2.2:使用''btdownload*.py''上传/下载;

  btdownload*.py实际上指的是两个下载工具:

          /usr/local/bin/btdownloadheadless.py

          /usr/local/bin/btdownloadcurses.py

  这两个工具的参数都是一样的,只是界面不一样而已(具体的细节,大家一用便知):

  CODE:[Copy to clipboard]        $ btdownloadcurses.py --max_upload_rate 0 file.torrent

  这是btdownloadheadless.py下载时的截图:

  btdownloadheadless.py 默认是每隔0.5秒便滚动一则信息,图片中内容就表示完整的一则信息。可以通过''--display_interval <arg>''来指定间隔的时间。如果通过SSH连接上远程服务器使用这个命令,间隔的时间越短,就需要传送越多的数据信息,从服务器传到你机器上的网络流量就越大。

  btdownloadcurses.py下载时的截图:

  btdownloadcurses.py在下载时不会象btdownloadheadless.py一样每隔一段时间就滚动显示一则信息,它只是动态地显示进度 ''progress''。所以在使用上,个人觉得更舒服些。

  这两个下载工具有一个比较重要的参数:''--max_upload_rate''。

  做为BT Server,上传给别人的数据当然要控制一下,太小了不行,太大了也需要考虑。默认的上传速率是20K/S。显然,做为服务器,这个数值是不合适的。

  设置为''0'',则表示不限制上传速率。

  2.3:使用''btlaunchmany*.py''上传/下载;

  除了''btdownload*.py'',BitTorrent还提供了另外两个下载上传程序:

          /usr/local/bin/btlaunchmay.py

          /usr/local/bin/btlaunchmaycurses.py

  ''btdownload*.py''在运行时只能使用一个torrent文件进行下载,而''btlaunchmany*.py''则可以指定使用某个目录下的所有torrent文件同时进行下载,显然,''btlaunchmany*.py''更适合在服务器上使用。''btlaunchmany*.py''使用的参数与''btdownload*.py''基本相同。

  这是''btlaunchmanycurses.py''在下载时的截图:

  2.4:使用''btmaketorrent.py''制作torrent文件;

  实际上,BitTorrent也提供了''btmaketorrentgui.py''工具,这是一个btmaketorrent.py的GUI实现,使制作torrent文件更为直观。但是考虑到服务器上没有安装X-Window,所以这里将它略去不提。

  最简单和常用的使用是:

  CODE:[Copy to clipboard]        $ btmaketorrent.py [url]http://btfans.3322.org:8080/announce[/url] file

  这里的''http://btfans.3322.org:8080/announce''表示BT服务器的Tracker地址,也就是通常所说的''announce url''。

  强烈建议在制作torrent时,使用域名做为''announce url'',而不是IP。

  这里的''file'',可以是一个文件,也可以是以空格隔开的几个文件,还可以是一个目录。

  另外,btmaketorrent.py还提供了四个选项。其中这两个最常用到:

  CODE:[Copy to clipboard]        --target <arg>

                  <arg>是指生成的torrent文件的名称。

          --filesystem_encoding <arg>

                  <arg>指的是文件的字符编码。如果为空的话,会进行自动检测。但是如果使

                  用的是2.3版本以下的python则无法进行自动检测。

                 

  3:修改bttrack.py,获取PID并将其写入''/var/run/bttrack.pid'';

  为了使bttrack.py能象apache、mysql一样,在系统启动时做为一个daemon程序自动执行,我修改了''/usr/local/bin/bttrack.py''文件,并写了''/usr/local/etc/rc.d/bttrack.sh''文件来实现这一功能。修改''/usr/local/bin/bttrack.py''文件是为了获得bttrack.py启动之后的PID,并将PID写入''/var/run/bttrack.pid''文件中,这样便于停止bttrack。

  原始的''/usr/local/bin/bttrack.py''文件后半部分是这样的:

  CODE:[Copy to clipboard]        from sys import argv

          from BitTorrent.track import track

          if __name__ == ''__main__'':

                track(argv[1:])

  修改后是这样的:

  CODE:[Copy to clipboard]        from sys import argv

          from BitTorrent.track import track

          import os

          if __name__ == ''__main__'':

                  file(''/var/run/bttrack.pid'', ''w'').write(str(os.getpid()))

                  track(argv[1:])

                 

  修改的时候一定要注意缩进代码,否则会出现错误。

  在此要特别感谢CU Python版的''limodou''大哥,是他帮忙搞定了获取PID并将其写入到某个文件的。

  4:添加''/usr/local/etc/rc.d/bttrack.sh''脚本(仅适用于FB);

  该脚本使用''bash’作为语法解释shell。

  在不传递参数的情况下,默认行为是启动bttrack。另外,象大多数rc脚本一样,可以向该脚本传递两个参数:

          start | stop

  ----------- Script : /usr/local/etc/rc.d/bttrack.sh ------------

  CODE:[Copy to clipboard]#!/usr/local/bin/bash

  # Author  : MichaelBibby ( michaelbibby # gmail.com )

  # Date    : 2005/12/15

  # Purpose : To start ''/usr/local/bin/bttrack.py'' at system startup.

  BTTRACK=''/usr/local/bin/bttrack.py''

  BTTRACK_ARGS=''--port 6969 --dfile /var/log/bttrack/dlinfo --allowed_dir /home/torrents --show_infopage 0 --logfile /var/log/bttrack/
bttrack.log''

  BTTRACK_PID_FILE=''/var/run/bttrack.pid''

  BTTRACK_PID=$(cat $BTTRACK_PID_FILE)

  function USAGE()

  {

          echo -e "\n\t Usage : $0 [start|stop]"

  }

  # ---- Main ------

  if [ X$# == X0 ]

  then

          $BTTRACK $BTTRACK_ARGS &

  elif [ X$# == X1 ]

  then

          case $1 in

                  start) echo -ne "Starting BT tracker ..."

                  $BTTRACK $BTTRACK_ARGS &

                  echo -ne "\t Done."

                  ;;

                  stop) echo -ne "Stop BT tracker ..."

                  kill $BTTRACK_PID

                  echo -ne "\t Done."

                  ;;

                  *) USAGE

                  ;;

          esac

  else

          USAGE

  fi

  # ----- Done ----

  -------------- End Script : /usr/local/etc/rc.d/bttrack.sh -------------

  5:修改''/etc/rc.conf'',为''bttrack.sh''添加entry(仅适用于FB);

  为了在系统启动时执行bttrack,在添加了''/usr/local/etc/rc.d/bttrack.sh''脚本后,还需要在''/etc/rc.conf''中为它添加一个entry:

  CODE:[Copy to clipboard]        bttrack_enable=”YES”

  这样,在FB上架设的BT Server就OK了。

  下面说说在OpenBSD上架设时的一些小区别。

  6:在OB中修改''/etc/rc*'',为''bttrack''添加entry;

  显然,上面的第4和5步在OB上不适用,因为OB没有''/usr/local/etc/rc.d/''目录用于存放启动脚本。所以这里说说如何修改''/etc/rc*''。

  所有系统启动时需要执行的服务都在''/etc/rc.conf''中定义了entry,然后在''/etc/rc''中定义了具体的操作。用户自定义的系统服务,最好都写在''/etc/rc.local''和''/etc/rc.conf.local''(该脚本若是不存在,可自行创建)中。

  下面就为bttrack添加entry:

  在''/etc/rc.conf.local''中添加一行:

  CODE:[Copy to clipboard]        bttrack_flags="--port 6969 --dfile /var/log/bttrack/dlinfo --allowed_dir /home/torrents --show_infopage 0 --logfile /var/log/bttrack/bttrack.log"

  变量''bttrack_flags''实际上就是在执行''/usr/local/bin/bttrack''时使用的参数。

  设置好了entry后,还需要在''/etc/rc.local''中定义对这个变量的具体操作。在''/etc/rc.local''中添加以下几行:

  CODE:[Copy to clipboard]        if [ X"${bttrack_flags}" != X"NO" ]; then

                  echo ''starting bttrack ...''

                  /usr/local/bin/bttrack ${bttrack_flags}

          fi

  这样,系统在启动的时候便会执行''/usr/local/bin/bttrack''了。

  如果不希望在系统启动时执行,可简单地将''/etc/rc.conf.local''中''bttrack_flags''的值设置为''NO'':

  CODE:[Copy to clipboard]        bttrack_flags=”NO”

  至于第5步中的脚本,你可以复制并保存之后放在你希望的某个地方,这样便于启动和终止bttrack。

  OK,在FB/OB上架设BT Server的过程就这样了。

  Enjoy ...

  


   

  


   

  


   
  

0
相关文章