Riku // 猎奇! http://log.riku.me 地球上有很多新鲜事! posterous.com Thu, 18 Mar 2010 19:38:20 -0700 git入门与实践(一) http://log.riku.me/git-212 http://log.riku.me/git-212

要了解什么是git,首先需要了解什么是版本控制(Version Control),版本控制系统(Version Control System,简称VCS)是一种记录一个或多个文件的变化的系统,这样的系统能够方便你今后调用找回某个特定时期(或版本)的文件。 版本控制系统广泛地应用于程序开发等领域,它可以协助你将某个指定的文件(甚至是一整个项目)返回至某个之前记录的状态,查看发生了哪些变化、对变化进行比较或者是修正致命错误。 版本控制系统主要经历了本地版本控制,集中式版本控制到分布式版本控制的发展:

本地版本控制(Local Version Control System)顾名思义就是本地化的版本控制系统,没有网络协作等较为先进的版本控制的概念
集中式版本控制意(Centralized Version Control System)为有一台版本控制服务器运行在那边存放并提供一个项目中所有版本文件的服务,在很长一段时间内占据主流,其中CVS与Subversion(SVN)为其代表
分布式版本控制(Distributed Version Control System)克服了集中式版本控制可能因为单点失败造成的巨大损失的缺点,让每一台客户端在每一次checkout操作后都完全镜像整个版本控制中的项目。在分布式版本控制系统中,任何一台机器都可以视为版本控制服务器。即使有一台服务器失去服务能力,其它机器与系统可以继续协作维持版本控制系统的正常运转。git就是分布式版本控制系统

git的历史

在2005年,Linux内核开发团队与其使用的分布式版本控制系统BitKeeper的开发公司关系破裂,他们没有了免费使用BitKeeper的特权。这直接催生了Linux开发社区自己开发一套分布式版本控制系统的想法。 Linux开发社区借鉴了之前使用BitKeeper时看到的闪光点,并希望能够在版本控制系统的速度、架构设计与各类特性支持中作出较好的改进与提升,于是,git诞生了。

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/2385/2.jpg http://posterous.com/users/cBu9Jaq7M Riku lu Riku Riku lu
Thu, 11 Mar 2010 06:02:34 -0800 centos(原生yum系通用)安装xfce便捷方法 http://log.riku.me/centosyumxfce http://log.riku.me/centosyumxfce centos(原生yum系通用)安装xfce便捷方法
yum grouplist
列出centos安装时的软件分组,其中Available Groups代表未安装的分组:
Available Groups:
   Tomboy
   Cluster Storage
   Office/Productivity
   Engineering and Scientific
   Beagle
   GNOME Software Development
   X Software Development
   Virtualization
   Legacy Network Server
   DNS Name Server
   GNOME Desktop Environment
   XFCE-4.4
   Base
   FTP Server
   Mono
   Games and Entertainment
   Clustering
   Java
   Java Development
   OpenFabrics Enterprise Distribution
   Emacs
   X Window System
   Graphics
   Web Server
   Ruby
   Windows File Server
   Printing Support
   KDE Software Development
   KDE (K Desktop Environment)
   Horde
   Sound and Video
   PostgreSQL Database
   News Server
   Development Tools
   FreeNX and NX
   Graphical Internet
Done

发现有xfce分组,于是
yum groupinstall "XFCE-4.4"
大功告成

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/2385/2.jpg http://posterous.com/users/cBu9Jaq7M Riku lu Riku Riku lu
Tue, 09 Mar 2010 19:30:45 -0800 Prozilla: 多线程下载工具 (支持Freebsd) http://log.riku.me/prozilla-freebsd http://log.riku.me/prozilla-freebsd

Prozilla也是一个十分流行的命令行下载工具,支持多线程下载和断点续传功能。可到http://prozilla.genesys.ro/downloads/prozilla/tarballs/下载最新的prozilla-1.3.7.4-1.i386.rpm安装包,从终端进入下载目录,输入以下命令即可成功安装。

#rpm -ivh prozilla-1.3.7.4-1.i386.rpm

(2)Prozilla命令格式如下:

#proz [参数] [下载地址]

常用的选项如下。

-k=n :设置n个线程下载。不加此参数指定线程数,Prozilla默认为4线程下载。

-P, --directory-prefix=DIR:指定将下载的文件保存在DIR/目录。

-r, --resume:继续下载未完成的文件。如果要指定线程数下载可用如下命令:

#proz -k=5 http://lab.sa.bupt.cn/ewebeditor/UploadFile/200752117651315. doc

这样便以5线程进行文件的下载,并将文件保存到当前目录。和Wget一样,Prozilla也提供了续传功能,下载中断后,重新输入上述命令,就会出现提示续传,按"R"键就可继续下载了。

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/2385/2.jpg http://posterous.com/users/cBu9Jaq7M Riku lu Riku Riku lu
Tue, 09 Mar 2010 17:19:07 -0800 HAProxy介绍 http://log.riku.me/haproxy-0 http://log.riku.me/haproxy-0

HAProxy提供 高可用性 、负载均衡 以及基于TCP和HTTP应用的代理,它是免费、快速 并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。 HAProxy运行在当前的硬件上,完全可以支持数以万计 的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上, 如下所示:

当前,您有两种主要的版本可以使用:

  • 版本 1.1 - 从2002年开始就服务于很多重要站点 
    这是最稳定可靠的版本, 运行时间(uptime)已经长达几年了。该版本目前已经不接受新的特性,仅用于核心关键(mission-critical)的业务.
  • 版本 1.2 - 主要用于大流量的站点 
    在1.1的基础上加入了一些新的特性, poll /epoll 的支持用以支持大量的会话(session), 客户端IPv6 应用程序cookie , hot-reconfiguration , 高级的动态流量管理 , TCP keepalive , source hash , 加权负载均衡算法 , 基于红黑树(rbtree)算法的调度器 , 同时还有一个很好的Web状态页面 . 尽管1.2还在不断的发展,但是从1.2.8开始已经趋于稳定。

另外, 版本1.3 是处于活跃开发阶段的版本, 它支持如下新特性:

  • 内容交换 : 可以根据请求(request)的任何一部分 来选择一组服务器, 比如请求的 URI , Host头(header) , cookie , 以及其他任何东西. 当然,对那些静态分离的站点来说,对此特性还有更多的需求。
  • 全透明代理 : 可以用 客户端IP地址 或者任何其他地址来连接后端服务器. 这个特性仅在Linux 2.4/2.6内核打了cttproxy 补丁后才可以使用. 这个特性也使得为某特殊服务器处理部分流量同时又不修改服务器的地址成为可能。
  • 基于树的更快的调度器 : 1.2.16以上的版本要求所有的超时都设成同样的值以支持数以万计的全速连接. 这个特性已经移植到1.2.17.
  • 内核TCP拼接 : 避免了内核到用户然后用户到内核端的数据拷贝, 提高了吞吐量同时又降低了CPU使用率 . Haproxy 1.3支持Linux L7SW 以满足在商用硬件上数Gbps 的吞吐的需求。
  • 连接拒绝 : 因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕虫(attack bots), 也就是说限制它们的连接打开从而限制它们的危害。 这个已经为一个陷于小型DDoS攻击的网站开发了而且已经拯救了很多站点。
  • 细微的头部处理 : 使得编写基于header的规则更为简单,同时可以处理URI的某部分。
  • 快而可靠的头部处理 : 使用完全RFC2616 兼容的完整性检查对一般的请求全部进行分析和索引仅仅需要不到2ms 的时间。
  • 模块化设计 : 允许更多人加入进此项目,调试也非常简单. poller已经分离, 已经使得它们的开发简单了很多. HTTP已经从TCP分离出来了, 这样增加新的七层特性变得非常简单. 其他子系统也会很快实现模块化
  • 投机I/O 处理 : 在一个套接字就绪前就尝试从它读取数据。poller仅推测哪个可能就绪哪个没有,尝试猜测,并且如果成功,一些开销很大的系统调用 就可以省去了。如果失败,就会调用这些系统调用。已知的使用Linux epoll()已经净提升起码10%了。
  • ACLs : 使用任意规则的任意组合作为某动作的执行条件。
  • TCP 协议检查 : 结合ACL来对请求的任意部分进行检查,然后再进行转发。这就可以执行协议验证而不是盲目的进行转发。比如说允许SSL但拒绝SSH。
  • 更多的负载均衡算法 : 现在,动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和 加权参数哈希(Weighted Parameter Hash)已经实现。其他算法比如Weighted Measured Response Time也很快会实现。

