gentoo安装记录[20050216]

原作者:
* 20050216: 我明天 (17 号) 要去武汉陪 gf 几天, 顺便找找工作 (如果你有武汉的工作信息, 记得一定给我发信或者直接联系我! 非常非常感谢先!!), 可能有几天上不来了, 所以赶紧把这帖子搞定啦! 大家有啥想法/意见的就跟帖提, 我回来改 :D
* 20050215: 完成内核安装/内核模块安装/Utopia, 系统信息/网络信息配置等.
* 20050207: 和我一样已经使用了旧的 gcc34 profile 的朋友, 在 emerge sync 之后, emerge 任何东西时可能都会出现一个提示信息说你的 profile 已经被 deprecated, 这时只需按照提示信息里所说的步骤更新 profile 即可:

Code:

!!! 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!

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

      /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

    • 创建与挂载分区
      Code:

      # 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)
      Code:

      # cd /mnt/gentoo
      (通过 link2 获得 stage1 压缩包)
      # tar -xvjpf stage?-*.tar.bz2
      (解压完之后可以把 stage1 压缩包删除或是移动到别的目录下保存 - 尽管意义不大)
         


    • 挂载其他分区
      Code:

      # 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 是雷鸟的, 那么就可以这么开始:
        Code:

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

      • CXXFLAGS:
        Code:

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

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

        LDFLAGS="-Wl,-O1"
           


        注意: "-Wl" 中是小写的英文字母 "l" 而不是数字 "1" (一), 而 "-O1" 中分别是大写的英文字母 "O" 和数字 "1" (一).
      • USE - 在系统默认的基础上, 记得要加上的有 "cjk nls nptl nptlonly"
      • ACCEPT_KEYWORDS="~x86", 这样我们就能装几乎是最新的软件了 (呵呵, 更新的还有 -* 的, 如果你喜欢给自己找问题的话 ;) )
      • 获取软件包的镜像服务器列表, 以下是我自己用的, 速度都很好, 台湾的 ntcu.net 尤其快:
        Code:

        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 树的服务器, 用下面这个亚洲的, 连接后会重定向到位于亚洲的一些服务器, 有几个台湾和日本的服务器超快:
        Code:

        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 信息
      Code:

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



  2. 安装系统

    • 切换到你的新系统中
      Code:

         # chroot /mnt/gentoo /bin/bash
         # env-update && source /etc/profile
         

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

      • 挂载各个分区 (如第一部份准备工作中的挂载分区步骤)
      • 重新执行如上的 chroot 命令与 env-update 命令
      • 继续你之前中断的步骤


    • 获得最新的 portage 树
      Code:

      # emerge sync
         

      注: 由于你的系统上暂时没有 portage 树, 因此在运行 emerge 命令时可能会看到一些警告信息, 忽略即可. 在 emerge sync 完, 系统中有了完整的 portage 树之后, 这些警告信息自然消失.
    • 使用 gcc34 profile 以让整个系统使用 gcc 3.4 来构造!
      Code:

      # 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 会带来的问题
      Code:

      # emerge --oneshot --nodeps gcc-config
         

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

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

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

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

        * 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 将看到:
        Code:

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


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

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

      # cd /usr/portage
      # scripts/bootstrap.sh
         


    • emerge system 期间会出现的问题及其解决办法 (emerge system: 耗时约: 02:25)
      在我们继续 emerge system 之前, 请先运行:
      Code:

      # 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"
         

      然后再:
      Code:

      # 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, 没关系, 全中国都是一样的时间:
      Code:

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

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

      # hwclock --show
         

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

      # hwclock --hctosys
         

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

      # nano -w /etc/conf.d/clock
      (将 CLOCK="UTC" 改成 CLOCK="local")
         


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

      # 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, 确保设置了如下变量:
        Code:

        PORTDIR_OVERLAY=/usr/local/portage
              

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

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

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

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

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

        emerge morph-sources
              


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

      # 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
    Code:

    # 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 (以我的分区为例)
      Code:

      /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
         

    • 配置网络信息
      Code:

      ## 编辑主机名
      # 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":
      Code:

      # nano -w /etc/hosts
         

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

      127.0.0.1       gentux.nkbit.com        gentux  localhost
         

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

      127.0.0.1      localhost
      127.0.0.1      gentux.nkbit.com        gentux
         

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

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

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

    • 安装系统工具
      Code:

      ## 系统日志记录器
      # 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)
      Code:

      # 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 启动画面
      Code:

      # emerge splashutils
      # mount /boot (如果原来没挂载的话)
      # splash_geninitramfs -v -g /boot/fbsplash-emergence-1024x768 -r 1024x768 emergence
      # nano -w /boot/grub/grub.conf
         

      配置如:
      Code:

      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. 搞定啦! 准备重启进自己折腾这么久装出来的兔兔!
    Code:

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

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

  7. 还要干什么??
    如果你是第一次接触 gentoo, 这时登录后发现只有终端界面, 只能敲字符... 你也许纳闷了: 这就完了?
    当然不!
    到目前为止, 虽然我把这篇口水多过茶的帖子写了这么久, 你也跟着被忽悠了这么久, 我们不过只装完了一个最小集合的 Linux 系统而已! 后面还有很多软件包需要我们根据自己的需要去安装/定制, 最终获得一个真正符合我们需要的系统.

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

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

    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)
    Code:

    # emerge xorg-x11

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

    # emerge nvidia-glx

    配置 X:
    Code:

    # xorgcfg

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

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

    # startx

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

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

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

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

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

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

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

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

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

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



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

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

  • 打造最精简的内核
  • 中文相关问题 (包括中文显示/输入, 软件的中文问题... 用洋文写给外国朋友, 问这方面问题的不少...)
  • ... (大家还想了解关于兔兔的什么??)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

