2013年12月30日星期一

Goodbye 2013, Hello 2014

刚刚翻了下博客, 2013年的前11个月里面, 每个月都有更新, 上次更新还是11月中旬, 今天再更新一次, 算是给 2013 年画上个句号了.

2013年11月17日星期日

squid 相关的知识总结

Squid 相关知识的总结。在工作和学习中和 squid 也有不少的接触了, 这里开个帖子,专门记录和总结自己遇到的一些问题。 

2013年10月22日星期二

Perl 和 Ruby 对比总结 (持续更新)

使用 Perl 也有一段时间,在工作和平时也都做过一些东西,最近开始接触 Ruby ,感觉两者还是有很多相似的地方,但在对面向对象这块,两者也是有根本的区别。 Perl 5 我一直很少用到面向对象的东西,因为本质上 Perl 5 不是一门面向对象的语言,它的面向对象也是通过包,模块等概念来实现;而 Ruby 作为一门完全面向对象的动态语言。 这个帖子是想总结一些 Ruby 和 Perl 中的相同和不同的地方,也方面自己日后查阅。

备注:我这里以 ubuntu 12.04 LTS 做为参考系统

2013年9月11日星期三

Happy with Dreamhost

I have a dream to become a good programmer, and make a great application. During program development, when a perfect running environment is crucial.    Very lucky, I met Dreamhost. I deploy my App on Dreamhost,  and store my app  file on DreamObjects. They make my app fast and stable.

DreamHost is Turning 16 !  I feel happy with  it’s  wonderful service.  I hope dreamhost  developed better and be greater !

2013年9月7日星期六

html定位:scrollLeft,scrollWidth,clientWidth,offsetWidth 介绍

html定位:scrollLeft,scrollWidth,clientWidth,offsetWidth介绍
今天打算在一个页面上添加一个图片的跑马灯特效。看了一些网上的代码,发现自己对于 scrollLeft 和 scrollWidth 等相关概念有些模糊,于是就从别处转来这样一篇文章。最主要的是有完整的附图讲解。

2013年8月21日星期三

ubuntu 安装 php curl 扩展

ubuntu 安装 php curl 扩展。 最近在折腾 php,要安装一个应用,发现缺失 curl 库, 通过 stackoverflow 搜索后解决:

1. sudo apt-get install php5-curl
2. extension=curl.so

装完后,在 /etc/php5/conf.d/curl.ini 配置 extension=curl.so
最后重启一下 apache

sudo /etc/init.d/apache2 restart
最后再吐槽一下 php 的模块安装,真心没有 perl 好用, 而且不同的平台位置还一样, 还是 perl 里面的一个 cpan 命令搞定一切。 

2013年8月15日星期四

yaml 在线解释器

yaml 在线解释器. 今天在搜索php使用yaml的方法时,找到一个 yaml 在线解释器,算是一个非常不错的在线小工具.

2013年7月25日星期四

perl 程序 pp 打包问题

perl 程序打包问题. 想把最近写的一个 pelr 程序部署在其他的机器上, 因为使用了一些非核心模块, 所以需要打包成二进制文件, 尝试使用pp 打包的时候,遇到两个问题:

1. 开发测试机子是 64位的系统, 打完包后到 32 位上会无法运行.(因为不太清楚 pp 内部的编译流程,查了些资料还是没有头绪)
2. 开发测试机上 glibc 库的版本比较高, 在一些 glibc 库版本低的机器上,会报找不到 glibc

上述问题,后续跟进,目前暂时先使用妥协的办法解决,在 32位,低版本 glibc 库的测试机上进行打包.

2013年7月23日星期二

Perl 中的 typeglob 理解

之前一直对于 Perl 中的 typeglob 有些模糊, 不太清楚它的原理以及用法, 今天在用文件句柄重定向时, 找到了如下一篇介绍 typeglob 的文章,讲的很清楚明白.

2013年7月22日星期一

ubuntu 13.04 xrdp 远程桌面连接问题

ubuntu 13.04 xrdp 远程桌面连接问题. win 7 远程桌面连接 ubuntu desktop 有几种办法:
1. vnc 远程连接.在 windows 7 上面安装 vnc client 客户端, 然后启用 ubuntu 桌面共享(远程桌面), 在 win 7 上面通过 vnc 连接 ubuntu.
2. xrdp 远程连接. 不需要在 windows 上安装任何客户端, 直接采用 windows 自带的远程桌面连接程序就可以. 在 ubuntu 上面需要安装 xrdp 服务.

2013年7月13日星期六

搭建 Spdy SSL Proxy (三)

搭建 Spdy SSL Proxy . 经过前面的准备, spdy proxy 服务器已经搞定,剩下的就是本地客户端的一些配置工作.  本地客户端毫无疑问的要使用 chrome 浏览器, 因为目前支持 https 代理的好像只有 chrome ( firefox 目前还没有来得及测试 ).

2013年7月12日星期五

搭建 Spdy SSL Proxy (二)

搭建 Spdy SSL Proxy. 这里我主要介绍一下我的尝试, Shrpx + Squid3 实现的 Spdy SSL Proxy 代理. 下面是一个架构图.

2013年7月11日星期四

搭建 Spdy SSL Proxy (一)

