所有由ghoulich发布的文章

中立善良的全栈开发者,经常不折腾不舒服,擅长自己作死!

Jexus-5.6.3使用详解

一、Jexus Web Server配置

在 jexus 的工作文件夹中(一般是“/usr/jexus”)有一个基本的配置文件,文件名是“jws.conf”。

jws.conf 中至少有 SiteConfigDirSiteLogDir 两行信息:

  1. SiteConfigDir=siteconf #指的是存放网站配置文件放在siteconf这个文件夹中,可以使用基于jws.exe文件的相对路径
  2. SiteLogDir=log #指的是jexus日志文件放在log这个文件夹中,可以使用基于jws.exe文件的相对路径

重要提示:
必须为Jexus指定并创建两个专用文件夹:一个是用于存放日志文件的“日志文件夹”,一个是存放网站配置文件的“网站配置文件夹”。

日志文件夹必须让jexus系统有写入权,因为它会在这儿写入jexus系统日志、网站访问日志等重要内容,安装程序中已经建了一个文件夹,名字是log。

网站配置文件夹是用存放网站配置文件的地方(安装包中已经建了这个文件夹,名字是siteconf),既使只有一个网站,也必须有这个文件夹,因为jexus启动时会从这个文件夹读取网站配置的内容。

即,默认情况下,Jexus的文件夹结构是:

  1. /usr/jexus #JWS工作目录
  2. /usr/jexus/siteconf #网站配置目录
  3. /usr/jexus/log #日志目录

二、网站配置

Jexus支持多站点,可以用不同的端口、域名、虚拟路径设置任意多的网站。

必须把所有网站配置文件放到jws.conf指定的网站配置文件夹内(这个文件夹常常是jws工作目录内的“siteconf”文件夹),这个文件夹除了网站配置文件,不能有其它任何文件,因为jexus会认为这儿的任何一个文件都代表着一个不同的网站。

每个网站有且只有一个配置文件,配置文件的文件名就是这个网站的名称,比如 www.mysite.cn这个网站,配置文件名可以写成“mysite”,当然也可以写成其它文件名,以便管理员容易记忆和识别,但要特别注意:文件名不能有空格!

一个网站可以拥有任意多的域名,不同网站不能有相同的域名,没有域名的网站只能有一个,这个没有域名的网站叫做“默认网站”,而一台服务器最多只能有一个默认网站。

再次强调:
1、网站配置文件的文件名不能有空格;
2、网站配置文件夹中只能有网站配置文件,不能有其它文件文件存在。

下面以www.mysite.cn为例,说说网站的配置:

在网站配置文件夹中建立一个文件,这个文件的名称应该有一些意义(至少要能让服务器管理员了解这个配置文件是属于哪一个网站的)。

设这个网站的配置文件的文件名为:mysite。运行以下命令,编辑配置文件:

  1. sudo vim mysite

A、网站配置的基本内容:

  1. port=80 # jexus WEB服务器侦听端口(必填。当然可以是其它端口)
  2. root=/ /var/www/mysite # 网站URL根路径(虚拟目录)和对应的物理路径,两个路径字串之间必须用空格分开(必填。既使这个网站是一个纯粹的反向代理站,也得填)
  3. #可选项
  4. hosts=mysite.cn,www.mysite.cn # 网站域名(建议填写),可以用泛域名,比如:*.mysite.cn(不填此项或只填一个“*”号表示这是默认网站,一个端口只能有一个默认站)
  5. indexs=index.aspx,index.htm # 首页文件名,可以写多个,用英文逗号分开(可以不填。因为JWS系统含有常用首页名)
  6. addr=0.0.0.0 # 绑定到服务器本机的某个IP地址,默认情况下是所有地址,即“0.0.0.0”。
  7. aspnet_exts=mspx,ttt # 添加新出现的或自定义的ASP.NET扩展名(不建议填。多个扩展名用英文逗号分开,不加点号。系统含有常用扩展名)

B、最简配置示例

最简配置只需port和root两项,如:

  1. port=80
  2. root=/ /var/www/default

注意:
以上两个条目的含义:“port=80”指本网站的服务端口是80(标准的WEB服务端口);“root=/ /var/www/default”是指该网站的的虚拟根路径是“/”,所对应的物理文件夹的绝对路径是“/var/www/default”,即网站的内容必须放到“/var/www/default”这个文件夹中。

C、网站配置的高级选项 (阅读建议:建议初学者跳过本小节)

网站配置的高级选项全是可选项,应该根据网站的实际需要选填。

灵活使用高级选项,可以架设出一台与众不同的、功能强大的服务器平台或者服务器群组。

1、使用“URL重写”功能

URL重写是指WEB服务器将访问者的请求URL路径资源按指定的匹配规则解释和匹配为另外的一个真实RUL路径资源。

比如,希望别人访问“.php”类型的文件时,服务器返回 /404.html 这个文件:

  1. rewrite=^/.+?.(asp|php|cgi)$ /404.html

格式:
“rewrite=”的后面是两部分阻成,两部分之间由一个空格分开。
① 空格前是匹配的条件:用正则表达式描述URL的匹配条件。
② 空格后是匹配的目标:指的是如果用户访问的路径合乎前面的匹配条件,服务器将以哪个规则回应。

又如:
把“/bbs”解析为“/bbs/index.aspx”,把“/bbs/file-1” 匹配为 “/bbs/show.aspx?id=1”:

  1. rewrite=^/bbs$ /bbs/index.aspx
  2.     rewrite=^/bbs/file-([0-9]{1,6})$ /bbs/show.aspx?id=$1

格式解释:
rewrite的等号后含有两部分内容,用空隔分开。前半部分是一个正则表达式,用于描述需要URL重写的(用户浏览器中的)url路径样式,后半部分是当用户的URL合乎前面的正则表达式时,JWS应该重写和访问的真实URL路径。

2、禁止或允许某IP或IP段访问网站

A、只允许某些IP地址访问网站(白名单功能)

默认情况下,允许所有IP地址访问。如果手工设置IP地址白名单,那么,白名单之外的IP地址会自动归入黑名单。

配置格式,形如:

  1. allowfrom=1.2.3.*
  2. AllowFrom=2.2.3.3
B、禁止某IP或某IP端访问网站(黑名单功能)

默认情况下,本配置为空。如果手工添加需要禁止访问的IP地址(段),必须合乎一个规则:黑名单必须是白名单的真子集。

配置格式,形如:

  1. denyfrom=111.222.111.*
  2. denyfrom=101.201.1.132

3、禁止访问某文件夹及其子文件夹中的内容

DenyDirs=网站文件夹路径的URL路径,如 “/abcfiles”或 “~/abcfiles”,多个路径,用英文逗号分开

4、是否对请求的URL等进行安全检测

本选项默认是true,即需要检查,除非你的确需要关掉这个选项,否则可以不填,格式如下:

  1. checkquery=false

