定製Centos7.9映象

乄人發表於2022-02-21

 

Ps:因為工作內容;有一部份是需要重灌系統;系統版本映象為centos7.9。可每次裝完都需要下載一些基礎包;最近因為裝置過多;網路卡名稱太亂;導致做後續配置太繁瑣;不規整;索性自己定製個系統;

 

搭建基礎環境
將/root/iso做為定製映象製作目錄; 將/MISO作為掛載映象的目錄 ;安裝製作映象的命令及下載最小化映象
# mkdir /root/iso
# mkdir /MISO
# yum install createrepo mkisofs isomd5sum squashfs-tools 
# wget https://mirrors.163.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso
 
掛載映象;並將/MISO目錄下的所有內容copy到映象製作目錄;

# mount -o loop,rw CentOS-7-x86_64-Minimal-2009.iso /MISO
# cp -a /MISO/*   /root/iso/
 
修改/root/iso/isolinux/isolinux.cfg檔案,修改如下內
default vesamenu.timeout 100  
##安裝系統時的預設引導時間; 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 ###安裝系統背景圖片;更換背景介面;替換為需要的圖片,保持檔名不變,圖片大小640x480 menu title SinoCache ISO 7.9 ##可以定製歡迎標題 menu vshift 8 menu rows 18 menu margin 8 #menu hidden menu helpmsgrow 15 menu tabmsgrow 13 ……………………………………………… label linux menu label ^Install SinoCache ISO 7.9 ###定製系統標題 menu default ###預設引導選項 kernel vmlinuz append initrd=initrd.img ks=cdrom:/isolinux/ks.cfg inst.stage2=hd:LABEL=CentOS quiet net.ifnames=0 biosdevname=0 ##ks=cdrom:/isolinux/ks.cfg :建立自動化安裝配置檔案;可以用系統預設生成的anaconda-ks.cfg檔案。 ##inst.stage2=hd:LABEL= :為安裝介質位置,hd:LABEL為介質標籤,例如:CentOS

##net.ifnames=0 biosdevname=0 :用於禁用centos7的”一致性網路裝置命名法”;centos6系統網路卡命名為ethX形式;centos7系統網路卡名各種各樣在工作中太無序了;很煩;使用這個引數可以將網路卡名改為ethX ###可以將這個標籤選項登出。 #label check # menu label Test this ^media & install SinoCache ISO 7.9 # kernel vmlinuz # append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet net.ifnames=0 biosdevname=0
 
編輯isolinux/ks.cfg檔案;也可以用/root/anaconda-ks.cfg
# cp -a /root/anaconda-ks.cfg /root/iso/isolinux/ks.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
#使用CD-ROM安裝介質
cdrom
# 使用圖形化安裝
graphical
# 在第一次啟動時執行安裝代理
firstboot --enable
ignoredisk --only-use=sda
# 鍵盤佈局
keyboard --vckeymap=us --xlayouts='us'
# 設定語言
lang en_US.UTF-8

# Network information
network  --bootproto=dhcp --device=eth0 --onboot=off --ipv6=auto
network  --bootproto=dhcp --device=eth1 --onboot=off --ipv6=auto
network  --bootproto=dhcp --device=eth2 --onboot=off --ipv6=auto
network  --bootproto=dhcp --device=eth3 --onboot=off --ipv6=auto
network  --bootproto=dhcp --device=eth4 --onboot=off --ipv6=auto
network  --bootproto=dhcp --device=eth5 --onboot=off --ipv6=auto
#network  --device=Wan     --bondopts=mode=802.3ad,xmit_hash_policy=layer3+4 --bondslaves=eth0,eth3 --onboot=yes
network  --hostname=ngaa.com.cn

# 設定root密碼
rootpw --iscrypted $6$sNStQWknxzURmZpv$PEFIX7tG1McnzRsGBUm4UnOyRr4Kg/R8CHcujTbPYMvZRfxVWd8aetfP7gWRHhHobKMay4rGQO6Uxq2CoZ7QF1
# System services
services --enabled="chronyd"
# 關閉 SELinux 
selinux --disabled
# 關閉防火牆
firewall --disabled
# 系統服務開機自啟
services --enabled="zabbix_agentd,sshd"
# 設定時區
timezone Asia/Shanghai --isUtc
# 系統引導配置
bootloader --append="console=tty0 audit=0 selinux=0 net.ifnames=0 biosdevname=0 crashkernel=auto" --location=mbr --boot-drive=sda
# 清空主引導分割槽記錄MBR
zerombr
# 清除分割槽資訊
clearpart --all --initlabel

