现在的linux内核编译太简单了:linux kernel2.6.36.2编译手记

先show一下新内核:

[feng@fsc ~]$ uname -a
Linux fsc 2.6.36.2fsc #2 SMP Mon Dec 13 21:02:02 CST 2010 i686 i686 i386 GNU/Linux

硬件环境:asus A8jr 笔记本 (07年的机器,比较老了)

cpu core1 2250GHz
RAM 3G ddr2 667
VGA ATI x2300
......

背景:使用fedora13(fedora14已经正式版发布,但没有升级),但内核还是2.6.31,从fedora12里的rpm包安装的;因为2.6.33以后的内核与电脑不兼容,启动后就花屏,跟电视机屏幕的“雪花”一样,所以从fedora12里释放出内核并安装。fedora13在线yum升级后,还切换回2.6.31内核。

kernel 2.6.36.2正式发布了,比较无聊,于是wget下载内核源码,学习编译内核;以前编译过,但并不很成功。学习鸟哥linux私房菜里的内核编译,写得很详细,基本上是照着里面一步一步来的。这次准备摸索一下。

首先当然是要make menuconfig,选择模块。然后make 没有带参数,花费时间很长,睡觉。

今天早上醒来,make install,然而出错了,消息大致是有什么依赖错误,可能是哪里有不对吧。于是关机(休眠),上班。

晚上回来,启动电脑,发现grub里启动项多了一个,就是新编译的2.6.36.2,居然可以启动系统,只是驱动不太对,没有网络,无线有线都没有;lsmod查看加载的模块,结果一个都没有,大概是驱动没有加载,或者是没有编译出来。为了保险起见,重新配置,添加了很多驱动。回忆之前看鸟哥的文章,make all,这样最简单,看make help里指明,它将编译

* vmlinux      - Build the bare kernel
* modules      - Build all modules
* bzImage      - Compressed kernel image (arch/x86/boot/bzImage)

三项,花费时间还是比较长;然后make install,重启,还是没有加载上驱动,看说明,才知道,make install并不安装内核模拟,于是make modules_install;重启。本来做好了面对“花屏”,然而没有。果然,网络正常,无线自动连上,可以正常上网。

之前看鸟哥文章里讲的,要手工复制内核到/boot,还要手工编译initrd文件,再手工修改grub.conf,很是复杂。这次编译内核,完全是出乎意料,所有这些都没做,只是简单的执行了几个命令,所有这些都自动完成了。这大概也就是“易用”吧。不过还是有点问题,linux启动中,vmware的几个服务,还是启动失败,原因没有查,可能按现在的水平还很难找到原因。

一点经验,linux其实很容易,甚至比windows更容易,当然不是在像傻瓜操作的那些方面。

最后,希望看过这篇文章或没有看到这篇文章的朋友们,都能真正爱上linux,能随心所欲使用它提高工作生活学习效率,have fun!

PHP+MSSQL TEXT字段被截断的解决方案

在连接mssql 数据库前,先执行如下php代码,对mssql库的textlimit进行运行时改变设置。

ini_set('mssql.textlimit',4294967296);
ini_set('mssql.textsize',4294967296);

4294967296=65536^2  ,对于大多数情况,这个长度已经足够用了;如果text字段最大长度比4294967296还大,那就自己把这个值改得更大一点.

可以通过php函数 phpinfo() 查看是否修改成功。

修改前phpinfo()结果中mssql节如下

------------xx----------xx------------xx-------------xx------------xx----------xx--------

以下内容转自 http://blog.csdn.net/ice1976/archive/2008/10/30/3185987.aspx ,供参考

/*
* 版权归PHPSalon.com所有
*
* Author: Wenlong Wu
*/

在CSDN的PHP版里老是看到有人问TEXT字段被截断的问题,偶也回答了无数次,今天索性就总结一下吧:

一、针对MS SQL SERVER数据库

有两种解决方案,如下:

* 修改php.ini来实现:

打开php.ini,可看到mssql.textsize,mssql.textlimit两个选项:

; Valid range 0 - 2147483647. Default = 4096.

;mssql.textlimit = 4096

; Valid range 0 - 2147483647. Default = 4096.
;mssql.textsize = 4096

可以看到默认配置为4096字节,也就是经常碰到的被截断为4K,将之改为合适的大小,去掉前面的分号,然后保存并重起WEB服务器即可。

从上面两个选项可看到范围为:0 - 2147483647字节,其实-1也可以的,查看一下PHP源代码即可发现-1表示无限制 :)

if (MS_SQL_G(textlimit) != -1) {
sprintf(buffer, "%li", MS_SQL_G(textlimit));
if (DBSETOPT(mssql.link, DBTEXTLIMIT, buffer)==FAIL) {
efree(hashed_details);
dbfreelogin(mssql.login);
RETURN_FALSE;
}
}
if (MS_SQL_G(textsize) != -1) {
sprintf(buffer, "SET TEXTSIZE %li", MS_SQL_G(textsize));
dbcmd(mssql.link, buffer);
dbsqlexec(mssql.link);
dbresults(mssql.link);
}