(关掉本项可以提高服务器速度,但就安全而言,不建议关掉它)

5、NOFILE(无文件)功能

  1. nofile=/mvc/controller.aspx

注意:
这是Jexus特有的功能,指的是如果服务器不存在用户要访问的文件,服务器将使用什么文件应答。

提示:
路由后,原URL路径会存贮在Jexus特有一个服务器变量“X-Real-Uri”中。

技巧:
用这个功能,或者再加上URL Rewrite功能,你完全可以把URL路径与真实路径隔离开来,达到信息隐藏和简化URL的作用。

6、NOLOG(无日志)功能

  1. nolog=yes

注意:
禁用网站日志功能会提高WEB服务器系统的的处理速度,但不足也是明显的,就是你无法详细了解网站的访问情况了。

7、长连接开关

  1. keep_alive=true

注意:
V5.6.3版默认值是true,即默认使用长连接,可以不填。

8、反向代理功能

  1. reproxy= /abc/ http://www.xxxx.com:890/abc/

参数的值由本站URL根路径和目标网站URL根路径两部分组成,之间用空隔分开。

技巧:
反向代量的目标地址可以有多个,用英文逗号分隔,如:
reproxy=/abc/ http://192.168.0.3/abc/,http://192.168.0.4/abc/
这时,当用户访问/abc/时,jexus就会随机选择一台服务器进行访问,达到负载均衡或服务器集群的效果。

9、接受FAST-CGI提供的服务

对于TCP连接:

  1. fastcgi.add=需要fast-cgi处理的文件扩展名|tcp:fast-cgi服务的IP地址:端口

示例:
fastcgi.add=php,php3|tcp:127.0.0.1:9000

对于unix sockets:

  1. fastcgi.add=需要fcgi处理的文件扩展名|socket:路径

示例:
fastcgi.add=php,php3|socket:/tmp/phpsvr

10、启用gzip压缩功能

  1. usegzip=true #即UseGzip

解释:
启用这个功能后,当用户访问“.htm”“.js”等文件时,Jexus会将这些文件进行GZIP压缩后发送给用户浏览器,这样,可以节约更多的网络带宽。

11、让Jexus的工作进程和网站工作于指定的用户权限(身份)下

jws.conf中,添加一句:httpd.user=系统中已经存在的一个用户名,如httpd.user=www-data

12、让Jexus的工作进程和ASP.NET网站工作在指定的ASP.NET版本环境中

jws.conf中,添加一句:Runtime=版本号,如:Runtime=v4.0.30319

13、启用“ASP.NET前置高速缓存”,提高网站ASP.NET应用的反应速度,减小服务器压力

这是Jexus特有的功能。功能很强劲、很实用。

方法是:在需要启用WEB平台级高速缓存的ASPX页面中加入“<%Response.AddHeader("PageCache-Time","60");%>”一句就行了,其中“60”是超时时间,单位为秒。

14、启用HTTPS进行SSL安全传输

本功能是对服务器与客户之间的数据进行加密传送,提高数据转输过程中的保密性。具体方法请访问www.linuxdot.net。

15、启用多进程并行服务

默认配置下,jexus是以单进程模式工作的,单进程的好处是配置简单,节约内存,但弱点也很明显,比如,难以充分发挥多cpu多核的性能优势,大并发承受力、容灾力较多进程弱等等。

因此,在多CPU(核)的服务器上开启多进程,有利于提高处理速度、大并发承载能力以及服务的稳定性和容错能力。

开启多个工作进程的办法:修改jws.conf文件中的httpd.processes行,去掉前边的#号,并在等于后填上需要开启的进程数量(不超过cpu核数+1,同时,最多不超过8个)。

强调:
开启多进程后,ASP.NET网站的Session状态服务不能再使用inproc模式,而应该使用“StateServer”等其它模式并在Web.config中配置“machineKey”,否则会出现Session数据丢失等现象。

16、限制每个工作进程对内存和cpu资源的消耗量

这是5.5版开始启用的参数,在jws.conf中设置,格式为:

  1. httpd.MaxTotalMemory=所有工作进程可消耗的物理内存总量

单位是“兆字节”,可取值范围是256-服务器可用物理内存大小的整数,同时,平均到每个工作进程不能少于128m,0表示由jexus根据物理内存的大小自动设置。

  1. httpd.MaxCpuTime=单个工作进程可消耗Cpu资源的总时间

单位是“秒”,可取值范围是300-14400的整数。0表示禁用此项

三、操作Jexus

1、基本操作:

原jws.start等命令在Jexus V5.6.3中已经合并为一个单一命令,即“jws”,这是一个shell脚本文件。

命令参数与对应的功效:

  1. jws start # 启动Jexus;
  2. jws start 网站名 # 启动指定的网站
  3. jws restart # 重启Jexus
  4. jws restart 网站名 # 重启指定的网站
  5. jws stop # 停止Jexus
  6. jws stop 网站名 # 停止指定的网站
  7. jws regsvr # 注册jexus所需要的全局程序集(本命令只在安装或更新jexus后才用,而且必须用一次)。
  8. jws status # Jexus是否在运行中
  9. jws -v # 显示Jexus的版本号

注意,这些脚本的拥有者应该是root,并且拥有可执行权限。

2、让Jexus能随服务器的启动而自动启动:

方法是:在/etc/rc.local文件的加入“/usr/jexus/jws start”一行。注意,路径应该是你系统中JWS的实际路径,不要把路径写错了。

四、卸载Jexus

1、在rc.local文件中删除你手工添加的开机自动启动Jexus的命令行(如果本来就没有添加过,这步操作就不必做了)

2、删除jexus文件夹及全部内容(建议只删除.exe和.dll,其它的,比如网站配置文件等不必删除,以便将来重新启用)。

Android的logcat日志工具使用详解

logcat是Android中一个命令行工具,可以用于得到程序的log信息。Android日志系统提供了记录和查看系统调试信息的功能。日志都是从各种软件和一些系统的缓冲区中记录下来的,缓冲区可以通过 logcat 命令来查看和使用。

一、环境描述

宿主机OS:CentOS 6.6 x86_64
宿主机IP:192.168.1.119
虚拟机OS:Android-x86 4.4-r2
虚拟机IP:192.168.1.126
网络方式:Bridge
Android SDK版本:android-sdk_r24.2-linux
KVM版本:QEMU PC emulator version 0.12.1 (qemu-kvm-0.12.1.2-2.448.el6_6.3)

二、logcat命令的基本用法

1. logcat命令使用格式

  1. [adb] logcat [<option>] ... [<filter-spec>] ...

2. 两种使用方式

在宿主机上使用:

  1. $ adb logcat

在虚拟机或手机上使用:

  1. # logcat

三、过滤日志输出

每一条输出的Android日志信息都有一个标签和优先级。

1. 日志标签