搭建 spdy ssl proxy. 随着 GFW 的不断升级, 很多原来可行的爬墙方法都出了问题: pptpvpn , openvpn 被彻底的干掉了(static key 仍然还可以), ssh 隧道会出现间歇性的断开, shadowsocks 最近也爆出问题. goagent 背靠 google 这颗大树, 暂时还可用,但是因为其用的 gae 公共云, 国外很多网站都已经将其 ip 放入了黑名单了.

转发代理和反向代理

转发代理和反向代理.  昨天在折腾 spdy proxy 的时候, 想用 varnish 来做后端的代理, 因为以前没有怎么接触过 varnish , 找到 varnish 官网的手册一查, 竟然发现 varnish 不可以用来当作转发代理( forward proxy ), 而且也不支持 ssl, 看来 varnish 的目标很明确,就是专注于反向代理( reverse proxy ).  而 squid 作为一款经典代理软件, 其功能已经很全面了. 可以通过灵活的配置实现实现转发代理(也可以叫做:正向代理) 和反向代理.

2013年6月20日星期四

perl 核心模块统计

perl 核心模块统计.  最近在整理自己经常使用的 Perl 模块. 学习和使用 Perl 也有一段时间了, 但是自己用到的模块还是很有限的, 一般都是用到的时候去 CPAN 检索, 但是 CPAN 上的模块数量太多了, 如何去筛选适合自己的模块也是一个难题.

2013年6月18日星期二

中文 CPAN 文档

中文 CPAN 文档. 在学习和使用 perl 的过程中, perldoc 和 cpan 是非常有用的工具. 这里 mark 一下 扶凯 同学提供的 中文 CPAN 文档 , 除了有 perldoc 中文翻译外, 还有类似 mojo, par 等其他 perl 模块的中文文档. 再次赞一下扶凯和其他的参与 perl 文档翻译的同学! http://cpan.php-oa.com/perldoc/index

不靠谱的互联网服务

不靠谱的互联网服务.  之所以想写这样一篇文章, 其实也是想总结自己从 2000 年开始接触使用互联网后所经历的各种各样的坑. 也是提醒自己以后避免这样的坑.

2013年5月30日星期四

网络层点到点, 传输层端到端

在 TCP/IP 详解 卷一:协议 的第一章的总结部分有这样一句话: "网络层和运输层之间的区别是最为关键的: 网络层(IP)提供点到点的服务,而运输层(TCP和UDP)提供端到端的服务"  这句话本身有些抽象, 从网上找到了对于这句话的一些补充和解释.

2013年5月29日星期三

ubuntu update-rc.d 和 chkconfig 命令

在 redhat 和 centos 上可以用 chkconfig 来管理系统服务的启动, 但在 ubunut 上 12.04 还可以使用 chkconfig ,但在 12.10 起默认就没有安装 chkconfig 了, 当然可以通过 apt install chkconfig 来进行安装并使用. 今天主要是想说一下 debian/ubuntu 上可以替代 chkconfig 的命令 update-rc.d 命令.

2013年5月16日星期四

ubuntu vps 安装和设置

ubuntu vps  安装和设置。 对于 ubuntu vps 安装和设置的一系列记录。

1. 初始化安装后的设置
基于 ubuntu-12.04 32bit minimal, 使用 root 登陆到 vps 后, 新建用户:
adduser demo
根据提示创建用户和密码。下面将新建的这个用户添加到 sudo 用户组:
usermod -aG sudo demo
更新系统并安装 vim
apt-get update
apt-get upgrade
apt-get install vim
接下修改 sshd 的端口和登陆账号限制, 首先修改 /etc/ssh/sshd_config 文件
vim /etc/ssh/sshd_config Port 65536
PermitRootLogin no
修改 ssh 端口为 65536, 不允许 root 登陆,最后再添加如下一行到配置文件的最后
AllowUsers demo
设置仅允许 demo 账号登陆
2. 安装 lemp 环境(linux nginx mysql php) 首先安装 mysql-server
apt-get install mysql-server
因为默认安装的 mysql-server 比较占用内存,对于小内存的 vps 来说,需要进行一些优化,具体的可以参见 小内存 vps mysql 优化 这篇文章,在这里我再重复一下

cp /etc/mysql/my.cnf /etc/mysql/my.cnf.`date +%s`
find /usr/share/doc/mysql* -name my-small.cnf -exec cp {} /etc/mysql/my.cnf \;
sed -i 's/\[mysqld\]/&\nuser = mysql\n/' /etc/mysql/my.cnf
然后再修改 /etc/mysql/my.cnf 文件, 在 [mysqld] 下添加以下两行
 innodb=OFF 
default-storage-engine=MyISAM
然后重启mysql
/etc/init.d/mysql restart 
现在再下,经过以上几步的优化,vps 内存的占用大概只有 30m 左右,接下来安装 nginx 和php
apt-get install nginx
service nginx start
apt-get install php5-fpm
然后修改 /etc/php5/fpm/php.ini 文件
cgi.fix_pathinfo=0
然后重启 php5-fpm
service php5-fpm restart
然后开始配置 nginx 使其支持 php5-fpm, 首先备份一下default 配置文件
cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak
将 default 配置文件中的下面这段的注释给取消掉
       location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

                # With php5-cgi alone:
                # fastcgi_pass 127.0.0.1:9000;
                # With php5-fpm:
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        } 
并将 server {} 段里面的 index 中添加 index.php

