定製Centos7系統映象
搭建基礎環境
#yum install createrepo mkisofs isomd5sum squashfs-tools
#mkdir /root/PathISO
將/root/PathISO作為ISO的製作目錄
#mount /dev/sr0 /mnt
#cp -r /mnt/* /root/PathISO/
#cp /mnt/.discinfo /root/PathISO/
#cp /mnt/.treeinfo /root/PathISO/
# chmod +w /root/PathISO/isolinux/isolinux.cfg
注意:如果你想用Centos7.3的ISO進行掛載也是可以的
#mount -o loop /root/CentOS-7-x86_64-DVD-1611.iso /mnt
修改isolinux.cfg檔案
# 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 My Linux Lnmp
kernel vmlinuz
append initrd=initrd.img quit
label linux
menu label ^Install CentOS 7
kernel vmlinuz
append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet
label check
menu label Test this ^media & install CentOS 7
menu default
kernel vmlinuz
append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet
自動化安裝(可選)
修改isolinux.cfg檔案,將“append initrd=initrd.img”後面的當前行內容刪除,並加入“ks=cdrom:/isolinux/ks.cfg”。
cp /root/anaconda-ks.cfg /root/PathISO/isolinux/ks.cfg
編輯/root/PathISO/isolinux/ks.cfg
......
# Root password
rootpw --iscrypted $6$VrjQrY4WNa7cMc/m$k2tePtJU0N.0gcbG5XbP.X3KjQxXApRrue79XYyiKveZ3waOnIoJnSr/0y3AXZ.uqKhvL8VCDjRez4AGXiSXt1
# System services
services --disabled="chronyd"
# System timezone
timezone Asia/Shanghai --isUtc --nontp
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
autopart --type=lvm
# Partition clearing information
clearpart --all --initlabel --drives=sda
%packages
@^minimal
@core
@my linux lnmp
kexec-tools
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
獲取系統預設安裝的RPM包和需要新增的RPM包
在使用Centos系統安裝完成後會生成/root/install.log,該檔案記錄了系統安裝時安裝的RPM包資訊。如果沒有該檔案,可以手動生成(新安裝的乾淨系統):
#rpm -qa >> /root/install.log
清空ISO製作目錄裡的Packages和repodata兩個目錄裡的所有內容,並根據install.log將所需安裝包放入Packages資料夾內:
# awk '{print $2}' /root/install.log |xargs -i cp /mnt/Packages/{}.rpm /root/PathISO/Packages/
注:如果是手動生成的install.log,將'{print $2}' 改為'{print $0}' 。
因為需要自定製iso,需要預安裝其他的包,將解決好依賴關係的包全部放入/root/PathISO/Packages/中:
多數情況下我們會根據yum來下載安裝包,下面介紹兩種獲取下載安裝包的方法:
1.修改yum的配置檔案,將yum下載的安裝包儲存起來
#vim /etc/yum.conf
修改keepcache=1 (1為儲存,0為不儲存,預設是0)
修改後使用yum安裝的包會儲存在“/var/cache/yum/”下。
2.通過yum指令的--downloadonly可以只下載安裝包,不進行安裝
#yum -y install --downloadonly --downloaddir=/root/test/ nginx mysql-community-server mysql-community-devel
該指令我會將安裝的包統一放在/root/test/目錄下,yum update同樣可以使用該方法,這樣定製後的ISO中RPM包都是最新版本的。
修改comp.xml檔案,定義RPM包組
cp repodata/xxx-comps.xml ./comps.xml
編輯comps.xml檔案,在第三行的<comps>之後,新增以下內容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE comps PUBLIC "-//CentOS//DTD Comps info//EN" "comps.dtd">
<comps>
<group>
<id>my linux lnmp</id>
<name>My Linux Lnmp</name>
<description>Some My Linux Lnmp</description>
<default>true</default>
<uservisible>true</uservisible>
<packagelist>
<packagereq type="default">nginx</packagereq>
<packagereq type="default">mysql-community-server</packagereq>
<packagereq type="default">mysql-community-devel</packagereq>
</packagelist>
</group>
在最後一行的</comps>之前,新增以下內容
<category>
<id>lnmp</id>
<name>Lnmp</name>
<description>Lnmp Packages</description>
<grouplist>
<groupid>my linux lnmp</groupid>
</grouplist>
</category>
重新生成repo
#cd PathISO
#createrepo -g comps.xml .
會生產一個新的repodata/xxx-comps.xml檔案,舊的xxx-comps.xml檔案可以刪除
修改安裝介面圖示背景
以圖示為例,其他操作類似
將安裝介面左上角的該圖示換為
解壓
# unsquashfs /root/PanISO/LiveOS/squashfs.img
把解壓後的檔案進行掛載,然後操作
#mount -o loop,rw squashfs-root/LiveOS/rootfs.img /media
/media/usr/share/anaconda/pixmaps/sidebar-logo.png為該安裝介面的圖示,只需根據自己的需要替換即可,解析度要跟原圖保持基本一致,要不會出現圖示過大的情況
將解壓後的檔案重新打包
#mksquashfs squashfs-root/ squashfs.img
並將生成的squashfs.img替換原來的squashfs.img
製作ISO
#mkisofs -o MyLinuxLnmp.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/PathISO/
#implantisomd5 MyLinuxLnmp.iso