Browsed by
Category: 计算机技术

MariaDB初步

MariaDB初步

基本上与mysql数据库是完全兼容的,各项命令以及库的名字都与mysql相同。当然目前还没有深度应用,不知道在库、api等方面是否完全兼容。

启动数据库:

service mysql start

修改root用户密码:

mysqladmin -u root password "xxxx"

将数据库加入自动启动列表:

chkconfig --add mysql            <-- Redhat/CentOS/openSUSe
或者 update-rc.d mysql defaults   <-- Debian/Ubuntu

访问数据库:

mysql -u root -p
Ubuntu环境搭建email系统

Ubuntu环境搭建email系统

网上的一些文档大部分是基于其他linux的版本,因此对比之下配置比较复杂,让人望而却步。而Ubuntu则已经将一些基本的配置都打包好了,只需要稍做修改即可。

以下配置基于Ubuntu10.04,全部从官方软件中心下载安装。采用Postfix+Dovecot搭建邮件系统。请先切换到root用户安装和配置。

step1: 安装Postfix

apt-get install postfix

安装时,会提示选择类型。一般选择”internet site”,输入网站域名即可。安装后,先不要着急配置postfix,我们在后续dovecot安装成功后,大部分配置会自动完成。

step2: 安装dovecot

一般网文介绍是直接安装dovecot,实际上Ubuntu提供了与postfix配合的dovecot包,因此请按以下方式安装:

apt-get install dovecot-common dovecot-postfix

安装时,系统会自动根据dovecot的要求,对postfix进行配置。

step3:配置postfix

配置文件为:/etc/postfix/main.cf。如果不对email进行限制的话,其实已经不用再配置了。下面我们修改该配置文件,增加一些额外的控制,例如用户邮件大小等:

mailbox_size_limit = 20000000 <--限定邮件账户不超过20M字节
message_size_limit = 200000  <-- 每封邮件不超过20K字节
myhostname = mail.xxxx.com
mydomain = xxxx.com

step4: 配置dovecot

一般也不需要配置,但是在使用gmail托管时,ssl/tls似乎没起作用,因此稍作修改采用普通访问方式即可。注意,此时dovecot的配置文件是/etc/dovecot/conf.d/01-dovecot-postfix.conf

listen = *  
disable_plaintext_auth = no

缺省情况下,dovecot没有被配置为自启动,因此我们需要手工添加:

update-rc.d dovecot start 99 0 1 2 3 4 5 6 .

其他

email用户账户就是当前Ubuntu的用户。建议对email用户单独处理,并设置在mail组内,设置单独的用户目录等,如下所示,创建一个名为support的用户:

mkdir /home/mail-users
useradd -m -d /home/mail-users/support -g mail support 
passwd support

Debian系統的差異:

如果需要支持pop3的話,需要安裝以下軟件:

apt-get install dovecot-pop3d
Debian6中文乱码问题

Debian6中文乱码问题

最近安装最新的Debian6.06 Gnome版本,遇到一个奇怪的问题:选择中文安装,完成安装后重新进入系统,界面全是小方块,中文显示乱码。

经研究后发现,居然是没有安装中文字体,这是个多么奇怪的bug,选择了中文界面安装居然不安装中文字体!

解决方法也简单,安装中文字体即可:

apt-get install ttf-wqy-zenhei ttf-wqy-microhei

 

linode-VPS内核升级记录

linode-VPS内核升级记录

由于linode默认的内核(ubuntu10.04)缺省将SIP等协议过滤模块编入了内核,而且linode默认没有采用模块化的方式,因此被迫重新编译内核。linode提供了一篇文档指导如何使用自编译的内核,但是在细节上实际还是有不同,导致按照文档的步骤编译后,系统没办法启动。于此记录一下,以备后续需要。

采用linode的文档编译和配置,往往会出现以下一些错误:

i8042 no controller found
udevd[1077]: failed to create queue file: no such file or directory
udevadm[1816]: error sending message: connection refused.

