LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2301|回复: 15

Gentoo安装的几点问题

[复制链接]
发表于 2007-3-23 10:23:10 | 显示全部楼层 |阅读模式
问题1:
我的硬盘分区如下:
[HTML]
  hda1     hda2    <hda5     hda6     hda7     hda8     hda9     hda10>
  /boot     C:\      D:\      E:\    /home   (SuSE)/  (gentoo)/   swap
  reiserfs  NTFS    NTFS     NTFS   reiserfs reiserfs reiserfs    swap
  101M      10G     40G      40G      10G       6G       6G       1.5G[/HTML]

我是在openSuSE10.2系统下chroot安装gentoo系统的。但是现在由于/boot分区和gentoo的根分区不在同一物理分区上,启动时,系统提示说无法加载文件系统。除了使用initrd以外,有没有什么别的办法?

关于initrd:我所搜索到的如何制作一个initrd文件,都是关于所需要的命令,而initrd其中应具体包含哪些文件,没有任何介绍。最初我直接在grub/menu.lst中gentoo的启动项下直接加上
    initrd  initrd-2.6.18-34-default
      (注:OpenSuSE10.2的内核版本2.6.18-34;gentoo内核版本2.6.20-gentoo-r2)
但系统提示无法找到initrd内/lib/module/2.6.20-gentoo-r2-default/xxxxxx.o模块。这是当然了,于是我将OpenSuSE10.2的inird复制、解压、拆包,
  1. # cp /boot/initrd-2.6.18-34-default  /tmp
  2. # cd !$
  3. # mv initrd-2.6.18-34-default  initrd-2.6.18-34-default.gz
  4. # gzip -d initrd-2.6.18-34-default.gz
  5. # cpio -i < initrd-2.6.18-34-default
  6. # cd initrd
复制代码

将(initrd)/lib/module/2.6.18-34-default/
目录完整的复制了一份,命名为(initrd)/lib/module/2.6.20-gentoo-r2-default/
再重新打包
   
  1. # find . | cpio  -c -o > ../initrd-2.6.20-gentoo-r2-default
复制代码

然后压缩
   
  1. # cd .. && gzip  -9  initrd-2.6.20-gentoo-r2-default
复制代码

把上述initrd文件复制到/boot,然后修改grub/menu.lst
但启动后,系统说模块加载错误。个人觉得是由于(initrd)/lib/module/2.6.20-gentoo-r2-default目录下模块版本与内核不匹配的缘故。但应该考哪些文件进去啊?求达人教我!

问题2:
最一开始,本是想用gensplash的,但是emerge它的时候,系统提示说libc++不支持nptl。我在/etc/make.conf的USE变量中已经加入nptl了。原因何在?怎么改?再求达人教我!

问题3:
USE变量中的一些参数前加了一个小“-”,另一些则没有。请问 -gnome 与 gnome有什么区别?
发表于 2007-3-23 11:32:16 | 显示全部楼层
initrd initrd-2.6.18-34-default
你这个是suse内核的 怎么加都gentoo的启动项里了

前面加"-"的USE标记表示去掉支持
e.g. -gnome 表示去掉gnome的支持kde用户一般加上这个
回复 支持 反对

使用道具 举报

发表于 2007-3-23 11:47:47 | 显示全部楼层
把menu.lst信息贴出来更有助于解决你的问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-23 12:45:23 | 显示全部楼层
Post by zhoukb
把menu.lst信息贴出来更有助于解决你的问题。

[HTML]default 1
timeout 8
splashimage=(hd0,0)/boot/grub/gnu.xpm.gz

###Don't change this comment - YaST2 identifier: Original name: linux###
title openSUSE 10.2
    root (hd0,0)
    kernel /vmlinuz-2.6.18.2-34-default root=/dev/hda8 resume=/dev/hda10 splash=silent showopts
    initrd /initrd-2.6.18.2-34-default

###Don't change this comment - YaST2 identifier: Original name: windows###
title Windows
    rootnoverify (hd0,0)
    chainloader (hd0,1)+1

###Don't change this comment - YaST2 identifier: Original name: failsafe###
title Failsafe -- openSUSE 10.2
    root (hd0,0)
    kernel /vmlinuz-2.6.18.2-34-default root=/dev/hda8 showopts ide=nodma apm=off acpi=off noresume nosmp noapic maxcpus=0 edd=off 3
    initrd /initrd-2.6.18.2-34-default

###Self add Gentoo
title Gentoo 2.6.20-r2
    root (hd0,0)
    kernel /vmlinuz-Gentoo root=/dev/hda9
    initrd /initrd-2.6.20-gentoo-r2-default

[/HTML]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-23 12:48:44 | 显示全部楼层
Post by 杨珂
initrd initrd-2.6.18-34-default
你这个是suse内核的 怎么加都gentoo的启动项里了

没法子,自己不会定制initrd下应该有哪些文件,只好拿一个现成的来改改。

前面加"-"的USE标记表示去掉支持
e.g. -gnome 表示去掉gnome的支持kde用户一般加上这个

受教了,非常感谢!
回复 支持 反对

使用道具 举报

发表于 2007-3-23 13:11:34 | 显示全部楼层
其实没有initrd也是没问题的,你看看是否将reiserfs和ide相关的编译进内核。
如果不清楚应该要那些模块,可以在suse下lsmod看看都启动了哪些模块,然后先都编译进内核,以后再慢慢优化。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-23 13:37:06 | 显示全部楼层
[HTML]Folder PATH listing

/initrd
│  init

├─bin
├─dev
├─etc
│  ├─modprobe.d
│  └─udev
│      └─rules.d
├─lib
│  ├─firmware
│  ├─modules
│  │  ├─2.6.18.2-34-default
│  │  │  └─kernel
│  │  │      ├─drivers
│  │  │      │  ├─acpi
│  │  │      │  ├─cdrom
│  │  │      │  ├─firmware
│  │  │      │  ├─ide
│  │  │      │  │  └─pci
│  │  │      │  └─scsi
│  │  │      └─fs
│  │  │          └─reiserfs
│  │  └─2.6.20-gentoo-r2-default
│  │      └─kernel
│  │          ├─drivers
│  │          │  ├─acpi
│  │          │  ├─cdrom
│  │          │  ├─firmware
│  │          │  ├─ide
│  │          │  │  └─pci
│  │          │  └─scsi
│  │          └─fs
│  │              └─reiserfs
│  └─udev
├─proc
├─root
├─sbin
├─sys
├─tmp
└─var
    └─log
[/HTML]
[HTML]
/initrd/lib
│  ld-2.5.so
│  libacl.so.1.1.0
│  libattr.so.1.1.0
│  libc-2.5.so
│  libdl-2.5.so
│  libgcc_s.so.1
│  libhistory.so.5.1
│  libncurses.so.5.5
│  libnss_files-2.5.so
│  libpthread-2.5.so
│  libreadline.so.5.1
│  librt-2.5.so
│  libutil-2.5.so
│  libuuid.so.1.2
│  libvolume_id.so.0.73.0
│  
├─firmware
│      ql2100_fw.bin
│      ql2200_fw.bin
│      ql2300_fw.bin
│      ql2322_fw.bin
│      ql2400_fw.bin
│      ql6312_fw.bin
│      
├─modules
│  ├─2.6.18.2-34-default
│  │  │  modules.alias
│  │  │  modules.ccwmap
│  │  │  modules.dep
│  │  │  modules.ieee1394map
│  │  │  modules.inputmap
│  │  │  modules.isapnpmap
│  │  │  modules.ofmap
│  │  │  modules.pcimap
│  │  │  modules.seriomap
│  │  │  modules.symbols
│  │  │  modules.unsupported
│  │  │  modules.usbmap
│  │  │  
│  │  └─kernel
│  │      ├─drivers
│  │      │  ├─acpi
│  │      │  │      fan.ko
│  │      │  │      processor.ko
│  │      │  │      thermal.ko
│  │      │  │      
│  │      │  ├─cdrom
│  │      │  │      cdrom.ko
│  │      │  │      
│  │      │  ├─firmware
│  │      │  │      edd.ko
│  │      │  │      
│  │      │  ├─ide
│  │      │  │  │  ide-cd.ko
│  │      │  │  │  ide-core.ko
│  │      │  │  │  ide-disk.ko
│  │      │  │  │  ide-floppy.ko
│  │      │  │  │  ide-tape.ko
│  │      │  │  │  
│  │      │  │  └─pci
│  │      │  │          piix.ko
│  │      │  │         
│  │      │  └─scsi
│  │      │          ide-scsi.ko
│  │      │          osst.ko
│  │      │          scsi_mod.ko
│  │      │          sd_mod.ko
│  │      │          sg.ko
│  │      │          sr_mod.ko
│  │      │          st.ko
│  │      │         
│  │      └─fs
│  │          └─reiserfs
│  │                  reiserfs.ko
│  │                  
│  └─2.6.20-gentoo-r2-default
│      │  modules.alias
│      │  modules.ccwmap
│      │  modules.dep
│      │  modules.ieee1394map
│      │  modules.inputmap
│      │  modules.isapnpmap
│      │  modules.ofmap
│      │  modules.pcimap
│      │  modules.seriomap
│      │  modules.symbols
│      │  modules.unsupported
│      │  modules.usbmap
│      │  
│      └─kernel
│          ├─drivers
│          │  ├─acpi
│          │  │      fan.ko
│          │  │      processor.ko
│          │  │      thermal.ko
│          │  │      
│          │  ├─cdrom
│          │  │      cdrom.ko
│          │  │      
│          │  ├─firmware
│          │  │      edd.ko
│          │  │      
│          │  ├─ide
│          │  │  │  ide-cd.ko
│          │  │  │  ide-core.ko
│          │  │  │  ide-disk.ko
│          │  │  │  ide-floppy.ko
│          │  │  │  ide-tape.ko
│          │  │  │  
│          │  │  └─pci
│          │  │          piix.ko
│          │  │         
│          │  └─scsi
│          │          ide-scsi.ko
│          │          osst.ko
│          │          scsi_mod.ko
│          │          sd_mod.ko
│          │          sg.ko
│          │          sr_mod.ko
│          │          st.ko
│          │         
│          └─fs
│              └─reiserfs
│                      reiserfs.ko
│                     
└─udev
        ata_id
        cdrom_id
        create_floppy_devices
        dasd_id
        edd_id
        eventrecorder.sh
        firmware.sh
        idedma.sh
        ipw3945d.sh
        load_floppy_module.sh
        mount.sh
        path_id
        rename_netiface
        scsi_id
        trigger_firmware_loading.sh
        usb_id
        vol_id
        
