# 让你的 Gentoo 快若刀锋 (20050216.done)

## EricHsu

* 20051204: 注意, 这篇文章里涉及一些具体步骤的操作已经过时了, 所以请不要再按步就班地跟着做. 但是, 里面一些内容, 比如分区的考虑, 配置 make.conf 的思路等,  还是可以参考的. 我正在准备 "让你的 gentoo 快若刀锋 v2.0", 希望能为大家带来一些不会过时的, 通用的安装指引, 敬请期待  :Wink: 

更新: 

 * 20050522: 哇塞, 在 11:31 的这一刻, 这篇帖子的点击数已达 101608! 前天还只是 97000! 过十万了, 纪念一下! 谢谢大家的支持!!  :Very Happy:   :Very Happy: 

 * 20050427: gcc 4.0 早已 release, 等五月我的住处开通网络之后, 就开始折腾用 gcc 4.0 来 "快若刀锋"  :Wink:  (噢, 还有, 我已经 "卖身求生" 了, 所以, 下面这个求职信息已失效  :Cool:  )

 * 20050216: 我明天 (17 号) 要去武汉陪 gf 几天, 顺便找找工作 (如果你有武汉的工作信息, 记得一定给我发信或者直接联系我! 非常非常感谢先!!), 可能有几天上不来了, 所以赶紧把这帖子搞定啦! 大家有啥想法/意见的就跟帖提, 我回来改  :Very Happy: 

 * 20050215: 完成内核安装/内核模块安装/Utopia, 系统信息/网络信息配置等.

 * 20050207: 和我一样已经使用了旧的 gcc34 profile 的朋友, 在 emerge sync 之后, emerge 任何东西时可能都会出现一个提示信息说你的 profile 已经被 deprecated, 这时只需按照提示信息里所说的步骤更新 profile 即可:

```

!!! Your current profile is deprecated and not supported anymore.

!!! Please upgrade to the following profile if possible:

        default-linux/x86/2004.2/gcc34

        To upgrade do the following steps:

        # emerge -n '>=sys-apps/portage-2.0.51'

        # cd /etc/

        # rm make.profile

        # ln -s ../usr/portage/profiles/default-linux/x86/2004.2/gcc34 make.profile

```

 * 20050206: 紧急更新 - /usr/portage/profiles/gcc34-x86-2004.2/ 这一 profile 已经不再建议使用 (deprecated), 已更新为: /usr/portage/profiles/default-linux/x86/2004.2/gcc34

 * 20050129: 系统时间配置与安装内核源码部分完成

让你的 Gentoo 快若刀锋

- by Eric Hsu

一. 前言 - 我的兔兔历程

半年多前开始了我与兔兔的亲密接触. 以我一贯保守作风稳中求进的做法, 最初先是在 Fedora Core 上用 vmware 装成功一次 stage3, 接着一次 stage1 (装到 X 成功起来加上一个 Enlightenment), 然后以积累的经验大胆地往硬盘最后面的空闲分区里成功实装了一次 stage1, 这一次, 让我得以对兔兔进行较深入的摸索, 同时因为 FC 还在, 既不影响我正常的工作学习, 又能有个参照对象, 以便我逐一确认 FC 下我的需求在兔兔里都能满足. 

在确认兔兔足以完全取代 FC 之后, 我开始了大迁移 - 彻底转向兔兔. 于是 2004 年 05 月 31 日 17:57 stage1 开始, 装到 2004 年 06 月 02 日 18:33 完成一个基本可用的系统, 其间做了大量手写的笔记, 包括每一步骤及其耗时, 每一个遇到的问题及其解决办法, 每一个软件包的安装/卸载, 每一个配置的变动/更新... 

这一次的 stage1 安装, 让我一直使用到了十一月底, 累积的笔记达到 25 页 A4 纸. 经验的积累与知识的扩张让我一直心痒痒想把其间学到的点滴经验与知识来一次大整合. gf 的要求与我对 QQ 游戏泡泡大战的需求成了这次重装的契机: 我要把 XP 弄回来, 更重要的是 - 我要打造一个在我现有硬件基础上最为 bleeding edge 的兔兔!

于是我开了这个帖子, 向 gentoo 论坛上的人们逐一请教, 探讨, 试验并解决了数个问题. 在最后一个关于分区方案的问题被解决之后, 时机成熟, 我开始了全面刻盘备份... 

2004 年 12 月 05 日 13:44, 这次旨在打造最为 bleeding edge 的兔兔的 stage1 安装开始了...

前言小结:

如果你现在还是其他发行版的用户, 而你又对兔兔跃跃欲试, 不妨参考我的稳中求进的做法:

 用虚拟机装成功一次 stage3

 在 stage3 成功经验的基础上, 用虚拟机成功安装一次 stage1

 在虚拟机成功安装 stage1 的基础上, 往硬盘的空闲分区实装一次 stage1, 并与你原有系统双启动. (注意, 为了避免任何数据丢失的惨剧发生, 请务必在实装前, 彻底备份你原系统里的所有重要数据! 因为在进行 fdisk 分区或 mkfs 格式化分区时, 任何一个字符打错, 有可能就让你原有分区彻底丢失, 或是指向错误设备, 格式化掉了存有重要数据的分区 - 例如你把 /dev/hdd5 打成 /dev/hda5...)

 利用此次实装对 gentoo 进行方方面面探索, 等你觉得确实了解 gentoo 了, 则可以考虑彻底往 gentoo 迁移.

(成功的标准可以定在: 让 X 起来, 毕竟这是桌面应用的基础. 当然, 你可以选择别的标准)

随时准备着把同一件事情再做一次, 因为那时你一定可以做得更好!

二. 正题 - 打造快若刀锋 (bleeding edge) 的 gentoo

. 目标:

(1) 合理的分区结构

(2) 使用目前本星球上最快的 Reiser4 文件系统

(3) 以 gcc 3.4 编译整个系统, nptl 支持

(4) Utopia: udev, hotplug, dbus, hal, gnome-volume-manager.

. 敬告:

请做好心理准备, 要打造快若刀锋的 gentoo, 我们需要用到很多刀锋级别的东西, 像最新的技术, 最新的软件包, 这同时意味着我们肯定会遇到很多的问题 (有些很可能别人都没遇到过的). 因此, 在跟随本贴前, 请确认你的心脏不会太弱, 且有足够的勇气, 耐性与准备去面对可能的困难, 且要有自己解决问题的能力. 怕被刀割伤的话, 那就不要玩刀  :Wink: 

不过呢, 至少你可以比我幸运一点, 因为我已经在前面给你死过一次了. 跟着我, 至少我能让你不至于死得像我那么难看  :Laughing: 

 准备工作

 分区方案

	这是一个很大的话题, 从来没有一个方案是万用的 (如果不算 /boot, swap, / 方案在内的话). 要获得最符合你需求的分区方案, 需要的是对 *nix 系统的理解与经验的积累. 

	现在我仅以桌面应用为标准, 以及我的经验, 就分区方案给出如下个人建议:

 分区越少越好

		也许你已经读过 Gentoo Handbook: Designing a Partitioning Scheme 又或是 tldp: Linux Partition HOWTO. 你可能也和曾经的我一样迷惑于分区方案的设计... 在这里和仍旧迷惑的你说一声: 只有在 mission critical (任务繁重) 的服务器上才有考虑设计分区方案 (比如单独给出 /var, /tmp 分区) 的必要! 作为桌面用户, 请 KISS (Keep It Simple, Stupid!)  :Wink:  且, 据知, 当只有一个分区时, 最频繁读/写的区域最终会自动集中到硬盘上最为临近的物理区域, 利于提高硬盘读/写的效率. 而分区多时, 就没有这个好处. 详细讨论可以看这个帖子: Quick Question: partition schema for a 60G disk? [done]

 单独给 /home 一个分区

		你一定会有重装系统的时候, 把 /home 单独分区, 就可以一口气格掉系统分区而不用担心自己 /home 里的数据/设置的备份问题. 重装系统后, fstab 里挂载回 /home 分区, 马上回到自己原来就配置好的, 熟悉的环境, 而无须一切从头.

	因此, 一般而言, 有四个分区足矣: /boot, /, swap, /home

	下面说说分区格式与大小的问题:

 /boot

	ext2, 10M 足矣, 但是实际没法划那么小的分区, fdisk 里 +10M 的话, 最终出来大小大概是 16M.

 /

	reiser4, 10G 足矣, 一个 gentoo 系统有 2G 左右就功能很全了. (Redhat/FC 这类预装了好多东西的系统不过也就 2G 多, 何况你完全可以定制的 gentoo). 之所以给到 10G, 那是我积累出来的经验, 我上个系统用了半年, 堆了一大堆东西 (尤其是 /usr/portage/distfiles 下面全是源码包), 全算在一起也不过用了 8.5G (注意, 系统本身大小还是 2G 左右, 其他空间是被非系统的数据所占).

 swap

	如果你的内存 512M 或以下, 那就老规矩吧, 内存大小 x2 就是 swap 大小, 如果你的内存有 1G, swap 就不必 x2 了, 给个 256M 或 512M 估计就 OK, 我只有 256M 内存, 因此 1G 或以上的内存最合适给多少 swap 那就需要有经验的朋友给建议了  :Wink: 

 /home 

	根据你的需求给大小. 如果你打算把重要数据放在 /home, 那么请使用岩石般稳定 (rock solid) 的 ext3 文件系统, reiser4 毕竟刚出, 拿自己的数据冒险没必要. 如果你非要像我一样 /home 也使用 reiser4 (我有时会以个人用户帐号在 /home 里装一些应用软件以保持系统本身的 "干净", 我又希望这些软件有最好的性能, 因此用 reiser4), 那建议你也和我一样, 再单独划一个 /data 分区, 且在 /data 分区里使用 ext3. 总之, 要保留重要数据的分区一定使用 ext3 这类稳定的文件系统, 要性能, 也不在乎出问题的地方, 那就直管用 reiser4!

	下面是我的分区方案, 以下的步骤中涉及分区的部分都以此为参照:

```

/dev/hda1      /boot          10M       ext2

/dev/hda2      (For winxp)    5G        NTFS

/dev/hda3      /              10G       reiser4

/dev/hda4      extended

/dev/hda5      swap           512M      swap

/dev/hda6      /home          3G        reiser4

/dev/hda7      /data          2G        ext3

/dev/hda8      /share         20G       fat32

/dev/hda9      (空闲空间以备将来使用, 例如可以用来作 stage4 备份的测试)

```

	解释: /boot, winxp 分区, /, swap, /home 我就不说了, 前面都解释过了. 我说说 /data, /share, 以及 /dev/hda9 的考虑:

 /data

	顾名思义, 就是我专门存放重要数据的分区. 包括自己的项目数据, 系统配置文件的定期备份等等. 因为我的 /home 分区为了一些非 portage 的软件有最好的性能, 已经用了 reiser4 了, 因此不宜在 /home 里放重要数据. 所以, 我单独划出一个 /data 分区, 然后使用超稳定的 ext3 文件系统, 以存放重要的数据.

 /share

	很间简单的考虑, 方便 linux 中的用户之间, 以及 linux 与 windows 之间的数据共享. 比如我里面就放了 n 多的 mp3.

 /dev/hda9

	现在大家的硬盘都大了 (我的两年多前买的 60G), 留下一块空闲的空间是值得考虑的一件事情, 因为有一天你说不定就需要它! 比如我, 这个空闲分区整 20G, 迄今为止, 它至少为我作出过 3 个贡献: 

 我的 stage4 备份的测试场地: 把整个系统打包, 然后解压到这里, 设置 grub, fstab, 从这里启动以确认系统的 stage4 备份是成功的.

 目前存了 n 多电影

 前些天算是救了我一次: 我用最近的 2.6.10-nitro4 内核, 这个版本的 nitro 有个不小的问题 (至少在我机器上), 就是关机时, "Deactivating swap" 步骤会卡在那里动不了. 那天情况出现, 我错误地摁了主机上的电源键数秒强制关机 (我应该按重启键就没事了!), 后来无法启动了. 因为强制关机导致 / 的 reiser4 文件系统出错, 需要重建文件系统 (--build-fs) 以修复. 由于我当时不清楚重建文件系统意味着什么, 我担心会把我的系统彻底毁了 (结果证明绝对不会! 只是当时不了解, 所以自然有疑虑). 于是, 我一贯的谨慎作风又来了: 做任何有潜在危险 (或不清楚/没把握) 的事情之前一定要做足安全措施 - 备份! 可是, 作为一个文件系统已经出错的分区, 当时是连 mount 都不行了, 唯一的备份方式就是 - 用 dd 把整个分区弄出来. 我的 / 足有 10G 大小, 这时大小为 20G 的 /dev/hda9 就发挥作用了, 我赶紧把一些电影删掉, 腾出 11G 多的空间, 把 / 整个 dd 到 /dev/hda9 里的一个文件中, 如此备份完毕之后, 我再安心地对原来的 / 进行文件系统的修复. 很幸运, 修复后一切正常 (当然还有个小问题, 现在 /lost+found 目录下有些奇怪的文件无法删除, reiser4 的一点问题吧, 目前考虑有时间的时候就打包整个系统, 重新格式化 /, 然后把系统解压回去). 所以, 如果遇到这种要备份出 10G 东西的情况, 没有一个足够大小的空闲分区时, 你会理解什么叫头疼的  :Smile: 

 获取并刻录一张支持 reiser4 的 LiveCD, 然后以它启动

	我使用的是 lxnay 的 Gentoo Minimal Reiser4 LiveCD

 创建与挂载分区

```

# mke2fs /dev/hda1

# mkfs.reiser4 /dev/hda3

# mkfs.reiser4 /dev/hda6 

# mke2fs -j /dev/hda7

   

# mkswap /dev/hda5

# swapon /dev/hda5

   

# mount /dev/hda3 /mnt/gentoo

# mkdir /mnt/gentoo/boot

# mount /dev/hda1 /mnt/gentoo/boot   
```

 解压安装文件 (将创建系统目录树, 包括 /proc 与 /home)

```

# cd /mnt/gentoo

(通过 link2 获得 stage1 压缩包)

# tar -xvjpf stage?-*.tar.bz2

(解压完之后可以把 stage1 压缩包删除或是移动到别的目录下保存 - 尽管意义不大)

   
```

 挂载其他分区

```

# mount /dev/hda6 /mnt/gentoo/home

# mount -t proc none /mnt/gentoo/proc

   
```

 配置 make.conf (包括: CFLAGS, LDFLAGS, USE, MIRROR...)

	/etc/make.conf 中的 CHOST, CFLAGS (CXXFLAGS), LDFLAGS 都可以控制对系统的优化, 具体的解释在很多文档里都可以找到, 在这篇帖子里, 我只给出一些大家就算不理解也可以快速开始的设置, 记住, 要最终能够打造出最符合自己需求的系统, 不是装一次 gentoo 就有的. 关键是有个开始, 如同编程里的一句名言: make it work first, then make it fast (先让你的兔兔动起来, 然后再让它跑快 :Smile:  )

 CHOST - 如果你是 2002 年之后买的机器且没挨骗的话, 那肯定比我的新, 我的都是 CHOST="i686-pc-linux-gnu" 了, 你的也应该是这个值了  :Wink: 

 CFLAGS - 在 -march=[你的 cpu 类型] 的基础上, 使用 "-O3 -pipe -fomit-frame-pointer" 就够了, 如我的 cpu 是雷鸟的, 那么就可以这么开始: 

```

CFLAGS="-march=athlon-tbird -O3 -pipe -fomit-frame-pointer"

   
```

 CXXFLAGS:

```

CXXFLAGS="${CFLAGS} -fvisibility-inlines-hidden"

   
```

 LDFLAGS 这个可以让程序启动得更快, make.conf 中并没有这个变量的设置, 我们可以自己添加到 CXXFLAGS 的下面, 请从下面的值开始:

```

LDFLAGS="-Wl,-O1"

   
```

	注意: "-Wl" 中是小写的英文字母 "l" 而不是数字 "1" (一), 而 "-O1" 中分别是大写的英文字母 "O" 和数字 "1" (一).

 USE - 在系统默认的基础上, 记得要加上的有 "cjk nls nptl nptlonly"

 ACCEPT_KEYWORDS="~x86", 这样我们就能装几乎是最新的软件了 (呵呵, 更新的还有 -* 的, 如果你喜欢给自己找问题的话  :Wink:  )

 获取软件包的镜像服务器列表, 以下是我自己用的, 速度都很好, 台湾的 ntcu.net 尤其快:

```

GENTOO_MIRRORS="ftp://linux.ntcu.net/dists/gentoo/ http://www.zentek-international.com/mirrors/gentoo/ http://gentoo.ccccom.com http://mirror.tucdemonic.org/gentoo/ http://gentoo.math.bme.hu http://gentoo.inode.at/ http://gentoo.mirrors.pair.com/"

   
```

 用以 emerge sync 同步你的 portage 树的服务器, 用下面这个亚洲的, 连接后会重定向到位于亚洲的一些服务器, 有几个台湾和日本的服务器超快:

```

SYNC="rsync://rsync.asia.gentoo.org/gentoo-portage"

   
```

 MAKEOPTS="-j2"

	make.conf 的配置是一个不小的话题, 这里仅提供给新手 (或者懒人) 一个藉以开始的基础, 更优化的设置一定存在, gentoo 论坛里的讨论也很多. 刚接触 gentoo 的朋友不必急于求成要让自己的 gentoo 一开始就多猛, 关键先让它在一定的优化条件下 (上面已经包含优化了, 只是没到极致, 极致的优化是每台机器都不同的) 顺利跑起来, 随着经验的积累和知识的丰富, 你一定可以把自己的兔兔修炼至完美!

	参考链接:

 Gentoo 手册中关于 /etc/make.conf 配置的章节

 Gentoo 手册中关于 USE 配置的章节

 几种常见 cpu 的 "安全" 以及 "最大" 优化的 CFLAGS 设置

 Gentoo 论坛中关于 LDFLAGS 的讨论

 网络: 拷贝 DNS 信息

```

# cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf

   
```

 安装系统

 切换到你的新系统中

```

   # chroot /mnt/gentoo /bin/bash

   # env-update && source /etc/profile

   
```

	注: 安装过程中随时可以在一些步骤中中断, 任何时候需要重新继续之前的步骤, 只需重复如下动作:

 挂载各个分区 (如第一部份准备工作中的挂载分区步骤)

 重新执行如上的 chroot 命令与 env-update 命令

 继续你之前中断的步骤

 获得最新的 portage 树

```

# emerge sync

   
```

	注: 由于你的系统上暂时没有 portage 树, 因此在运行 emerge 命令时可能会看到一些警告信息, 忽略即可. 在 emerge sync 完, 系统中有了完整的 portage 树之后, 这些警告信息自然消失.

 使用 gcc34 profile 以让整个系统使用 gcc 3.4 来构造!

```

# unlink /etc/make.profile

# ln -sf /usr/portage/profiles/default-linux/x86/2004.2/gcc34 /etc/make.profile

   
```

	这是让系统 bleeding edge 的重要步骤之一. 最新的 2004.3 默认的 profile 是否使用 gcc 3.4 来构造整个系统我并不清楚, 但是, 使用 gcc34-x86-2004.2 profile 则一定是使用 gcc 3.4 来编译所有东西.

 处理 gcc-config 会带来的问题

```

# emerge --oneshot --nodeps gcc-config

   
```

	相信是 2004.3 stage1 安装文件中的一个 bug. 其所带的 gcc-config 有问题, 这将导致在系统自举 (bootstrap) 时遇到如下错误:

 自举到 gcc 3.4.3 完成后会自动运行 gcc-config, 这时会看到:

```

/usr/bin/gcc-config: profile does not exist or invalid setting for /etc/env.d/gcc/i686-pc-linux-gnu-3.4.3 

      
```

 随后, 自举继续进行, 将看到:

```

* Checking gcc for __thread support ...no

 . Could not find a gcc that supports the __thread directive! - Please update to gcc-3.2.2-r1 or later, and try again

 !!! ERROR: sys-libs/glibc-2.3.4.20041102 failed!

 !!! Function check_nptl_support, Line 178 Exitcode 0

 !!! No __thread support in gcc!

      
```

 自举中断, 这时在命令行运行 gcc 将看到:

```

# gcc

gcc-config error: Could not run/locate "gcc"

      
```

	其实这都是因为那个有问题的 gcc-config 造成这些错误. 在最新的 gcc-config 中已经解决这一问题, 因此我们只需在系统自举之前运行上述命令以更新到最新的 gcc-config 来避免问题重现.

 系统自举 (bootstrap. 耗时约: 01:40)

```

# cd /usr/portage

# scripts/bootstrap.sh

   
```

 emerge system 期间会出现的问题及其解决办法 (emerge system: 耗时约: 02:25)

	在我们继续 emerge system 之前, 请先运行:

```

# emerge --oneshot "=automake-1.5"

# emerge --oneshot "=automake-1.4_p6"

# emerge --oneshot "=automake-1.8.5-r2"

# emerge --oneshot "=automake-1.6.3"

# emerge --oneshot "=automake-1.7.9"

   
```

	然后再:

```

# emerge system

# env-update && source /etc/profile

   
```

	在 emerge system 时, 某个 (或多个?) 旧版本的 automake 是必须的 (在 emerge coreutils 过程中要用到), 可能是因为 gcc34 profile 太新的关系, 这个 (些?) 版本的 automake 并未安装进来, 这将导致 emerge system 到 emerge coreutils 时失败. 我当时并不清楚具体缺少哪个 (些) 版本的 automake, 在试图解决问题期间, emerge -Du --oneshot coreutils 深度升级 coreutils 时, 发现了以上几个版本的 automake 都会被安装进来. 但是, 注意, emerge -Du --oneshot coreutils 还是会在 emerge libtool 时失败, 这是由于 libtool 和 coreutils 之间有个恼人的循环依赖 (circle dependencies). 最终完美的解决办法就是: 在 emerge system 之前把几个版本的 automake 都一并装上, 其后将顺风顺水!

 设置系统时钟的技巧

	这是一个小麻烦. 可能不少人遇到过, 系统时间怎么折腾都有毛病. 下面这些步骤我都觉得有点郁闷, 不过, 按这些步骤弄完, 系统时间应该就正常了. 如果你有更好的解决方法, 一定要记得共享哦  :Wink:  首先我们按手册里的方法把时区设置好, 这里用了 Chongqing, 没关系, 全中国都是一样的时间:

```

# ln -sf /usr/share/zoneinfo/Asia/Chongqing /etc/localtime

# date

   
```

	date 命令这时给出的时间肯定不对. 为什么? 因为系统启动时默认的系统时间 (注意和硬件时间分开) 是 UTC 的 (也就是格林威治标准时间 - 说错没??), 在我们把 localtime 指向 Chongqing 之后, 系统就以当前的 *它以为的* UTC 时间为基础, 加上 (或减去?) Chongqing 时区和它之间的时差, 于是得到一个错误的时间. 但是呢, 主板上的硬件时间却还是正确的:

```

# hwclock --show

   
```

	这时我们把正确的硬件时间同步回系统时间:

```

# hwclock --hctosys

   
```

	接着编辑系统的时间设置为本地 (local) 时间而非 UTC 时间:

```

# nano -w /etc/conf.d/clock

(将 CLOCK="UTC" 改成 CLOCK="local")

   
```

	但系统随后重启后时间还是不正常, 为什么了又? 这是因为, 系统最初启动时默认是认为自己在 UTC 时区的, 它启动的时候, 把正确的硬件时间同步到系统时间; 在我们把 local 指向 Chongqing 之后, 它以当前的 UTC 时间算出一个错误的时间 (如前面解释); 通过把正确的硬件时间再次同步回系统时间之后, 系统重启时候的关机阶段, 会反过来把系统时间往硬件时间上同步 - 问题就在这里出现 - 系统最初启动是以 UTC 时区来设定系统时间的, 它关机的时候也还是认为自己在 UTC 时区 (尽管时间显示正确)! 于是, 它在把目前正确的系统时间往硬件时间上同步时, 就又算了一次, 这回就把硬件时间弄错了... 启动后再从硬件时间同步回系统时间, 自然也是错... 这时, 由于我们改过 /etc/conf.d/clock 了, 因此系统启动后是正确地认为自己在 Chongqing 时区了, 所以, 我们只需这个时候把系统时间和硬件时间都校准了, 就不会再出现 "瞎计算" 的情况了. 注意: 出于逻辑的连贯性, 我把下面的步骤写在这里了, 实际上, 我们应该在装完内核配置完用户等步骤完成之后, 系统重启了, 才执行下面两个命令来更改系统时间

```

# date 120610092004

# hwclock --systohc

   
```

 安装内核

用兔兔的一大好处是可供选择的东西多极了! 真正满足我们打造度身定造自己的系统的需求! 之前的步骤让我们有了一辆跑车应有的最好的一些重要零部件了, 下面我们要为这辆兔兔牌超级跑车选择一个超级引擎 - 选择一个最适合桌面应用的内核! 

我曾是 nitro-sources 的用户, 不过, 后来的 2.6.10 的 nitro 系列让我的系统出了毛病, 踌躇间瞥见 morph-sources, 一试, 哇! 真不错! 而且 morph-sources 的作者 yardbird 非常乐于回答问题和解决问题, 这便是我现在很喜欢 morph-sources 的最大理由 :Smile:  下面就以 morph-sources 为例, 说说如何使用不在官方 portage 里的软件包.

 首先到这里获得 morph-sources 的 ebuild 和 patch

 创建/使用 portage overlay

 编辑 /etc/make.conf, 确保设置了如下变量:

```

PORTDIR_OVERLAY=/usr/local/portage

      
```

 创建给 morph-sources 使用的目录:

```

# mkdir -p /usr/local/portage/sys-kernel/morph-sources/

      
```

 将我们刚才下载的 morph-sources 的 ebuild 放到上面的 morph-sources 目录里, 将下载回来的 patch 放到 /usr/portage/distfiles 里, 并运行如下命令:

```

# ebuild /usr/local/portage/sys-kernel/morph-sources/morph-sources-[版本号].ebuild digest

      
```

 一切顺利的话, 这时就可以开始安装 morph-sources 了!

```

emerge morph-sources

      
```

 安装完 morph-sources 内核源码后, 接下来要进行配置/编译/安装内核, 配置内核是一个让新手们比较不爽的步骤, 随后我会在这帖子里简要说说, 或者再有更多时间的话, 我或许会开个新帖说一个主题: 编译内核时哪些选项是可以不要的 - 相信这个对于想获得一个超精简内核的你会有吸引力吧!  :Wink: 

 配置/编译/安装内核

```

# cd /usr/src

## 创建指向当前内核源码目录 (以我装的 morph-sources 版本为例) 的 linux 符号链接 (安装显卡驱动时需要用到内核源码)

# ln -s linux-2.6.10-morph15 linux

# cd linux

# make menuconfig

# make && make modules_install

## 如果之前未曾挂载 /boot 分区, 那么就

# mount /dev/hda1 /boot

## 把编译好的内核与 System.map 拷到 /boot 分区里 (建议使用版本号, 避免误覆盖!)

# cp -i arch/i386/boot/bzImage /boot/kernel-2.6.10 (你喜欢叫它啥名字都可以, 到时在 grub.conf 中配置好就行)

# cp -i System.map /boot/System.map-2.6.10

   
```

 安装内核模块/Utopia

```

# emerge udev

# emerge hotplug && rc-update add hotplug default

## coldplug 原来是 hotplug 的一部分, 现在独立出来, 负责自动加载非热插拔硬件 (如显卡/声卡/网卡/USB 口/串口...) 的内核模块

# emerge coldplug && rc-update add coldplug default

## 安装 alsa 声卡驱动的工具

# emerge alsa-utils

## 编辑 alsa 配置以让内核加载针对你的网卡的驱动

# nano -w /etc/modules.d/alsa

## 更新刚才的配置到系统里

# modules-update

## 将 alsasound 服务添加到 boot 运行级别 (alsasound 服务负责关机时保存系统的声音设置, 开机时读取声音设置)

# rc-update add alsasound boot

## 装显卡驱动

# emerge nvidia-kernel

```

 安装/配置系统的其他部分

 配置文件系统信息: /etc/fstab (以我的分区为例)

```

/dev/hda1               /boot           ext2            noauto,noatime         1  1

/dev/hda3               /               reiser4         noatime                0  1

/dev/hda5               none            swap            sw                     0  0

/dev/hda6               /home           reiser4         noatime                0  2

none                    /proc           proc            defaults               0  0

none                    /dev/shm        tmpfs           defaults               0  0

   
```

 配置网络信息

```

## 编辑主机名

# nano -w /etc/conf.d/hostname (设置 HOSTNAME 变量, 例如我的 gentux)

## 编辑域名 (domain name)

# nano -w /etc/conf.d/domainname (设置 DNSDOMAIN 变量, 例如我的 nkbit.com - 瞎叫的, 这域名不存在哦)

   
```

	光有上面的设置不够的, 大家看看自己系统终端的登录提示里有没有这样的东西 "gentux.(none)" "gentux.unknown_domain" (以我的主机名 gentux 为例)? 如果有 "(none)" "unknown_domain" 字样, 说明没配置好. 我们只需再做一步就可以正确显示成如我的 "gentux.nkbit.com":

```

# nano -w /etc/hosts

   
```

	然后往里面设置这么一行 (仍以我的为例, 爱叫什么名字, 自己替换吧~):

```

127.0.0.1       gentux.nkbit.com        gentux  localhost

   
```

	或者, 写成两行, 效果也一样:

```

127.0.0.1      localhost

127.0.0.1      gentux.nkbit.com        gentux

   
```

	下次登录前看看主机名, 域名对不对吧!

 安装/配置系统启动器 (以 grub 为例, 具体看手册)

```

# emerge grub

# grub

# nano -w /boot/grub/grub.conf

   
```

 安装系统工具

```

## 系统日志记录器

# emerge syslog-ng && rc-update add syslog-ng default

## Cron 守护进程, 定时执行任务必须. 比如定时 updatedb 以方便 locate 命令寻找文件

# emerge vixie-cron && rc-update add vixie-cron default

## 文件系统工具

# emerge reiser4progs

## 可选: 网络工具 - 如果你象我一样 adsl 上网的话

## 前两步: -X, -gtk 一来避免为了这俩小工具把 X 装进来 (太耗时), 二来确实不需要这些支持

# echo "net-dialup/rp-pppoe -X" >> /etc/portage/package.use

# echo "net-dialup/ppp -gtk" >> /etc/portage/package.use

# emerge rp-pppoe && adsl-setup

   
```

 修改 root 密码/添加日常用户 (如我的 eric)

```

# passwd

# useradd eric -m -G users,wheel,portage,audio,games -s /bin/bash

# passwd eric

   
```

	该帐号 eric 所在的几个用户组分别有如下作用: users - 普通用户组; wheel - 可以通过 su 获得 root 权限; portage - 可以执行一些 portage 的功能, 如查询, emerge -pv 软件包等, 而不必每次都切换到 root; audio, games - 听声音, 玩游戏.

 加上 pp 的 gensplash 启动画面

```

# emerge splashutils

# mount /boot (如果原来没挂载的话)

# splash_geninitramfs -v -g /boot/fbsplash-emergence-1024x768 -r 1024x768 emergence

# nano -w /boot/grub/grub.conf

   
```

	配置如:

```

default 0

timeout 30

splashimage=(hd0,0)/grub/splash.xpm.gz

title=Gentoo Linux 2004.3 (2.6.10-morph15-r1)

        root (hd0,0)

        kernel /2.6.10-morph15-r1 root=/dev/hda3 video=vesafb:ywrap,mtrr,1024x768-32@85 splash=silent,theme:emergence

        initrd (hd0,0)/fbsplash-emergence-1024x768

   
```

	其中关键就是 video, splash 参数和下面 initrd 那一行. 有谁可以告诉我 ywrap,mtrr 的含义? 谢谢先  :Wink:  而 1024x768-32@85 则意思是启动画面是 1024x768, 32 色, 85 Hz 刷新率 (我虽然这么设置了, 可我的 splash 从来没能超过 60 Hz, 有谁能告诉我怎么解决么? 挺郁闷的一个问题...); splash 那段则说使用 "安静" 的启动画面 - 隐藏启动信息, 只显示进度条, 主题为 emergence.

 搞定啦! 准备重启进自己折腾这么久装出来的兔兔!

```

# exit (退回 LiveCD 提供的环境 - 记得我们之前 chroot 进到了自己的环境不?)

# cd /

# umount /mnt/gentoo/proc /mnt/gentoo/boot /mnt/gentoo/home /mnt/gentoo

# reboot

```

如果你顺利重启, 顺利用之前创建的日常帐号登录, 你就顺利地缔造了自己的兔兔啦!! 那要是不顺利呢?? 呵呵, 把问题贴出来吧!

 还要干什么??

如果你是第一次接触 gentoo, 这时登录后发现只有终端界面, 只能敲字符... 你也许纳闷了: 这就完了?

当然不!

到目前为止, 虽然我把这篇口水多过茶的帖子写了这么久, 你也跟着被忽悠了这么久, 我们不过只装完了一个最小集合的 Linux 系统而已! 后面还有很多软件包需要我们根据自己的需要去安装/定制, 最终获得一个真正符合我们需要的系统. 

这个帖子的定位既然是桌面系统, 那么, 我们下面就把 X 装上, 直接脱贫 (贫穷的终端界面) 致富 (丰富的图形界面) 奔小康 (漂亮的窗口管理器/桌面环境)...

一点小经验, xorg-x11 只需如下一些 USEFLAGS 就够了, 其他一律可以减去:

```

eric@gentux ~ $ emerge -pv xorg-x11

These are the packages that I would merge, in order:

Calculating dependencies ...done!

[ebuild   R   ] x11-base/xorg-x11-6.8.2  -3dfx +3dnow -bitmap-fonts +cjk -debug -dlloader -dmx -doc -font-server -hardened -insecure-drivers -ipv6 -minimal +mmx +nls +opengl +pam -sdk -sse -static +truetype-fonts -type1-fonts (-uclibc) -xprint +xv 0 kB

Total size of downloads: 0 kB

```

注意, 3dfx/3dnow 视你的 cpu 支持情况进行取舍; xprint 也看你要不要打印支持了, 我反正没打印机... 以上的 USEFLAGS 是俺多次安装/升级 xorg 精简出来的, 参考参考吧! 

在设置好 USEFLAGS 后 (别告诉我你还不会自己设置哦... 提示: /etc/make.conf 和 /etc/portage/package.use), 开装啦: (emerge xorg-x11: 耗时约: 01:49)