第一个错误涉及menu.lst,在这个文件中,不能像文档那样,启动时携带’quiet’参数。

第二个错误与Ubuntu版本可能有关,需要人工指定/dev,需要修改/etc/fstab的配置(后续说明细节)。

基本步骤如下:

下载最新的kernel代码并解压:

wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.7.6.tar.bz2

将系统原有的config导入到kernel源代码的目录下,同时根据自己的需要修改.config文档:

zcat /proc/config.gz > .config

顺序执行以下命令:

make oldconfig
make -j3 bzImage
make -j3 modules
make
make install
make modules_install

如果成功,应该在/boot目录下看到新生成的内核文件,例如vmlinuz-3.7.6等。

创建/boot/grub/menu.lst文件,添加以下内容:

default 0
timeout 5
title           Custom Compiled, kernel 3.7.6
root            (hd0)
kernel          /boot/vmlinuz-3.7.6 root=/dev/xvda ro

注意,Ubuntu版本可能还需要安装grub软件:

apt-get install grub

修改/etc/fstab目录,添加以下内容:

dev             /dev            devtmpfs        0       0

完成上述步骤后,修改linode中该node的profile,将kernel修改为pv-grub-x86_32,然后重启启动该node即可完成升级。SSH登录系统,使用uname -a命令即可查看新内核版本。

2013-07-19 update:

在编译3.9.x内核时,出现以下错误信息:

/bin/sh: bc not found

此时,安装bc即可:

apt-get install bc

 

网络慢时初步诊断方法

网络慢时初步诊断方法

在linux环境下,可以使用mtr跟踪各环节的丢包率。如果是使用Ubuntu系统,缺省应该已经安装了mtr,如果没有的话,可以使用下述命令安装:

sudo apt-get install mtr-tiny

使用mtr进行丢包率检查的命令也比较简单:

mtr --report 您的站点

例如您的网站是demo.com, 则命令为 mtr –report demo.com即可.

下面是最近一个测试报告,不解释。

HOST: ubuntuLTS Loss% Snt Last Avg Best Wrst StDev
 1. 121.15.56.1 0.0% 10 21.7 24.7 17.6 35.7 5.5
 2. 121.15.56.1 0.0% 10 19.6 23.0 19.5 39.2 6.1
 3. 113.106.45.61 10.0% 10 20.9 21.3 19.7 27.8 2.5
 4. 219.133.30.234 0.0% 10 21.0 20.7 18.7 22.7 1.3
 5. 121.34.242.226 10.0% 10 21.5 23.6 21.5 25.3 1.4
 6. 202.97.35.246 0.0% 10 24.0 24.2 21.4 28.6 2.0
 7. 202.97.60.90 10.0% 10 26.4 23.9 21.6 27.3 1.9
 8. 202.97.52.162 0.0% 10 189.0 191.5 187.6 200.7 3.6
Phonon程序无法播放语音文件的问题

Phonon程序无法播放语音文件的问题

问题基本情况如下:我们开发并发布了一个软终端产品,当然其中采用QT以及Phonon模块。在我们的开发环境中,一切都很美好,能正常地播放音乐。可是安装到客户的计算机上,出现问题了,无法播放提示语音(wav文件录制)。

这个问题的实质是我们没有将Phonon的插件一同打包进安装文件。Phonon实质上只是个前端封装模块,具体工作有赖于后台的解码器。在windows系统中,Phonon缺省采用DirectX作为后台解码器部分,具体实现为一个plugin。如果不安装这个plugin,则phonon无法正常播放语音文件。

假设QT安装在d:\qt\4.8.4目录下,则上述plugin可以在以下目录中找到:D:\Qt\4.8.4\plugins\phonon_backend\phonon_ds94.dll。

