Linux入门攻坚——17、Linux内核编译及系统安装

Linux内核编译步骤
    1)下载源码展开
    2)make menuconfig,配置内核模块选项
    3)make [-j # ] ,编译
    4)make module_install,安装内核模块
    5)make install,安装内核,此步骤主要完成以下几项:
        -- 安装bzImage为/boot/vmlinuz-VERSION-RELEASE
        -- 生成initramfs文件
        -- 编辑grub配置文件

编译内核的步骤(进一步描述)
    (1)配置内核选项
        支持“更新”模式进行配置
        (a)make config:基于命令行以遍历的方式去配置内核中可配置的每个选项
        (b)make menuconfig:基于curses的文本窗口界面
        (c)make gconfig:基于GTK开发环境的窗口界面
        (d)make xconfig:基于Qt开发环境的窗口界面
        支持“全新配置”模式进行配置
        (a)make defconfig:基于内核为目标平台提供的“默认”配置进行配置;
        (b)make allnoconfig:所有选项均回答为“no”,对应的有make allyesconfig
    (2)编译
        make [-j #],可以启动多线程
        如何只编译内核中的一部分功能(必须站在内核源代码树上,即/usr/src/linux):
          (a)只编译某子目录中的相关代码:
          # cd /usr/src/linux
          # make dir/
          (b)只编译一个特定的模块:
          # cd /usr/src/linux
          # make dir/file.ko
          如:为e1000编译驱动:make drivers/net/ethernet/intel/e1000/e1000.ko
        如何交叉编译内核:
          编译的目标平台与当前平台不相同:如在x86平台上编译成arm平台用的内核
          # make ARCH=arch_name
        获取特定目标平台的使用帮助:make ARCH=arm help

如何在已经执行过编译操作的内核源码树做重新编译:即事先清理操作
    # make clean :清理大多数编译生成的文件,但会保留config文件等;
    # make mrproper:清理所有编译生成的文件、config即某些备份文件;
    # make distclean:mrproper、patches以及编译器备份文件;

screen命令:
    打开新的screen: screen
    退出并关闭screen:exit
    剥离当前screen:Ctrl+a,d
    显示所有已经打开的screen:screen -ls
    恢复某screen:screen -r [SESSION]

CentOS系统安装
安装操作系统,必然要运行一个安装程序,对于CentOS 系列的Linux,安装程序是anaconda    
anaconda:是安装程序,分为两种窗口
    tui:基于curses的文本窗口
    gui:图形窗口
鸡与蛋的问题:anaconda的运行是基于内核的,即需要在内核支持下运行,但是安装CentOS之前,是没有内核的。解决的方法是运行另一个内核,借鸡下蛋,即从光盘上加载运行一个内核,这涉及到光盘启动运行过程:
    光盘的格式有些类似与安装好系统的磁盘,其也有类似的MBR,其上是bootloader,也有类似/boot的目录,是isolinux:

可以看到,其上有vmlinuz,这是内核文件,还有initrd.img,虚拟根系统文件。看一下光盘引导的起始画面:

加载vmlinuz内核,加载iniitrd.img虚拟根,然后anaconda在此内核上运行.
        要想装载以上两个文件,需要bootloader,对于正常的CentOS系统,这个装载器是grub,而光盘上类似的是isolinux.bin,其配置文件是isolinux.cfg,其功能也分两部分,MBR上前446字节是isolinux目录下的boot.cat,负责引导并加载isolinux.bin,然后isolinux.bin根据配置文件并结合vesamenu.c32,启动一个菜单界面,菜单项是基于isolinux.cfg,背景图案是splash.jpg,按照用户选择的菜单项,以对应方式加载vmlinuz和initrd.img。
    isolinux.cfg菜单项如下:

结合下面的启动界面

菜单项是一一对应的。
背景图案splash.jpg:

CentOS的安装程序启动过程
    1)MBR:boot.cat
    2)stage2:isolinux/ioslinux.bin
        配置文件:isolinux/isolinux.cfg
    每个对应的菜单选项:
        加载内核:isolinuz/vmlinuz
        向内核传递参数:append initrd=initrd.img...
    装载根文件系统,并启动anaconda
    默认启动GUI接口,若是想显示指定TUI接口:
        向内核传递“text”参数即可:
        1)显示启动菜单后,按ESC键,显示:boot提示符,后键入:linux text

在这个boot提示符下,可以运行的是菜单配置项label后的内容,有如下几种:linux、vesa、rescue、local、memtest86
        2)在相应的启动菜单项上,按tab间,在下面的命令行后加text

注意:上述内容一般应位于引导设备上,而后续的anaconda及其安装用到的程序包等有几种方式可用:本地光盘、本地硬盘、ftp server:yum源、http server:yum源、nfs server
    如果想手动指定安装源:
        boot: linux method

anaconda程序的工作过程
    1、安装前配置阶段
        安装过程使用的语言、键盘类型、安装目标存储设备:basic storage(本地磁盘)或特种设备(iSCSI)、设定主机名、配置网络接口、语言、时区、管理员密码、创建一个普通用户、设定分区方式及MBR的安装位置、选定要安装的程序包
    2、安装阶段
        在目标磁盘创建分区,执行格式化操作等、将选定的程序包安装至目标位置、安装bootloader
    3、首次启动
        iptables、selinux、core dump

anaconda的配置过程
    (1)交互式配置方式
    (2)通过读取事先给定的配置文件自动完成配置
        按特定语法给出的配置选项:kickstart文件

安装引导选项:在boot提示符的命令行上
    boot:
        text:文本安装方式
        method:手动指定使用的安装方法
        与网路相关的引导选项:
            ip=IPADDR
            netmask=MASK
            gateway=GW
            dns=DNS_SERVER_IP
            ifname=NAME:MAC_ADDR
        与远程访问功能相关的引导选项:
           vnc
            vncpassword=“PASSWORD”
        指明kickstart文件的位置
            ks=
                DVD drive:ks=cdrom:/PATH/TO/KICKSTART_FILE
                Hard drive:ks=hd:/device/directory/KICKSTART_FILE
                HTTP Server:ks=http://host:port/path/to/KICKSTART_FILE
                FTP Server:ks=ftp://host:port/path/to/KICKSTART_FILE
                HTTPS Server:ks=https://host:port/path/to/KICKSTART_FILE
    启动紧急救援模式:
        rescue
kickstart文件的格式:(使用kickstart文件,其实就是无人值守安装方式,不需要人交互,根据配置文件自动完成系统安装)
    在安装完毕的系统上,在/root目录下都有一个anaconda_ks.cfg文件,就是安装时手动选择配置项的记录。格式:

   命令段:指明各种安装前配置,如键盘类型等;
    程序包段:指明要安装的程序包组或程序包,不安装的程序包等;
        %packages
        @group_name     ;安装的包组
        package               ;单独安装的包
        -package             ;不安装的包
        %end
      脚本段
        %pre:安装前脚本,运行环境,运行于安装介质上的微型Linux环境
        %post:安装后脚本,运行环境为安装完成的系统
命令段中的命令
    必备命令:
        authconfig:认证方式,authconfig --enableshadow --passalgo=sha512
        bootloader:bootloader的安装位置及相关配置
            bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
        keyboard:设定键盘类型
        lang:语言类型
        part:创建分区
        rootpw:指定root用户密码
        timezone:指明时区
    可选命令:
        install or upgrade
        text:文件安装界面
        network
        firewall
        selinux
        halt
        poweroff
        reboot
        repo
        user:创建新用户
        url:指明安装源

创建kickstart文件的方式:
    (1)直接手动编辑,依据某模板修改
    (2)可使用创建工具:system-config-kickstart(CentOS6)


ks文件示例:

# Kickstart file automatically generated by anaconda.

#version=DEVEL
install
cdrom
lang en_US.UTF-8
keyboard us
network --onboot no --device eth0 --bootproto dhcp --noipv6
rootpw  --iscrypted $6$.S0H8BXg8fPZsJtA$Etv0dKDpfY6zkrQcxEFQFEPFg.283neRgvW//lXjcBQ5TmkxKTOiAOxywV0kUGujCKMSTsVkBCfLVCQrqT6HH1
firewall --disabled
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone --utc Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
clearpart --all --initlabel

part /boot --fstype=ext4 --size=500
part pv.01 --grow --size=1

volgroup VolGroup  pv.01
logvol /home --fstype=ext4 --name=lv_home --vgname=VolGroup --size=100
logvol / --fstype=ext4 --name=lv_root --vgname=VolGroup --grow --size=1
logvol swap --name=lv_swap --vgname=VolGroup  --size=4096 

#repo --name="CentOS"  --baseurl=cdrom://sr0:/mnt/source --cost=100

%packages
@base
@core
@debugging
@basic-desktop
@desktop-debugging
@desktop-platform
@directory-client
@fonts
@general-desktop
@graphical-admin-tools
@input-methods
@internet-applications
@internet-browser
@java-platform
@legacy-x
@network-file-system-client
@office-suite
@print-client
@remote-desktop-clients
@server-platform
@server-policy
@workstation-policy
@x11
mtools
pax
python-dmidecode
oddjob
wodim
sgpio
genisoimage
device-mapper-persistent-data
abrt-gui
samba-winbind
certmonger
pam_krb5
krb5-workstation
libXmu
%end

%post
echo -e "Welcome MySelf site" >> /etc/issue

使用方式:对于http安装,web根目录如下:

Web服务器:192.168.138.1
在启动Linux安装时,进入命令行界面,使用:
linux ip=192.168.138.10 netmask=255.255.255.0 ks=http://192.168.138.1/myks1.cfg
FTP服务器:192.168.138.1
linux  ip=192.168.138.10 netmask=255.255.255.0 ks=ftp://user:pwd@192.168.138.1/myks1.cfg

使用从http安装,在ks中设置安装方法为url --url=http://192.168.138.1/,ks设置修改

安装出现如下错误:

从http服务器上看,已经读取了repo文件,解析出问题了,这里的http内容是将光盘ISO解压后的内容,这个问题可能是源的问题,是不是repodata下的文件需要重新生成??此问题不知道解决方法,留待以后吧。

检查ks文件的语法错误:ksvalidator
    # ksvalidator ks_file
创建引导光盘:引导光盘仅具有isolinux目录及文件即可。
    mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOSx.x x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso  myios/

目录结构:

在/root下生成boot.iso,使用此iso作为光盘
.启动:

已经是自己制作的引导光盘了。按ESC键,命令行输入:linux ks=cdrom:///myks1.cfg,就可以按光盘上的ks文件执行安装,但是在repo时,同样出现了错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值