然后修改 /etc/php5/fpm/pool.d/www.conf 文件,将其中的 listen = 127.0.0.1:9000 修改为 listen = /var/run/php5-fpm.sock 然后重启 php5-fpm service php5-fpm restart
接下安装 phpmyadmin apt-get install phpmyadmin 并根据提示填写 mysql 的 root 密码, 注意,因为要使用nginx ,所以在 webserver 选择这里不要选择. 安装完成后 ln -s /usr/share/phpmyadmin/ /usr/share/nginx/www , 这样就可以通过 ip/phpmyadmin 的方式来访问 phpmyadmin 了, 在这里可能会有个报错说 The mysqli extension is missing , 解决办法是修改 /etc/php5/fpm/php.ini 文件,添加 extension=mysqli.so 然后重启 php5-fpm 和nginx 就可以了
最后打算再说一下 ftp ,设置为 限定指定的用户可以登录的方法
userlist_enable=YES //用户清单功能开启
userlist_deny=NO //把用户清单设为接受用户清单
userlist_file=/etc/vsftpd.user_list //用户清单文件为/etc/vsftpd.user_list
因为第二个语句把文件/etc/vsftpd.user_list设为接受用户清单,那么,文件里
面的用户名都能登录,不在文件里的用户不能登录。
从这里可以看出userlist_deny语句起了开关的作用,可把用户清单文件设为拒绝或是接受

2013年5月15日星期三

小内存 vps mysql 优化 (ubuntu)

小内存 vps mysql 优化 (ubuntu)

手里有个 512m 的vps ,安装的是 ubuntu 12.04; 使用 tasksel 安装 lamp 应用后,默认的内存占用大概在 350m 左右。 我以为是因为 apache 的原因,就打算使用 lemp ( linux + nginx + php-fpm + mysql ),手动安装 mysql-server: apt-get install mysql-server  后发现内存占用竟然也达到了 300m, 看来问题主要在 mysql-server 上。所以开始查找优化的方案。

首先参照 http://wiki.ubuntu.org.cn/Vps 上的教程对 mysql 进行优化

cp /etc/mysql/my.cnf /etc/mysql/my.cnf.`date +%s`
find /usr/share/doc/mysql* -name my-small.cnf -exec cp {} /etc/mysql/my.cnf \;
sed -i 's/\[mysqld\]/&\nuser            = mysql\n/' /etc/mysql/my.cnf

然后重启 mysql-server

/etc/init.d/mysql restart
 
然后再看内存占用,发现比之前少了一些,但是并不是很明显。
 
因为我只是安装 wordpress, 永不倒 innodb ,所以需要再进行如下优化
 
编辑 /etc/mysql/my.cnf 
 
在[mysqld] 下添加两行
 
innodb=OFF
default-storage-engine=MyISAM

然后重启 mysql

/etc/init.d/mysql restart 
 
再看内存占用情况,wonderful !只有 30多m 了! 


2013年4月22日星期一

perl dump 数据的几种方式

在使用 Perl 语言的过程中,经常会需要打印或者 dump 一个变量的数据内容。 因为 perl  的 There‘ is more than one way to do it 。 所以可以选择的方式也肯多,所以自己也就总结了一下自己京城使用的到的几种方法:
   1:  #!/usr/bin/perl
   2:  use warnings;
   3:  use strict;
   4:  use Data::Dump qw(dump);
   5:  use Data::Dumper;
   6:  use Smart::Comments;
   7:  use YAML;
   8:   
   9:  my @a = (1, [2, 3], {4 => 5});


我这里要对数组 @a 进行 dump 以方便调试和查看其内容。
从我 use 模块也可以看出来我要使用的几种方法:

(1)首先尝试 Data::Dump  的 dump 方法
 
   1:  dump(@a);

其对应的输出为:

   1:  (1, [2, 3], { 4 => 5 })


(2)尝试  Data::Dumper  的 Dumper 

   1:  print Dumper(@a);

其对应的输出为:

   1:  $VAR1 = 1;
   2:  $VAR2 = [
   3:            2,
   4:            3
   5:          ];
   6:  $VAR3 = {
   7:            '4' => 5
   8:          };



(3) 尝试 Smart::Comments 的  ###

   1:  ### @a;


其对应的输出为:

   1:  ### @a: [
   2:  ###       1,
   3:  ###       [
   4:  ###         2,
   5:  ###         3
   6:  ###       ],
   7:  ###       {
   8:  ###         '4' => 5
   9:  ###       }
  10:  ###     ]


(4)  尝试 YAML 里面的 Dump 函数

   1:  print YAML::Dump(@a);


其对应的输出为:

   1:  --- 1
   2:  ---
   3:  - 2
   4:  - 3
   5:  ---
   6:  4: 5
 

(5) 最后尝试一下 print 函数

   1:  print "@a";

其对应的输出为:

   1:  1 ARRAY(0x1acf998) HASH(0x1aece20)


综述:以上几种方法,可以看到各有个的不同,也有侧重点,比如 Data:Dump  几乎是按照代码里面的数据结构输出了; YAML::Dump 是以 yaml 格式输出, 而 print 方法最简单,但是却无法打印内嵌的哈希元素,智能打印其引用的内存地址,这当然不是我们想要的。 Smart::Commnets  的输出很适合进行调试。 所以根据自己的需要各取所需了。   我这里只是列出了 5中方法,参考下面的这篇可以看到更多种方法的对比。
Dumping data in Perl
http://oylenshpeegul.typepad.com/blog/2012/01/dumping-data-in-perl.html

2013年3月25日星期一

linux没有扩展名的概念

