显示标签为“Linux/Unix非系统使用笔记”的博文。显示所有博文
显示标签为“Linux/Unix非系统使用笔记”的博文。显示所有博文

2009-05-05

php扩展的动态编译

有时候需要安装php的模块,这个时候重新编译php就相当不合适了。因此使用类似于apache的动态编译的特性就不错了。对于php来说,我们有很棒的工具,以pdo_mysql为例。
一下假设我的php已经安装在/opt/php
php的源代码在/home/test/php里。
cd /home/test/php/ext/pdo_mysql
/opt/php/bin/phpize
./configure --with-php-config=/opt/php/bin/php-config --with-pdo-mysql=/opt/mysql/

这样这个模块就编译好了。吧php.ini里面对应的模块打开即可。

另外,注意安装pdo需要aclocal这个在autoconf包里的程序。

2009-03-28

MySQL基本使用

  虽然没爱,但是会用到的,所以呢,还是学习一下。这里已经表示你用mysql命令登录进了数据库的情况了。

命令
mysql> SELECT VERSION(), CURRENT_DATE;
这个基本可以说明问题了,mysql的命令都是以;结尾的,当然注意是半角的,而且不区分大小写。
而显示都是以这种形式出现的:

+---------------+--------------+
version() current_date
+---------------+--------------+
5.1.29-rc-log 2009-03-28
+---------------+--------------+
1 row in set (0.00 sec)


这里举例:

mysql> show databases;
+--------------------+
Database
+--------------------+
information_schema
joinus
mysql
subversiondatabase
test
+--------------------+
5 rows in set (0.00 sec)

这个命令显示了你的机器上有哪些数据库

mysql> use test;
Database changed

这个命令选择了test这个数据库

显然,作为一个提供数据存储服务的程序,我们需要分配用户和对应的数据库,这里我们新建一个用户以允许用户登录到mysql,并且控制它自己的数据库。
所以这个命令等同于新建用户的:

GRANT priv_type ON db_name.table_name TO user_name IDENTIFIED BY ‘password’[WITH GRANT OPTION]





其中,大写的单词都是语法中的关键字,小写的部分是需要用户来完成,其中:

priv_type 表示权限类型,比如 select 、 insert 、 create 等,详细的权限名称可以参考 user 表中 field 字段名称,去掉后缀“ _priv ”后就是实际的权限名称。如果要授予全部的权限,可以用“ all privileges ”来代替。

  • db_name 表示数据库名称,‘ * ’表示所有数据库
  • table_name 表示表的名称,‘ * ’表示所有表。
  • user_name 表示要创建的用户名称,注意这个名称由用户名和 host 两部分组成。
  • password 表示用户的密码,用明文表示,创建的时候会自动进行加密。
  • WITH GRANT OPTION 表示新用户可以将自己的权限授予其他用户,如果不写,默认不可以。

这里需要注意的是,如果单独赋予管理权限,则“ ON db_name.table_name ”字句中的“ db_name.table_name ”需要写为“ *.*” ,因为管理权限是和某个具体的数据库无关的。

下面,我们创建三个用户,一个是超级用户,授予它对所有数据库的所有表的所有权限;另外一个是普通用户,授予它对数据库 test1 中表 t1 的 select 、 update 、 insert 、 delete 权限,这种情况适用于大多数情况,因为我们出于对数据的安全性考虑,一般不会给用户设置为超级权限;第三个是需要执行文件操作的用户,需要授予 file 权限。

创建超级用户:

mysql> grant all privileges on *.* to user1@localhost identified by '123';

Query OK, 0 rows affected (0.04 sec)

创建普通用户:

mysql> grant select,update,insert,delete on test1.t1 to user2@localhost identified by '123';

Query OK, 0 rows affected (0.01 sec)

创建具有文件权限的用户:

mysql> grant file on *.* to user3@localhost identified by '123';

Query OK, 0 rows affected (0.01 sec)

上例中的用户 host 都设置为 localhost ,只允许本地连接,这个值被记录到 user 表中的 host 字段中, host 可以是以下设置:

A. 主机名或 IP 号,或“ localhost ”指出本地主机。

B. 使用通配符字符 “%” 和 “_” 。其中,“ % ”匹配任何主机名, 使 用 “_” 匹配任何单个字符。空 Host 值等价于“ % ”。它的含义与 LIKE 操作符的模式匹配操作相同。例如,“ % ”的 Host 值与所有主机名匹配,而“ %.mysql.com ”匹配 mysql.com 域的所有主机。



这里我新建了一个用户:

grant all privileges on test.* to testuser@localhost identified by '123456';

当我使用这个用户登上去并使用

mysql> show databases;
+--------------------+
Database
+--------------------+
information_schema
test
+--------------------+
2 rows in set (0.00 sec)

所以我只能看到我有权限的数据库。
不过这里有个有趣的地方是,只要管理员给用户指定一个数据库的权限,如果这个数据库不存在的话,用户登录上来后可以自己创建。
管理员分配了ireport数据库的权限:
grant all on ireport.* to 'ulysess'@'localhost'
比如我用testuser登录后
mysql> create database ireport;
Query OK, 1 row affected (0.00 sec)


关于用户权限,在mysql数据库中,是有一个叫做权限表的东西的,这个可以读这篇引用:



权限系统认证过程实际是通过 MySQL 内部的 6 个权限表来实现的,分别是: user 、 db 、 host 、 tables_priv 、 columns_priv 和 procs_priv ,它们都位于 MySQL 安装后的“ mysql ”数据库中,这些权限表的作用如下:

A. user 控制 “ 用户名 ” ( user )可以从哪一台 “ 主机名 ”(host) 访问 mysql ,该表包括全局权限的控制。例 如,如果 user 表授予用户 DELETE 权限, 那么此用户可以在服务器主机上删除任何数据库中的记录!换句话说, user 表权限是超级用户权限。只把 user 表的权限授予超级用户如服务器或数据库主管是明智的。对其他用户,应该把在 user 表中的权限设成 'N' 并且仅在特定数据库的基础上授权。

B. Db 规定哪个用户可以访问哪个数据库。权限列决定允许哪个操作。授予的数据库级别的权限适用于数据库和它的表。

C. Host 表与 db 表结合使用在一个较好层次上控制特定主机对数据库的访问权限。

D. tables_priv 和 columns_priv 表类似于 db 表,但是权限更加精细:它们在表和列级应用而非在数据库级。授予表级别的权限适用于表和所有它的列。授予列级别的权限只适用于专用列。

E. procs_priv 规定谁可以执行哪个存储过程。

