关于作者

用户名:6692975
笔名:6692975
地区:
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



访问统计:
文章个数:10
评论个数:1
留言条数:5




Powered by BlogDriver 2.1

6692975的博客

 

文章

更改分区后,linux无法启动,恢复小记
今天整理硬盘,把整个D盘(hda5)腾了出来,终于有空间试验raid+lvm+reiserfs v4.0啦
立刻用PQ删除了分区,成了未分配空间。正如预料的,由于分区改动了,linux进不去了。
于是开始了一番恢复。。。。。。


Ok,Let`s go ! 先来看看分区情况吧! 

未删除分区情况:
/dev/md0  <---------------> RAID设备 (lfs-6.0优化根分区)
/dev/hda1 <---------------> C盘 (主分区)
/dev/hda2 <---------------> 扩展分区
/dev/hda3 <---------------> 主分区,未分配
/dev/hda4 <---------------> 主分区,未分配
/dev/hda5 <---------------> D盘  (逻辑分区)
/dev/hda6 <---------------> E盘  (逻辑分区)
/dev/hda7 <---------------> lfs-6.0根分区(未优化)
/dev/hda8 <---------------> /boot分区(全局)
/dev/hda9 <---------------> 线性RAID使用的分区(0)
/dev/hda10<---------------> Mandrake根分区
/dev/hda11<---------------> SWAP交换分区
/dev/hda12<---------------> 线性RAID使用的分区(1)
删除后分区情况:
/dev/md0  <---------------> RAID设备 (lfs-6.0优化根分区)
/dev/hda1 <---------------> C盘 (主分区)
/dev/hda2 <---------------> 扩展分区
/dev/hda3 <---------------> 主分区,未分配
/dev/hda4 <---------------> 主分区,未分配
/dev/hda5 <---------------> E盘  (逻辑分区)
/dev/hda6 <---------------> lfs-6.0根分区(未优化)
/dev/hda7 <---------------> /boot分区(全局)
/dev/hda8 <---------------> 线性RAID使用的分区(0)
/dev/hda9<---------------> Mandrake根分区
/dev/hda10<---------------> SWAP交换分区
/dev/hda11<---------------> 线性RAID使用的分区(1)

很明显,更改后的分区号=原分区号-1 (删除的D盘)
进入grub命令行:
grub> root (hd0,6)

Filesystem type is ext2fs, partition type 0x83

grub> kernel (hd0,6)/vmlinuz-lfs-6.0 root=/dev/hda6 vga=791

因为我的vmlinuz-lfs-6.0(lfs内核)是放在/boot分区(hda7)的
而grub中(hd0,0)表示第一块硬盘的第一个分区(/dev/hda1)
所以(hd0,6)就对应了/dev/hda7,(/boot分区)
而lfs-6.0根分区修改后是/dev/hda6  所以是root=/dev/hda6
当我得意的按下enter时,意外发生了:
Error 15: File not found
咦?怎么会找不到文件呢?莫非我的分析完全错误了?
接着我输入了:
grub> find / 按下TAB键,让grub列出(hd0,6)/下面的东东:
Possible files are: lost+found bin boot dev etc home lib .viminfo
mnt opt proc root sbin sys include tmp usr var

grub>
真是奇怪,怎么(hd0,6)会是我的lfs根分区呢?它应该是/boot呀。
查看下当前的分区情况吧:
grub> root (hd0, 按下TAB键显示当前分区:
 Possible partitions are:
   Partition num: 0,  Filesystem type is fat, partition type 0xb
   Partition num: 5,  Filesystem type unknown, partition type 0x7
   Partition num: 6,  Filesystem type is ext2fs, partition type 0x83
   Partition num: 7,  Filesystem type is ext2fs, partition type 0x83
   Partition num: 8,  Filesystem type is reiserfs, partition type 0xfd
   Partition num: 9,  Filesystem type is ext2fs, partition type 0x83
   Partition num: 10,  Filesystem type unknown, partition type 0x82
   Partition num: 11,  Filesystem type unknown, partition type 0xfd
grub>

将分区号+1,竟然仍然是修改前的分区号,只是少了(hd0,4)=/dev/hda5 真是#%^&
grub> find (hd0,7)/ 再次按下TAB键,显示/dev/hda8的内容:
grub vmlinuz us.klt System.map-2.6.8.1-12mdk config-2.6.8.1-
12mdk vmlinuz-2.6.8.1-12mdk diag1.img diag2.img message-graphic
initrd-2.6.8.1-12  vmlinuz-lfs-6.0 .................

grub>
果然!/dev/hda8仍然是/boot分区,/dev/hda7是我的lfs根分区
既然这样,那么原来的引导信息就应该可以正常引导了。

grub > kernel (hd0,7)/vmlinuz-lfs-6.0 root=/dev/hda7 vga=791

结果可想而知,还是不能正常引导。(当然喽,能引导的话,就没意义记下了 ^_^)
引导过程中,出现"no init found    root=.........."
看来是没有找到根分区,真是奇怪,(hd0,6)下的确是我的lfs根分区阿!?

莫非grub中标识的分区号和linux中的分区号标识不相同?? 试试先:
grub > kernel (hd0,7)/vmlinuz-lfs-6.0 root=/dev/hda6 vga=791
grub > boot
根据grub中标识的分区号,vmlinuz-lfs-6.0在(hd0,7)下
根据上面的分析,lfs-6.0的根分区是在/dev/hda6下

顺利进入!看来果真如此。grub仍然使用原始分区号,而linux中则是修改后的分区号
[root@NEWLFS ~]#cfdisk
 Name        Flags      Part Type  FS Type           [Label]        Size (MB)
 --------------------------------------------------------------------------------
    hda1        Boot        Primary   W95 FAT32                          6859.89
                            Logical   Free Space                        22413.89
    hda5                    Logical   NTFS              [^C]            26386.70
    hda6                    Logical   Linux ext3                        10734.00
    hda7                    Logical   Linux ext3                          106.93
    hda8                    Logical   Linux raid autodetect              3619.13
    hda9                    Logical   Linux ext3                         7221.80
    hda10                   Logical   Linux swap / Solaris                534.65
    hda11                   Logical   Linux raid autodetect              2146.80

结论:
删除一个分区,在grub中只是将这个分区号去掉 (hd0,4)而其他的分区号并不改变
而linux中其他的分区号会改变,例如删除hda5,位于hda5以后的分区:
分区号=原分区号-1
 
因此删除位于中间的分区是不好的,会导致grub与linux标识分区号不同,比较混乱。
俺也要赶紧把hda5做成lvm+ReiserFS v4.0,这么多分区,真要糊涂了。:)
另外grub中的TAB键补全功能十分的好用,相信从上面已经体现了一些
使用linux第一步就要会一些grub基本用法啦,不然会很痛苦哟 :)

这有篇中/英双语的grub info文档,没看过的话,一定要看看哦 ^_^
http://bbs.linuxsir.org/showthread.php?
t=135486&highlight=%CE%D2%B7%AD+%B7%AD%D2%EB+%D2%EB%B5%C4+grub+info%CE%C4%B5%B5

- 作者: 6692975 2005年02月11日, 星期五 01:21  回复(0) |  引用(0) 加入博采

安装NVIDIA-Linux-x86-1.0-6629-pkg1.run小记
今天忽然想玩玩PS游戏,没安装显卡驱动,玩不了,昨天编译N次内核
留下了编译后的内核源码,顺便把NVIDIA-Linux-x86-1.0-6629-pkg1.run
安装上吧,正好看到论坛有人问如何安装这个驱动。记下来,也许会对
newbie有点帮助 ^_^
Let`s GO ! 
   
    安装NVIDIA-6629需要以下几个步骤:

       1. 进入字符界面,NVIDIA驱动必须在字符界面下才可以安装。
       2. 安装内核源码包
       3. 运行NVIDIA-Linux-x86-1.0-6629-pkg1.run 编译nvidia驱动
       4. 修改X的配置文件,使用nvidia驱动
       5. 如果nvidia驱动不能自动加载,需要修改系统启动脚本,使其启动时加载


    下面逐步的讲述如何进行:

    1. NVIDIA驱动必须在字符界面才可以安装:
    修改 /etc/inittab中的"id:5:initdefault:"字段, 将5改成3
    重新启动,就会进入字符界面。输入startx启动X
    不同的发行版启动级别可能不同,通常会在inittab中
    标识各个运行级别代表的意义:
    # Default runlevel. The runlevels used by Mandrakelinux are:
    #   0 - halt (Do NOT set initdefault to this)
    #   1 - Single user mode
    #   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
    #   3 - Full multiuser mode
    #   4 - unused
    #   5 - X11
    #   6 - reboot (Do NOT set initdefault to this)


    2. 安装内核源码包:
    可以从http://www.kernel.org下载源码包或安装自身发行版所带的kernel-source

    注意:必须与当前使用内核版本完全相同。

    如果从www.kernel.org下载的源码包,使用下列命令安装:
    cd /usr/src   进入/usr/src目录中,将源码包放置在这里。
    tar jxvf linux-2.6.10.tar.bz2  解压源码包,会生成linux-2.6.10目录
    ln -s /usr/src/linux-2.6.10 /usr/src/linux 编译内核建议做个软链接。
    并且要确保/lib/modules/2.6.10/下的build,source目录
    正确指向/usr/src/linux-2.6.10的:

    [root@NEWLFS modules]#ls -l /lib/modules/2.6.10
    lrwxrwxrwx  1 root root    21 2005-02-08 20:28 build -> /usr/src/linux-2.6.10/
    drwxr-xr-x  9 root root   216 2005-02-08 20:28 kernel/
    -rw-r--r--  1 root root  3408 2005-02-09 13:26 modules.alias
    -rw-r--r--  1 root root    69 2005-02-09 13:26 modules.ccwmap
    -rw-r--r--  1 root root  7503 2005-02-09 13:26 modules.dep
    -rw-r--r--  1 root root    73 2005-02-09 13:26 modules.ieee1394map
    -rw-r--r--  1 root root   205 2005-02-09 13:26 modules.inputmap
    -rw-r--r--  1 root root    81 2005-02-09 13:26 modules.isapnpmap
    -rw-r--r--  1 root root  4649 2005-02-09 13:26 modules.pcimap
    -rw-r--r--  1 root root 13519 2005-02-09 13:26 modules.symbols
    -rw-r--r--  1 root root   189 2005-02-09 13:26 modules.usbmap
    lrwxrwxrwx  1 root root    21 2005-02-08 20:28 source -> /usr/src/linux-2.6.10/

    做完这些,我去安装NVIDIA驱动,结果编译时出错。
    将内核源码编译一次,不安装,就可以正常编译了,这个问题在linux faq那栏里有写。

    2.4.x内核不知是否如此,如果编译NVIDIA过程中出现错误,就先编译一下内核
    方法很简单:
   
   
    从/boot目录下复制config-2.6.10到/usr/src/linux下
    命名为.config
   
    对于2.6.x内核使用下列命令编译:
    cd /usr/src/linux  进入源码目录
    make   编译内核及模块

    注意:不要去make install 只要编译就可以了。

    2.4.x使用下列命令编译内核,同样,只编译不安装。
    cd /usr/src/linux
    make dep  建立依赖关系(不知道是否有必要,做下没坏处)
    make bzImage 编译内核
    make modules  编译模块

    通常发行版中/boot中应该有当前内核的配置文件,如上面的config-2.6.10
    如果没有的话,可以通过下列命令创建出.config  
    [root@NEWLFS linux]# cd /usr/src/linux
    [root@NEWLFS linux]#make menuconfig 字符界面配置内核
    [root@NEWLFS linux]#make xconfig   图形界面配置内核
    这两种方法任选其一,喜欢的话,可以自己配置一下。
    或者直接使用默认值,保存退出即可。这样编译时间会长一些。
    make menuconfig: 假如是在图形界面中的终端运行,要保证
    该终端窗口为全屏,才不会出错。

    编译完成后,就可以安装nvidia驱动了。

    3. 运行NVIDIA-Linux-x86-1.0-6629-pkg1.run 编译nvidia驱动 :

    重启系统,进入字符界面:
    然后进入NVIDIA-Linux-x86-1.0-6629-pkg1.run所在的目录,
    例如我的NVIDIA-Linux-x86-1.0-6629-pkg1.run放在了/root/software下
    则使用下列命令安装:
    cd /root/software 进入NV....run所在的目录
    chmod u+x  NVIDIA-Linux-x86-1.0-6629-pkg1.run 给予x(可执行权限)
    ./NVIDIA-Linux-x86-1.0-6629-pkg1.run 运行NV.....run
    如果你的NVIDIA-Linux-x86-1.0-6629-pkg1.run存放在其他设备中,比如优盘里。
    那么你需要先使用mount命令挂载上你的优盘,然后进入优盘存放NV...run的目录
    执行安装。
   
    首先出现的是NV的许可协议,选择accept继续。
    提示"NO precompiled kernel interface was found to match your kernel ....."
    询问是否从NV的网站下载,选择No
    提示"同上文,this means that the installer will need to compile a new kernel...."
    选择OK,就开始编译驱动了,整个编译过程的信息记录在/var/log/nvidia-installer.log
   
    编译好的NV驱动在/usr/X11R6/lib/modules/drivers/
    名称为:nvidia_drv.o
   
    4. 修改X的配置文件,使用nvidia驱动
   
    使用XFree86 X-window 修改/etc/X11/XF86Config
    使用Xorg  X-window  则修改/etc/X11/xorg.conf
    似乎比较新的发行版(2.6.x内核) 都使用xorg 而旧一些的发行版则使用XFree86
    反正/etc/X11/下有哪个就是那个啦。

    使用文本编辑器,打开,找到下面这段:

    Section "Device"

            Identifier  "Card0"
            Driver      "nv" ---> "nvidia" -----这里要修改
            VendorName  "nVidia Corporation"
            BoardName   "NV17 [GeForce4 MX 440]"
            BusID       "PCI:1:0:0"

    EndSection

    将"nv" 改为"nvidia" 也许你的默认驱动不是nv,不管是什么,都改成nvidia
    并且记下默认驱动的名字,以便无法使用nvidia还可以恢复。:)
   
    再找到下面这段:

    Section "Module"
            Load  "extmod"
            Load  "glx"    -------->如果不存在则自己添加
           #Load  "dri"    ------->如果存在则注释掉 不要说不会注释哦 :)
           #Load  "GLcore"  ---->如果存在则注释掉
            Load  "dbe"
            Load  "record"
            Load  "xtrap"
            Load  "type1"
            Load  "freetype"
    EndSection
   
    修改好,保存退出。

    查看nvidia驱动模块是否加载了:
    [root@NEWLFS drivers]#lsmod |grep nvidia
    nvidia               3463164  0
    [root@NEWLFS drivers]#

    如果有类似上面输出,则表示nvidia已经成功加载
    如果没有任何输出,表示没有加载,需要自己手动加载
   
    使用modprobe加载:
   
    [root@NEWLFS drivers]#modprobe nvidia
    [root@NEWLFS drivers]#
    将nvidia驱动加载,当然在/usr/X11R6/lib/modules/driver/下
    是存在nvidia_drv.o的。成功加载不会有输出,如上所示。
   
    加载后就可以输入startx 启动X了。
    如果看到NVIDIA的徽标就表示安装成功啦。 ^_^
   
    如果不成功,X不能启动,可以修改/etc/X11/XF86Config
    将nvidia 改回默认驱动,恢复原始状态 :(

    
    5. 如果nvidia驱动不能自动加载,需要修改系统启动脚本,使其启动时加载
    我在Mandrake,LFS中安装这个驱动都是这样,系统启动不会自动加载。
    每次都需要先运行modprobe nvidia才可以。
    将这条命令写入系统启动脚本中,就不用每次都输入啦。
   
    在Mandrake中,我写到了/etc/rc.d/rc.local
    因为这是系统启动中最后执行的脚本,做一些系统周边工作,写到这里也比较符合规范 :)

    [root@NEWLFS rc.d]#echo "/sbin/modprobe nvidia" >>rc.local

    我通过echo命令将 /sbin/modprobe nvidia 追加到了rc.local中。
    使用文本编辑器直接写在最后就可以啦。modprobe命令最好使用绝对路径,使用which命令查看
    [root@NEWLFS rc.d]#which modprobe
    /sbin/modprobe
    [root@NEWLFS rc.d]#
     如果你的发行版没有rc.local,也可以写入/etc/rc.d/rc.sysinit中
    系统初始化的第一个脚本。或者其他系统服务中,如network,syslog...
    只要在X启动前就可以啦。

    
     Good  Luck  !   ^_^

