当前位置:   article > 正文

如何通过centos定制自己想要的os_自定义centos操作系统

自定义centos操作系统

概要

在很多的情况下我们可能会因为直接下载的centos在我们项目上使用太大不方便,或者是因为原生的centos所包含的内核版本不是我们需要的,我们这个时候就会想要定制我们自己的centos的内核版本和自己所需要的工具,这个时候就需要我们对centos有一定了解了。
下面是我基于centos stream9来定制自己的os的具体操作,当然会在整个过程中遇到一些很细节的东西就不去详细说明,同时还在自己的os中增加了自动话的功能,这个功能可以使用到pxe服务器安装过程,其中的ks的配置文件可以直接拿来使用。
  • 1
  • 2

centos的版本

我们现在是基于centos stream9 来定制化我们的os所以我们就需要对这个centos有一个基本的了解
centos name:CentOS-Stream-9*

定制centos的流程

安装最小化os获取基础的rpm数据和ks文件

在一开始的使用我们首先需要在我们机器上面安装一下我们最初的os也就是centos stream9,同时我们需要注意在我们安装的时候选择安装的环境为minimal-environment并且不需要安装其他任何的软件工具,这样可以保证我们作为基础环境的一个干净状态,以便于后期有不需要的软件工具不用在去删除那么多,和保证自己之后定制的os更小。
在我们安装完os之后在/root目录下面我们会获得一个anaconda-ks.cfg,这个文件就是后面我们会使用到的自动化安装配置的基础,是最为重要的。
之后我们就需要获取最小os所需要的rpm package这个用于将我们不需要的rpm package删除掉,并且重新建立rpm repo的链接。command:rpm -qa > /root/install.log
当我们需要安装新的工具的时候,我们可以在minimal的环境下面使用yum install 工具名,安装完之后重新生成install.log但是同时还要记住这个工具名在后面需要添加到ks文件里面。

获取自己需要的文件

