Debian Sarge 安装要记2006-12-08 by popepy.com

1 view
Skip to first unread message

zrq83...@gmail.com

unread,
Dec 8, 2006, 4:07:21 AM12/8/06
to 绿色精灵
Debian Sarge

一、安装前准备工作
http://debian.cn99.com/debian-cd/sarge/sarge-i386-netinst.iso
下载某文件或用apt-cache
search不到的软件包时请使用www.google.comwww.baidu.com搜索,比如下载libreadline5-dev包时,可以搜索关键字"lib
readline5 dev deb"。

二、系统安装

1、安装基本系统

1.1、用sarge光盘启动,当出现"boot:"时,如果直接敲回车键则安装2.4内核,如果输入
linux26
则安装2.6.8-1-386内核。安装语言选中文,后面全部是中文提示。根据硬盘大小进行分区。建议:SWAP交换分区为内存的2-3倍。"/usr"分区适当大些,因为软件基本安装在这个分区。"/"分区大于150M即可。

1.2、安装后重启系统,系统自动执行base-config配置系统,如果是ADSL上网,则中止该程序执行。(因其ppp配置是基于拨号上网调制解调器配置)
在命令行方式(以下简称为shell环境)下,键入
#LANG=C
这样以英文方式显示不会出乱码;或者安装zhcon
#apt-get -y install zhcon
也可正常显示中文。
#pppoeconf
配置ADSL上网,配置完后键入
#pon dsl-provider或
#pon
即可连接上网。断开互联网连接用
#poff

1.3、shell环境下键入
#base-config
启动配置,apt软件安装源选择中国,建议选linuxforum,因速度最快。软件安装可以选择各种类型,如桌面环境、WEB服务器等,建议选择手动选择软件,然后退出。在shell环境下安装,这样可以实现精细控制安装。

2、安装桌面,即X-WINDOWS(建议安装,如果不用浏览只做服务器则不用装)
shell环境下输入
#apt-get install x-window-system-core kde kde-i18n-zhcn
也可详细安装如kde-core等,为省事可以选kde软件包则安装全部kde环境。

2.1、修改X-windows配置
X-windows配置文件在/etc/X11/XF86Config-4中。有三种方法(建议用第C种):
纯字符界面:
#xf86config
字符图形界面:
#dpkg-reconfigure xserver-xfree86
自动检测:
#apt-get install xdebconfigurator
自动检测硬件
#xdebconfigurator
根据检测结果修改XF86Config-4文件
#dexconf

2.2、安装nvidia显卡驱动(如果是nvidia显卡则必须)

2.2.1、安装nvidia驱动
#apt-get install nvidia-kernel-common_1.0.7174-1_all.deb
#apt-get install nvidia-kernel-2.6.8-1-386_1.0.6629+1_i386.deb
#apt-get install nvidia-glx_1.0.6629+1-2_i386.deb
上面3个文件可用GOOLE搜索,我的本地硬盘也已保存(安装完忘了从哪里下载的)如果谁提供FTP站点可以上载供大家使用。先安装kernel-common包再安装kernel包。
注意:nvidia-kernel-2.6.8这个包的版本号须和内核相同,sarge
linux26系统安装则应该选2.6.8,且nvidia-kernel-2.6.8这个包和nvidia-glx这个包的小版本号必须相同,这里均为
6629。nvidia-kernel-common这个包的小版本号要等于或大于其它两个包就行,这里是7174。
加载nvidia内核模块,可以
每次开机后执行一次
#modprobe nvidia
也可在/etc/modules中增加一行内容
nvidia
然后执行:
#update-modules

2.2.2、修改XF86Config-4文件,文件中
Load "dri"
Load "Glcore"
Option "UseFBDev" "true"
上列3行前加#号或直接删除这几行;将
Driver "nv"
修改为
Driver "nvidia";

nvidia中BusID据实填,我填的是
BusID "PCI:1:0:0"
因为
#lspci
后的输出如下:
0000:01:00.0 VGA compatible controller: nVidia Corporation NV10
[GeForce 256 SDR ] (rev 10)

2.3、安装PS/2鼠标

2.3.1、加载PS/2内核模块
如果X窗口因鼠标原因不能启动,则加载PS/2内核模块,可以每次开机后执行一次:
#modprobe psmouse
#modprobe mousedev
也可在/etc/modules中增加两行内容
psmouse
mousedev
然后
#update-modules