- 作者: 6692975 2005年02月11日, 星期五 01:20  回复(0) |  引用(0) 加入博采

从源码编译安装软件经验+技巧 (更新中..)
从源码编译安装东东,不是很容易,想想在使用lfs之前,源码编译安装软件从来没
成功过,甚至出现错误都无从下手,只能放弃 :(
经过lfs的洗礼,总算对源码编译安装有了一点认识,可惜当初没有把这些经验写下来 :(
不过现在开始写也不迟 :)  将编译中遇到的问题及解决的方法记下来,积累经验,
也可以让来往的newbie对源码安装软件了解一些,多一些成功机率,毕竟从源码包编译
东东还是有一定好处的 ^_^
先说一下源码编译的基本方法及源码编译过程中几个重要的文件,以及重要变量
PKG_CONFIG_PATH 的设定,经常在论坛看到有人源码编译失败,都是这个东东搞的鬼 ^_^

ChangeLog :
05/02/06 :编译dosbox make时出现找不到头文件错误,类似的错误曾经碰到过.记录。:)
LD_LIBRARY_PATH的作用。
从源码编译安装东东,不是很容易,想想在使用lfs之前,源码编译安装软件从来没
成功过,甚至出现错误都无从下手,只能放弃 :(
经过lfs的洗礼,总算对源码编译安装有了一点认识,可惜当初没有把这些经验写下来 :(
不过现在开始写也不迟 :)  将编译中遇到的问题及解决的方法记下来,积累经验,
也可以让来往的newbie对源码安装软件了解一些,多一些成功机率,毕竟从源码包编译
东东还是有一定好处的 ^_^
先说一下源码编译的基本方法及源码编译过程中几个重要的文件,以及重要变量
PKG_CONFIG_PATH 的设定,经常在论坛看到有人源码编译失败,都是这个东东搞的鬼 ^_^

如何从源码包安装软件?
从源码包安装软件最重要的就是仔细阅读README INSTALL等说明文件
它会告诉你怎样才能成功安装  :)
通常从源码包安装软件的步骤是:
tar jxvf gtk+-2.4.13.tar.bz2  解开源码包
cd gtk+-2.4.13/ 进入源码目录
./configure  似乎在某些环境下./configure会造成终端退出
而使用. configure则会正常运行,如果有这个现象,就试试 . configure

