CentOS6.7定制化制作ISO
本文主要講解如何在已有官方
CentOS
鏡像文件的情況下對系統默認安裝的
RPM
包進行剪裁,同時添加與公司業務相關的應用
RPM
包,生成一個定制版的
ISO
,確保每次系統安裝后業務布署自動化和高度一致。
本文不對
Linux
內核進行任何剪裁和優化,不能帶你裝逼。
自動化部署文件
這個文件一般在你安裝完
CentOS
后
/root
目錄下生成,分別記錄了你安裝系統時的系統配置情況和安裝了哪些軟件包。我們在制作定制版
ISO
時可以直接使用這個文件,可以減輕一些工作量。當然你直接創建一個文本文件並編輯為下面內容也是可以的。
# vi /root/ks.cfg
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install
cdrom
lang zh_CN.UTF-8
keyboard us
rootpw --iscrypted $6$wkkHFjodgcq5lXPL$Y6rKvuAbZcxGT144.EDLv17Sz706nxUJvDw1ODUEh.B21ZFSvO5NXsW1jeKEu1jxr45Q5NlM9gt95vt9PSpCA0
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone --utc Asia/Shanghai
#bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
network --hostname YueKeOS --onboot yes --bootproto dhcp --nameserver 223.5.5.5,223.6.6.6
%pre
%end
%packages --nobase
@core
%end
%post
%end
准備環境
# yum install createrepo mkisofs isomd5sum squashfs-tools
# mkdir /root/YueKeOS
[
說明]
:以后統一將
”/root/YueKeOS”
稱為
ISO
制作目錄。
# mount /dev/cdrom /media/
# cp -r /media/* /root/YueKeOS/
# cp /media/.discinfo /root/YueKeOS/
# cp /media/.treeinfo /root/YueKeOS/
# cp /root/anaconda-ks.cfg isolinux/ks.cfg
# chmod +w isolinux/isolinux.cfg
找到下面一行內容,在其后面加上一部分:
append initrd=initrd.img ks=cdrom:/isolinux/ks.cfg
asknetwork
[
說明]
:斜體部分可選,代表是否在安裝時對網絡部分進行提示交互。
安裝前運行自定義腳本
%pre
表示系統安裝前,此時
ISO
鏡像文件被掛載到內存中
Linux
的
/mnt/source
具體操作:暫無
安裝后運行自定義腳本
%post
在系統安裝后執行
--
不帶參數,其實就是在真實的操作系統里操作。
--nochroot
已安裝的真實操作系統被掛載到內存虛擬操作系統中的
/mnt/sysimage
目錄。這個參數的用途主要是配合
%pre
使用的。先將光盤里的文件
copy
到內存運行的虛擬操作系統,再從內存虛擬操作系統
copy
到已安裝的真實操作操作。
%post --nochroot
mkdir /media
mount /dev/cdrom /media/
cp /media/test1.txt /mnt/sysimage/root/
%end
[
說明]
:上面命令實現了從
ISO
鏡像中拷貝文本文件到安裝好的真實操作系統中。
利用系統安裝得到RPM包
簡單地來講,系統安裝主要是將光驅作為本地
YUM
源。那么只要找到第一次安裝到底安裝了哪些
RPM
包,則這些
RPM
包完全滿足
YUM
源,不存在任何依賴關系破損。
而
centos
系統安裝完成后生成的
/root/install.log
。這個文件記錄的恰恰是系統安裝時安裝了哪些
RPM
包
(
不管是系統默認還是用戶自定義勾選的
)
。我們可以從光驅里拷貝對應的
RPM
包到
ISO
制作工作目錄里的
Packages
目錄。
第一步:清空
ISO
制作目錄里的Packages和repodata倆個目錄里的所有內容。並重新參照
install.log
從光驅里拷貝對應的
RPM
包。
# rm Packages/* repodata/* -rf
# awk '{print $2}' /root/install.log |xargs -i cp /media/Packages/{}.rpm /root/YueKeOS/Packages/
系統首次更新
官方
ISO
可能比較舊,安裝后我們可能需要執行
“yum upgrade”
來升級。雖然這種更新不包括操作系統內核和跨越發行版本,但至少可以保證已安裝的軟件包升級到最新。
1
、修改
YUM
配置文件。以確保
YUM
命令操作會保存
RPM
包
# /etc/yum.conf
keepcache=1
#
1
為保存
0
為不保存
,
默認不保存
2、yum upgrade
3、拿到
YUM
命令下載到本機緩存庫里的包,並拷貝到
ISO
制作目錄里。
# mv /var/cache/yum/x86_64/6/updates/packages/* /root/YueKeOS/Packages
# mv /var/cache/yum/x86_64/6/base/packages/* /root/YueKeOS/Packages
4
、刪除舊的對應
RPM
包。當然也可以不用刪除。我這里的測試結果是系統最終安裝的版本是升級包的最新版本。
利用YUM來搜集RPM包
很多情況下,除了系統最少安裝包外,我們還需要額外安裝業務相關軟件,比如常見的
VIM
、
MySQL
等。系統默認
YUM
安裝
MySQL
才
5.1
,版本太舊了。我們需要讓
ISO
集成更新的
MySQL 5.6
版本並默認安裝。
1
、修改
YUM
配置文件。以確保
YUM
命令操作會在本機保存下來
RPM
包
# /etc/yum.conf
keepcache=1
#
1
為保存
0
為不保存
,
默認不保存
2
、
yum install vim
[
說明]
:從
yum
安裝界面上顯示信息,
vim-enhanced
才是完整的軟件包名稱
3、yum install mysql-community-server
搭建
MySQL
的
Yum
源,詳見官網說明:
httpp://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/
4
、將所有此次安裝的軟件安裝包和依賴包,全部轉移到
ISO
制作目錄的
Packages
目錄。
創建光驅YUM倉庫
1、准備資源庫列表
XML
文件
# cp /media/repodata/*minimal-x86_64.xml /root/minimal-x86_64.xml
<comps>
<group>
<id>core</id>
<name>Core</name>
<description/>
<default>true</default>
<uservisible>false</uservisible>
<packagelist>
<packagereq type='mandatory'>acl</packagereq>
<packagereq type='mandatory'>xfsprogs</packagereq>
此處省略
N
行
<packagereq type='mandatory'>vim-enhanced</packagereq>
<packagereq type='mandatory'>mysql-community-server</packagereq>
</packagelist>
</group>
<category>
<id>core</id>
<name>Core</name>
<description>Minimal server packages set</description>
<display_order>60</display_order>
<grouplist>
<groupid>core</groupid>
</grouplist>
</category>
</comps>
[
說明1]
:讓我們來打量一下
XML
文件,它接下來將被
“reaterepo -g
參數
”
這種形式來引用的。它的作用就是在生成
YUM
倉庫后將
RPM
列表歸為幾個
group
。哪些
group id
可以安裝由
ks.cfg
來指定。我們在網上看到一些關於創建本地
YUM
源並沒有這個配置文件,是因為創建本地
YUM
源根本不需要。
[
說明2]
:經過實際測試,只需要在資源庫列表中列出你要安裝的軟件包完整名稱即可,其依賴包可以不用列出。當然你也可以創建新的
group id
給自己的業務定制包,也可以按照
YUM
的安裝順序將依賴包列入資源庫列表中。
3
、重新生成
repo
# declare -x discinfo=$(head -1 /root/YueKeOS/.discinfo)
# createrepo -u "media://$discinfo" -g /root/minimal-x86_64.xml /root/YueKeOS/
[
說明]:.discinfo
隱藏文件里的第一行數字為光盤介質編號,可以隨便編寫。並制作
repo
時必須要引用它。
自己制作RPM包
暫無
其它修飾
isolinux.cfg
光盤啟動時安裝選項菜單。修改背景圖
# mount -o loop images/install.img /mnt/
[
說明
:掛載后可以瀏覽,但無法修改。需要將里面的全部文件拷貝到另外一個臨時目錄。待修改完成后再制作成
install.img
文件。假設這個臨時目錄名為
“install-image”
# mksquashfs install-image/ /root/install.img -all-root -noF
光盤安裝軟件包進度時上方背景圖
制作ISO
# cd /root
# mkisofs -o YueKeOS-6.7.1_64.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/YueKeOS/
[
說明]:
mkisofs
實際上是鏈接
genisoimage命令
# implantisomd5 YueKeOS-6.7.1_64.iso