其中, user 表最为重要,它控制着整个 MySQL 的全局权限。 user 中的列主要分为四个部分:用户列、权限列、安全列、资源控制列,其中,我们用的最多的是用户列和权限列,权限列又分为普通权限和管理权限。普通权限主要用 于数据表的操作,比如 select_priv 、 create_priv 等;而管理权限主要用来对数据库进行管理的操作,比如 process_priv 、 super_priv 等等,普通权限在其他权限表中都可能有记录,而管理权限只在 user 表中有记录。

当用户与 MySQL 进行权限认证时,权限表的存取过程如下:

A. 先从 user 表中的 host 、 user 和 password 三个字段中判断连接的 IP 、用户名和密码是否存在于表中,如果存在,则通过身份验证,否则拒绝连接。

B. 如果通过身份验证,则通过 user 、 db 、 host 、 tables_priv 、 columns_priv 、 procs_priv 这几个权限表得到对应的数据库权限并进行授权。




恩,适时锻炼,打完收工,暂时只需要用到这么多,先这样吧。。。

------------------------------------------------------------------------------------
更新:
  我等必然常用到的 Mysql的一个常用功能就是修改用户和密码,那么看看三种修改用户密码的方法:
  • 登录mysql后
    use mysql;
    UPDATE user SET password=PASSWORD("NEW_PASSWORD") WHERE user='USER_TO_BE_CHANGE';

      mysql> FLUSH PRIVILEGES;
  • 登录mysql后
    SET PASSWORD FOR hunte=PASSWORD('NEW_PASSWORD');
  • 在系统的命令行下
    mysqladmin -u root "old password" "new password"


----------------------------------------------------------------------------------
再次更新:
删除用户:
DELETE FROM user WHERE User="testuser" and Host="localhost";
删除数据库:
drop database testdatabase;

2009-01-20

为Ubuntu 8.10装上Wiimote

  今天在Matt Cutts的博客上读到了这篇好文,哈哈,有钱买Wiimote的朋友赶快试试:
  简单来说,如果你的电脑有蓝牙功能,直接用,没有的话准备一个蓝牙适配器。接下来
sudo apt-get install wminput wmgui lswm
  然后在图形程序中配置好就OK,如果你有兴趣全文阅读可以到上面的那个链接去读读原文。

2008-12-19

Ubuntu KVM 安装windows xp && 解决上网问题

  KVM是一款很不错的虚拟机,它能够很好的利用虚拟化技术。不管怎么样,常用linux的人也是有必要弄一个windows虚拟机用着的。。。


安装KVM:


首先确定你的cpu是否支持虚拟化技术:
egrep '(vmx|svm)' /proc/cpuinfo
如果出现svm 或者 vmx 代表支持虚拟化技术,前者是amd-v 后者是intel的vt,另外注意主板是否开启这些选项。

在确认cpu支持之后就可以开始编译安装了:
http://kvm.qumranet.com/kvmwiki 此处下载最新源代码。
回来之后只需要用普通的./configure --prefix=/usr/local/kvm即可。这个kvm会自己编译安装qemu的。所以不劳我们费心。

kvm主要有2个ko,kvm-intel.ko,kvm-amd.make install 会自动加载,如果用apt装可能需要手动加载一下:
sudo modprobe kvm
sudo modprobe kvm-amd

记得每次重启你真的主机之后都需要重复一遍这两个命令,否则会提示找不到/dev/kvm
这样基本就算装完了。接下来只需要装系统配置windows了。

配置客户机
首先是装系统:
先配置一个虚拟磁盘:
sudo qemu-img create -f qcow2 winxp.img 10G
-f 就是创建的虚拟磁盘的格式,最后那个指定的是初始大小,貌似虚拟磁盘的大小能够自动增加。
之后启动系统开始安装:
sudo qemu-system-x86_64 -hda winxp.img -cdrom /home/test/xpimg.iso -boot d -m 384 -no-acpi -smp 2 -clock rtc -localtime
启动虚拟机用的就是这个qemu-system-x86_64,不管你是32位还是64位
-hda指定虚拟磁盘文件,当然也可以有-hdb -hdc了。
-cdrom 指定的是作为光盘加载的文件,也可以直接加载光盘.
-boot指定启动类型,d是从光盘启动,c是从硬盘启动
-m指定内存多少以m为单位
-no-acpi之所以要用是因为kvm对它支持不好,似乎会使系统很慢。
-smp指定cpu个数,有几核用几个才是上上之选。
-clock rtc指定使用rtc时钟。据说不开这个xp很慢。。。
-localtime使用本地时间,不开的话可能虚拟机时间有问题。



接下来配置网络,我用桥接模式,这样设置:
sudo apt-get install bridge-utils
sudo apt-get install uml-utilities

sudo vi /etc/network/interfaces

按照下面的范例自己配置:
auto eth0
iface eth0 inet static \
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.1

#######################Setting for KVM Guest Machine#######################
auto tap0
iface tap0 inet manual
up ifconfig $IFACE 0.0.0.0 up
down ifconfig $IFACE down
tunctl_user kyo

auto br0
iface br0 inet static
bridge_ports eth0 tap0
address 192.168.1.134
netmask 255.255.255.0
network 192.168.1.1
broadcast 192.168.1.255
gateway 192.168.1.1
###########################################################################


之后
sudo ifup tap0
sudo ifup br0

如果出错重启试试

都起来之后
sudo brctl addif br0 tap0
sudo brctl addif br0 eth0

这个命令就是把这两块网卡桥接起来。。。

配置好之后以后启动虚拟机用这个命令:
sudo qemu-system-x86_64 -hda winxp.img -boot c -m 512 -no-acpi -smp 2 -clock rtc -localtime -net nic,vlan=0,macaddr=01-02-03-04-05-06 -net tap,vlan=0,df=h,ifname=tap0,script=no -no-acpi
-net后面的参数表示:使用网络,并连接到一个存在的网络设备tap0,这里的mac地址是自己乱编的。

如果你按照我上面的设置设置好了的话,启动到虚拟机有八成你还是联不上网。为什么?因为一个常识问题:
Note: Make sure the first octet in your MAC address is EVEN (eg. 00:) as MAC addresses with ODD first-bytes (eg. 01:) are reserved for multicast communication and can cause confusing problems for you. For instance, the guest will be able to receive ARP packets and reply to them, but the reply will confuse other machines.
所以,最后,我可以上网的启动命令是这样的:

sudo qemu-system-x86_64 -m 512 -hda /home/kyo/KVM/winxp.img -localtime -net nic,macaddr=00-02-03-04-04-05 -net tap,ifname=tap0,script=no -boot c -smp 2 -clock rtc -no-acpi