```

# emerge xorg-x11

```

装显卡的 glx 支持 (以 nvidia 为例):

```

# emerge nvidia-glx

```

配置 X:

```

# xorgcfg

```

xorgcfg 是一个比较方便新手 (象我!) 的 X 配置工具, 它会自己检测你的硬件配置, 直接启动到一个图形界面 (极丑的...), 然后咱就可以点鼠标来配置一份 xorg.conf 啦!

配置完之后, 试试启动 X 吧!

```

# startx

```

没起来? 自己找找原因! 实在解决不了就发帖  :Wink: 

在 X 顺利起来之后, 建议大家做一个 stage4 备份, 把现在这个最小的, 带 X 的系统打一个压缩包, 然后刻盘. 日后你如果想要重装系统, 就可以以这个 stage4 为起点, 省去很多步骤和时间!

最后, 选择你喜欢的窗口管理器/桌面环境/软件工具装吧! 

 革命尚未成功, 同志仍需努力!

就算我们把系统装好, 定制好了, 后面还有很多很多的知识值得我们去探索, gentoo 的魅力, 或说开源世界的一大魅力便在于此: 开放, 自由 - 我们可以根据自己的兴趣去深入自己喜欢的知识, 感受探索的快乐.

记得有个比喻: windows 就像 disney 乐园, 孩子们在大人们设置好的保护下玩着孩子们的安全的快乐; 而 unix/linux 世界, 则仿佛一座原始大森林, 这里充满了未知的新奇, 也不再有因保护而形成的束缚, 这里是真正的探险家们的天堂!

gentoo linux 在众多 liux 发行版中是有最多东西可以供我们探索的 (当然, 还有据说更猛的 LFS, hehe).

用自己的一点小心得来结束这篇帖子吧:

 做好安全措施! 在进行任何你不确定的活动时, 一定要备份好数据, 做一个负责任的男人!  :Twisted Evil: 

 别怕犯错, 别完美主义 - gentoo 论坛上有个人的签名档里的一段话说得很好: 

 *Quote:*   

> 
> 
> if i never try anything, i never learn anything..
> 
> if i never take a risk, i stay where i am..
> ...

 

"完美" 是在犯错的过程中逐步减少出错率的一个过程!

 随时准备把同样的事情再做一遍! 第二次做同一件事, 你一定能做得更好!

帖子里有什么错误/不当, 或你希望我扩展的部分, 请跟帖指出/说明!

谢谢你的对兔兔的热情与对我这篇帖子的热心! 希望这帖子能成为你与兔兔结缘的一点小小推动!  :Very Happy: 

随后我还会陆续写其他帖子 (只要有时间), 计划中包括:

 打造最精简的内核

 中文相关问题 (包括中文显示/输入, 软件的中文问题... 用洋文写给外国朋友, 问这方面问题的不少...)

 ... (大家还想了解关于兔兔的什么??)

-----

Log:

- begin.200412161600 - break.200412161650

- continued.200412162108 - break.200412162121

- continued.200412171153 - break.200412171241

- continued.200412232051 - break.200412232256

- continued.200501012125 - break.200501012238

- continued.200501152116 - break.200501152210

- continued.200501292141 - break.200501292241

- continued.200502152145 - break.200502152251

- continued.200502160850 - break.200502161105

----------

## Hauser

稍微看了下你有關分區的帖，有一點想說的是XP裝到延伸分區是沒問題的。  :Smile: 

能不能讓我看看fdisk顯示的hda4，即你的延伸分區，的類型？

----------

## EricHsu

 *Hauser wrote:*   

> 稍微看了下你有關分區的帖，有一點想說的是XP裝到延伸分區是沒問題的。 
> 
> 能不能讓我看看fdisk顯示的hda4，即你的延伸分區，的類型？

 

我那首帖里就给了当时的分区状况, 我当时是想往 /dev/hda15 上装 xp, 我试过用 fdisk 把 /dev/hda15 改成 fat32, ntfs, xp 始终拒绝往上面装... 我还试了在 bios 里设置了 LBA, 结果同样, 所以我现在把它给装在了 /dev/hda2 上, 总算老实了  :Wink: 

----------

## Hauser

這是我的fdisk有關的顯示結果：

```
/dev/hda2   *        1028       13103    97000470    f  W95 Ext'd (LBA)

/dev/hda5            1028        2054     8249346    7  HPFS/NTFS
```

----------

## EricHsu

我当时的是:

```
/dev/hda2              14        7299    58524795    5  Extended 

```

莫非因为这个造成 xp 拒绝往上装?

如果我当时用 fdisk 把整个 extended 分区的类型改成如你的, 会对我 extended 分区里的各个逻辑分区造成影响么?

另, xp 有无 1024 柱面限制? 能把你完整的分区状况贴出来看看么? Thanks  :Smile: 

----------

## Hauser

我都在猜是你建立Extended分區的時候用的分區類型可能不對。

 *EricHsu wrote:*   

> 如果我当时用 fdisk 把整个 extended 分区的类型改成如你的, 会对我 extended 分区里的各个逻辑分区造成影响么?

 

你指哪方面的影響？這是我的分區表：

```
Device Boot      Start         End      Blocks   Id  System

/dev/hda1               1        1027     8249346    c  W95 FAT32 (LBA)

/dev/hda2   *        1028       13103    97000470    f  W95 Ext'd (LBA)

/dev/hda3           13104       13997     7181055   83  Linux

/dev/hda4           13998       15017     8193150   a5  FreeBSD

/dev/hda5            1028        2054     8249346    7  HPFS/NTFS

/dev/hda6            2055        3081     8249346    b  W95 FAT32

/dev/hda7            3082        5193    16964608+   b  W95 FAT32

/dev/hda8            5194        5447     2040223+  82  Linux swap

/dev/hda9            5448        9271    30716248+  83  Linux

/dev/hda10           9272        9283       96358+  83  Linux

/dev/hda11           9284       10328     8393931   83  Linux

/dev/hda12          10329       11857    12281661   83  Linux

/dev/hda13          11858       13103    10008463+  83  Linux

```

XP當然不受1024 柱面的限制啦，我的已經是從1028開始的了！  :Smile: 

----------

## tecehux

能不能先把“快若刀锋”的部分完成啊？安装是早就安装好了，只是想看看怎么能优化一下

----------

## &#22771;&#22771;

希望看到详细步骤.

我也有些想重装,主要是使用了nptl后mono用不成了,together for eclipse装不了说没找到libc.so.6,我只到看libc.so.6,我想应该是gcc3.4才有吧.

为什么gentoo默认不用gcc3.4呢?怎么开启?

----------

## ts

 *壳壳 wrote:*   

> 为什么gentoo默认不用gcc3.4呢?怎么开启?

 

升级你的 gentoo 到 2004.3，默认就是。

----------

## ts

 *EricHsu wrote:*   

> 前言小结:
> 
> 如果你现在还是其他发行版的用户, 而你又对兔兔跃跃欲试, 不妨参考我的稳中求进的做法:
> 
> 1. 用虚拟机装成功一次 stage3
> ...

 

一般而言，对双系统，不需要太小心太稳，有 bootable CDs 随时挽救。对 linux，可备份一些 /boot or /etc 下的文件，如 fstab, 为偷懒时准备；对 winXP，备份一下 windows/system32/config 下的所有文件即可确保安全，这比备份注册表要简洁明了。

----------

## EricHsu

 *Hauser wrote:*   

> 我都在猜是你建立Extended分區的時候用的分區類型可能不對。
> 
> 

 

嘿嘿, 我当时是用 fdisk 进行分区的哦, 扩展分区的默认类型就是 "Extended" 嘛, 肯定不会是 "W95 Ext'd"... "不对" 呢, 呃, 从 windows 的 "标准" 而言就确实是  :Laughing: 

 *Quote:*   

> 
> 
> 你指哪方面的影響？這是我的分區表：
> 
> ```
> ...

 

你的分区表好奇怪啊, 按照分区标准 (一时找不到相关链接...), hd?1 ~ 4 应该都是预留给 primary 分区的, 接着扩展分区 (extended) 是从 1 ~ 4 当中任何一个里取出来, 然后再在扩展分区里给出从 hd?5 起算的逻辑分区 (logical).

看我现在的:

```

   Device Boot      Start         End      Blocks   Id  System

/dev/hda1               1           2       16033+  83  Linux

/dev/hda2   *           3         611     4891792+   7  HPFS/NTFS

/dev/hda3             612        1828     9775552+  83  Linux

/dev/hda4            1829        7299    43945807+   5  Extended

/dev/hda5            1829        1891      506016   82  Linux swap / Solaris

/dev/hda6            1892        2257     2939863+  83  Linux

/dev/hda7            2258        2501     1959898+  83  Linux

/dev/hda8            2502        4934    19543041    b  W95 FAT32

/dev/hda9            4935        7299    18996831   83  Linux

```

hda1 ~ 4 为 primary 分区, 其中 hda4 成为包含了 hda5 ~ hda9 这些逻辑分区 (logical) 的扩展分区 (extended).

```

hda1  hda2  hda3  [hda5  hda6  hda7  hda8  hda9]

                  +----------- hda4 -----------+

```

写到这里, 总算看明白你的分区解构了, 整理出来应该是这样:

```

hda1 [hda5 hda6 hda7 hda8 hda9 hda10 hda11 hda12 hda13] hda3 hda4

     +--------------------- hda2 ---------------------+

```

我现在想知道一个问题, 你在把 xp 安装到 /dev/hda5 上时, /dev/hda1 (类型为 W95 FAT32) 里是否已经有另一个 windows? (你现在是几个系统呢?) 如果你在安装 xp 的时候, /dev/hda1 里已经有个 windows, 那么 xp 安装时似乎可以把数据先放到 /dev/hda1 里, 然后把自己装到 /dev/hda5 里... 而我当时的情况与此不同, 我想让 xp 装上去的 /dev/hda15 之前的任何一个分区都是非 "windows 兼容" 的, 所以 xp 一直报怨说我的硬盘上没有它能容身的地方...

另外, 我说的 "影响" 是指, 如果现在用 fdisk 把你的 /dev/hda2 的类型从 W95 Ext'd 改成如 Extended, 会不会影响到它里面的 hda5 ~ 13 这些逻辑分区? 比如造成这些逻辑分区的消失? 数据的丢失? 

 *Quote:*   

> 
> 
> XP當然不受1024 柱面的限制啦，我的已經是從1028開始的了！ 

 

我是指 xp 的安装程序有没有这个限制... 1024 柱面不是意味着物理意义上的 1 ~ 1024 柱面以内哦, 它实际意思是:

以 Linux 为例 (回到以前还受 1024 柱面限制的时候), 最普通的情况, 我们把 /boot 放在 /dev/hda1,  启动时, bios 把启动任务交给 MBR 上的 lilo 之后, lilo 就开始找自己的程序体 (/boot) 里面, 它一下子就在 /dev/hda1 里找到了, 于是启动正常.

但是, 如果这时我们把 /boot 给放到某个 1024 柱面 (从 lilo 所在地 MBR 算起, 也就是大概 8 G 大小) 之后的某个分区里 (比如 /dev/hda15), 这时 lilo 就无法找到自己的程序体, 于是启动失败.

还有一种情况, 我们可以不用把 lilo 安装到 MBR, 而把它安装到 Linux 所在系统盘的第一个扇区里, 例如上面情况里的 /dev/hda15 里的第一个扇区. 这时系统的启动当然需要第三方的启动软件: 首先由 bios 交给驻留在 MBR 的第三方启动软件, 然后该软件把任务交给这时驻留在 /dev/hda15 上第一扇区里的 lilo, lilo 开始往后面找自己的程序体, OK, 立刻找到了, 于是系统同样正常启动!

也就是说, 所谓 1024 柱面的限制, 指的是启动程序的启动信息与自己程序体之间的距离必须在 1024 柱面之内, 或者这么说, 你的 lilo (或者 grub) 装在哪里, 那么就从哪里起算, 然后 +1024 柱面大小 (8 G 左右), 带有 lilo (或者 grub) 程序体的分区 (如果单独划了 /boot 就在 /boot 里, 如果没有单独划 /boot 就在 / 里) 必须在这个区间里, 否则无法启动. 

所以, 如果 lilo 的启动信息写在了 MBR, 那么 /boot 或者 / 就必须放在物理意义上的 1024 柱面以内 (因为从 MBR 起算 + 1024 柱面), 如果把 lilo 的启动信息写到了系统盘的第一扇区里, 则此时就算该系统盘早就从物理意义上远在 1024 柱面之外, 同样不影响 lilo 对系统的启动. 不过这时就要求第三方软件本身能找到并把任务交给身在 1024 柱面之外的 lilo 了, 哈.

不知道我说明白没有? hh

----------

## EricHsu

to tecehux

我会努力的, 因为版面本身的工作还不少 (有时还得处理一些不合发贴指引的帖子或者乱码贴...), 所以, 大家一是给我点时间耐心等等 (装 gentoo 本身就需要耐心 :Wink:  ) 另外则祈请大家对版面工作多支持, 务必看过发贴指引, 已了解发贴指引的朋友也多帮帮后来的朋友给他们以引导, 这样我们版面工作就轻松了, 就可以腾更多时间来为大家从技术上提供 service, 谢谢!

to 壳壳

libc.so.6 是 gcc 里应该都有的, 放在 /lib/libc.so.6 . 有些程序说找不到一些库文件, 是因为它们可能只针对某些发行版测试过, 那些发行版把一些库又放在了不一样的地方. 例如有些 gentoo 可能放在了 /lib/ 下, 而其他发行版则可能放在了 /usr/lib 里..

如果要整系统从最开始就使用 gcc34 来编译, 可能就得用 gcc34-x86-2004.2 这个 profile, 这个是经过我现在这个系统证实的  :Smile:  至于 2004.3 是否 bootstrap 就是使用 gcc34, 哪位使用 2004.3 从 stage1 装完的朋友确认一下? 谢谢!

to ts

呵呵, 因为我试过分区错误, 一下子丢了 20G 数据的惨痛经历, 所以我胆子很小. 其实最重要的东西还是日常积累出来的数据, 系统坏了大不了重装, 而你写的论文, 做的软件不是重装就能回来的, 一个 mkfs /dev/hdd5 错打成 mkfs /dev/hda5, 你的所有心血可能就付诸东流  :Wink: 

----------

## wangxiaohu

 *ts wrote:*   

>  *壳壳 wrote:*   为什么gentoo默认不用gcc3.4呢?怎么开启? 
> 
> 升级你的 gentoo 到 2004.3，默认就是。

 

除了升级Profile，好像还得把ACCEPT_KEYWORDS设置成~x86才可以吧？

唉，什么时候GCC 3.4才能进x86 stable呢？实在不想用改mask的方法，太恶心。

----------

## EricHsu

 *wangxiaohu wrote:*   

> 
> 
> 除了升级Profile，好像还得把ACCEPT_KEYWORDS设置成~x86才可以吧？
> 
> 唉，什么时候GCC 3.4才能进x86 stable呢？实在不想用改mask的方法，太恶心。

 

gcc34 在 ~x86 里, 不用 unmask  :Smile: 

另外, ~ARCH 不是说这个软件本身不 stable, 软件本身肯定已经是 stable 的, 只是它在和系统中其他部分合作时 *可能* 会有问题 (造成系统整体的非 stable), 所以才 ~ARCH.

桌面用户嘛, ~ARCH - 玩的就是心跳 "~"  :Wink: 

----------

## ts

 *wangxiaohu wrote:*   

> 除了升级Profile，好像还得把ACCEPT_KEYWORDS设置成~x86才可以吧？
> 
> 唉，什么时候GCC 3.4才能进x86 stable呢？实在不想用改mask的方法，太恶心。

 

应该不需要改 mask， AMD64 都没问题，我想 x86 就更没有问题了。我的 AMD64 是从 stage1 开始装的，用 GCC 3.4，是在 bootstrap 时默认的，所以如果你想要 GCC3.4 就务必从 stage1 安装。 Good luck!

----------

## &#22771;&#22771;

我把profile换成2004.3也不是gcc3.4啊?

而且我朋友是从2004.3装的,也是gcc3.3.4啊,难道只有AMD64是GCC3.4?

----------

## EricHsu

 *壳壳 wrote:*   

> 我把profile换成2004.3也不是gcc3.4啊?
> 
> 而且我朋友是从2004.3装的,也是gcc3.3.4啊,难道只有AMD64是GCC3.4?

 

如果希望整个系统都用 gcc 3.4 来构造, 使用 gcc34-x86-2004.2 profile 从 stage1 开始就可以, 所以我才写这个帖子 (虽然还没写完  :Wink:  )

----------

## &#22771;&#22771;

我用了gcc34-x86-2004.2.profile可是

emerge -p gcc时,还是显示gcc3.3.4,为什么?

是不是必须从头开始阿?

----------

## bookstack

有一些问题请教：

为什么boot要用ext2? 如果boot也用reiser4的话， 内核就不需要加载ext2的驱动了啊。

swap 的分法有待考虑。如果需要suspend2的支持的话，swap应该是Ram的 1.2倍。

/ 10G应该是不够的，如果要自己编译ooo的话。

强烈建议分一个 /opt出来，所有的不在portage里的应用都扔到/opt里去。包括像Matlab这样的商用程序，wine下面运行的windows应用。这样的好处就是如果重新作gentoo,portage里的东西都有，而且还有更新的版本，/opt里的东西也不用动了。

Hauser有空也写点东西出来阿，知道你在X／KDE上造诣很深的。

现在大多数轻快的DE都是用xfce4. 昨天试了一下，确实不错。但是KDE虽然bloating,但是所有的应用都是依赖qt, kdelibs的。xfce轻快，就希望所有的应用仅仅依赖gtk，——难阿，一堆的软件对gnome有强烈的依赖。Hauser能否说说KDE的优化？

----------

## wangxiaohu

 *EricHsu wrote:*   

>  *wangxiaohu wrote:*   
> 
> 除了升级Profile，好像还得把ACCEPT_KEYWORDS设置成~x86才可以吧？
> 
> 唉，什么时候GCC 3.4才能进x86 stable呢？实在不想用改mask的方法，太恶心。 
> ...

 

很可惜，我用的是P2 366的笔记本，没那么多Power每天Emerge，所以只能用x86了。

----------

## tecehux

 *Quote:*   

> 
> 
> 很可惜，我用的是P2 366的笔记本，没那么多Power每天Emerge，所以只能用x86了。

 

为什么不试试distcc呢？我的笔记本也弱的很，不过用distcc我可以同时用其它的机器带为笔记本优化的CFLAG来emerge

----------

## druggo

哥们，快点完成帖子吧！

我希望最好能完成了再贴上来……

----------

## Hauser

 *EricHsu wrote:*   

> 我现在想知道一个问题, 你在把 xp 安装到 /dev/hda5 上时, /dev/hda1 (类型为 W95 FAT32) 里是否已经有另一个 windows? (你现在是几个系统呢?) 如果你在安装 xp 的时候, /dev/hda1 里已经有个 windows, 那么 xp 安装时似乎可以把数据先放到 /dev/hda1 里, 然后把自己装到 /dev/hda5 里... 而我当时的情况与此不同, 我想让 xp 装上去的 /dev/hda15 之前的任何一个分区都是非 "windows 兼容" 的, 所以 xp 一直报怨说我的硬盘上没有它能容身的地方...
> 
> 

 

我裝xp的時候，hda1已經有個98了。嘻嘻，忘了考慮這個因素了。  :Embarassed: 

為了把問題搞清楚，我在vmware裡做了個實驗，fdisk建構的分區表是這樣的：

```
Disk /dev/hda: 12.8 GB, 12884901888 bytes

255 heads, 63 sectors/track, 1566 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System

/dev/hda1               1          73      586341   82  Linux swap

/dev/hda2              74        1095     8203545   83  Linux

/dev/hda3   *        1095        1107       98280   82  Linux

/dev/hda4            1107        1567     3694446+   f  W95 Ext'd (LBA)

/dev/hda5   *        1107        1472     2929941    7  HPFS/NTFS

/dev/hda6            1472        1567      764473+  83  Linux

```

hda1分了600M，hda2分8.4G，hda3分100M(作為/boot分區)，hda4為Extended分區(包含了hda5和hda6，並在1024 磁柱以後)。結果我嘗試安裝xp的時候碰到了EricHsu所講的問題，非 "windows 相容"，不給裝！  :Sad: 

結果我用fdisk吧hda3改成了c即'W95 FAT32 (LBA)'的類型。這一次可以裝了，當然XP的安裝程式要求要將hda3(C: )和hda5(D: )先格式化啦。裝完之後，xp可以正常使用，但是啟動檔案全裝到hda3里了。後來我又在hda2里裝了個hiweed linux，然後用Grub啟動兩個OS，都沒問題。

這樣我們可以看到兩點：1.xp 不受 1024 磁柱限制。2.xp雖然可以裝到extended分區裡，但一定要在某個primary的分區有個立足點才行(至少安裝程式有這樣的要求，不過就不知道可不可以用vmware的physical disk方式安裝到extended分區裡，誰有條件的話可以試一試)。

----------

## EricHsu

 *壳壳 wrote:*   

> 我用了gcc34-x86-2004.2.profile可是
> 
> emerge -p gcc时,还是显示gcc3.3.4,为什么?
> 
> 是不是必须从头开始阿?

 

看看你的 /etc/make.conf 里: ACCEPT_KEYWORDS 是不是等于 "~x86"?

----------

## EricHsu

 *bookstack wrote:*   

> 
> 
> 为什么boot要用ext2? 如果boot也用reiser4的话， 内核就不需要加载ext2的驱动了啊。

 

请参考此帖的讨论  :Smile: 

 *Quote:*   

> 
> 
> swap 的分法有待考虑。如果需要suspend2的支持的话，swap应该是Ram的 1.2倍。
> 
> 

 

sorry, 我没用过 suspend2, 不过, 非常谢谢你提供的信息, 可以具体说说 1.2 倍的理由么? 到时整理到我的帖子里, 不介意吧? (当然会在那个帖子里感谢你  :Very Happy:  )

 *Quote:*   

> 
> 
> / 10G应该是不够的，如果要自己编译ooo的话。
> 
> 

 

呵呵, 不记得在论坛哪里看过一篇帖子建议尽量不要自己 build Ooo, 因为一来耗时, 二来 Ooo 比较 "敏感", 有时一些编译器优化选项会让它出问题, 如果花了老长时间, build 到 80% 就出毛病了, 机器再快也是件让自己头痛的事吧  :Wink: 

我自己本身不用 Ooo, 就算用也用 Ooo-bin... 破机器哦, 耗不起.

另外, 如果特地为了将来 "可能" 自己 build Ooo 而把 / 分大, 其实不太值得. 等到有一天真的想给自己的 cpu 找点事做, 让它 build Ooo 时, 完全可以通过 /etc/make.conf 中的:

```

# PORTAGE_TMPDIR is the location portage will use for compilations and

#     temporary storage of data. This can get VERY large depending upon

#     the application being installed.

#PORTAGE_TMPDIR=/var/tmp