2.4、XF86Config-4中相关内容:
Section "Module"
Load "bitmap"
Load "dbe"
Load "ddc"
Load "extmod"
Load "freetype"
Load "glx"
Load "int10"
Load "record"
Load "speedo"
Load "type1"
Load "vbe"
# Load "dri"
# Load "Glcore"
EndSection
Section "InputDevice"
Identifier "Configured Mouse"
Driver "mouse"
Option "CorePointer"
Option "Device" "/dev/input/mice"
Option "Protocol" "ImPS/2"
Option "Emulate3Buttons" "true"
Option "ZAxisMapping" "4 5"
EndSection
Section "Device"
Identifier "NVIDIA Corporation NV10 [GeForce 256 SDR]"
Driver "nvidia"
BusID "PCI:1:0:0"
# Option "UseFBDev" "true"
EndSection
Section "ServerLayout"
Identifier "Default Layout"
Screen "Default Screen"
InputDevice "Generic Keyboard"
InputDevice "Configured Mouse"
EndSection

2.5、安装中文输入法fcitx
#apt-get install fcitx
新建文件/etc/X11/Xsession.d/25xchinput-start,使启动X窗口自动启动fcitx做为汉字输入法,该文件内容如下:
export G_FILENAME_ENCODEING=@GBK
export LANG=zh_CN.GB2312
export XMODIFIERS=@im=fcitx
fcitx

2.6、安装中文字体(FireFly新宋体)
#wget
http://debian.okey.net/other/debian/ttf-fireflysung_1.0.0-1_i386.deb
#dpkg -i ttf-fireflysung_1.0.0-1_i386.deb
不用修改/etc/fonts/local.conf也可使用该字体。wget是一个下载HTTP协议文件的工具。

2.7、启动X窗口
#startx&
建议安装firefox用于浏览,KDE的浏览器运行不稳定总崩溃。
#apt-get install mozilla-firefox mozilla-firefox-locale-zh-cn
http://www.firefoxcn.com/
下载标签页浏览扩展TabbrowserExtensions.xpi
然后在firefox浏览器直接打开该xpi文件即可安装该扩展

3、安装开发环境(建议安装,如果用源码安装软件则必须)
#apt-get install gcc g++ make gdb m4 binutils
如果在X-windows下开发,建议安装图形开发环境
#apt-get install kdevelop3 kdbg

三、安装FTPD、TELNETD

1、为能远程登录,安装telnetd
#apt-get install telnetd
安装后,在本机或其它机器上执行telnet,如果以普通用户身份能正常登录,则安装正常。如需以root超级用户身份登录,可以先以普通用户身份登录,然后执行
$su

2、安装FTP服务器proftpd
#apt-get install proftpd
新建ftp用户,其主目录为/var/ftp,以ftp身份登录,在/var/ftp下新建/pub供下载和/incoming供上传。
修改配置文件/etc/proftpd.conf如下:
ServerName "wzwftp"
ServerType inetd
DeferWelcome off
MultilineRFC2228 on
DefaultServer on
ShowSymlinks on
TimeoutNoTransfer 600
TimeoutStalled 600
TimeoutIdle 1200
DisplayLogin welcome.msg
DisplayFirstChdir .message
ListOptions "-l"
DenyFilter *.*/
Port 21
MaxInstances 30
MaxLoginAttempts 1
RequireValidShell off
User nobody
Group nogroup
Umask 022 022
AllowOverwrite on

HideNoAccess on
AllowOverwrite off


User ftp
Group nogroup
UserAlias anonymous ftp
MaxClients 10
AuthAliasOnly on #为允许anonymous登录,此行必须。

AllowAll

DenyAll

AllowRetrieveRestart on
AllowAll
AllowOverwrite off


Umask 022 022

AllowAll


AllowAll

AllowRetrieveRestart on
AllowStoreRestart on
DeleteAbortedStores off
AllowAll
AllowOverwrite on

DefaultChdir /var/ftp
LoginPasswordPrompt on
AllowAll
AnonRequirePassword off
AuthAliasOnly off
UseFtpUsers off

然后执行ftp
127.0.0.1,如果以anonymous身份登录正常,则ftp服务器正常安装。

四、源码安装服务器软件APACHE(HTTP浏览器服务器)、POSTGRESQL(SQL关系数据库服务器)、PHP(CGI语言)

1、下载解压源码软件包
下载软件包httpd-2.0.54.tar.bz2、postgresql-8.0.2.tar.bz2、php-5.0.4.tar.bz2,解压软件包
#tar xvjf httpd-2.0.54.tar.bz2
#tar xvjf postgresql-8.0.2.tar.bz2
#tar xvjf php-5.0.4.tar.bz2
在源码安装过程中,执行./configure命令后经常会出现某个开发库没找到中止,根据提示信息用apt-cache
search搜索,apt-get install安装相应软件包即可。

2、安装APACHE
2.1、安装APACHE
#cd httpd-2.0.54
#./configure --enable-module=so
(允许模块,为php安装做准备)
#make
#make install