和其他"免费"的负载均衡解决方案不同的是, HAproxy仅被几百或者几千的遍布全球的用户使用, 但是这些用户通常运行很大的站点, 每天有数百万的点击量和几Gbps甚至几万兆(terabytes) 吞吐量。 他们需要7x24的可用性并且愿意承受免费软件解决方案的风险, 同时有这些使用技术. 通常, 这种解决方案仅配置为内部使用, 我仅在他们提供给我反馈或者需要新特性的时候才会知道.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/2385/2.jpg http://posterous.com/users/cBu9Jaq7M Riku lu Riku Riku lu
Tue, 09 Mar 2010 06:56:50 -0800 Nginx+FastCGI 运行 WordPress 和 WP Super Cache http://log.riku.me/nginxfastcgi-wordpress-wp-super-cache http://log.riku.me/nginxfastcgi-wordpress-wp-super-cache Link: http://www.vpsee.com/2009/06/run-wordpress-wpsupercache-with-nginx-fastcgi/#more-229

有了一个自己的 VPS 主机以后就自由多了,拥有 root 访问权限,几乎可以做任何事情,VPS 一开通我就迫不及待的想要用 nginx 换掉笨重的 apache,share hosting 就没那么幸运了,只能给什么用什么了。

WP Super Cache 是一个 WordPress 插件,用来给 WordPress 提供缓存,也就是说用户请求一个 WordPress PHP 页面后,WP Super Cache 会把结果转化成 HTML 文件保存下来,这样下次用户访问同一个页面的时候就会优先访问那个已保存的 HTML 文件,这样中间就没有 PHP 解析的过程,所以速度非常快,是高流量博客的必备插件。

说明一下为什么需要 FastCGI?Nginx 体积很小,本身不带 CGI 模块,所以需要和第三方配合以支持各种动态脚本的解析。这些解析脚本是如何和 web server 交流的呢?这时需要一个叫做 FastCGI 的支持。那么什么是 FastCGI 呢?FastCGI 是一个外部程序和 web server 之间打交道的协议/接口,有点像应用程序 API 和操作系统之间的关系。与老的 CGI 比起来,FastCGI 可以同时启动多个进程,而 CGI 程序只能运行在一个进程里,这意味着 FastCGI 的性能比 CGI 好得多;FastCGI 的运行完全和 web server 独立,就是说即使 FastCGI down 掉了也不会影响到 web server。

目前较普遍的有两种方法支持 FastCGI,一种是用 lighttpd 的 spawn-fcgi 程序;另外一种是直接用内嵌在 PHP 里面的 php-cgi。这里以第一种方法(spawn-fcgi)为例。

CentOS 上安装 nginx+spawn-fcgi

安装 nginx 和 spawn-fcgi

# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/ epel-release-5-3.noarch.rpm # yum install nginx # yum install spawn-fcgi


创建一个文件 /etc/init.d/php_cgi 并保存以下内容作为 CentOS 上 FastCGI 的启动配置文件。

#!/bin/sh # # php-cgi - php-fastcgi swaping via spawn-fcgi # # chkconfig: - 85 15 # description: Run php-cgi as app server # processname: php-cgi # config: /etc/sysconfig/phpfastcgi (defaults RH style) # pidfile: /var/run/php_cgi.pid # Note: See how to use this script : # http://www.cyberciti.biz/faq/rhel-fedora-install-configure-nginx-php5/ # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0 spawnfcgi="/usr/bin/spawn-fcgi" php_cgi="/usr/bin/php-cgi" prog=$(basename $php_cgi) server_ip=127.0.0.1 server_port=9000 server_user=nginx server_group=nginx server_childs=5 pidfile="/var/run/php_cgi.pid" # do not edit, put changes in /etc/sysconfig/phpfastcgi [ -f /etc/sysconfig/phpfastcgi ] && . /etc/sysconfig/phpfastcgi start() { [ -x $php_cgi ] || exit 1 [ -x $spawnfcgi ] || exit 2 echo -n $"Starting $prog: " daemon $spawnfcgi -a ${server_ip} -p ${server_port} -u ${server_user} -g ${server_group} -P ${pidfile} -C ${server_childs} -f ${php_cgi} retval=$? echo return $retval } stop() { echo -n $"Stopping $prog: " killproc -p ${pidfile} $prog -QUIT retval=$? echo [ -f ${pidfile} ] && /bin/rm -f ${pidfile} return $retval } restart(){         stop         sleep 2         start } rh_status(){         status -p ${pidfile} $prog } case "$1" in start) start;; stop) stop;; restart) restart;; status) rh_status;; *) echo $"Usage: $0 {start|stop|restart|status}" exit 3 esac

注意要把上面刚创建的文件变为可执行脚本:

# chmod +x /etc/init.d/php_cgi

在 Cent OS 上启动 FastCGI:

# /etc/init.d/php_cgi start # netstat -tulpn | grep :9000

把脚本加入系统启动文件:

# /sbin/chkconfig --add php_cgi # /sbin/chkconfig php_cgi on # /sbin/chkconfig --list

Debian 上安装 nginx+spawn-fcgi

安装 nginx 和 spawn-fcgi(注意 spawn-fcgi 在 lighttpd 软件包里,安装完后删除 lighttpd 只留下 spawn-fcgi)

# apt-get install nginx # /etc/init.d/nginx start # update-rc.d nginx defaults # apt-get install lighttpd # update-rc.d -f lighttpd remove

在 Debian 上启动 FastCGI

# /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid

如果你不想每次系统重新启动后都打入上面一长串命令的话,建议把上面的命令加到启动文件中。

# vi /etc/rc.local

配置 Nginx

