0

我的帖子

个人中心

设置

  发新话题


定制化 大数据平台一键安装OS



定制化OS镜像制作

1.操作环境
操作环境:VMware Workstarion 9 and vSphere client
系统:CentOS -6.8-x86_64
工具:gconf-editor anaconda repodata createrepo mkisofs rsync


2.主要思路
定制化是通过kickstart脚本来实现的,linux系统安装完毕后在root目录下会生成anaconda-ks.cfg install.log等文件,anaconda-ks.cfg是自动安装脚本,install.log是安装包的一些信息记录。在定制化中我们用到的主要是anaconda-ks.cfg这个kickstart脚本,这个脚本可以通过工具生成,也可以通过修改原来系统的anaconda-ks.cfg文件来实现。这里为了方便,采用的是原来系统的anaconda-ks.cfg来进行修改,在kickstart脚本中我们可以自行设置在安装过程中要实现的操作,实现自动化定制化安装。

3.工具安装
在定制过程中,需要安装一些工具,这些工具用于生成我们需要的文件和最后制作镜像文件,进入centos,管理员模式下在命令行输入如下命令:#挂载镜像。
复制内容到剪贴板
代码:
[root@localhost ~]# mount /dev/sr0 /mnt/
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@localhost ~]# df -TH
Filesystem           Type     Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                     ext4      38G   27G  9.5G  74% /
tmpfs                tmpfs    985M     0  985M   0% /dev/shm
/dev/sda1            ext4     500M   42M  433M   9% /boot
/dev/sr0             iso9660  5.8G  5.8G     0 100% /mnt

#制作本地源
touch /etc/yum.repos.d/vrv.repo
echo "
[vrv-local]
name=vrv-local
baseurl=file:///mnt/
gpgcheck=0
enabled=1
" >> /etc/yum.repos.d/vrv.repo
yum clean all && echo 'yum repository has been updated!'
#安装工具
yum –y install anaconda repodata createrepo mkisofs rsync



