3月 23

Centos 问题

1. 启动ipv6

除了常能搜到的修改network的配置之外,还需要作如下修改:

https://www.mail-archive.com/centos@centos.org/msg20391.html

Try looking inside /etc/modprobe.conf for these lines:
alias net-pf-10 off
alias ipv6 off

将他们删除即可,否则会出现Kernel is not compiled with IPv6 support

10月 29

解决 Ubuntu 11.10 在 RTL8111/8168B 网卡下速度慢的问题

 

装了 Ubuntu 11.10 后,一直发现网速不对劲,别人对服务器上传 10MB/s,我只有几百k,一直以为是FileZilla的问题,换了多个客户端还是如此。

伤心!

今天想起来google了下,终于!找到了问题:

见 http://askubuntu.com/questions/66989/ubuntu-11-10-network-speed

其中有个人说:

Look under connection information for the connection you use to access the net. If the driver is r8169 and you have a Realtek RTL8111 network chip on your motherboard then follow this post to get the correct driver installed. Ubuntu 11.10 uses kernel version 3.x so take the necessary steps noted for this kernel version (I didn't modify the makefile, just copied the files as instructed instead).

To find out what network chip you have try running lspci to list devices on your PCI bus. The culprit was

05:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 06) 

Before doing this my internet connection was inconsistent, slow and would drop a lot of packets (as shown by running ifoncig). Now its running fast with no dropped packets.

Point taken about my post being "forum like" in the comment, I have amended this answer to reflect that.

然后点进去那个 this post,终于找到了解决办法:

http://forums.linuxmint.com/viewtopic.php?f=49&t=80757

具体来说

Here are the instructions to replace the driver in a nutshell

    • – Download the file from the oficial realtek site
    • – Open a terminal
    • – Change directories to where the downloaded file is
    • – Extract it
    • – Change directories to the extracted directory
    • – Execute autorun.sh
    – If you are using kernel 3.x: Copy the r8168.ko file to the right place and load the module

Here are the detailed instructions:
– Download the file from the official site
http://www.realtek.com.tw/Downloads/downloadsView.aspx?Langid=1&PNid=13&PFid=5&Level=5&Conn=4&DownTypeID=3&GetDown=false#2
The rest of the steps depend on the filename and location of the downloaded file. Please adapt as required:
For example, if you download the file to your Downloads folder and the file is called r8168-8.025.00.tar.gz, the steps are the following
 

CODE: SELECT ALL
cd ~/Downloads
tar vjxf r8168-8.025.00.tar.gz
cd r8168-8.025.00
sudo ./autorun.sh

If you are using kernel 2.x then you should be OK.
This script unloads and renames the r8169 driver so it does not cause any more trouble. There is no need to blacklist it but you can blacklist it if you want.

CODE: SELECT ALL
echo "blacklist r8169" >> /etc/modprobe.d/blacklist.conf

If you are using kernel 3.0 you'll notice that the /src/Makefile has a bug that causes it to install the r8168.o file instead of the r8168.ko file
The solution is simple:
After the autorun.sh finishes, just do the following:CODE: SELECT ALL

sudo cp src/r8168.ko   /lib/modules/3.0.0-1-amd64/kernel/drivers/net/
sudo depmod
sudo modprobe r8168

And that's that.

In case you are curious about what the bug is:
Line 36 of the src/Make file is 

CODE: SELECT ALL
KEXT      := $(shell echo $(KVER) | sed -ne 's/^2\.[567]\..*/k/p')o

Which sets the KEXT to "ko" for kernels 2.5, 2.6 and 2.7. It sets KEXT to "o" for anything else. This was OK at the time as kernel 3.0 is quite recent.

The fix is to also include kernel 3.0 in that instruction

CODE: SELECT ALL
KEXT      := $(shell echo $(KVER) | sed -ne 's/^2\.[567]\..*/k/p;s/^3\.0\..*/k/p')o

