pencat

从明天起,关心粮食和蔬菜。我有一所房子,面朝大海,春暖花开

建立RouterOS与Fortigate 之间的IPSec tunnel

 

拓扑如下:

top_1

 

RouterOS 端设置:

policy

[admin@pencat] ip ipsec policy> pr
Flags: X - disabled, D - dynamic, I - invalid
0   src-address=192.168.2.0/24:any dst-address=192.168.1.0/24:any protocol=all
     action=encrypt level=require ipsec-protocols=esp tunnel=yes
     sa-src-address=1.1.1.1 sa-dst-address=2.2.2.2
     proposal=default manual-sa=none dont-fragment=clear

peer

[admin@pencat] ip ipsec peer> pr
Flags: X - disabled
0   address=2.2.2.2/32:500 secret="password"
     generate-policy=yes exchange-mode=main send-initial-contact=yes
     proposal-check=obey hash-algorithm=md5 enc-algorithm=aes-256
     dh-group=modp1536 lifetime=30m lifebytes=0

proposal

[admin@pencat] ip ipsec proposal> pr
Flags: X - disabled
0   name="default" auth-algorithms=sha1 enc-algorithms=3des lifetime=30m
     lifebytes=0 pfs-group=modp1536

MySQL可靠性方案分析与比较

从基本情况、成本、优缺点和应用场合等方面对5种MySQL的可靠性方案进行了分析和比较,对MySQL的开发和管理有一定的借鉴作用。

1.MySQL Clustering(ndb-cluster stogare)

简介:
MySQL公司以存储引擎方式提供的高可靠性方案,是事务安全的,实时复制数据,可用于需要高可靠性及负载均衡的场合。该方案至少需要三个节点服务器才能达到较好的效果。

成本:
节点服务器对RAM的需求很大,与数据库大小呈线性比例;
最好使用千兆以太网络;
还需要使用Dolphin公司提供的昂贵的SCI卡。

优点:
可用于负载均衡场合;
可用于高可靠性场合;
高伸缩性;
真正的数据库冗余;
容易维护。

缺点:
随着数据库的变大,对RAM的需求变得更大,因此成本很高;

速度:
几乎 比典型的单独服务器(无千兆以太网,无SCI卡,存储引擎相关的限制少)慢10倍。

应用场合:
冗余,高可靠性,负载均衡
 

2. MySQL / GFS-GNBD/ HA (Active/Passive)

简介:
如果多个MySQL服务器使用共享硬盘作为数据存储,此方案如何?

GFS/GNBD可以提供所需的共享硬盘。

GFS是事务安全的文件系统。同一时刻你可以让一个MySQL使用共享数据。

成本:
最多n台高性能服务器的成本,其中一个激活的,其他作为备份服务器。

优点:
高可靠性
某种程度的冗余
按照高可靠性进行伸缩

缺点:
没有负载均衡
没有保证的冗余
无法对写操作进行伸缩

速度:
单独服务器的2倍。对读操作支持得较好。

应用场合

需要高可靠性的、读操作密集型的应用
 

3. MySQL / DRBD / HA (Active/Passive)
 

简介:
如果多个MySQL服务器使用共享硬盘作为数据存储,此方案如何?

DRBD可以提供这样的共享硬盘。DRBD可以被设置成事务安全的。

同一时刻你可以让一个MySQL使用共享数据。

成本:
最多n台高性能服务器的成本,其中一个激活的,而其他则作为备份服务器。

优点:
高可靠性;
一定程度的冗余;
以高可靠性名义来看是可伸缩的。

缺点:
没有负载均衡
没有保证的冗余
在写负载方面没有伸缩性

速度:
在读写方面相当于单独服务器

应用场合

需要高可靠性、读操作密集型的应用

4. MySQL Write Master / Multiple MySQL Read Slaves (Active/Active) 简介:
考虑不同的读、写DB数据库连接的情况。可以使用一台主服务器用于写操作,而采用n台从服务器用于读操作。

成本:
最多1台高性能写服务器,n台读服务器的成本

优点:
读操作的高可靠性;
读操作的负载均衡;
在读操作负载均衡方面是可伸缩的。
缺点:
无写操作的高可靠性;
无写操作的负载均衡;
在写操作方面无伸缩性;

速度:
同单独服务器;在读操作方面支持得较好