```

来把硬盘上空闲的空间分给 Ooo 去编译, 对不?

 *Quote:*   

> 
> 
> 强烈建议分一个 /opt出来，所有的不在portage里的应用都扔到/opt里去。包括像Matlab这样的商用程序，wine下面运行的windows应用。这样的好处就是如果重新作gentoo,portage里的东西都有，而且还有更新的版本，/opt里的东西也不用动了。
> 
> 

 

个人 taste 问题, 我习惯于保持系统的 "清洁", 像 quake3, blackdown-jdk 这些软件在 portage 里, 可是 emerge 它们之后就装到 /opt 了, 这时再把 "不在 portage 里的应用" 也放 /opt 里, 似乎就不太好? 个人喜欢把非 portage 的软件扔自己 /home 目录帐号里的 apps 目录下, 一来系统保持最简, 二来自己的特殊需求也能得到满足 (对于家人而言, 他们则不需要用到我的这些软件, 所以就让这些软件呆在我的 /home 里 :Wink:  )

当然, 归根结底是个人 taste 的问题, 所有意见仅供参考, 最好的方案来自自己的经验积累  :Smile: 

----------

## EricHsu

 *druggo wrote:*   

> 哥们，快点完成帖子吧！
> 
> 我希望最好能完成了再贴上来……

 

努力努力...

以前我写什么东西都是写完再拿出来的, 第一次试着这么写, 体验一下和大家随时交互写作的方式.

另外, 存在网上比存在自己机器上保险  :Laughing: 

----------

## EricHsu

 *Hauser wrote:*   

> 
> 
> 我裝xp的時候，hda1已經有個98了。嘻嘻，忘了考慮這個因素了。 
> 
> 為了把問題搞清楚，我在vmware裡做了個實驗，
> ...

 

Hauser, 你太敬业了! 还特地实验求证! Admire  :Exclamation: 

 *Quote:*   

> 
> 
> 結果我用fdisk吧hda3改成了c即'W95 FAT32 (LBA)'的類型。這一次可以裝了，當然XP的安裝程式要求要將hda3(C: )和hda5(D: )先格式化啦。裝完之後，xp可以正常使用，但是啟動檔案全裝到hda3里了。後來我又在hda2里裝了個hiweed linux，然後用Grub啟動兩個OS，都沒問題。
> 
> 這樣我們可以看到兩點：1.xp 不受 1024 磁柱限制。2.xp雖然可以裝到extended分區裡，但一定要在某個primary的分區有個立足點才行(至少安裝程式有這樣的要求，不過就不知道可不可以用vmware的physical disk方式安裝到extended分區裡，誰有條件的話可以試一試)。

 

铁的事实说明: windows 确实霸道

人家 linux 多乖, 让它装哪儿就装哪儿, 就你个 windows 以为全天下就你自己一个操作系统  :Evil or Very Mad: 

----------

## Hauser

 *EricHsu wrote:*   

>  *Hauser wrote:*   
> 
> 我裝xp的時候，hda1已經有個98了。嘻嘻，忘了考慮這個因素了。 
> 
> 為了把問題搞清楚，我在vmware裡做了個實驗，
> ...

 

我有實際需要啊，乘聖誕節有大減價，我要買一部手提電腦了，這分區的問題是必須得搞清楚才好的。  :Smile: 

----------

## EricHsu

 *Hauser wrote:*   

> 
> 
> 我有實際需要啊，乘聖誕節有大減價，我要買一部手提電腦了，這分區的問題是必須得搞清楚才好的。 

 

对了, 你刚好有 vmware 是吧? 试试我之前提过的问题: 在装好系统的情况下, 更改 extended 分区的类型 (例如从 win95 ext'd 改成 extended 或反之), 看看会不会对 extended 分区里的逻辑分区以及数据造成影响? 先行谢过~

----------

## Hauser

試過了，轉過來轉過去，似乎都沒問題啵！  :Very Happy: 

----------

## EricHsu

看来真的很安全, 呵呵. 分区的知识不甚了解, 我想 extended 分区的类型在分区表里可能也就一个符号记录 (贴个 label 似的) 吧, 所以随便改都不影响它里面逻辑分区以及数据...

----------

## lucida

看到这里还是类似安装手册。。

期待实质性的“快若刀锋”，虽然个人对这些怀疑  :Razz: 

----------

## EricHsu

 *lucida wrote:*   

> 看到这里还是类似安装手册。。
> 
> 期待实质性的“快若刀锋”，虽然个人对这些怀疑 

 

哈! 我就猜到会有人 "中计"! 用来形容 "刀锋" 的 "快" 与用来形容 "速度" 的 "快" 意思是不同的  :Smile:  例如, "快刀" 与 "快马"...

"快若刀锋" 相当于英文里的 "bleeding edge"... 虽说我也不知道怎么解释才算最合适, 大概意思就是装一个所有技术都用最新最酷的系统...

这么装下来其实也能让系统快至少一些吧, 我之前的系统 glxgears 3000 fps 到顶, 这次 bleeding edge 方式装下来, 冲到 3034 fps, 多了 34 fps 哦, 不容易呀, 呵呵

----------

## Lance

加油，期待！

----------

## lucida

3000 vs. 3034

1% only

means nothing

----------

## Lance

1% 不错了。 这叫百尺竿头更进一步。

当然这样的性能提升，是否值得花那么多功夫，那又是个见仁见智的问题了。lucida兄可能不愿意，但一定还有愿意试的人，所以还是要EricHsu尽快完成大作。

----------

## linky_fan

To: EricHsu

       建议bootstrap时候加上nptl, 也就是在make.conf里加上USE="nptl"嘛,只要nptl的glibc的话改成nptlonly就可以了呀.bleeding edge缺了nptl好像不怎么完整吧,  :Very Happy:  .

----------

## EricHsu

 *lucida wrote:*   

> 3000 vs. 3034
> 
> 1% only
> 
> means nothing

 

同一块显卡, 在我 Fedora 时代, 装了 nvidia 驱动, 始终没能超过 1,000 fps (没装驱动时 300 fps 左右), 打 quake3 一般属于被虐的对象 (也许是我对 Fedora 了解不够配置不好吧)... 第一次装完 gentoo 之后很吓人地就轻松上了 2,000. 

当然, 现在 3,000 多的是新的显卡, 且 3,000 和 3,034 是 gentoo stage1 和 stage1 的比较. 后者增加的 34 fps 说明了我的兔兔经验的增长  :Wink: 

----------

## EricHsu

 *Lance wrote:*   

> 
> 
> 当然这样的性能提升，是否值得花那么多功夫，那又是个见仁见智的问题了。

 

人生乐事之一: 为自己所需度身定造一个完美的 gentoo linux  :Smile: 

放假完啦, 今晚回来继续写  :Very Happy: 

----------

## EricHsu

 *linky_fan wrote:*   

> To: EricHsu
> 
>        建议bootstrap时候加上nptl, 也就是在make.conf里加上USE="nptl"嘛,只要nptl的glibc的话改成nptlonly就可以了呀.bleeding edge缺了nptl好像不怎么完整吧,  .

 

呵呵, 那一部分还没写, ntpl 是肯定要的  :Smile: 

因为我觉得 make.conf 里几个变量的设定是一个不小的话题, 且对于刚接触 gentoo 的朋友 (包括之前的我) 是很想了解又因经验问题无从下手的一个内容. 我会逐步添加完整的, 现在出来的只是一些步骤和骨架  :Smile: 

今晚开工继续写, 呵呵.

----------

## linky_fan

强烈盼望啊.老大.

----------

## kosine

 *EricHsu wrote:*   

> to tecehux
> 
> 我会努力的, 因为版面本身的工作还不少 (有时还得处理一些不合发贴指引的帖子或者乱码贴...), 所以, 大家一是给我点时间耐心等等 (装 gentoo 本身就需要耐心 ) 另外则祈请大家对版面工作多支持, 务必看过发贴指引, 已了解发贴指引的朋友也多帮帮后来的朋友给他们以引导, 这样我们版面工作就轻松了, 就可以腾更多时间来为大家从技术上提供 service, 谢谢!
> 
> to 壳壳
> ...

 

libc.so.6 是glibc里面的，而不是gcc的

实际上是一个连接指向实际的lib文件

----------

## Lance

我喜欢ntpl, 用了ntpl, 我的azureus的下载速度不输windows下的bitComet.

----------

## EricHsu

 *kosine wrote:*   

> 
> 
> libc.so.6 是glibc里面的，而不是gcc的
> 
> 实际上是一个连接指向实际的lib文件

 

谢谢指正!  :Very Happy: 

----------

## linky_fan

To EricHsu:

         nptl and nptlonly 用nptlonly就可以了，nptl选项会在编译glibc两次，第一次用的是linuxthread，第二次用的才会是nptl，不过ldd的结果还是链接到/lib/tls/libc.so.6的, 不是/lib/libc.so.6. 既然选了nptl, 就不要再在linuxthread上浪费宝贵的时间了吧  :Wink: 

----------

## Hauser

There're still some programs won't run on a nptl-only machine, so it's "safer" not to use the "nptlonly" flag though it usually won't cause any trouble to most people do choose to use it.

----------

## linky_fan

 *Quote:*   

> 
> 
> There're still some programs won't run on a nptl-only machine, so it's "safer" not to use the "nptlonly" flag though it usually won't cause any trouble to most people do choose to use i
> 
> 

 

Finally , i find that if you set only the "nptlonly", the system will say "如果你要使用nptlonly的话,请一并设置nptl" in the "Compiling Glibc" step during the bootstrap , then stopped. faint, just redo it.   :Embarassed:   :Embarassed:   :Embarassed: 

----------

## EricHsu

 *Hauser wrote:*   

> There're still some programs won't run on a nptl-only machine, so it's "safer" not to use the "nptlonly" flag though it usually won't cause any trouble to most people do choose to use it.

 

呵呵, 用 nptlonly, 所以才叫 bleeding edge  :Smile: 

下面提供一个软件列表, 这些软件在我 nptlonly 的机器上保证是运作正常的  :Wink: 

```

eric@gentux ~ $ cat /var/lib/portage/world | cut -d"/" -f2

OpenQ

gdm

scrot

gxmame

gedit

alsa-utils

scim-chinese

stardict-oxford-en-zh-gb

terminal

gnome-light

evolution

coldplug

morph-sources

gnome-volume-manager

rar

xcdroast

evolution-webcal

totem

gentoolkit

gconf-editor

vim

gnome-netstatus

bittornado

stardict

gnome-system-monitor

postfix

mozilla-firefox

cvs

grub

bmp-wma

localepurge

xfce4-showdesktop

abiword

rp-pppoe

splashutils

acroread-asianfonts

beep-media-player

gthumb

xorg-x11

netkit-telnetd

nitro-sources

torsmo

netscape-flash

anjuta

file-roller

glade

quake3

lynx

eject

vixie-cron

gnome-terminal

fam

syslog-ng

nano

xscreensaver

nvidia-kernel

reiser4progs

gcalctool

xfce4

gaim

stardict-langdao-zh-en-gb

gkrellm

firestarter

gettext

iptables

stardict-langdao-en-zh-gb

gentoo-artwork

gnome-applets

bluefish

nvidia-glx

udev

hotplug

mplayer

lftp

```

----------

## EricHsu

 *linky_fan wrote:*   

> 
> 
> Finally , i find that if you set only the "nptlonly", the system will say "如果你要使用nptlonly的话,请一并设置nptl" in the "Compiling Glibc" step during the bootstrap , then stopped. faint, just redo it.    

 

呵呵, 敬业哦, 自己实验求证! 所以要用 nptlonly 则一定要加上 nptl, 大家留意了 :Smile: 

我昨天一直试图在搜索一个帖子 (可惜没找到...), 当初为 glibc 加上一个 nptlonly 是因为 glibc 在编译时的一个 bug (没记错的话, 原帖就是这意思), 就是, 即便你设置了 "nptl" 的情况下, 它还是会 build 两次, 然后在你的系统里装两个版本, 包括 nptl 的和 linuxthread 的. 所以 gentoo 的 glibc 开发人员就加了一个 nptlonly 以保证 glibc 只 build 一次, 且为纯 nptl 版本. (记错说错的地方, 欢迎指正 :Smile:  另外, 如果有谁能找到关于 glibc nptlonly 的原帖记得给个链接~)

edit: 差点忘了 - 不知道大家留意过没有, 系统自举 (bootstrap) 过程中, gcc, glibc 都是要 build 两次的, 这个和这里讨论的 glibc nptl/linuxthread 各 build 一次不是一回事哦. 系统自举的时候 gcc, glibc 为什么都要 build 两次涅? 感兴趣的自己考虑一下, 呵呵

----------

## Hauser

 *EricHsu wrote:*   

>  *Hauser wrote:*   There're still some programs won't run on a nptl-only machine, so it's "safer" not to use the "nptlonly" flag though it usually won't cause any trouble to most people do choose to use it. 
> 
> 呵呵, 用 nptlonly, 所以才叫 bleeding edge 
> 
> 下面提供一个软件列表, 这些软件在我 nptlonly 的机器上保证是运作正常的 
> ...

 

As I said, the "nptlonly" flag won't cause any trouble most of the time, I'm running a nptlonly system on my desktop and I have installed many more programs than you have listed here and they all run without any problem.  As far as I know, only a few commercial software (don't remember which ones) and some very old programs may have some problems on a nptlonly machine, but if you did not use "nptlonly" flag you'd have linuxthreads as a fallback just in case you might want to use these software.

----------

## linky_fan

 *Quote:*   

> 差点忘了 - 不知道大家留意过没有, 系统自举 (bootstrap) 过程中, gcc, glibc 都是要 build 两次的, 这个和这里讨论的 glibc nptl/linuxthread 各 build 一次不是一回事哦. 系统自举的时候 gcc, glibc 为什么都要 build 两次涅? 感兴趣的自己考虑一下, 呵呵

 

第一次我用"nptl"bootsrap(以前都是stage3的), 没有加上"nptlonly"结果bootstrap的时间比不加'nptl'时候多了将近一倍, 因为本来算好差不多到晚上11点左右bootstrap就会结束了(从九点开始), 没想到居然弄到十二点半, 生气郁闷的时候发现原来加上"nptl"不加"nptlonly"glibc在bootstrap中会编译两趟, 第一次是linuxthread, 第二次才是nptl, 事后用ldd看了一下/bin下面随便一个二进制文件,glibc的库是链接到/lib/tls/libc.so.6(nptl的libc库,好像是redhat首先这么干的). 不过在/lib下面还有一个libc.so.6, 这个我看了一下是linuxthread的libc库. 我觉得这大概就是为了方便前期的调试(万一不行还有后悔药可以吃嘛),后来也就像预定俗称一样了, 大家用"nptl nptlonly"的可以自己去看看咯. 和这个应该不一样的. 

顺便问个问题, 现在我已经做好了gentoo(用上面的方法), 不过有点小麻烦, 就是在emerge -pv gnome-terminal的时候报错, 说是没有一个ebuild满足virtual/fam的, gnmoe也一样.主要用gnome-terminal的原因是在它里面可以^C , ^V的, 比较方便

我的系统是gentoo 2004.3 + nptl(gcc 3.4.3)+ xorg 6.8.1 + fvwm. 

Cure兄, 你看到过俺的桌面的, 我就不贴了.

----------

## Hauser

 *linky_fan wrote:*   

> 顺便问个问题, 现在我已经做好了gentoo(用上面的方法), 不过有点小麻烦, 就是在emerge -pv gnome-terminal的时候报错, 说是没有一个ebuild满足virtual/fam的, gnmoe也一样.

 

Try:

# emerge app-admin/fam && emerge -a gnome-terminal

----------

## EricHsu

 *linky_fan wrote:*   

> 生气郁闷的时候发现原来加上"nptl"不加"nptlonly"glibc在bootstrap中会编译两趟, 第一次是linuxthread, 第二次才是nptl, 事后用ldd看了一下/bin下面随便一个二进制文件,glibc的库是链接到/lib/tls/libc.so.6(nptl的libc库,好像是redhat首先这么干的). 不过在/lib下面还有一个libc.so.6, 这个我看了一下是linuxthread的libc库. 我觉得这大概就是为了方便前期的调试(万一不行还有后悔药可以吃嘛),后来也就像预定俗称一样了, 大家用"nptl nptlonly"的可以自己去看看咯. 和这个应该不一样的. 

 

我的系统是 nptl nptlonly 的, 我看了一下:

```

eric@gentux ~ $ ldd /usr/bin/man

        linux-gate.so.1 =>  (0xffffe000)

        libc.so.6 => /lib/libc.so.6 (0xb7eb4000)

        /lib/ld-linux.so.2 (0xb7fea000)

eric@gentux ~ $ ldd /usr/bin/who

        linux-gate.so.1 =>  (0xffffe000)

        libc.so.6 => /lib/libc.so.6 (0xb7eb4000)

        /lib/ld-linux.so.2 (0xb7fea000)

eric@gentux ~ $ ls -l /lib/libc.so.6

lrwxrwxrwx  1 root root 13 12月 20 21:41 /lib/libc.so.6 -> libc-2.3.4.so

```

关于为什么自举的时候会把 gcc/glibc 都编两次, 我个人的看法是: gentoo 式追求纯粹的做法? - 由于第一次 build 出来的 gcc/glibc 是 LiveCD 里的 gcc/glibc 编译的, LiveCD 的 gcc/glibc 不是针对我们的机器优化过的, 所以来个第二次: 用针对我们机器优化过的刚 build 出来的 gcc/glibc 再把它们自己 build 一次 (自举的含义所在?!), 就得到一个纯粹的优化的 gcc/glibc 了?

这只是我的猜想... 不一定对, 知道真正原因的朋友记得说说! 我很想知道真正的原因!  :Very Happy: 

 *Quote:*   

> 
> 
> 顺便问个问题, 现在我已经做好了gentoo(用上面的方法), 不过有点小麻烦, 就是在emerge -pv gnome-terminal的时候报错, 说是没有一个ebuild满足virtual/fam的, gnmoe也一样.主要用gnome-terminal的原因是在它里面可以^C , ^V的, 比较方便
> 
> 

 

我也是 gnome-terminal 的粉丝~ 虽然 xfce4 里现在也开发了个类似它的 terminal (就这名字!), 可是还是有些 bug (比如菜单栏隐藏后, 就不能用 alt + 数字来切换 tab 页了...), 所以还是紧密地团结在 gnome-terminal 核心的周围  :Laughing: 

virtual/fam 的问题我也遇到过, 如 Hauser 的建议就可以解决. 似乎是 portage 里的一个小 bug...

----------

## linky_fan

 *Quote:*   

> 
> 
> 关于为什么自举的时候会把 gcc/glibc 都编两次, 我个人的看法是: gentoo 式追求纯粹的做法? - 由于第一次 build 出来的 gcc/glibc 是 LiveCD 里的 gcc/glibc 编译的, LiveCD 的 gcc/glibc 不是针对我们的机器优化过的, 所以来个第二次: 用针对我们机器优化过的刚 build 出来的 gcc/glibc 再把它们自己 build 一次 (自举的含义所在?!), 就得到一个纯粹的优化的 gcc/glibc 了? 
> 
> 

 

我觉得bootstrap有点类似于lfs中的toolchain, 因为在emerge system的时候还是会有一个安装的过程(从-pv中可以看到的,不是gcc就是glibc)

virtual/fam的这个问题我search一下过,找到的就是这个app/fam, 当时不是很肯定就没有装, 明天我试试,  今天晚上女朋友过来, 麻烦  :Crying or Very sad: 

----------

## bookstack

Sorry for English,.

If you read about the message when emerging glibc, or bootstrap, the reason lies in that the linuxthread exists for backward compatiblities. 

For example.  Matlab 6.5 does not support nptl, neither does Maya. Search maya in this forum.

----------

## linky_fan

 *Quote:*   

> 
> 
> If you read about the message when emerging glibc, or bootstrap, the reason lies in that the linuxthread exists for backward compatiblities.
> 
> 

 

Thank you ^_^

----------

## howjay

gcc自举2次是因为第二次的才是真正最后用的gcc吧，而第二这个gcc需要第一个gcc来生成，不知道说的对不对喔~  :Question: 

----------

## EricHsu

 *bookstack wrote:*   

> Sorry for English,.
> 
> If you read about the message when emerging glibc, or bootstrap, the reason lies in that the linuxthread exists for backward compatiblities. 
> 
> For example.  Matlab 6.5 does not support nptl, neither does Maya. Search maya in this forum.

 

IIRC, the maintainer of glibc added the "nptlonly" useflag for preventing glibc from building twice (one for linuxthread, the other for nptl) while the "nptl" flag is set. (However, I couldn't find that post now... long time ago...)

So, with "nptlonly" set, glibc should be built only once while emerging it (correct me if I'm wrong  :Very Happy:  , I'll check next time I update it to make sure...)

While bootstraping the system (with "nptl nptlonly" set), it do make sense to build glibc twice (linuxthread/nptl), maybe some of the system components works with only linuxthread? But, in later glibc update, the "nptl nptlonly" flags will result in building a nptl only glibc (my glibc is nptl only, no linuxthread version installed), why wouldn't this break the system?  :Rolling Eyes: 

There still another question: why does gcc build twice in bootstrap too?

I guess the possible answer is: the LiveCD's gcc/glibc build the system's gcc/glibc, then the system's gcc/glibc build themselves again (isn't that what bootstrap mean?) to get a more pure optimized version... 

still confused  :Evil or Very Mad: 

----------

## EricHsu

 *howjay wrote:*   

> gcc自举2次是因为第二次的才是真正最后用的gcc吧，而第二这个gcc需要第一个gcc来生成，不知道说的对不对喔~ 

 

我也这么想... 可是没啥实际的证据可以说服自己或者推翻自己... 等下次 glibc 升级再仔细看看...

----------

## old_taoist

何必自己瞎猜，问开发者不就完了，或许我想得太简单？或许有开发文档？

----------

## Lance

先顶后收藏！

有时间时动手做！

祝版主早日找到工作！

----------

## ldh168

楼主能不能把制作Ｓｔａｇｅ４的方法贴出来？ :Shocked: 

----------

## EricHsu

to Lance,

俺工作啦, 在深圳一家公司搞兔兔 :Smile:  冒个头先  :Wink: 

to ldh168,

所谓的 stage4 就是用 tar 命令把整个系统打个 .tar.bz2 包, 你可以先搜索一下论坛: stage4

有一篇详细的英文 howto 的. 如果不乐意看英文的呢, 那我稍后给写一下吧  :Smile: 

----------

## Lance

 *EricHsu wrote:*   

> to Lance,
> 
> 俺工作啦, 在深圳一家公司搞兔兔 冒个头先 
> 
> to ldh168,
> ...

 

那真太好了，恭喜！

以后更可以公私兼顾了  :Smile: 

赶明儿再升级一个用GCC4.0的"快若刀锋"安装指南.

----------

## EricHsu

 *Lance wrote:*   

> 
> 
> 那真太好了，恭喜！
> 
> 以后更可以公私兼顾了 

 

呵呵, 每天都上来逛逛  :Smile: 

这段时间忙过去之后 (因公需要在看一个有趣的开源项目中~) 就继续写点什么和大家交流 :Smile: 

 *Quote:*   

> 
> 
> 赶明儿再升级一个用GCC4.0的"快若刀锋"安装指南.
> 
> 

 

记得把心得发上来!

----------

## popsetup

 *Quote:*   

> 
> 
> 這樣我們可以看到兩點：1.xp 不受 1024 磁柱限制。2.xp雖然可以裝到extended分區裡，但一定要在某個primary的分區有個立足點才行(至少安裝程式有這樣的要求，不過就不知道可不可以用vmware的physical disk方式安裝到extended分區裡，誰有條件的話可以試一試)。

 

下XP是可以装在扩展分区里面的 但是主分区必须有1个WINDOWS可识别的分区因为分区启动信息始终都在主分区里面 

另因为NTLDR文件对分区表要检查，所以用vmware的physical disk方式安裝到extended虽然可行但是GRUB根本无法引导 除非vmware在物理

硬盘上也有主分区（不要妄想主分区使用虚拟硬盘，将xp装在物理扩展分区，离开虚拟机的主分区100％不能启动）

以下是我的试想，还没有测试过哈

/dev/hda1  fat32

/dev/hda2  ext2

/dev/hda3 * 扩展

/dev/hda5 ntfs

/dev.hda6 ext3

/dev/hda7 swap

主分区和逻辑分区的划分会不会造成系统速度的降低我不是很清楚（我觉得这点速度不会感觉到吧）

用虚拟机，虚拟主分区，物理硬盘／dev/hda5 装xp

然后在用光盘在/dev/hda5/分区再装一遍XP 对就是覆盖安装 ：）在win下和linux下共享一个xp

其实还有个办法，就是把虚拟主分区的内容打包到/dev/hda1 但是要DEBUG ntldr那个文件 可惜我不会 ：（

----------

## punkid

按照EricHsu兄的步骤

# unlink /etc/make.profile

# ln -sf /usr/portage/profiles/default-linux/x86/2004.2/gcc34 /etc/make.profile 

接下来的# emerge --oneshot --nodeps gcc-config就出错了。

```
!!!/etc/make.profile is not a symlink and will probably prevent most merges.