记得以前工作的时候就犯过一个错,认为 linux win 一样都有扩展名的概念, 结果给程序带来了不少问题。

这里也提醒下开始接触 linux 的朋友, linux 下没有扩展名的概念,所有的 .XXX 只是为了方便你去辨识是哪类文件而已。
GCC文件后缀名:
  .c为后缀的文件,C语言源代码文件; 
  .a为后缀的文件,是由目标文件构成的档案库文件; 
  .C,.cc或.cxx 为后缀的文件,是C++源代码文件; 
  .h为后缀的文件,是程序所包含的头文件; 
  .i 为后缀的文件,是已经预处理过的C源代码文件; 
  .ii为后缀的文件,是已经预处理过的C++源代码文件; 
  .m为后缀的文件,是Objective-C源代码文件; 
  .o为后缀的文件,是编译后的目标文件; 
  .s为后缀的文件,是汇编语言源代码文件; 
  .S为后缀的文件,是经过预编译的汇编语言源代码文件。

2013年3月24日星期日

owncloud 私有云平台 (1): 编译 windows client

最近因为工作需要,接触了 owncloud 私有云平台,感觉真的很不错; 最特别的是其 app 扩展功能, 任何人都可以为依据这个私有云平台开发插件和应用, 目前这个平台已经可以集成 email rss  等相关应用, 我认为以后可能还会集成 blog 或者 微博等相关应用,这样这款应该就可以真正的成为个人应用云平台。

 

下面转入正题,owncloud windowslinuxandroid ios 的客户端, 这里主要说一下 owncloud windows client 的编译过程。

1. 首先是编译环境,基于 opensuse 12.1 x64 版本,因为要在 linux 上编译 windows 程序,因此需要构建交叉编译环境。 构建这交叉编译环境是个力气活,因为要添加各种源,还有各种依赖要去解决和安装,所以花的时间比较长。 这里可以参考一下官方的文档 这篇文档。(在这里我建议在虚拟机里面安装 opensuse 并构建交叉编译环境,这样就可以将安装好的编译环境导出备份,以做后用。)

2. 编译过程。 只要交叉编译环境搭建好之后,剩下的就比较顺利了。

   <code>

   #  cd ~

   #  mkdir owncloud-client

   #  cd owncloud-client

   #  git clone git://git.csync.org/users/freitag/csync.git ocsync

   #  git clone git://github.com/owncloud/mirall.git

   #  mkdir ocsync-build

   #  mkdir mirall-build

   #  cd ocsync

   #  git checkout dav

   #  cd ocsync-build

   #  mingw32-cmake -DCMAKE_BUILD_TYPE="Debug" ../ocsync

   #  mingw32-make

   #  cd ../mirall-build

   #  cmake -DCMAKE_BUILD_TYPE="Debug" ../mirall \

      -DCSYNC_BUILD_PATH=/home/speed/owncloud-client/ocsync-build \

      -DCSYNC_INCLUDE_PATH=/home/speed/owncloud-client/ocsync/src \

      -DCMAKE_TOOLCHAIN_FILE=../mirall/admin/win/Toolchain-mingw32-openSUSE.cmake

   #  mingw32-make

   #  sudo mingw32-make package

  </code>

 

3. 最后看到 owncloud-1.2.2-setup.exe generated  这个字样就可以了,说明 windows 客户端编译完成了。

 

参考文章:owncloud 官方文档: https://github.com/owncloud/mirall/blob/master/doc/building.rst

          另外一篇文档     https://gist.github.com/Noxwizard/4011094

 

定制自己的 linux 发行版

首先援引一条官方新闻

 

"日前工信部软件与集成电路促进中心正式宣布与 Canonical 达成协议,双方未来将合力打造专为中国市场而设的 Ubuntu 麒麟(Ubuntu Kylin)操作系统基准架构,为中国的硬件、软件开发者提供参考。据悉在四月的时候基于 Ubuntu 13.04Raring Ringtail)的版本就会上线,其中会加入具有中国特色的农历、输入法、音乐服务等,未来百度地图、交通资讯、淘宝购物、照片编辑、WPS 等功能也均会被整合到系统之中。" ( 以上文字来自 瘾科技 Engadget )

 

 

看了这条新闻之后还是有些欣慰,毕竟光明正大的和开源社区合作要比银河麒麟涉嫌抄袭 FreeBSD 要好。 好吧转入正题吧,说一下定制自己的 Ubuntu 发行版。

 

为什么要定制呢,可能每个人的原因都不一样,比如说我很不喜欢 Ubuntu unity,系统经常动不动就报错。 如果你只是想换其他的桌面环境的话,你可以直接到 Ubuntu 官方下载包含不同桌面环境的光盘镜像,目前我知道的有, kubuntuKED),xubuntu xfce), lubuntu lxde),其他的还有很多, 如果你不满足以上官方给出的镜像, 你还可以尝试一下定制自己的  Ubuntu 发行版。 链接给出:  http://code.google.com/p/ubuntu-builder/   也就是 Ubuntu build   不过这里还是要吐槽一下, 这个和 http://susestudio.com   相比还是逊色不少。 如果你对 suse 或者 opensuse 感兴趣的话, 可以尝试一下 susestudio.com 功能真的很赞。

2013年3月23日星期六

linux 终端下漂亮的字体