2.2、使用和配置APACHE
修改/usr/local/apache2/conf/httpd.conf中DocmentRoot和其它相关内容,以设置自己的浏览器根目录。APACHE使用命令:
#/usr/local/apache2/bin/apachectl 选项
选项内容:start表示启动,stop表示停止,restart表示重新启动。

2.3、测试APACHE是否正常安装
安装后启动APACHE,在本机浏览器内敲入localhost,如果页面显示内容为"
您能看见这个页面,说明Apache web server
已经安装成功。等等",则表示APACHE安装成功。

3、安装POSTGRESQL服务器

3.1、安装POSTGRESQL
#cd postgresql-8.0.2
#./configure enable-nls (打开本地语言支持)
#make
#make install

3.2、配置POSTGRESQL数据库
新建/var/sqldata目录供数据库使用(数据库使用目录可建于任何地方);新建用户postgres,该用户属postgres组,该用户主目录为"/var/sqldata"。然后
#chown postgres:postgres /var/sqldata
#chmod a+rx /var/sqldata
以postgres用户登录:
#su postgres

#login
新建目录:
$mkdir /var/sqldata/base
初始化数据库(数据库存放于/var/sqldata/base,设置默认字符集为UTF-8)
$/usr/local/pgsql/bin/initdb --locale=UNICODE -D /var/sqldata/base
创建数据库"test"
$/usr/local/pgsql/bin/createdb test
启动数据库服务(-i表示允许TCPIP连接,-D指定数据库目录,执行日志输出到logfile文件)
$/usr/local/pgsql/bin/postmaster -i -D /var/sqldata/base>logfile 2>&1 &
停止数据库服务,直接杀掉postmaster进程即可
$killall postmaster

3.3、测试是否正常安装
进行数据库操作:
#su postgres
$/usr/local/pgsql/bin/psql test
如果进入数据库命令行管理方式则表示数据库安装成功。

3.4、POSTGRESQL参考:请参考何伟平的网站:
http://www.pgsqldb.org/
,上面的POSTGRESQL文档和论坛非常好。

4、安装PHP

4.1、安装PHP
#cd php-5.0.4
#./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-pgsql
--with-zlib --with-bz2 --enable-ftp --with-gd --with-gettext
--enable-mbstrin --with-readline
#make
#make install

4.2、配置PHP
#cp php.ini-dist /usr/local/lib/php.ini
apache配置文件httpd.conf中如果没有下列行,则增加。
LoadModule php5_module libexec/libphp5.so
AddType application/x-httpd-php .php .phtml
AddType application/x-httpd-php-source .phps

4.3、测试PHP是否正常安装:
在浏览器服务的根目录(例如:/usr/local/apache2/htdocs)下新建文件lzzzz.php,文件内容如下所示:
echo("Hello World. ");
phpinfo();
?>
然后在本机浏览器窗口地址栏内输入
localhost/lzzzz.php
如果有正常输出结果而不是显示文件内容本身或显示异常,则php安装正常。

五、apt和dpkg软件包管理工具使用要点

1、/etc/apt/sources.list文件内容:
deb ftp://ftp.linuxforum.net/debian/ unstable main contrib non-free
deb-src ftp://ftp.linuxforum.net/debian/ unstable main contrib non-free
deb http://security.debian.org/ stable/updates main
debain有三种类型发行版:stable最稳定,unstable有最新版本软件包但没有全面测试可能不太稳定,testing介于stable和unstable之间。

2、apt命令(主要用于管理网络上文件下载)简要

2.1、检索和显示
检索存在的包,参数中name可以是包名的一部分也可是全部。
#apt-cache search name
显示包信息,其中pkgname必须是软件包的全名。
#apt-cache show pkgname
显示软件包内容:
#apt-file search pkgname
#apt-file list pkgname
apt-file信息要更新则:
#apt-file update

2.2、安装软件包
下载并安装软件包。
#apt-get install pkgname1 pkgname2
例如:
#apt-get install telnetd
只下载不安装软件包,软件包被下载到/var/cache/apt/archives目录。
#apt-get -d install pkgname1 pkgname2,
重新安装软件包:
#apt-get --reinstall install pkgname1 pkgname2
安装时对所有提问回答"yes"选项:
#apt-get -y install pkgname1 pkgname2
如果安装进行不下去则用命令修复,然后再安装
#apt-get -f install

2.3、删除软件包
删除软件包:
#apt-get remove pkgname
彻底删除软件包(包括配置文件等):
#apt-get --purge remove pkgname
删除本机上下载的无用软件包,第1种全部删除:
#apt-get clean
第2种删除过时的:
#apt-get autoclean