打开 /etc/nginx/sites-available/default,找到相应地方用下面的配置替换掉。(注意:如果只用WordPress 的话就把 #include /etc/nginx/wordpress_params_regular; 一行的注释拿掉;如果要用 WP Super Cache 的话就把 #include /etc/nginx/wordpress_params_supercache; 一行拿掉。)

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; include /etc/nginx/fastcgi_params; #include /etc/nginx/wordpress_params_regular; #include /etc/nginx/wordpress_params_supercache; }

配置 Nginx 的参数支持 WordPress 和 WP Super Cache

让 wordpres_params_regular 配置文件和 wordpress_params_supercache 配置文件包含进来。

在 /etc/nginx/ 下创建 wordpress_params_regular 文件,把以下内容拷过去

# WordPress pretty URLs if (-f $request_filename) { expires max; break; } if (-d $request_filename) { break; } rewrite ^(.+)$ /index.php?q=$1 last; # Enable nice permalinks for WordPress error_page 404 = //index.php?q=$uri;

在 /etc/nginx/ 下创建 wordpress_params_supercache 文件,把以下内容拷过去

# if the requested file exists, return it immediately if (-f $request_filename) { expires 30d; break; } set $supercache_file ''; set $supercache_uri $request_uri; if ($request_method = POST) { set $supercache_uri ''; } # Using pretty permalinks, so bypass the cache for any query string if ($query_string) { set $supercache_uri ''; } if ($http_cookie ~* "comment_author_|wordpress|wp-postpass_" ) { set $supercache_uri ''; } # if we haven't bypassed the cache, specify our supercache file if ($supercache_uri ~ ^(.+)$) { set $supercache_file /var/www/wp-content/cache/supercache/$http_host/$1index.html; } # only rewrite to the supercache file if it actually exists if (-f $document_root$supercache_file) { rewrite ^(.*)$ $supercache_file break; } # all other requests go to Wordpress if (!-e $request_filename) { rewrite . /var/www/index.php last; }

重新启动 Nginx

# /etc/init.d/nginx restart

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/2385/2.jpg http://posterous.com/users/cBu9Jaq7M Riku lu Riku Riku lu
Tue, 09 Mar 2010 06:30:26 -0800 Linux 虚拟化方法、架构和实现 http://log.riku.me/linux-538 http://log.riku.me/linux-538 虚拟化的含义丰富,应用广泛。服务器虚拟化是目前一个主要的虚拟化技术,即在一个宿主计算机上提供多个独立操作系统。本文将探索虚拟化背后的思想,然后讨论实现虚拟化的一些技术。
我们还将了解现有的其他一些虚拟化技术,例如 Linux 上操作系统的虚拟化。
  进行虚拟化 就是要将某种形式的东西以另外一种形式呈现出来。对计算机进行虚拟化就是要将计算机以多台计算机或一台完全不同的计算机的形式呈现出来。

  虚拟化也可以将多台计算机组合成一台计算机的形式呈现出来。这通常称为服务器聚合或网格计算。

  下面让我们首先来看一下虚拟化的起源。

  虚拟化的历史

  虚拟化并不是什么新主题;实际上,它的存在已经超过 40 年了。虚拟化技术最早的一些用法包括 IBM? 7044、麻省理工学院(MIT)在 IBM 704 上开发的 CTSS(Compatible Time Sharing System)以及曼彻斯特大学的 Atlas 项目(世界上最早的超级计算机之一),这些都是请求页面调度和监管进程调用的先驱。

  硬件虚拟化

  IBM 早在 20 世纪 60 年代开发 System/360? Model 67 大型机时就认识到了虚拟化的重要性。Model 67 通过 VMM(Virtual Machine Monitor)对所有的硬件接口都进行了虚拟化。在早期计算中,操作系统被称为 supervisor。能够在其他操作系统上运行的操作系统被称为 hypervisor(这个术语是在 20 世纪 70 年代出现的)。

  VMM 可以直接在底层硬件上运行,允许运行多个虚拟机(VM)。每个 VM 都可以运行一个自己私有操作系统的实例 -- 在早些时候,这称为 CMS(或 Conversational Monitor System)。之后 VM 继续发展,现在您可以在 System z9? 大型机上发现 VM。这提供了很好的向后兼容性,甚至是对 System/360 产品线的兼容性。

  处理器虚拟化

  虚拟化早期的另外一种用法(在本例中是对处理器的仿真)是 P-code(或伪码)机。P-code 是一种机器语言,运行于虚拟机而不是实际硬件。P-code 早在 20 世纪 70 年代就已在加州大学圣地亚哥分校(UCSD)Pascal 系统上颇有名气了,它将 Pascal 程序编译成 P-code,然后在一个 P-code 虚拟机上运行。这就使 P-code 程序具有了高度的可移植性,而且,只要有可用的 P-code 虚拟机,P-code 程序就可以运行。

  20 世纪 60 年代对 BCPL(Basic Combined Programming Language)的设计中也采用了相同的概念,C 语言即由 BCPL 发展而来。在这种用法中,编译器会将 BCPL 代码编译成称为 O-code 的中间机器代码。接下来的第二个步骤是将 O-code 编译成目标机器的原始语言。现代编译器所使用的这种模型为将编译器移植到新目标体系结构上提供了很大的灵活性(通过一种中间语言将前端和后端分隔开来)。

  指令集虚拟化

  虚拟化最新的发展称为指令集虚拟化,或者二进制转换。在这种模型中,虚拟指令集被转换成底层硬件的物理指令集,这个过程通常都是动态的。当代码执行时,就会对代码的某个段进行转换。如果出现分支情况,就会导入新代码集并进行转换。这使它与缓存操作非常类似,后者是将指令块从内存移动到本地快速缓存中执行。

  这种模型最近在 Transmeta 设计的 Crusoe 中央处理单元(CPU)中得到了使用。二进制转换由 Code Morphing 的专利技术实现。类似的一个例子是完全虚拟化解决方案通过运行时代码扫描来查找和重定向特权指令(用来解决特定处理器指令集的一些问题)。

  虚拟化的类型

  实现虚拟化的方法不止一种。实际上,有几种方法都可以通过不同层次的抽象来实现相同的结果。本节将介绍 Linux 中常用的 3 种虚拟化方法,以及它们相应的优缺点。业界有时会使用不同的术语来描述相同的虚拟化方法。本文中使用的是最常用的术语,同时给出了其他术语以供参考。

硬件仿真

  毫无疑问,最复杂的虚拟化实现技术就是硬件仿真。在这种方法中,可以在宿主系统上创建一个硬件 VM 来仿真所想要的硬件,如图 1 所示。

  图 1. 硬件仿真使用 VM 来模拟所需要的硬件

  正如您所能预见的一样,使用硬件仿真的主要问题是速度会非常慢。由于每条指令都必须在底层硬件上进行仿真,因此速度减慢 100 倍的情况也并不稀奇。若要实现高度保真的仿真,包括周期精度、所仿真的 CPU 管道以及缓存行为,实际速度差距甚至可能会达到 1000 倍之多。

  硬件仿真也有自己的优点。例如,使用硬件仿真,您可以在一个 ARM 处理器主机上运行为 PowerPC? 设计的操作系统,而不需要任何修改。您甚至可以运行多个虚拟机,每个虚拟器仿真一个不同的处理器。

  完全虚拟化

  完全虚拟化(full virtualization),也称为原始虚拟化,是另外一种虚拟化方法。这种模型使用一个虚拟机,它在客户操作系统和原始硬件之间进行协调(参见图 2)。"协调"在这里是一个关键,因为 VMM 在客户操作系统和裸硬件之间提供协调。特定受保护的指令必须被捕获下来并在 hypervisor 中进行处理,因为这些底层硬件并不由操作系统所拥有,而是由操作系统通过 hypervisor 共享。

  图 2. 完全虚拟化使用 hypervisor 来共享底层硬件

  虽然完全虚拟化的速度比硬件仿真的速度要快,但是其性能要低于裸硬件,因为中间经过了 hypervisor 的协调过程。完全虚拟化的最大优点是操作系统无需任何修改就可以直接运行。惟一的限制是操作系统必须要支持底层硬件(例如 PowerPC)。

  超虚拟化

  超虚拟化(paravirtualization)是另外一种流行的虚拟化技术,它与完全虚拟化有一些类似。这种方法使用了一个 hypervisor 来实现对底层硬件的共享访问,还将与虚拟化有关的代码集成到了操作系统本身中(参见图 3)。这种方法不再需要重新编译或捕获特权指令,因为操作系统本身在虚拟化进程中会相互紧密协作。

  图 3. 超虚拟化与客户操作系统共享进程

  正如前面介绍的一样,超虚拟化技术需要为 hypervisor 修改客户操作系统,这是它的一个缺点。但是超虚拟化提供了与未经虚拟化的系统相接近的性能。与完全虚拟化类似,超虚拟化技术可以同时支持多个不同的操作系统。

  操作系统级的虚拟化

  我们要介绍的最后一种技术是操作系统级的虚拟化,它使用的技术与前面所介绍的有所不同。这种技术在操作系统本身之上实现服务器的虚拟化。这种方法支持单个操作系统,并可以将独立的服务器相互简单地隔离开来(参见图 4)。

  图 4. 操作系统级虚拟化实现服务器的隔离

  操作系统级的虚拟化要求对操作系统的内核进行一些修改,但是其优点是可以获得原始性能。

  为什么虚拟化如此重要?

  在了解目前 Linux 可以使用的虚拟化方法之前,让我们先来了解一下虚拟化的优点。

  从商业角度来看,使用虚拟化技术有很多原因。大部分原因都可以归结于服务器的巩固(server consolidation)。简单来说,如果您可以对一个服务器上多个未经充分利用的系统进行虚拟化,由于服务器的数量少了,显然可以节省大量电力、空间、制冷和管理成本。由于很难确定服务器的利用情况,虚拟化技术支持称为动态迁移的技术。动态迁移(Live migration)允许操作系统及其应用程序迁移到新的服务器上,从而实现负载在可用硬件上的均衡。

  虚拟化技术对于开发人员来说也非常重要。Linux 内核占据了一个单一的地址空间,这意味着内核或任何驱动程序的故障都会导致整个操作系统的崩溃。虚拟化技术意味着您可以运行多个操作系统,如果其中一个系统由于某个 bug 而崩溃了,那么 hypervisor 和其他操作系统都依然可以继续运行。这可以使内核的调试非常类似于用户空间应用程序的调试。

  与 Linux 有关的虚拟化项目

  表 1 给出了几个 Linux 系统上的虚拟化项目,并着重介绍了其中的开源解决方案。

  表 1. 与 Linux 有关的虚拟化项目


  Bochs 是一个 x86 计算机仿真器,它在很多平台上(包括 x86、PowerPC、Alpha、SPARC 和 MIPS)都可以移植和运行。使 Bochs 更为有趣的是它不仅可以对处理器进行仿真,还可以对整个计算机进行仿真,包括计算机的外围设备,比如键盘、鼠标、视频图像硬件、网卡(NIC)等。

  Bochs 可以配置作为一个老式的 Intel? 386 或其后继处理器使用,例如 486、Pentium、Pentium Pro 或 64 位处理器。它甚至还可以对一些可选的图形指令进行仿真,例如 MMX 和 3DNow。

  使用 Bochs 仿真器,您可以运行任何 Linux 上的 Linux 发行版、Linux 上的 Microsoft? Windows? 95/98/NT/2000(以及各种应用程序),甚至 Linux 上的 BSD(Berkeley Software Distribution)操作系统(FreeBSD、OpenBSD 等)。

  QEMU(仿真)

  QEMU 是另外一个仿真器,它与 Bochs 非常类似,不过也有一些值得一提的区别。QEMU 支持两种操作模式。第一种是 Full System Emulation(完全系统仿真)模式。这种模式与 Bochs 非常类似,它可以对一个具有处理器和外围设备的完整个人计算机(PC)进行仿真。这种模式可以仿真很多处理器架构,例如 x86、x86_64、ARM、SPARC、PowerPC 和 MIPS,其动态转换的速度也比较理想。使用这种模式,您可以在 Linux、Solaris 和 FreeBSD 上仿真 Windows 操作系统(包括 XP)和 Linux。很多其他操作系统的组合也都可以得到支持(更多信息请参看 参考资料 部分)。

  QEMU 还可以支持第二种模式,称为 User Mode Emulation(用户模式仿真)。这种模式只能宿主于 Linux,在这种模式下,可以启动不同体系结构的二进制文件。例如,在 x86 平台上运行的 Linux 系统上可以执行为 MIPS 体系架构编译的二进制文件。这种模式支持的其他体系结构还包括 ARM、SPARC 和 PowerPC,而且还有很多尚在开发之中。

  VMware(完全虚拟化)

  VMware 是完全虚拟化的一个商业解决方案。在客户操作系统和裸硬件之间有一个 hypervisor 作为抽象层使用。这个抽象层允许任何操作系统在硬件上运行,而不需要了解任何其他客户操作系统。

  VMware 也会对可用的 I/O 硬件进行虚拟化,并将一些高性能的设备驱动程序加入到 hypervisor 中。

  整个虚拟化后的环境都作为一个文件保存,这意味着整个系统(包括客户操作系统、VM 和虚拟硬件)可以很容易地快速迁移到新宿主机器上进行负载均衡。

  z/VM (完全虚拟化)

  尽管 IBM System z? 是一个新品牌,不过它实际上已经有很长的一段历史,可以一直追溯到 20 世纪 60 年代。System/360 在 1965 年就可以支持使用虚拟机进行虚拟化。有趣的是,System z 保留了对之前的 System/360 产品线的向后兼容性。

  z/VM? 是 System z 上的操作系统 hypervisor。其核心是 Control Program(CP),它为客户操作系统,包括 Linux,提供了物理资源的虚拟化(参见图 5)。这样,多个处理器和其他资源就可以在多个客户操作系统上被虚拟化。

  图 5. 使用 z/VM 的操作系统级虚拟化

  z/VM 也可以为想要相互通信的客户操作系统仿真一个客户局域网(LAN)。仿真完全是在 hypervisor 中进行的,因此相当安全。

  Xen(超虚拟化)

  Xen 是一个来自于 XenSource 的操作系统级超虚拟化的免费开源解决方案。回想一下在超虚拟化中,hypervisor 和操作系统会共同协作,虽然操作系统需要进行一些更改,但却可以带来接近于原始系统的性能。

  就像 Xen 需要进行协作(对客户操作系统进行修改)一样,只有那些修补过的操作系统才可以通过 Xen 进行虚拟化。Linux 本身就是开源的,所以从 Linux 角度来看,这是一个很合理的折衷,因为最终可以获得比完全虚拟化更好的性能。但是从广泛支持的角度来看(例如对其他非开源操作系统的支持),这显然是一个缺点。

  Windows 可以在 Xen 上作为一个客户操作系统运行,但是它只能在运行 Intel Vanderpool 或 AMD Pacifica 的系统上使用。支持 Xen 的其他操作系统包括 Minix、Plan 9、NetBSD、FreeBSD 和 OpenSolaris。

  User-mode Linux(超虚拟化)

  User-mode Linux(UML)允许 Linux 操作系统在其他操作系统的用户空间中运行。每个客户 Linux 操作系统都存在于宿主 Linux 操作系统中的一个进程中(参见图 6)。这就允许 Linux 内核(使用自己的相关用户空间)在单个 Linux 内核中运行。

  图 6. User-mode Linux 中的 Linux

  在 2.6 版本的 Linux 内核中,UML 驻留于主内核树内,但它必须提前启用,然后再重新编译才能使用。这些变化除了常见的虚拟化功能之外,还可以提供设备的虚拟化。这样一来,客户操作系统就可以共享可用的物理设备,例如块设备(比如软盘、CD-ROM 和文件系统)、控制台、NIC 设备、声音硬件等。

  注意由于客户内核是在应用程序空间中运行的,因此它们必须为这种用法而被特殊编译(不过它们可以是不同的内核版本)。这样就产生了主机内核(硬件上的内核)和客户内核(在主机内核的用户空间中运行)。这些内核甚至可以是嵌套的,这样就允许一个客户内核在另外一个运行于主机内核的客户内核上运行。

  Linux-VServer(操作系统级虚拟化)

  Linux-VServer 是一个操作系统级虚拟化解决方案。Linux-VServer 对 Linux 内核进行虚拟化,这样多个用户空间环境 -- 又称为 Virtual Private Server(VPS) -- 就可以单独运行,而不需要互相了解。Linux-VServer 通过修改 Linux 内核实现用户空间的隔离。

  要将各个用户空间与其他用户空间隔离开来,就需要从上下文的概念入手。上下文 是给定 VPS 进程使用的一个容器,这样通过诸如 ps 之类的工具就可以了解 VPS 的进程。内核为最初的引导定义了一个缺省的上下文。另外管理端还能查看所有的上下文(所有的执行进程)。正如您可能猜到的那样,内核和内部数据结构也需要进行修改来支持这种虚拟化方法。

  Linux-VServer 还使用了一种 chroot 格式来为每个 VPS 隔离 root 目录。虽然 chroot 允许指定新 root 目录,但还是需要其他一些功能(称为 Chroot-Barrier)来限制 VPS 脱离其隔离的 root 目录回到上级目录。给定一个隔离的 root 目录之后,每个 VPS 就可以拥有自己的用户列表和 root 密码。

  2.4 和 2.6 版本的 Linux 内核支持 Linux-VServer,它可以运行于很多平台之上,包括 x86、x86-64、SPARC、MIPS、ARM 和 PowerPC。

  OpenVZ(操作系统级虚拟化)

  OpenVZ 是另外一个操作系统级的虚拟化解决方案,它与 Linux-VServer 类似,不过也有一些有趣的区别。OpenVZ 是一个支持虚拟化的内核(修改过的),可以支持用户空间隔离、VPS 和一组用户管理工具。例如,您可以简单地从命令行创建一个新的 VPS:

  清单 1. 从命令行创建 VPS

  $ vzctl create 42 --ostemplate fedora-core-4

  Creating VPS private area

  VPS private area was created

  $ vzctl start 42

  Starting VPS ...

  VPS is mounted

  另外还可以使用 vzlist 命令显示目前创建的 VPS,该命令与标准 Linux ps 命令类似。

  为了对进程进行调度,OpenVZ 还包括了两级 CPU 调度器。首先,调度器确定哪个 VPS 应该获得 CPU。在这个步骤完成之后,第二级调度器会根据给定的标准 Linux 优先级挑选进程来执行。

  OpenVZ 还包括了所谓的 beancounters。beancounter 包括很多参数,这些参数为给定的 VPS 定义了资源分配。这为 VPS 提供了一定层次上的控制,定义了有多少内存可用,有多少进程间通信(IPC)对象可用等。

  OpenVZ 的一个特性是检查点功能和将 VPS 从一个物理服务器迁移到其他物理服务器上的能力。检查点 意味着正在运行的 VPS 的状态被冻结并存储到一个文件中。然后可以将这个文件迁移到一个新服务器上并加以还原以使 VPS 恢复运行。

  OpenVZ 支持很多硬件体系结构,包括 x86、x86-64 和 PowerPC。

  对完全虚拟化和超虚拟化的硬件支持

  回想一下 IA-32(x86)体系结构在进行虚拟化时会产生的一些问题。特定的特权模式指令无法捕获,基于所使用的模式还可能返回不同的结果。例如,x86 STR 指令可以检索安全状态,但是所返回的值要取决于请求者特定的特权级别。在尝试在不同的层次对不同的操作系统进行虚拟化时,这会出现问题。例如,x86 支持 4 环保护,其中级别 0 (最高特权)通常运行操作系统,级别 1 和 2 支持操作系统服务,级别 3(最低级别)支持应用程序。不过硬件供应商已经认识到了这种缺陷(以及其他一些问题),并且已经开发了一些支持并加速虚拟化的新设计。

  Intel 正在开发新虚拟化技术,能在 x86(VT-x)和 Itanium?(VT-i)体系架构上支持 hypervisor。VT-x 支持两种格式的操作,一种用于 VMM(root),另外一种用于客户操作系统(非 root)。root 格式完全是特权级的,而非 root 格式是非特权级的(即使对环 0 来说也是如此)。这种体系架构支持定义指令来使 VM(客户操作系统)退出到 VMM 和保存处理器状态。

  AMD 也开发了硬件辅助虚拟化技术,称为 Pacifica。除了其他一些特性之外,Pacifica 还为在特殊指令执行时保存的客户操作系统维护了一个控制块。VMRUN 指令允许虚拟机(及其相关的客户操作系统)一直运行,直到 VMM 重新获得控制权为止(这也是可配置的)。这种可配置能力允许 CMM 为每个客户操作系统定制特权指令。Pacifica 还可以使用宿主和客户内存管理单元(MMU)表来进行地址转换。

  这些新技术也可以应用到此处讨论的很多其他虚拟化技术中,包括 Xen、VMware、User-mode Linux 等。

  Linux KVM(内核虚拟机)

  Linux 传出的最新消息是将 KVM 合并到 Linux 内核中(2.6.20)。KVM 是一种完全虚拟化解决方案,它有一个方面非常独特:它将 Linux 内核转换为一个使用内核模块的 hypervisor。这个模块允许使用其他客户操作系统,然后在宿主 Linux 内核的用户空间中运行(参见图 7)。内核中的 KVM 通过 /dev/kvm 字符设备来公开虚拟化后的硬件。客户操作系统使用为 PC 硬件仿真修改过的 QEMU 进程与 KVM 模块接口。

 

  图 7. 使用内核虚拟机(KVM)的虚拟化

  KVM 模块向内核中引入了一个新的执行模块。普通内核支持内核 模式和用户 模式,而 KVM 则引入了一种客户 模式。客户模式用来执行所有非 I/O 客户代码,而普通用户模式支持客户 I/O。

  KVM 的引入是 Linux 的一个有趣革新,因为它代表了作为主流 Linux 内核一部分的第一个虚拟化技术。它已经存在于 2.6.20 树中,不过也可以作为 2.6.19 内核的一个内核模块使用。当在支持虚拟化的硬件上运行时,KVM 支持 Linux(32 位和 64 位)和 Windows(32 位)客户机。

  结束语

  如果 40 年前出现的技术还可以算是"新"技术的话,那么虚拟化就是一个重要的新技术领域。虚拟化技术已经在很多场合中应用过了,但现在主要的关注点是服务器和操作系统的虚拟化。与 Linux 非常类似,虚拟化为性能、可移植性和灵活性提供了很多选项。这意味着您可以选择最适合于您自己应用程序的虚拟化方法。

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/2385/2.jpg http://posterous.com/users/cBu9Jaq7M Riku lu Riku Riku lu
Mon, 08 Mar 2010 00:40:30 -0800 RoundCube Webmail 开源项目介绍 http://log.riku.me/roundcube-webmail-9 http://log.riku.me/roundcube-webmail-9

RoundCubeWebmail是一个基于浏览器,支持多国语言的IMAP客户端,操作界面看起像一个桌面应用程序。它提供一个e-mail客户端应该具备的所有功能包括MIME支持,地址薄,文件夹操作,信息搜索和拼写检查。RoundCubeWebmail采用PHP+Ajax开发并且需要MySQL数据库来存储数据。用户界面采用XHTML+CSS2设计。 RoundCube Webmail功能包括:

  • 多语言功能
  • 支持MIME和HTML邮件
  • 撰写邮件带有附件
  • 多寄件人身份
  • 地址簿
  • 找到作为你型通讯录整合
  • Richtext/HTML邮件撰写
  • 转发邮件的附件
  • IMAP文件夹管理
  • 内置缓存快速邮箱访问
  • 支持外部SMTP服务器
  • 搜索邮件和联系人
  • 拼写检查
  • 高级用户界面
  • 无限用户和邮件
  • 完整的个性化与皮肤

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/2385/2.jpg http://posterous.com/users/cBu9Jaq7M Riku lu Riku Riku lu
Sun, 07 Mar 2010 19:17:51 -0800 screen命令使用介绍 http://log.riku.me/screen-257 http://log.riku.me/screen-257

使用telnet或SSH远程登录linux时,如果连接非正常中断,重新连接时,系统将开一个新的session,无法恢复原来的 session.screen命令可以解决这个问题。Screen工具是一个终端多路转接器,在本质上,这意味着你能够使用一个单一的终端窗口运行多终端 的应用。

screen命令介绍

1. $:screen    创建一个screen
2. $:screen -ls 显示所有的screen会话
3. $:screen -d  脱离当前screen ,返回正常shell
4. $:screen -r 6361(作者注:huihuaID,用session -ls可以得到) 进入指定screen
 
linux screen 命令详解

  功能说明:多重视窗管理程序。

  语  法:screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]

  补充说明:screen为多重视窗管理程序。此处所谓的视窗,是指一个全屏幕的文字模式画面。通常只有在使用telnet登入主机或是使用老式的终端机时,才有可能用到screen程序。

  参  数:
  -A  将所有的视窗都调整为目前终端机的大小。
  -d<作业名称>  将指定的screen作业离线。
  -h<行数>  指定视窗的缓冲区行数。
  -m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。
  -r<作业名称>  恢复离线的screen作业。
  -R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
  -s  指定建立新视窗时,所要执行的shell。
  -S<作业名称>  指定screen作业的名称。
  -v  显示版本信息。
  -x  恢复之前离线的screen作业。
  -ls或--list  显示目前所有的screen作业。
  -wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/2385/2.jpg http://posterous.com/users/cBu9Jaq7M Riku lu Riku Riku lu