日志的标签是系统部件原始信息的一个简要的标志。(比如:“View”就 是查看系统的标签)。

2. 日志优先级

日志优先级有下列几种,按照从低到高顺序排列:

  • V — Verbose(最详细的日志,最低优先级)
  • D — Debug(调试)
  • I — Info(信息)
  • W — Warning(警告)
  • E — Error(错误)
  • F — Fatal(致命错误)
  • S — Silent(静默,最高优先级,不会输出任何信息)

3. 日志过滤器

在运行logcat的时候在前两列的信息中你就可以看到 logcat 的标签列表和优先级别,它是这样标出的:<priority>/<tag>

下面是一个logcat输出的例子,它的优先级是I,标签是ActivityManage

  1. I/ActivityManager (585): Starting activity: Intent { action=android.intent.action...}

为了让日志输出能够体现管理的级别,你还可以用过滤器来控制日志输出,过滤器可以帮助你描述系统的标签等级。

过滤器语句按照下面的格式描述:

  1. tag:priority ...

其中,tag表示标签,priority表示相应标签日志的最低优先级。

从上面的tag的中可以得到日志的标签和优先级。你可以在过滤器中多次描述tag:priority

4. 使用实例

请查看以下使用实例:

  1. adb logcat ActivityManager:I MyApp:D *:S

上述实例表示支持所有的日志信息,除了标签为“ActivityManager”和优先级为“Info”以上的日志,以及标签为“MyApp”和优先级为“Debug”以上的日志。上述实例中的最后的元素*:S,意味着将所有其他标签的优先级设置为“Silent”,所有日志只显示有“ActivityManager”“MyApp”标签的。*:S的另一个用处是能够确保日志输出的时候是按照过滤器的说明限制的,也让过滤器作为一项输出到日志中。

下面的过滤语句只显示优先级为“Warning”或更高优先级的日志信息:

  1. adb logcat *:W

如果你在宿主机上运行logcat,相比起在远程adb shell端,你还可以为环境变量ANDROID_LOG_TAGS指定一个参数来设置默认的过滤器:

  1. export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"

注意,如果通过远程shell运行logcat命令,或者运行adb shell logcat命令,那么将不能使用ANDROID_LOG_TAGS中设置的过滤器。

四、指定日志输出格式

日志信息包括很多元数据域,例如标签和优先级。可以修改日志的输出格式,指定显示特定的元数据域。可以通过-v 选项得到格式化输出日志的相关信息:

  • brief — 显示源进程的优先级/标签和PID(默认格式)。
  • process — 只显示PID。
  • tag — 只显示优先级/标签。
  • thread — 只显示进程 : 线程和优先级/标签。
  • raw — 显示原始的日志消息,没有其他的元数据域。
  • time — 显示源进程的日期、调用时间、优先级/标签和PID。
  • long — 显示所有的元数据域和单独的消息,带有一个空行。

启动logcat时,你可以通过-v选项来指定日志输出格式:

  1. [adb] logcat [-v <format>]

以下实例使用thread来指定日志输出格式:

  1. adb logcat -v thread

注意,你只能使用-v选项来指定日志输出格式的选项。

五、查看可用的日志缓冲区

我们在使用logcat抓取日志的时候,可以指定buffer,来请求不同的环形缓冲区 (‘main’, ‘system’, ‘radio’, ‘events’,默认为”-b main -b system“),因为Android日志系统为日志消息保持了多个循环缓冲区,而且不是所有的消息都被发送到默认缓冲区,要想查看这些附加的缓冲区,可以使用-b选项,以下是可以指定的缓冲区:

  • radio — 查看包含在无线/电话相关的缓冲区消息。
  • events — 查看事件相关的日志消息。
  • main — 查看主缓冲区(默认缓冲区)。
  • system — 查看系统相关的日志消息。

-b选项的使用方法如下所示:

  1. [adb] logcat [-b <buffer>]

以下实例表示如何查看包含无线和电话的日志消息:

  1. adb logcat -b radio

六、查看标准输出和标准错误

在默认状态下,Android系统会将标准输出和标准错误(System.outSystem.err)输出到/dev/null,在运行Dalvik VM的进程中,有一个系统可以备份日志文件。在这种情况下,系统会用标准输出和标准错误,以及优先级 I 来记录日志消息。

通过以下方法可以指定日志输出的路径,停止运行的模拟器/设备,然后使用setprop命令远程输入日志:

  1. $ adb shell stop
  2. $ adb shell setprop log.redirect-stdio true
  3. $ adb shell start

七、logcat命令选项

选项 描述
-b <buffer> 请求可选择的环形缓冲区,main、system、radio或events。可以使用多个-b参数,输出的结果是交错的。默认值为-b main -b system。
-c 清除全部日志,然后退出。
-d 转储日志,然后退出(不会阻塞)。
-f <filename> 将日志输出至文件。默认为标准输出(stdout)。
-g 获取日志环形缓冲区的大小,然后退出。
-n <count> 通过指定轮转日志的最大数量,默认为4。
-r <kbytes> 每千字节就轮转一次日志。若没有指定,则默认值为16。需要使用-f选项。
-s “将默认的过滤器设置为静默。
就像是指定过滤器描述符“*:S”。
-v <format> “设置日志的输出格式,其中<format>是下面其中之一:
brief、process、tag、thread、raw、time、threadtime、long”
-t <count> 只输出最近几行的日志,行数由<count>指定(隐含-d选项)。
-B 以二进制方式输出日志。

八、在kvm环境中使用logcat

1. 启动Android-x86虚拟机

在virt-manager的图形界面中启动Android-x86虚拟机,如下图所示:

在shell中运行ps aux | grep kvm命令,可以看到这个虚拟机的进程详情,如下图所示:

2. 从宿主机连接至虚拟机

在shell中运行以下命令:

  1. adb connect 192.168.1.126

若命令返回如下图所示,则表示连接成功:

3. 运行logcat命令

在shell中运行以下命令:

  1. adb logcat

若命令返回和下图中类似,则表明已经看到Android虚拟机中的日志消息:

【翻译】usb_modeswitch使用详解

原文链接:http://www.draisberghof.de/usb_modeswitch/

一、介绍

USB_ModeSwitch是一种模式切换工具,用于控制具有“多种模式”的USB设备。

越来越多的USB设备(特别是高速WAN上网卡,它基于一些手机芯片,能够改变它们的USB连接模式)都会板载它们自己的MS Windows驱动程序,当首次插入电脑时,它们会被识别为一个闪存设备,然后开始安装存储于其中的驱动程序。在安装完驱动程序之后(后面还需要再插拔一次),驱动程序就会再内部切换USB设备的连接模式,存储设备会消失(大多数情况下),然后会出现一个新的设备(例如,一个USB调制解调器)。调制解调器制造商会“可选地”调用“ZeroCD (TM)”特性,因为它会消除对用于承载一个独立驱动程序载体的需求。