2.4、更新软件包
更新软件包分两步,第1步更新软件包信息:
#apt-get update
第二步软件包升级:
#apt-get upgrade
或升级软件包的发行版:
#apt-get dist-upgrade。
软件升级时使某个包锁定(即不升级):修改/etc/apt/preferences文件,其中内容为:
Package: pkgname
Pin: pindef
Priority: pinpri
例如:
Package: gaim
Pin: version 0.58*,*表示锁定以0.58开头的所有版本。
Priority值含义是:<0表示永不安装,0-100表示不是有效版本不安装,>100且<1000表如有新版本则安装,>1000表示安装旧版本。

2.5、源码包管理
下载源码包:
#apt-get source pkgname
通常下载3个文件:.orig.tar.gz和.dsc和.diff.gz;然后解压在/var/cache/apt/archives/pkgname目录,其中/debian子目录是创建.deb包需要的文件。
下载并自动打包:
#apt-get -b source pkgname

2.6、在CD-ROM使用APT,dirname为CD-ROM挂载点目录名
#apt-cdrom add [-d dirname]

3、dpkg命令(主要管理本地硬盘和已安装的包文件)简要

3.1、检索和显示
查找文件属于哪个安装软件包,filename可以是全名也可以是部分名字,可以带路径也可以不带路径。
#dpkg -S filename
显示系统已安装的软件包列表:
#dpkg -l
因输出软件包名字太长则会被截断,所以加上COLUMNS环境变量,或在.bashrc和.profile中加上COLUMNS环境变量设置:
#COLUMNS=120 dpkg -l
列出未安装到系统上的软件包文件(.deb)中的文件列表,其中pkgfilename为软件包文件名:
#dpkg -c pkgfilename
列出已安装到系统上的软件包的安装文件列表,其中pkgname为软件包名:
#dpkg -L pkgname
显示未安装到系统上的软件包文件(.deb)中的包信息:
#dpkg -f pkgfilename
#dpkg -I pkgfilename
显示已安装到系统上的软件包的包信息:
#dpkg -s pkgname
#dpkg -p pkgname

3.2、安装软件包
安装本地硬盘上的软件包,pkgfilename为软件包的全名:
#dpkg -i pkgfilename
例如
#dpkg -i ttf-fireflysung_1.0.0-1_i386.deb
解开但不配置软件包:
#dpkg --unpack pkgfilename
解开且配置软件包:
#dpkg --configure pkgfilename

3.3、删除软件包
删除软件包:
#dpkg -r pkgname
彻底删除软件包(包括配置文件等):
#dpkg -P pkgname

3.4、生成软件包
#dpkg -b directoryname
#dpkg -b filename

六、常用配置工具
1、显示系统信息
列出PCI信息(如显卡、网卡、声卡等):
#lspci
显示当前内核:
#cat /proc/verion
显示系统信息:
#uname -a
显示开机过程的信息:
#dmesg
显示当前locale
#locale

2、系统配置
配置系统引导服务:
#rcconf
基本系统配置:
#base-config
软件包管理:
#debconf
#aptconf
软件包重新配置:
#dpkg-reconfigure pkgname
locale配置:
#localeconf
#dpkg-reconfigure locales

3、网络配置
ADSL上网配置:
#pppoeconf
网络配置用下面命令,涉及的几个主要文件:/etc/hostname(主机名字),/etc/hosts,/etc/network/interfaces(开机网络配置),/etc/resolv.conf(DNS配置)。
#ifconfig

4、X窗口配置见第二部分2.1节。

5、内核模块配置:
#modconf
/etc/modules文件中是开机加载模块,修改该文件后应用
#update-modules
自动更新/etc/modules.conf和/etc/chandev.conf文件。
加载模块:
#modprobe modname
卸载模块:
#modprobe -r modname
当前使用模块的配置:
#modprobe -c
显示安装的模块:
#modprobe -l
安装一个可加载模块:
#insmod modname
卸载模块:
#rmmod modname
列出已加载模块:
#lsmod
显示模块信息


Lighttpd+Squid+Apache搭建高效率Web服务器
davies 发表于 2006-9-9 01:06 | 分类: Tech :: Web ::
架构原理

Apache通常是开源界的首选Web服务器,因为它的强大和可靠,已经具有了品牌效应,可以适用于绝大部分的应用场合。但是它的强大有时候却显得笨重,配置文件得让人望而生畏,高并发情况下效率不太高。而轻量级的Web服务器Lighttpd却是后起之秀,其静态文件的响应能力远高于Apache,据说是Apache的2-3倍。Lighttpd的高性能和易用性,足以打动我们,在它能够胜任的领域,尽量用它。Lighttpd对PHP的支持也很好,还可以通过Fastcgi方式支持其他的语言,比如Python。