通过configure程序猜测主机信息,最终建立Makefile,以完成make,所以如果./configure不成功
而去make的话,就会出现"make: *** No targets specified and no makefile found. Stop."
make 当./configure成功结束后,就开始正式编译程序了.
make install  编译成功后使用make install安装
make uninstall 某些软件支持卸载可能使用该方法卸载,如果支持的话,通常会在README中写到(似乎比较少)

configure程序带有很多参数,可以通过 ./configure --help 查看详细内容,通常位于前面的是常规configure的
参数说明,末尾是该程序的可用参数说明。
./configure --prefix=/usr 指定安装目录,通常从源码包编译安装的软件默认会放在/usr/local
因为这是FHS(Filesystem Hierarchy Standard)的规定,不知道什么是FHS?看看这篇文章吧:
http://www.pathname.com/fhs/pub/fhs-2.3.html 相信它会让你对linux系统结构有更好的理解,很值得读读。

再说一下几个关系到能否成功编译的东东:/etc/ld.so.conf  ldconfig   PKG_CONFIG_PATH
首先说下/etc/ld.so.conf: 
这个文件记录了编译时使用的动态链接库的路径。
默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件
如果你安装了某些库,比如在安装gtk+-2.4.13时它会需要glib-2.0 >= 2.4.0,辛苦的安装好glib后
没有指定 --prefix=/usr  这样glib库就装到了/usr/local下,而又没有在/etc/ld.so.conf中添加/usr/local/lib
这个搜索路径,所以编译gtk+-2.4.13就会出错了 :(
对于这种情况有两种方法解决:
一:在编译glib-2.4.x时,指定安装到/usr下,这样库文件就会放在/usr/lib中,gtk就不会找不到需要的库文件了 :)
对于安装库文件来说,这是个好办法,这样也不用设置PKG_CONFIG_PATH了 (稍后说明)