4.定制化过程
#建立系统制作目录
mkdir /home/source
挂载镜像centos6.8.iso
#复制除了Packages文件夹以外的所有文件到系统制作目录
mount /dev/sr0 /mnt
cd /mnt
cp -rf * /home/source/
上传ks.cfg 服务端脚本配置和ks-config.cfg客户端脚本配置到isolinux文件夹下
执行yum install dos2*
dos2unix isolinux/*.cfg
#复制原系统的anaconda-ks.cfg和install.log文件到系统制作目录
[root@localhost ~]#cp /root/anaconda-ks.cfg /root/install.log /home/source


#参照当前的系统,复制相应的软件包到系统制作目录,install.log记录了本机安装的软件包的信息,参考install.log可以减少复制多余的软件包。
[root@localhost ~]#mkdir /home/source/Packages
[root@localhost ~]#awk ‘/Installing/{print $2}’ /home/source/install.log | xargs –I cp /mnt/Packages/{}.rpm /home/source/Packages/
cp /mnt/.discinfo   /home/source/  
#这一步很重要

#修改/制作kickstart脚本,修改这个脚本有两种方法,第一种方法是通过修改原系统的anaconda-ks.cfg脚本,第二种方法是通过system-config-kickstart工具来制作。第一种较为简单,修改的地方较少,而第二种方法是制作一个kickstart脚本,制作的过程由很多参数是需要手动设置的,容易出问题。

#对里面的参数进行解释
timezone Asia/Shanghai  #设置系统的时区,在时区设置是前面不加—utc否则时区设置不生效
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"  #auto rhgb quiet参数设置了系统的启动方式,去掉rhgb则在开机的过程中不显示开机动画,而是以文本的形式打印出系统的启动过程


# 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


#这里设置分区操作,如果不在kickstart脚本中设置,则在安装过程中需要手动来进行设置
clearpart --all –initlabel   
part /boot --fstype=ext4 --size=300
part / --fstype=ext4 --grow --size=37000  #硬盘大小根据具体的大小设置,一般我给虚拟机的大小为40G,所以这里设置为37000,剩余的空间用作boot和swap分区。
part swap --grow --maxsize=1984 --size=1984


#修改引导显示画面,引导显示画面的背景图片在安装光盘中的isolinux文件夹内部只需要用其他图片替换掉即可。修改系统名字(安装ambari服务不能修改名字)
#echo " OS release 1.1" > /etc/centos-release
#echo " OS release 1.1" > /etc/redhat-release
#sed -i 's/CentOS release 6.8 (Final)/ OS release 1.1/g' /etc/issue
#sed -i 's/CentOS release 6.8 (Final)/ OS release 1.1/g' /etc/issue.net
#sed -i 's/localhost.localdomain/vasp.host/g' /etc/sysconfig/network
#sed -i 's/CentOS/OS/g' /etc/rc.d/rc.sysinit
#sed -i 's/CentOS/OS/' /etc/grub.conf


5.添加背景图片
cd /home/source/Packages/isolinux/
#添加背景图片
menu background splash.jpg


替换成


注意图片大小和名字必须跟原图片一样

#自定义的安装选项,并将这个选项设置为默认选项,并设置自定义的kickstart安装脚本的文件路径,实现以文本形式自动安装。真重要,如果不变成一样,会遇到图片无法变过来的情况。
按格式添加并修改菜单选项:
######################添加以下内容
label menu os server install new system
  menu os server install new system
  kernel vmlinuz
  append ks=cdrom:/isolinux/ks.cfg initrd=initrd.img   
label menu os client install new system
  menu os client install new system
  kernel vmlinuz
  append ks=cdrom:/isolinux/ks-config.cfg initrd=initrd.img
label rescue
  menu label ^Rescue installed system
  kernel vmlinuz
  append initrd=initrd.img rescue
label Boot
  menu label Boot from ^local drive
  localboot 0xffff
label memtest86
  menu label ^Memory test
  kernel memtest
  append -

成果图:


6.生成新的镜像
#生成新的repodata文档
[root@localhost ~]#cd /home/source
[root@localhost ~]#cp repodata/*comps.xml ./comps.xml
[root@localhost ~]#rm –rf repodata
[root@localhost ~]#declare –x discinfo=`head –1 .discinfo`
[root@localhost ~]#createrepo –g comps.xml /home/source
#或者,也可以通过以下命令来实现,这个命令和上面区别在于它只更改那些在上次产生元数据之后被修改,添加或者删除了的项目,所以这个命令一般是用于在修改了包或组之后重新生成repodata文档,可以提高效率。
[root@localhost ~]#createrepo –u “media://$discinfo” –g comps.xml | /home/source


#为了方便,也可以通过脚本来进行操作,具体的脚本如下:
复制内容到剪贴板
代码:
#!/bin/bash
ISO_DIR=/home/source
cd ${ISO_DIR}
declare -x discinfo=$(head -1 .discinfo)
cp /mnt/repodata/*-c6-x86_64-comps.xml ${ISO_DIR}/comps.xml
createrepo -g ${ISO_DIR}/comps.xml ${ISO_DIR}
createrepo -u "media://$discinfo" -g ${ISO_DIR}/comps.xm l ${ISO_DIR}
# sh 1.sh
Spawning worker 0 with 3233 pkgs
Workers Finished
Gathering worker results

Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
#如果修改了Packages文件夹内的软件包,则需要重新生成comps.xml文件,可以将以上脚本保存为一个.sh文件,放于/root目录下随时使用。到这里所有的准备工作都已经完成,接下来可以开始制作镜像文件了。制作镜像文件用到的工具有mkisofs和implantisomd5,前者用来制作镜像,后者用来进行md5校验,检测文件在传输过程中是否损坏。进入系统制作目录/home/source运行一下命令:
[root@localhost ~]#mkisofs –o os.iso  –b isolinux/isolinux.bin –c isolinux/boot.cat –no-emul-boot –boot-load-size 4 –boot-info-table –R –J –v –T –joliet-long /home/source
#执行上述命令之后,在/home/source目录下会生成一个名为OS.iso的镜像文件进入/home/source目录。
复制内容到剪贴板
代码:
Using KRB5_001.RPM;1 for  /home/source/Packages/krb5-server-ldap-1.10.3-57.el6.x86_64.rpm (krb5-server-1.10.3-57.el6.x86_64.rpm)
Using PYTHO02T.RPM;1 for  /home/source/Packages/python-simplejson-2.0.9-3.1.el6.x86_64.rpm (python-suds-0.4.1-3.el6.noarch.rpm)
Using KDE_L01L.RPM;1 for  /home/source/Packages/kde-l10n-Korean-4.3.4-5.el6.noarch.rpm (kde-l10n-Maithili-4.3.4-5.el6.noarch.rpm)
Using XORG_021.RPM;1 for  /home/source/Packages/xorg-x11-drv-tdfx-1.4.6-1.el6.x86_64.rpm (xorg-x11-drv-vmmouse-13.1.0-1.el6.x86_64.rpm)
Using YUM_P005.RPM;1 for  /home/source/Packages/yum-plugin-verify-1.1.30-37.el6.noarch.rpm (yum-plugin-tmprepo-1.1.30-37.el6.noarch.rpm)
Using KDE_L01M.RPM;1 for  /home/source/Packages/kde-l10n-Maithili-4.3.4-5.el6.noarch.rpm (kde-l10n-Icelandic-4.3.4-5.el6.noarch.rpm)
Using CONTR001.RPM;1 for  /home/source/Packages/control-center-filesystem-2.28.1-40.el6.x86_64.rpm (control-center-2.28.1-40.el6.x86_64.rpm)
Using POSTG00A.RPM;1 for  /home/source/Packages/postgresql-libs-8.4.20-6.el6.x86_64.rpm (postgresql-plpython-8.4.20-6.el6.x86_64.rpm)
Using AUDIT001.RPM;1 for  /home/source/Packages/audit-libs-python-2.4.5-3.el6.x86_64.rpm (audit-libs-2.4.5-3.el6.x86_64.rpm)
Using ECLIP01R.RPM;1 for  /home/source/Packages/eclipse-valgrind-0.6.1-1.el6.x86_64.rpm (eclipse-rpm-editor-0.5.0-2.el6.x86_64.rpm)
Writing:   Initial Padblock                        Start Block 0
Done with: Initial Padblock                        Block(s)    16
Writing:   Primary Volume Descriptor               Start Block 16
Done with: Primary Volume Descriptor               Block(s)    1
Writing:   Eltorito Volume Descriptor              Start Block 17
Size of boot image is 4 sectors -> No emulation
Done with: Eltorito Volume Descriptor              Block(s)    1
Writing:   Joliet Volume Descriptor                Start Block 18
Done with: Joliet Volume Descriptor                Block(s)    1
Writing:   End Volume Descriptor                   Start Block 19
Done with: End Volume Descriptor                   Block(s)    1
Writing:   Version block                           Start Block 20
Done with: Version block                           Block(s)    1
Writing:   Path table                              Start Block 21
Done with: Path table                              Block(s)    4
Writing:   Joliet path table                       Start Block 25
Done with: Joliet path table                       Block(s)    4
Writing:   Directory tree                          Start Block 29
Done with: Directory tree                          Block(s)    326
Writing:   Joliet directory tree                   Start Block 355
Done with: Joliet directory tree                   Block(s)    239
Writing:   Directory tree cleanup                  Start Block 594
Done with: Directory tree cleanup                  Block(s)    0
Writing:   Extension record                        Start Block 594
Done with: Extension record                        Block(s)    1
Writing:   The File(s)                             Start Block 595
0.16% done, estimate finish Tue Jun 20 00:20:32 2017

99.96% done, estimate finish Tue Jun 20 00:23:09 2017
Total translation table size: 848976
Total rockridge attributes bytes: 384427
Total directory bytes: 660628
Path table size(bytes): 848
Done with: The File(s)                             Block(s)    3160548
Writing:   Ending Padblock                         Start Block 3161143
Done with: Ending Padblock                         Block(s)    150
Max brk space used 3aa000
3161293 extents written (6174 MB)
执行命令:
[root@localhost source]#/usr/bin/implantisomd5 os.iso
#向镜像文件插入md5校验值,防止镜像文件在复制过程中损坏,校验时在相应文件目录下输入如下命令,即可对文件进行校验,校验文件没问题后,可以通过xftp将镜像文件复制出来,下一步就可以安装测试了。
[root@localhost ]#checkisomd5 os.iso

生成镜像命令:
yum install -y mkisofs
createrepo -g repodata/*x86_64-comps.xml /home/source/
declare -x discinfo=`head -1 .discinfo`
createrepo -u "media://$discinfo" -g repodata/*x86_64-comps.xml /home/source/
mkisofs -o os.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -T -joliet-long /home/source


7.生成HDP镜像

跟上述一样的操作
createrepo -g repodata/*x86_64-comps.xml /home/hdp
declare -x discinfo=`head -1 .discinfo`
createrepo -u "media://$discinfo" -g repodata/*x86_64-comps.xml /home/hdp
mkisofs -o hdp2.4.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -T -joliet-long /home/hdp

效果图:


后续更新。。。。。
本帖最近评分记录
  • Shell_2015 无忧币 +20 精品文章 2017-6-30 13:16



  搞得不错。



不错,牛人年年有今年特别多



引用:
原帖由 lwsallx 于 2017-6-30 17:20 发表
不错,牛人年年有今年特别多
MARK!!!



谢谢斑斑的分享,干货!



‹‹ 上一贴:tomcat+nginx+linux问题【已解决】   |   下一贴:shellscript用touch创建文件时出错【已解决】 ... ››
  发新话题
快速回复主题
关于我们 | 诚聘英才 | 联系我们 | 网站大事 | 友情链接 |意见反馈 | 网站地图
Copyright©2005-2017 51CTO.COM
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系:bbs@51cto.com