I hope this helps

10月 26

Ubuntu 安装时(initramfs) Unable to find a medium containing a live file system错误的解决

这个问题搞了我一整天,积累下不少教训,下面记录如下:

在安装ubuntu10.10 LiveCD时,提示(initramfs) Unable to find a medium containing a live file system错误。

然后就觉得是CD的问题?用另外一个电脑虚拟机实验安装,没有问题。

重新刻录LiveCD,还是有这个错误

刻录maverick-dvd-amd64还是有这个问题。

得,那就搜吧,baidu好一阵,搜得结果都不知所云。

———————— 神奇的分割线 ————————

今晚忽然想起来,应该用google搜,我汗,果真是国外论坛专业,一搜就解决了问题。

原来是哥的新电脑主板太先进了,把CDROM插到SATA3接口上了,ubuntu10.10愣是认不出来!

换接到SATA2口,立即解决问题。

看人论坛上说的:

Evidently, in addition to disabling the quick-boot option in the bios, you MUST use the left USB port on the Asus 1018p.

I was trying to install using the right usb ports, which are USB 3.0, however are apparently not bootable.

看到这句,哥就觉得是硬件问题了。

后来竟然直接找到了问题答案:

I was just looking at this thread since I had a similar problem trying to install 10.10 from CD. I finally figured it out. I tried to think about everything I had changed since I had previously installed 10.04. I remembered changed the SATA port that the DVD drive plugged into, based on advice for installing OSX (which I had been trying to do). I moved the connector back and sure enough, no more "..unable to find live file system" problem.

汗!附上地址:

http://ubuntuforums.org/showthread.php?t=1332782

这次的教训:

以后遇到问题再也不baidu了,必须google,google才是专业的!

 

10月 21

Ubuntu 多硬盘 LVM 方式安装

一、首先选择“使用所有硬盘并用LVM安装”那个选项,然后选择第一块硬盘(sda)一直向下自动配置KVM,这个主要目的是让系统自动建立boot扇区并确定大小。

二、第一步弄完后不要把东西写入,在提示是否写入并格式化磁盘的时候选择否,这样就可以手动继续配置其他硬盘了。

三、去LVM管理器,把系统自动创建的 swap 逻辑卷组 和 root / 分区统统删掉

四、把其他硬盘(sdb、sdc……)统统创建分区表,然后格式化成整个的逻辑硬盘,选择使用的时候选用于LVM

五、再去LVM管理器,创建一个卷组main,把所有sda5, sdb5, sdc5……统统加进去,这样整个硬盘组就加完了

六、创建一个swap逻辑卷组,内存两倍大,其他统统分配到 / 逻辑卷组里面去

10月 20

Ubuntu Mysql

 

一、首先要安装mysql server

sudo apt-get install mysql-server 就行

二、然后要安装boost库

http://www.boost.org去下载,上面的getting started说得很清楚

三、然后下载ODCB-connector和mysql-c++-connector,注意,这是两个东西

mysql-c++-connector是库,ODCB-connector要用到它,下载完后直接拷贝进 /usr/local

而ODCB-connector可以安装,用 apt-get install libmysqlcppconn-dev 可以安装

而如果要手动安装 ODCB-connector,要先 apt-get install libmysqlclient-dev

四、编程序的时候要加 -lmysqlcppconn

注意,这个选项在NetBeans中是这样加的:

选择 项目配置->定制->链接器->库,然后选择“添加库”,直接填写 mysqlcppconn,-l 这个参数是自动加的

10月 18

关于编码转换

 

一、安装

去 http://www.gnu.org/software/libiconv/ 上面下载 iconv

然后按照网页上的说明安装就行,注意一定要用那个–prefix=/usr/local的参数,这样才能保证使用刚安装的这个iconv.h,而不是系统自带的

安装完了还要弄个文件链接:ln -sf /usr/local/lib/libiconv.so.2 /usr/lib/libiconv.so.2

