Linux系统启动过程及简单的安装包制作

简介:

一.Linux系统启动过程

BIOS->MBR->GRUB->LINUX裸内核->init进程

1.BIOS:硬件启动BIOS。管理所有的硬件设备,它会对电脑的硬件设施进行完全彻底的检验和测试,传送或接受各种外部设备的数据,布局各个设备的中断号,使得CUP能准确的响应设备中断。BIOS有一个对外部存储设备的排序记录,决定了下一阶段从哪个设备读取MBR,这些设备的顺序可以在BIOS中设置(启动设备)


2.MBR:master boot record主引导记录。MBR|DPT|BRID一共512字节,合称为Boot Sector引导扇区。

DPT磁盘分区表,只有64字节;BRID引导记录标识,只有2字节;MBR一共446字节位于开头段.MBR一定位于

硬盘的0道0头1扇区的前446字节上,不属于任何分区。BIOS的最后运行阶段就是检查BRID的值是否是0X55AA,

如果不是,当然就死机啦;如果是,就将Boot Sector 512字节读到内存的0x7c00,然后跳转到这里执行MBR。

我们知道在BIOS界面中是可以配置系统的启动盘的,所以这个启动盘的开头段必须存在一个MBR。

MBR太小了,它的作用只是把存储在该存储设备中(MBR,GRUB,操作系统一般在同一存储设备)的操作系统自己的引导程序读入内存并跳转到操作系统的引导程序。本身与任何操作系统无关。


3.GRUB : grand unified bootloader 牛逼的统一引导加载器,属于BootLoader的一种。提供可供用户选择加载的操作系统选项,并加载操作系统。grub是可配置的。


4.LINUX裸内核:grub引导完成之后,就要执行Linux内核了,包括加载硬件驱动,初始化网络堆栈等。最后将调用init程序(sbin/init) ,这是内核空间初始化完成了,init将执行用户空间的初始化。


5.init进程(sbin/init):init的初始化过程可以分成通用初始化和运行级别初始化。通用初始化主要是对主机名,文件系统,

udev,时钟,驱动,键盘布局,等进行初始化;运行级别初始化是针对运行级别0-6作不同的初始化,从而在不同的

运行级别上有不同的表现。程序的初始化脚本统一放在/etc/init.d/目录下,然后在/etc/rc[n].d/对应的n运行

级别的目录下创建相应格式的链接,链接名为[K|S][NUM][文件名] 如S99ondemand->../init.d/ondemand

表示在start启动时按顺序第99个执行S99ondemand脚本;K01cermonger表示在系统关闭时执行的文件。用户可以/etc/init.d/下创建初始化脚本然后在

/etc/rc[n].d/下创建软链接。所有/etc/rc[n].d/下的脚本其实都是通过/etc/init.d/rc脚本来执行的,所有该脚本在开机关机时都会被调用。

/etc/init.d/rc.local会被每一种运行级别执行,因为他在/etc/rc[n].d/下都被链接了,所有可以考虑在该文件中配置ip地址。

关于6种运行级别: who -r查看当前运行级别;init n 改变运行级别

0-halt,关闭系统,不能作为默认运行级别

1-single user mode 单用户模式,类似于安全模式

2-Multiuser,whiout NFS 与3类似,但是没有联网模式

3-Full Multiuser mode 全功能的多用户模式

4-unused 保留

5-X11 带有图像用户界面的全功能多用户模式

6-reboot 重新启动,不能作为默认运行级别


6.init进程完成之后,将进入用户登录界面

用户登录时将执行/home/username/.profile文件

当启动终端时将执行/home/username/.bashrc文件


二.简单的安装包制作

制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了。一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可。这就是Linux那些bin啊run啊等安装脚本的简单制作了。下面来看看两个简单的例子:


 run程序安装包实质上是一个安装脚本加要安装的程序,如下图所示:

|—————–|

|                       |

|     安装脚本      |

|                       |

|—————–|

|                       |