毕竟Lighttpd是轻量级的服务器,功能上不能跟Apache比,某些应用无法胜任。比如Lighttpd还不支持缓存,而现在的绝大部分站点都是用程序生成动态内容,没有缓存的话即使程序的效率再高也很难满足大访问量的需求,而且让程序不停的去做同一件事情也实在没有意义。首先,Web程序是需要做缓存处理的,即把反复使用的数据做缓存。即使这样也还不够,单单是启动Web处理程序的代价就不少,缓存最后生成的静态页面是必不可少的。而做这个是
Squid的强项,它本是做代理的,支持高效的缓存,可以用来给站点做反向代理加速。把Squid放在Apache或者Lighttpd的前端来缓存
Web服务器生成的动态内容,而Web应用程序只需要适当地设置页面实效时间即可。

即使是大部分内容动态生成的网站,仍免不了会有一些静态元素,比如图片、JS脚本、CSS等等,将Squid放在Apache或者Lighttp前端后,反而会使性能下降,毕竟处理HTTP请求是Web服务器的强项。而且已经存在于文件系统中的静态内容再在Squid中缓存一下,浪费内存和硬盘空间。因此可以考虑将Lighttpd再放在Squid的前面,构成
Lighttpd+Squid+Apache的一条处理链,Lighttpd在最前面,专门用来处理静态内容的请求,把动态内容请求通过proxy模块转发给Squid,如果Squid中有该请求的内容且没有过期,则直接返回给Lighttpd。新请求或者过期的页面请求交由Apache中Web程序来处理。经过Lighttpd和Squid的两级过滤,Apache需要处理的请求将大大减少,减少了Web应用程序的压力。同时这样的构架,便于把不同的处理分散到多台计算机上进行,由Lighttpd在前面统一把关。

在这种架构下,每一级都是可以进行单独优化的,比如Lighttpd可以采用异步IO方式,Squid可以启用内存来缓存,Apache可以启用MPM
等,并且每一级都可以使用多台机器来均衡负载,伸缩性很好。
实例讲解

下面以daviesliu.netrainbud.net域下面的几个站点为例来介绍一下此方案的具体做法。daviesliu.net域下有几个用
mod_python实现的blog站点,几个php的站点,一个mod_python的小程序,以后可能还会架设几个PHP和Django的站点。而服务器非常弱,CPU为Celeron
500,内存为PC 100
384M,因此比较关注Web服务器的效率。这几个站点都是采用虚拟主机方式,开在同一台机器的同一个端口上。

Lighttpd服务于80端口,Squid运行在3128端口,Apache运行在81端口。
Lighttpd的配置

多个域名采用/var/www/domain/subdomain
的目录结构,用evhost模块配置document-root如下:

evhost.path-pattern = var.basedir + "/%0/%3/"

FtpSearch中有Perl脚本,需要启用CGI支持,它是用来做ftp站内搜索的,缓存的意义不大,直接由lighttpd的mod_cgi处理:

$HTTP["url"] =~ "^/cgi-bin/" { # only allow cgi's in this directory
dir-listing.activate = "disable" # disable directory listings
cgi.assign = ( ".pl" => "/usr/bin/perl", ".cgi" =>
"/usr/bin/perl" )
}

bbs使用的是phpBB,访问量不大,可以放在lighttpd(fastcgi)或者apache(mod_php)下,暂时使用
lighttpd,设置所有.php的页面请求有fastcgi处理:

fastcgi.server = ( ".php" => ( ( "host" => "127.0.0.1", "port"=>
1026, "bin-path" => "/usr/bin/php-cgi" ) ) )

blog.daviesliu.netblog.rainbud.net
是用mod_python编写的blogxp程序,所有静态内容都有扩展名,而动态内容没有扩展名。blogxp是用python程序生成XML格式的数据再交由mod_xslt转换成HTML页面,只能放在Apache下运行。该站点采用典型Lighttpd+Squid+Apache方式处理:

$HTTP["host"] =~ "^blog" {
$HTTP["url"] !~ "\." {
proxy.server = ( "" => ( "localhost" => ( "host"=> "127.0.0.1",
"port"=> 3128 ) ) ) #3128端口为
}
}

share中有静态页面,也有用mod_python处理的请求,在/cgi/下:

$HTTP["host"] =~ "^share" {
proxy.server = (
"/cgi" => ( "localhost" => ( "host"=> "127.0.0.1", "port"=>
3128 ) )
)
}

Squid的配置

只允许本地访问:

http_port 3128
http_access allow localhost
http_access deny all

启用反向代理:

httpd_accel_host 127.0.0.1
httpd_accel_port 81 #apache的端口
httpd_accel_single_host on
httpd_accel_with_proxy on #启用缓存
httpd_accel_uses_host_header on #启用虚拟主机支持

