本文以制作自定义的centos7的ISO镜像为例,自定义ISO无非就是提前安装好yum包,提前安装好pip包,提前安装好自己的应用这三种情况,对于提前安装yum包,如下的链接讲的非常清楚,这里就不再详述,本文主要介绍一下如何在自定义ISO镜像中提前安装pip包以及应用。
//www.greatytc.com/p/2d81f88efa62
友情提示:把上边的链接看仔细了再看下边的内容,请知。
一.安装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包,内容如下:
[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目录下新建一个目录postinstall,用来存预安装的pip包以及一些安装脚本。
其中 /ISO/postinstall/packages是存放pip包以及其依赖包的目录(注意这里要与存放yum包的目录/ISO/Packages区分开),内容如下(由于内容较长,我只截取了一部分):
[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文件,在文件末尾添加配置预安装pip包的脚本。内容如下:
%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
其中第一个%post%end的意思是讲/ISO/postinstall目录下的所有内容拷贝到操作系统安装好之后的/root/postinstall目录下。
其中第二个%post%end的意思是在系统启动之前要执行预安装pip包的脚本。install_pac.sh(也要像/ISO/postinstall/packages目录一样,提前放在postinstall目录下)的内容如下:
#!/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
二.安装自定义应用
如果安装自定义pip包理解的话。这一步就更简单了。只需要将你要安装的应用放到/ISO/postinstall/目录下,如果需要自定义一些安装脚本的话,也放到这个目录下。接着只需要修改ks.cfg文件中第二个%post%end中对应的脚本即可。ks.cfg文件的配置相当于把你的/ISO/postinstall/目录下的所有内容放到操作系统的/root/postinstall/目录下执行,写应用执行脚本的时候注意路径是/root/postinstall/即可。
友情提示:这其中涉及到的打包镜像,修改配置文件等整个制作流程参考文章最初的链接。另外关于如何设置预安装postinstall脚本请参考下文的链接,写的超详细(有4部分,大家有兴趣的话可以好好研究一下)。
http://www.smorgasbork.com/2014/07/16/building-a-custom-centos-7-kickstart-disc-part-1/