起初,这方面的东西没有任何形式的文档记录,而且也几乎没有任何Linux支持可用。

从好的方面来看,大多数已知的设备在两种模式下都可以工作,使用诸如“usb-storage”或“option”(一种经过优化的串行驱动程序,高速3G调制解调器的Linux标准)的Linux驱动程序。

那么唯一的问题便是如何从存储设备切换至调制解调器设备,或者其他应该做的事情。

幸运的是,我们还有人类的理性、USB嗅探程序和“libusb”。MS Windows的驱动程序存在通信被窃听的可能性,但是,在Linux或BSD变种系统的规则之下,可以隔离触发模式切换的命令或动作,并且可以复制相同的东西。

在“libusb”的有力帮助之下,USB_ModeSwitch可以从一个配置文件中获取重要的参数,然后完成全部的初始化和通信工作,这样便使得用户可以轻松地处理这个过程。

它主要是自动使用的 — 通过udev事件和规则 — 不需要任何用户操作便能完成模式切换。但是它还可以作为一个命令行工具来运行,通常会在尝试使用某种未知设备时使用这种方式。

这个工具是大多数主流发型版的部件之一,你应当不用从源码包进行编译安装,除非运行时遇到问题,或者想要使用最新的版本。

你在提交任何问题之前,请首先仔细阅读本页面上的所有信息! 如果你使用一个新的设备,那么它会帮助你理解这个工具内部的工作原理,它也会反过来更加轻松地找到相关的切换命令,并且可以添加一条新的配置条目。

如果想要了解关于如何实现自己的USB嗅探,请查看下面的“ 贡献” 章节。

二、下载

重要: 想要完成一次高效的安装,你需要同时拥有程序和数据包!

对配置文件的修改和更新的频率可能会比发布新程序版本的频率高得多,这些配置文件包含已知USB设备的大多数信息。这也是为什么会单独提供这些配置文件。

请下载 usb-modeswitch-2.2.1.tar.bz2,源代码的发布日期为2015-01-15,Debian的软件仓库中很快也会有相应的Debian软件包。它支持很多种架构(诸如amd64或ia64)。

请下载 usb-modeswitch-data 数据包(2015-01-15)。它包含设备数据库和规则文件,包括完整的路径。你需要2.2.0版本以上的程序,因为引入了新的参数。

可选的 device_reference.txt文件(2013-11-13),它是较早设备的配置集合,分别由相应的贡献者添加;如果你想要使用某个新设备,那么你也可以将这个文件作为首选资源。

如果你的系统上没有安装 libusb-1.x,请不要忘记安装这个软件包。在大多数发行版本中,很可能有一个名为“libusb1-dev”或“libusb1-devel”的软件包(或类似的)。

较老的版本基于 libusb-0.1.12,但是自从2.0.0版本以来,只会支持libusb1.x。

有一点复杂的是,libusb1有一段时间还有一个兼容分支,叫做“libusbx”。更多信息可阅读:
http://www.draisberghof.de/usb_modeswitch/bb/viewtopic.php?p=12912#p12912

如果你有一个带有USB主机端口的Android平板,并且Android版本至少为2.2,你可以尝试使用“ PPP Widget”,可以从Google Play下载使用。它包括USB_ModeSwitch和PPPD,使得你能够相对轻松地通过3G上网卡或手机连上网络,即使是在仅支持WiFi的设备上。

如果你是一个系统集成者(包维护者),你可以使用这个XML文件来检查新的版本:usb-modeswitch-versions.xml

USB_ModeSwitch的Debian软件包的维护者已经建立起一个PPA,提供大多数最近发布的版本,请查看论坛中的这个帖子:
http://www.draisberghof.de/usb_modeswitch/bb/viewtopic.php?p=12609#p12609

三、如何安装

如果你已经安装了一个较早的版本,推荐卸载掉已安装的版本(运行 make uninstall 命令)。1.1.0版本中修改了若干文件的位置,如果不管旧版本的话,那么旧版本的文件就可能会被孤立。如果你以前安装的是1.1.0或更新的版本,那么你仅仅需要更新和覆盖所有已有的文件。

解压缩程序的源码文件(谁会想到!)。在新创建的目录中,以root或超级用户的身份运行以下命令:

  1. # make install

这样会安装一个用于udev的小型shell脚本、较大的包装器脚本、一个配置文件、man(使用说明)页面,以及全新编译的二进制文件。重要:如果你以这种方式安装,那么你将需要“tcl”软件包,用于处理大型的分配器脚本。还有很多种不依赖于“tcl”软件包的安装方式。请参考包含在源码包中的README文件,以便于了解更多的安装选项吧!

现在,请对数据包进行相同的操作。它将会在“/usr/share/usb_modeswitch”目录中安装配置文件,在“/lib/udev/rules.d”目录中安装udev规则文件。较早的“/etc/usb_modeswitch.d”目录被用于保存自定义配置文件(新的或修改的)。

你已经设置成功了,如果你的设备是已知的,那么你应当能够将其插入并使用。如果它不能立即使用,那么我们将会找出原因。

想要手动使用,只需要安装程序即可。在命令行界面中使用或者使用一个自定义的配置文件。如果你想要创建自己的配置,那么“device_reference”文件(请参考“下载”章节)会是一个很好的切入点。这个文件中有很多注释,会告诉你如何进行操作。

你的自定义配置文件可以用任何文件名,也可以放在任何地方;只需要用 -c 参数告诉 usb_modeswitch 如何找到这个配置文件即可。

手动使用的主要目的是测试和分析。请参考下一章。

四、如何使用

在大多数情况下,你可以不用进行任何操作(除了将设备插入)就能够使用你的设备。

如果你认为你的设备是受支持的,但是设备并没有按照预期正常工作,那么你可以首先打开日志,正如在“故障排查”章节中所述的。

若想要测试、调试你的新设备,你可以在手动模式下使用USB_ModeSwitch的二进制部分。

有两种方法:使用一个配置文件或使用命令行。

运行“usb-modeswitch -h”命令,便可列出命令行参数。如果使用了除 -W-D-I-q 之外的命令行参数,那么通过 -c 命令行参数指定的配置文件就会被忽略,你必须在命令行上提供所有的必须参数。你还可以参考内藏的使用手册页面。

想要使用某个配置文件,你可以使用“/usr/share/usb_modeswitch”目录中的小文件,或者自己创建一个文件。然后使用 -c 选项,为 usb_modeswitch 命令指定这个文件的文件名和路径。你还可以在 device_reference.txt 文档中找到一些关于型号系列的提示,以及命令行参数的解释。

重要:
USB_ModeSwitch — 就像使用 libusb 的所有程序那样 — 当手动调用这个命令时,必须以 root 身份运行(或者使用“sudo”命令)。否则,会出现奇怪的错误消息,并且设备和程序不会正常工作。当试验切换命令和策略时,可能在具有root权限的shell中进行操作会更加便利(“sudo bash”或“su -”)。