自己研究了几个小时才真正成功,也就是一个常识匮乏导致的问题。最后总结下这种虚拟机桥接上网的模型:
简单来说:就是我们的虚拟机通过使用tap0这个虚拟网卡桥接到了主机上。对外主机的ip就是192.168.1.10而那个eth0就不再有ip地址了。逻辑上的连接就是图中蓝色的线。虚拟机也可以通过向网络发起起请求连接到主机。

最后记得一点就是:
官方提供了一个叫kvm-guest-drivers-windows的网卡驱动,据说相当不错,如果用bridge模式的话一定要装。不过注意的是,用了这个以后你需要在虚拟机的启动参数那里加上model=virtio这个参数 。
此外,如果有鼠标移动问题或者vnc下鼠标异常奇怪的问题就加上一个参数:-usbdevice tablet,要使用超过1024分辨率需要增加-vga std


参考资料:
https://help.ubuntu.com/community/KVM
http://forum.ubuntu.org.cn/viewtopic.php?f=65&t=154792&start=0
http://forum.ubuntu.org.cn/viewtopic.php?f=65&t=130210
http://linux.chinaunix.net/bbs/viewthread.php?tid=788174
http://kvm.qumranet.com/kvmwiki/Networking

2008-12-09

Opera 9.62 比较完善的中文显示解决&一些其他问题的解决方案

  Opera这个浏览器实话说windows的版本很好用,linux的版本却莫名其妙我是经常卡死。不过由于我的需求我还是要用的,现在的最新版是9.62 2244,10也出beta了,希望以后能够比较更加完善。
  目前还是老问题,首先是中文字体显示的问题,这里按照opera中文社区的方法的确解决了不少问题。从9.5之后引入的font.ini的机制解决了不少问题,相当不错。
方法:vi /usr/share/opera/ini/font.ini

Opera Preferences version 2.1
; Do not edit this file while Opera is running
; This file is stored in UTF-8 encoding


[matches]

; One can disable xft or core fonts if necessary
;engine:xft=blacklist
;engine:x11=blacklist

; Foundries that are generally known to have bad implementations
;foundry:urw|abiword|ultimo=bad

; Generic settings - families with known glyph types
family:times|nimbus roman no9 l|times new roman|bitstream vera serif=serif
family:helvetica|nimbus sans l|arial|bitstream vera sans=sans-serif
family:courier|courier new|bitstream vera sans mono=monospace

; Generic settings - generic families which have good, readable designs,
; but where we can't be sure the implementation is any good.
family:times|times new roman=good
family:helvetica|arial=good
family:courier|courier new=good
family:clearlyu *=good

; Known high-quality fonts
family:arial|verdana|times new roman;foundry:microsoft|monotype=excellent
family:Nimbus*=verygood
foundry:bitstream=excellent

; Known fonts that solves specific problems
family:mincho|gothic=japanese good try-first
family:kochi*=japanese good try-first
family:₩ヨᄚ¥ᆴヒ¦ᄑモ=chinese-s good try-first
family:baekmuk*=korean good try-first

; Fonts that we know should not be used for displaying text
family:*dingbat*|*dings*|agathadaimon=symbol

; Specific fonts at the bottom
; Known bad implementations
engine:x11;foundry:mdk;family:helvetica=blacklist


[default]
usage=by-request
preference=5

[serif]
style=serif

[sans-serif]
style=sans-serif

[monospace]
style=monospace

[cursive]
style=cursive

[fantasy]
style=fantasy

[japanese]
style=japanese

[chinese-t]
style=chinese-t

[chinese-s]
style=chinese-s

[korean]
style=korean

[try-first]
usage=try-first

[excellent]
preference=8
usage=try-first

[verygood]
preference=7
usage=try-first

[good]
preference=6

[bad]
preference=4

[avoid]
usage=by-request

[symbol]
usage=by-request

[blacklist]
usage=blacklist

  这个文件是从opera中文社区那里下载的内容,如果希望使用其他字体自己修改
family:₩ヨᄚ¥ᆴヒ¦ᄑモ=chinese-s good try-first
这一行换成其他的。记住这个文件是使用utf8编码保存的。如果想要改成使用系统字体显示中文就把那一行改成
family:AR PL UMing*=chinese-s good try-first


  这样一修改基本中文就能够很漂亮的显示了,再也不会有当年恶心的中文了。。。

  一般如果想正常使用opera的话还需要解决一些问题:

flash的问题:
  其实现在的opera不管32位还是64位都能很好的使用flash了。不过效率。。。的确垃圾。。。
  去http://get.adobe.com/flashplayer/ 下载tar.gz的包。
  直接解压开,把里面那个 libflashplayer.so拷贝到/usr/lib/opera/plugins里面。

2008-12-02

Warning: Smarty error: unable to read resource: "index.htm" in .../smarty/libs/Smarty.class.php on line 1092 的解决方法

站点用到了smarty,迁移到其他服务器的时候结果不能使用提示类似于这样:

Warning: Smarty error: unable to read resource: "index.htm" in .../smarty/libs/Smarty.class.php on line 1092

这种情况就是无法读取到index.htm文件,所以只需要修改一下这个Smarty.class.php中的配置信息即可。

打开文件找到下面这些内容的位置:


    /**
* The name of the directory where templates are located.
*
* @var string
*/
var $template_dir = 'templates';

/**
* The directory where compiled templates are located.
*
* @var string
*/
var $compile_dir = 'templates_c';


只需要把这两个变量的值改成模板文件夹的相对路径即可。这里是相对于站点路径的相对路径,
我如说我的域名lab.xxx.xxx.xxx这个站点就是使用smarty的站点。现在我的模板文件的路径是
lab.xxx.xxx.xxx/smarty/templates,所以我要把上面两个设置成
smart/templates和smarty/templates_c

2008-11-23

Solaris下php+curl编译

  由于需要重新规划服务器的管理,所以,我们需要按照一定要求重新编译PHP。
在Solaris下编译php需要以下软件包的支持:

gcc
make
flex
bison
m4
autoconf
automake
perl
gzip
tar
GNU sed

此外,根据需求我还增加了这些软件包:

libiconv
libidn
openssl-0.9.8i
curl
expat
fontconfig
freetype
gd
libiconv
jpeg
mysql
libpng
sasl
libxml2
zlib
xpm

我的编译参数是这样:

./configure --prefix=/usr/php --with-mysql=/usr/mysql/ --with-mysqli=/opt/Webservices/mysql/bin/mysql_config --with-apxs2=/usr/httpd/bin/apxs --with-apache=/usr/httpd/ --enable-fastcgi --with-zilb=shared --with-gd=shared --with-curl=shared --with-curlwrappers=shared --with-libxml-dir=/usr/local/ --with-openssl-dir=/usr/local/ssl/ --enable-ftp --with-jpeg-dir=/usr/local/ -with-png-dir=/usr/local/ --with-xpm-dir=/usr/local/ --with-freetype-dir=/usr/local/ --enable-gd-native-ttf --enable-zip

在网上搜到with-mysqli和enable-embedded-mysqlii同时用会出错,所以我就没有测试了
这样编译完成后记得make test通过了就ok。接下来就可以了。
如果你希望不重新编译php就添加curl模块则看下面这段文章
在Wordpress中启用插件Flickr Photo Album for WordPress时,需要系统支持cURL。大多数资料里都是比较简单的方法,即在编译php时加上cURL支持但由于我的系统里已经安装有php,并且有一些其他配置,重新安装太麻烦于是找到了这篇《linux php 扩展库编译》,验证通过,转载以记录一下以php curl 扩展库编译为例。
假如原先编译的php目录在/oracle/php4目录下;apache在/oracle/apache2目录下;php源代码在/home/wugw目录下。如果实际目录与假定的目录不一致,则在下面的命令中做调整。
1. 找到当前运行的php版本的源代码目录,如 php-4.4.7。进入curl扩展库目录。$cd /home/wugw/php-4.4.7/ext/curl
2. 调用phpize程序生成编译配置文件。$/oracle/php4/bin/phpize
3. 编译扩展库,分别执行下面的configure和make命令。$./configure –with-php-config=/oracle/php4/bin/php-config
##configure这一步执行通过后,再执行make命令,如果configure执行不通过,则查找错误原因。$make
##make成功执行后,生成的扩展库文件在当前目录的 modules 子目录下,如 /home/wugw/php-4.4.7/ext/curl/modules/curl.so
4. 配置php.ini文件##将编译好的扩展库文件复制到apache2 modules目录下。$cp /home/wugw/php-4.4.7/ext/curl/modules/curl.so /oracle/apache2/modules/.
##找到php.ini文件所在目录位置,然后编辑。可以通过查看phpinfo信息来确定php.ini文件位置。##在php.ini文件中找到设置扩展目录的位置,然后将扩展路径设置到apache2 modules目录下extension_dir = “/oracle/apache2/modules/”
##在php.ini的设置扩展库位置,设置要添加的扩展库。extension=curl.so
##以后如果还要添加别的扩展库的话,则只需先将php扩展库编译好,然后copy到apache2 modules目录下,##然后再在这个位置,另取一行将编译后的扩展库文件名加上即可
5. 重启apache,查看phpinfo信息,即可看到刚才添加进去的curl扩展库。

2008-11-17

apache的两种虚拟主机配置

  Apache有两种配置虚拟主机的方法,一种是基于IP的,一种是基于域名的。一下是官方文档中的说明:
  术语"虚拟主机"是指在一个机器上运行多个网站(比如:www.company1.com和www.company2.com)。如果每个网站拥有不同的IP地址,则虚拟主机可以是"基于IP"的;如果只有一个IP地址,也可以是"基于主机名"的,其实现对最终用户是透明的。
Apache是率先支持基于IP的虚拟主机的服务器之一。1.1及其更新版本同时支持基于IP和基于主机名的虚拟主机,今后,不同的虚拟主机有时会被称为"基于主机"或"非IP虚拟主机"。


基于域名的虚拟主机和基于IP的虚拟主机比较
  基于IP的虚拟主机使用连接的IP地址来决定相应的虚拟主机。这样,你就需要为每个虚拟主机分配一个独立的IP地址。而基于域名的虚拟主机是根据客户端提交的HTTP头中标识主机名的部分决定的。使用这种技术,很多虚拟主机可以共享同一个IP地址。
  基于域名的虚拟主机相对比较简单,因为你只需要配置你的DNS服务器将每个主机名映射到正确的IP地址,然后配置Apache HTTP服务器,令其辨识不同的主机名就可以了。基于域名的服务器也可以缓解IP地址不足的问题。所以,如果没有特殊原因使你必须使用基于IP的虚拟主机,您最好还是使用基于域名的虚拟主机。下列情况下,你可能会想要使用基于IP的虚拟主机:

  • 一些古董级的客户端与基于域名的虚拟主机不兼容。为了与基于域名的虚拟主机兼容,客户端必须发送"Host"头。HTTP/1.1规范中对此做了要求。而所有现在常见的仅支持HTTP/1.0的旧版本浏览器都以附加的方式实现了这个要求。如果你又想支持这些老浏览器,又想使用基于域名的虚拟主机。我们提供了一个技术方案,你可以在本文末尾看到它。
  • SSL协议先天特性决定了基于域名的虚拟主机无法成为SSL安全服务器。
  • 一些操作系统和网络设备实现的带宽管理技术无法在多个主机共享一个IP的情况下区别它们。

因为我只需要配置基于域名的虚拟主机,所以就只参考了这部分内容,其余部分可以参考文档:http://eduunix.ccut.edu.cn/index2/man/apache2/vhosts/index.html

  为了使用基于域名的虚拟主机,你必须指定服务器IP地址(和可能的端口)来使主机接受请求,这个可以用NameVirtualHost指令来进行配置。如果服务器上所有的IP地址都会用到,你可以用"*"作为NameVirtualHost的参数。如果你打算使用多端口(如运行SSL)你必须在参数中指定一个端口号,比如"*:80"。请注意,在NameVirtualHost指令中指定IP地址并不会使服务器自动侦听那个IP地址。请参阅设置Apache使用的地址和端口一章获取更多详情。另外,这里设定的IP地址必须对应服务器上的一个网络接口。
  下一步就是为每个虚拟主机建立段。的参数与NameVirtualHost的参数必须是一样的(比如说,一个IP地址或"*"代表的所有地址)。在每个段中,至少要有一个ServerName指令来指定伺服哪个主机和一个DocumentRoot指令来说明这个主机的内容位于文件系统的什么地方。

取消中心主机(Mainhost)
如果你想在现有的web服务器上增加虚拟主机,你必须也为现存的主机建造一个定义块。这个虚拟主机中ServerName和DocumentRoot所包含的内容应该与全局的ServerName和DocumentRoot保持一致。还要把这个虚拟主机放在配置文件的最前面,来让它扮演默认主机的角色。

  比如说,假设你正在为域名www.domain.tld提供服务,而你又想在同一个IP地址上增加一个名叫www.otherdomain.tld的虚拟主机,你只需在httpd.conf中加入以下内容:
NameVirtualHost *:80ServerName www.domain.tldServerAlias domain.tld *.domain.tldDocumentRoot /www/domainServerName www.otherdomain.tldDocumentRoot /www/otherdomain
当然,你可以用一个固定的IP地址来代替NameVirtualHost指令中的"*"号,以达到一些特定的目的。比如说,你可能会希望在一个IP地址上运行一个基于域名的虚拟主机,而在另外一个IP地址上运行一个基于IP的或是另外一套基于域名的虚拟主机。
很多服务器希望自己能通过不只一个域名被访问。我们可以把ServerAlias指令放入小节中来解决这个问题。比如说在上面的第一个配置段中ServerAlias指令中列出的名字就是用户可以用来访问同一个web站点的其它名字:
ServerAlias domain.tld *.domain.tld
这样,所有对域domain.tld的访问请求都将由虚拟主机www.domain.tld处理。通配符标记"*"和"?"可以用于域名的匹配。当然你不能仅仅搞个名字然后把它放到ServerNameServerAlias里就算完了。你必须先在你的DNS服务器上进行配置,将这些名字和您服务器上的一个IP地址建立映射关系。
最后,你可以把其他一些指令放入段中,以更好的配置一个虚拟主机。大部分指令都可以放入这些段中以改变相应虚拟主机配置。如果您想了解一个特定的指令是否可以这样运用,请参见指令的作用域。主服务器(main server)范围内的配置指令(在所有配置段之外的指令)仅在它们没有被虚拟主机的配置覆盖时才起作用。
这样,当一个请求到达的时候,服务器会首先检查它是否使用了一个能和NameVirtualHost相匹配的IP地址。如果能够匹配,它就会查找每个与这个IP地址相对应的段,并尝试找出一个与请求的主机名相同的ServerNameServerAlias配置项。如果找到了,它就会使用这个服务器。否则,将使用符合这个IP地址的第一个列出的虚拟主机。
综上所述,第一个列出的虚拟主机充当了默认虚拟主机的角色。当一个IP地址与NameVirtualHost指令中的配置相符的时候,主服务器中的DocumentRoot将永远不会被用到。所以,如果你想创建一段特殊的配置用于处理不对应任何一个虚拟主机的请求的话,你只要简单的把这段配置放到段中,并把它放到配置文件的最前面就可以了。,

我配置的例子:



NameVirtualHost 10.2.3.4:80
<VirtualHost 10.2.3.4:80>

NameVirtualHost 10.2.3.4:80
<VirtualHost 10.2.3.4:80>
DocumentRoot /home/testroot
ServerName test.test.test.com
ErrorLog logs/test.test.test.com_err_log
TransferLog logs/test.test.test.com_access_log
</VirtualHost>

<VirtualHost 10.2.3.4:80>
DocumentRoot /home/testroot/bbs
ServerName tttt.test.test.com
ErrorLog logs/tttt.test.test.com_err_log
TransferLog logs/tttt.test.test.com_access_log
</VirtualHost>

2008-10-02

Apache配置文件的说明

就是./conf/httpd.conf中的配置的说明:

ServerRoot:
  指定apache的daemon的运行目录,可以理解为apache安装的目录。http启动之后会将进程的当前目录改变到这个目录。因此,这个配置文件中指定的相对路径就是这个路径的相对路径了。
  此外,由于NFS文件系统在文件加锁方面能力有向,因此,不应该把这个目录指定为NFS文件系统的目录。根据此配置文件中的说法,不应该在目录明最后加斜杠,如果把这个路径指向一个非本地磁盘,则必须指定LockFile在本地磁盘上。如果要然多个httpd共享此目录,则必须指定LockFile和PidFile:

LockFile /var/run/httpd.lock
  LockFile参数指定了httpd守护进程的加锁文件,一般不需要设置这个参数, Apache服务器将自动在ServerRoot下面的路径中进行操作。但如果ServerRoot为NFS文件系统,便需要使用这个参数指定本地文件系统中的路径。

PidFile /var/run/httpd.pid
  PidFile指定的文件将记录httpd守护进程的进程号,由于httpd能自动复制其自身,因此系统中有多个httpd进程,但只有一个进程为最 初启动的进程,它为其他进程的父进程,对这个进程发送信号将影响所有的httpd进程。PidFILE定义的文件中就记录httpd父进程的进程号。
此外,这个部分还包括以下详细性能配置:
  • Timeout 120 //120秒后断开连接
  • KeepAlive on //支持HTTP1.1中的一次连接传递多个HTTP请求的功能
  • MaxKeepAliveRequests 30 //设置一次连接的最大HTTP请求次数,0表示无限
  • KeepAliveTimeout 15 //服务器完成请求之后如果在这个时间内未获得请求就断开连接
  • MinSpareServers 5 MaxSpareServers 10 //最少/最大空余子进程数量,空余子进程创建随时等候请求的空闲子进程以便提升响应请求的能力
  • StartServers 5 //设置apache启动时启动的子进程数量因此应介于上述两者之间
  • MaxClients 150 //设置服务器支持的最大并发访问的客户数,因此这个参数应该大于MaxSpareServers
  • MaxRequestsPerChild 30 //每个子进程响应服务的次数,应该让子进程在一定时候销毁,生成新的子进程来替代它,能够保证系统的稳定性。默认30,基本上可以设置在1000左右

Listen 80:
  指定服务器除了80端口外还监听其他的端口的HTTP请求,貌似一般对虚拟主机比较有用。

AddModule:
  Apache服务器的一个重要特性就是其模块化的结构,这不但表现为其能在编译时能通过新的模块加入新的功能,还表现为其模块可以动态加载入http服务程序中,而不必载入不需要的模块。使用Apache的动态加载模块只需要设置好Load Module和AddModule参数就可以了,这种特性就是Apache的 DSO(Dynamic Shared Object)特性,然而要想充分使用DSO特性仍然不是一个简单的事情,不适当的改动这里的设置就可能造成服务器不能正常启动。因此如果不是要增加或减 少服务器提供的功能,就不要改动这里的设置。
  Apache默认支持很多模块,但是事实上很多模块是没有必要的,不必要模块不会被载入内存。模块可以静态连接到Apache 服务器内部,也可以这样动态加载,将Apache的特性都编译成动态可加载模块是该Port的做法,而不是Apache的缺省做法,这样就以牺牲很小的性能的同时,带来极大的灵活性。
  在我的Apache2.2.9中,默认模块都被放在./modules目录下。