应用场合

读操作密集型的、需要高可靠性和负载均衡的应用。
 

5. Standalone MySQL Servers(Functionally separated) (Active)

多台功能分离的单独服务器,没有高可靠性、负载均衡能力,明显缺点太多,不予考虑。

总结:
MySQL官方网站推荐的HA方案是结合DRBD (本文的方案3) 和 Replication (方案4)。如果再加上Linux Heartbeat还可实现Auto-failover功能,这样down机时间会大大减少。
 

vbs的xmlHttp实用程序的经典函数

Set xmlHttp = CreateObject("microsoft.xmlhttp")
Set oShell = CreateObject("WScript.Shell")
sCurrDir = oShell.CurrentDirectory

 


Function GetPage(Method,Url,Async,PostContent,FileName)
xmlHttp.open Method,Url,Async
If Method = "POST" Then
   xmlhttp.setRequestHeader "Content-Type","application/x-www-form-urlencoded"
   xmlhttp.setRequestHeader "Content-Length",Len(PostContent)
End If
xmlHttp.send(PostContent)
If Async = False Then GetPage = BytesToBstr(xmlHttp.responseBody,"GB2312",FileName) Else GetPage = ""
End Function

Function BytesToBstr(body,Cset,FileName)
Set objstream = CreateObject("ADODB.Stream")
with objstream
.Type = 1
.Mode =3
.Open
.Write body
If not trim(FileName)="" Then .SaveToFile LCase(FileName),2
.Position = 0
.Type = 2
.Charset = Cset
End With
BytesToBstr = objstream.ReadText
objstream.Close
End Function


 

使用方法:

GetPage(提交方法, 提交URL, 是否异步, POST内容, [另存为文件名])

几乎封装了一切可用的,呵呵。以后用xmlHttp做刷网页,破密码等,都是很简单的调用了。效率很高,直接继承了IE的Cookie。

VB6的编译预处理

用关键字“#”来实现条件编译,下面用一个实际例子(调试版本)来说明:

在声明部分用#Const声明一个常量。

#Const DebugVer = True

代码中这样写:

#If DebugVer = True Then
Msgbox "This is the Debug Version Please Report any Messages"
#End If

那么任何位于 #IF… #End IF之间的代码将被编译到最终的EXE文件中,因为你上边定义的条件常量DebugVer的值为true。 如果将DebugVer的值改为false,那么编译工程时将不会编译包含在#IF… #End IF之间的代码。这里的条件常量不一定非要是布尔类型的常量,可以象使用其他常量一样使用这个常量,但是注意它是常量,每次运行它只能是一个值。

在举个例子,根据不同操作系统,需要不用的编译结果(注意是根据操作系统不同而编译结果不同,并不是根据不同的操作系统运行不同的代码。)
声明:

#Const OSVer= "WIN95" '(or WIN98 or WINXP)

代码中:

#If OSVer = "WIN95" Then
'WIN95 Code here
#ElseIf OSVer = "WIN98" Then
'WIN98 Code here
#ElseIF OSVer = "WINXP" Then
'WINXP Code here
#Else
'Non-specific OS here
#End If

以上谈到的方法,#Const使用的范围都是当前模块,那么有没有办法设定全局的,答案是“有”。可以进行如下操作:
打开“工程”=>“属性”,切换到"生成"选项卡,在下边你会看到文本框(条件编译参数)允许设定条件编译参数。比如上面的例子,你可以输入如下参数:
"OSVer=WINXP: DebugVer=True"(没有引号)
如果需要设置多个参数,每个参数之间用冒号分隔,这样设定后就不需要每个模块都用#Const来设置。

Linux内核学习笔记(1)

首先到http://kernel.org/pub/linux/kernel下载一个内核源文件. 我选择了linux-2.6.24-rc8.tar.gz