自动化方法由若干种协同工作的组件构成,以用途的逻辑顺序列出:

/lib/udev/rules.d/40-usb_modeswitch.rules — 如果识别出一个已知的设备ID(制造商/产品),那么udev规则便会启动包装器。若想要为一个新的调制解调器添加一个触发器(具有有效的配置文件),你可以新加一行,内容为它的USB ID,就像在已有条目中看到的那样。如果被切换的设备提供标准的串行端口,那么一个二级规则会再次调用包装器,然后添加一条指向正确连接端口的符号链接(见下文)。

/lib/udev/usb_modeswitch — 一个shell脚本,分叉至真实的包装器脚本。从1.1.6版本以来,脚本是和在Ubuntu中使用的“dash”shell完全兼容的,除此之外还兼容于较老的“bash”变种。为了将usb_modeswitch和udev进程分开运行,最近的版本会利用upstart或systemd特性。

/usr/sbin/usb_modeswitch_dispatcher — 这样会进行额外的设备检查,然后使用二进制文件,根据选中的设备配置文件来切换设备状态。
如果在模式切换之后,没有任何驱动程序来处理这个设备,那么分配器将会试图加载和绑定“可选的”串行驱动程序,以便于使得设备可用。

/etc/usb_modeswitch.conf — 当排查故障时,用于启用扩展日志的一个全局配置文件,或者用于禁用切换功能(主要是为了访问设备的安装部件)。

/usr/share/usb_modeswitch — 一个包含每个设备个体设置信息文件的目录,根据设备ID和可能更深入的身份标识来命名(为了解决已知的二义性)。如果你的设备ID在某个文件的文件名中出现了,那么表明你的设备是受支持的,即使它的型号或品牌并不匹配。

/etc/usb_modeswitch.d — 一个存放自定义配置文件的目录。你可以将新建的或修改的配置文件放在这儿,它们将会比 /usr/share/usb_modeswitch 目录中的配置文件被优先使用。

/usr/sbin/usb_modeswitch — 实现切换功能的二进制程序。它被设计为独立于内核或系统细节,应当可以移植到非Linux平台上,只要libusb可用即可。

在模式切换和驱动程序加载之后,系统需要负责发现新的(主要是串行的)设备。

当前的NetworkManager版本(或者它的ModemManager组件)通常非常适合于使用无线调制解调器。甚至一些已经不再使用PPP接口的新型号也能够被识别,并且能被无缝地整合。

当试图自动侦测USB调制解调器和使用它们时,使用较老版本的这些程序就很有可能发生问题。

如果你坚持使用一个较老的系统,那么请禁用NM和MM。你将能够顺利使用wvdial、UMTSmon和若干种提供PPP用户界面的工具(诸如kppp),虽然这些程序中的某些可能需要有一点基本知识。

从1.1.2版本开始,如果设备提供标准的串行端口,usb_modeswitch将会添加一条指向使用中断传输的正确端口的符号链接。这条链接的名称为 /dev/gsmmodem,如果连接了多个设备,那么在名称之后会紧跟一个编号。

你可以在连接帮助程序(诸如wvdial)中使用这个名称。注意,在很多情况下,你可能需要手动编辑配置文件。

如果你设法得到一个新型的或支持很差的设备,并且想要以手动模式正确地进行切换,那么你可以自己添加一条udev规则和一个配置文件。但是也请将其报告给我们,分享你的成果!

请查看“ 贡献 ”章节。

五、已知的适用硬件

非常重要的提示:
就个人来说,我不可能测试绝大多数的受支持设备。此处的列表 — 除了必需的数据之外 — 还要依赖于第三方团体(或用户)的报告。因此,即使你的设备在此列出,你也很有可能遇到一些问题。
也就是说,这个小工具的用户基数有着非常可观的增加,因此任何数据相关的问题通常会很快地显现出来。

迄今为止,初始化切换进程有三种已知的方法:

  1. 向存储设备发送一条很少使用或看起来怪异的标准存储命令(相当于SCSI)(例如“eject”)。

  2. 向设备发送一条或多条制造商特定的控制消息。

  3. 主动地从设备中移除(断开连接)存储驱动程序(仅适用于某些早期的设备)。

再次,如果你没有在列表中找到你设备的名称,它仍然是可能受支持的。

当然,最好能够在配置文件目录中找到你的设备的USB ID。请仔细地浏览最新的数据包(请参考“下载”章节)。

下面是受支持的设备列表,同时还有相应贡献者的信息:device_reference.txt

六、故障排查

注意:如果在遵循本页面的建议之后,你仍然需要技术支持,那么请使用论坛!

电子邮箱智能用于投稿设备/配置文件 — 不能处理技术支持问题!

已知的问题

只有版本为2.6.27以及更新版本内核的自动串口驱动程序分配才能和针对3G优化过的驱动程序协同工作。如果你的内核版本较老,并且在模式切换之后,你的调制解调器没有被任何驱动程序识别出来,那么就会使用通用的“usbserial”驱动程序作为一种备用方案。

在版本为2.6.26至2.6.28的内核中,处理ID为 19d2:2000 的设备时会遇到一些问题。这通常会影响到大多数的ZTE设备,并且会使得“usb-storage”驱动程序忽略这个ID。而这将会妨碍正确的初始化,可能会导致切换失败。你没有其他办法,只能对内核代码进行少许修改,然后重新编译你自己的内核。请参考下面内核相关的问题,以了解详细的信息。

针对于自动化系统整合的调试,请在文本编辑器中将(以root身份或者使用su命令)/etc/usb_modeswitch.conf 文件中的以下行:

  1. EnableLogging=0

修改为:

  1. EnableLogging=1

这样便使得你可以在/var/log/usb_modeswitch_<device>日志文件中看到非常详细的设备热插拔活动日志。

如果你接下来确定你的设备具有合适的取值,并且你已经遵循所有的提示(请参考“已知的适用硬件”章节)进行操作,并且USB_ModeSwitch看起来每次运行时都在做一些事情,但是却毫无效果,那么你就很有可能遇到系统相关的问题。

首先怀疑的应当是已有的用于调制解调器的系统规则,这些规则可能没有正确地处理一些东西。

如果你拥有的设备的未切换ID为 05c6:1000 ,那么它可能会在较老的系统中调用切换命令出错。有四种不同类型的切换设备,它们都具有相同的ID;在大型的发行版中,在尝试过四五次失败之后,它们都会被看做是“可选”(制造商)的型号。甚至有些手机也具有这样的ID,将这些手机连接至USB端口时,它们可能会被错误地处理。

若想要解决这样的问题,你可以尝试从 “ /lib/udev/rules.d ”目录中删除相应的规则文件,这些文件中包含对“modem-modeswitch”命令的调用。