此方向代理支持该主机上的所有域名。
Apache的配置

配置/etc/conf.d/apache2,让其加载mod_python、mod_xslt、mod_php模块:

APACHE2_OPTS="-D PYTHON -D XSLT -D PHP5"

所有网站的根目录:

<Directory "/var/www">
AllowOverride All #允许.htaccess覆盖
Order allow,deny
Allow from all
</Directory>

基于域名的虚拟主机:

<VirtualHost *:81>
ServerName blog.daviesliu.net
DocumentRoot /var/www/daviesliu.net/blog
</VirtualHost>

这里明显没有lighttpd的evhost配置方便。

blog.daviesliu.net下的.htaccess设置(便于开发,不用重启Apache):

SetHandler mod_python
PythonHandler blogxp.publisher
PythonDebug On
PythonAutoReload On

<FilesMatch "\.">
SetHandler None #静态文件直接由Apache处理
</FilesMatch>

<IfModule mod_xslt.c>
AddType text/xsl .xsl #防止对xsl文件进行转化
AddOutputFilterByType mod_xslt text/xml
XSLTCache off
XSLTProcess on
</IfModule>
Header set Pragma "cache"
Header set Cache-Control "cache"

在blogxp.publisher里面,还需要设置返回的文档类型和过期时间:

req.content_type = "text/xml"
req.headers_out['Expires'] = formatdate( time.time() + 60 * 5 )

经过这样的配置,所有站点都可以通过80、3128、81三个端口进行正常访问,80端口用作对外的访问,以减少负荷。81端口可以用作开发时的调试,没有缓存的困扰。
性能测试

由于时间和精力有限,下面只用ab2做一个并不规范的性能对比测试(每项都测多次取平均),评价指标为每秒钟的请求数。
测试命令,以测试lighttpd上并发10个请求 scripts/prototype.js
为例:

ab2 -n 1000 -c 10 http://blog.daviesliu.net:80/scripts/prototype.js

静态内容:prototype.js (27kB)
Con
Lighttpd(:80)
Squid(:3128)
Apache(:81)
1
380
210
240
10
410
215
240
100
380
160
230

可见在静态内容上,Lighttpd表现强劲,而Squid在没有配内存缓存的情况下比另两个Web服务器的性能要差些。

动态页面:/rss (31kB)
Con
Lighttpd(:80)
Squid(:3128)
Apache(:81)
1
103
210
6.17
10
110
200
6.04
100
100
100
6.24

在动态内容上,Squid的作用非常明显,而Lighttpd受限于Squid的效率,并且还要低一大截。如果是有多台Squid来做均衡的话,Lighttpd的功效才能发挥出来。
在单机且静态内容很少的情况下,可以不用Lighttpd而将Squid置于最前面。
MPlayer


sudo apt-get install mplayer-386
sudo apt-get install mplayer-fonts
sudo apt-get install mozilla-mplayer


装了以后就可以用MPlayer放电影了

好了,装好这些播放软件之后我们来安装解码器,在终端中依次输入下面的内容:

代码:

sudo apt-get install gstreamer0.8-plugins
sudo apt-get install gstreamer0.8-lame
sudo apt-get install gstreamer0.8-ffmpeg
sudo apt-get install w32codecs
sudo apt-get install lame
sudo apt-get install sox
sudo apt-get install ffmpeg
sudo apt-get install mjpegtools
sudo apt-get install vorbis-tools
gst-register-0.8

装好之后重新启动电脑,OK,你的Ubuntu已经支持所有常见的媒体类型了


大家一起用gtk编程1(开始与热身)
转载请注明出处:http://lvjinhua.cublog.cn
作者:lvjinhua at gmail dot com
2006.09.20

* 写在最前面

笔者写做本文的目的,主要是为初学GTK编程的新手们提供一个能够快速上手的学习档案,能够通过自己将所有的代码输入并编译,以达到学习的目的。同时,也希望它成为一个参考手册,希望GTK中的每一个API都能在本文中找到相应的示例。

笔者将尽力保证所有的代码都是最短小的,这样才能保证大家都有足够的动力去手工输入它。

由于笔者时间及精力有限,不能一次将所有内容呈现给所有读者,因此拟定了一个计划:每天更新一个章节的内容,在笔者的Blog上进行连载,同时会不断地对以前的内容进行修改和完善,因此为了保证大家能够读到最新的内容,请随时关注笔者的Blog:http://lvjinhua.cublog.cn

起笔的日子:2006.09.20

* 为什么是GTK?

为什么不是GTK?笔者不想花费太多的口水去辨证为什么选择GTK而不是其它的东西;任何技术都没有好坏之分,只有使用它的人有能力的强弱之别;笔者认为比较明智的做法是:多编些程序,少做些争论。