Thu, 04 Mar 2010 23:46:07 -0800 Build and Configure an HTTP-Proxy Application http://log.riku.me/build-and-configure-an-http-proxy-application http://log.riku.me/build-and-configure-an-http-proxy-application Can't use SSH on the standard port 22? Need to tunnel through a proxy server? Work behind a draconian firewall and can't SSH directly? No problem. This document will hopefully show you how to tunnel through an http-proxy server without any server-side modifications.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/2385/2.jpg http://posterous.com/users/cBu9Jaq7M Riku lu Riku Riku lu
Thu, 04 Mar 2010 22:41:00 -0800 Linux Find 命令精通指南 http://log.riku.me/linux-find http://log.riku.me/linux-find

简单介绍这一无处不在的命令的强大的方面以及混乱的方面。

2008 年 7 月发布

Linux find 命令是所有 Linux 命令中最有用的一个,同时也是最混乱的一个。它很难,因为它的语法与其他 Linux 命令的标准语法不同。但是,它很强大,因为它允许您按文件名、文件类型、用户甚至是时间戳查找文件。使用 find 命令,您不但可以找到具这些属性任意组合的文件,还可以对它找到的文件执行操作。

本文的目的是,通过概述 find 命令的用途和潜能,简化该命令的学习和使用。同时,它将针对 find 命令的某些最强大但最混乱的方面提供一个基本的指南和参考。