除了USB ID之外,USB_ModeSwitch将会进行额外的检查,并且会以正确的方式处理所有已知的不明确的设备。例如,它将会对ID为 05c6:1000 的未知设备置之不理。

另一个众所周知的设备ID是 19d2:2000 。它可能会在一个已有的规则控制之下切换正常,但如果你的设备型号是新型的,这个设备的ID还尚未添加至“可选”模块中,那么系统就不会为这个设备加载驱动程序。

禁用运行“弹出”的规则,这个设备的ID将会由usb_modeswitch进行处理。

内核相关的问题

在某些较新的内核中,某些设备(上述的设备,有些是可选厂商,有些是华为的,有些是ZTE的)会在USB存储设备的代码中得到特殊处理,会立即启用切换功能。对于这些特殊的设备来说,你可能不再需要USB_ModeSwitch,从另一方面来说,你必须访问你的设备的“CD-ROM”部件。另外,特殊处理没有产生任何效果,而且被妨碍的USB_ModeSwitch后来又工作正常的情况也是存在的(ZTE设备产生错误“-2”时可能会出现这种情况)。

当发生问题时,请查看你的内核源码的“ drivers/usb/storage ”目录中的“unusual_devs.h”文件。如果你的默认设备ID(存储部件的厂商和产品ID)可以在上述文件中找到,并且当运行USB_ModeSwitch时会出现错误消息,那么首先尝试将“usb-storage”加入黑名单。

如果这么做有用,那么你应当考虑重新构建你的内核,停用“unusual_devs.h”文件中的相应条目。唯一会发生的是,以后USB存储会以默认的方式工作。

我在Gentoo的俄语版维基中找到一条提示,这条提示完全按照我刚刚的建议进行操作,使用的设备为ZTE MF626。

顺便说一下,USB开发者之间一度达成共识,如果必要的步骤可以在“用户空间”中完成,那么就会将所有未来的模式切换代码独立于内核驱动程序之外。

另一种能够影响内核行为的方法是“usb-storage”的“delay_use”参数,这个参数会设置存储设备插入系统到实际使用(可能会自动挂载)之间的延迟时间,以秒为单位。默认值为5,这个参数可能会影响某些条件下的切换结果。

若想要修改默认值,则在/etc/modeprobe.conf文件中添加以下内容:
options usb-storage delay_use=1 (or 10, or other)

老系统(例如,CentOS 5 或 Xandros 6)

如果你使用的系统比不是非常的新(内核版本低于2.6.27),那么你可能偶尔会遇到“udev”版本之间的不兼容性,它是设备管理器。如果你没有任何迹象表明usb_modeswitch正在做任何事情(没有日志文件),那么请遵循以下步骤:

检查“ /lib/udev/rules.d ”目录中,除了“40-usb_modeswitch.rules”文件之外,还有没有其他文件。
如果并非如此,那么请将文件移入“/etc/udev/rules.d”目录中。
如果仍然没有任何动作,请查看“/etc/udev/rules.d”目录中是否有其他文件包含字符串“ATTRS”。

如果并非如此,那么请编辑“40-usb_modeswitch.rules”文件,将文件中所有的“ATTR”和“ATTRS”替换为“SYSFS”。保存修改,检查当你再次插入设备时,是否有些事情发生。

在特别难解决的“没有动作”的情况下,很有可能需要分析udev的动作;你可以编辑“/etc/udev/udev.conf”文件,将日志等级修改为“debug”即可。

七、贡献

即使USB_ModeSwitch还尚未支持你自己的硬件设备,它也可以非常方便地进行实验。

第一个普遍尝试的步骤就是使用已知设备的切换方法,例如,在BandLuxe的配置“1a8d:1000”中找到的“弹出”动作序列。如果你的设备原本是由华为制造的,那么你可以尝试使用“12d1:1446”的动作序列。

不用担心,使用可能错误的动作序列几乎不可能损坏任何东西。只需要确保在每次尝试之后,重新插拔你的设备。

如果所有的这些方法都没有用,你可以尝试这种方法:

注意,设备的厂商ID和产品ID可以在“/proc/bus/usb/devices”文件中查看(也可以查看“ lsusb ”命令的输出),被分配的驱动程序通常是“usb-device”。然后,在MS Windows中监听具有相同ID的设备的USB通信,监听之前需要安装设备板载的驱动程序。设备一定会在那时切换模式,你需要将那个时刻的日志记录下来。

我推荐这个工具:“SniffUSB”

这是一个较短的版本。Mark A. Ziesemer编写过一个非常好的应用示例,如下所示:
Alltel UM175AL USB EVDO under Ubuntu Hardy Heron

请向 Mode Switch Forum 论坛提交任何改进建议、新设备信息和/或缺陷报告。
如果你不需要技术支持,你可以使用一种更加古老,更加保密的通信方式 — 电子邮件。

MySQL集群的flexAsynch测试工具的安装和使用

一、编译安装flexAsynch

Oracle官方推荐的MySQL Cluster性能测试工具有DBT2,flexAsynch等。此处采用了flexAsynch,它是一种非常好的NDB测试工具。由于Oracle并不提供flexAsynch的二进制文件下载,仅仅在MySQL Cluster的源码包中提供这个测试工具的源码,所以必须手动编译MySQL Cluster才能获得flexAsynch的执行文件。以下命令都是在RHEL 6.4中以root账户权限运行。

1. 下载

  1. cd /root/Downloads
  2. wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.3/mysql-cluster-gpl-7.3.4.tar.gz
  3. tar -xvzf mysql-cluster-gpl-7.3.4.tar.gz
  4. cd mysql-cluster-gpl-7.3.4

2. 配置

  1. cmake . -DBUILD_CONFIG=mysql_release -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DWITH_NDB_TEST=ON -DWITH_BUNDLED_LIBEVENT=ON -DWITH_BUNDLED_MEMCACHED=ON -DWITH_NDBMTD=ON -DWITH_NDB_TEST=ON

在使用cmake进行配置之前,要确保系统中安装了libaio-devel,否则执行以下命令:

  1. yum install libaio-devel

3. 编译

  1. make VERBOSE=1

4. 安装

  1. make install

5. 拷贝

编译安装完成之后,flexAsynch位于/usr/local/mysql/bin目录中,将其拷贝至MySQL Cluster管理结点的/usr/local/mysql/bin目录或者其他合适的目录中,即可对MySQL Cluster进行性能测试。
如果运行flexAsynch时报告找不到某些lib库的错误,那么需要添加以下内容到/etc/profile文件中:

  1. LD_LIBRARY_PATH=/usr/local/mysql/lib
  2. export LD_LIBRARY_PATH