二:将/usr/local/lib加入到/etc/ld.so.conf中,这样安装gtk时就会去搜索/usr/local/lib,同样可以找到需要的库 :)
将/usr/local/lib加入到/etc/ld.so.conf也是必须的,这样以后安装东东到local下,就不会出现这样的问题了。
将自己可能存放库文件的路径都加入到/etc/ld.so.conf中是明智的选择 ^_^
添加方法也极其简单,将库文件的绝对路径直接写进去就OK了,一行一个。例如:
/usr/X11R6/lib
/usr/local/lib
/opt/lib


再来看看ldconfig是个什么东东吧 :
它是一个程序,通常它位于/sbin下,是root用户使用的东东。具体作用及用法可以man ldconfig查到
简单的说,它的作用就是将/etc/ld.so.conf列出的路径下的库文件 缓存到/etc/ld.so.cache 以供使用
因此当安装完一些库文件,(例如刚安装好glib),或者修改ld.so.conf增加新的库路径后,需要运行一下/sbin/ldconfig
使所有的库文件都被缓存到ld.so.cache中,如果没做,即使库文件明明就在/usr/lib下的,也是不会被使用的,结果
编译过程中抱错,缺少xxx库,去查看发现明明就在那放着,搞的想大骂computer蠢猪一个。 ^_^
我曾经编译KDE时就犯过这个错误,(它需要每编译好一个东东,都要运行一遍),所以
切记改动库文件后一定要运行一下ldconfig,在任何目录下运行都可以。