* 在PHP中查询之前执行SET TEXTSIZE 合适的大小:

只需在SELECT之前执行

mssql_query("SET TEXTSIZE 65536");

从上面PHP源代码中可看到其实也是执行SET TEXTSIZE的 :)

二、针对Sybase数据库

由于该扩展在php.ini没有像SQL SERVER那样的选项可配置,所以只有采用上面的第二种方法,即:

在SELECT之前执行

sybase_query("SET TEXTSIZE 65536");

9月24日补充:
有不少朋友可能也碰到过使用varchar类型的字段时,只返回256个字符的问题。
其实这也不是PHP的BUG,而是微软提供的客户端即library限制了而已。
弥补方法是转为TEXT字段,或者采用SQL转,如下:
SELECT CAST(myfield AS TEXT) AS myfield FROM table

 

WordPress 3.0.3 发布,大概是最密集的一次更新了

刚才登录wordpress后台,又一个更新,原来是WordPress 3.0.3 发布了,不久前WordPress 3.0.2 才发布,好像刚一周时间就升级了。

这么密集的软件更新,一般说都是修正安全漏洞的,看升级日志,果然是,e文不好,看得不甚明白,于是google一个,至少已经有好中文几个网站发布了这则消息,开源中国社区上的消息:

WordPress 3.0.3 是一个安全问题更新版本,修复了远程发布接口的bug,该接口可能在某些情况下允许发布者随意的发布、修改和删除文章。这个问题仅仅对于启用远程发布接口时才会存在。

可从这里下载该版本或者通过面板的更新功能进行自动升级。

from  http://www.oschina.net/news/13656/wordpress-3-0-3

wp启用了远程更新,当然是一定要升级的,尽管还没有中文版出来,但这样的安全更新,语言包应该没有多少改变的。

windows里也有类似linux里grep的命令行工具:FINDSTR,只是实在太小儿科

突然发现,windows里也有类似linux里grep的命令行工具:FINDSTR,只是实在比较小儿科

今天看到这篇文章,才发现的

http://myeblog.3322.org/1086.html

看看微软给的官方文档:

在文件中寻找字符串。

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/F:file]
[/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]
strings [[drive:][path]filename[ ...]]

/B         在一行的开始配对模式。
/E         在一行的结尾配对模式。
/L         按字使用搜索字符串。
/R         将搜索字符串作为一般表达式使用。
/S         在当前目录和所有子目录中搜索匹配文件。
/I         指定搜索不分大小写。
/X         打印完全匹配的行。
/V         只打印不包含匹配的行。
/N         在匹配的每行前打印行数。
/M         如果文件含有匹配项,只打印其文件名。
/O         在每个匹配行前打印字符偏移量。
/P         忽略有不可打印字符的文件。
/OFF[LINE] 不跳过带有脱机属性集的文件。
/A:attr    指定有十六进位数字的颜色属性。请见 "color /?"
/F:file    从指定文件读文件列表 (/ 代表控制台)。
/C:string  使用指定字符串作为文字搜索字符串。
/G:file    从指定的文件获得搜索字符串。 (/ 代表控制台)。
/D:dir     查找以分号为分隔符的目录列表
strings    要查找的文字。
[drive:][path]filename
指定要查找的文件。

除非参数有 /C 前缀,请使用空格隔开搜索字符串。
例如: 'FINDSTR "hello there" x.y' 在文件 x.y 中寻找 "hello" 或
"there"。'FINDSTR /C:"hello there" x.y' 文件 x.y  寻找
"hello there"。

一般表达式的快速参考:
.        通配符: 任何字符
*        重复: 以前字符或类别出现零或零以上次数
^        行位置: 行的开始
$        行位置: 行的终点
[class]  字符类别: 任何在字符集中的字符
[^class] 补字符类别: 任何不在字符集中的字符
[x-y]    范围: 在指定范围内的任何字符
\x       Escape: 元字符 x 的文字用法
\<xyz    字位置: 字的开始
xyz\>    字位置: 字的结束

有关 FINDSTR 常见表达法的详细情况,请见联机命令参考。

功能比grep差多了,然而简单的截取功能也就差不多了,毕竟是微软的windows,不要指望它有多强的功能(命令行功能?)

在Linux下实现对Microsoft Access Database(.mdb)查询访问

在Linux下实现对Microsoft Access Database(.mdb)查询访问

You will need the following:
Linux ( I’m running RedHat 9.0)
PHP
Apache
UnixODBC
MDBTools

INSTRUCTIONS
1) Download the UnixODBC RPM, found here. I installed unixODBC version 2.2.5.1.
rpm -ivh unixODBC-2-2.5-1.i386.rpm

2) Download the MDBTools rpm, found here. I installed mdbtools version 0.5.1. Read limitations!
rpm -ivh mdvtools-0.5-1.i386.rpm

3) Download the MDBTools ODBC driver rpm. Again I installed version 0.5-1.i386.rpm. Read limitations!
rpm -ivh mdbtools-odbc-0.5-1.i386.rpm

