0%

需求

所有使用非windows的用户在需要下载迅雷资源的时候,大概都有两种方法。其一,使用wine,装一个xunlei,然后下载资源;其二,利用离线下载,先下载到离线服务器上,然后利用http或ftp协议下载到本地。

为啥迅雷不开发一个linux版呢!(个人猜测,估计是怕linux里面的license吧)相信为啥没有linux版本,只有迅雷知道。

为了能让linux下载迅雷资源,做了如下调研。。。

thunder 地址解码

通常能看到的 thunder 地址,都是通过base64 encode 过的 http 或 ftp 地址。所以解码,也需要用base64

1
2
3
4
5
6
7
# base64 加密后的http 或 ftp 地址
thunder://QUFmdHA6Ly9keWdvZDE6ZHlnb2QxQGQxMzEuZHlnb2QuY246MzA0OS/pnZ7or5rli7/mibBEVkRzY3IvW+eUteW9seWkqeWggnd3dy5keWdvZC5jbl3pnZ7or5rli7/mibBjZDEucm12Ylpa

# 经过 base64 -d decode 之后
echo QUFmdHA6Ly9keWdvZDE6ZHlnb2QxQGQxMzEuZHlnb2QuY246MzA0OS/pnZ7or5rli7/mibBEVkRzY3IvW+eUteW9seWkqeWggnd3dy5keWdvZC5jbl3pnZ7or5rli7/mibBjZDEucm12Ylpa | base64 -d

AAftp://dygod1:dygod1@d131.dygod.cn:3049/非诚勿扰DVDscr/[电影天堂www.dygod.cn]非诚勿扰cd1.rmvbZZ%

看到了吧,去掉开头的“AA”,去掉结尾的“ZZ%”,就剩下了一个ftp地址,这个ftp地址,就是迅雷下载时使用的ftp地址。

迅雷资源下载

使用 wget 下载上文中的ftp资源

1
2
3
4
5
6
7
8
$ wget -v ftp://i:i@d3.dl1234.com:6958/\[电影天堂www.dy2018.com\]神战权力之眼BD中英双字.rmvb
--2016-05-25 14:58:52-- ftp://i:*password*@d3.dl1234.com:6958/[%E7%94%B5%E5%BD%B1%E5%A4%A9%E5%A0%82www.dy2018.com]%E7%A5%9E%E6%88%98%E6%9D%83%E5%8A%9B%E4%B9%8B%E7%9C%BCBD%E4%B8%AD%E8%8B%B1%E5%8F%8C%E5%AD%97.rmvb
=> ‘.listing’
Resolving d3.dl1234.com (d3.dl1234.com)... 218.93.205.139
Connecting to d3.dl1234.com (d3.dl1234.com)|218.93.205.139|:6958... failed: Connection refused.
--2016-05-25 14:58:52-- ftp://i:*password*@d3.dl1234.com:6958/[%E7%94%B5%E5%BD%B1%E5%A4%A9%E5%A0%82www.dy2018.com]%E7%A5%9E%E6%88%98%E6%9D%83%E5%8A%9B%E4%B9%8B%E7%9C%BCBD%E4%B8%AD%E8%8B%B1%E5%8F%8C%E5%AD%97.rmvb
=> ‘.listing’
Connecting to d3.dl1234.com (d3.dl1234.com)|218.93.205.139|:6958... failed: Connection refused.

结果被无情的 refused 了,后来又用别的ftp客户端尝试下载结果,依然失败。。。

痛定思痛,上网搜索了一下,有片文章的分析我觉得可能是正确的,其文如下:

”(我揣测)迅雷走的是P2SP,也就是先访问它的索引server,找到真实可用的ip。换句话说,这个URL仅仅起到一个资源标识符的作用,本身也许未必能直接用于下载。 所以说这个东西,不逆向官方客户端恐怕是没法搞的,因为不知道它和服务器之间的协议。“

结论

根据网友的分析,后续可以下载一个迅雷软件分析看看

参考&鸣谢

集成原理

1
2
3
4
5
6
7
8
9
+-----------+
| |
| |
| | +-- ISCSI SR ----+
| XenServer | +---------+ | | +------------+
| | ------> |SR Driver| -----+-- NFS SR ----+-----| XenCenter |
| | +---------+ | | +------------+
| | +-- RBD SR ----+
+-----------+ ( Fork ISCSI SR)

步骤

1. 搭建ceph J版集群

详细请见:

2. 调整ceph集群crush tunables与XenServer内核匹配

针对XenServer6.5,需要调整crush tunables 为 bobtail

1
ceph osd crush tunables bobtail

查看更改

1
ceph osd crush show-tunables

3. 创建ceph rbd块设备

  • 为了保证快设备可映射、可快照、可克隆,必须使用format 2
  • ceph J版必须指定feature 为 layering
  • 快设备名称必须使用uuid(不带“-”分隔)
