赞
踩
在很多的情况下我们可能会因为直接下载的centos在我们项目上使用太大不方便,或者是因为原生的centos所包含的内核版本不是我们需要的,我们这个时候就会想要定制我们自己的centos的内核版本和自己所需要的工具,这个时候就需要我们对centos有一定了解了。
下面是我基于centos stream9来定制自己的os的具体操作,当然会在整个过程中遇到一些很细节的东西就不去详细说明,同时还在自己的os中增加了自动话的功能,这个功能可以使用到pxe服务器安装过程,其中的ks的配置文件可以直接拿来使用。
我们现在是基于centos stream9 来定制化我们的os所以我们就需要对这个centos有一个基本的了解
centos name:CentOS-Stream-9*
在一开始的使用我们首先需要在我们机器上面安装一下我们最初的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/
当我们想要自动化安装,或者是需要用到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
其中%packages代表的是我们在安装时候所需要的在原os中获取的一些相关的rpm工具,如何在原os中没有的话那么就不能在这个地方增加了。
%post --nochroot在安装模式下面执行功能
%post 在安装结束直接执行相关功能,例子里面写了如何更新新版本的内核,当然也还有其他的办法更新内核文件需要将文件夹isolinux下面的相关内核文件进行替换,并且调试,但是不建议使用这个方法,因为原生的内核文件是比较小的,但是因为我们自己定制所以这个文件就会比较大,或容易增大自己定制iso的大小
最终内容为下:
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
其中 append initrd=initrd.img inst.repo=hd:LABEL=CENTOS-STRE inst.text quiet这个最为重要inst.repo=hd:LABEL=是需要指向自己的Label的标识的是需要修改的,这个标识是会在编译出iso文件中自己设置的
最终内容为下:
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 }
其中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的值,如果没有这个文件就是在拷贝的时候忘记拷贝了。
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标签
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。