N25_第十周作业

1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情)

POST –> BootSequence(BIOS) –>Bootloader(MBR) –>Kernel(ramdisk)–>rootfs(readonly)–>switchroot–>/sbin/init(设置默认运行级别–>运行系统初始化脚本,完成系统初始化–>关闭对应级别下需要停止的服务,启动对应级别下需要开启的服务–>设置登陆终端[启动图形界面])

1)加电自检(POST),BIOS启动引导阶段;

     在该过程中实现硬件的初始化以及查找启动介质;

     从MBR中装载启动引导管理器(GRUB)并运行该启动引导管理;

     MBR才512bytes,所以现在很多都用UEFI,GPT方式咯

2)GRUB(Grand Uniform Bootloader)启动引导阶段;

   功能:提供一个菜单,允许用户要选择启动的不同系统或内核版本,把其内核加载到RAM中的特定空间,解压、展开,让后控制权移交给kernel

     装载stage1

     装载stage1.5

     装载stage2(因为MBR很小,所以这里没有限制哦)

     读取/boot/grub.conf文件并显示启动菜单;

     装载所选的kernel和initrd文件到内存中

  PS:LILO:支持柱面1024,现在基本都用在android手机,不用再PC机了

3)内核阶段:

    探测可识别到所有硬件设备

    加载各种硬件驱动程序;(有可能会借助于randisk加载驱动)

    以只读方式挂载根文件系统

    运行用户空间的第一个应用程序:/sbin/init

 ps: ramdisk:Linux 内核特性之一:使用缓冲和缓存来加速对磁盘上的文件访问:

ramdisk –> ramfs

initramfs — dracut,mkinitrd (CenetOS6,7

4)init用户空间初始化阶段:

     启动/sbin/init程序;

     运行rc.sysinit脚本,设置系统环境,启动swap分区,检查和挂载文件系统;

     读取/etc/inittab文件,运行在/et/rc.d/rc<#>.d中定义的不同运行级别的服务初始化脚本;

     打开字符终端1-6号控制台/打开图形显示管理,设置登录

   

  init程序:

CentOS 5 : /ect/inittab