[root@www linux]# wget http://url/linux-2.6.24-rc8.tar.gz
[root@www linux]# ls -l
total 57756
-rwxr-xr-x    1 root     root     59074448 Apr  3 15:50 linux-2.6.24-rc8.tar.gz
[root@www linux]# tar -zxvf linux-2.6.24-rc8.tar.gz
[root@www linux]# cd linux-2.6.24-rc8v
[root@www linux-2.6.24-rc8]# make mrproper
[root@www linux-2.6.24-rc8]# make menuconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/basic/docproc
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/kxgettext.o
  HOSTCC  scripts/kconfig/lxdialog/checklist.o
  HOSTCC  scripts/kconfig/lxdialog/inputbox.o
  HOSTCC  scripts/kconfig/lxdialog/menubox.o
  HOSTCC  scripts/kconfig/lxdialog/textbox.o
  HOSTCC  scripts/kconfig/lxdialog/util.o
  HOSTCC  scripts/kconfig/lxdialog/yesno.o
  HOSTCC  scripts/kconfig/mconf.o
  SHIPPED scripts/kconfig/zconf.tab.c
  SHIPPED scripts/kconfig/lex.zconf.c
  SHIPPED scripts/kconfig/zconf.hash.c
  HOSTCC  scripts/kconfig/zconf.tab.o


#make mrproper
#make config(基于文本的最为传统的配置界面)
#make menuconfig(基于文本选单的配置界面)
#make xconfig(基于图形窗口模式的配置界面)
#make oldconfig(在原来内核配置的基础上修改)

 

#wget 

P2P软件引起的APACHE假死

环境: Apache/1.3.33
症状: Apache 进程达到152个后停止响应

日志2中看到很多BT软件连上来,在路由的连接日志中显示有很多BT连接. 可能是本地BT软件用了80端口, 远程BT回连的时候被NAT到了APACHE所在的服务器. 连接数过多造成HTTP服务假死.

ros_apache_log_1

           APACHE日志-1

 

ros_apache_log_2

           APACHE日志-2

 

ros_apache_log_3

           路由连接记录

在NAT规则中抛弃含有BT字样的连接后问题解决. 这个问题应该用连接数来解决,否则遇到其他BT软件时还会出现这个问题.

Mount NTFS Partitions

Windows uses a different filesystem (NTFS) to store files. In order for Fedora to read that filesystem, you require NTFS support in your kernel. You can either recompile your kernel for NTFS read support -OR- obtain the proper kernel module.

NOTE: For users who upgraded from FC5 please first read the known bugs and problems.

To setup NTFS access you must (1) install NTFS support, (2) check how many partitions you have, (3) create mount points, (4) mount partitions, and (5) update fstab to mount at next boot.

NOTE: Previously Livna was recommended. However that solution has been known to be problematic in that it may update your kernel, which is normal behaviour. It is recommended to use NTFS-3G instead as it is supported in Fedora Extras and does NOT require kernel updates/upgrades. NTFS-3G also provides safe read-write access. (However SELinux may cause some problems for NTFS-3G.)

1. Install NTFS Support

For yum users:

# sudo yum install fuse fuse-libs ntfs-3g ntfsprogs ntfsprogs-gnomevfs

Users without yum, download fuse, fuse-lib and ntfs-3g (ntfsprogs and ntfsprogs-gnomevfs are optional) from Fedora Extras. Save them to a separate directory (ntfs). They are less than 1MB download.

# cd ntfs# sudo rpm -ivh fuse* ntfs*

No kernel version checking is required, so long as you are using a FC6 kernel.

2. Check Your Partitions

Use fdisk to list partitions. Most ATA hard drives will be /dev/hda. Drives may also show up as /dev/hdb, /dev/sda depending on your configuration.

# sudo /sbin/fdisk -lu /dev/hda | grep NTFS

/dev/hda1 * 63 33559784 16779861 7 HPFS/NTFS
/dev/hda2        33559785    67119569    16779892+   7  HPFS/NTFS
/dev/hda3        67119570   100679354    16779892+   7  HPFS/NTFS

Usually the first will be a drive "letter": C drive, next D, etc. Hence /dev/hda1 is my C:\ drive used by Windows.

3. Create Mount Points

For every partition in step 2 that you wish to access, you will need a "mount point". A mount point is just a directory. Common directories are: /media/ and /mnt/. Use whichever, but be consistent.

# cd /media/# sudo mkdir c_drive d_drive e_drive

You do not have to use these names, if you prefer to create folders such as movies, documents, or winxp, any name will work (without spaces).

4. Mount Partitions

Using NTFS-3G, we can mount the NTFS partition read-write, however it is recommended for novices as read-only. The following mounts and sets the permissions so all users can read the contents of each partition.