自己有一台奔4, 512m 的老爷本,安装的 debian 7 + lxde 图形界面环境; 因为自己的台式机上一直使用的是  ubntu , ubuntu 默认的 teminal  的字体就比较漂亮; 今天使用  lxde  上  lx 终端, 字体默认是  Monospace ,而且还不是等宽字体, 感觉真的好丑,连写代码的欲望都没有; 随即 google 了一下, 发现 linux 迷 推荐的linux 终端下最漂亮的字体,于是就安装了 Droid Sans Mono 这款字体。

安装方法很简单: sudo apt-get install ttf-droid

瞬间感觉棒及了!   mark 一下

2013年3月8日星期五

搭建 ipv6 测试环境 (一)

因为最近要做了一个 ipv6 cdn 加速项目,所以开始着手准备 ipv6 相关的测试环境,从网上搜出来不少相关的文章:有一篇介绍是通过 DynamipsGUI vmware 来搭建ipv6 测试网络; 照着做了下,发现比较复杂,仅仅是 DynamipsGUI 的设置就比较麻烦; 后来看到老外的一篇文章,在 he.net 申请 ipv6 隧道,会获得一个 /64 ipv6 子网, 但因为 he.net 隧道要就客户端这边的 endpoint 要有独立的 ip 才行, 所以我就绕了个弯子; 在自己的美国的 vps 有独立的 ipv4 地址 建立了一个 ipv6 隧道,然后再搭建给予 TAP openvpn 服务器,并安装  radvd 服务进行 ipv6 地址的路由; 这样的话,我处于内网的电脑,通过 openvpn 连接到我的  vps 上面,组建一个网络;这样,我处于内网的 电脑就可以获得公网 ipv6 地址了。  这个方案总体满足了测试的需求,并且可以从公网访问。 但是这个方案也有很多的不足,首先就是 openvpn 协议收到  gfw 的影响,很难连的上,第二就是网络延迟比较大,不适合进行测试。 对于 openvpn 协议受到干扰的问题,有好几种方法,整体思路就是修改报文的指纹,使得 gfw 无法认出 openvpn 协议,所以就无法干扰了。 但是对于网络的高延迟这块,就没有办法解决了。 后来因为项目搁浅的原因,我也去忙其他的了。

 

今天因为这个项目又有点消息了,我就又从网上查了一些资料,其中看到 https://wiki.ubuntu.com/IPv6  ubuntu 的关于 ipv6 的相关文档。 有看了一篇 ibm 的一篇关于搭建 ipv6 测试环境的文章 http://www.ibm.com/developerworks/cn/linux/l-cn-ipv6env/ 我就尝试了在我的 vmware 局域网中的一台 Ubuntu 服务器上 安装  radvd  服务,并配置了 ipv6 子网; 我发现处于局域网内的其他设备默认就配置好了 ipv6 地址了。 通过测试,发现完全满足自己的 ipv6 需求。

 

下面简单总结一下安装和设置的步骤:

1.       开启 ipv6 的转发功能, 修改 /etc/sysctl.conf  文件,开启 ipv6 的转发功能 去掉对 net.ipv6.conf.all.forwarding=1 的注释),并 sudo sysctl �p  使生效。

 

2.       安装 radvd 服务 (基于  Ubuntu 12.04): sudo apt-get install  radvd

 

3.       配置 ipv6 静态 ip地址; /etc/network/interfaces  中添加下面配置

 

iface eth1 inet6 static

        address 2002:9ba:b4e:6::1

            netmask 64

4.       编辑 /etc/radvd.conf 文件

 

interface eth1

{

   AdvSendAdvert on;

   prefix 2002:9ba:b4e:6::/64

   {

        AdvOnLink on;

        AdvAutonomous on;

   };

};

5 重启 radvd 服务, /etc/init.d/radvd restart

 

现在看下你局域网里的其他设备是不是已经设置好了 ipv6 的地址了

2013年3月5日星期二

ubuntu 下 vim 插件汇总

转眼就3月了,春天要来了! 距离上篇博客又是半个多月了。最近打算搞一下 php ;工欲善其事,必先利其器, 所以要搞定下 ide ,这里我还是用 vim

Vim 有很多的插件,选择合适的插件,并来个完美的vim 配置文件很重要的。  首先默认  ubuntu 并没有安装 vim ,所以要先把 vim 安装上。祭出 Apt 超级牛力命令  sudo apt-get install vim  ;

安装完后,推荐一款 Ubuntu 上的 vim 插件管理工具, vim-addon-manager  可以很方便的管理现在已经安装的插件; 安装完  vim-addon-manager 后在安装  vim-scripts 里面包含一些常用的 vim 脚本和插件。

 

除此之外, http://www.vim.org/scripts/  这里有任何你需要的 vim 插件和脚本;  这里 make 一下, 通过 http://www.vim.org/scripts/  直接下载并解压安装的 vim 插件; 在完成安装前需要下面的这个步骤:

 

console 里面 打开 vim 然后执行以下命令       ":helptags  ~/.vim/doc/"    

 

这样就可以在 vim help 里面查到手工安装的 插件的帮助文件了;

 

 

最后备注几个常用或者不错的 vim  插件;  ctags  不是 vim 的插件,但属于使用 vim 必装的软件,ubuntu 下可以用  apt 直接安装; taglist  非常不错;  NERD_commenter  NERD­_tree 也是非常的不错的插件;剩下的一些是和具体代码相关的插件, 比如 a.vim  c.vim  以及 zencoding   phpcomplete php-doc

 

 

时间有限,这里就是简单的罗列一下,mark