二、参数说明

  1. -t :想要启动的线程总数,默认值为1
  2. -p :每个线程的并行事务总数,默认值为1
  3. -o :每个循环的事务总数,默认值为500
  4. -l :想要运行的循环总数,默认值为10表示无限循环
  5. -load_factor :索引中的负载因数,以百分比表示(40 ~ 99
  6. -a :属性(数据库表的列)总数,默认值为25
  7. -c :每次事务的操作总数
  8. -s :每项属性的大小,默认为1字节(主键大小总是为1字节,与这项参数值无关)
  9. -simple :使用简单读模式来读取数据库
  10. -dirty :使用脏读模式来读取数据库
  11. -write :在插入和更新时,使用writeTuple模式
  12. -n :使用标准表名
  13. -no_table_create :不要在数据库中创建表
  14. -temp :创建表,但不记录日志
  15. -no_hint :不给出事务处理协调器执行到哪儿的提示
  16. -adaptive :使用自适应的发送算法(默认选项)
  17. -force :当通信时强制发送
  18. -non_adaptive :以10毫秒的间隔时间发送
  19. -local 1表示每个线程都有自己的结点执行;2表示多个结点循环执行每个并行事务;3表示多个结点随机执行每个并行事务
  20. -ndbrecord :使用NDB记录
  21. -r :额外循环的总数
  22. -insert :对标准表仅执行插入操作
  23. -read :对标准表仅执行读操作
  24. -update :对标准表仅执行更新操作
  25. -delete :对标准表仅执行删除操作
  26. -create_table :对标准表仅执行创建表操作
  27. -drop_table :对标准表仅执行删除表操作
  28. -warmup_time :测量开始之前的预热时间
  29. -execution_time :测量完成时的执行时间
  30. -cooldown_time :测量完成之后的冷却时间
  31. -table :标准表的总数,默认值为0

常用的参数有-l(测试循环次数)-t(线程数量)-p(并行事务数量)-o(每次循环的事务数量)-c(每次事务的操作数量),所以性能测试的总操作数量为l*t*p*o*c

例如,可以执行以下性能测试:

  1. /usr/local/mysql/bin/flexAsynch -ndbrecord -temp -con 1 -t 4 -p 10 -a 2 -l 3 -r 2

上述性能测试基于以下文章搭建的MySQL集群:

http://blog.csdn.net/yang1982_0907/article/details/20716845

如果出现以下错误:

  1. Configuration error: Error: Could not alloc node id at localhost port 1186: Connection done from wrong host ip 127.0.0.1.

那么就说明没有空闲的“slot”可以接受性能测试建立的连接,这时候需要在管理结点的config.ini配置文件中添加更多的“[MYSQLD]”项,可以理解为将管理结点自身也配置为SQL结点。可以参考以下资料:

http://serverfault.com/questions/548651/benchmark-mysql-cluster-using-flexasynch-no-free-node-id-found-for-mysqldapi

config.ini配置文件中添加以下内容,然后重启MySQL集群:

  1. [MYSQLD]
  2. NodeId=6
  3. Hostname=192.168.124.141

上述示例性能测试得到的结果为:

三、其他测试工具

Database Test Suit也是一套优秀的数据库集群性能测试工具,DBT-1~5分别对应不同的使用场景对数据库集群进行测试。

1. Database Test 1 (DBT-1: Web Server)
DBT-1是一个基于WEB的事务性能测试工具。它会模拟WEB用户的活动,例如从一个在线书店浏览和购买商品。DBT-1是事务处理性能委员会(TPC)的TPC-W基准测试规范的一个十分有用的实现。一次测试运行得到的结果包括每秒事务数、CPU使用率、I/O活动、内存使用率。GIT链接:

git://osdldbt.git.sourceforge.net/gitroot/osdldbt/dbt1

2. Database Test 2 (DBT-2: OLTP)
DBT-2是一个OLTP事务性能测试工具。它模拟一个批发零件供应商,有若干个工作人员会访问数据库,更新客户信息,并且检查零件库存情况。DBT-2是TPC的TPC-C基准测试规范的一个十分有用的实现。一次测试运行得到的结果包括每秒事务数、CPU使用率、I/O活动、内存使用率。GIT链接:

git://osdldbt.git.sourceforge.net/gitroot/osdldbt/dbt2

3. Database Test 3 (DBT-3: DSS)
DBT-3可用于决策支持系统的工作负载测试。它由一套面向业务的ad-hoc查询和并发数据修改组成。DBT-3是TPC的TPC-H基准测试规范的一个十分有用的实现。GIT链接:

git://osdldbt.git.sourceforge.net/gitroot/osdldbt/dbt3

4. Database Test 4 (DBT-4: Web Services)
DBT-4可用于引用服务器和WEB服务的工作负载测试。它是由一系列类似于一个B2B交易环境的活动所组成的。DBT-4是TPC的TPC-App基准测试规范的一个十分有用的实现。GIT链接:

git://osdldbt.git.sourceforge.net/gitroot/osdldbt/dbt4

5. Database Test 5 (DBT-5: OLTP)
DBT-5可用于OLTP的工作负载测试,它模拟一个经纪公司的活动。DBT-5是TPC的TPC-ETM基准测试规范的一个十分有用的实现。GIT链接:

git://osdldbt.git.sourceforge.net/gitroot/osdldbt/dbt5

过段时间会发布Database Test Suit的使用教程,敬请期待!

编译适用于Android-x86架构的tcpdump工具

在谷歌和必应上搜索的Android-x86专用的tcpdump工具多半不能使用,它们基本上都是在ARM架构的安卓手机上使用的,而且版本都较为老旧。由于Android-x86的Linux内核是通用的32位Linux,那么能否在常用的32位Linux发行版上直接使用32位的gcc编译tcpdump,然后拷贝至Android-x86的模拟器中使用呢?答案是可以的!

一、环境说明

Linux虚拟主机:CentOS 6.6 i686
宿主机OS:Windows 7 SP1
宿主机IP:192.168.92.1
虚拟机软件:VMware Workstation 11.0
虚拟机系统:Android-x86 4.4 r2
虚拟机CPU:单核
虚拟机内存:1 GB
虚拟机硬盘:8 GB
虚拟机联网方式:Host-Only
虚拟机IP:192.168.92.128
虚拟机SSHD软件:SSHDroid
虚拟机SSH链接:root@192.168.92.128:2222
tcpdump版本:4.7.4
libpcap版本:1.7.3

注意:
本文使用三台主机,配置如上文所述:
1、承载虚拟机的Windows 7宿主机,代号为Host-1;
2、用于编译的CentOS虚拟机,代号为Host-2;
3、用于验证使用的Android-x86虚拟机,代号为Host-3。

二、编译TCPDUMP

本章节中的操作都是在Host-2上完成的,详细步骤如下所示:

1. 安装编译环境:

  1. yum groupinstall -y "Development Tools"
  2. yum install -y glibc-static

2. 下载源码包:

  1. cd /root/Downloads
  2. wget http://www.tcpdump.org/release/tcpdump-4.7.4.tar.gz
  3. wget http://www.tcpdump.org/release/libpcap-1.7.3.tar.gz

3. 解压缩:

  1. tar xvzf libpcap-1.7.3.tar.gz
  2. tar xvzf tcpdump-4.7.4.tar.gz

4. 编译libpcap:

  1. cd libpcap-1.7.3
  2. export CC=gcc
  3. ./configure --host=i686-pc-linux-gnu --with-pcap=linux
  4. make
  5. cd ..

5. 编译tcpdump:

  1. cd tcpdump-4.7.4
  2. export ac_cv_linux_vers=2
  3. export CFLAGS=-static
  4. export CPPFLAGS=-static
  5. export LDFLAGS=-static
  6. ./configure --host=i686-pc-linux-gnu --disable-ipv6
  7. make

6. 查看编译结果:

  1. file tcpdump

如果看到下图中的结果输出,则表明编译成功:

三、安装和验证

在Host-1上,通过Xshell和Xftp连接至Host-3(Android-x86虚拟机),然后:

1. 上传tcpdump:

从Host-2中,将前文编译好的tcpdump可执行文件拷贝至Host-1中,然后通过Xftp将tcpdump拷贝至Host-3的/data/local目录中,并且将tcpdump文件的权限修改为777。

2. 运行tcpdump:

Host-1的Xshell已经链接至Host-3,则在Xshell中运行以下命令:

  1. ./tcpdump -i eth0 -n icmp and src host 192.168.92.1

在Host-1的命令行窗口中运行以下命令:

  1. ping 192.168.92.128

如果在Xshell中能够看到下图中的输出,则表明安装成功:

四、后续

如果想要自行为基于ARM的安卓手机或开发板编译tcpdump工具,则可以参考以下文章:

  1. Monitoring Android Network Traffic Part I: Installing The Toolchain | Symantec Connect Community http://www.symantec.com/connect/blogs/monitoring-android-network-traffic-part-i-installing-toolchain

  2. Monitoring Android Network Traffic Part II: Cross Compiling TCPDUMP | Symantec Connect Community
    http://www.symantec.com/connect/blogs/monitoring-android-network-traffic-part-ii-cross-compiling-tcpdump

  3. Monitoring Android Network Traffic Part III: Installing & Executing TCPDUMP | Symantec Connect Community
    http://www.symantec.com/connect/blogs/monitoring-android-network-traffic-part-iii-installing-executing-tcpdump

编译适用于Android-ARM架构的tcpdump工具

零、准备工作

  1. 安装 Debian 7.8 X86_64
  2. 准备一台有root权限的Android手机
  3. 用root账户登录Debian系统

一、安装交叉编译工具链

1. 安装Emdebian软件仓库的GPG密钥

  1. apt-get install emdebian-archive-keyring

2. 安装Emdebian需要的Squeeze依赖

  1. apt-get install flex
  2. apt-get install byacc
  3. apt-get install make
  4. vi /etc/apt/sources.list

在上述文件最后添加如下内容:

  1. deb http://ftp.us.debian.org/debian/ squeeze main
  2. deb http://security.debian.org/ squeeze/updates main
  3. deb http://www.emdebian.org/debian/ squeeze main

注意:

第一行启用Debian Squeeze的软件仓库,以便于满足Emdebian工具链的依赖;
第二行启用Debian Squeeze的安全更新仓库;
第三行启用Emdebian的软件仓库。

3. 同步Debian软件包的索引文件

  1. apt-get update

4. 安装ARM GNU C++编译器

  1. apt-get install g++-4.4-arm-linux-gnueabi

5. 检查交叉编译器是否安装成功

  1. arm-linux-gnueabi-gcc --version

若上述命令的返回如下所示,则表示安装成功:

二、交叉编译TCPDUMP

1. 下载libpcap和tcpdump的源码包

  1. cd /root/Downloads
  2. wget http://www.tcpdump.org/release/tcpdump-4.7.4.tar.gz
  3. wget http://www.tcpdump.org/release/libpcap-1.7.3.tar.gz

2. 解压缩源码包

  1. tar xvzf libpcap-1.7.3.tar.gz
  2. tar xvzf tcpdump-4.7.4.tar.gz

3. 编译libpcap

  1. cd libpcap-1.7.3
  2. export CC=arm-linux-gnueabi-gcc
  3. ./configure --host=arm-linux --with-pcap=linux
  4. make
  5. cd ..

4. 编译tcpdump

  1. cd tcpdump-4.7.4
  2. export ac_cv_linux_vers=3
  3. export CFLAGS=-static
  4. export CPPFLAGS=-static
  5. export LDFLAGS=-static
  6. ./configure --host=arm-linux --disable-ipv6
  7. make

5. 检查编译是否成功

  1. file tcpdump

若上述命令的输出如下图所示,则表明编译成功:

6. 压缩可执行文件

  1. arm-linux-gnueabi-strip tcpdump

这一步可以将可执行文件的体积减少将近40%

三、安装和执行tcpdump

1. 安装ADB(Android Debug Bridge)软件包

  1. apt-get install android-tools-adb

2. 打开手机的USB调试功能

这个步骤每种手机可能各不相同,请参考对应型号手机的帮助文档
若手机没有完全root,则需要安装adbd.apk应用。

3. 检查手机是否连接成功

  1. adb devices

若上述命令的输出如下图所示,则表明手机已经成功连接:

4. 重新启动ADB后台

  1. adb root
  2. adb remount

注意:

第一条命令会以root账户重新启动ADB后台程序;
第二条命令会将/system分区以/read/write模式重新挂载

5. 检查ADB后台是否成功重新启动

  1. adb shell id

若上述命令的输出如下图所示,则表示ADB后台程序重新启动成功:

6. 上传tcpdump可执行文件

  1. cd /root/Downloads/tcpdump-4.7.4
  2. adb push tcpdump /system/xbin/

7. 检查tcpdump是否安装成功

  1. adb shell tcpdump -h

若上述命令的输出如下图所示,则表示tcpdump已经在手机上安装成功:

Beck – Beautiful Way

Searchlights on the skyline
Just looking for a friend
Who’s gonna love my baby
When she’s gone around the bend
Egyptian bells are ringing
When it’s her birthday
Sweet nothin’, I’m talking about you
There’s a hurricane blowing your way
Ooh such a beautiful way
To break your heart
Ooh such a beautiful way
To break my heart
There’s someone calling your name
It’s driving you insane
You were wearing that stained raincoat
And your umbrella was a tangled mess
You were washed up on the glittering shoals
Looking for another crime to confess
You bribed yourself
Out of a place in the sun
But you had some change to spare
So you said you wanna spend it on me
And shook the blues out of your hair
Ooh such a beautiful way
To break your heart
Ooh such a beautiful way
To break my heart
There’s someone calling her name
You’re gonna miss that train
Ooh such a beautiful way
To break your heart
Ooh such a beautiful way To break my heart
There’s someone calling her name