导航新进会员
在线用户目前共有 1 位用户和 21 位游客在线。
在线用户
|
通过chroot 构建Linux操作系统概要作者:北南南北
1、chroot方式安装操作系统的目的和用途;
6.2 file.tgz、file.tar.gz和file.tar.bz2的提取; 6.3 file.deb的提取; 6.4 file.iso文件的提取; 6.5 提取文件相关参考; 7、chroot 成功切入新的操作系统后的软件安装问题补充;
几乎所有的开源操作系统都可以用chroot的方法来安装,比如Gentoo 、LFS及CRUX比较常用chroot;通过chroot安装操作系统,好象堆积木一样,一块一块的把操作系统安装起来,所以Gentoo和LFS的Fans特别有成就感。呵,也说是操作系统全手工打造,成就感自然不言而喻了; 通过chroot安装操作系统,我们能学到什么呢?主要是能知道一个操作系统最少需要多少部件可以“动”起来,以及了解一个操作系统需要哪些基础的必备的“部件”,这对开发自己的基于Linux操作系统以及了解操作系统的构成及原理是比较重要的;
最根本的环境是是在您的机器有得有一个能运行的Linux操作系统或一个LiveCD;
要下面几个流程:
一个操作系统可以安装在物理硬盘中,也可以安装在一个映像文件中;安装在物理硬盘中大家都能理解。安装在一个映像文件中怎么理解呢?比如通过VMWARE来虚拟安装操作系统是不是安装在一个文件中呢?是的,和这个意思差不多; 再说一点,交换分区swap 也可以是文件;再比如Xen虚拟操作系统就可以安装在文件映像中; 安装在映像文件中的操作系统,可以用来学习,通过chroot访问,也可以通过xen来虚拟等 ... ... 还可以做成类似file.iso的形式来存储文件等;
本例是在Fedora Core 5.0 中通过chroot 安装Slackware 10.2,安装目的地的介质分为两种,一种是物理硬盘;一种是映像文件。安装在物理硬盘的可以通过GRUB或LILO等引导管理器来独立真实运行,安装在映像文件中的能通过chroot访问或Xen虚拟运行;
这个过程好象是有点多余,但写一写也好,这是大多开源操作系统的安装都通用的,也是最原始、最有效的方法,也就是说在一个已有的操作系统环境中安装另一个操作系统; 挂载文件系统就是通过mount 来挂载; #mount 存储设备 挂载点举例: 比如我的硬盘/dev/hda5是空白分区,并且我想创建/dev/hda5为ext3文件系统,并且把它挂载到 /mnt/slack目录中,然后通过chroot来安装Slackware 10.2; 第一步:您要通过分区工具fdisk 或parted来规划您的分区,此步省略;
[root@localhost ~]#mkdir /mnt/slack 第三步:挂载文件系统; [root@localhost ~]# mount /dev/hda5 /mnt/slack 注:挂载/dev/hda5到 /mnt/slack目录;第四步:挂载slackware 10.2 光盘的第一张,安装基础系统; [root@localhost ~]# mount -o loop slackware-10.2-install-d1.iso /mnt/cdrom/我们可以先在/mnt/slack目录中创建一个软件包存放目录,用于存放slackware-10.2-install-d1.iso中的所有内容; [root@localhost ~]#mkdir /mnt/slack/pack然后把slackware 第一张盘中的slackware目录中的a目录中的所有包都进行解压缩,以及d目录中glibc开头的包,d目录中的zlib以及zsh 并且把解出来目录,比如 /usr、etc、lib等所有目录都复制到 /mnt/slack中; 第五步:解决依赖关系; 如果我们运行下面的命令提示没有/bin/bash这个文件时,我们要解决依赖关系;通过解决依赖关系,也会发现运行chroot所需要的必备的基础软件包; [root@localhost ~]# chroot /mnt/slack如果提示缺少一些文件,我们可以自行判断缺少哪些包;当我们进入/mnt/slack/bin目录发现,的确没有bash这个文件,所以我们要复制一个bash过去; [root@localhost ~]# cd /mnt/slack/bin这时我们还要判断 bash 所依赖的库文件; [root@localhost bin]# ldd bash 出来的依赖关系,大多是glibc的,glibc被安装在了/mnt/slack/lib/tls目录中,我们可以根据提示一个一个的做链接。少什么东西就做什么的链接;要看/mnt/slack/lib中是否有glibc的文件,然后做链接。如果是存放在tls目录中的,也要链到/mnt/slack/lib中。链接时要用相对路径,不能用绝对路径; #ln -s 原文件名 新文件名什么才算解决了 bash的依赖关系了呢?直到能chroot /mmt/slack才算成功; chroot 成功后,我们就能进入Slackware系统,然后通过pkgtool 或installpkg 工具来安装其它的软件包,比如 内核什么的; [root@localhost ~]# chroot /mnt/slack
如果要让一个操作系统独立运行,非得写一写/etc/fstab文件,对于这个您可以参考,比如 下面的这个例子,您改一改就可以用了; /dev/hda7 swap swap defaults 0 0第八步:引导系统; 要通过GRUB或LILO引导管理器实现对Slackware的引导;不多说了,请参考 :《系统引导管理器GRUB,为初学者指南》
[root@localhost ~]# dd if=/dev/zero of=slack.img bs=1M count=2000 seek=1024 [root@localhost ~]# /sbin/mkfs.ext3 slack.img第三步:挂载已被格式化映像文件; [root@localhost ~]# mkdir /mnt/slack第四步以后和物理硬盘操作基本相同,省略过去;
发行版都有一定的软件包格式,比如 file.rpm 、file.deb或file.tgz或file.tar.gz等;rpm格式的软件包,一般基于Redhat或Fedora为基础开发的都采用RPM格式。因为chroot安装操作系统,首要的是从一个软件包中提取文件,然后复制到文件系统中,所以提取文件工具也得做一点解说; 操作的前提是得有rpm的管理工具,也就是说得有rpm等相关命令;
举例: [root@localhost RPMS]# rpm2cpio gaim-1.3.0-1.fc4.i386.rpm |cpio -div抽取出来的文件就在当用操作目录中的 usr 和etc中; 其实这样抽到文件不如指定安装目录来安装软件来的方便;也一样可以抽出文件; 为软件包指定安装目录:要加 -relocate 参数;下面的举例是把gaim-1.3.0-1.fc4.i386.rpm指定安装在 /opt/gaim 目录中; [root@localhost RPMS]# rpm -ivh --relocate /=/opt/gaim gaim-1.3.0-1.fc4.i386.rpm这样也能一目了然;gaim的所有文件都是安装在 /opt/gaim 中,我们只是把gaim 目录备份一下,这样其实也算提取文件的一点用法;
[root@localhost ~]# tar zxvf file.tgz
[root@localhost ~]# ar x file.debfile.deb通过ar x 来解包,然后再把data.tar.gz解开就看到相关的目录和文件了;
这样的文件在Linux主要通过mount -o loop file.iso 挂载地址;比如 ; [root@localhost ~]# mount -o loop slackware-10.2-install-d1.iso /mnt/cdrom/
《文件解压缩》
如果通过chroot能进入新安装的操作系统,我们就可以新操作系统的软件包管理工具来安装其它软件包了,比如 Slackware 用的是pkgtool 或installpkg工具;Fedora 用的是 rpm 等工具;大多发行版所用的工具不尽相同,以发行版为准 ;
在去年的时候就想写此文,随着时间的推移,今天想起来的事情可能明天就忘的差不多了,所以用到chroot的时候就想写,用不到的时候就把写文档的事扔到一边。今天正好写关于Xen的文档,也恰恰用到chroot方式安装新的操作系统,所以“被迫”中写了一篇。虽然涉及chroot的功用少了点,但大体上还是把chroot说了差不多了;可能本文的名字有点不符合,我也不知道用什么命名标题不好。慢慢修正中... ...
《实例解说 fdisk 使用方法》
|
最新评论
|
写得真得很好!!
写得真得很好!!
以前见宝玉而不识!!
再一次过来,我决心不再乱找了.我要在首页长驻下来,直到真正入门为止.
解决依赖关系好像不用那么复杂
slack中文用户组中《安装一个精简的 Slackware》(http://slack.linuxsir.org/main/?q=node/51)方法很简单,文章用的是9.1,装完110M;我自己选择删除一些A中的包,装完A才70M,同样的方法试了11的要110M。
肃然起敬
兄弟真是令在下佩服,故决定以后多来linuxsir发文 ^_^
-- tianleizhao
Good
Very good!
linuxsir is one of the best linux sites in the world!
终于看到一篇通过实例讲解chroot的文章了
终于看到一篇通过实例讲解chroot的文章了,真是太感谢北南大哥了。
北南大哥真是辛苦
天天写文章,佩服……
老兄,神龙见首不见尾啊
看你如此勤劳的写文章,唉,不知道怎么说下去了。如果兄弟还和年前有一样的想法,来找我,如果没有了,那就算了。总之,撑着这个网站,你太辛苦了。
--goldeagle
不管你看不看的见我这个帖子,我还是要在这里
在你的文章的帮助下,我学LINUX容易了一些!!一个爱LINUX的人!
敬佩北南大哥
本人在网络上一向是自私的,只知道向各位网友索取,从来没有奉献过什么!
北南大哥的文章我已看过好多,今日是第一次留下些话语!
谢谢你,北南大哥,向您学习!