[注意:本文使用的 find 版本是 GNU 版本,因此,某些细节可能与其他版本的 find 有所不同。]

http://www.oracle.com/technology/global/cn/pub/articles/calish-find.html

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/2385/2.jpg http://posterous.com/users/cBu9Jaq7M Riku lu Riku Riku lu
Thu, 04 Mar 2010 20:59:53 -0800 使用dmidecode命令查看硬件信息 http://log.riku.me/dmidecode http://log.riku.me/dmidecode 使用dmidecode命令查看硬件信息

dmidecode命令的使用方法:

dmidecode –type {KEYWORD / Number }
其中Number可以是:

Type Information
—————————————-
0 BIOS
1 System
2 Base Board
3 Chassis
4 Processor
5 Memory Controller
6 Memory Module
7 Cache
8 Port Connector
9 System Slots
10 On Board Devices
11 OEM Strings
12 System Configuration Options
13 BIOS Language
14 Group Associations
15 System Event Log
16 Physical Memory Array
17 Memory Device
18 32-bit Memory Error
19 Memory Array Mapped Address
20 Memory Device Mapped Address
21 Built-in Pointing Device
22 Portable Battery
23 System Reset
24 Hardware Security
25 System Power Controls
26 Voltage Probe
27 Cooling Device
28 Temperature Probe
29 Electrical Current Probe
30 Out-of-band Remote Access
31 Boot Integrity Services
32 System Boot
33 64-bit Memory Error
34 Management Device
35 Management Device Component
36 Management Device Threshold Data
37 Memory Channel
38 IPMI Device
39 Power Supply