[/HTML]
以上是initrd-2.6.20-gentoo-r2-default文件下的目录内容列表。

Post by zhoukb
其实没有initrd也是没问题的,你看看是否将reiserfs和ide相关的编译进内核。
如果不清楚应该要那些模块,可以在suse下lsmod看看都启动了哪些模块,然后先都编译进内核,以后再慢慢优化。

好,我试试。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-23 15:29:56 | 显示全部楼层
Post by zhoukb
其实没有initrd也是没问题的,你看看是否将reiserfs和ide相关的编译进内核。
如果不清楚应该要那些模块,可以在suse下lsmod看看都启动了哪些模块,然后先都编译进内核,以后再慢慢优化。

试过了,还是不行的,内核在/boot/目录下找不到/dev目录(那是当然的,/boot分区下只有一个/grub目录和一些内核文件),可是grub启动时,命令
root (hd0,0)
将自己所在分区(/boot)作为逻辑根分区。于是启动项里的参数root=/dev/hda9就完全无效了,因为找不到该链接。initrd的作用就是完成这一链接,使启动继续进行(grub将initrd释放到内存中,然后把逻辑根目录切换到该"内存盘",这时就可以在该"内存盘"的文件目录中找到/dev/hdax了。)
求教达人,该怎么编辑这个该死的initrd文件。
回复 支持 反对

使用道具 举报

发表于 2007-3-23 15:51:59 | 显示全部楼层
改成如下试试
kernel /boot/vmlinuz-Gentoo  root=/dev/hda9

另外你的fstab设置正确吧?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-23 16:29:06 | 显示全部楼层
回楼上:
我现在的问题是启动时逻辑根目录在hda1(/boot)分区上,此时系统无法找到指向/dev/hda9的链接,也就是说,实际的根目录加载不了,于是实际根目录上的文件都读不到,包括/etc/fstab。
系统启动,需要实际根目录(hda9)上的/dev/hda9来加载自己,这就构成了一个循环依赖,initrd的引入就是为了解决这一循环依赖。启动过程,逻辑根目录需要进行两次切换:
grub(hda1)-->initrd(内存)-->实际根分区(hda9)

现在进行到第二步就卡住了。可能是因为模块版本冲突。

另:
在hda1分区上,有一个boot,是个软链接,boot -> .
它指向当前目录。所以
kernel /boot/vmlinuz-Gentoo root=/dev/hda9
中,boot加与不加效果是一样的。

仍然谢谢你的建议!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表