# sudo mount /dev/hda1 /media/c_drive -t ntfs-3g -r -o umask=0222
# sudo mount /dev/hda2 /media/d_drive -t ntfs-3g -r -o umask=0222
# sudo mount /dev/hda3 /media/e_drive -t ntfs-3g -r -o umask=0222

Read/Write Access: The above is for read-only access. In order to mount read/write, you must use the -rw -o umask=0000. Example:

# sudo mount /dev/hda1 /media/c_drive -t ntfs-3g -rw -o umask=0000

HIGHLY RECOMMENDED: Please run man mount to understand what umask= does.

5. Update /etc/fstab

Every time Fedora boots, the partitions must be mounted. To automatically mount, you must edit /etc/fstab.

Open /etc/fstab in an editor: (use nano instead of gedit if you do not have a GUI)

# sudo gedit /etc/fstab

Add these lines to the END of the file:

/dev/hda1   /media/c_drive     ntfs-3g    ro,defaults,umask=0222 0 0
/dev/hda2 /media/d_drive ntfs-3g ro,defaults,umask=0222 0 0
/dev/hda3 /media/e_drive ntfs-3g ro,defaults,umask=0222 0 0
Read/Write Access: The above is for read-only access.
In order to mount read/write, you must use the rw,defaults,umask=0000. Example:
/dev/hda1   /media/c_drive     ntfs-3g    rw,defaults,umask=0000 0 0

Done!

NOTE: SELinux Problems

Users of SELinux will fix Fedora blocks the automounting of ntfs partitions when using NTFS-3G. This is a Fedora/SELinux bug, not NTFS-3G. Some support can be found on the NTFS-3G support page.. However for now users can mount everything when they log in by running:

# sudo mount -a

NOTE for FAT32 users

If you have FAT32 or FAT16 partitions, instead of ntfs-3g above you can use vfat to mount your partitions. No extra modules or downloads are required, this is built into the kernel. Just replace vfat for every place we have ntfs-3g when mounting and when editting /etc/fstab.

FAT32/FAT16 read and write is supported. If you wish to mount read/write, then use: '-rw' for Step 4. Mounting Partitions, and 'rw,defaults,umask=0000 0 0' for Step 5. Updating /etc/fstab.

NOTE for Livna NTFS Modules

The Livna NTFS modules are read-only access. I do not recommend using them due to the kernel dependancy. If you require them or NTFS-3G will not work then first setup the Livna repository. Then you can install them:

# sudo yum install kmod-ntfs

For all the above changes you should use ntfs instead of ntfs-3g.

routeos设置不当造成的大附件发送超时

公司内部有个应用.  把某目录的ZIP定时发送到美国, 那边自动解析附件后再处理.  ZIP文件通常是500K-3M不等.  之前一直很正常. 昨天下午负责人向我反映,发出去的信美国收不到. 经过测试,附件超过100K就发不出去.   大附件的邮件是发出去也收不进来.

环境
linux 2.6.9-55.0.12.ELsmp
postfix-2.3.6
routeos 2.9.27
3条光纤接入 10M/10M/2M

遇到问题第一步就是抓包分析 tcpdump tcp port 25 and host 192.168.2.4 -w smtp 


图-1

从结果看握手很正常. 一段时间后开始丢包.  肯定是连接超时造成的。查了postfix日志, 果然有超时的记录。在defer pool里有很多超时的信.

<xxxxxx@yahoo.com.cn>: conversation with mta-v1.mail.vip.cnb.yahoo.com[203.209.228.230] timed out while sending message body
recipient=xxxxxx@yahoo.com.cn
offset=547
dsn_orig_rcpt=rfc822;xxxxxx@yahoo.com.cn
status=4.4.2
action=delayed
reason=conversation with mta-v1.mail.vip.cnb.yahoo.com[203.209.228.230] timed out while sending message body

想了一下, 可能有几种情况.

1. Postfix设置不正确
2. 线路不好, 影响传送
3. MSS值太小

修改了postfix的发送超时参数, 症状依旧. 因为之前附件发送还是可以用的, 所以很快排除postfix的原因. 

接下来考虑线路问题. 修了默认路由, 分别测试了3条线路, 用速度最快的一条做mail出口. 并在mail server上wget, 一直稳定在120K左右, 基本可以排除线路的问题了