# 硬碟分割槽資訊
part / --fstype="xfs" --ondisk=sda --size=102400
part /boot --fstype="xfs" --ondisk=sda --size=300
part swap --fstype="swap" --ondisk=sda --size=32768
part /data/cache1 --fstype="xfs" --ondisk=sda --size=92458

%packages
@^minimal
@core
chrony
kexec-tools
%end

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

%post
#配置sshd
/bin/sed -i '13a Port 7346' /etc/ssh/sshd_config; \\
/bin/sed -i '/PermitRootLogin /d' /etc/ssh/sshd_config; \\
/bin/sed -i '32a PermitRootLogin yes' /etc/ssh/sshd_config; \\
/bin/sed -i '59a PasswordAuthentication yes' /etc/ssh/sshd_config; \\
/bin/sed -i '/GSSAPIAuthentication /d' /etc/ssh/sshd_config; \\
/bin/sed -i '71a GSSAPIAuthentication no' /etc/ssh/sshd_config; \\
/bin/sed -i '/UsePAM /d' /etc/ssh/sshd_config; \\
/bin/sed -i '82a UsePAM yes' /etc/ssh/sshd_config; \\
/bin/sed -i '/UseDNS /d' /etc/ssh/sshd_config; \\
/bin/sed -i '98a UseDNS no' /etc/ssh/sshd_config; \\

#disable NetworkManager
systemctl stop NetworkManager
systemctl disable NetworkManager

#配置PAM會話檢查
cat > /etc/pam.d/sshd << EOF
#%PAM-1.0
auth       required     pam_sepermit.so
auth       include      password-auth
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    optional     pam_keyinit.so force revoke
session    include      password-auth
EOF

#配置DNS
echo  'nameserver 114.114.114.114' > /etc/resolv.conf
%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

reboot
##重灌完系統自動重啟。
%pre 和 %post 部分 - 這兩個部分的順序不限,也不是必須的。

 %addon、%packages、%pre 和 %post 部分必須以 %end 結尾,否則安裝程式會拒絕 Kickstart 文 件。

 

 

更改/etc/yum.conf;使用下載快取;

[main]
cachedir=/var/cache/yum/   ##將快取目錄做修改;原來目錄太深了;·
keepcache=1  ##將原來的值0改為1(表示安裝後保留軟體包;為的是下載一些新系統預安裝的軟體;如wget等)
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release

 

安裝一些預安裝的軟體;或者在修改yum快取後;直接yum -y  update ;升級所有的系統包;在安裝系統是均是最新的包;ssh有個坑;是/etc/pam.d/sshd檔案認證登入;

# yum -y install mtr vim net-tools wget iptables-services tcpdump traceroute zabbix_agentd iptraf-ng bind-utils ipmitool pciutils rsync
###上面的軟體rpm包(包括依賴包)都會在/var/cache/yum/*/packages/目錄下; *代表所使用的yum源倉庫名稱;根據自己使用yum倉庫來決定。
 
需要預安裝其他的包,將解決好依賴關係的包全部放入/root/iso/Packages/中,此目錄下是系統最初安裝的系統包。

[root@localhost packages]# pwd
/var/cache/yum/ali-updates/packages
[root@localhost packages]# ll | head -n5
total 359436
-rw-r--r--. 1 root root  1038100 Dec  1 09:13 bash-4.2.46-35.el7_9.x86_64.rpm
-rw-r--r--. 1 root root  1146744 Dec  1 09:13 bind-export-libs-9.11.4-26.P2.el7_9.8.x86_64.rpm
-rw-r--r--. 1 root root   161096 Dec  1 09:13 bind-libs-9.11.4-26.P2.el7_9.8.x86_64.rpm
-rw-r--r--. 1 root root  1179928 Dec  1 09:13 bind-libs-lite-9.11.4-26.P2.el7_9.8.x86_64.rpm
[root@localhost packages]# cp  -a ./* /root/iso/Package
 
更新安裝軟體包xml檔案;將所下載的軟體包名稱填寫進去;在裝系統的時候會自動安裝好。