否则使用iconv命令时会提示说没有共享链接库 libiconv.so.2

 

二、编程注意

注意编译的时候要加命令 -liconv,如果用IDE要到IDE设置里面加上

汗,今天(2011年10月27日),用Ubuntu11.10 64位编写程序,发现加入-liconv 竟然还是 undefined reference to libiconv_open

我就受不了了,搞了一整天,发现实因为NetBeans把 -liconv 这个参数加到了 g++ 紧随其后,而我自己写g++编译命令时把-liconv写在最后面竟然能够编译通过!

无奈,最后只能在项目配置,链接器里面附加一个库了,在链接器里加上 /usr/local/lib/libiconv.so就行了

另外一种弄法:

 

选择 项目配置->定制->链接器->库,然后选择“添加库”,直接填写 iconv,-l 这个参数是自动加的

 

三、Linux编码知识

在Linux上wchar_t一般以UCS-4标准

UCS-4-INTERNAL ,UCS-2-INTERNAL  会根据本机的存储方式(大端、小端)进行处理。

还有UCS-2LE和UCS-2BE 分别代表小端和大端模式。

Unicode(UCS) 有两套编码集,UCS-2 和 UCS-4。顾名思义,UCS-2就是用两个字节编码,UCS-4就是用4个字节。

Windows 的内部其实是用的 UCS-2 标准,并用 UTF-16 来实现。而非 Windows 系统大多采用了 UTF-8 实现。

在windows上wchar_t是2个字节表示,而在Linux上wchar_t是4个字节表示的。这样写跨平台的程序时,就会不统一。

UTF编码简介:

UTF-8就是以8位为单元对UCS进行编码。从UCS-2到UTF-8的编码方式如下:

UCS-2编码(16进制) UTF-8 字节流(二进制) 

0000 – 007F 0xxxxxxx 

0080 – 07FF 110xxxxx 10xxxxxx 

0800 – FFFF 1110xxxx 10xxxxxx 10xxxxxx 

例如“汉”字的Unicode编码是6C49。6C49在0800-FFFF之间,所以肯定要用3字节模板了:1110xxxx 10xxxxxx 10xxxxxx。将6C49写成二进制是:0110 110001 001001, 用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。

UTF-16以16位为单元对UCS进行编码。对于小于0x10000的UCS码,UTF-16编码就等于UCS码对应的16位无符号整数。对于不小于0x10000的UCS码,定义了一个算法。不过由于实际使用的UCS2,或者UCS4的BMP必然小于0x10000,所以就目前而言,可以认为UTF-16和UCS-2基本相同。但UCS-2只是一个编码方案,UTF-16却要用于实际的传输,所以就不得不考虑字节序的问题。

总结一下:

Windows里的wchar_t,也就是所谓的unicode的叫法,其实是UCS-2,也就是UTF-16,这种编码“A”的话是两字节, 00 38

而ASCII  GB2312  GBK  GB18030是一样东西,里面的“A”就只有一个字节 38,而中文有两个字节,高字节的最高位是1,低字节最高位有可能不是1

UTF-8就是3字节

而UCS-4是4字节,是linux里面的wchar_t

5月 17

Ubuntu配置大全

 

1.解决useradd新用户默认使用sh而不是bash的问题

  useradd之后,使用 usermod -s /bin/bash username 就可以把默认控制台修改为 bash

      然后拷贝其他目录里已经有的 .bashrc 和 .profile 到新用户文件夹,这样就可以像系统默认用户一样有颜色啦

5月 13

ubuntu 中文设置

 

【参考】

http://wiki.ubuntu.org.cn/Locale

Locale配置文件在 /etc/default/locale

linux文件系统的一些概念,linux的文件系统的文件名是基于字节流的,也就是说文件名的编码以byte为单位读取的,所以文件名可以是多字节编码方案,比如gb18030, utf8,不能是宽字节编码,比如如windows使用的utf16。所以只要是多字编码方案的文件名,linux都是可以读取的。 