再来说说 PKG_CONFIG_PATH这个变量吧:
经常在论坛上看到有人问"为什么我已经安装了glib-2.4.x,但是编译gtk+-2.4.x 还是提示glib版本太低阿?
为什么我安装了glib-2.4.x,还是提示找不到阿?。。。。。。
"都是这个变量搞的鬼。
先来看一个编译过程中出现的错误 (编译gtk+-2.4.13):

checking for pkg-config... /usr/bin/pkg-config
checking for glib-2.0 >= 2.4.0    atk >= 1.0.1    pango >= 1.4.0... Package glib-2.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `glib-2.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'glib-2.0' found


configure: error: Library requirements (glib-2.0 >= 2.4.0    atk >= 1.0.1    pango >= 1.4.0) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.
[root@NEWLFS gtk+-2.4.13]#                                               
很明显,上面这段说明,没有找到glib-2.4.x,并且提示应该将glib-2.0.pc加入到PKG_CONFIG_PATH下。
究竟这个pkg-config PKG_CONFIG_PATH glib-2.0.pc 是做什么的呢? let me tell you ^_^
先说说它是哪冒出来的,当安装了pkgconfig-x.x.x这个包后,就多出了pkg-config,它就是需要PKG_CONFIG_PATH的东东
pkgconfig-x.x.x又是做什么的? 来看一段说明:

The pkgconfig package contains tools for passing the include path and/or library paths to build tools during the make file execution.

pkg-config is a function that returns meta information for the specified library.

The default setting for PKG_CONFIG_PATH is /usr/lib/pkgconfig because of the prefix we use to install pkgconfig. You may add to PKG_CONFIG_PATH by exporting additional paths on your system where pkgconfig files are installed. Note that PKG_CONFIG_PATH is only needed when compiling packages, not during run-time.

我想看过这段说明后,你已经大概了解了它是做什么的吧。
其实pkg-config就是向configure程序提供系统信息的程序,比如软件的版本啦,库的版本啦,库的路径啦,等等
这些信息只是在编译其间使用。你可以 ls /usr/lib/pkgconfig 下,会看到许多的*.pc,用文本编辑器打开
会发现类似下面的信息:

prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

glib_genmarshal=glib-genmarshal
gobject_query=gobject-query
glib_mkenums=glib-mkenums

Name: GLib
Description: C Utility Library
Version: 2.4.7
Libs: -L${libdir} -lglib-2.0
Cflags: -I${includedir}/glib-2.0 -I${libdir}/glib-2.0/include

明白了吧,configure就是靠这些信息判断你的软件版本是否符合要求。并且得到这些东东所在的位置,要不去哪里找呀。
不用我说你也知道为什么会出现上面那些问题了吧。

解决的办法很简单,设定正确的PKG_CONFIG_PATH,假如将glib-2.x.x装到了/usr/local/下,那么glib-2.0.pc就会在
/usr/local/lib/pkgconfig下,将这个路径添加到PKG_CONFIG_PATH下就可以啦。并且确保configure找到的是正确的
glib-2.0.pc
,就是将其他的lib/pkgconfig目录glib-2.0.pc干掉就是啦。(如果有的话 ^-^)
设定好后可以加入到~/.bashrc中,例如:
PKG_CONFIG_PATH=/opt/kde-3.3.0/lib/pkgconfig:/usr/lib/pkgconfig:/usr/local/pkgconfig:
/usr/X11R6/lib/pkgconfig

[root@NEWLFS ~]#echo $PKG_CONFIG_PATH
/opt/kde-3.3.0/lib/pkgconfig:/usr/lib/pkgconfig:/usr/local/pkgconfig:/usr/X11R6/lib/pkgconfig

从上面可以看出,安装库文件时,指定安装到/usr,是很有好处的,无论是/etc/ld.so.conf还是PKG_CONFIG_PATH
默认都会去搜索/usr/lib的
,可以省下许多麻烦,不过从源码包管理上来说,都装在/usr下
管理是个问题,不如装在/usr/local下方便管理
其实只要设置好ld.so.conf,PKG_CONFIG_PATH路径后就OK啦 ^_^

另外某些软件因为版本原因(比如emacs-21.3),在gcc-3.4.x下编译无法成功,(make 出错)
使用低版本的gcc就可能编译通过。

可能是因为gcc-3.3.x和gcc-3.4.x变化很大的缘故吧。

暂时想到了这么多,先记下这些吧,如果你对源码包编译有了一点的了解,就不枉我打了这么半天字啦。 ^_^ 

另外./configure 通过,make 出错,遇到这样的问题比较难办,只能凭经验查找原因,比如某个头文件没有找到,
这时候要顺着出错的位置一行的一行往上找错,比如显示xxxx.h  no such file or directory 说明缺少头文件
然后去google搜。
或者找到感觉有价值的错误信息,拿到google去搜,往往会找到解决的办法。还是开始的那句话,要仔细看README,INSTALL
程序如何安装,需要什么依赖文件,等等。

另外对于newbie来说,编译时,往往不知道是否成功编译通过,而编译没有通过就去make install
必然会出错,增加了解决问题的复杂性,可以通过下面方法检查是否编译成功:

一:编译完成后,输入echo $? 如果返回结果为0,则表示正常结束,否则就出错了 :(
echo $? 表示 检查上一条命令的退出状态,程序正常退出 返回0,错误退出返回非0。

二:编译时,可以用&&连接命令, && 表示"当前一条命令正常结束,后面的命令才会执行",就是"与"啦。
这个办法很好,即节省时间,又可防止出错。例:
./configure --prefix=/usr && make && make install

ChangLog :
05/02/06 :

编译DOSBOX时出现"cdrom.h:20:23: SDL_sound.h: No such file or directory"

今天忽然想回味下经典DOS游戏,于是编译这个DOSBOX模拟器,README中说明需要SDL_SOUND
于是下载,安装,很顺利,没有指
定安装路径,于是默认的安装到了/usr/local/
当编译DOSBOX make 时,出现如下错误:
if g++ -DHAVE_CONFIG_H -I. -I. -I../..  -I../../include -I/usr/include/SDL -D_REENTRANT  -march=pentium4 -O3 -pipe -fomit-frame-pointer -MT dos_programs.o -MD -MP -MF ".deps/dos_programs.Tpo" -c -o dos_programs.o dos_programs.cpp; \
then mv -f ".deps/dos_programs.Tpo" ".deps/dos_programs.Po"; else rm -f ".deps/dos_programs.Tpo"; exit 1; fi
In file included from dos_programs.cpp:30:
cdrom.h:20:23: SDL_sound.h: No such file or directory  <------错误的原因在这里
In file included from dos_programs.cpp:30:
cdrom.h:137: error: ISO C++ forbids declaration of `Sound_Sample' with no type
cdrom.h:137: error: expected `;' before '*' token
make[3]: *** [dos_programs.o] Error 1
make[3]: Leaving directory `/root/software/dosbox-0.63/src/dos'
make[2]: *** [all-recursive]  Error 1
make[2]: Leaving directory `/root/software/dosbox-0.63/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/root/software/dosbox-0.63'
make: *** [all] Error 2
[root@NEWLFS dosbox-0.63]#
看来是因为cdrom.h没有找到SDL_sound.h这个头文件
所以出现了下面的错误,但是我明明已经安装好了SDL_sound阿?
经过查找,在/usr/local/include/SDL/下找到了SDL_sound.h
看来dosbox没有去搜寻/usr/local/include/SDL下的头文件,既然找到了原因,就容易解决啦

[root@NEWLFS dosbox-0.63]#ln -s /usr/local/include/SDL/SDL_sound.h /usr/include

做个链接到/usr/include下,这样DOSBOX就可以找到了,顺利编译成功,回味仙剑ing....^_^
曾经编译Xorg-6.8.1的时候,也出现找不到freetype.h的问题,原因也是如此。
编译安装软件时,经常遇到类似的情况,都是因为找不到需要的头文件而出现错误,也许是因为
没有安装相关的头文件,或者是安装了但没有找到,如上例。
找不到的情况:做个链接到/usr/include下,就可以了。
没安装的情况:去google找什么东东包括该头文件,安装上就应该可以了。
通常错误提示也都是"No such file or directory",所以编译失败时要好好找找错误信息哦。
错误信息总是在Error上面不远的,耐心点 ^_^
 
不修改/etc/ld.so.conf使用非默认路径下的库文件-----LD_LIBRARY_PATH

环境变量LD_LIBRARY_PATH列出了查找共享库时除了默认路径之外的其他路径。
如果不想修改或无法修改(无root权限)/etc/ld.so.conf而使用其他路径下的库文件
就需要设置LD_LIBRARY_PATH了,例:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/lib
这样就可以使用/opt/lib下的库文件啦。当然还是修改/etc/ld.so.conf方便。

先写到这吧,再有编译感想再增加 ^_^

- 作者: 6692975 2005年02月11日, 星期五 01:19  回复(1) |  引用(0) 加入博采

保持numlock处于开启状态
比较实用的东东,不然每次都自己去按numlock也很烦 ^_^
字符终端下开启numlock :

      for tty in /dev/tty[1-6]
      do
       setleds -D +num < $tty
      done

将上面的语句加入到系统启动的脚本中,比如/etc/rc.d/rc.local,
加在结尾处就可以啦。
X下开启numlock :

一:利用numlockx 程序开启numlock :
http://blog.blogchina.com/upload/2005-01-22/20050122022526439452.tar
下载numlockx的源码包
使用如下命令安装:
tar xvf
20050122022526439452.tar  &&
cd numlockx-1.0  &&
./configure &&   
 make  &&
cp numlockx /usr/bin

然后编辑startkde脚本,如:vi `which startkde`
找到 ksplash --nodcop ,在下面一行加入:
/usr/bin/numlockx on 保存退出,OK。
为什么要加在startkde呢?numlockx中的README是说明加在xinitrc中。
因为我加在xinitrc中,发现startx时,numlock闪了一下,就灭了 :(

二:KDE自带开启numlockx程序,不过我的KDE中没有 :(

KDE控制中心(Control Center) --> 外设(Peripherals) --> 键盘(Keyboard) -->
KDE启动时NumLock的状态设置为打开


- 作者: 6692975 2005年02月11日, 星期五 01:17  回复(0) |  引用(0) 加入博采

解决ThunderBird无法调用firefox浏览的问题

今天终于解决了ThunderBird不能调用firefox的问题,再也不用web信箱喽 ^_^

解决方法:                       ThunderBird version :1.0
编辑~/.thunderbird/*.default/prefs.js
加入:
user_pref("network.protocol-handler.app.http", "/usr/bin/firefox");

其实设置一下"默认的浏览器"就应该可以,
KDE下:  控制中心---KDE组件--组建选择程序---WEB 浏览器

- 作者: 6692975 2005年02月11日, 星期五 01:16  回复(0) |  引用(0) 加入博采

Linux Frequently Asked Questions
一些linux使用中碰到的问题解决办法
不断收集更新中 ^_^

Q:为什么d4x经常会没有响应,只能kill掉它?
A:因为linux默认声卡是独占的,所以不能两个东东同时发声,如果听着MP3,使用d4x,它会放那个讨厌的音效
所以就会没有响应,只要关闭音效就OK啦。

Q:如果在英文界面,可以中文输入,正常浏览中文网页?
A:将/usr/share/locale/zh_CN重命名,如: mv /usr/share/locale/zh_CN /usr/share/locale/zh_CN.bak
注销重登入,就可以看到效果了,想要换回中文界面只需要将zh_CN.bak 改回zh_CN即可。
在Mandrakelinux10.0O,10.1C,10.1O,Fedora Core 2,LFS-6.0均测试通过。

Q:安装某些需要内核源码的软件时,为什么我已经将内核源码装在了/usr/src/linux下,仍然提示找不到内核源码?
A:因为这些软件configure会通过检测/usr/src/linux/include/linux/version.h是否存在,以判断是否以安装
内核源码,而如果只将内核源码包解压,并不存在version.h这个文件,所以需要做如下步骤:
在内核源码目录下(/usr/src/linux)
1)make include/linux/version.h  生成version.h文件
2)make include/asm  创建

- 作者: 6692975 2005年02月11日, 星期五 01:15  回复(0) |  引用(0) 加入博采

firefox使用小技巧
firefox真是个好东东,收集了一些使用小技巧及一些问题的解决方法,
方便以后查找使用 ^_^
不断更新中...................

一:firefox右上角的搜索每次都链接到google主页才可以再搜索
今天终于找到让它正常工作的办法啦。^_^
输入about:config
搜索google,把两项值都去掉,就是删调字符串,就能用了。
                                                
二:解决firefox播放rtsp协议时出现"rtsp不是已注册协议",可以用firefox看在线啦 
在prefs.js所在的目录下创建user.js,这个prefs.js在
~/.mozilla/firefox/infs5unb.default下
infs5unb.default这个目录可能不同,总之那个目录下有prefs.js就对啦。

内容如下:
user_pref("network.protocol-handler.external.rtsp", true);
user_pref("network.protocol-handler.app.rtsp", "/usr/bin/realplay");

/usr/bin/realplay要换成自己的realplay程序的路径哦。重启firefox,OK拉.:P

三: 让firefox支持"右键下载",象调用flashget一样调用d4x.

https://addons.update.mozilla.org/extensions/moreinfo.php?id=220
下载该插件安装上,就可以啦

四:加快firefox浏览网页速度

在地址栏中输入about:config,然后查找下面各项,如果没有可以新建
nglayout.initialpaint.delay 100
network.http.pipelining true
network.http.pipelining.maxrequests 30
network.http.proxy.pipelining true
network.http.max-connections 48
network.http.max-connections-per-server 24
Network.dns.disableIPv6  true
https://addons.update.mozilla.org/extensions/moreinfo.php?id=327&vid=989
这个插件可以设置上面的部分选项,用起来很方便,想少打几个字就试试吧 ^_^


五:给firefox加上天气预报,不用去weather.com啦

http://forecastfox.mozdev.org/installation.html
下载该插件安装上,就可以随时得到气象信息喽

六:firefox,手气不错 !
firefox地址栏支持google的"手气不错",输入要搜索的内容
直接进入google查找结果的第一个网页,比如输入"linux"就直接进入红旗主页啦 ^_^

七:让firefox支持ed2k:///协议
1、在地址栏输入about:config,进入配置页面
2、在列表上单击右键,新建一个布尔值(Boolean)值
名字是network.protocol-handler.external.ed2k,值为true。

3、再新建一个字符串值(String),名字是network.protocol-handler.app.ed2k
值为你程序的路径

如"/usr/bin/ed2k.amule"。

八:firefox,让信息动起来! -----firefox的活动书签
浏览某些网页时,在firefox的右下角会出现一个小图标,这就说明该网页支持firefox的
"活动书签",它可以让你的书签自动更新内容,这样该网页有什么新的信息,立刻就可以
显现出来,很cool的功能。比如http://www.firefox.net.cn/newforum/index.php
firefox社区就支持这种功能(不支持才怪),还有许多网页支持这种特性,自己多留意啦 ^_^

九: 让firefox变成翻译工具
https://addons.update.mozilla.org/extensions/moreinfo.php?application=
firefox&id=181&vid=938
下载安装后,在"工具里就多出了Translate"选择后,打开次级菜单,就可以英-汉啦
选择Options,将"Select your language"换成English,确定
就可以选择汉-英,韩,日。。不用去翻译网站喽。

- 作者: 6692975 2005年02月11日, 星期五 01:13  回复(0) |  引用(0) 加入博采

已锁定
此日志的浏览权限已被作者锁定,请同作者联系,发送短消息,如果你的身份符合作者的要求,点击此处可以进行浏览

- 作者: 6692975 2005年01月19日, 星期三 18:46  回复(0) |  引用(0) 加入博采

已锁定
此日志的浏览权限已被作者锁定,请同作者联系,发送短消息,如果你的身份符合作者的要求,点击此处可以进行浏览

- 作者: 6692975 2005年01月17日, 星期一 21:35  回复(0) |  引用(0) 加入博采

已锁定
此日志的浏览权限已被作者锁定,请同作者联系,发送短消息,如果你的身份符合作者的要求,点击此处可以进行浏览

- 作者: 6692975 2005年01月17日, 星期一 21:34  回复(0) |  引用(0) 加入博采