编译gentoo
1. gentoo重新编译内核,是否需要重新安装之前安装的软件详细点。
大部分的软件不需要重新编译
少量的会需要重新编译下,比如:显卡驱动等硬件驱动或者一些需要内核模块支持的程序
如果你更换了内核版本,那么这些程序一定需要重新编译
如果你没有更换内核版本,但是改动涉及很多硬件方面的内容,那也需要重新编译这部分软件,否则会这些软件/硬件没办法工作~
有一个工具:mole_rebuild (emerge mole_rebuild就可以了)
如果你不确定是否需要emerge编译哪些软件,那就执行:
mole_rebuild list (在我的电脑上就一个软件需要重新编译,就是闭源的ati显卡驱动)
则会列出需要重新编译的软件(它不会记住你是否重新编译过了这些软件,而是告诉你这些可能需要重新安装,所以你更新内核之后执行一次mole-rebuild就可以了)
然后你可以执行:mole-rebuild rebuild来重新安装这些软件~
2. linux Gentoo安装,采用stage1方式,完全自己编译内核,这需要联网。
楼主,你没有这个能力,也没有这个外部环境就不要这么折腾了。
妥妥的用 Windows 吧……
1、安装过程理论上不可以中断,不过实际上,在编译软件包的过程中 ^C ,下次是可以继续的。emerge 每完成一个软件包,就会自动记录相关的信息并且安装到系统里面。因为已经有了这个软件包的全套过程,下次继续会从断掉的那个软件包开始重新编译安装。不过软件包互相之间有依赖关系,软件包升级后,可能接口会改变,导致某些程序出问题。如果出问题的正好是 emerge 和相关的东西,比如 python ,那就肯定挂了。
2、断网依然可以继续编译。不过没有下载的源代码就没办法再次下载了。
3、不联网需要提前下载 portage 的数据,和对应想编译的软件源代码。
4、你需要一个 chroot 环境,所以,必须是有一个 Linux 系统,这个系统可以是任何方式启动的,只要能启动到 Linux 命令行,并且可以实现读取你需要安装到的地方即可。就如同你安装 Windows ,你需要启动一个安装环境,也就是安装 Windows 的那个安装程序界面(Ghost版就是启动到 Ghost 里面)。
3. 如何用gentoo交叉编译一个基本系统
嵌入式系统的编译环境
为某个平台开发软件,首先需要一个编译环境。一般来说,编译环境包括三部分:工具 链/运行环境/编译方法。对于嵌入式系统来说,常见的编译环境有三种:
本地环境。如很流行的Ubuntu for ARM,利用官方制作好的目标机镜像(通常包含了 编译环境),直接在目标机上编译/安装软件,与PC机开发完全一样。这种方法简单省 事。缺点也显而易见,编译速度慢,耗时长,特别是较大的软件包(如xbmc)的时候, 程序员不是停下来喝杯咖啡就可以收摊,恐怕得打场通宵dota后才能看到结果 了…(或许distcc能有所改善)
虚拟环境。在PC上建立目标机的虚拟环境,如QEMU-ARM,然后chroot到虚拟环境 中编译/安装软件。这种方法利用了PC的处理能力,速度比本地环境要快得多,但 QEMU并不能完美的模拟目标机环境,如不支持某些系统调用等,这可能导致它不能 正确的编译某些软件。
交叉编译。为目标机交叉编译软件,这是最常规的办法,也是上面两种方法实现的基 础。说交叉编译是“脏活”,是因为需要手工解决软件包的所有依赖问题,手工编译 每一个软件包,并且解决软件包对目标机兼容问题… 看网上铺天盖地关于求教/指导 某个软件包如何正确交叉编译就知道,有多少程序员在被它虐?
gentoo下的交叉编译
gentoo是一个metadistribution,从源代码构建整个系统,同时支持很多不同的体 系如alpha/arm/hppa/ppc/sh/sparc/s390等,也为交叉编译提供了便利的工具,这是 其它二进制发行版没有办法比拟的(scratchbox也显得弱爆了)。
gentoo下的交叉编译通过crossdev和portage来实现。portage带来的好处是自 动解决依赖和自动升级更新系统,跟本机环境一样。
制作工具链
crossdev用来制作交叉工具链,并且还提供了交叉编译环境下的emerge的辅助脚本。如 下编译arm平台的工具链:
$ sudo crossdev -t arm-supertux-linux-gnueabi
这样,crossdev最终制作了符合“gentoo规范”的arm交叉编译器。
运行环境
crossdev生成/usr/arm-supertux-linux-gnueabi/目录作为目标系统 $buildroot。编译后生成的目标会被emerge到$buildroot,编译时依赖的环境(如 链接库/头文件/pkgconfig等)也都在$buildroot。
交叉编译
有了工具链/运行环境,使用的crossdev封装过的emerge,就可以自由的emerge了。 如交叉编译bash:
$ sudo emerge-arm-supertux-linux-gnueabi -avu bash
porage会自动把bash的依赖如ncurses/readline一起emerge到$buildroot。 交叉编译就是变得如此简单…
碰到的问题
站在巨人的肩膀上可以看的更远,前提是我们先要爬上巨人的肩膀。portage是一个快 速更新迭代的系统,并不完美,维护者没有办法测试每个软件包的所有兼容性。所以, 当你想安装一个图形环境如$emerge -avu enlightenment时,很可能会出现错误。但 portage提供了细粒度的控制帮助解决这样的问题。下面是我碰到过一些情形和解决方 法:
由于软件包的环境变量引起的问题,如链接库指向了/usr/bin,而非 $buildroot。可以配置$buldroot/etc/portage/env/目录下相应的文 件,portage会自动source该文件,从而改变编译时的环境。
portage没有包含该软件或portage自身的bug引起,如默认使能了某个在目标机 平台不能使用的特性。建立一个针对目标机的overlay,自己编写相应软件包的 ebuild文件指导portage进行交叉编译。
当某个软件包分阶段编译时,如perl编译时先生成miniperl,通过miniperl最 后生成perl目标映像。由于miniperl被交叉编译器生成目标机的映像,正常情况 下不能主机环境中继续运行生成最终的目标映像。这就要借助qemu-arm+binfmt模 拟目标机环境,让miniperl在主机环境中也能无缝的运行。
从形式上看,处理上面几种情况,也是“脏活”。不仅需要了解该软件包的编译环境, 还需要了解portage的原理,还要知道ebuild的书写语法。但是,与传统的交叉编译 方式比起来,这是一劳永逸的工作,别人使用我的运行环境和overlay,即不需再做什 么就能生成最终的目标机系统。
4. gentoo 和 archlinux 有什么优缺点
Gentoo和Arch都是滚动更新的Distro。但是Gentoo是基于源码的,而Arch是二进制。
Gentoo优点是强大的定制性、滚动更新但仍然足够稳定;缺点是编译比较耗费时间(CPU没有足够快的话),对机器特别是CPU要求高。
Arch的优点是软件包多,滚动更新且升级迅速,相较Gentoo更易掌握使用;缺点是近乎强迫式必须紧跟最新滚动升级,不然容易出问题。
5. gentoo 编译内核需要多长时间
取决于CPU的速度,以及选上的内核选项的数量(决定内核的大小)。
很老的P4大约需要一小时。现代的i5不会超过15分钟。
6. gentoo内核编译失败,这是报错,求解答
看上去像是文件系统没编译到内核里,
先查看下你是什么哪种文件系统,ext2或ext3 (df -T)
比如你的/boot分区是ext2格式的
File systems --->
<*> Second extended fs support
然后重新编译拷贝到/boot目录下,重启试试。