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时,同样出现了错误。