本文以制作自定義的centos7的ISO鏡像為例,自定義ISO無(wú)非就是提前安裝好yum包,提前安裝好pip包,提前安裝好自己的應(yīng)用這三種情況,對(duì)于提前安裝yum包,如下的鏈接講的非常清楚,這里就不再詳述,本文主要介紹一下如何在自定義ISO鏡像中提前安裝pip包以及應(yīng)用。
http://m.itdecent.cn/p/2d81f88efa62
友情提示:把上邊的鏈接看仔細(xì)了再看下邊的內(nèi)容,請(qǐng)知。
一.安裝pip包
1.下載pip
yum -y install epel-release python-devel python-pip
2.安裝pip包下載工具
pip install pip2pi
3.下載pip包及其依賴
pip2tgz /ISO/postinstall/packages -r requirement.txt
其中requirement.txt是我們要安裝的pip包,內(nèi)容如下:
[root@localhost postinstall]# cat requirement.txt
ansible==2.3.2.0
python-openstackclient
decorate
allure-pytest
pytest-html
python-ceilometerclient
python-heatclient
uwsgi==2.0.18
我們需要在/ISO目錄下新建一個(gè)目錄postinstall,用來(lái)存預(yù)安裝的pip包以及一些安裝腳本。
其中 /ISO/postinstall/packages是存放pip包以及其依賴包的目錄(注意這里要與存放yum包的目錄/ISO/Packages區(qū)分開),內(nèi)容如下(由于內(nèi)容較長(zhǎng),我只截取了一部分):
[root@localhost postinstall]# pwd
/ISO/postinstall
[root@localhost postinstall]# ll packages/
total 53076
-rw-r--r--. 1 root root 10080 May 22 23:16 allure_pytest-2.6.3-py2.py3-none-any.whl
-rw-r--r--. 1 root root 10280 Jun 27 06:31 allure_pytest-2.7.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root 13423 May 22 23:16 allure_python_commons-2.6.3-py2.py3-none-any.whl
-rw-r--r--. 1 root root 13505 Jun 27 06:31 allure_python_commons-2.7.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root 4319664 Jun 27 06:31 ansible-2.3.2.0.tar.gz
-rw-r--r--. 1 root root 12154 Jun 27 06:31 appdirs-1.4.3-py2.py3-none-any.whl
-rw-r--r--. 1 root root 101571 Jun 27 06:31 asn1crypto-0.24.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root 5885 Jun 27 06:31 atomicwrites-1.3.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root 35784 Jun 27 06:31 attrs-19.1.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root 8098645 May 22 23:16 Babel-2.6.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root 8421834 Jun 27 06:31 Babel-2.7.0-py2.py3-none-any.whl
4.修改ks.cfg
編輯/ISO/isolinux/ks.cfg文件,在文件末尾添加配置預(yù)安裝pip包的腳本。內(nèi)容如下:
%post --nochroot
#!/bin/sh
set -x -v
exec 1>/mnt/sysimage/root/kickstart-stage1.log 2>&1
echo "==> copying files from media to install drive..."
cp -r /run/install/repo/postinstall /mnt/sysimage/root
%end
%post
#!/bin/sh
set -x -v
exec 1>/root/kickstart-stage2.log 2>&1
ls -l /root/postinstall
cd /root/postinstall
chmod 777 install_pac.sh
sh install_pac.sh
%end
其中第一個(gè)%post%end的意思是講/ISO/postinstall目錄下的所有內(nèi)容拷貝到操作系統(tǒng)安裝好之后的/root/postinstall目錄下。
其中第二個(gè)%post%end的意思是在系統(tǒng)啟動(dòng)之前要執(zhí)行預(yù)安裝pip包的腳本。install_pac.sh(也要像/ISO/postinstall/packages目錄一樣,提前放在postinstall目錄下)的內(nèi)容如下:
#!/bin/sh
pip install -r /root/postinstall/requirement.txt --no-index --find-links=file:///root/postinstall/packages
pip install --ignore-installed -r /root/postinstall/requirement.txt --no-index --find-links=file:///root/postinstall/packages
二.安裝自定義應(yīng)用
如果安裝自定義pip包理解的話。這一步就更簡(jiǎn)單了。只需要將你要安裝的應(yīng)用放到/ISO/postinstall/目錄下,如果需要自定義一些安裝腳本的話,也放到這個(gè)目錄下。接著只需要修改ks.cfg文件中第二個(gè)%post%end中對(duì)應(yīng)的腳本即可。ks.cfg文件的配置相當(dāng)于把你的/ISO/postinstall/目錄下的所有內(nèi)容放到操作系統(tǒng)的/root/postinstall/目錄下執(zhí)行,寫應(yīng)用執(zhí)行腳本的時(shí)候注意路徑是/root/postinstall/即可。
友情提示:這其中涉及到的打包鏡像,修改配置文件等整個(gè)制作流程參考文章最初的鏈接。另外關(guān)于如何設(shè)置預(yù)安裝postinstall腳本請(qǐng)參考下文的鏈接,寫的超詳細(xì)(有4部分,大家有興趣的話可以好好研究一下)。
http://www.smorgasbork.com/2014/07/16/building-a-custom-centos-7-kickstart-disc-part-1/