图-2

但是连接到美国smtp时速度很慢, 这非常象MSS过小的症状.


图-3


前几天刚刚用ROS做了负载均衡路由,可能是ROS的MSS设置有问题.  在mangle表里做了change MSS操作. 依旧是发不出去信.


图-4

无奈了.  这时旁边的兄弟抱怨: 连接网站怎么这么慢.  突然想到 我给各个部门做了queue. 而mail server也在其中.会不会是这个原因呢?  把upload和download 的max limit都设置为unlimited.  信依旧发不出去. 旁边的兄弟依旧喊慢.

看了一下filter rules  有几条drop规则. 其中一条是DROP内容有mp的数据包. (本意是禁止用户下载mp3,mp4之类的文件) 再回头看一下丢包的地方. 图5中红圈里就是mp, ros把这个包给丢了, 当然要超时.


图-5

disable那个规则,  这时马上提示有新邮件. 一看都是我发送的测试邮件.  至此问题解决. 

以后做filter时一定要很小心很小心, 否则就是给自己找麻烦了 - -!

分析过程的数据包下载

 

换手机~

手机坏了!

MPX200已经用了2年,  Smartphone2003系统.  最大的好处是可以和OUTLOOK同步.  可以和我的笔记本 & PPC 共享资料. 但是没有蓝牙.  出门想上网还得带着T39MC.   所以出门的标准配置是MPX200, T39MC, PDA, NB, 以及所有设备的充电器. 要说不累那是骗人.  一直想把设备化简. 最近MPX200信号时好时坏, 搞的众人怨声载道.  只好换个机器. 

选机!

选机真是头疼的要命. 从前买手机几乎没什么选择. 那个时代6688就是绝对的经典. T39MC T68IE 也就这几种可以选。 登陆手机网站, 差点晕过去.  什么蓝牙 红外 WIFI FM MP3 MP4 PLAM POCKETPC SMARTPHONE LINUX SYMBIAN 简直就是无从下手.  根据自己的需求把目标列出来 一一筛选.  PPC系统是必须的.  之前用PALM的时候联系人一同步就是乱码, 头疼不已.  SYMBIAN 向来没什么好印象。 看NOKIA运行的速度就让我对他失去信心. SMARTPHONE 没手写 PASS. LINUX软件太少 PASS.  需要用手机连接SSH, 那么就一定要有键盘.  屏幕要大.  可以插扩充卡. 最后结果锁定了CHT9000,  O2 ZINC.  这俩机器很好很强大.  几乎我要的功能都有了. 本来目标选了ZINC.  但是突然发现这哥们不支持EDGE.  虽然它的CPU是510.  显卡也比CHT9K好很多,  只能忍痛放弃.

采购! 目标CHT9000. 

采购时发现一个问题。  CHT9000有好多版本. 据说有16个之多 什么T版 Q2版 台版 港版 日版 美版. 而且价格也差很多.  靠 又TMD晕了.  几经周折弄清楚了各版本的关系.  其中台版最好。其次港行 其他版本的多多少少都有一些问题。 接下来在TAOBAO上选卖家. 逛了一周.  所有商家都是有价无货.  在TOMPDA和HIPDA上求了一把, 也是没货. 着实让我郁闷.  最后无奈之下去了丹凤街.  贵就贵吧 谁叫咱心急呢。

 意外!

 丹凤街并不想传说中的那么强大.   CHT9000同样也是没货.   唯一有货的哥们 居然开价3600.  靠。  够我买2台了.  郁闷中逛到一家黑莓店.  机器并没吸引我, 只是招贴画上的迈克让我很有兴趣。据说越狱里也有黑霉的戏份.  店里有几款低端的机器. 根本不入俺法眼. 高端的有8800.  兴趣也不大. 不过店主很热情, 对各种机器也都很了解.  他耐心的解答我所有的问题.  遇到答不上来的还去GOOGLE一下.  这机器没玩过, 也不打算买, 最后想随便找个借口不买. 问: 这机器能跑SSH么.  本以为不能我就撤退. 没想到还让他给找到了.  试用一下 效果还真不错.  这机器还有GPS  和OUTLOOK同步也没问题。有点兴趣。加上老婆也很喜欢  就这样拿下了.  又买了个79XX(没记住型号)把老婆也打发了。 反正很便宜. 

