centos7定制linux镜像,自定制Centos7.3系统镜像(ISO)
本文主要介紹如何根據(jù)官方的Centos鏡像文件,在保留原有默認(rèn)安裝的RPM包的基礎(chǔ)下,添加自己所需要的RPM包的,最終生成一個(gè)自定制版的ISO,節(jié)省了寶貴的時(shí)間并確保了安裝的定制性。對(duì)于其他沒(méi)有介紹的修改,后續(xù)在實(shí)踐中會(huì)進(jìn)行更新。
本文基于Centos7.3版本制作的ISO鏡像,其他版本可能本文介紹的制作過(guò)程有所差別。
搭建基礎(chǔ)環(huán)境
#yum install createrepo mkisofs isomd5sum squashfs-tools
#mkdir /root/PanISO
將/root/PanISO作為ISO的制作目錄
#mount /dev/cdrom /media/
#cp -r /media/* /root/PanIOS/
#cp??/media/.discinfo /root/PanIOS/
#cp??/media/.treeinfo /root/PanIOS/
# chmod +w /root/PanISO/isolinux/isolinux.cfg
注意:如果你想用Centos7.3的ISO進(jìn)行掛載也是可以的
#mount -o loop /root/CentOS-7-x86_64-DVD-1611.iso /mnt
修改isolinux.cfg文件,將“append initrd=initrd.img”后面的當(dāng)前行內(nèi)容刪除,并加入“ks=cdrom:/isolinux/ks.cfg”。
menu color timeout_msg 0 #ffffffff #00000000none
# Command prompt text
menu color cmdmark0 #84b8ffff #00000000none
menu color cmdline0 #ffffffff #00000000none
# Do not display the actual menu unless the user presses a key. All thatis displayed isa timeout message.
menu tabmsg Press Tabforfull configuration options on menu items.
menu separator # insert an empty line
menu separator # insert an empty line
label linux
menu label^Install CentOS Linux 7kernel vmlinuz
append initrd=initrd.img ks=cdrom:/isolinux/ks.cfg
這步的作用是實(shí)現(xiàn)自動(dòng)化安裝,如果不加上就需要手動(dòng)配置參數(shù)就行下一步安裝了。
修改自動(dòng)化安裝配置文件
#cp /root/anaconda-ks.cfg /root/PanISO/isolinux/ks.cfg
本次制作iso用的是系統(tǒng)安裝成功生成的默認(rèn)的anaconda-ks.cfg文件,并未做修改,如果有需求可以自行修改。下面是我使用的示例,并稍加了一些文件配置說(shuō)明(詳細(xì)配置說(shuō)明可以查找kickstart配置文件):
#version=DEVEL
# System authorization information
auth--enableshadow --passalgo=sha512
# Use CDROM installation media 從光驅(qū)安裝
cdrom
# Use graphical install 圖形化安裝
graphical
# Run the Setup Agent on first boot
firstboot--enable
ignoredisk--only-use=sda
# Keyboard layouts 美式鍵盤(pán)
keyboard--vckeymap=us --xlayouts='us'# System language 美式英語(yǔ)
lang en_US.UTF-8# Network information 網(wǎng)卡配置
network--bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate
network--hostname=localhost.localdomain
# Root password root用戶(hù)的密碼
rootpw--iscrypted $6$Ok9Jcj51va/3x830$/6rLkpu8k2tPCmd7byUBE7wuRexmuoMzp0jAelDRYMAIk9yRL/84mCFrOTp5QYWJNVcEIB7wWgw8byp0r21vT0
# System services
services--disabled="chronyd"# System timezone 時(shí)區(qū)
timezone Asia/Shanghai --isUtc --nontp
user--name=pan --password=$6$ONSyoQ.S58OJpcnj$jUz6vDadzY5wZ39fr0dEONbI/iNIeVkpRMaUjz9ZJbIqQLPLKqq8ZJWRoDGjolLJfkwmw58Dp5xPhKufAca8y/ --iscrypted --gecos="pan"# System bootloader configuration
bootloader--append="crashkernel=auto" --location=mbr --boot-drive=sda
autopart--type=lvm
# Partition clearing information
clearpart--none --initlabel
%pre
%end
#安裝包的信息%packages
@^minimal
@corekexec-tools%end
%post
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end%anaconda
pwpolicy root--minlen=6 --minquality=50 --notstrict --nochanges --notempty
pwpolicy user--minlen=6 --minquality=50 --notstrict --nochanges --notempty
pwpolicy luks--minlen=6 --minquality=50 --notstrict --nochanges --notempty%end
%pre表示系統(tǒng)安裝前,%post 表示在系統(tǒng)安裝后執(zhí)行,這樣可以定制自己的自動(dòng)化腳本
獲取系統(tǒng)默認(rèn)安裝的RPM包和需要添加的RPM包
在使用Centos系統(tǒng)安裝完成后會(huì)生成/root/install.log,該文件記錄了系統(tǒng)安裝時(shí)安裝的RPM包信息。如果沒(méi)有該文件,可以手動(dòng)生成(新安裝的干凈系統(tǒng)):
#rpm -qa >> /root/install.log
清空ISO制作目錄里的Packages和repodata兩個(gè)目錄里的所有內(nèi)容,并根據(jù)install.log將所需安裝包放入Packages文件夾內(nèi):
# awk '{print $2}'??/root/install.log |xargs -i cp /media/Packages/{}.rpm /root/PanIOS/Packages/
注:如果是手動(dòng)生成的install.log,將'{print $2}'?改為'{print $0}'?。
因?yàn)樾枰远ㄖ苅so,需要預(yù)安裝其他的包,將解決好依賴(lài)關(guān)系的包全部放入/root/PanIOS/Packages/中:
多數(shù)情況下我們會(huì)根據(jù)yum來(lái)下載安裝包,下面介紹兩種獲取下載安裝包的方法:
1.修改yum的配置文件,將yum下載的安裝包保存起來(lái)
#vim /etc/yum.conf
修改keepcache=1 (1為保存,0為不保存,默認(rèn)是0)
修改后使用yum安裝的包會(huì)保存在“/var/cache/yum/”下。
2.通過(guò)yum指令的--downloadonly可以只下載安裝包,不進(jìn)行安裝
#yum -y install --downloadonly --downloaddir=/root/test/
該指令我會(huì)將安裝的包統(tǒng)一放在/root/test/目錄下,yum update同樣可以使用該方法,這樣定制后的ISO中RPM包都是最新版本的。
修改comp.xml文件,定義RPM包組
.xml文件的寫(xiě)法如下:
組的ID,非數(shù)字
組的名字
組的描述
是否預(yù)安裝,true或者falsedefault>
是否可見(jiàn),true或者false
zh#僅在某個(gè)語(yǔ)系的安裝界面中顯示,可選項(xiàng)"依賴(lài)包" type="conditional">軟件包1
"default">軟件包2
"default">軟件包3......分類(lèi)的名字,非數(shù)字
將顯示在左側(cè)列表里
將顯示在下面的描述欄里
組1的ID
組2的ID
簡(jiǎn)單來(lái)說(shuō),一個(gè)group中包含若干個(gè)RPM包,一個(gè)category則包含了若干個(gè)group,在安裝系統(tǒng)的時(shí)候,在選擇自定義安裝的步驟中,左側(cè)的是category,右側(cè)是group。
1.group id我們可以在ks.cfg來(lái)指定
%packages
@^minimal
@corekexec-tools
示例中的@core就是一個(gè)組的名稱(chēng),如果我們想添加指定的包組,就可以在ks.cfg文件中指定;
2.在group中的包含的RPM只需要填入完整包的名稱(chēng)即可,不需要把依賴(lài)也添加進(jìn)去,只需要在Packages文件夾內(nèi)將所需的依賴(lài)添加完整即可;
3.在group中添加完整包的名稱(chēng)是yum安裝下顯示的包名,比如vim,它的完整包的名稱(chēng)是vim-enhanced;
4.當(dāng)然你也可以在Packages中保留完整的Centos系統(tǒng)的RPM包,將自定制的分類(lèi)和組添加進(jìn)去,這樣在安裝界面就可以發(fā)現(xiàn)我們自定義的category和group。
重新生成repo
#cd PanISO
#createrepo -g comps.xml .
注意:在CentOS下需要根據(jù)'.discinfo'來(lái)設(shè)置'baseurl'(declare -x discinfo=head -1 .discinfo; createrepo -u "media://$discinfo"...); 在CentOS7中不再需要如此做,實(shí)際上如果在CentOS7中執(zhí)行了這個(gè)命令,在安裝的過(guò)程中,可能會(huì)報(bào)錯(cuò)"RepoError after 10 retries: Insufficient space in download directory /run/install/repo/Packages"
在其他版本中可執(zhí)行如下指令:
# declare -x discinfo=$(head -1 /root/PanIOS/.discinfo)
# createrepo -u "media://$discinfo" -g /root/minimal-x86_64.xml /root/PanIOS/
修改安裝界面圖標(biāo)背景
以圖標(biāo)為例,其他操作類(lèi)似
將安裝界面左上角的該圖標(biāo)換為
解壓
#?unsquashfs?/root/PanISO/LiveOS/squashfs.img
把解壓后的文件進(jìn)行掛載,然后操作
#mount?-o?loop,rw?squashfs-root/LiveOS/rootfs.img?/media
/media/usr/share/anaconda/pixmaps/sidebar-logo.png為該安裝界面的圖標(biāo),只需根據(jù)自己的需要替換即可,分辨率要跟原圖保持基本一致,要不會(huì)出現(xiàn)圖標(biāo)過(guò)大的情況
將解壓后的文件重新打包
#mksquashfs squashfs-root/ ??squashfs.img
并將生成的squashfs.img替換原來(lái)的squashfs.img
制作ISO
#mkisofs -o Pan-7.3.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 ?/root/PanIOS/
#implantisomd5?Pan-7.3.iso
參考:https://www.cnblogs.com/flintlovesam/p/6605788.html
總結(jié)
以上是生活随笔為你收集整理的centos7定制linux镜像,自定制Centos7.3系统镜像(ISO)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: hive2 java连接_用Java代码
- 下一篇: [转载] Java中的变量和常量