注册Windows Phone Marketplace经验

简介 经过漫长漫长的等待以后,终于注册成功Windows Phone Marketplace,把经验分享一下。 登记注册 打开https://windowsphone.create.msdn.com/Register/ ,使用live id(msn id)登陆,然后按照向导一步步注册…

iOS应用日志:开始编写日志组件与异常日志

经营你的iOS应用日志(一):开始编写日志组件 对于那些做后端开发的工程师来说,看LOG解Bug应该是理所当然的事,但我接触到的移动应用开发的工程师里面,很多人并没有这个意识,查Bug时总是一遍一遍的…

java代码情书_程序员们的爱情表白书

下面看看我们程序员是如何用自己的语言说出爱你。就算闷呆,也要闷呆得很性感。java程序员的情书我能抽象出整个世界...但是我不能抽象出你...因为你在我心中是那么的具体.&#xff0…

motorola 企业移动解决方案

(一)moto数据采集解决方案 数据采集和查询,可随时随地记录并传输各种形式的数据 安全便捷接入企业数据库,实现数据前后台无缝整合 终端小巧,方便携带;快速、低成本的实现高效移动远程管理 (二&a…

使用乱序标签来控制HTML的输出效果

在HTML的元素中,有一个比较特殊的元素form。我们用它来收集表单数据并提交给服务器,并且理论上说来它是没有任何的UI被呈现的。当然如果我们在body元素后紧跟一个form,这样一来似乎看不出来有什么UI呈现的问题,可是当form存在于别…

杭电2019多校第一场,Problem I,String 2019

题目描述 Tom has a string containing only lowercase letters. He wants to choose a subsequence of the string whose length is k and lexicographical order is the smallest. Its simple and he solved it with ease.But Jerry, who likes to play with Tom, tells him …

2024年最新Python爬虫入门『最强教程』新鲜出炉!

近年来,大数据成为业界与学术界最火热的话题之一,数据已经成为每个公司极为重要的资产。互联网大量的公开数据为个人和公司提供了以往想象不到的可以获取的数据量。而掌握网络爬虫技术可以帮助你获取这些有用的公开数据集。 爬虫能干什么呢?一…

使用LUA构建页面

Android,LUA,CoronaCard 使用CoronaCard引擎构建页面,只需要嵌入CoronaView,就可以构建灵活多样的页面。 微游手柄游戏厅 4.0版本,全面改版,使用LUA语言,通过CoronaCard引擎构建。 一 界面效果&…

C#实现Singleton (转载)

您要在 C# 中构建应用程序。您需要只有一个实例的类,并且需要提供一个用于访问实例的全局访问点。您希望确保您的解决方案高效,并且能够利用 Microsoft? .NET 公共语言运行库功能。您可能还希望确保解决方案是线程安全的。 实现策略 尽管 Singleton 是一…

JQuery VS JS DOM

JQ断断续续的也用了一阵子了.对我来说确实是个小小的突破。之前的javascript 简直是 一塌糊涂。。糊涂到 连:document.getElementById("") 这个语句都不会写。哈哈这也算是选择JQ的一个理由吧,因为JQ 只需要$("#ID") $(".Class") 就可…

java设计模式组合模式详解_《JAVA设计模式》之组合模式(Composite)

在阎宏博士的《JAVA与模式》一书中开头是这样描述合成(Composite)模式的:html合成模式属于对象的结构模式,有时又叫作“部分——总体”模式。合成模式将对象组织到树结构中,能够用来描述总体与部分的关系。合成模式可使客户端将单纯元素与复合…

XAF Excel数据导入模块使用说明与源码

我实现了XAF项目中Excel数据的导入,使用Devexpress 新出的spreadsheet控件,可能也不新了吧:D 好,先看一下效果图:下图是Web版本的。 下面是win版: 功能说明: 支持从Excel任意版本导入数据,可以使…

ASP注入漏洞基础教程(二)

进 阶 篇 在入门篇,我们学会了SQL注入的判断方法,但真正要拿到网站的保密内容,是远远不够的。接下来,我们就继续学习如何从数据库中获取想要获得的内容,首先,我们先看看&…

linux 内存清理/释放命令

1.清理前内存使用情况 free -m2.开始清理 echo 1 > /proc/sys/vm/drop_caches3.清理后内存使用情况 free -m4.完成!查看内存条数命令: dmidecode | grep -A16 "Memory Device$" # sync# echo 1 > /proc/sys/vm/drop_caches echo 2 > /proc/sys…

dotnet程序优化心得(三)

(4)继续优化――用空间换取时间 现在对每一个字符,都要用get_Item(object key)方法过一遍,可这个乖乖方法那么长,肯定太耗时间了,能不能用更简单的手段呢?改Hashtable?哇&#xff0c…

【Mininet】Mininet使用源码安装

实验参考: Mininet使用源码安装 实验步骤: 1. 更新软件(用#sudo apt-get update与#sudo apt-get upgrade)。 2. 从github上获取mininet源码(#git clone git://github.com/mininet/mininet)。 3. 获取完后&a…

【Mininet】Mininet可视化应用

实验参考: Mininet可视化应用 实验步骤: 1. 用命令启动mininet可视化界面(#cd mininet/mininet/example #./miniedit.py),同时开启另一终端打开Opendaylight。 2. 用鼠标选择左侧的对应的网络组件,然后在空…

【Mininet】Mininet命令延伸实验扩展

实验参考: Mininet命令延伸实验扩展 实验步骤: 1.用命令实现 #sudo mn --topo minimal #最小的网络拓扑,一个交换机下挂两个主机。 #sudo mn --topo linear,4 #每个交换机连接一个主机,交换机间相连接。本例:4个主机&a…

java非检查性异常有哪些_Java异常处理-检查性异常、非检查性异常、Error

一、Java异常处理详解异常.png目录:1.java中异常的分类1.1 异常(Exception)1.1.1 运行时异常(RuntimeException)可以不需要捕获1.1.2 编译异常(IOException)编译器会提示要捕获,如果不进行捕获则编译器会报错1.2 错误(Error)3.java处理异常机制4.throw和…

【Mininet】基于Mininet测量路径的损耗率

实验参考: 基于Mininet测量路径的损耗率 SDN常用控制器安装部署之POX篇 实验步骤: 1. 在装有mininet的虚拟机中新建文件mymininet.py并编辑以下内容,这里要注意一点,文中的dp0与dp1须填POX安装的虚拟机的地址,由于本次…