!!!It should point into a profile within /usr/portage/profiles/

(You can safely ignore this message when syncing.It's harmless)

!!!ARCH is not set.Are you missing the /etc/make.profile symlink?

!!!Is the symlink correct?Is your portage tree complete?
```

what does that mean and what should I do?

另外gcc4.0也早已出来了，不过目前好像问题还很多，有必要用gcc4.0吗？

----------

## tecehux

 *punkid wrote:*   

> 按照EricHsu兄的步骤
> 
> # unlink /etc/make.profile
> 
> # ln -sf /usr/portage/profiles/default-linux/x86/2004.2/gcc34 /etc/make.profile 
> ...

 

```

file /etc/make.profile

/etc/make.profile: symbolic link to `/usr/portage/profiles/default-linux/x86/2005.0/'

```

我现在是稳定为主，为什么就要最新的呢？用gcc4的话天知道会在编译的时候出什么问题

----------

## Hauser

 *popsetup wrote:*   

> 以下是我的试想，还没有测试过哈
> 
> /dev/hda1  fat32
> 
> /dev/hda2  ext2
> ...

 

如果你的hda1是fat32，XP可以直接裝到hda5里(當然會有部分啟動文件會裝到hda1里去），不需要用到vmware的。

----------

## punkid

郁闷啊，安装了近16个小时的gentoo最后栽在了reiser4上，我用的是2.6.11-morph11内核，根据前面帖子的提示，关闭4stacks就可以看到reiser4的内核模块了，但是关闭后我在config里还是看不到啊，自己手动添加了也没有用。安装了16个小时的gentoo成了废物555555555....谁帮我看看原因啊。

另外，自己在多次失败，安装这个快若刀锋般的linux时也发现了几点问题：

1，使用CXXFLAGS="${CFLAGS} -fvisibility-inlines-hidden"参数容易出问题，用CXXFLAGS="${CFLAGS}"更为稳定，保守。我前几次编译失败都是因为这个。不知道这句参数到底什么意思？

2.

```
# unlink /etc/make.profile

# ln -sf /usr/portage/profiles/default-linux/x86/2004.2/gcc34 /etc/make.profile
```

事实上这步似乎不必要，系统默认的就是这个了吧。我自己用2004.3和2005.0的stage1编译时都已经是默认的了。

3.系统自举时已经编译glibc了，怎么在emerge system又重新编译glibc啊，这个glibc的编译可耗费了我不少时间。

请大家先帮忙帮我解决一下morph内核的reiser4问题吧！我1天的忙活就这么白费了。

----------

## Hauser

 *punkid wrote:*   

> 郁闷啊，安装了近16个小时的gentoo最后栽在了reiser4上........安装了16个小时的gentoo成了废物555555555....

 

It's just a kernel, your installation is OK; either you don't use reiser4 or change to another kernel, simple as that.

 *punkid wrote:*   

> 1，使用CXXFLAGS="${CFLAGS} -fvisibility-inlines-hidden"参数容易出问题...不知道这句参数到底什么意思？

 

Take a look at this thread:https://forums.gentoo.org/viewtopic-t-303068-highlight-fvisibility.html

 *punkid wrote:*   

> 2.
> 
> ```
> # unlink /etc/make.profile
> 
> ...

 

That is not true, none of the default profiles (2004.2, 2004.3 or 2005.1) uses gcc-3.4.x.

 *punkid wrote:*   

> 3......这个glibc的编译可耗费了我不少时间。
> 
> 

 

Use "userlocales" so glibc only compiles the locales you want, it saves you a lot of time.

----------

## EricHsu

 *tecehux wrote:*   

> 
> 
> 我现在是稳定为主，为什么就要最新的呢？用gcc4的话天知道会在编译的时候出什么问题

 

这个非常赞同, 因为好多软件还没完全针对 gcc 4.0 进行 patch, 很可能会编译失败噢.

所以我装了个 FC4 体验 gcc 4 build 出来的系统的感觉, hoho

----------

## wokick

 *EricHsu wrote:*   

>  *tecehux wrote:*   
> 
> 我现在是稳定为主，为什么就要最新的呢？用gcc4的话天知道会在编译的时候出什么问题 
> 
> 这个非常赞同, 因为好多软件还没完全针对 gcc 4.0 进行 patch, 很可能会编译失败噢.
> ...

 

什么感觉？很high?

----------

## EricHsu

 *wokick wrote:*   

> 
> 
> 什么感觉？很high?

 

像爬上主楼尖儿上的感觉, 嘿嘿.

不过 FC4 bug 确实挺多的, 之前听说 longhorn 没蓝屏了, 但是改红屏了, FC4 这就赶上来了: 关机/重启的时候就是红屏, 没有 X, 没有 console 输出, 反正能给你关上或者重启.

里面带的 elipse 3.1M6, 是拿 gcj build 的 native 版本, 最大的表现是 file chooser dialog 是 gnome 的那个, 但是也是有 bug, 菜单上就有一个不完整的没有任何功能的菜单项...

还有... 不说了, wow..

但是还是值得去尝尝鲜的, 毕竟等 gentoo portage 里的所有软件都为 gcc 4 patch 上还得一段时间 (为啥不能从 FC 那边弄 patch 过的包过来?? 奇怪...)

----------

## wokick

传说gcc4加了很多优化，比如vector optimization，之类的，可以让很多程序飞起来。用gcc4 build的FC，有没有感觉快一些？

----------

## EricHsu

 *wokick wrote:*   

> 传说gcc4加了很多优化，比如vector optimization，之类的，可以让很多程序飞起来。用gcc4 build的FC，有没有感觉快一些？

 

反正 感觉 好像 似乎 很爽  :Laughing: 

自己试试吧~

----------

## bookstack

benchmark, benchmark, 我们要benchmark.

没有数据，主观感受没有公信力。

----------

## bookstack

gcc 4.0现在在portage里吗？ 好像还是没有icc快阿。

----------

## EricHsu

 *bookstack wrote:*   

> benchmark, benchmark, 我们要benchmark.
> 
> 没有数据，主观感受没有公信力。

 

呃... google 一下? 嘿嘿...

心里觉得爽就好啦, 不要公信力  :Wink: 

关于 gcc 4.X build 出来的软件的性能, 网上应该有这方面的数据的, 我觉得 gcc 官方网站怎么也得提供吧?

找到了 benchmark 就帖出来噢!

----------

## EricHsu

同志们, 好久不见~ 加班加点为公司开发了一个星期, 落下一身病啊 (扁桃体发炎, 咳嗽....)

按时完成开发任务就奖自己买了台 BenQ 的本本, 型号是 Joybook 7000, 好喜欢它的 14 寸宽屏 :Smile: 

今天上午用 stage 1/3 的方式开始装 gentoo! (且用 reiser4) 务求打造最 bleeding edge 的兔兔本本, 然后看看去参加下周在广州举行的 LinuxWorld 大会!

有兴趣的朋友到时一起聚聚吧  :Very Happy: 

----------

## punkid

看来EricHsu不久又有经验要与分享了  :Laughing: 

----------

## EricHsu

经过一周的奋战, 我的 BenQ 兔兔已经基本完整啦, 各个部分都相当完美! 性能感觉一流!

准备好周四/周五参加广州 LinuxWorld 大会时可以秀秀  :Wink: 

回来之后, 俺打算再写篇心得与大家分享  :Very Happy: 

----------

## EricHsu

同志们, 忙了好几周, 公司这边的项目到十二月初就该结了. 公司本身也要结束了, 我得开始寻找新的发展机会了. 我是因为这篇 "快若刀锋" 而受到我们 CTO 的关注来到这家公司的, 现在就在我准备写新的版本的时候, 公司因为一些无法克服的困难, 人们都一一离去, 物是人非啊, sigh....

我正在准备写两篇东西, 做一个阶段性的小结:

一就是 "快若刀锋" 的 v2.0 - 这个版本主要讲一些在装兔兔时在定制和性能方面的一些通用的经验, 安装步骤本身不会写得太细, 因为这方面的文档一是比较多了, 二则我无法保持更新, 太忙了~~ 我觉得装兔兔并不难了, 尤其是现在官方也已把 stage3 作为默认安装方式, 装完再由你自己决定是否重新 build 系统 (具体原因我会在文档里解释), 关键是记住一些规则性的东西, 自然就能装出自己最爱的兔兔;

二则和兔兔本身关系不大的, 是 php 开发方面的, 初步定题目为 "PHP RAD" - PHP 快速应用开发, 我自己接触/使用 php 有近五年了, 现在有些小结性的东西, 愿意拿出来与大家分享.

我在公司项目完结之后将投入 3~5 天左右的时间把这两篇文档写完与大家分享  :Smile: 

----------

## foxleoly

checking MACHDEP... linux2

checking EXTRAPLATDIR... 

checking for --without-gcc... no

checking for --with-cxx=<compiler>... no

checking for c++... i686-pc-linux-gnu-g++

checking for C++ compiler default output file name... configure: error: C++ compiler cannot create executables

See `config.log' for more details.

!!! Please attach the config.log to your bug report:

!!! /var/tmp/portage/python-2.4.2/work/Python-2.4.2/config.log

!!! ERROR: dev-lang/python-2.4.2 failed.

!!! Function econf, Line 485, Exitcode 0

!!! econf failed

!!! If you need support, post the topmost build error, NOT this status message.

大家帮忙看看这是什么问题？？在emerge system时出现的

----------

## Tanhua

啥时能见"快若刀锋"2.0啊 

----------