PS: 那家店叫南京零通讯.  三个大学生老板.  人不错, 大家以后买机可以去那里看看 老板的QQ:157488868  (此人非常帅)

试用!

机器没的说. 成色算极品. 双码合一. 
先试验了一下同步联系人.  基本满意. 不过OUTLOOK里的一些字段不能导入.  影响不大. 蓝牙也成.  各种功能正常。 只是用NB通过蓝牙拨号没研究出来.  刚好赶上出差去苏州.  可以派上用场.  机器自带的GPS软件没地图不好用.  不过trekbuddy0.9.73可以完美解决.  能使用OZI地图.  下了南京 苏州地图 效果非常好. 从此告别路痴.   通过2天的研究对GPS地图制作有了点心得.  完全可以做一个完整的全国GPS地图.   有时间把思路和方法发上来.

8800的语音控制很有意思.  用了VoicSignal,  可以识别中文命令.  基本操作可以完全靠嘴.

黑莓的程序是JAVA写的, 通过软件转成专有格式。 同步上去就可以.  支持软件比较少.  而且有的还不稳定. 比如QQ 用了不到5分钟 非法N次. JAVA玩的不是很熟 如果是PPC 需要啥功能随手就搞定  8800就要费点劲. 

最后的结论是 黑莓是个不错玩具  - -!  决定放弃. 刚巧TOMPDA的啊呆有港版CHT9000到货, 又订了一台. 今天已经到了. 明天去公司就能玩了.

后记!

8800给老婆, 那个79XX的黑莓就闲置了, 零通讯的老板很爽快的答应收回那机器.   厚道啊~~ 

早点睡  明天早起去玩CHT9000~~ 

利用蓝牙让电脑通过手机上网的方法

  我是试过电脑通过手机蓝牙上网,但没试过笔记本,估计应该是一样的吧。   第一种方法:这种方法最简单实用。首先电脑中安装蓝牙适配器驱动,将蓝牙适配器插入USB端口,然后,打开手机蓝牙,由电脑蓝牙进行搜索蓝牙设备,搜索到设备后,双击该设备图标,此时电脑蓝牙设备中的拔号网络服务等显示为黄色边框(成为黄色后为激活状态,可以会因为蓝牙品牌不同色彩方式不同),然后你对着拔号网络服务图标右键选择连接,会跳出来一拔号对话框,用户名和密码为空,拔号为*99***1#。然后点击拔号就会自动连接网络。   通过以上步骤,在电脑的开始-拔号连接中,已经自动建立了拔号网络(和宽带拔号那个一样的图标),以后只需要将手机与电脑适配器配对后,直接点击Bluetooth DUN Connection就可以直接拔号,Bluetooth DUN Connection拔号网络可以建快捷方式到电脑桌面上。   第二种方法:这种方法相对复杂一些。按照上面的操作直到拔号网络及蓝牙串行端口图标为黄色边框后,你选连接串行端口,并记住这个端口的端口号(连接端口时,电脑会提示端口号),然后打开手机自带的PhoneSuite软件,在设定中选择你刚才记住的端口号,然后,软件右下方会出现已经连接的提示,你再选择建立联机,电信业者选第一个,然后点击建立联机,这时联机成功后,自动安装拔号调制器,提示成功后,你进入拔接,会看到新出现的拔号网络GPRS-CHINA-MOBILE,你选择它并点击拔接按钮,就开始拔号上网了,同时,也可用此方法实现手机用数据线连接电脑备份恢复电话簿管理文件等一样的工作。   同样,通过以上步骤,在电脑的开始-拔号连接中,已经自动建立了拔号网络(和宽带拔号那个一样的图标)GPRS_China_MOBILE,以后只需要打开PhoneSuite软件、电脑蓝牙与手机蓝牙串行端口连接后,直接点击GPRS_China_MOBILE就可以直接拔号,GPRS_China_MOBILE拔号网络可以建快捷方式到电脑桌面上。   最后,提醒大家,电脑通过手机上网,会产生大流量的数据,所以,没有全包月的用户,慎用。
分页:[«]6[7][8][9][10][11][12][13][14][15][16][17][18][19][20][»]

Powered By Z-Blog 1.8 Devo Build 80201

Copyright © 1998-2007 bigcomic.com All rights reserved.