* 1、GTK简介

GTK (GIMP Toolkit)
是一套用于创建图形用户界面的工具包。它遵循 LGPL
许可证,所以可以用它来开发开源软件、自由软件,甚至是封闭源代码的商业软件,而不用花费任何费用来购买许可证和使用权。当前,GTK已经被成功地应用到了大量的自由软件及商业软件中,已经取得了很大的成功。

GTK 的创建者:
Peter Mattis: pe...@xcf.berkeley.edu
Spencer Kimball: spe...@xcf.berkeley.edu
Josh MacDonald: jm...@xcf.berkeley.edu

当前,GTK主要由几大组件构成:
*Gtk+:GTK的主要构件,包括所有的图形控件及大量实用的API。
*Glib:包含一些标准函数的替代函数,以及一些处理链表等数据结构的函数等。这些替代函数被用来增强GTK
的可移植性,同时提供 libc 的对应函数的增强版本。
*Pango:该组件用来处理国际化文字输出。

* 2、预备

工欲xxx,必先利其器!在进行实际的程序设计之前,应该先明确一些主要的开发工具。
1)GTK是跨平台的,它能够运行于Linux/Unix/Windows/MacOS及嵌入式系统,但这不是本文所关注的重点;实际上,只要按照GTK所提供的API去编程,基本上在一个平台上设计的程序,在其它平台可以不加任何修改而成功地进行编译。

笔者使用的操作系统是:Dubuntu-6.06,本文中所有的示例代码将在该平台上进行开发并编译运行;当然,这并不代表不能使用其它操作系统,只要安装了GCC编译环境、GTK/Glib/Libc开发库,基本上就能成功地编译运行本文中的所有示例,现就Ubuntu
Dapper 发行版GTK开发环境安装方法简述如下:
sudo apt-get install vim
#是的,笔者使用vim来编写代码,当然您可以使用任何自己喜欢的编辑器
sudo apt-get install build-essential #这将安装
gcc/g++/gdb/make 等基本编程工具
sudo apt-get install gnome-core-devel #这将安装 libgtk2.0-dev
libglib2.0-dev 等开发相关的库文件
sudo apt-get install pkg-config
#用于在编译GTK程序时自动找出头文件及库文件位置
sudo apt-get install devhelp #这将安装 devhelp
GTK文档查看程序
sudo apt-get install libglib2.0-doc libgtk2.0-doc
#这将安装 gtk/glib
的API参考手册及其它帮助文档
sudo apt-get instal glade libglade2-dev
#这将安装基于GTK的界面构造程序

当然,其它的 Linux
发行版可参考相应的文档进行开发环境的搭建,各大Linux论坛是个不错的咨询地:www.linuxsir.org
, www.linuxfans.org

如果有热心的同仁能提供其它操作系统 GTK
开发库的安装方法,欢迎提供给我笔者,笔者将在这里分享给大家!先行谢过了。
Windows 平台以MinGW为例的环境设置:

来自linxh 的Blog

1.
http://www.gimp.org/~tml/gimp/win32/downloads.html下载以下文件:


*

glib-2.12.1.zip. Runtime for GLib 2.12.1. Requires libiconv and
gettext.
*

glib-dev-2.12.1.zip. Corresponding developer package, i.e. headers,
import libraries and documentation.

*

gtk+-2.8.20.zip. Runtime for GTK+ 2.8.20. Requires GLib 2.12, atk
1.10, Pango 1.12 and cairo 1.2. In addition, if you want to be able to
load PNG, JPEG or TIFF images with gdk-pixbuf, you will need libpng and
zlib, libjpeg and libtiff respectively.
*

gtk+-dev-2.8.20.zip. Corresponding developer package.
*

pango-1.12.3.zip. Pango 1.12.3. Pango is used by GTK+ 2 and GIMP 2.
Requires GLib 2.12 and cairo 1.2.
*

pango-dev-1.12.3.zip. Corresponding developer package.
*

atk-1.10.3.zip. Atk is used by GTK+ 2.
*

atk-dev-1.10.3.zip. Corresponding developer package.
*

cairo-1.2.2.zip. Cairo is used by GTK+ 2 and Pango.
*

cairo-dev-1.2.2.zip. Corresponding developer package.


#

pkg-config-0.20.zip. Pkg-config is a neat program that is useful in
makefiles etc and extensively used in building software according to
the GTK+ and GNOME conventions, using autotools etc. It uses a
"database" specifying interdependencies among softawre packages. It is
used to get the compile and link flags needed when building software
using libraries that provide pkg-config data. Requires GLib 2.x.
#