1)为glib的国际化支持产生国标编码支持,ubuntu系统默认状态下是没有GB18030和GBK的本地locale的,所以为了设置locale为zh_CN.GB18030,我们需要先为glib产生GB18030和GBK编码的支持。 
1、首先设置sudo vi /var/lib/locales/supported.d/local 
添加一行 zh_CN.GBK GBK和zh_CN.GB18030 GB18030,把原来的UTF-8那一行仍旧保留在最后!
2、sudo locale-gen, 或者可以直接sudo locale-gen zh_CN.GB18030 和 sudo locale-gen zh_CN.GBK

安装Chinese包

先更新源:在 sudo gedit /etc/apt/soures.list 里面添加如下内容

deb http://ubuntu.cn99.com/ubuntu/ gutsy main restricted universe multiverse 
deb http://ubuntu.cn99.com/ubuntu/ gutsy-security main restricted universe multiverse 
deb http://ubuntu.cn99.com/ubuntu/ gutsy-updates main restricted universe multiverse 
deb http://ubuntu.cn99.com/ubuntu/ gutsy-proposed main restricted universe multiverse 
deb http://ubuntu.cn99.com/ubuntu/ gutsy-backports main restricted universe multiverse 
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy main restricted universe multiverse 
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy-security main restricted universe multiverse 
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy-updates main restricted universe multiverse 
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy-proposed main restricted universe multiverse 
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy-backports main restricted universe multiverse 
deb http://ubuntu.cn99.com/ubuntu-cn/ gutsy main restricted universe multiverse

然后system->system manager->language support,安装chinese语言包,更新即可。原来以为安装的时候选择中文就可以了,谁知道安装好后,还需要继续安装chinese语言包。或者用命令单独下载中文就直接 sudo apt-get install language-pack-zh.

二、到底什么是locale?

locale这个单词中文翻译成地区或者地域,其实这个单词包含的意义要宽泛很多。Locale是根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统所定义的一个软件运行时的语言环境。

这个用户环境可以按照所涉及到的文化传统的各个方面分成几个大类,通常包括用户所使用的语言符号及其分类(LC_CTYPE),数字 (LC_NUMERIC),比较和排序习惯(LC_COLLATE),时间显示格式(LC_TIME),货币单位(LC_MONETARY),信息主要是提示信息,错误信息, 状态信息, 标题, 标签, 按钮和菜单等(LC_MESSAGES),姓名书写方式(LC_NAME),地址书写方式(LC_ADDRESS),电话号码书写方式 (LC_TELEPHONE),度量衡表达方式(LC_MEASUREMENT),默认纸张尺寸大小(LC_PAPER)和locale对自身包含信息的概述(LC_IDENTIFICATION)。

所以说,locale就是某一个地域内的人们的语言习惯和文化传统和生活习惯。一个地区的locale就是根据这几大类的习惯定义的,这些locale定义文件放在/usr/share/i18n/locales目录下面,例如en_US, zh_CN and de_DE@euro都是locale的定义文件,这些文件都是用文本格式书写的,你可以用写字板打开,看看里边的内容,当然出了有限的注释以外,大部分东西可能你都看不懂,因为是用的Unicode的字符索引方式。

对于de_DE@euro的一点说明,@后边是修正项,也就是说你可以看到两个德国的locale:

/usr/share/i18n/locales/de_DE@euro
/usr/share/i18n/locales/de_DE

打开这两个locale定义,你就会知道它们的差别在于de_DE@euro使用的是欧洲的排序、比较和缩进习惯,而de_DE用的是德国的标准习惯。

上面我们说到了zh_CN.GB18030的前半部分,后半部分是什么呢?大部分Linux用户都知道是系统采用的字符集。

七、怎样设定locale呢?

设定locale就是设定12大类的locale分类属性,即 12个LC_*。除了这12个变量可以设定以外,为了简便起见,还有两个变量:LC_ALL和LANG。它们之间有一个优先级的关系:

LC_ALL>LC_*>LANG

可以这么说,LC_ALL是最上级设定或者强制设定,而LANG是默认设定值。

    • 如果你设定了LC_ALL=zh_CN.UTF-8,那么不管LC_*和LANG设定成什么值,它们都会被强制服从LC_ALL的设定,成为 zh_CN.UTF-8。
    • 假如你设定了LANG=zh_CN.UTF-8,而其他的LC_*=en_US.UTF-8,并且没有设定LC_ALL的话,那么系统的locale设定以LC_*=en_US.UTF-8。
    • 假如你设定了LANG=zh_CN.UTF-8,而其他的LC_*,和LC_ALL均未设定的话,系统会将LC_*设定成默认值,也就是LANG的值 zh_CN.UTF-8 。
    • 假如你设定了LANG=zh_CN.UTF-8,而其他的LC_CTYPE=en_US.UTF-8,其他的LC_*,和LC_ALL均未设定的话,那么系统的locale设定将是:LC_CTYPE=en_US.UTF-8,其余的 LC_COLLATE,LC_MESSAGES等等均会采用默认值,也就是LANG的值,也就是LC_COLLATE=LC_MESSAGES=……= LC_PAPER=LANG=zh_CN.UTF-8。

所以,locale是这样设定的:

    • 如果你需要一个纯中文的系统的话,设定LC_ALL= zh_CN.XXXX,或者LANG= zh_CN.XXXX都可以,当然你可以两个都设定,但正如上面所讲,LC_ALL的值将复盖所有其他的locale设定,不要作无用功。
    • 如果你只想要一个可以输入中文的环境,而保持菜单、标题,系统信息等等为英文界面,那么只需要设定LC_CTYPE=zh_CN.XXXX,LANG= en_US.XXXX就可以了。这样LC_CTYPE=zh_CN.XXXX,而LC_COLLATE=LC_MESSAGES=……= LC_PAPER=LANG=en_US.XXXX。
export LC_CTYPE="zh_CN.UTF-8"
使用export命令
    • 假如你高兴的话,可以把12个LC_*一一设定成你需要的值,打造一个古灵精怪的系统:
LC_CTYPE=zh_CN.GBK/GBK(使用中文编码内码GBK字符集);
LC_NUMERIC=en_GB.ISO-8859-1(使用大不列颠的数字系统)
LC_MEASUREMEN=de_DE.ISO-8859-15@euro(德国的度量衡使用ISO-8859-15字符集)
罗马的地址书写方式,美国的纸张设定……。估计没人这么干吧。
注意,修改这些LC_XXX 的位置在 /etc/environment
还有一个地方叫做 /etc/default/locale
但是Ubuntu Server的console就是不支持中文,因此装完机要改回英文
用vim配置语言环境变量
vim /etc/environment
改成:
LANG=”en_US.UTF-8″
LANGUAGE=”en_US:en”
sudo vim /var/lib/locales/supported.d/local
加一行
en_US.UTF-8 UTF-8
保存后,执行命令:
sudo locale-gen
sudo vim /etc/default/locale
修改为:
LANG=”en_US.UTF-8″
LANGUAGE=”en_US:en”
重启Ubuntu Server
sudo reboot
至此 方格乱码解决
4月 22

Ubuntu 下 Mysql 安装与连接

1.安装

sudo apt-get install mysql-server

注意要求添加root密码时最好别填

sudo apt-get install mysql-client

sudo apt-get install libmysql++-dev

sudo apt-get install libmysql++3

2.NetBeans 配置

MySQL 5.1 Manual 里面有写,写得很清楚,如果是静态链接,只要把 libmysqlcppconn-static.a 和 libmysqlclient.a 两个文件添加到项目附加库就行。

其实就是加了两个参数 -lmysqlclient 和 -lmysqlcppconn-static