2013年2月19日星期二

转载:虚拟化之QEMU与KVM

最近工作要搞下 kvm ,但是对于 QEMU KVM 的关系有点搞不清;但是看了下面这篇文章后就明白了。转载自:http://blog.chinaunix.net/uid-23769728-id-3256677.html  版权归原作者所有。

 

QEMU是个完全独立的虚拟环境,因为KVM的出现,使得某些同学(包括我自己)对QEMUKVM之间的关系不是很清楚。QEMU本身可以不依赖于KVM,但是如果有 KVM的存在并且硬件(处理器)支持比如Intel VT功能,那么QEMU在对处理器虚拟化这一块可以利用KVM提供的功能来提升性能。这篇博文侧重点在QEMU这块,前期主要是考察一下其使用,以及和KVM之关系,后续的博文会涉及到两者间的一些实现机制。

QEMU
目前最新的版本是1.1.0 (
http://www.qemu.org), download到本地后,比如放到/home/dennis/workspace/Linux下是qemu-1.1.0-1.tar.bz2, 解压之后得到一个qemu-1.1.0的目录,为了实验的目的,我不想让它替换掉我系统中已经安装的qemu工具集合(bin tools set),所以我在/home/dennis /workspace/Linux下面重新建立了一个目录,比如qemu-bin-dbg. 先进入到/home/dennis/workspace/Linux/qemu-1.10目录下,然后依次执行:
1)./configure --prefix=/home/dennis/workspace/Linux/qemu-bin-dbg --enable-debug
这一步需要说明的是,我实验用的环境是ubuntu 12.04, 内核版本是我自己更新的3.4.3, intel i3处理器,在我实际操作过程中出现了以下的错误:
Error: zlib check failed
Make sure to have the zlib libs and headers installed.
----------------------------------------------------------
google
了一下,这个错误很容易解决:
apt-get install zlib1g-dev
apt-get install libglib2.0-dev
2) make
3) make install

然后我们到/home/dennis/workspace/Linux/qemu-bin-dbg目录下,会发现QEMU的工具集都放在了其中的bin目 录下,其中会有qemu-i386qemu-system-i386,前者只是对处理器的模拟(指令),后者则模拟一个基于i386PC. 如果没有KVM的支持,比如rmmod kvm_intel,然后再运行qemu-system-i386,那么就会出现这样的提示信息:

Could not access KVM kernel module: No such file or directory

failed to initialize KVM: No such file or directory
Back to tcg accelerator.

因为前面我大体浏览过KVM的某些代码,KVM内核模块会生成一个"/dev /kvm"设备文件供用户空间程序使用,上面的提示信息就是因为QEMU在初始化阶段因为无法找到该"/dev/kvm"文件,因此认为当前系统没有提供 对KVM的支持,因而QEMU回退到所谓的tcg accelerator模式,这从另一个角度说明,独立的QEMU虚拟化方案并不一定需要KVM提供支持。

我的理解是KVM模块的存在可 以视为QEMUi386处理器模拟的一种accelerator,如同GPU3Dhardware acceleration一样(在没有GPU存在的情况下,软件也可以实现某些3D的功能,不过性能显然要慢多了,比如mesa).所以即便在 kvm_intel.ko不存在的情况下,QEMU也可以完成对一个pc的虚拟化。

KVM
Kernel-based Virtual Machine,从存在形式看,是两个内核模块kvm.kokvm_intel.ko(AMD处理器来说,就是kvm_amd.ko),这两个模块用 来实现CPU的虚拟化,如果要让用户在KVM上完成一个虚拟机相关的操作,显然需要用户空间的东西,同时还包括IO虚拟化,所以KVM的解决方案借鉴了 QEMU的东西并做了一定的修改,形成了自己的KVM虚拟机工具集和IO虚拟化的支持,也就是所谓的qumu-kvm.