Port 80:
  设置httpd使用的端口,因为unix下使用小于1024的端口必须要root权限,所以如果使用非root帐户启动,必须使用大于1024的端口,不过因为Apache httpd本身能够以root权限打开端口后切换的普通用户身份运行,这样减少了危险.

User nobody
Group nogroup:
  Apache在打开端口后会切换到这里设定的用户权限运行,默认使用这两个权限在系统里没有文件,因此保证了服务器和它的进程没有修改文件系统的权限。当时有时候php会访问服务器上的文件,可能会产生所谓的nobody拥有的文件,这种文件能够被其他程序同样使用nobody权限来访问,似乎有安全问题,而且也不易操作,我记得Matt Cutts前段时间就在他的blog上提到他的服务器出现了php生成的nobody拥有的文件,无法删除。因此应该自己创造一个新的用户和组来作为apache的运行用户。

ServerName:
  默认情况下不需要指定这个参数,这个是apache自动解析得到的名字。

DocumentRoot "/www/" :
  这个是外部访问服务器的根路径,如果FollowSymLinks设定允许的话。在这个目录底下的符号连接指向的文件同样能被访问到。

下面是整段一起的代码:
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>
  Apache服务器可以针对目录进行文档的访问控制,然而访问控制可以通过两
种方式来实现,一个是在设置文件 httpd.conf(或access.conf)中针对每个目
录进行设置,另一个方法是在每个目录下设置访问控制文件,通常访问控制文件
名字为.htaccess。虽然使用这两个方式都能用于控制浏览器的访问,然而使用配置文件的方法要求每次改动后重新启动httpd守护进程,比较不灵 活,因此主要用于配置服务器系统的整体安全控制策略,而使用每个目录下的.htaccess文件设置具体目录的访问控制更为灵活方便。
  Directory语句就是用来定义目录的访问限制的,这里可以看出它的标准语法,为一个目录定义访问限制。上例的这个设置是针对系统的根目录进行限制的,设置了允许符号连接的选项FollowSymLinks ,以及使用AllowOverride None表示不允许这个目录下的访问控制文件来改变这里进行的配置,这也意味着不用查看这个目录下的相应访问控制文件。
  由于Apache对一个目录的访问控制设置是能够被下一级目录继承的,因此对
根目录的设置将影响到它的下级目录。注意由于AllowOverride None的设置,使
得Apache服务器不需要查看根目录下的访问控制文件,也不需要查看以下各级目
录下的访问控制文件,直至httpd.conf(或access.conf )中为某个目录指定了
允许Alloworride,即允许查看访问控制文件。由于Apache对目录访问控制是采用的继承方式,如果从根目录就允许查看访问控制文件,那么 Apache就必须一级一级的查看访问控制文件,对系统性能会造成影响。而缺省关闭了根目录的这个特性,就使得Apache从httpd.conf中具体 指定的目录向下搜寻,减少了搜寻的级数,增加了系统性能。因此对于系统根目录设置AllowOverride None不但对于系统安全有帮助,也有益于系统性能。



Options FollowSymLinks :
  Options选项指定该目录的特性,这里FollowSymLinks允许通过符号连接访问到此目录下的文件。此外还有ExecCGI可以支持目录下执行cgi程序,Indexes允许浏览器生成此目录下文件的索引列表。

AllowOverride None :
  忽略这个目录下的访问控制文件,如果用All则相反。

Order deny,allow:
  定义处理deny和allow的顺序,deny allow是控制访问的。
  
Deny from all:
  表示拒绝所有客户机访问此目录。


DirectoryIndex index.html:
  很熟悉的东西了。。

ServerSignature Off:
  是否在错误报告中显示服务器信息。


ScriptAlias /cgi-bin/ "/www/cgibin/" 
  这里定义的路径将直接访问,而不遵从DocumentRoot。

AddType application/x-httpd-php .phtml

  指定后缀名的文件被定义为指定的MIME类型。

2008-08-23

学校的锐捷认证在Linux下可行性的进一步测试

  上次研究ubuntu 8.04 的64位下运行锐捷的方法就是为了在学校的宿舍实现linux下的锐捷认证。
  上次虽然完成了程序的运行,但是最终还是没有能够成功的认证,究其原因,因为我们学校的锐捷认证是通过绑定mac地址+dhcp实现的,而锐捷那个可悲的客户端dhcp分配本身就似乎有问题,去官方论坛问了好久也没人回帖。无奈之下又试了好几个网上能找到的开源版,不过最终都没用,最终,采取了强制的静态ip的方法。因为这种分配机制ip不是一直都是随机分配的,有一个租用期限,这个期限之内理论上强制用同一个ip是没问题的。根据网上搜集到的资料确实有人用这种方法成功通过认证。可惜的是用这种方法仍然无法认证。回复的错误信息是“不允许的客户端”。
  之后因为舍友奇怪的错误,我弄了个网上的锐捷客户端3.22-1113,居然也同样不能认证,提示的也是同一个错误"不允许的客户端",要知道我们学校使用的客户端版本号就是3.22-1113(当然程序显然是我们学校专用的),会出这种错,推测可能是学校专用版发送的数据包里有特别的识别信息。所以其他的客户端显然是不行用的。而我也很久没有抓过包了,各种知识也生疏了,要从这方面入手恐怕很困难,于是只能想想别的方法。

  不久,逆转的机会出现了。我在考虑一种假设:linux主机,通过kvm运行windows,在windows中认证,然后linux主机通过这台认证过了的windows虚拟机上网。
  基本原理虽然简单,但是其中可能遇到的问题相当的多,为此,我们需要做黑箱测试(因为我在计算机方面比较喜欢动手而不是纯粹逻辑思考)。为了便于调试,我选择先在windows环境下。


平台:
主机:windows xp sp2
虚拟化软件:VMware 6.5
客户机:windows server 2003 standard
锐捷认证成功后,我的客户机的网络设置是:ip:10.5.27.108 ,mask 255.255.254.0 Gateway:10.5.26.1,DNS:210.XX.XX.XX


  我们第一个要测试的项目是,在虚拟化的环境下是否能在虚拟机中进行锐捷认证。所以我选择了桥接网络模式,结果证实是可以的,我现在的这篇博文就是在虚拟机下远程登录我的另外一台机器写的。因此也证实连接是稳定可靠的。
  确认能够认证了以后,我就开始考虑它的网络模型了,因为我知道在存在多块网卡,或者开启代理服务器的情况下,锐捷认证是会code 4断开的。所以最理想的情况就是在这种桥接模式下。客户机开启路由服务,主机通过客户机连接。
  我查阅了很多资料。开启了windows 2003的路由与远程访问中的路由服务,也确实使用了lan路由功能,查阅了ip路由表,确认了设置是正常的。但是,无论如何,主机都无法连接至客户机之外的任何主机。甚至连真正的网关都ping不通。去年学的ccna的详细知识中关键的部分忘了不少。暂时是没办法搞定这种情况。于是只能先停手,等待下次ccna学好再风云再起。。。
  不过话说回来,这个时候我也在怀疑是否是虚拟机提供的虚拟网络模式不能允许这种连接方法。因此,为了证明虚拟机可以允许我的这种连接的想法,我打算采取不稳定,但是更加容易的一种方法。
  
  传统的虚拟机应用都是主机能够上网,为了让虚拟机上网一般VMware提供的两种方法。一个桥接,一个nat。但是这次因为我们的需求,所以要让它反过来。不过由于VMware设置nat的原理,我们不能用这个,但是,我们可以通过其他的方式实现。
  基本思路是虚拟机再增加一个虚拟网卡,这个网卡作为内部网络的网关。而虚拟机原来的网卡作为连接的真正网卡。
  首先,还是使用桥接。在客户机进行锐捷认证。之后使用Sygate office 4.5来配置代理服务器。不过果然麻烦的是一般的方法还是有问题,查阅了不少资料以后,终于成功了,我使用的方法如下:
  • 先建立一个网卡Microsoft Loopback Adapter,在添加硬件那里就可以添加了。
  • 之后为这个网卡配置一个ip,只需要配置ip地址和子网掩码。我这里的设置是192.168.0.11和255.255.255.0
  • 然后在sygate中配置,选择use Single NIC mode,Gateway IP for internal设置成前前面建立的虚拟网卡的ip地址。Local Area Network Connections 设置成客户机的网卡。
  • 主机的设置把主机的ip指定成和客户机中的虚拟网卡同一个网段,我的设置是192.168.0.111,子网掩码,255.255.255.0,网关和DNS都是那个虚拟网卡的地址也就是我这里的192.168.0.11.
  • 之后,只需要在虚拟机中开启sygate服务,等锐捷认证成功了以后,sygate中的状态显示已经上线了,确定客户机能够正常连接。这个时候主机终于成功的通过客户机连接到网络了。




注意图中的红圈,我这里只要dns能连通就可以上网了。最右边的红圈里面的东西消失是因为这个时候锐捷已经断线了。这也就是这种方法的大问题,锐捷会自动检测代理,这种情况下是会自动掉线的。所以虽然证明了结论但是还是没有可行性的。

好了,这次基本就这些,剩下的下次有机会再测试的时候有了新进展就会更新的。

/*******************************************
*原创文章,转载请注明出处
*******************************************/

2008-07-17

用Grub Splash图片给Grub增加一张背景图

参考文章:http://ruslug.rutgers.edu/~mcgrof/grub-images/

黑黑的Grub相当难看,像Solaris和Opensolaris那样有一个背景图片就好多了,
虽然貌似有其他的程序也能提供这个功能,不过我个人只要用到grub splash就满足了。。。
先装个包
sudo apt-get install grub-splashimages
去找个你想要的图片,这里有一些技巧,如果你希望能够让之后用来作背景的图片漂亮点的话就别直接用convert那个。。。
直接用GIMP把图片保存成png格式,之后选图像→模式→索引填上14色,一般来说原来的图片如果颜色不是很丰富的话这个时候图片的效果还是可以接受的,之后直接保存成xpm格式的图片。
more image.xpm
如果看到类似:
/* XPM */
static char *10[] = {
/* columns rows colors chars-per-pixel */
"640 480 14 1",
的信息则说明有效。
然后
gzip image.xpm
就会压缩出一个image.xpm.gz 文件。
在menu.lst文件里加一行:
splashimage=(hd0,7)/boot/grub/splash.xpm.gz
假设我已经把文件拷贝到/boot/grub/下了。。
保存重启试试。。。

2008-07-16

wine中文乱码的有效解决方法

即使到了1.01版仍然还是一装好打开就是一大片中文乱码啊。不过这个搜一下还是能找到有效的解决方法的:

1. 初始设置

运行 winecfg,把模拟的 Windows 系统设置为 Windows XP 或者 Windows 2000。

2. 准备字体

为了让 Windows 应用程序看上去更美观,所以需要 Windows 下面的字体。

由于我已经将 simsun.ttc 复制到 /usr/share/fonts/windows/ 目录中了。所以我只需要在 ~/.wine/drive_c/windows/fonts/ 目录中为 simsun.ttc 创建一个符号连接:

cd ~/.wine/drive_c/windows/fonts
ln -s /usr/share/fonts/windows/simsun.ttc simsun.ttc
ln -s /usr/share/fonts/windows/simsun.ttc simfang.ttc

创建一个 simfang.ttc 是许多 Windows 应用默认使用 simfang.ttc 字体。
3. 修改 ~/.wine/system.reg

装好字体后,还要修改一下 Wine 的注册表设置,指定与字体相关的设置:

gedit ~/.wine/system.reg

(一定要使用 gedit 或其他支持 gb2312/utf8 编码的编辑器修改这些文件,否则文件中的中文可能变乱码)

搜索: LogPixels
找到的行应该是:[System\\CurrentControlSet\\Hardware Profiles\\Current\\Software\\Fonts]
将其中的:
"LogPixels"=dword:00000060

改为:
"LogPixels"=dword:00000070

搜索: FontSubstitutes
找到的行应该是:[Software\\Microsoft\\Windows NT\\CurrentVersion\\FontSubstitutes]
将其中的:
"MS Shell Dlg"="Tahoma"
"MS Shell Dlg 2″="Tahoma"

改为:
"MS Shell Dlg"="SimSun"
"MS Shell Dlg 2″="SimSun"

4. 修改 ~/.wine/drive_c/windows/win.ini

gedit ~/.wine/drive_c/windows/win.ini
在文件末尾加入:

[Desktop]
menufontsize=13
messagefontsize=13
statusfontsize=13
IconTitleSize=13


5. 最关键的一步,网上很多文章中没有提到的一步──把下面的代码保存为zh.reg,然后终端执行regedit zh.reg。从Windows目录下的Fonts里的simsun.ttc复制到/home/user/.wine/drive_c/windows/fonts里面。
代码:
REGEDIT4

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes]
"Arial"="simsun"
"Arial CE,238"="simsun"
"Arial CYR,204"="simsun"
"Arial Greek,161"="simsun"
"Arial TUR,162"="simsun"
"Courier New"="simsun"
"Courier New CE,238"="simsun"
"Courier New CYR,204"="simsun"
"Courier New Greek,161"="simsun"
"Courier New TUR,162"="simsun"
"FixedSys"="simsun"
"Helv"="simsun"
"Helvetica"="simsun"
"MS Sans Serif"="simsun"
"MS Shell Dlg"="simsun"
"MS Shell Dlg 2"="simsun"
"System"="simsun"
"Tahoma"="simsun"
"Times"="simsun"
"Times New Roman CE,238"="simsun"
"Times New Roman CYR,204"="simsun"
"Times New Roman Greek,161"="simsun"
"Times New Roman TUR,162"="simsun"
"Tms Rmn"="simsun"

实际上注意看一下,就能发现里面很多地方是自己随便设置的。。。

2008-06-24

Linux下玩游戏

  其实linux下的游戏貌似有很多,而且其中甚至不乏虚幻或雷神之锤这种大作原生支持,不过个人不好fps类游戏,所以我们还是来玩玩经典的游戏吧。。

  既然如此本篇就只介绍模拟器了。。。。

SFC:
snes9X当仁不让是最强之作,而且也是开源的,你可以到www.snes9x.com那里去下载,linux的最新提供到1.43版,我本来希望自己编译的,可惜下了源代码编译的时候会出错误。。。无语,只能直接下官方提供的二进制版本了。
玩的时候最简单的方法直接 ./snes9x rom_direct就可以了。。

MD:
gens也是最强之作,同样也是开源作品,可以到:
http://sourceforge.net/project/showfiles.php?group_id=73619
下载最新版本。

PS:
epsxe当然也是最强之作,可以到http://www.epsxe.com/处下载最新版本,有linux的包。
运行的时候需要gtk1.2所以要安装一下
sudo apt-get install libgtk1.2 libgtk1.2-common
另外,玩的时候需要几个插件,网上搜到可以用的下载地址:
http://www.pbernert.com/gpupetexgl208.tar.gz 这个是Pete's XGL2 Driver 2.8
http://www.pbernert.com/gpupeopssoftx117.tar.gz 这个是P.E.Op.S. softX Driver 1.17
http://www.pbernert.com/spupeopsoss109.tar.gz 这个是P.E.Op.S. OSS Audio Driver 1.9
至于BIOS等直接上网搜吧。。。。

PS2:
PCSX2貌似是目前唯一的,可以到http://www.pcsx2.net/downloads.php去下载源码,自己编译,编译完成后默认会有一些插件的,BIOS自己找。。。

2008-05-03

Linux下的Opera浏览器的一些问题

虽然Firefox支持声浪很大,不过我个人还是非常喜欢使用opera,但是在linxu下安装和使用opera确实比firefox麻烦一些,也很容易遇到各种问题。

首先,以我的Ubuntu8.04为例,默认装好opera是没用的,当然我忘记是自己下包装还是apt-get装的了,在终端下运行出现

ERROR: ld.so: object 'libjvm.so' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object 'libawt.so' from LD_PRELOAD cannot be preloaded: ignored.
/home/username/lib/opera/9.23-20070809.5/opera: error while loading shared
libraries: libstdc++.so.5: cannot open shared object file: No such file
or directory
这两个问题,后者只需安装libstdc++5.3.3就可以解决,前者在opera的设置中的java option中设定java路径就好,我的机器上是用/usr/lib/jvm/java-6-sun/jre/lib/i386
此外,还有一个十分严重十分头痛的问题就是opera的中文字体十分难看,简直惨不忍睹。网上有一种强制定义css的方法,不过这次在linuxsir上发现一个更好的方法:
更改~/.opera/opera6.ini文件,在user prefs中加入:
Enable Core X Fonts=1
Enable Xft Fonts=0

既可。。。
---------------------------------
此外,我的opera不能使用scim输入法,网上有两种解决方法,
一是:
安装scim-qtimm
然后在/usr/bin/opera的第二行加入export QT_IM_MODULE=XIM
这个在我机子上无效。

于是用另外一个:
安装scim-bridge*
然后同样修改
/usr/bin/opera的第二行,加入export QT_IM_MODULE=scim-bridge
我用这个方法成功的解决了问题


--------------------------------

以下是一些介绍:
目前 Opera 提供了针对 Ubuntu 的 .deb 文件。通用的 .deb 文件应该也可以工作。

Opera 提供了两种基本安装类型:使用静态库和共享库。它们的区别是 Opera 是如何链接到 Qt 库的。在共享库版本中,Opera 使用你机器上的 Qt,而静态库的版本则使用 Opera 内建的 Qt。静态库版本下载的体积更大,在菜单和文件选择器使用了点阵字库(没有抗锯齿功能)。动态的编译版本集成到系统中,这样它使用你其它 Qt 应用程序相同的抗锯齿设置。静态的编译版本在浏览器窗口和其它用户界面还是支持抗锯齿功能。静态版本可能更快和更稳定,至少 Opera 的爱好者已经体验了很长时间。你可以都试试,因为在 Ubuntu 中安装和卸载软件相当容易。


请访问Opera 官方下载网站,选择你需要的包并选择一个下载镜像站点。

你也可以访问Opera 预览和 Beta 网站以获得最新的预览版本。

-----------------------------------
opera的插件
要让 Opera 能使用插件,插件必须安装到 Opera 的插件目录中。你可以通过“Tools -> Preferences -> Advanced -> Content -> Plugin Options”添加插件目录。添加目录的描述并按下“Find Plugins”。你可能需要重启 Opera 以启用这些插件。

一些常用的插件的 .so 文件:
件:
Shockwave Flashlibflashplayer.so
Acroreadnppdf.so
GXinegxineplugin.so
请保存你下载的文件到某个你能够找到的地方,例如桌面或者你的主文件夹中。
------------------------------------
Flash的播放问题

Macromedia Flash player 使用 OSS 输出声音,这样当其它应用程序使用声音的时候或者 /dev/dsp 不存在的时候,它就不会发出声音。一个可行的解决方案是通过一个音效守护程序封装启动 Opera,这样发送到 /dev/dsp 的声音将被音效守护程序截获。可以安装 arts 或者 esd-clients:

sudo apt-get install arts

sudo apt-get install esd-clients

通过相应的守护程序启动 Opera:

esddsp opera

artsdsp opera

如果你使用 KDE,arts 是默认的音效守护程序,而 esd 是 GNOME 默认的。两者都能协同工作:

artsdsp esd &

esddsp artswrapper &

/*-----------------------------------------------------*/
*原创文章,转载请保留指向本文的连接
/*-----------------------------------------------------*/