# cd /root/iso/repodata
# vim *-minimal-x86_64-comps.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE comps PUBLIC "-//CentOS//DTD Comps info//EN" "comps.dtd">
<comps>
  <group>
    <id>core</id>
    <name>Core</name>
    <name xml:lang="af">Kern</name>
      …………………………
   <name xml:lang="zh_TW">核心</name>
   <name xml:lang="zu">Okuyikhona</name>
   <description>Smallest possible installation.</description>
   <description xml:lang="as">ন্যূনতম ইনস্টল।</description>
      …………………………
   <description xml:lang="zh_TW">最小型安裝。</description>
   <default>false</default>
   <uservisible>false</uservisible>
   <packagelist>
      <packagereq type="mandatory">audit</packagereq>
      <packagereq type="mandatory">basesystem</packagereq>
      <packagereq type="mandatory">bash</packagereq>
        ………………………………
      <packagereq type="mandatory">yum</packagereq>
      <packagereq type="default">aic94xx-firmware</packagereq>
      <packagereq type="default">alsa-firmware</packagereq>
        ………………………………      
      <packagereq type="default">ql23xx-firmware</packagereq>
      <packagereq type="default">rdma</packagereq>
      <packagereq type="default">vim-enhanced</packagereq>
      <packagereq type="default">net-tools</packagereq>
      <packagereq type="default">tcpdump</packagereq>
      <packagereq type="default">mtr</packagereq>
      <packagereq type="default">iptabels-services</packagereq>
      <packagereq type="default">traceroute</packagereq>
      <packagereq type="default">ipmitool</packagereq>
      <packagereq type="default">wget</packagereq>
      <packagereq type="default">zabbix_agentd</packagereq>
      <packagereq type="default">iptraf-ng</packagereq>
      <packagereq type="default">ansible</packagereq>
      <packagereq type="default">rsync</packagereq>
      <packagereq type="default">pciutils</packagereq>
<packagereq type="default">kernel-devel</packagereq>
<packagereq type="default">kernel-headers</packagereq>
<packagereq type="optional">tboot</packagereq>
</packagelist>
</group>
<environment>
<id>minimal</id>
<name>Minimal Install</name>
<name xml:lang="as">নূন্যতম ইনস্টল</name>
…………………………
<description xml:lang="zh_CN">基本功能。</description>
<description xml:lang="zh_TW">基本功能。</description>
<display_order>5</display_order>
<grouplist>
<groupid>core</groupid>
<groupid>core</groupid>
</grouplist>
</environment>
</comps>
###在default標籤下寫自己要下載的軟體。前提是製作目錄/root/iso/Package/下有相應的rpm及依賴包。

# cd /root/iso/
# createrepo -g repodata/*-c7-minimal-x86_64-comps.xml  .
###注意當有新包加入,或者更新*comps.xml檔案,均需要重新生成repodata資料夾

 

修改安裝介面圖示背景
/media/usr/share/anaconda/pixmaps/sidebar-logo.png為該安裝介面的圖示,只需根據自己的需要替換即可,解析度要跟原圖保持基本一致,要不會出現圖示過大的情況;圖片大小131×115

unsquashfs /root/iso/LiveOS/squashfs.img    
#會在root家使用者目錄下;出現一個squashfs-root/
mount -o loop,rw squashfs-root/LiveOS/rootfs.img /media
#把解壓後的檔案進行掛載,然後操作

#將解壓後的檔案重新打包
#mksquashfs squashfs-root/   squashfs.img
並將生成的squashfs.img替換原來的/root/iso/LiveOS/squashfs.img  

 

 

製作ISO
# mkisofs -o /root/cnetos-7.9.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 /root/iso/ 
## 注意引數中的-V,和上面的isolinux.cfg檔案有關。 

  

感謝這幾位的部落格及官網文件;

Kickstart官網文件 :https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/installation_guide/chap-installing-using-anaconda-x86

部落格
https://www.cnblogs.com/yiy520/p/13307030.html

https://ieevee.com/tech/2016/08/20/kickstart.html

https://www.wumingx.com/linux/centos-iso.html

https://www.cnblogs.com/panyouming/p/8401038.html

https://www.jianshu.com/p/0edb49c3e9b4

https://blog.51cto.com/boytnt/2147184

https://www.cnblogs.com/yanh0606/p/10910808.html

 

 

 

 

  


 

 

相關文章