所以总结下来 是:QEMU是个独立的虚拟化解决方案,从这个角度它并不依赖KVM。 而KVM是另一套虚拟化解决方案,不过因为这个方案实际上只实现了内核中对处理器(Intel VT, AMD SVM)虚拟化特性的支持,换言之,它缺乏设备虚拟化以及相应的用户空间管理虚拟机的工具,所以它借用了QEMU的代码并加以精简,连同KVM一起构成了 另一个独立的虚拟化解决方案,不妨称之为:KVM+QEMU. 在我看来,KVM在用户空间的工具实际上是QEMU虚拟机管理工具的一个子集(KVM使用的QEMU代码可以在http://www.linux-kvm.org/page/Code上 下载):KVM用户空间虚拟机管理工具有kvm kvm-img kvm-nbd kvm-ok kvm_stat,实际上kvm就是一个指向qemu-system-x86_64的符号链接,kvm-img则是指向qemu-img的符号链接,至 少我的系统中就是如此。从适用的范围来讲, QEMU虚拟化方案除了支持x86架构外,还支持其他很多架构,这从上文中/home/dennis/workspace/Linux/qemu- bin-dbg/bin目录下的文件名就可以看出来,比如qemu-system-m68kqemu-system-mips64 qemu-system-ppc64 qemu-system-arm等等。但是目前提到KVM,一般指x86上基于Intel VTAMD SVM的解决方案,虽然目前将KVM移植到ARM, PPC的工作正在进行中。

当然由于redhat已经开始支持KVM,它认为KVM+QEMU'的方案中用户空间虚拟机管理工具不太好使,或者通用性不强(可以参考201110月份在南京大学举办的中国内核开发者大会上,来自redhat从事libvirt工作的资深专家 Daniel Veillard当天演讲的ppt文档:http://v.csdn.hudong.com/linuxkernal2011/page2.html),所以redhat想下一盘很大很大的棋,于是它搞了一个libvirt出来,一个用来管理虚拟机的API库,不只针对KVM,也可以管理Xen等方案下的虚拟机。关于libvirt,这是后话了,我会在后续的博文中予以讨论。

综上:QEMU虚拟化(模拟器)解决方案并不依赖KVM,而KVM虚拟化方案则一定要依赖QEMU(至少目前是),即便redhat开发了libvirt,但后者可以简单认为是一个虚拟机管理工具,libvirt依然需要用户空间的QEMU来和KVM交互。

2013年1月31日星期四

affect与effect的区别

因为对于  affect    effect 用法的模糊,今天特地总结一下:

 

 

effect 是名词,"影响",搭配短语:have an effect on sth.=have an influence on sth.・・有影响
affect
是动词,"影响",直接跟宾语,affect sth ・・・有影响,且通常指不利的影响。
eg, Sandstorms sometimes affect Bejing.
     Watching TV for a long time will have a bad effect on your eyes.

 

 

         Effected   v. 产生;造成;招致(effect的过去分词); adj. 实现了的;受影响的

         Affected   vt. 影响;假装;使感动(affect的过去式和过去分词);adj. 受到影响的;做作的;假装的

 

 

         Effective   adj. 有效的,起作用的;实际的,实在的;给人深刻印象

         Affective   adj. 情感的;表达感情的

 

 

Effection   n. 影响;结果

         Affection    n. 喜爱,感情;影响;感染

 

Effectual   adj. 奏效的;会应验的;有法律效力的

Affectual    affectual action  情感行动

 

 

2013年1月27日星期日

U盘式生存法则: 自带信息 不装系统 随时插拔 自由协作

从网上看了罗振宇的一期脱口秀, 题目是"夹缝中的 80" 比照自身也想了很多,很喜欢他总结的 U盘式生存法则:  自带信息 不装系统 随时插拔 自由协作。    感觉他这期提到的这些挺对的; 就是小个体的专业自由主义, u 盘式生存方式; 也许这真的是未来这个社会的发展趋势了。要坚决的脱离这个体制; 尤其是一个庞大和腐朽的体制;让市场为自己定价; 做一个自由的手艺人。 专一,专业,自由,不断学习的,一个市场中的节点。

 

视频地址:

http://v.youku.com/v_show/id_XNTA2NDQ4MzIw.html

2013年1月24日星期四

脂肪肝注意 18 条措施

下面介绍的18条措施,在脂肪肝的自疗自养中是非常重要的:

  1、绝对禁酒。

  2、选用去脂牛奶或酸奶。

  3、每天吃的鸡蛋黄不超过2个。

  4、忌用动物油;植物油的总量也不超过20克。

  5、不吃动物内脏(即下水、下货)、鸡皮、肥肉及鱼籽、蟹黄。

  6、忌食煎炸食品。

  7、不吃巧克力。

  8、常吃少油的豆制品和面筋。

  9、每天食用新鲜绿色蔬菜500克。

  10、吃水果后要减少主食的食量,日吃一个苹果,就应该减少主食50克。

  11、山药、白薯、芋头土豆等,要与主食米、面粉调换吃,总量应限制。

  12、每天摄入的盐量以5--6克为限。

  13、葱、蒜,姜、辣椒等"四辣"可吃,但不宜多食。

  14、经常吃鱼、虾等海产品。

  15、降脂的食品有:燕麦、小米等粗粮,黑芝麻、黑木耳、海带、发莱以及菜花等绿  色新鲜蔬菜。

  16、晚饭应少吃,临睡前切忌加餐。

  17、每天用山楂30克、草决明子15克,加水1000毫升代茶饮。

  18、如果肪肝引起肝功能异常,或者转氨酶升高时,应在医生指导下服用降脂药、降酶药物和鱼油类保健品,但不宜过多服用。

2013年1月22日星期二

centos 5 添加第三方源(EPEL RPMForge)

不错的文章,mark 一下, 转自 http://www.ha97.com/2626.html

PS:在CentOS下运行yum install flash-plugin或yum install mplayer的时候,提示库里没有找到这个软件?为什么会这样?因为CentOS是RHEL编译过来的,去掉了所有关于版权问题的东西。因此,在没有使用第三方软件库的情况下,很多软件无法用yum install来直接安装。
EPEL(Extra Packages for Enterprise Linux )软件库提供为 EL4 及 EL5 重新编译的 Fedora 组件。这个软件库在不替换系统组件方面下了功夫。在某些情况下它尝试直接针对 CentOS 兼容性的问题,但坚决否定软件库间的兼容性是目标之一。当它与其它第三方软件库混合使用时,问题可能会出现。故此,当你使用 EPEL 时,尤其是当你亦会运用其它件库的组件时,请确保你使用 yum 的 Priorities 插件。
RPMForge库现在已经拥有超过10000种的CentOS的软件包,被CentOS社区认为是最安全也是最稳定的一个第三方软件库。
下面,偶就来讲解下如何使用EPEL与RPMForge、RPMFusion软件仓库:
一、安装yum-priorities插件。
这个插件是用来设置yum在调用软件源时的顺序的。因为官方提供的软件源,都是比较稳定和被推荐使用的。因此,官方源的顺序要高于第三方源的顺序。如何保证这个顺序,就需要安装yum-priorities这插件了。
[root@CentOS ~]# yum install yum-priorities #安装yum-priorities
安装完后需要设置/etc/yum.repos.d/ 目录下的.repo相关文件(如CentOS-Base.repo),在这些文件中插入顺序指令:priority=N (N为1到99的正整数,数值越小越优先)

一般的配置是这样的:
[base], [addons], [updates], [extras] … priority=1
[CentOSplus],[contrib] … priority=2
其他第三的软件源为:priority=N (推荐N>10)
如我的CentOS-Base.repo配置为:
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS-$releasever – Base
mirrorlist=http://mirrorlist.CentOS.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.CentOS.org/CentOS/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
priority=1
#released updates
[updates]
name=CentOS-$releasever – Updates
mirrorlist=http://mirrorlist.CentOS.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.CentOS.org/CentOS/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
priority=1
#packages used/produced in the build but not released
[addons]
name=CentOS-$releasever – Addons
mirrorlist=http://mirrorlist.CentOS.org/?release=$releasever&arch=$basearch&repo=addons
#baseurl=http://mirror.CentOS.org/CentOS/$releasever/addons/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
priority=1
#additional packages that may be useful
[extras]
name=CentOS-$releasever – Extras
mirrorlist=http://mirrorlist.CentOS.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.CentOS.org/CentOS/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
priority=1
#additional packages that extend functionality of existing packages
[CentOSplus]
name=CentOS-$releasever – Plus
mirrorlist=http://mirrorlist.CentOS.org/?release=$releasever&arch=$basearch&repo=CentOSplus
#baseurl=http://mirror.CentOS.org/CentOS/$releasever/CentOSplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
priority=2
#contrib – packages by CentOS Users
[contrib]
name=CentOS-$releasever – Contrib
mirrorlist=http://mirrorlist.CentOS.org/?release=$releasever&arch=$basearch&repo=contrib
#baseurl=http://mirror.CentOS.org/CentOS/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
priority=2
二、下载与安装相应EPEL的rpm文件包
1,下载与安装EPEL的rpm文件包
32位系统
[root@CentOS ~]# rpm -ivh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
64位系统
[root@CentOS ~]# rpm -ivh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
如果您不清楚您的系统内核,请使用 uname -a 命令来查看您的内核信息。
2,导入DAG的PGP Key
[root@CentOS ~]# rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
3,设置/etc/yum.repos.d/epel.repo文件中源的级别,就是添加priority=11这句。
如我的epel.repo文件内容:
[epel]
name=Extra Packages for Enterprise Linux 5 – $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/5/$basearch
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
priority=11
[epel-debuginfo]
name=Extra Packages for Enterprise Linux 5 – $basearch – Debug
#baseurl=http://download.fedoraproject.org/pub/epel/5/$basearch/debug
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-debug-5&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
gpgcheck=1
[epel-source]
name=Extra Packages for Enterprise Linux 5 – $basearch – Source
#baseurl=http://download.fedoraproject.org/pub/epel/5/SRPMS
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-source-5&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
gpgcheck=1
三、下载与安装相应rpmforge的rpm文件包
1,下载rpmforge的rpm文件包
32位系统
[root@CentOS ~]# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm
64位系统
[root@CentOS ~]# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
2,安装DAG的PGP Key
[root@CentOS ~]# rpm –import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
3,验证rpmforge的rpm文件包
[root@CentOS ~]# rpm -K rpmforge-release-0.5.1-1.el5.rf.*.rpm
4,安装rpmforge的rpm文件包
[root@CentOS ~]# rpm -i rpmforge-release-0.5.1-1.el5.rf.*.rpm
5,设置/etc/yum.repos.d/rpmforge.repo文件中源的级别,就是添加priority=12这句。
如我的rpmforge.repo文件内容:
### Name: RPMforge RPM Repository for Red Hat Enterprise 5 – dag
### URL: http://rpmforge.net/
[rpmforge]
name = Red Hat Enterprise $releasever – RPMforge.net – dag
baseurl = http://apt.sw.be/redhat/el5/en/$basearch/rpmforge
mirrorlist = http://apt.sw.be/redhat/el5/en/mirrors-rpmforge
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge
enabled = 1
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1
priority=12
四、下载与安装相应rpmfusion的rpm文件包
(CentOS官方说这个软件库里面的软件稳定性不如rpmforge,选用!rpmfusion官方站:http://rpmfusion.org)
[root@CentOS ~]# rpm -Uvh http://download1.rpmfusion.org/free/el/updates/testing/5/i386/rpmfusion-free-release-5-0.1.noarch.rpm
[root@CentOS ~]# rpm -Uvh http://download1.rpmfusion.org/nonfree/el/updates/testing/5/i386/rpmfusion-nonfree-release-5-0.1.noarch.rpm
五、测试
1,测试升级
[root@CentOS ~]# yum check-update
输出信息应该会有以下两行:
Loading “priorities” plugin

XX packages excluded due to repository priority protections
2,安装下mplayer播放器试试,如果安装成功了就没有问题了。
[root@CentOS ~]# yum install mplayer
PS:以上配置在RHEL/CentOS 5.X所有系列都可以使用!由本人验证总结整理。
参考文档:http://wiki.centos.org/zh/AdditionalResources/Repositories/RPMForge