CentOS 6 :Upstart

  /etc/inittab:这个文件已废

  /etc/init/*.conf,

CentOS 7 : systemd

  配置文件:/usr/lib/systemd/system/, /etc/systemd/system/


2、为运行于虚拟机上的CentOS 6添加一块新硬件,提供两个主分区;

  (1) 为硬盘新建两个主分区;并为其安装grub;

  (2) 为硬盘的第一个主分区提供内核和ramdisk文件; 为第二个分区提供rootfs;

  (3) 为rootfs提供bash、ls、cat程序及所依赖的库文件;

  (4) 为grub提供配置文件;

  (5) 将新的硬盘设置为第一启动项并能够正常启动目标主机;

    功能:在其他系统上制作一个完整的grub引导系统,并且能跑起来!!

    在虚拟机中另外添加磁盘,fdisk /dev/sdb  # 创建三个分区,boot,/,swap

    ~]#partx -a /dev/sdb

    ~]#mke2fs -t ext4 /dev/sdb1

    ~]#mke2fs -t ext4 /dev/sdb3

    ~]#mkswap /dev/sdb2

    注意:这个在centos7没有做成功,centos6可以的

    注意:安装grub引导时,必须要指定boot的,不能用当前系统

    ~]#mkdir /mnt/boot

    ~]#mount /dev/sdb1  /mnt/boot/

    安装grub

    ~]#grub-install –root-directory=/mnt  /dev/sdb   ;指定根在什么地方,不能写到/mnt/boot

    ~]#cd /mnt/boot ;有了第一阶段和第二阶段的文件,还差,配置文件、内核和rootfs

    ~]#cp /boot/vmlinuz-2.6.32-431.el6.x86_64 /mnt/boot/vmlinuz

    ~]#cp /boot/initramfs-2.6.32-431.el6.x86_64.img   /mnt/boot/initramfs.img

    ~]#vim /mnt/boot/grub/grub.conf ; 注意,下列信息 是配置后单独分系统使用的,所以,sda,不是sdb

    default=0

    timeout=5

    title CentOS (smile)

            root (hd0,0)

            kernel /vmlinuz ro root=/dev/sda3  selinux=0  init=/bin/bash

            initrd /initramfs.img

    mkdir /mnt/sysroot

    mount /dev/sdb3 /mnt/sysroot

    cd /mnt/sysroot

    mkdir -pv  etc bin sbin lib lib64 usr home tmp mnt var proc root

    cp /bin/bash  /mnt/sysroot/bin

    ldd /bin/bash | grep "/lib[^[:space:]]*"  ;获取这个命令依赖的库文件

    注意:这里调用我写的一个脚本,复制命令以及相关的依赖库文件

    

    #!/bin/bash

    #

    #Athor:smile

    #Date:2017-1-22

    #Filename: copy_Command_Lib.sh

    #Pragram:

    #

    #  Copy enter "command" and "libraries" file

    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

    export PATH

     

    #指定的根路径

    dir_path=/mnt/sysroot/  

     

    # 传递给函数可执行命令,复制命令程序和依赖库文件到指定目录 ,并且取掉绝对路径

    f_copy_com_lib() {

     command_path=$(which  –skip-alias "$1" ) #命令取绝对路径

     temp_dir=${command_path#*/} # 取掉绝对路径/

     temp_dir=${temp_dir%/*} # 取掉后面的文件文件名

     mkdir -p $dir_path$temp_dir # 创建/mnt/sysroot下对应的的目录

     cp -rf $command_path  $dir_path$temp_dir

     

    #获取命令路径要注意两个问题:第一个要避开which查出结果有alias别名问题, which COM | grep -v "alias" 除去别名

     #第一步,查出命令路径,第二步,去掉alias,第三步,查出命令所以来的库,第四步,获取库的准确路径

     for lib_file in $( ldd $(which –skip-alias  "$1"  ) | grep -o "/lib[^[:space:]]*") ; do

     temp_dir=${lib_file#*/} #取掉绝对路径 ${string#*word}

     temp_dir=${temp_dir%/*} #去掉基名

     mkdir -p $dir_path$temp_dir #创建一个库文件的路径

     cp -rf $lib_file   $dir_path$temp_dir  #复制库文件到指定的目录中

     #echo "${a_library[$i]}" #let i++

     echo "$lib_file"

     echo

     done

    }

     

    while true ; do

     

    cat << EOF

    +++++++++++++++++++++++++++++++++++++++++++++++++

    command)Please enter the system existing  command

    quit) quit script

    +++++++++++++++++++++++++++++++++++++++++++++++++

    EOF

     

     read -p "Please enter existing command:" v_command

     if [ $v_command == "quit" ] ; then

     break

     fi

     #如果输入的不存在的命令,处理

     if ! ( which $v_command &>/dev/null ) ; then

     echo "ERROR:command not found!"

     continue # 进行下一次循环

     fi

     f_copy_com_lib  $v_command

     

    done

    cp ….

    chroot  /mnt/sysroot   ;切换根命令 ,进行测试

    exit

    sync   ;同步到磁盘

    第二步:

    创建新的虚拟机,加载配置好的分区

blob.png

如果需要啊添加虚拟机的话,就能就在grub中添加引导记录
mount /dev/sdb1   /mnt/boot

blob.png

blob.png

blob.png

blob.png


3、制作一个kickstart文件以及一个引导镜像。描述其过程。

制作kickstart文件,我目前我喜欢去安装一个文件系统,等系统安装好了,在/root/anaconda-ks.cfg下获取,再来针对改一改(自己能力弱吧,也可以在网上获取的,CentOS6和CentOS7产生的kickstart文件还是有点不一样,不过CentOS应该可以兼容的)

kickstart文件的模板

命令段

指定各种安装前配置选项,如键盘类型

必备命令

可选命令

程序段

指明要安装程序包,以及包组,也包括不安装的包

%packages ;程序包开始了

@group_name

package

-package  ;指定不要的程序包

程序包

%end

脚本段

%pre:安装前脚本

运行环境:运行安装介质微型linux系统环境

%end

%post:安装后脚本

运行环境:安装后的运行环境

%end

有多种方式自动话实现安装,引导光盘中,http和ftp网络上,

用光盘下的最小引导系统单独做成关盘镜像:

~]# cp -rf  /media/isolinux   /mnt/myiso

~]# cp   myks.cfg  /mnt/myiso

mnt]# mkisofs -R -J -T -v –no-emul-boot –boot-load-size 4 –boot-info-table -V "CentOS 6.5 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso myiso/

#创建时,把制作好的myks.cfg文件 放在myiso目录下,并且和isolinux目录同一个

怎加载ks.cfg文件

boot:linux ip=192.168.10.19  netmask=255.255.255.0  ks=http://192.168.10.100/ks.cfg  ;前面的ip地址是配置当前主机的地址

boot: linux ks=cdrom:/path/to/ks_file


kickstart文件中各个字段的解读:

authconfig:认证方式配置

authconfig –enableshadow –passalgo=sha512

bootloader:定义bootloader的安装位置及相关配置

bootloader –location=mbr –driveorder=sda –append="crashkernel=auto rhgb quiet"

keyboard us 

lang:语言类型

part:分区

part /boot –fstype=ext4 –size=500

part pv.008002  –size=51200

clearpart:清除分区

   clearpart –none –drives=sda;清空磁盘分区

 volgroup:创建卷组

    volgroup myvg  –pesize=4096 pv.008002

 

 logvol:创建逻辑卷

  logvol /home –fstype=ext4 –name=lv_home –vgname=myvg –size=4122


rootpw:管理员密码

rootpw –iscrypted $llll

生成密码的方式:

~]#openssl passwd -1 -salt `openssl rand -hex4` 

timezone:时区

timezone Asia/Shanghai

可选命令

install OR upgrade:安装或升级

text:安装界面类型,text为tui,默认是gui

network:配置网络接口

network –noboot yes –device eth0 –bootproto dhcp  –noipv6 

防火墙:firewall  –server=ssh 

firewall –disabled

selinux :SELinux(内核安全机制

selinux  disabled

  halt,poweroff 或者reboot,安装后的行为

  repo:指明安装时使用的repository

  repo –name="CentOS" –baseurl=cdrom:sr0  –cost=100 ;cost是开销,默认是1000,这里比较优先 

  url:指明安装时使用的 repository ,但为url格式

  url –url=http://192.168.10.102/cobbler/ks_mirror/CentOS-7.0-x86_64/


4、写一个脚本

  (1) 能接受四个参数:start, stop, restart, status

   start: 输出“starting 脚本名 finished.”

   …

  (2) 其它任意参数,均报错退出;

blob.png

5、写一个脚本,判断给定的用户是否登录了当前系统;

  (1) 如果登录了,则显示用户登录,脚本终止;

  (2) 每3秒钟,查看一次用户是否登录;

blob.png

6、写一个脚本,显示用户选定要查看的信息;

   cpu) display cpu info

   mem) display memory info

   disk) display disk info

   quit) quit

   非此四项选择,则提示错误,并要求用户重新选择,只到其给出正确的选择为止;

blob.png

blob.png

7、写一个脚本

  (1) 用函数实现返回一个用户的和SHELL;用户名通过参数传递而来;

  (2) 提示用户输入一个用户名或输入“quit”退出;

    当输入的是用户名,则调用函数显示用户信息;

    当用户输入quit,则退出脚本;进一步地:显示键入的用户相关信息后,再次提醒输出用户名或quit: 

blob.png

blob.png

原创文章,作者:不忘初衷,如若转载,请注明出处:http://www.178linux.com/67426

(0)
不忘初衷不忘初衷
上一篇 2017-02-14
下一篇 2017-02-14

相关推荐

  • linux终端类型

    人机交互界面:GUI、CLI GUI: gnome:c,gtk kde:c++,qt CLI: bash,zsh,sh,csh,ksh 不同CLI间跳转:alt+f1\f2\f3\f4   终端类型: 物理终端、控制台终端:/dev/console,控制台console 计算机显示器通常被称为控制台终端(Console) 虚拟终端:/dev/tty…

    Linux干货 2016-10-14
  • Sed简介

    Sed简介    一、简介   sed全称是:Stream EDitor。sed命令的功能同awk类似,差别在于,sed简单,对列处理的功能要差一些,awk的功能复杂,对列处理的功能比较强大。  sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern s…

    Linux干货 2015-05-11
  • 第8天磁盘管理练习—增加SWAP分区

          SWAP交换空间,指在物理内存不够用时,充当虚拟内存使用。在实际操作中,使用1-2G的一个分区并指定分区类型为SWAP,挂载至SWAP来使用。 一、新增分区 fdisk /dev/sda n     #新增加分区 t   &nb…

    Linux干货 2016-07-04
  • 使用groupmems -l -g 组名选项遇到的问题

    groupmems -l -g 组名 显示的不是附加组的成员,而是显示的是/etc/group文件的最后一个字段的内容

    Linux干货 2017-11-23
  • 基础指令使用篇 Linux版

    回显,回声 echo echo hello > /dve/pts/1 打开图形界面 init 5   关闭图形界面 init 3 ctrl+alt+F1-6字符,F7图形界面 chvt 改变虚拟终端 chvt +数字 startx  图形的软件打开 poweroff centOS 6.8与7.2都正常关闭断电 hostname 显示…

    系统运维 2016-08-04

评论列表(1条)

  • 马哥教育
    马哥教育 2017-03-30 14:09

    非常非常详细,很棒。