需要下载一下工具:yum -y install createrepo mkisofs isomd5sum rsync
os挂载到/mnt下面: mount “iso name” /mnt
centos stream9 的结构
在这里插入图片描述
之后在root下面创建一个centos的文件夹用来存放定制化的os我们所需要的东西,将/mnt下面的所有的东西全部拷贝的这个创建的文件夹下面:
cp -rf /mnt/* /root/centos/ (注意使用这个指令不会将mnt下面的以点开头的文件拷贝过去,所以需要将.disciofo和.treeinfo文件另外拷贝到centos下面) 将原来的os的文件拷贝到我们的文件夹后我们将我们不需要的东西进行删除
1.删除 rpm包:rm -rf /root/centos/AppStream/Packages/*
rm -rf /root/centos/BaseOS//Packages/*
2.删除repodata:rm -rf /root/centos/AppStream/repodata
rm -rf /root/centos/BaseOS/repodata

重新建立我们自己的环境

接下来我们就可以重新配置rpm的源和相对应的repodata了:
使用这个命令 awk ‘{print $0}’ /root/install.log | xargs -i cp /mnt/AppStream/Packages/{}.rpm /root/centos/ AppStream/Packages/

awk ‘{print $0}’ /root/install.log |xargs -i cp /mnt/BaseOS/Packages/{}.rpm /root/centos/BaseOS /Packages/
这两条指令可以将minimal所需要的rpm包筛选到我们定制的os里面
之后我们需要将原来的centos stream9中的文件拷贝一下,重新建立repodata的数据信息。
cp /mnt/AppStream/repodata/- comps-AppStream.x86_64.xml /root/centos/AppStream/
createrepo -g /root/centos/AppStream/
-comps-AppStream.x86_64.xml /root/centos/AppStream/

cp /mnt/BaseOS/repodata/-comps-BaseOS.x86_64.xml /root/centos/BaseOS/
createrepo -g /root/centos/BaseOS/
-comps-AppStream.x86_64.xml /root/centos/BaseOS/

配置ks自动化配置文件

当我们想要自动化安装,或者是需要用到pxe安装的话,那我们就需要使用到kickstar,如果没有就不需要做这个设置,主要的就是ks配置文件了,在之前我们获取到了minimal的anaconda-ks.cfg,我们会以这个文件做为基础去修改ks文件,最终形成的如下:
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
#X Window System configuration information
#xconfig  --startxonboot
#Keyboard layouts
#old format: keyboard us
#new format:
keyboard --vckeymap=us --xlayouts='us'
#Root password
rootpw --iscrypted $6$0EFq/vHwtmJjtg/K$rLJ8vPVFkBu3.heTHJhiYIM.ITy1fBJnvA45OwSc6nbOlgV7xjUeJ.DwjxNtbdje6ALhPb7Cn4gTumiOBLbEx1
#System language
lang en_US.UTF-8

#Firewall configuration
firewall --disabled
#System authorization information
authselect --enableshadow --passalgo=sha512
#Use hard drive installation media
#cdrom
harddrive --dir= --partition=LABEL=CENTOS-STRE
#Use text mode install
text
repo --name="AppStream" --baseurl=file:///run/install/sources/mount-0000-hdd-device/AppStream


#Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=nvme0n1
autopart
#SELinux configuration
selinux --disabled
#Do not configure the X Window System
skipx

#System services
services --disabled="chronyd"
#Network information
network  --bootproto=dhcp --device=eno3 --ipv6=auto --activate
#Reboot after installation
reboot
#System timezone
timezone Asia/Shanghai --nontp
#Partition clearing information
clearpart --all --initlabel --drives=nvme0n1
#Clear the Master Boot Record
zerombr
#System bootloader configuration
bootloader --append="crashkernel=auto" --location=mbr --boot-drive=nvme0n1
autopart

%packages
@^minimal-environment
#需要yum install的工具名
#eg:
g++

%end

%addon com_redhat_kdump --enable --reserve-mb='auto'

%end

%post --nochroot

cp -rf /run/install/sources/mount-0000-hdd-device/tools /mnt/sysimage/root/

%end

%post

#update kernel
cd /root/tools/packages
ls -l kernel-5.19.0-1.x86_64.rpm >> /var/log/update_kernel.log
rpm -ivh --force --nodeps kernel-5.19.0-1.x86_64.rpm >> /var/log/update_kernel.log
rpm -ivh --force --nodeps kernel-devel-5.19.0-1.x86_64.rpm >> 		/var/log/update_kernel.log
rpm -ivh --force --nodeps kernel-headers-5.19.0-1.x86_64.rpm >> /var/log/update_kernel.log
rpm -qa | grep kernel >> /var/log/update_kernel.log
rpm -e --nodeps kernel-5.14.0-205.el9.x86_64
rpm -e --nodeps kernel-headers-5.14.0-205.el9.x86_64
rpm -e --nodeps kernel-core-5.14.0-205.el9.x86_64
rpm -e --nodeps kernel-modules-5.14.0-205.el9.x86_64
rpm -e --nodeps kernel-tools-5.14.0-205.el9.x86_64
rpm -e --nodeps kernel-tools-libs-5.14.0-205.el9.x86_64
echo "remove raw kernel" >> /var/log/update_kernel.log
rpm -qa | grep kernel >> /var/log/update_kernel.log
grub2-set-default 0
grub2-mkconfig -o /boot/grub2/grub.cfg

%end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90

其中%packages代表的是我们在安装时候所需要的在原os中获取的一些相关的rpm工具,如何在原os中没有的话那么就不能在这个地方增加了。
%post --nochroot在安装模式下面执行功能
%post 在安装结束直接执行相关功能,例子里面写了如何更新新版本的内核,当然也还有其他的办法更新内核文件需要将文件夹isolinux下面的相关内核文件进行替换,并且调试,但是不建议使用这个方法,因为原生的内核文件是比较小的,但是因为我们自己定制所以这个文件就会比较大,或容易增大自己定制iso的大小

修改isolinux.cfg文件配置

最终内容为下:

default vesamenu.c32
timeout 600
display boot.msg

# Clear the screen when exiting the menu, instead of leaving the menu displayed.
# For vesamenu, this means the graphical background is still displayed without
# the menu itself for as long as the screen remains in graphics mode.
menu clear
menu background splash.png
menu title CentOS Stream 9
menu vshift 8
menu rows 18
menu margin 8
#menu hidden
menu helpmsgrow 15
menu tabmsgrow 13

# Border Area
menu color border * #00000000 #00000000 none

# Selected item
menu color sel 0 #ffffffff #00000000 none

# Title bar
menu color title 0 #ff7ba3d0 #00000000 none

# Press [Tab] message
menu color tabmsg 0 #ff3a6496 #00000000 none

# Unselected menu item
menu color unsel 0 #84b8ffff #00000000 none

# Selected hotkey
menu color hotsel 0 #84b8ffff #00000000 none

# Unselected hotkey
menu color hotkey 0 #ffffffff #00000000 none

# Help text
menu color help 0 #ffffffff #00000000 none

# A scrollbar of some type? Not sure.
menu color scrollbar 0 #ffffffff #ff355594 none

# Timeout msg
menu color timeout 0 #ffffffff #00000000 none
menu color timeout_msg 0 #ffffffff #00000000 none

# Command prompt text
menu color cmdmark 0 #84b8ffff #00000000 none
menu color cmdline 0 #ffffffff #00000000 none

# Do not display the actual menu unless the user presses a key. All that is displayed is a timeout message.

menu tabmsg Press Tab for full configuration options on menu items.

menu separator # insert an empty line
menu separator # insert an empty line

label linux
  menu label ^Install CentOS Stream 9
  menu default
  kernel vmlinuz
  append initrd=initrd.img inst.repo=hd:LABEL=CENTOS-STRE 	inst.ks=hd:LABEL=CENTOS-STRE:/isolinux/ks.cfg console=ttyS0,57600n8

menu separator # insert an empty line

# utilities submenu
menu begin ^Troubleshooting
  menu title Troubleshooting

label text
  menu indent count 5
  menu label Install CentOS Stream 9 using ^text mode
  text help
        Try this option out if you're having trouble installing
        CentOS Stream 9.
  endtext
  kernel vmlinuz
  append initrd=initrd.img inst.repo=hd:LABEL=CENTOS-STRE inst.text quiet

label rescue
  menu indent count 5
 menu label ^Rescue a CentOS Stream system
  text help
        If the system will not boot, this lets you access files
        and edit config files to try to get it booting again.
  endtext
  kernel vmlinuz
  append initrd=initrd.img inst.repo=hd:LABEL=CENTOS-STRE inst.rescue quiet

label memtest
  menu label Run a ^memory test
  text help
        If your system is having issues, a problem with your
        system's memory may be the cause. Use this utility to
        see if the memory is working correctly.
  endtext
  kernel memtest

menu separator # insert an empty line

label local
  menu label Boot from ^local drive
  localboot 0xffff

menu separator # insert an empty line
menu separator # insert an empty line

label returntomain
  menu label Return to ^main menu
  menu exit

menu end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114

其中 append initrd=initrd.img inst.repo=hd:LABEL=CENTOS-STRE inst.text quiet这个最为重要inst.repo=hd:LABEL=是需要指向自己的Label的标识的是需要修改的,这个标识是会在编译出iso文件中自己设置的

修改EFI/BOOT/grub.cfg文件

最终内容为下:

set default="1"

function load_video {
  insmod efi_gop
  insmod efi_uga
  insmod video_bochs
  insmod video_cirrus
  insmod all_video
}

load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2

set timeout=60
### END /etc/grub.d/00_header ###

search --no-floppy --set=root -l 'CentOS-Stream-9-BaseOS-x86_64'

### BEGIN /etc/grub.d/10_linux ###
menuentry 'Install CentOS Stream 9' --class fedora --class gnu-linux --class gnu --	class os {
    linuxefi /images/pxeboot/vmlinuz inst.repo=hd:LABEL=CENTOS-STRE inst.ks=hd:LABEL=CENTOS-STRE:/isolinux/ks.cfg console=ttyS0,57600n8 8250.nr_uarts=4 net.ifnames=0 biosdevname=0
    initrdefi /images/pxeboot/initrd.img
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

其中inst.repo=hd:LABEL=CENTOS-STRE inst.ks=hd:LABEL=CENTOS-STRE:/isolinux/ks.cfg,就是需要指向自己修改的ks文件,如何没有ks就不需要修改原来的指向信息。

修改安装的文件系统

请新建一个文件加处理
在我们安装的时候使用的文件系统使用的是images/install.img这个文件,我们可以对这个文件进行定制,这样可以有效修改最后iso文件的大小
我们需要使用这个给工具Unsquashfs,如果没有自行安装yum install -y squashfs-tools
首先我们需要使用这个指令查看install.img的状态
unsquashfs -stat squashfs.img
需要将这个文件解压 Unsquashfs install.img
之后可以看到squashfs-root/LiveOS/rootfs.img,这个文件,在将rootfs.img文件挂载到mount rootfs.img /media/,这个时候我们就可以在/media/下面看到整个文件系统我们就可以将我们不需要的删除,注意请不要忙盲目删除这样会到安装时候出问题的。
在删除完我们不需要的文件系统内容之后,我们需要查看一下整个文件大小
du -lsh /media/,然后我们创建一个新的img文件,假设这个文件大小为1.4G
: dd if=/dev/zero of=/root/rootfs_new.img bs=1M count=1400
将新的img文件格式化为ext4, mkfs -t ext4 rootfs_new.img,重新将新的img文件挂载mount rootfs_new.img /new/,将/media/下面的所有内容拷贝到/new/下面,在umount。最后只需要在整理一下文件大小,使得更加合适之后在拷贝新的img替换rootfs.img
修复并调整文件大小
e2fsck -p -f rootfs_new.img
resize2fs -M rootfs_new.img

cp rootfs_new.img squashfs-root/LiveOS/root/rootfs.img
重新生成install.img:mksquashfs squashfs-root/ newsquashfs.img -comp xz -b 131072 -Xbcj x86 -Xdict-size 131072,
再将新的install.img文件更换到我们定制install.img就完成install.img的定制化。
同时我们需要修改.treeinfo的 images/install.img的sha256sum的值,如果没有这个文件就是在拷贝的时候忘记拷贝了。

iso文件的制作

Cd /root/centos
mkisofs -o …/new.iso -input-charset utf-8 -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -T -joliet-long -V CENTOS-STRE /root/centos/
其中CENTOS-STRE就是我们直走iso文件打进去的label标签

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/173702
推荐阅读
相关标签
  

闽ICP备14008679号