注意,不是简单地将这个文件拷贝到程序目录下即可,而是要拷贝到程序目录的phonon_backend子目录下。例如,我们的程序安装在d:\minisipphone目录,则上述dll应当拷贝为:d:\minisipphone\phonon_backend\phonon_ds94.dll。

另外需要注意的是,不同版本的QT要采用各自版本的phonon_ds94.dll,例如qt 4.6.2的程序就不能采用qt 4.8.4的phonon_ds94.dll,否则还是会出现放音错误。

安装Xubuntu与删除Kubuntu

安装Xubuntu与删除Kubuntu

前段时间在移动硬盘上安装了xubuntu系统,一试之下大吃一惊,感觉非常流畅!相比之下,KDE环境确实在速度上差别很大。于是动心想将一台老笔记本上的kubuntu12.04给换掉,安装xubuntu12.04试试。

在网上搜索了一下,安装xubuntu很简单,以下命令即可:

sudo apt-get install xubuntu-desktop

安装过程中,注意选择lightDM即可,因为原有的kdm在后面的步骤中将被删除掉。

删除kubuntu则与网上的说法有些差异,可能网上的资料是基于以前的kubuntu/kde版本,如果是新的kubuntu版本,例如12.04,则建议采用以下步骤或者命令删除:

sudo apt-get autoremove kubuntu-desktop 
sudo apt-get remove kdm
sudo apt-get autoremove kdelibs-bin
mkfifo与select

mkfifo与select

基本上,创建有名管道和平常的文件操作没有太大的差别。在用select对有名管道句柄进行操作时,有些比较奇怪的地方。

例如,我们有两个程序(进程),一个向有名管道写,另一个负责从有名管道读。逻辑很简单,因此我们很自然地在读进程程序中设置read_only,然后用select等待数据。

奇怪的事情发生了,select总是能返回成功,可是read的数据为空。这个问题让我们百思不得其解,结果google后发现,对于只读的有名管道,也需要设置为“读写”模式,否则它对select总是会立刻返回成功。

经过多次测试,对linux下的有名管道,如果采用select判断是否可读,需要设置以下参数:

(1)非阻塞

(2)可读可写

例如以下演示代码:

fd = open(COMMAND_PIPE, O_NONBLOCK | O_RDWR);
... ...
int ret = select(fd+1, &read_set, NULL, NULL, &timeVal);
Kubuntu12.04中apache2配置上的一些变化

Kubuntu12.04中apache2配置上的一些变化

在以前的版本中,如果需要配置HTTPS访问方式, 只需要修改/etc/apache2/sites-available/default-ssl文件即可。

可是在新版本中,如果仅仅是修改这个问题,还是无法以https方式访问apache2. 在apache的error.log中,会出现以下错误提示:

Invalid method in request \x16\x03\x01

需要多做几个配置来解决:

在/etc/apache2/mods-enabled目录下,添加以下链接:

sudo ln -sf /etc/apache2/mods-available/ssl.conf /etc/apache2/mods-enabled/ssl.conf
sudo ln -sf /etc/apache2/mods-available/ssl.load /etc/apache2/mods-enabled/ssl.load

在/etc/apache2/sites-enabled目录下,添加以下链接:

sudo ln -sf /etc/apache2/sites-available/default-ssl /etc/apache2/sites-enabled/000-default-ssl

然后重启apache2即可:

sudo service apache2 restart

对比检查Kubuntu10.04以及11.10中的配置,以前的版本中都已经自行创建了上述这些链接,不知道为什么在新版本中没有这么做。

linux系统对比商业操作系统,一个非常大的不足就是兼容性考虑不足,实在是太随意了。兼容性不仅仅是二进制运行程序的兼容性,也包括库,配置,头文件等等。像上面这样的配置上的变化,说大也不大,可是如果是生产环境上的系统进行升级,就不知道有多少这样的“小改动”了。

QT程序自动重启

QT程序自动重启

一行代码就可以了:

// restart application
QProcess::startDetached(qApp->applicationFilePath(), QStringList());