1
2
uuidgen | sed 's/-//g'     # 生成无“-”分隔符的rbd名称
rbd create --size {size} {rbd名称} --image-feature layering

4. XenServer节点安装RBDSR patch

详细请见:
RBDSR README

5. 使用XenCenter创建SR

同上

注意

  • ceph J版 开始抛弃KRBD
  • ceph J版 tunables会引发集群告警“crush map has legacy tunables (require bobtail, min is firefly)”(可忽略)
  • 创建rbd快设备必须使用format 2 格式,否则不能正常映射(map)
  • ceph J版 rbd格式feature中只能包含layering,不能包含其他feature,否则不能正常映射(map)

参考&鸣谢

查看网卡

1
ip link

修改网卡配置

  • 修改配置文件ifcfg-{网卡名称}
    eg: /etc/sysconfig/network-scripts/ifcfg-eno16777736
1
2
3
4
5
ONBOOT=yes
IPADDR=192.168.1.234
GATEWAY=192.168.1.1
DNS1=202.96.64.68
DNS2=8.8.8.8
  • 修改resolv.conf
    eg: /etc/resolv.conf
    1
    2
    nameserver 202.96.64.68
    nameserver 8.8.8.8

重启network服务

重启network服务

1
service network restart

参考&鸣谢

例子

1
2
3
modprobe rbd
echo "192.168.1.234 name=admin,secret=AQAHzRBX77ORERAAqfW0YAqq8+ETXMqWtPKwkQ== rbd testrbd" > /sys/bus/rbd/add
echo 1 > /sys/bus/rbd/remove

如果你在执行echo时候提示参数错误,请现查看modinfo rbd看看里面的single_major默认值是否为false
eg:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ modinfo rbd
filename: /lib/modules/3.10.0-693.el7.x86_64/kernel/drivers/block/rbd.ko.xz
license: GPL
description: RADOS Block Device (RBD) driver
author: Jeff Garzik <jeff@garzik.org>
author: Yehuda Sadeh <yehuda@hq.newdream.net>
author: Sage Weil <sage@newdream.net>
author: Alex Elder <elder@inktank.com>
rhelversion: 7.4
srcversion: B41E51769EC95E3DBDB16AB
depends: libceph
intree: Y
vermagic: 3.10.0-693.el7.x86_64 SMP mod_unload modversions
signer: CentOS Linux kernel signing key
sig_key: DA:18:7D:CA:7D:BE:53:AB:05:BD:13:BD:0C:4E:21:F4:22:B6:A4:9C
sig_hashalgo: sha256
parm: single_major:Use a single major number for all rbd devices (default: false) (bool)

如果single_major默认值为ture,那么在加载rbd模块时,需要将single_major设置成false
eg:

1
modprobe rbd single_major=0

然后在重新执行echo

解释

  • 192.168.1.234 为 Monitor 地址
  • name,制定使用的用户,可通过“ceph auth list” 查看
  • secret,name制定用户所对应的 key 值
  • rbd,制定需要映射的块设备(该快设备必须是已经创建好的)
  • 使用客户端内核必须支持rbd.ko这个内核模块
  • 1, 设备ID,用于去映射

参考&鸣谢

背景

ceph 分布式统一存储

ceph 架构

版本

  • OS版本,RHEL 7.2
  • Ceph版本,Infernalis

安装

  • 使用本地rpm包安装ceph及ceph依赖的软件包
    1
    yum localinstall *.rpm

部署

方案

概述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29



+------------------------------------------------+
| Client Requests |
+------------------------------------------------+
/\ /\
Admin Ops /||\ /||\
|| ||
ClusterMap || || Data I/O
\||/ \||/
\/ \/
+-----+ +----------------+ +------------------+
| |------>| MON (Active) | <-------> | |
| | +----------------+ | |
| | | |
| | +----------------+ | |
| NTP |------>| MON (Standby) | <-------> | OSDs |
| | +----------------+ | |
| | . | |
| | . | |
| | . | |
| | +----------------+ | |
| |------>| MON (Standby) | <-------> | |
+-----+ +----------------+ +------------------+




ceph集群包括两类节点,mon节点、OSD节点

MON节点

  • MON节点与OSD节点比例为1/4
  • MON节点分布在存储压力较小的主机中
  • 两两节点不能分布在一台主机中
  • MON节点使用万兆网络
  • MON节点通过NTP同步时钟(详细请见参考6)

OSD节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25