|      程序            |

|                       |

|—————–|

图: run安装包的结构

这样整个run安装包结构就一目了然了,实际上因为实际需要结构多少有点变动但这个无关紧要,只需要明白原理就行了。

制作run安装包以下举个实际的例子:

为了简单起见,要安装的程序就是helloworld程序,安装它的过程就是把它拷贝到/bin目录下。


现在有一个安装脚本了,名为install.sh,有一个要安装的程序helloworld.因为要安装的程序一般都是用.tar.bz2来做的。我们这儿也做一下: 

tar -zcvf helloworld.tar.gz helloworld

现在修改一个安装脚本install.sh

改为:

#!/bin/bash

lines=7      #这个脚本共有6行

tail -n +${lines}  $0  > /tmp/helloworld.tar.gz 

tar -zxvf /tmp/hellowrold.tar.gz

cp helloworld /bin/

exit 0

然后使用cat命令连接安装脚本install.sh和helloworld.tar.bz2。

$ cat install.sh helloworld.tar.gz > myinstall.run

这样就得到了myinstall.run文件,它的结构如下:

|——————| 第1行

|                         |

|    install.sh       |

|                         | 第6行

|——————|

|                         | 第7行

|helloworld.tar.bz2 |

|                         |

|——————| 结尾

图: myinstall.run安装包的结构

运行myinstall.run时,运行到第6行的exit 0脚本就退出了,所以不会去运行第7行以下的二进制数据,而我们用了tail巧妙地把第7行以下的数据重 新生成了一个helloworld.tar.gz文件。再执行安装。

run安装包制作较小的程序包是很好的选择,但是它也有缺点,做逻辑比较复杂的安装包,写的安装脚本将会很麻烦。因此此时还是用其他的安装包更好。

(查找当前文件的某行#END_END_END_END/!p,并输出其后的内容)

    if ! sed -n -e '1,/^#END_END_END_END/!p' $0 >tmp.tgz   2>/dev/null; then

     echo "ERROR: extract tar.gz failed"

       exit -1

    fi



本文转自 a_liujin 51CTO博客,原文链接:http://blog.51cto.com/a1liujin/1880004,如需转载请自行联系原作者

相关文章
|
3天前
|
Ubuntu Linux 编译器
【Linux】详解动静态库的制作和使用&&动静态库在系统中的配置步骤
【Linux】详解动静态库的制作和使用&&动静态库在系统中的配置步骤
|
3天前
|
Linux Windows
虚拟机添加新硬盘之linux系统篇
虚拟机添加新硬盘之linux系统篇
|
4天前
|
负载均衡 Linux 应用服务中间件
Linux系统中前后端分离项目部署指南
Linux系统中前后端分离项目部署指南
|
1天前
|
IDE Linux 开发工具
Linux 系统上安装
在Linux和Mac上安装Lua 5.3.0只需下载源码,解压,编译和安装。Windows用户可选择SciTE IDE或通过LuaForWindows在Github或Google Code下载安装。创建 HelloWorld.lua,使用`lua HelloWorld.lua`运行显示"Hello World!"。另可参考LuaDist官方推荐方式安装。
|
1天前
|
Linux API
Linux系统编程之文件编程常用API回顾和文件编程一般步骤
Linux系统编程之文件编程常用API回顾和文件编程一般步骤
Linux系统编程之文件编程常用API回顾和文件编程一般步骤
|
2天前
|
编解码 Ubuntu Linux
|
2天前
|
Linux
|
2天前
|
Linux
请问如何在Linux系统中删除一个磁盘分区
请问如何在Linux系统中删除一个磁盘分区
|
2天前
|
Linux
Linux系统的磁盘管理
Linux系统的磁盘管理
|
2天前
|
Unix Linux Shell
Linux系统使用超详细(一)
Linux系统是一种开源的、类Unix操作系统内核的实现,它基于Unix的设计原理和思想,并在全球范围内广泛应用。以下是对Linux系统的详细描述: