让你的gentoo快若刀锋


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




更新:
* 20050522: 哇塞, 在 11:31 的这一刻, 这篇帖子的点击数已达 101608! 前天还只是 97000! 过十万了, 纪念一下! 谢谢大家的支持!! :D :D
* 20050427: gcc 4.0 早已 release, 等五月我的住处开通网络之后, 就开始折腾用 gcc 4.0 来 "快若刀锋" ;) (噢, 还有, 我已经 "卖身求生" 了, 所以, 下面这个求职信息已失效 8) )
* 20050216: 我明天 (17 号) 要去武汉陪 gf 几天, 顺便找找工作 (如果你有武汉的工作信息, 记得一定给我发信或者直接联系我! 非常非常感谢先!!), 可能有几天上不来了, 所以赶紧把这帖子搞定啦! 大家有啥想法/意见的就跟帖提, 我回来改 :D
* 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 安装开始了...

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

  1. 用虚拟机装成功一次 stage3
  2. 在 stage3 成功经验的基础上, 用虚拟机成功安装一次 stage1
  3. 在虚拟机成功安装 stage1 的基础上, 往硬盘的空闲分区实装一次 stage1, 并与你原有系统双启动. (注意, 为了避免任何数据丢失的惨剧发生, 请务必在实装前, 彻底备份你原系统里的所有重要数据! 因为在进行 fdisk 分区或 mkfs 格式化分区时, 任何一个字符打错, 有可能就让你原有分区彻底丢失, 或是指向错误设备, 格式化掉了存有重要数据的分区 - 例如你把 /dev/hdd5 打成 /dev/hda5...)
  4. 利用此次实装对 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, 我们需要用到很多刀锋级别的东西, 像最新的技术, 最新的软件包, 这同时意味着我们肯定会遇到很多的问题 (有些很可能别人都没遇到过的). 因此, 在跟随本贴前, 请 确认你的心脏不会太弱, 且有足够的勇气, 耐性与准备去面对可能的困难, 且要有自己解决问题的能力. 怕被刀割伤的话, 那就不要玩刀 ;)

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



  1. 准备工作

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


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


      • 分区越少越好
        也许你已经读过 Gentoo Handbook: Designing a Partitioning Scheme 又或是 tldp: Linux Partition HOWTO. 你可能也和曾经的我一样迷惑于分区方案的设计... 在这里和仍旧迷惑的你说一声: 只有在 mission critical (任务繁重) 的服务器上才有考虑设计分区方案 (比如单独给出 /var, /tmp 分区) 的必要! 作为桌面用户, 请 KISS (Keep It Simple, Stupid!) ;) 且, 据知, 当只有一个分区时, 最频繁读/写的区域最终会自动集中到硬盘上最为临近的物理区域, 利于提高硬盘读/写的效率. 而分区多时, 就没有这个好处. 详细讨论可以看这个帖子: 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 那就需要有经验的朋友给建议了 ;)
      • /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 东西的情况, 没有一个足够大小的空闲分区时, 你会理解什么叫头疼的 :)



    • 获取并刻录一张支持 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 (先让你的兔兔动起来, 然后再让它跑快:) )

      • CHOST - 如果你是 2002 年之后买的机器且没挨骗的话, 那肯定比我的新, 我的都是 CHOST="i686-pc-linux-gnu" 了, 你的也应该是这个值了 ;)
      • 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", 这样我们就能装几乎是最新的软件了 (呵呵, 更新的还有 -* 的, 如果你喜欢给自己找问题的话 ;) )
      • 获取软件包的镜像服务器列表, 以下是我自己用的, 速度都很好, 台湾的 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 一开始就多猛, 关键先让它在一定的优化条件下 (上面已经包含优化了, 只是没到极致, 极致的优化是每台机器都不同的) 顺利跑起来, 随着经验的积累和知识的丰富, 你一定可以把自己的兔兔修炼至完美!

      参考链接:

    • 网络: 拷贝 DNS 信息
      代码:

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



  2. 安装系统

    • 切换到你的新系统中
      代码:

         # 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 都一并装上, 其后将顺风顺水!

    • 设置系统时钟的技巧
      这是一个小麻烦. 可能不少人遇到过, 系统时间怎么折腾都有毛病. 下面这些步骤我都觉得有点郁闷, 不过, 按这些步骤弄完, 系统时间应该就正常了. 如果你有更好的解决方法, 一定要记得共享哦 ;) 首先我们按手册里的方法把时区设置好, 这里用了 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
         



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

    我曾是 nitro-sources 的用户, 不过, 后来的 2.6.10 的 nitro 系列让我的系统出了毛病, 踌躇间瞥见 morph-sources, 一试, 哇! 真不错! 而且 morph-sources 的作者 yardbird 非常乐于回答问题和解决问题, 这便是我现在很喜欢 morph-sources 的最大理由:) 下面就以 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 内核源码后, 接下来要进行配置/编译/安装内核, 配置内核是一个让新手们比较不爽的步骤, 随后我会在这帖子里简要说说, 或者再有更多时间的话, 我或许会开个新帖说一个主题: 编译内核时哪些选项是可以不要的 - 相信这个对于想获得一个超精简内核的你会有吸引力吧! ;)
    • 配置/编译/安装内核
      代码:

      # 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
         


  4. 安装内核模块/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


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

    • 配置文件系统信息: /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 的含义? 谢谢先 ;) 而 1024x768-32@85 则意思是启动画面是 1024x768, 32 色, 85 Hz 刷新率 (我虽然这么设置了, 可我的 splash 从来没能超过 60 Hz, 有谁能告诉我怎么解决么? 挺郁闷的一个问题...); splash 那段则说使用 "安静" 的启动画面 - 隐藏启动信息, 只显示进度条, 主题为 emergence.


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

    # exit (退回 LiveCD 提供的环境 - 记得我们之前 chroot 进到了自己的环境不?)
    # cd /
    # umount /mnt/gentoo/proc /mnt/gentoo/boot /mnt/gentoo/home /mnt/gentoo
    # reboot

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

  7. 还要干什么??
    如果你是第一次接触 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

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

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

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

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

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

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

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

    • 做好安全措施! 在进行任何你不确定的活动时, 一定要备份好数据, 做一个负责任的男人! :twisted:
    • 别怕犯错, 别完美主义 - gentoo 论坛上有个人的签名档里的一段话说得很好:
      引用:

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

      "完美" 是在犯错的过程中逐步减少出错率的一个过程!
    • 随时准备把同样的事情再做一遍! 第二次做同一件事, 你一定能做得更好!



帖子里有什么错误/不当, 或你希望我扩展的部分, 请跟帖指出/说明!
谢谢你的对兔兔的热情与对我这篇帖子的热心! 希望这帖子能成为你与兔兔结缘的一点小小推动! :D

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

  • 打造最精简的内核
  • 中文相关问题 (包括中文显示/输入, 软件的中文问题... 用洋文写给外国朋友, 问这方面问题的不少...)
  • ... (大家还想了解关于兔兔的什么??)
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页