+------+ +-------------+ +-----------+ +-------+ +------------+
| | | |------> | Data | ------> | XFS | ----> | SAS Device |
| | | | +-----------+ +-------+ +------------+
| | | |
| | | OSD1 Daemon |
| One | | | +-----------+ +-------+ +------------+
| | | |------> | Journal | -----+ | | | |
| | +-------------+ +-----------+ | | | | |
| host | +-> | | | |
| | | | XFS | ----> | SSD Device |
| | +-------------+ +-----------+ | | | | |
| | | |------> | Journal | -----+ | | | |
| | | | +-----------+ +-------+ +------------+
| | | |
| | | OSDn Daemon |
| | | | +-----------+ +-------+ +------------+
| | | |------> | Data | ------> | XFS | ----> | SAS Device |
+------+ +-------------+ +-----------+ +-------+ +------------+




  • 一个硬盘对应一个OSD Daemon
  • OSD节点使用万兆网络
  • 数据与日志分开,日志存放在SSD硬盘中
    数据写入先写入日志,再回写入数据,提高日志写入性能,可以提高性能
    详细请见:http://docs.ceph.com/docs/jewel/rados/configuration/osd-config-ref/
  • OSD使用XFS文件系统
    生产环境使用XFS文件系统用于存储数据和日志
    详细请见:http://docs.ceph.com/docs/jewel/rados/configuration/filesystem-recommendations/

网络

  • public Network
    采用万兆网,主要负责处理用户I/O请求
  • Cluster Network
    采用万兆网络, 主要负责拷贝数据副本和传递心跳信息

详细请见:http://docs.ceph.com/docs/jewel/rados/configuration/network-config-ref/

方法

环境准备

创建并使用ceph用户

  • 创建ceph专属用户——ceph
    1
    2
    3
    4
    useradd -Um -d /home/ceph ceph
    passwd ceph
    echo "ceph ALL=(ALL) ALL" >> /etc/sudoers
    su - ceph
    1. 创建ceph用户和ceph用户目录
    2. 修改ceph用户密码
    3. 修改ceph用户sudoer列表
    4. 切换ceph用户
  • 使用ceph用户配置环境
    1. 修改主机名称
    2. 修改hosts文件,对应ip地址与主机名
    3. 本地安装ceph rpm包
      1
      sudo yum localinstall *.rpm

SSH无密码访问

  • 各个物理节点之间,建立SSH无密码访问

集群搭建

MON节点搭建步骤
  1. fsid生成
  2. 修改ceph.conf中的MON信息
  3. 创建并倒入admin keyring
  4. 创建MON数据目录
  5. 初始化MON节点
  6. 启动MON服务
OSD节点搭建步骤
  1. 在集群中创建OSD
  2. 创建OSD数据目录
  3. 格式化硬盘文件系统为XFS
  4. 挂载硬盘到数据目录
  5. 初始化OSD节点
  6. 创建OSD访问需要的keyring
  7. 在Crushmap中添加OSD节点
  8. 修改ceph.conf中的OSD息
  9. 启动OSD服务

详细请见:http://docs.ceph.com/docs/jewel/install/manual-deployment/

注意:

  • 按官网配置方式配置ceph集群(确保“/var/lib/ceph/”目录下的owner为ceph用户)
  • 如果集群名称不是默认名称(默认名称为:ceph),需要修改/etc/sysconfig/ceph,增加 CLUSTER=”新集群名称”(详细请见,参考5)
  • 根据集群情况结合本机需要启动的服务,在“/etc/sysconfig/ceph”中增加 MON_ID=”MON的ID” 或 OSD_ID=”OSD的ID”(详细请见,参考5)
  • 修改/etc/fstab,增加需要挂载的磁盘信息
  • 修改systemd中ceph服务为enable,保证开机启动
    1
    2
    3
    4
    systemctl enable ceph-mon@{MON ID}
    systemctl enable ceph-osd@{OSD ID}
    systemctl enable ceph-mon.target
    systemctl enable ceph-osd.target
    大括号中的内容需要根据实际情况填写。

至此基本ceph集群已搭建完成

一个华丽的分割之后开始漫长的优化之路

优化

详细请见:
《OSD节点优化》《Ceph集群OSD节点配置优化》

参考

  1. 打造高性能高可靠块存储系统
  2. Can’t start ceph service
  3. linux命令详解之useradd命令使用方法
  4. systemd:how do I view journals with journalctl without switching to root on CentOS7?
  5. Mail Re:Ceph on Fedora
  6. How to Setup NTP Server on CentOS/RHEL 7/6/5 and Fedora 21/20/19

git配置

配置文件 ”~/.gitconfig“

1
2
3
4
5
6
7
8
9
10
[user]
email = zhoubofsy@hotmail.com
name = zhoubofsy
[alias]
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
[http]
proxy = http://127.0.0.1:8087
sslverify = false
[https]
proxy = http://127.0.0.1:8087

背景

使用”XX-Net-2.9.2“做代理服务端(XX-Net-2.9.2在github上可以找到)

Linux系统配置

1
2
3
4
export http_proxy=http://127.0.0.1:8087
export https_proxy=$http_proxy
export ftp_proxy=$http_proxy
export rsync_proxy=$http_proxy