⑴ 如何构建自己的 linux 发行版
风格的书籍,深入研究了调度、内存管理、多进程和线程、文件系统,以及用户与内核之间的交互。写作 Linux 书籍的作家相对于 UNIX 作家来说有一个优势:尽管团体发生了剧变,但是 Linux 内核不可能分成几个相互竞争的分支,由于 GNU Public License (GPL)、集中式研究实验室 Open Source Development Lab (OSDL) 和 Linus Torvalds 不可动摇的地位,使得 Linux 有幸成为一个缓慢移动的目标(slow-moving target)。为什么 UNIX 内核很重要除了某些方面具有一定的相似性之外,不同的 Unix 内核并不怎么相同。各种 UNIX 风格也具有一个 Linux 所缺少的优点:所有 UNIX 风格都被假定是完全的操作系统。Linux 通常被描述为“只是一个内核”(如果有这样的定义的话,也是一个武断的定义),它给出公共功能和实现的核心,不管内核是运行在不太强大的 Pentium? II 机器上还是 Symmetric Multiprocessing (SMP) 系统上,这些公共功能和实现都不会发生本质上的改变。为了更加简化,有人可能会说,离 Linux 内核越远,就会发现更多的变化,而 UNIX 系统则趋向于是各种 UNIX/POSIX 标准的离散实现。事情并没有这么简单。检测 Linux 内核和系统级代码可能是一件很费时间的事情,并且在现实世界中会限制使用。LFS 项目旨在解决 Linux 上有限的系统级可理解性问题。关于内核需要大量的库和工具来让 Linux 系统执行最基本的任务这一事实,已经做过讨论了,但是如果一个比较熟练的用户具有一个 slim-line Linux 发行版,他不想下载几吉字节不让他优化系统、也不让他抛开所有这些麻烦且不必要的工具的二进制代码,那该怎么办?如果一个非常熟练的用户拒绝接受各种社团发行版的 苛刻条件(diktat),而想要运行一个来自 CD 的 Linux/Apache/MySQL/PHP (LAMP) 类型的应用程序堆栈,那该怎么办?LFS 可以解决这些问题。回页首Linux From ScratchLFS 项目显然建立于那些对于构成基本的 Linux 系统来说充分而不必要的源文件的基础之上。它已经超越了 Linux 内核和设备驱动程序,因为要产生一个可工作的 Linux 系统,您必须添加一个完整的编译器工具链、许多 Linux 汇编程序实用工具、glibc 系统库、系统配置工具和连接到 userland shell 访问的工具。LFS 建立在这样一个假设的基础之上,即 Linux 或 UNIX 允许具有一些脚本编写知识的用户,了解一个完全有用的系统的工作方式,而不用深入研究内核代码本身。为了了解 Linux 系统的工作方式,LFS 的创建者们确定,通过遵循模块依赖性来编译系统,可能是了解一般操作系统和特定的 Linux 的机制最自然的方式。用户掌握了编译过程之后,就可以开始消除依赖性树的那些连接到与支持操作系统基本目的无关的系统组件的部件。例如,在编译完成之后,消除编译器工具链本身是可行的。在没有全套的命令行实用工具时,可以凑合使用嵌入式 LAMP 堆栈。配置实用工具也可以被丢弃,大多数用户可以凑合着用一个而不是太多 Linux 将会支持的文件系统。Linux 部件LFS 系统的一个重要部件是,可以作为 tar ball 得到的大量源文件。文档是另一个重要部件,并且是最重要的。实际上,很有可能利用一个最新的 LFS 书籍文件并创建一个 LFS 发行版,因为 LFS 书籍中详细描述了每个下载位置和每个源文件及其依赖性的特征。用于从内核到编译器到 shell 编译每组源文件的过程都是已经写好了的,如果可能,您也可以在描述具有不同特征的系统的 LFS 书籍中找到替代的例程。LFS 系统的另一个不太可能出现在一般用户工具箱中的部件是,在基本 LFS 系统组合在一起之后引导系统所需的引导脚本。现在对 LFS 发行版的最大警告是:勇敢的发行版构建者所需的是一个可工作的 Linux 发行版,包括一个完整的编译器工具链和一套文件系统创建实用工具。自然,所有基于源代码的 Linux 发行版都需要使用各个发行版都完全不同的特定编译器版本来引导。LFS 不是该领域的惟一系统,但它是惟一允许您直接处理单个源文件的系统。大多数其他基于源代码的 Linux 系统,比如 Sourcemage 和 MyGeOS,提供一个完整的下载,建议用户使用。LFS 不作这样的假设,并且鼓励拆开 LFS 框架。预先假设起作用的 Linux 发行版已安装在非外来的(nonexotic)硬件上,即使 LFS 可能没有配置工具和脚本那么受关注。要编译 LFS,您需要准备一个分区和一个文件系统,还需要编译一个编译器和系统库。如果用手工完成的话,这是一个相当伤脑筋的过程,但是也的确可以增加您在处理其余安装方面的自信。整个系统的编译要花一小时到四天的时间,具体时间取决于底层硬件的年代和您的命令行技术熟练程度。作一个相当大的假设,如果您愿意很大程度上保留书籍安装,并使对 LFS 书籍中提议的安装的更改保持最小,您也可以使用自动化的安装例程来安装基于 LFS 的发行版。安装例程没有在 LFS 书籍中给出,但是可以在名称 Automated Linux from Scratch (ALFS) 之下作为基于 XML 的发行版得到。活动安装可以作为基于 C 的脚本得到,该脚本使用 ncurses 来模拟图形安装。该安装也叫做 nALFS 并给出一个极为灵活的包安装框架。工作需要一个起作用的 Linux 系统,并带有可以工作的 C 编译器和 XML 解析器。一个可以工作的 LFS 系统就足够了。Automated Linux From ScratchALFS 的目的是超越 LFS 本身。LFS 自己指导基于 Linux 的操作系统的内部工作,但是它不具有单个图形用户界面 (GUI)。LFS 既不允许连接到网络,也不允许连接到 Internet。ALFS 可以简化系统的扩展,例如,通过添加支持 Internet 访问的库,或者通过安装图形桌面所需的 X 库。回页首超越LFSLFS 的创建者们认识到了对其他各种基于源代码的 Linux 系统的需求。为了这些想要超越 LFS 并添加 X Window System、GNOME 和网络支持的人,创建了另一个 LFS 派生物:Beyond Linux From Scratch (BLFS)。 第三版 LFS 书籍(让我们不会忘记是在谈论书籍而非发行版),形成一个以一个角为基础的三角形:对于自动化编译和完全的基于源代码的 Linux 发行版,基本的 LFS 版本是基础。BLFS 将基本的 Linux 系统转化成一个完全的用户广泛接受的 Linux 系统。AFLS 简化基于源代码的 Linux 安装的安装和扩展。整个基于源代码的系统的编译是由一个脚本指导的,您在针对运行脚本的硬件调整脚本之后,就可以让脚本自己运行了。在您(或安装工程师)确定需要运行哪些包,也即特定的办公应用程序套件之后,您就可以容易地扩展安装顺序了。ALFS 也迟早会派上用场,因为它适用于从源代码进行网络范围的安装。回页首Hardened LFSLFS 家族的最后一个成员解决基于源代码的 Linux 的一个特别重要的方面:安全性。对于不想依赖于所选的 Linux 发行版服务器交付的补丁的那些人,安全性的普通方法是,针对所选的核心库和应用程序跟踪安全报告。对于 LFS 实现人员来说,问题有些不同:尽管不是不可能,但是也难以审计 Linux 内核代码,也许还包括集中于基于 Linux 的操作系统的内部机能的很多库和实用工具。代码审计相当费时,并且只有当补丁服务器是由专门人员集中维护的时,添加大量补丁才是明智的。但是可以取代一些为反映安全问题的新方法而重新编写过的库。一个好的例子是,通过从一个适当大的随机数池中随机分配数字,使得猜测进程标识符极为困难。OpenBSD 项目最先采用了该方法,随后,各种 UNIX 风格和 Linux 发行版都采用了该方法。一个相当新的项目叫做 Hardened Linux From Scratch (HLFS),在 Linux 下采用了这一安全方法。该项目假设相当正规地掌握了 LFS 和 BLFS 的一些部件,并使用了不会成为大多数 Linux 系统中的标准的几个实用工具和库。添加到 HLFS 中的最重要的部件可能是 Stack-Smashing Protector (SSP),通过使用 gcc 指令可以启用该功能。SSP 开发来防御 stack-smashing 攻击,这类攻击属于影响 Linux 系统的一类最常见的安全威胁。其他安全措施包括一流的随机数生成器和位置独立的可执行程序的编译,其中通常转化成静态链接对象代码的可执行代码作为共享库出现,而位置独立的可执行库通过将地址随机化可以隐藏这些地址。当然,可从 HLFS Web 站点得到大量补丁,并可查看其源代码。回页首日益壮大的 LFS 家族在许多方面,Linux 版本的 LFS 家族是一个方法,给予黑客以构造基于 Linux 的操作系统的能力。但是对于 LFS 的创建者们来说,最重要的结果似乎是:通过 LFS,所有 Linux 发行版对于所涉及的用户都成了智能的了。通过允许用户一部分一部分地构建 Linux 发行版,并帮助用户将一个基于 Linux 的操作系统看作一个由许多部件组成的系统,还可以用另外的方法构建 Linux 发行版。更一般来说,用户要更改构建 Linux 发行版的方式,不必要是程序员:只要从构建 LFS 系统学到的一点脚本编写能力就足够了。LFS 专家可以改变和扩展 Linux 发行版的完美组合,而不会影响它的基本结构。对于有人员和专家维护 Linux 系统,但没有资金从咨询机构和公司购买商业支持的机构来说,该功能特别重要。已经针对教学目的和大型网络,演示了基于 LFS 的 Linux 系统。它们也有可能用于其他领域。参考资料 您可以参阅本文在 developerWorks 全球站点上的 英文原文。 最新LFS 版本的门户是 LFS 下载站点。它提供从几个方面可用的 LFS 书籍。 LFS 家族的最新成员是 HLFS 或Hardened LFS 风格。 如果愿意,LFS 狂热者们可以创建 自动化的 安装。 如果基本的 LFS 安装还不够,那么可以继续安装更加复杂的 extended Linux From Scratch,也叫做 BLFS。 为了防御 stack-smashing 攻击,SSP 指令使得 gcc 可以编译针对该类型威胁而保护的代码。 位置独立的代码在关于 position-independent executables 的一章中作了简短介绍。 在developerWorks Linux 专区 可以找到更多为 Linux 开发者准备的资源。 访问developerWorks 开放源码专区,获得广泛的 how-to 信息、工具和项目更新,以帮助您利用开放源码技术进行开发,并将它们与 IBM 产品一起使用。 利用IBM 试用软件 革新您的下一个开放源码开发项目。可从下载或 DVD 得到试用软件。 通过参与 developerWorks blogs 加入developerWorks 社区。 关于作者Frank Pohlmann 以前研究的是中东宗教历史,后来各基金会认为研究宗教辩证历史与当今世界相去甚远,从此他便专攻自己热爱的领域 —— 免费软件。他获准成为英国的 LinuxUser and Developer 的技术编辑。您可通过 [email protected] 与他联系。关闭[x]关于报告滥用的帮助报告滥用谢谢! 此内容已经标识给管理员注意。关闭[x]关于报告滥用的帮助报告滥用报告滥用提交失败。 请稍后重试。关闭[x]developerWorks:登录IBM ID:需要一个 IBM ID?忘记IBM ID?密码:忘记密码?更改您的密码 保持登录。单击提交则表示您同意developerWorks 的条款和条件。 使用条款 当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。所有提交的信息确保安全。关闭[x]请选择您的昵称:当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。昵称:(长度在 3 至 31 个字符之间)单击提交则表示您同意developerWorks 的条款和条件。 使用条款. 所有提交的信息确保安全。为本文评分评论回页首
⑵ linux编译内核步骤
一、准备工作
a) 首先,你要有一台PC(这不废话么^_^),装好了Linux。
b) 安装好GCC(这个指的是host gcc,用于编译生成运行于pc机程序的)、make、ncurses等工具。
c) 下载一份纯净的Linux内核源码包,并解压好。
注意,如果你是为当前PC机编译内核,最好使用相应的Linux发行版的源码包。
不过这应该也不是必须的,因为我在我的Fedora 13上(其自带的内核版本是2.6.33.3),就下载了一个标准的内核linux-2.6.32.65.tar.xz,并且顺利的编译安装成功了,上电重启都OK的。不过,我使用的.config配置文件,是Fedora 13自带内核的配置文件,即/lib/moles/`uname -r`/build/.config
d) 如果你是移植Linux到嵌入式系统,则还要再下载安装交叉编译工具链。
例如,你的目标单板CPU可能是arm或mips等cpu,则安装相应的交叉编译工具链。安装后,需要将工具链路径添加到PATH环境变量中。例如,你安装的是arm工具链,那么你在shell中执行类似如下的命令,假如有类似的输出,就说明安装好了。
[root@localhost linux-2.6.33.i686]# arm-linux-gcc --version
arm-linux-gcc (Buildroot 2010.11) 4.3.5
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for ing conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
注:arm的工具链,可以从这里下载:回复“ARM”即可查看。
二、设置编译目标
在配置或编译内核之前,首先要确定目标CPU架构,以及编译时采用什么工具链。这是最最基础的信息,首先要确定的。
如果你是为当前使用的PC机编译内核,则无须设置。
否则的话,就要明确设置。
这里以arm为例,来说明。
有两种设置方法():
a) 修改Makefile
打开内核源码根目录下的Makefile,修改如下两个Makefile变量并保存。
ARCH := arm
CROSS_COMPILE := arm-linux-
注意,这里cross_compile的设置,是假定所用的交叉工具链的gcc程序名称为arm-linux-gcc。如果实际使用的gcc名称是some-thing-else-gcc,则这里照葫芦画瓢填some-thing-else-即可。总之,要省去名称中最后的gcc那3个字母。
b) 每次执行make命令时,都通过命令行参数传入这些信息。
这其实是通过make工具的命令行参数指定变量的值。
例如
配置内核时时,使用
make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig
编译内核时使用
make ARCH=arm CROSS_COMPILE=arm-linux-
注意,实际上,对于编译PC机内核的情况,虽然用户没有明确设置,但并不是这两项没有配置。因为如果用户没有设置这两项,内核源码顶层Makefile(位于源码根目录下)会通过如下方式生成这两个变量的值。
SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
-e s/arm.*/arm/ -e s/sa110/arm/ \
-e s/s390x/s390/ -e s/parisc64/parisc/ \
-e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
-e s/sh[234].*/sh/ )
ARCH?= $(SUBARCH)
CROSS_COMPILE ?=
经过上面的代码,ARCH变成了PC编译机的arch,即SUBARCH。因此,如果PC机上uname -m输出的是ix86,则ARCH的值就成了i386。
而CROSS_COMPILE的值,如果没配置,则为空字符串。这样一来所使用的工具链程序的名称,就不再有类似arm-linux-这样的前缀,就相当于使用了PC机上的gcc。
最后再多说两句,ARCH的值还需要再进一步做泛化。因为内核源码的arch目录下,不存在i386这个目录,也没有sparc64这样的目录。
因此顶层makefile中又构造了一个SRCARCH变量,通过如下代码,生成他的值。这样一来,SRCARCH变量,才最终匹配到内核源码arch目录中的某一个架构名。
SRCARCH := $(ARCH)
ifeq ($(ARCH),i386)
SRCARCH := x86
endif
ifeq ($(ARCH),x86_64)
SRCARCH := x86
endif
ifeq ($(ARCH),sparc64)
SRCARCH := sparc
endif
ifeq ($(ARCH),sh64)
SRCARCH := sh
endif
三、配置内核
内核的功能那么多,我们需要哪些部分,每个部分编译成什么形式(编进内核还是编成模块),每个部分的工作参数如何,这些都是可以配置的。因此,在开始编译之前,我们需要构建出一份配置清单,放到内核源码根目录下,命名为.config文件,然后根据此.config文件,编译出我们需要的内核。
但是,内核的配置项太多了,一个一个配,太麻烦了。而且,不同的CPU架构,所能配置的配置项集合,是不一样的。例如,某种CPU的某个功能特性要不要支持的配置项,就是与CPU架构有关的配置项。所以,内核提供了一种简单的配置方法。
以arm为例,具体做法如下。
a) 根据我们的目标CPU架构,从内核源码arch/arm/configs目录下,找一个与目标系统最接近的配置文件(例如s3c2410_defconfig),拷贝到内核源码根目录下,命名为.config。
注意,如果你是为当前PC机编译内核,最好拷贝如下文件到内核源码根目录下,做为初始配置文件。这个文件,是PC机当前运行的内核编译时使用的配置文件。
/lib/moles/`uname -r`/build/.config
这里顺便多说两句,PC机内核的配置文件,选择的功能真是多。不编不知道,一编才知道。Linux发行方这样做的目的,可能是想让所发行的Linux能够满足用户的各种需求吧。
b) 执行make menuconfig对此配置做一些需要的修改,退出时选择保存,就将新的配置更新到.config文件中了。
注
⑶ 如何编译linux版本
编译linux内核步骤:
1、安装内核
如果内核已经安装(/usr/src/目录有linux子目录),跳过。如果没有安装,在光驱中放入linux安装光盘,找到kernel-source-2.xx.xx.rpm文件(xx代表数字,表示内核的版本号),比如RedHat linux的RPMS目录是/RedHat/RPMS/目录,然后使用命令rpm -ivh kernel-source-2.xx.xx.rpm安装内核。如果没有安装盘,可以去各linux厂家站点或者www.kernel.org下载。
2、清除从前编译内核时残留的.o 文件和不必要的关联
cd /usr/src/linux
make mrproper
3、配置内核,修改相关参数,请参考其他资料
在图形界面下,make xconfig;字符界面下,make menuconfig。在内核配置菜单中正确设置个内核选项,保存退出
4、正确设置关联文件
make dep
5、编译内核
对于大内核(比如需要SCSI支持),make bzImage
对于小内核,make zImage
6、编译模块
make moles
7、安装模块
make moles_install
8、使用新内核
把/usr/src/linux/arch/i386/boot/目录内新生成的内核文件bzImage/zImage拷贝到/boot目录,然后修改/etc/lilo.conf文件,加一个启动选项,使用新内核bzImage/zImage启动。格式如下:
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
linear
default=linux-new ### 告诉lilo缺省使用新内核启动linux ###
append="mem=256M"
image=/boot/vmlinuz-2.2.14-5.0
label=linux
read-only
root=/dev/hda5
image=/boot/bzImage(zImage)
label=linux-new
read-only
root=/dev/hda5
保留旧有的启动选项可以保证新内核不能引导的情况,还可以进入linux进行其他操作。保存退出后,不要忘记了最重要的一步,运行/sbin/lilo,使修改生效。
9、重新生成ram磁盘
如果您的系统中的/etc/lilo.conf没有使用了ram磁盘选项initrd,略过。如果您的系统中的/etc/lilo.conf使用了ram磁盘选项initrd,使用mkinitrd initrd-内核版本号,内核版本号命令重新生成ram磁盘文件,例如我的Redhat 6.2:
mkinitrd initrd-2.2.14-5.0 2.2.14-5.0
之后把/etc/lilo.conf中的initrd指向新生成的initrd-2.2.14-5.0文件:
initrd=/boot/initrd-2.2.14-5.0
ram磁盘能使系统性能尽可能的优化,具体参考/usr/src/linux/Documents/initrd.txt文件
10、重新启动,OK!
⑷ 如何打造自己的 Linux 发行版
搜索信蚂纯“Linux From Scratch”,也就是通常说的LFS,一步一步教你从源码滑咐制作物圆Linux系统
⑸ 如何编译linux源代码
首先uname -r看一下你当前的linux内核版本
1、linux的源码是在/usr/src这个目录下,此目录有你电脑上各个版本的linux内核源代码,用uname -r命令可以查看你当前使用的是哪套内核,你把你下载的内核源码也保存到这个目录之下。
2、配置内核 make menuconfig,根据你的需要来进行选择,设置完保存之后会在当前目录下生成.config配置文件,以后的编译会根据这个来有选择的编译。
3、编译,依次执行make、make bzImage、make moles、make moles
4、安装,make install
5、.创建系统启动映像,到 /boot 目录下,执行 mkinitramfs -o initrd.img-2.6.36 2.6.36
6、修改启动项,因为你在启动的时候会出现多个内核供你选择,此事要选择你刚编译的那个版本,如果你的电脑没有等待时间,就会进入默认的,默认的那个取决于 /boot/grub/grub.cfg 文件的设置,找到if [ "${linux_gfx_mode}" != "text" ]这行,他的第一个就是你默认启动的那个内核,如果你刚编译的内核是在下面,就把代表这个内核的几行代码移到第一位如:
menuentry 'Ubuntu, with Linux 3.2.0-35-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root 9961c170-2566-41ac-8155-18f231c1bea5
linux/boot/vmlinuz-3.2.0-35-generic root=UUID=9961c170-2566-41ac-8155-18f231c1bea5 ro quiet splash $vt_handoff
initrd/boot/initrd.img-3.2.0-35-generic
}
当然你也可以修改 set default="0"来决定用哪个,看看你的内核在第几位,default就填几,不过我用过这种方法,貌似不好用。
重启过后你编译的内核源码就成功地运行了,如果出现问题,比如鼠标不能用,usb不识别等问题就好好查查你的make menuconfig这一步,改好后就万事ok了。
最后再用uname -r看看你的linux内核版本。是不是你刚下的那个呢!有没有成就感?
⑹ 如何打造自己的 Linux 发行版
LFS 中文版手册发布:如何打造自己的 Linux 发行版
您是否想过打造您自己的 Linux 发行版?每个 Linux 用户在他们使用 Linux 的过程中都想过做一个他们自己的发行版,至少一次。我也不例外,作为一个 Linux 菜鸟,我也考虑过开发一个自己的 Linux 发行版。从头开发一个 Linux 发行版这件事情被称作 Linux From Scratch (LFS)。
在开始之前,我总结了一些有关 LFS 的内容,如下:
1. 那些想要打造他们自己的 Linux 发行版的人应该了解打造一个 Linux 发行版(打造意味着从头开始)与配置一个已有的 Linux 发行版的不同
如果您只是想调整下启动屏幕、定制登录页面以及拥有更好的外观和使用体验。您可以选择任何一个 Linux 发行版并且按照您的喜好进行个性化配置。此外,有许多配置工具可以帮助您。
如果您想打包所有必须的文件、引导加载器和内核,并选择什么该被包括进来,然后依靠自己编译这一切东西。那么您需要的就是 Linux From Scratch (LFS)。
注意:如果您只想要定制 Linux 系统的外表和体验,这个指南并不适合您。但如果您真的想打造一个 Linux 发行版,并且向了解怎么开始以及一些其他的信息,那么这个指南正是为您而写。
2. 打造一个 Linux 发行版(LFS)的好处
您将了解 Linux 系统的内部工作机制
您将开发一个灵活的适应您需求的系统
您开发的系统(LFS)将会非常紧凑,因为您对该包含/不该包含什么拥有绝对的掌控
您开发的系统(LFS)在安全性上会更好
3. 打造一个Linux发行版(LFS)的坏处
打造一个 Linux 系统意味着将所有需要的东西放在一起并且编译之。这需要许多查阅、耐心和时间。而且您需要一个可用的 Linux 系统和足够的磁盘空间来打造 LFS。
4. 有趣的是,Gentoo/GNU Linux 在某种意义上最接近于 LFS。Gentoo 和 LFS 都是完全从源码编译的定制的 Linux 系统
5. 您应该是一个有经验的Linux用户,对编译包、解决依赖有相当的了解,并且是个 shell 脚本的专家。
了解一门编程语言(最好是 C 语言)将会使事情变得容易些。但哪怕您是一个新手,只要您是一个优秀的学习者,可以很快的掌握知识,您也可以开始。最重要的是不要在 LFS 过程中丢失您的热情。
如果您不够坚定,恐怕会在 LFS 进行到一半时放弃。
**6. 现在您需要一步一步的指导来打造一个 Linux 。LFS 手册是打造 LFS 的官方指南。我们的合作站点 tradepub 也为我们的读者制作了 LFS 的指南,这同样是免费的。 ###
您可以从下面的链接下载 Linux From Scratch 的电子书:
下载: Linux From Scratch
7. 当前 LFS 的版本是 7.7,分为 systemd 版本和非 systemd 版本。
LFS 的官方网站是: http://www.linuxfromscratch.org/
您可以在官网在线浏览 LFS 以及类似 BLFS 这样的相关项目的手册,也可以下载不同格式的版本。
LFS (非 systemd 版本):
pdf 版本: http://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-7.7.pdf
单一 HTML 版本: http://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-7.7-NOCHUNKS.html
打包的多页 HTML 版本: http://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-7.7.tar.bz2
LFS (systemd 版本):
PDF 版本: http://www.linuxfromscratch.org/lfs/downloads/7.7-systemd/LFS-BOOK-7.7-systemd.pdf
单一 HTML 版本: http://www.linuxfromscratch.org/lfs/downloads/7.7-systemd/LFS-BOOK-7.7-systemd-NOCHUNKS.html
打包的多页 HTML 版本: http://www.linuxfromscratch.org/lfs/downloads/7.7-systemd/LFS-BOOK-7.7-systemd.tar.bz2
8. Linux 中国/LCTT 翻译了一份 LFS 手册(7.7,systemd 版本)
经过 LCTT 成员的努力,我们终于完成了对 LFS 7.7 systemd 版本手册的翻译。
手册在线访问地址:https://linux.cn/lfs/LFS-BOOK-7.7-systemd/index.html 。
其它格式的版本稍后推出。
感谢参与翻译的成员: wxy, ictlyh, dongfengweixiao, zpl1025, H-mudcup, Yuking-net, kevinSJ 。
关于:Linux From Scratch
这本手册是由 LFS 的项目领头人 Gerard Beekmans 创作的, Matthew Burgess 和 Bruse Dubbs 参与编辑,两人都是LFS 项目的联合领导人。这本书内容很广泛,有 338 页之多。
手册中内容包括:介绍 LFS、准备构建、构建 LFS、建立启动脚本、使 LFS 可以引导,以及附录。其中涵盖了您想知道的 LFS 项目中的所有东西。
这本手册还给出了编译一个包的预估时间。预估的时间以编译第一个包的时间作为参考。所有的东西都以易于理解的方式呈现,甚至对于新手来说也是这样。
如果您有充裕的时间并且真正对构建自己的 Linux 发行版感兴趣,那么您绝对不会错过下载这个电子书(免费下载)的机会。您需要做的,便是照着这本手册在一个工作的 Linux 系统(任何 Linux 发行版,足够的磁盘空间即可)中开始构建您自己的 Linux 系统,付出时间和热情。
如果 Linux 使您着迷,如果您想自己动手构建一个自己的 Linux 发行版,这便是现阶段您应该知道的全部了,其他的信息您可以参考上面链接的手册中的内容。
请让我了解您阅读/使用这本手册的经历,这本详尽的 LFS 指南的使用是否足够简单?如果您已经构建了一个 LFS 并且想给我们的读者一些建议,欢迎留言和反馈。
BLFS阶段,startx后firefox等程序中文全部乱码问题的解决 http://www.linuxidc.com/Linux/2007-05/3789.htm
用LFS从零开始构建完整Linux系统 http://www.linuxidc.com/Linux/2011-08/40706.htm
基于Ubuntu 10.10 构建LFS 6.7[图文] http://www.linuxidc.com/Linux/2011-02/32545.htm
via: http://www.tecmint.com/create-custom-linux-distribution-from-scratch/
作者:Avishek Kumar 译者:wwy-hust 校对:wxy
本文由 LCTT 原创翻译
⑺ 如何编译Linux操作系统的源代码
首先uname
-r看一下你当前的linux内核版本
1、linux的源码是在/usr/src这个目录下,此目录有你电脑上各个版本的linux内核源代码,用uname
-r命令可以查看你当前使用的是哪套内核,你把你下载的内核源码也保存到这个目录之下。
2、配置内核
make
menuconfig,根据你的需要来进行选择,设置完保存之后会在当前目录下生成.config配置文件,以后的编译会根据这个来有选择的编译。
3、编译,依次执行make、make
bzImage、make
moles、make
moles
4、安装,make
install
5、.创建系统启动映像,到
/boot
目录下,执行
mkinitramfs
-o
initrd.img-2.6.36
2.6.36
6、修改启动项,因为你在启动的时候会出现多个内核供你选择,此事要选择你刚编译的那个版本,如果你的电脑没有等待时间,就会进入默认的,默认的那个取决于
/boot/grub/grub.cfg
文件的设置,找到if
[
"${linux_gfx_mode}"
!=
"text"
]这行,他的第一个就是你默认启动的那个内核,如果你刚编译的内核是在下面,就把代表这个内核的几行代码移到第一位如:
menuentry
'Ubuntu,
with
Linux
3.2.0-35-generic'
--class
ubuntu
--class
gnu-linux
--class
gnu
--class
os
{
recordfail
gfxmode
$linux_gfx_mode
insmod
gzio
insmod
part_msdos
insmod
ext2
set
root='(hd0,msdos1)'
search
--no-floppy
--fs-uuid
--set=root
9961c170-2566-41ac-8155-18f231c1bea5
linux/boot/vmlinuz-3.2.0-35-generic
root=UUID=9961c170-2566-41ac-8155-18f231c1bea5
ro
quiet
splash
$vt_handoff
initrd/boot/initrd.img-3.2.0-35-generic
}
当然你也可以修改
set
default="0"来决定用哪个,看看你的内核在第几位,default就填几,不过我用过这种方法,貌似不好用。
重启过后你编译的内核源码就成功地运行了,如果出现问题,比如鼠标不能用,usb不识别等问题就好好查查你的make
menuconfig这一步,改好后就万事ok了。
最后再用uname
-r看看你的linux内核版本。是不是你刚下的那个呢!有没有成就感?
⑻ linux发行版 都是怎么制作的
在这之前,Richard Stallman创建了Free Software Foundation(FSF)组织以及GNU项目,并不断的编写创建GNU程序(此类程序的许可方式均为GPL: General Public License)。在不断的有杰出的程序员和开发者加入到GNU组织中后,便造就了今天我们所看到的Linux,或称GNU/Linux。 Linux发行版本可以大体分为两类,一类是商业公司维护的发行版本,一类是社区组织维护的发行版本,前者以着名的Redhat(RHEL)为代表,后者以Debian为代表。下面介绍一下各个发行版本的特点: Redhat,应该称为Redhat系列,包括RHEL(Redhat Enterprise Linux,也就是所谓的Redhat Advance Server,收费版本)、Fedora Core(由原来的Redhat桌面版本发展而来,免费版本)、CentOS(RHEL的社区克隆版本,免费)。Redhat应该说是在国内使用人群最多的Linux版本,甚至有人将Redhat等同于Linux,而有些老鸟更是只用这一个版本的Linux。所以这个版本的特点就是使用人群数量大,资料非常多,言下之意就是如果你有什么不明白的地方,很容易找到人来问,而且网上的一般Linux教程都是以Redhat为例来讲解的。Redhat系列的包管理方式采用的是基于RPM包的YUM包管理方式,包分发方式是编译好的二进制文件。稳定性方面RHEL和CentOS的稳定性非常好,适合于服务器使用,但是Fedora Core的稳定性较差,最好只用于桌面应用。 Debian,或者称Debian系列,包括Debian和Ubuntu等。Debian是社区类Linux的典范,是迄今为止最遵循GNU规范的Linux系统。Debian最早由Ian Murdock于1993年创建,分为三个版本分支(branch): stable, testing和unstable。其中,unstable为最新的测试版本,其中包括最新的软件包,但是也有相对较多的bug,适合桌面用户。testing的版本都经过unstable中的测试,相对较为稳定,也支持了不少新技术(比如SMP等)。而stable一般只用于服务器,上面的软件包大部分都比较过时,但是稳定和安全性都非常的高。Debian最具特色的是apt-get /dpkg包管理方式,其实Redhat的YUM也是在模仿Debian的APT方式,但在二进制文件发行方式中,APT应该是最好的了。 Ubuntu严格来说不能算一个独立的发行版本,Ubuntu是基于Debian的unstable版本加强而来,可以这么说,Ubuntu就是一个拥有Debian所有的优点,以及自己所加强的优点的近乎完美的Linux桌面系统。根据选择的桌面系统不同,有三个版本可供选择,基于Gnome的Ubuntu,基于KDE的Kubuntu以及基于Xfc的Xubuntu。特点是界面非常友好,容易上手,对硬件的支持非常全面,是最适合做桌面系统的Linux发行版本。 Gentoo,伟大的Gentoo是Linux世界最年轻的发行版本,正因为年轻,所以能吸取在她之前的所有发行版本的优点,这也是Gentoo被称为最完美的Linux发行版本的原因之一。Gentoo最初由Daniel Robbins(FreeBSD的开发者之一)创建,首个稳定版本发布于2002年。由于开发者对FreeBSD的熟识,所以Gentoo拥有媲美FreeBSD的广受美誉的ports系统——Portage包管理系统。不同于APT和YUM等二进制文件分发的包管理系统,Portage是基于源代码分发的,必须编译后才能运行,对于大型软件而言比较慢,不过正因为所有软件都是在本地机器编译的,在经过各种定制的编译参数优化后,能将机器的硬件性能发挥到极致。Gentoo是所有Linux发行版本里安装最复杂的,但是又是安装完成后最便于管理的版本,也是在相同硬件环境下运行最快的版本。最后,介绍一下FreeBSD,需要强调的是:FreeBSD并不是一个Linux系统!但FreeBSD与Linux的用户群有相当一部分是重合的,二者支持的硬件环境也比较一致,所采用的软件也比较类似,所以可以将FreeBSD视为一个Linux版本来比较。FreeBSD拥有两个分支: stable和current。顾名思义,stable是稳定版,而current则是添加了新技术的测试版。FreeBSD采用Ports包管理系统,与Gentoo类似,基于源代码分发,必须在本地机器编后后才能运行,但是Ports系统没有Portage系统使用简便,使用起来稍微复杂一些。FreeBSD的最大特点就是稳定和高效,是作为服务器操作系统的最佳选择,但对硬件的支持没有Linux完备,所以并不适合作为桌面系统。下面给为选择一个Linux发行版本犯愁的朋友一些建议:如果你只是需要一个桌面系统,而且既不想使用盗版,又不想花大量的钱购买商业软件,那么你就需要一款适合桌面使用的Linux发行版本了,如果你不想自己定制任何东西,不想在系统上浪费太多时间,那么很简单,你就根据自己的爱好在ubuntu、kubuntu以及xubuntu中选一款吧,三者的区别仅仅是桌面程序的不一样。 ◆如果你需要一个桌面系统,而且还想非常灵活的定制自己的Linux系统,想让自己的机器跑得更欢,不介意在Linux系统安装方面浪费一点时间,那么你的唯一选择就是Gentoo,尽情享受Gentoo带来的自由快感吧! ◆如果你需要的是一个服务器系统,而且你已经非常厌烦各种Linux的配置,只是想要一个比较稳定的服务器系统而已,那么你最好的选择就是CentOS了,安装完成后,经过简单的配置就能提供非常稳定的服务了。 ◆如果你需要的是一个坚如磐石的非常稳定的服务器系统,那么你的唯一选择就是FreeBSD。 ◆如果你需要一个稳定的服务器系统,而且想深入摸索一下Linux的各个方面的知识,想自己定制许多内容,那么我推荐你使用Gentoo。
⑼ 如何打造自己的 Linux 发行版
我们散穗可以用谷歌帐绝掘卜户、Facebook、Twitter、Yahoo、Novell或OpenID来注册。一旦我们首次登录进去,会被要求为你的设备(发并穗行版)选择一个基本模板。
⑽ 如何构建自己的Linux发行版
一、制作LTOS具体过程
光盘结构介绍
* isolinux 目录存放光盘启动时的安装界面信息
* images 目录包括了必要的启动映像文件
* CentOS 目录存放安装软件包及信息
* .discinfo 文件是安装价质的识别信息
* lemp.tar.gz 文件存放系统初始化及其相关程序安装脚本.
》》环境说明:CentOS 5.3-i386 Vmware Workstation上完成制作工作.
1.安装制作发行版所需的基本软件包
# yum -y install anaconda-runtime createrepo yum-utils anaconda anaconda-help busybox-anaconda mkisofs
2.制作ltos源文件夹
# mkdir /ltos
# mkdir /mnt/cdrom
# mount -t iso9660 -o loop /dev/cdrom /mnt/cdrom/ 挂载光盘镜像
或者挂载ISO文件到/mnt/cdrom
# mount -t iso9660 -o loop centos.xxx.iso /mnt/cdrom 将CentOS的ISO文件挂载到/mnt/cdrom目录
# cd /mnt/cdrom
# tar -cf -. | ( cd /ltos ; tar -xvpf -) //将/mnt/cdrom里的文件利用tar全部拷贝到/ltsos这个目录下.
#cd /ltos //进入此目录删除一些无关的文件,仍后进入后面的工作.
[root@server ltos]# ls -al
total 88
drwxr-xr-x 6 root root 4096 Apr 11 21:00 .
drwxr-xr-x 27 root root 4096 Apr 12 05:26 ..
drwxr-xr-x 2 root root 36864 Apr 8 16:06 CentOS
-rw-r--r-- 1 root root 97 Apr 8 16:43 .discinfo
drwxr-xr-x 4 root root 4096 Mar 21 23:04 images
drwxr-xr-x 2 root root 4096 Apr 12 00:00 isolinux
-rw-r--r-- 1 root root 14371 Apr 11 23:16 lemp.tar.gz //这个软件包是我们后面要建立的,读者可以分析一下后面的ks.cfg脚本就可以明白他的用途.
drwxr-xr-x 2 root root 4096 Apr 11 21:00 repodata
-r--r--r-- 1 root root 7048 Mar 21 23:05 TRANS.TBL
3.定制package.list软件包清单
如安装一个CentOS5.3的系统,根据自己的需求选择软件包;如果想你的系统很小,建议选择最少的包。安装完成以后,在系统里会产生日志。日文文件存放在/root/install.log。
# cat install.log | grep Installing | sed 's/Installing //g'|sed 's/^[0-9]\+://g' > packages.list
#mkdir /ltos/CentOS 建立存放rpm包的目录.
创建自动提取相关rpm脚本:
#vi cprpms.sh
#!/bin/bash
DEBUG=0
LT_CD=/mnt/cdrom
ALL_RPMS_DIR=/mnt/cdrom/CentOS #挂载光盘存放的目录
LT_RPMS_DIR=/ltos/CentOS #存放RPM包的目录
packages_list=/root/packages.list
number_of_packages=`cat $packages_list | wc -l`
i=1
while [ $i -le $number_of_packages ] ; do
line=`head -n $i $packages_list | tail -n -1`
name=`echo $line | awk '{print $1}'`
version=`echo $line | awk '{print $3}' | cut -f 2 -d :`
if [ $DEBUG -eq "1" ] ; then
echo $i: $line
echo $name
echo $version
fi
if [ $DEBUG -eq "1" ] ; then
ls $ALL_RPMS_DIR/$name-$version*
if [ $? -ne 0 ] ; then
echo "cp $ALL_RPMS_DIR/$name-$version* "
fi
else
echo "cp $ALL_RPMS_DIR/$name-$version* $LT_RPMS_DIR/"
cp $ALL_RPMS_DIR/$name-$version* $LT_RPMS_DIR/
# in case the failed
if [ $? -ne 0 ] ; then
echo "cp $ALL_RPMS_DIR/$name-$version* "
cp $ALL_RPMS_DIR/$name* $LT_RPMS_DIR/
fi
fi
i=`expr $i + 1`
done
执行以上脚本将定制ltos必要的rpm复制到/ltos/CentOS目录
返回到/ltos目录下,执行createrepo程序生成repodata下的comps.xml文件
#cd /ltos
#createrepo -g repodata/comps.xml .