QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1473|回复: 7

偶用BitTorrent架好BT服务器了

[复制链接]
发表于 2005-12-17 11:33:48 | 显示全部楼层 |阅读模式
注:本文已经增加了一小部分内容,但因为论坛上修改帖子的排版比较不方便,所以制作成了PDF文档,大家可以下载了再看。该页文档不再更新,只更新附件中的PDF文档(如果还有内容要增删的话)。

PDF文档最后更新时间:2005.12.17

注:由于夜话上传附件大小的限制,PDF文件上传不了,大家到CU论坛上下载吧。附件是OpenOffice制作的odt文档,如果你装了OO,也可以直接下载它:
http://bbs.chinaunix.net/viewthread.php?tid=670780

或者从bsdchina下载:
http://www.bsdchina.org/articles/openbsd/bibby/bt_server_bibby-2005.12.17.pdf


在 FreeBSD 5.4/OpenBSD 3.8 上安装 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:1]
内容:
        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;
[/code:1]
详细步骤:

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:1]
        # bttrack.py --port 6969 \
    --dfile /var/log/bttrack/dlinfo \
    --allowed_dir /home/torrents \
    --show_infopage 0 \
    --logfile /var/log/bttrack/bttrack.log
[/code:1]
这里只是加入了几个常用的参数,更多的参数可以通过不带参数的'bttrack.py'命令执行得到。

简单解释一下几个参数的含义:
[code:1]
        --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'中。
[/code:1]
2.2:使用'btdownload*.py'上传/下载;

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

        /usr/local/bin/btdownloadheadless.py
        /usr/local/bin/btdownloadcurses.py

这两个工具的参数都是一样的,只是界面不一样而已(具体的细节,大家一用便知):
[code:1]
        $ btdownloadcurses.py --max_upload_rate 0 file.torrent
[/code:1]
这是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:1]
        $ btmaketorrent.py http://btfans.3322.org:8080/announce file
[/code:1]
这里的'http://btfans.3322.org:8080/announce'表示BT服务器的Tracker地址,也就是通常所说的'announce url'。
强烈建议在制作torrent时,使用域名做为'announce url',而不是IP。

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

另外,btmaketorrent.py还提供了四个选项。其中这两个最常用到:
[code:1]
        --target <arg>
  <arg>是指生成的torrent文件的名称。
        --filesystem_encoding <arg>
  <arg>指的是文件的字符编码。如果为空的话,会进行自动检测。但是如果使
  用的是2.3版本以下的python则无法进行自动检测。
[/code:1]
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:1]
        from sys import argv
        from BitTorrent.track import track

        if __name__ == '__main__':
              track(argv[1:])
[/code:1]
修改后是这样的:
[code:1]
        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:])
[/code: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:1]
#!/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 ----
[/code:1]
-------------- 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:1]
        bttrack_enable=”YES”
[/code:1]
这样,在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:1]
        bttrack_flags="--port 6969 --dfile /var/log/bttrack/dlinfo --allowed_dir /home/torrents --show_infopage 0 --logfile /var/log/bttrack/bttrack.log"
[/code:1]
变量'bttrack_flags'实际上就是在执行'/usr/local/bin/bttrack'时使用的参数。

设置好了entry后,还需要在'/etc/rc.local'中定义对这个变量的具体操作。在'/etc/rc.local'中添加以下几行:
[code:1]
        if [ X"${bttrack_flags}" != X"NO" ]; then
  echo 'starting bttrack ...'
  /usr/local/bin/bttrack ${bttrack_flags}
        fi
[/code:1]
这样,系统在启动的时候便会执行'/usr/local/bin/bttrack'了。
如果不希望在系统启动时执行,可简单地将'/etc/rc.conf.local'中'bttrack_flags'的值设置为'NO':
[code:1]
        bttrack_flags=”NO”
[/code:1]
至于第5步中的脚本,你可以复制并保存之后放在你希望的某个地方,这样便于启动和终止bttrack。

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

Enjoy ...
发表于 2005-12-17 12:12:18 | 显示全部楼层
这个该放到服务器版吧
回复

使用道具 举报

 楼主| 发表于 2005-12-17 12:30:04 | 显示全部楼层
[quote:42cbe0a9f3="hew"]这个该放到服务器版吧[/quote]呵呵,因为是在BSD上做的,不知道放哪好
虽然说软件是一样的
回复

使用道具 举报

发表于 2005-12-17 13:25:23 | 显示全部楼层
关键是有一个类似bnbt的前端
回复

使用道具 举报

 楼主| 发表于 2005-12-17 14:21:28 | 显示全部楼层
[quote:ad49c2a53e="cnhnln"]关键是有一个类似bnbt的前端[/quote]没错
所以这个方案虽然能成功,但是不便于实施
被砍了

还是bnbt会方便些
回复

使用道具 举报

发表于 2005-12-17 21:39:32 | 显示全部楼层
我见有人卖商业的BT发布系统,94coolbt
回复

使用道具 举报

 楼主| 发表于 2005-12-19 23:52:26 | 显示全部楼层
[quote:64bb5efdde="cnhnln"]我见有人卖商业的BT发布系统,94coolbt[/quote]不错,那个客户也打算买一个
回复

使用道具 举报

发表于 2005-12-19 23:55:29 | 显示全部楼层
还有个BTMAS的BT发布系统

PS:94coolbt好像也与bnbt有些关系
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-3 00:34 , Processed in 0.058633 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表