《从源代码打造一个最小化的linux系统实作指南》由会员分享,可在线阅读,更多相关《从源代码打造一个最小化的linux系统实作指南(10页珍藏版)》请在金锄头文库上搜索。
1、从源代码打造一个最小化的从源代码打造一个最小化的 LinuxLinux系统实作指南系统实作指南从源代码打造一个最小化的 linux 系统实作指南作者:greg o“keefe, gcokeefepostoffice.utas.edu.au译者: 梁昌泰 linuxratgnuchina.orgv0.8, sep 2000 翻译日期: 2001 年 01 月第 0.8 版以下就是从源代码中打造一个最小化的 linux 系统的操作说明 它曾经是 从加电启动到 bash 提示符(frompowerup to bash prompt)的一部分但是我将它们分离开来,以便使得它们更简短而更为集中化我们在此
2、所要打造的系统是非常小的, 而且并不准备作为工作产品来使用 如果您想从头开始打造一个有实际用途的系统,请参阅 gerard beekmans 所撰写的 linux 空手道实作指南篇 (linux from scratch howto)。1. 您所需要具备的条件我们首先要安装一个 linux 发行套件比如小红帽(redhat)到一个分区上, 然后使用它来在另一个分区上打造一个新的 linux 系统 我将我们所要打造的系统称为目标系统(target)而把我们所使用来打造新系统的系统称为 源头系统(source)可别把这个源头(source)系统同我们同时使用的源码(source code)相混淆了
3、哦:)因此,您得需要一台具有两个独立分区的机器如果可能,请尽量使用一台没有重要资料在里头的机器, 以免数据受损您可以使用一个已经存在的 linux 系统作为源头系统,但是我并不推荐这种方式如果您不慎遗漏了我们打造的指令的某些参数, 您有可能会意外地在这个系统上安装了一些没有必要的东西, 有可能会导致不兼 容和冲突。旧型的 pc 机硬件,大部分的 486 机器或者更早的机型,其 bios 都有一些极其烦人的限制它们没有办法读取硬盘超过前 512 兆之后的空间当然,这个对于 linux 来说并不是什么大问题,因为只要 linux 能够引导启动了, 将使用 linux 自己的磁盘 io,略过 bio
4、s 的调用但是为了能够让这些旧型机器能够引导 linux,那么 linux 内核必须存放在硬盘的前 512 兆之前的某个位置 如果您正好有这么个旧型机器, 您得准备好一个独立的且完全在前 512 兆范围内的硬盘分区,并将其挂载为/boot其它的分区就可以在任何位置,可以任意处理而不必担心是在硬盘的什么位置了。上一次我打造这个系统时,所使用的源头系统是小红帽 6.1(redhat 6.1),我安装了基本系统,附加有以下 软件包* cpp (c+编译器)* egcs (增强型 c 编译器)* egcs-c+ (增强型 c+语言编译器) * patch (打补丁程序)* make (编译批处理解释器
5、)* dev86 (设备文件包)* ncurses-devel (ncurses 库开发包)* glibc-devel (glibc 库开发包) * kernel-headers(内核源码头文件包)我还安装了 x window 视窗系统和 mozilla 网络浏览器以便更轻松地阅读文档,而实际上这两个东东并不是必要的在我竣工之时,这个源头系统大概使用了 350 兆的磁盘空间(看起来是多了一些,可是我还在纳闷为什么呢) 。竣工之时的目标系统占用了 650 兆磁盘空间,但是这个数值包含了所有的源码以及中途打造出来的文件 如果空间比较紧凑,您应该在每个软件包都打造完毕之后执行一下 make clea
6、n 来清除临时文件当然了,我对这个也是有点吃惊的。最后,您的准备好我们所要用来打造系统的源码包这些就是我在本文所讨论的软件包这些软件包都可以 从源码盘里面找到,或者从国际互联网上找到我会给出美国的站点和位于澳大利亚的镜像站点的地址。* makedev (设备生成器包)美国站点:ftp:/tsx-11.mit.edu/pub/linux/sources/sbin另外一个美国站点:ftp:/sunsite.unc.edu/pub/linux/system/admin * lilo (linux 引导器包)美国站点:ftp:/lrcftp.epfl.ch/pub/linux/local/lilo/澳
7、大利亚: ftp:/mirror.aarnet.edu.au/pub/linux/metalab/system/boot/lilo* linux 内核包(kernel) 使用 主页上所列举的镜像站点而最好不要使用美国站点站点下载,因为这些站点通常是超负荷运转的。 美国站点:ftp:/ftp.kernel.org/pub/linux/kernel澳大利亚站点: ftp:/kernel.mirror.aarnet.edu.au/pub/linux/kernel/* gnu libc 库包 其本身,以及 liuxthreads 线程附加库可在以下地址下载到美国站点:ftp:/ftp.gnu.org/
8、pub/gnu/glibc澳大利亚站点:ftp:/mirror.aarnet.edu.au/pub/gnu/glibc * gnu libc 附加库包 您可能还会需要 linuxthreads 线程附加库和 libcrypt 加密附加库如果 libcrypt没在那个站点找到, 那就是因为美国出口法律限制的原因, 那么您就可以从这里弄到 libcrypt 加密附加库 通常 linuxthreads 线程附加库跟 libc 库是放在同一个地方的libcrypt 加密附加库:ftp:/ftp.gwdg.de/pub/linux/glibc* gnu ncurses 美国站点:ftp:/ftp.gnu
9、.org/gnu/ncurses澳大利亚站点:ftp:/mirror.aarnet.edu.au/pub/gnu/ncurses* sysvinit (初始化脚本包)美国站点:ftp:/sunsite.unc.edu/pub/linux/system/daemons/init澳大利亚: ftp:/mirror.aarnet.edu.au/pub/linux/metalab/system/daemons/init * gnu bash (命令解释器包)美国站点:ftp:/ftp.gnu.org/gnu/bash澳大利亚站点:ftp:/mirror.aarnet.edu.au/pub/gnu/ba
10、sh* gnu sh-utils (命令解释器工具包)美国站点:ftp:/ftp.gnu.org/gnu/sh-utils 澳大利亚站点:ftp:/mirror.aarnet.edu.au/pub/gnu/sh-utils* util-linux (linux 常用工具包) 本软件包包含有 agetty 和 login。另外一个站点:ftp:/ftp.win.tue.nl/pub/linux/utils/util-linux/澳大利亚站点:ftp:/mirror.aarnet.edu.au/pub/linux/metalab/system/misc总结一下,您所需要的就是* 一台具有两个分别是
11、 400 兆和 700 兆独立分区的机器,或许您可能会需要少一些 。* 一个 linux 发行套件(譬如一个 redhat 光盘)和安装方式(譬如一个光驱)* 以上所列举的源码的 tar 包。我假定您可以自己安装源头系统,而用不着我来帮忙从这里开始,我假定源头系统已经安装好了。本小项目的第一个里程碑就是使得内核启动起来然后死翘翘,因为它没找到 init 初始化程序也就是说我们得安装一个内核和安装 lilo为了顺利安装 lilo,我们要用上在目标系统上/dev 目录下的设备文件lilo 需要它们来实现底层必需的磁盘存取来写入引导扇区makedev 正是用来创建这些设备文件的脚本程序(您当然可以只
12、需要从源头系统当中复制出来,不过这可是作弊不劳而获哦)但是最重 要的事情就是,我们需要一个文件系统来放置所有的这些东西。2. 文件系统我们的新系统是要安装在文件系统上的因此首先我们得使用命令 mke2fs 来创建文件系统,然后将其挂载 到某个地方我建议是挂载到/mnt/target 这个目录上接下来的操作中,我假定就用这个目录了为了节省您的宝贵时间,您可以在/etc/fstab 文件里面添加上这一项,以便每次源头系统启动的时候就能够自动将这个目录挂载上。当我们启动了目标系统,放置在/mnt/target 上的所有东西就会被当成了放置在/根目录上。我们需要在目标系统上建立固定的目录结构请参阅“文
13、件层次结构标准(简称 fhs,file heirarchystandard)“, 见于 文件系统一节来了解详情, 或者只需要 cd 切换目录到目标系统所挂载的地方然后尽管执行以下命令mkdir bin boot dev etc home lib mnt root sbin tmp usr var cd var; mkdir lock log run spoolcd ./usr; mkdir bin include lib local sbin share srccd share/; mkdir man; cd manmkdir man1 man2 man3 . man9因为 fhs 标准和大部
14、分的软件包在手册页(man page)放置位置上的处理并不一致,因此我们需要做一个符号连接cd .; ln -s share/man man3. makedev(设备生成器)我们要把源代码放置到目标系统的/usr/src 目录下面因此,举个例子吧,如果您的目标系统是挂载在/mnt/target 这个地方,且您的 tar 包是放在/root 里面,那么您要做的就是cd /mnt/target/usr/srctar -xzvf /root/makedev-2.5.tar.gz然后就把这些 tar 包复制到您要解开它们的地方就行了千万别迷糊了哦;-当您安装软件的时候,通常情况下您会把它们安装在正在使
15、用的系统上但是我们并不想这么做,因为我们是要把/mnt/target 当做根文件系统(root filesystem),就是要把这些软件安装到这个地方不同的软件包有 不同的处理方式比如说 makedev 设备生成器包,您要做的是root=/mnt/target make install您得先在这个包当中的 readme 说明文件和 install 安装说明文件当中查出这些选项,或者执行命令./configure -help 查看帮助说明。查看一下 makedev 包当中的 makefile 文件, 看看它是怎样处理我们在命令行当中设置的 root 变量的 接着通过执行 man ./makede
16、v.man 来查看一下它的手册页,看看它是怎么起到作用的您会发现生成我们自己的设备的方式就是执行 cd /mnt/target/dev 然后./makedev generic请使用 ls 命令来看看它都为我们生成了哪些设备文件吧。4. 内核下一步就是生成内核了我假设您以前是做过编译内核这种事的,所以我就长话短说了如果要启动的内核已经准备好的话,那么要安装 lilo 就会更容易请返回到目标系统的 usr/src 目录,然后在那儿解开 linux 内核源码进入 linux 源码树(cd linux)然后使用您最喜欢的方式配置内核,比如 make menuconfig如果您想让 自己的轻松一些,那么您可以为自己配置一个没有模块的内核如果您已经配置了模块,那么您就得编辑 makefile 文件,找出 install_mod_path 并将其设置为/mnt/target现在您可以执行 make dep,make bz