4) Add the mdbtools driver to your unixODBC config.
Create a new text file. NON-LINUX user: Beware do not do this on windows as you might get werid new lines, use vi.

[MDBToolsODBC]
Description = MDB Tools ODBC drivers
Driver = /usr/lib/libmdbodbc.so.0
Setup =
FileUsage = 1
CPTimeout =
CPReuse =

NOTE: The driver may be in /usr/local/lib/libmdbodbc.so.0. This happens if you build from source and use the make install command. The RPM puts it in /usr/lib.
Now install the driver using the file you created. This is called a template file.
odbcinst -i -d -f template.file

5) Define the datasource name. This is done in the /etc/odbc.ini file. So pull up this file in vi or another text editor and add the following lines.

[Dogs]
Description = Microsoft Access Database of Dogs
Driver = MDBToolsODBC
Database = /var/data/my_dog_db.mdb
Servername = localhost
UserName =
Password =
port = 5432

That’s it you should now have an odbc connection available. I will demonstrate using php, this assumes that your php is compiled with UnixODBC support, the version that ships with Redhat 9 does if yours does not then you can learn how here.

So I will write a quick php script to query my dogs database and print out the names and weights of my dogs.

$myDB = odbc_connect(”Dogs”,”",”");
$query = “select name, weight from dog_list”;
$result = odbc_exec($myDB, $query);
while (odbc_fetch_row($result)) {
print “Name = ” . odbc_result($result,”name”);
print “
Weight = ” . odbc_result($result,”weight”);
}

If you get a php error that says odbc_connect is not a function then see if you have php-odbc installed. Do rpm -qa php-odbc. If you see php-odbc returned then you have it if not install it., the rpm is available on the redhat discs.

Limitations:
- As of the time of writing this entry MDBTools did not support write access to the mdb files. This was fine for my purposes as I was reading data in and sticking it into a mysql database.
- There is a bug in MDBTools v0.5 which does not allow you to query tables or columns with an underscore. This was a bug I hit early on, but it has been fixed in new version 0.6 but that has not been released as of the time of writing this article. So I recompiled the 0.5 source code with the fix from the 0.6 CVS repository. I have bundled it into a 0.5 release and have the two rpms mentioned above here:
mdbtools-0.5-1.i386.rpm
mdbtools-odbc-0.5-1.i386.rpm

I would check the official download site before using my hacked version as I’m sure this bug will be fixed in 0.6 (plus rumor has write access will be present as well).

from http://www.517sou.net/blogview.asp?logID=1069&cateID=12

php中ms sql server日期时间类型转换成 unix时间戳

写一个转换程序,旨在把一套asp+mssql博客系统数据迁移到php+mysql系统下,需要转换日期类型(mssql数据库里的日期时间类型datetime值)为unix时间戳,但发现mssql里读取到的时间通过

$dateline=(int)strtotime($row['addtime']);

转换,得到的值是0,很奇怪;检查后发现,$row['addtime']的时间格式不太正常,形式如下:
06 28 2007 2:21PM
11 3 2005 12:52AM
03 18 2010 1:08AM
11 4 2005 12:56PM
01 23 2010 11:02AM

或许在php.ini里有mssql库的设置参数,可以设置日期时间类型的格式,但是绝大多数php环境配置都是默认状态的配置,于是需要通过程序兼容这个事实。

从mssql查询的sql语句做一下修改即可以:
$sql="SELECT [logid]
,convert(varchar(500),[topic]) as topic
,convert(text,[logtext]) as logtext
,[userid]
,[authorid]
,convert(varchar(100),[author]) as author
,convert(varchar(30),[addtime],120) as addtime
,[truetime]....."
---mssql数据库里的日期时间类型datetime值,使用php的mssql库读取得到的
----------更多的转换格式参看这里-------------------------------
使用 CONVERT:

CONVERT (data_type[(length)], expression [, style])
select CONVERT(varchar, getdate(), 120 )
2004-09-12 11:06:08

select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),\'-\',\'\'),\' \',\'\'),\':\',\'\')
20040912110608

select CONVERT(varchar(12) , getdate(), 111 )
2004/09/12

select CONVERT(varchar(12) , getdate(), 112 )
20040912

select CONVERT(varchar(12) , getdate(), 102 )
2004.09.12

select CONVERT(varchar(12) , getdate(), 101 )
09/12/2004

select CONVERT(varchar(12) , getdate(), 103 )
12/09/2004

select CONVERT(varchar(12) , getdate(), 104 )
12.09.2004

select CONVERT(varchar(12) , getdate(), 105 )
12-09-2004

select CONVERT(varchar(12) , getdate(), 106 )
12 09 2004

select CONVERT(varchar(12) , getdate(), 107 )
09 12, 2004

select CONVERT(varchar(12) , getdate(), 108 )
11:06:08

select CONVERT(varchar(12) , getdate(), 109 )
09 12 2004 1

select CONVERT(varchar(12) , getdate(), 110 )
09-12-2004

select CONVERT(varchar(12) , getdate(), 113 )
12 09 2004 1

select CONVERT(varchar(12) , getdate(), 114 )
11:06:08.177