而KEYWORD可以是:

Keyword Types
——————————
bios 0, 13
system 1, 12, 15, 23, 32
baseboard 2, 10
chassis 3
processor 4
memory 5, 6, 16, 17
cache 7
connector 8

slot 9


比如,根据上面的表可以知道,执行dmidecode –type 4可以显示CPU的信息,同样的也可以执行dmidecode –type processor来显示cpu的信息,两者的执行结果是一样的.

有了这个表就方便多了,执行dmidecode –type 0就可以查看BIOS的信息.

最后是几个概念了,google得知:

DMI是英文单词Desktop Management Interface的缩写,也就是桌面管理界面,它含有关于系统硬件的配置信息。计算机每次启动时都对DMI数据进行校验,如果该数据出错或硬件有所变 动,就会对机器进行检测,并把测试的数据写入BIOS芯片保存。所以如果我们在BIOS设置中禁止了BIOS芯片的刷新功能或者在主板使用跳线禁止了 BIOS芯片的刷新功能,那这台机器的DMI数据将不能被更新。

在介绍什么是DMI之前,先说说SMBIOS (System Management BIOS,SMBIOS)的概念。 SMBIOS是主板或系统制造者以标准格式显示产品管理信息所需遵循的统一规范。 DMI (Desktop Management Interface, DMI)就是帮助收集电脑系统信息的管理系统,DMI信息的收集必须在严格遵照SMBIOS规范的前提下进行。 SMBIOS和DMI是由行业指导机构Desktop Management Task Force (DMTF)起草的开放性的技术标准,其中,DMI设计适用于任何的平台和操作系统。 DMI充当了管理工具和系统层之间接口的角色。它建立了标准的可管理系统更加方便了电脑厂商和用户对系统的了解。DMI的主要组成部分是 Management Information Format (MIF)数据库。这个数据库包括了所有有关电脑系统和配件的信息。通过DMI,用户可以获取序列号、电脑厂商、串口信息以及其它系统配件信息。

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/2385/2.jpg http://posterous.com/users/cBu9Jaq7M Riku lu Riku Riku lu
Thu, 04 Mar 2010 17:51:26 -0800 记录 http://log.riku.me/12739743 http://log.riku.me/12739743 偶的 CU 微博地址:   http://riku.chinaunix.com

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/2385/2.jpg http://posterous.com/users/cBu9Jaq7M Riku lu Riku Riku lu
Thu, 04 Mar 2010 17:12:11 -0800 PieTTY :增强型 Putty 工具 http://log.riku.me/pietty-putty http://log.riku.me/pietty-putty

PuTTY 是个小巧方便的Telnet/SSH安全远端连线程式,但用于非英语系文字时有非常多的问题,而且它对于初学者来说过于复杂的使用界面也为人诟病已久。 PieTTY则是源自于PuTTY ,修正与完整支援亚洲等多国语系字元、并在使用界面上大幅改进、易学易用的版本。 

PieTTY is a free SSH client based on PuTTY and dedicated to multilingual (especially CJK) environments, accessibility, and simpler user interface.

PieTTY使用MIT License,是免费而可自由重新散布的。更详细的历史或是使用上有问题请见 FAQ 。 关于PieTTY为何要支援「Unicode补完计画」请见 FAQ 

Link: http://www.csie.ntu.edu.tw/~piaip/pietty/index

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/2385/2.jpg http://posterous.com/users/cBu9Jaq7M Riku lu Riku Riku lu
Wed, 03 Mar 2010 21:01:30 -0800 freebsd文档 http://log.riku.me/freebsd-26 http://log.riku.me/freebsd-26

freebsd文档

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/2385/2.jpg http://posterous.com/users/cBu9Jaq7M Riku lu Riku Riku lu
Wed, 03 Mar 2010 20:45:53 -0800 BSD Magazine 2010.3 月版 http://log.riku.me/bsd-magazine-20103 http://log.riku.me/bsd-magazine-20103 官方地址: http://bsdmag.org/

BSD_03_2010_EN.pdf Download this file

Screenshot_studio_capture_156

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/2385/2.jpg http://posterous.com/users/cBu9Jaq7M Riku lu Riku Riku lu
Tue, 02 Mar 2010 21:50:34 -0800 FreeBSD PPTP VPN http://log.riku.me/freebsd-pptp-vpn http://log.riku.me/freebsd-pptp-vpn FreeBSD PPTP VPN

Learn how to install a windows compatable PPTP VPN server on FreeBSD.
Instructions for using POPTOP with MPPE 128bit encryption
1. Install poptop from the ports directory
[root]# cd /usr/ports/net/poptop
[root]# make install clean
This will download and install the latest version of PoPToP

2.Edit the configuration files
** My local network in this example is 172.16.0.0/16. You will need
to change the IP Address to meet your needs

/usr/local/etc/pptpd.conf
----------------------------------------------------------------
debug
nobsdcomp
proxyarp
localip 192.168.0.1
remoteip 192.168.0.2-255
pidfile /var/run/pptpd.pid
+chapms-v2
mppe-40
mppe-128
mppe-stateless


/etc/ppp/ppp.conf
---------------------------------------------------------------
loop:
set timeout 0
set log phase chat connect lcp ipcp command
set device localhost:pptp
set dial
set login
# Server (local) IP address, Range for Clients, and Netmask
# if you want to use NAT use private IP addresses
set ifaddr 192.168.0.1 192.168.0.2-192.168.0.255 255.255.255.0
add default HISADDR
set server /tmp/loop "" 0177

loop-in:
set timeout 0
set log phase lcp ipcp command
allow mode direct

pptp:
load loop
disable pap
# Authenticate against /etc/passwd
enable passwdauth
disable ipv6cp
enable proxy
accept dns
enable MSChapV2
enable mppe
disable deflate pred1
deny deflate pred1
set dns 24.26.163.24
set device !/etc/ppp/secure

/etc/ppp/secure
---------------------------------------------------------------
#!/bin/sh
exec /usr/sbin/ppp -direct loop-in

/etc/ppp/ppp.secret
---------------------------------------------------------------
#user #passoword
user1 password
user2 password


3. Ensure IP Forwarding is enabled
[root]# sysctl net.inet.ip.forwarding
1

If the value is not 1 you can enable ip forwarding by
[root]# sysctl net.inet.ip.forwarding=1

You can have it always default to 1 by editing
/etc/rc.conf
gateway_enable="YES"

4. Enable proxy arp
/etc/rc.conf
arpproxy_all="YES"

5. Start pptpd
/usr/local/etc/rc.d/pptpd start

Verify that it start successfully
[root]# netstat -a -n
tcp 0 0 0.0.0.0:1723 0.0.0.0:* LISTEN