GNU libiconv for Win32. Both runtime and developer files. GNU Libiconv
is an implementation of iconv. GLib uses libiconv, so you will need
this.
#

gettext-0.14.5.zip. Just the GNU libintl (internationalization library)
DLL (intl.dll). GLib uses libintl, so you will need this.
#

gettext-dev-0.14.5.zip. GNU gettext deveoper files and tools for Win32,
containing the header libintl.h, msgfmt.exe, other programs,
documentation, and various other files. libintl.h is needed if you
build software that uses GNU gettext for internationalization. Msgfmt
is needed if you want to recompile message catalogs. The other commands
can be used to manipulate message catalogs in other ways.
解压到一个目录下(以c:\gtk为例)。

2.
http://gnuwin32.sourceforge.net/packages/libpng.htm下载libpng,安装至c:\gtk下。

3. 编译:
(1) 设置环境变量 set PKG_CONFIG_PATH=C:\gtk\lib\pkgconfig
(2) 运行 pkg-config --cflags --libs gtk+-win32-2.0
(3) 编译时加上上面的输出作为参数

* 3、Hello,Dubuntu!

嗯,早就急不可待了,让我们开始我们的第一个程序吧!

本程序的主要功能:
显示一个窗口,并在窗口的标题栏显示字符串"Hello,
Dubuntu!"
源代码如下所示,编译成功后,可以通过命令行输入
./hello_dubuntu 来运行此程序,显示效果如下:


hello_dubuntu.c
#include<gtk/gtk.h>
/* 一般可以在 /usr/include/gtk-2.0 下找到上边的头文件
*
上边的头文件的作用是包含进行GTK编程所有可能用到的头
* 文件,包括glib.h等
*/
int
main(int argc, char *argv[])
{
GtkWidget *window;
// GtkWidget 是绝大部分可视组件的的基类
gtk_init(&argc, &argv);
//对程序传入的命令行参数进行标准化处理
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
//创建窗口(200x200大小)
gtk_window_set_title(GTK_WINDOW(window), "Hello,Dubuntu!");
//设置窗口标题
gtk_widget_show(window);
//显示窗口
gtk_main();
//Gtk程序主循环
return 0;
}
编译程序: gcc hello_dubuntu.c -o hello_dubuntu `pkg-config
--cflags --libs gtk+-2.0` # 注意:"`" 不是普通的单引号
"'",而是同"~"在一起的那个符号!

是的,上边的程序非常简单,除了注释就没几条语句了!但它确实是一个GTK程序,虽然它还不够完善,缺少信号处理,因此当您单击"关闭"按钮关闭此窗口后,实际上程序还在运行。

1) 编译程序的命令行:
如上,使用GNU C语言编译器 gcc , 其中 pkg-config --cflags
--libs gtk+-2.0 用于生成 gcc
编译及链接程序时所必须的头文件及库文件列表,在笔者的机器上运行该命令得到的结果如下:
命令: pkg-config --cflags --libs gtk+-2.0
输出:
-I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include
-I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0
-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -lgtk-x11-2.0
-lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0
-lfontconfig -lXext -lXrender -lXinerama -lXi -lXrandr -lXcursor
-lXfixes -lpango-1.0 -lcairo -lX11 -lgobject-2.0 -lgmodule-2.0 -ldl
-lglib-2.0

2)
大家如果对某个GTK标准API定义,或者某个类型/常量定义不清楚,可以在
devhelp 帮助程序中进行搜索,以查看某参数说明。

3) gtk_init(&argc, &argv)
函数用于对传入进来的标准命令行参数进行解析并处理,这些标准命令行参数为(即:运行我们的程序时,通过命令行传入的下列参数会被自动处理):

* --gtk-module
* --g-fatal-warnings
* --gtk-debug
* --gtk-no-debug
* --gdk-debug
* --gdk-no-debug
* --display
* --sync
* --name
* --class

4) gtk_widget_show(window) 用于告诉程序, 我们的 window
构件已经准备完成,可以显示了。
5) gtk_main()
,程序将会运行到此,然后等待"事件"的发生;当有事件发生后,将调用此事件对应的回调函数,当回调函数执行完毕,又会重新回到
gtk_main() ,等待新的"事件"发生。
6) 宏 GTK_WINDOW(window)
是用于进行类型检查及转换,它将把一个可以转化为
GtkWindow 的构件强制转换为GtkWindow 类型后传递给函数。

好了,hello_dubuntu.c 理解了吗? 什么!没有理解!
不要紧,我们下边还会有很多这样的小例子,再多输入几个就会理解了,相信我!

下集预告:将在窗口中添加一个按钮,并为按钮关联"clicked"事件,以使单击按钮后会有一些返回。

Reply all
Reply to author
Forward
0 new messages