PPTP uses tcp port 1723 and protocol 47 (GRE)
If you have a firewall in front of the VPN server make sure
you open the appropriate port


gateway_enable="YES"
arpproxy_all="YES"
pptpd_enable="YES"
pptpd_flags="-c /usr/local/etc/pptpd.conf -o pptp"
openvpn_enable="YES"
openvpn_configfile="/usr/local/etc/openvpn/server.conf"
pf_enable="YES"
nginx_enable="YES"
natd_enable="YES"
natd_interface="re0"
firewall_enable="YES"
firewall_type="OPEN"
firewall_logging_enable="YES"


ipfw add allow all from any to any
ipfw add divert natd ip from any to any via em0

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/2385/2.jpg http://posterous.com/users/cBu9Jaq7M Riku lu Riku Riku lu
Tue, 02 Mar 2010 21:43:03 -0800 FreeBSD笔记 http://log.riku.me/freebsd-24 http://log.riku.me/freebsd-24 FreeBSD笔记

1、查看CPU:
sysctl hw.model hw.ncpu
dmesg | grep "CPU:"

2、查看内存:
dmesg | grep "real memory" | awk -F '[( )]' '{print $2,$4,$7,$8}'
查看swap:
top | grep "Swap:" | awk '{print $1,$2}'
3、查看硬盘:
diskinfo -vt /dev/ad0
disklable /dev/ad0s2 #查看分区信息
看硬盘大小:
dmesg | grep "sector" | awk '{print $1,$2}'
diskinfo -v /dev/da0 | grep "in bytes" | awk -F'[()]' '{print $2}'
4、查看服务器品牌:
dmesg | grep "ACPI APIC"
5、挂载文件系统:
fat32:mount_msdosfs -L zh_CN.eucCN /dev/ad0s1 /mnt
ntfs:mount_ntfs -C eucCn /dev/ad0s1 /mnt
cdrom:mount_cd9660 /dev/acd0 /mnt
注:ntfs在FreeBSD中只能读无法写入
6、给文件添加或禁用系统禁删标志(目录不适用):
chflags sunlink file1
chflags nosunlink file1
7、初始化磁盘:
fdisk -BI ad1
8、建立FreeBSD分区:
disklabel -B -w -r ad1s1 auto
9、建立逻辑分区:
disklabel -e ad1s1
10、格式化分区,创建文件系统:
newfs /dev/ad1s1e
11、显示PCI硬件信息:
pciconf -lv
12、开启Linux 二进制兼容支持(启用这一功能最简单的方法是载入 linux KLD 模块):
kldload linux
让Linux兼容在系统初始化时自动启用,在/etc/rc.conf中中入:
linux_enable="YES"
13、检查KLD模块是否加载:
kldstat
14、在内核中静态链接进Linux二进制兼容模式,在内核配置文件里面加入:
options COMPAT_LINUX
15、设置网卡em0的IP地址:
ifconfig em0 inet 192.0.2.10 netmask 255.255.255.0
16、给网卡em0设置添加一个别名IP地址:
ifconfig em0 inet 192.168.51.45/24 add
17、删除网卡的别名IP地址:
ifconfig em0 inet 192.168.51.45 -alias
18、设置网卡em0的工作模式为100baseTX全双式:
ifconfig em0 media 100baseTX mediaopt full-duplex
19、当/usr/local/etc/rc.d下的脚本无法自动启动时,可尝试在/etc/rc.conf中加入一行:
local_startup="/usr/local/etc/rc.d"
20、在ports中寻找需要的软件,进入/usr/ports目录执行:
make search name=lsof 或 echo /usr/ports/*/*lsof* 或 whereis lsof
make search key=关键字 # 在名字、注释、描述中搜索关键字
21、使用package方式安装管理软件,使用以下命令:
pkg_add lsof-4.56.4.tgz # 安装软件包
pkg_info # 列出已安装所有软件包
pkg_version # 统计所有安装的软件版本,比较本地package的版本与ports目录中的当前版本是否一致
pkg_delete lsof-4.56.4 # 删除软件包,需提供完整包名
22、使用CVSup协议更新本地ports:(将cvsup.FreeBSD.org改为离得较近的CVSup服务器)
csup -L 2 -h cvsup.FreeBSD.org /usr/share/examples/cvsup/ports-supfile
23、一些shell会缓存环境变量PATH中指定的目录里的可执行文件,以加快查找速度,这会造成一些新安装的命令无法运行,执行以下命令,然后才能运行新安装的那些命令:
rehash 或 hash -r
24、当不是所有时间都能上网时,可在/usr/ports下执行以下命令,所有需要的文件都将被下载:(此命令可以在下级目录中执行,如/usr/ports/comms/nmp)
make fetch # 只下载所需要文件,不下载依赖包
make fetch-recursive # 连同依赖包一起下载
25、改变默认的Ports目录:
make WRKDIRPREFIX=/usr/home/example/ports install #
在/usr/home/example/ports中编译port,安装到/usr/local
make PREFIX=/usr/home/example/local install #
在/usr/ports中编译port,安装到/usr/home/example/local
make WRKDIRPREFIX=../ports PREFIX=../local install #
在../ports中编译port,安装到../local
26、使用portsclean工具清除临时目录和distfiles目录:
portsclean -C # 清除安装时的临时目录
portsclean -D # 清除distfiles目录下所有port都不引用的文件
portsclean -DD # 删除目前安装的port没有使用的源码包文件
27、强制手动检测SCSI设备,SCSI总线扫描:
camcontrol rescan all
28、显示SCSI设备列表:
camcontrol devlist
29、利用管道修改用户密码:
echo "password" | pw usermod root -h 0
30、sed插入行:
sed -i -E '/service port/a \\
apex port : 18306\\
' /home/xiyou/config
31、用freebsd的MBR覆盖现有的MBR:
fdisk -B -b /boot/boot0 device
32、根据一个新的文件重新构建用户列表:
pwd_mkdb -p /etc/master.passwd.new # -p即为生成新的/etc/passwd
33、取时间:
date -v -1d +%Y%m%d # Freebsd取昨天日期方法
date -v -1w +%Y%m%d # Freebsd取上周今日方法
date -v -1m +%Y%m%d # Freebsd取上个月今日方法
date -v -1y +%Y%m%d # Freebsd取去年今日的方法
34、以xiyou用户身份执行命令或脚本:
su - xiyou -c "cd /home/xiyou/script; ./start_apex.sh &"
35、tar打包时排除某个子目录:
tar zcvf Apex09010702.tgz --exclude=ApexItemServer/hook_log ApexItemServer
注:上例是使用GUN版本的tar程序格式,否则--exclude参数应放在最后

36、锁住终端:
lock -np #-n 永不超时,-p 使用系统密码作为开启终端的密匙
37、显示ATA设备列表:
atacontrol list
38、查看网络流量:
systat -if 1 #1表示1秒刷新屏幕一次,Traffic 流量 peak 峰值 average 平均值
netstat 1
39、查看硬盘详细分区实时读写状况:
gstat
40、进单用户模式也需要密码:
a. vi /etc/ttys 找到when going to single-user mode
b. 修改console none unknown off后面的secure,改为insecure
c. 存盘退出
41、在FreeBSD5.X以上加载,卸载ISO文件:
mount:
mdconfig -a -t vnode -f myisofile.iso #屏幕输出md0或者类似的设备名
mount -t cd9660 /dev/md0 /mnt
umount:
umount /mnt
mdconfig -d -u 0 #-u后面的数字和前面的md?中的数字一致
mdconfig -l #可以列出关于配置md?设备的信息
42、更新配置文件,比如编辑了.cshrc等文件,就需要用source命令:
source .cshrc
43、修复UFS文件系统分区:
fsck_ufs /dev/ad1
44、pf防火墙
pfctl -e # 启动pf防火墙
pfctl -d # 停止pf防火墙
pfctl -sa | grep Status #查看状态
pfctl -f /etc/pf.conf # 载入 pf.conf 文件
pfctl -nf /etc/pf.conf # 检查配置文件错误,但不载入
pfctl -Nf /etc/pf.conf # 只载入文件中的NAT规则
pfctl -Rf /etc/pf.conf # 只载入文件中的过滤规则
pfctl -sn # 显示当前的NAT规则
pfctl -sr # 显示当前的过滤规则
pfctl -ss # 显示当前的状态表
pfctl -si # 显示过滤状态和计数
pfctl -sa # 显示任何可显示的
pfctl -t http_table -T show #查看动态表
pfctl -t http_table -T add 192.168.1.X #添加一个IP到表
pfctl -t http_table -T del 192.168.1.X #从表中删除IP
45、系统优化+防止ddos
加载文件修改
# vi /boot/loader.conf #加入如下文本
kern.dfldsiz="2147483648" # Set the initial data size limit
kern.maxdsiz="2147483648" # Set the max data size
kern.ipc.nmbclusters="0" # Set the number of mbuf clusters
kern.ipc.nsfbufs="66560" # Set the number of sendfile(2) bufs
##解释:
a. 第一,第二行主要是为了突破1G内存设置的
b. 第三行其实是bsd的一个bug,当系统并发达到一个数量级的时候,系统会crash,这个是非常糟糕的事情,所幸更改了这个参数后,在高并发的时候,基本可以没有类似情况,当然非常bt的情况,还得进一步想办法
c. 第四行是读取的文件数,如果你下载的文件比较大,且比较多,加大这个参数,是非常爽的
Sysctl修改
#vi /etc/rc.local
sysctl kern.ipc.maxsockets=100000 ##增加并发的socket,对于ddos很有用
sysctl kern.ipc.somaxconn=65535 ##打开文件数
sysctl net.inet.tcp.msl=2500 ##timeout时间
加速ports安装
#vi /etc/make.conf ##加入如下
MASTER_SITE_OVERRIDE?=http://ports.hshh.org/${DIST_SUBDIR}/
MASTER_SITE_OVERRIDE?=http://ports.cn.freebsd.org/${DIST_SUBDIR}/
Freebsd颜色显示
secureCRT设置:仿真:终端->linux>勾选ANSI颜色-->确定
#vi /etc/csh.cshrc ##加入如下
setenv LSCOLORS ExGxFxdxCxegedabagExEx
setenv CLICOLOR yes
#cd /usr/ports/edit/vim;make install
#echo "syntax on">/root/.vimrc
#echo "alias vi vim" >>/root/.cshrc
##颜色主要是靠vim来显示的,因此需要安装vim,然后把vi alias成vim就可以了
46、查看系统状态
fstat #报告系统中打开文件的信息
pstat -T #显示这几个系统表的状态,包括当前使用的和可以利用的系统表空间,因此可以用来检查系统在当前负载下是使用多大的系统表,帮助进行优化系统性能
systat #缺省情况下systat是报告处理器的使用率,包括总利用状态、空闲使用率和各个进程的使用率
通过指定参数,systat也能进行I/O的统计、虚存的统计、网络的统计等,这些参数包括-iostat, -vmstat,
-mbufs, -netstat, -ip, -icmp, -tcp, -swap等
kldstat -v #显示内核加载的模块
klsdstat -m ipfilter #显示指定模块
pnpinfo #即插即用设备
devinfo -u #显示设备占用的IRQ和内存地址

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/2385/2.jpg http://posterous.com/users/cBu9Jaq7M Riku lu Riku Riku lu
Tue, 02 Mar 2010 21:42:38 -0800 freebsd目录简介 http://log.riku.me/freebsd-23 http://log.riku.me/freebsd-23 / # 文件系统的根目录。系统启动根先被挂载,再挂载其他目录到根上
/bin/ # 单用户和多用户环境下,用户使用的基本工具。
/boot/ # 操作系统启动过程中使用的程序和配置文件。
/boot/defaults/ # 默认的启动配置文件;看看loader.conf的联机手册。
/dev/ # 设备节点;看看intro的联机手册。
/etc/ # 系统配置文件和脚本。
/etc/defaults/ # 默认的系统配置文件;看看rc的联机手册。
/etc/mail/ # 像sendmail这样的用于邮件传输代理的配置文件。
/etc/namedb/ # named配置文件;看看named的联机手册。
/etc/periodic/ # 每天,每周,每月运行的脚本;看看periodic的联机手册。
/etc/ppp/ # ppp配置文件;看看ppp联机手册。
/mnt/ # 系统管理员使用的用作一个临时加载点的空目录。
/proc/ # 进程文件系统;看看procfs,mount procfs联机手册。
/root/ # root帐户的主目录。
/sbin/ # 单用户和多用户使用的系统程序和管理工具。
/stand/ # 在独立环境下使用的程序。
/tmp/ # 临时文件。
/usr/ # 主要是用户的工具和应用程序。
/usr/bin/ # 通常是工具,程序工具和应用程序。
/usr/include/ # 标准C include文件。
/usr/lib/ # 文档库。
/usr/libdata/ #各种工具的数据文件。
/usr/libexec/ # 系统守护程序和系统工具(被其他程序执行的)。
/usr/local/ # 本地执行库.默认放置port框架.port文档在/usr/local/share/doc/port
/usr/obj/ # 通过建立/usr/src目录树产生的特定结构的目标树。
/usr/ports # FreeBSD ports collection 。
/usr/sbin/ # 系统守护程序和系统工具(由用户执行的)。
/usr/share/ # 独立结构的文件。
/usr/src/ #本地源代码文件。
/usr/X11R6/ # X11R6发行的可执行程序,库等。
/var/ # 多种日志,临时文件和spool文件。
/var/log/ # 多种系统日志文件。
/var/mail/ #用户邮箱文件。
/var/spool/ # 多种打印机和邮件系统spooling 目录。
/var/tmp/ # 系统重新启动之间保存的临时文件。
/var/yp # NIS 地图。

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/2385/2.jpg http://posterous.com/users/cBu9Jaq7M Riku lu Riku Riku lu
Tue, 02 Mar 2010 21:41:17 -0800 freebsd ports 笔记 http://log.riku.me/freebsd-ports http://log.riku.me/freebsd-ports 1.怎样找到我想安装的包路径:
# cd /usr/ports
# make search name=mysql
2.仅仅下载源码包,而不安装:
# cd /usr/ports/directory
# make fetch
3.预先知道需要那些包,才能安装这个软件:
# cd /usr/ports/directory
# make fetch-list
4.把软件装到指定的目录:
# cd /usr/ports/directory
# make PREFIX=/usr install
5.仅仅下载包,解包,而不安装:
# cd /usr/ports/directory
# make extract
6.用PORTS制作一个定制二进制包:
# cd /usr/ports/somewhere/frobble
# make extract
# cd work/frobble-2.8
[Apply your patches]
# cd ../..
# make package
7.强制安装:
# make install FORCE_PKG_REGISTER=yes clean
8.初始化一个port
# cd /usr/ports/directory
# make rmconfig
# make config
新手必杀技ports命令
cd /usr/ports
make deinstall
#删除所有软件,我刚用freebsd三个月的时候老使这个,删了安接着删.....费时费力哦,不推荐
cvsup -g -L 2 -h cvsup.tw.freebsd.org /usr/share/examples/cvsup/ports-supfile
cd /usr/ports
make fetchindex
#别忘了使用ports安装软件前要升级ports系统啊,我现在天天用上边命令的脚本
#要是你没装cvsup,那就去装cd /usr/ports/net/cvsup-without-gui/ && make install
cd /usr/ports/sysutils/portupgrade
make install
#安装这个软件是新手省事而又带来新麻烦的好东西,尽管会带来一些新麻烦,但是还是推荐毕竟麻烦数量少了很多
rm -r /usr/ports
#损招、阴招,现在想不起来当初为什么要用这个命令,不推荐啊不推荐~~
#你要是用了找不到ports了,简单再用cvsup -g -L 2 -h cvsup.tw.freebsd.org
/usr/share/examples/cvsup/ports-supfile命令就行了,费时费力
pkgdb -F
portversion | grep "

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/2385/2.jpg http://posterous.com/users/cBu9Jaq7M Riku lu Riku Riku lu
Sun, 21 Feb 2010 04:43:00 -0800 简明 Python 教程 http://log.riku.me/-python-9 http://log.riku.me/-python-9 http://www.woodpecker.org.cn:9081/doc/abyteofpython_cn/chinese/

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/2385/2.jpg http://posterous.com/users/cBu9Jaq7M Riku lu Riku Riku lu