最近碰到个需求:要在内网环境安装centos6.5系统并搭建服务,但由于自动部署脚本里安装依赖包使用的是yum安装,而服务器无法连接外网,实施人员也不会本地yum源搭建…..

本来想法是打算把需要的依赖包全找出来打包发给实施人员自己安装去,后来考虑到系统安装人员的安装方式不一致,分区及安装包的不统一会对之后的维护造成负担,干脆就决定做个自动化安装的镜像,并把需要的业务依赖包全打包进去

ok,首先我们来看看环境准备:

1、两台刚安装好的、符合业务要求的系统(博主选择的是minimal 最小化安装,这个看个人需求了)

2、新装系统的/root 目录下 install.log 和 anaconda-ks.cfg 文件,之后会用到

3、需要添加的安装包

4、CentOS 6.5镜像文件或者光盘

5、安装工具包

####以下为在服务器A上的操作,即镜像制作服务器####

一、安装必要的工具包,创建对应目录

1 [root@localhost ~]# yum -y install anaconda createrepo mkisofs rsync

3 [root@localhost ~]# mkdir -p /root/iso/Packages      #创建存放当前系统里已安装的包的目录

5 [root@localhost ~]# mkdir -p /root/iso/repodata      #创建存放rpm包依赖关系的目录

二、插入光盘,挂载DVD镜像

1 [root@localhost ~]# mount /dev/cdrom /mnt            #挂载光盘镜像
mount: block device /dev/sr0 is write-protected, mounting read-only #有这提示是正常的

三、centos系统在安装包时,包名都记录在root目录install.log文件里,我们可以从中提取出来

1 [root@localhost ~]# awk '/Installing/{print $2}' /root/install.log | sed 's/^[0-9]*://g' >/root/package.txt

四、执行下面test.sh的脚本,从挂载的光盘镜像中提取出需要的安装包,放到/root/iso/Packages目录里。脚本内容如下:

 1 [root@localhost ~]# cat test.sh
#!/bin/bash
Packages='/mnt/Packages' #挂载的光盘镜像中存放安装包的路径
i='/root/iso/Packages/' #新镜像存放安装包的路径
while read line
do
cp ${Packages}/${line}*.rpm /${i} || echo "$line don't cp......."
done < /root/package.txt 2 [root@localhost ~]# sh test.sh

五、把镜像需要的其他文件也拷贝到iso目录下

[root@localhost ~]# rsync -a --exclude=Packages --exclude=repodata /mnt/  /root/iso
[root@localhost ~]# ll iso/
total 112
-rw-------. 1 root root 1539 May 30 01:18 anaconda-ks.cfg
-r--r--r--. 1 root root 14 Nov 29 2013 CentOS_BuildTag
dr-xr-xr-x. 3 root root 4096 Nov 29 2013 EFI
-r--r--r--. 1 root root 212 Nov 28 2013 EULA
-r--r--r--. 1 root root 18009 Nov 28 2013 GPL
dr-xr-xr-x. 3 root root 4096 Nov 29 2013 images
dr-xr-xr-x. 2 root root 4096 May 29 23:16 isolinux
drwxr-xr-x. 2 root root 4096 May 30 01:17 MyPackages
drwxr-xr-x. 2 root root 36864 May 30 19:55 Packages
-r--r--r--. 1 root root 1354 Nov 28 2013 RELEASE-NOTES-en-US.html
-r--r--r--. 1 root root 1706 Nov 28 2013 RPM-GPG-KEY-CentOS-6
-r--r--r--. 1 root root 1730 Nov 28 2013 RPM-GPG-KEY-CentOS-Debug-6
-r--r--r--. 1 root root 1730 Nov 28 2013 RPM-GPG-KEY-CentOS-Security-6
-r--r--r--. 1 root root 1734 Nov 28 2013 RPM-GPG-KEY-CentOS-Testing-6
-r--r--r--. 1 root root 4060 May 30 01:18 TRANS.TBL

六、执行xml.sh脚本,生成repodata下的comps.xml文件(重要),comps.xml 文件中包含了安装时用户所见到的与rpm相关的所有内容,它会检查Packages下的RPM包的依赖关系,安装时如果缺少依赖包,它会提示哪个RPM 包需要哪些依赖库。脚本内容如下:

 1 [root@localhost ~]# cat xml.sh
#!/bin/bash ISO_DIR=/root/iso
cd ${ISO_DIR}
declare -x discinfo=$(head -1 .discinfo)
cp /mnt/repodata/*-comps.xml ${ISO_DIR}/repodata/
createrepo -g ${ISO_DIR}/repodata/*-comps.xml ${ISO_DIR}
createrepo -u "media://$discinfo" -g ${ISO_DIR}/repodata/*-comps.xml ${ISO_DIR}

执行结果如下:

 1 [root@localhost ~]# sh xml.sh
2 Spawning worker 0 with 209 pkgs
3 Workers Finished
4 Gathering worker results
5
6 Saving Primary metadata
7 Saving file lists metadata
8 Saving other metadata
9 Generating sqlite DBs
10 Sqlite DBs complete
11 Spawning worker 0 with 209 pkgs
12 Workers Finished
13 Gathering worker results
14
15 Saving Primary metadata
16 Saving file lists metadata
17 Saving other metadata
18 Generating sqlite DBs
19 Sqlite DBs complete

上面对定制系统的精简已经完成,如果不需要添加自定义或者其他不在原系统镜像中的rpm包的话,可直接跳到第十一步即可,下面是对定制系统安装包的更新和增加

####以下为在服务器B上的操作####

部署环境有时候需要更新版本的软件,而上面我们定制的镜像中往往只有很旧的版本,这时候就需要我们对里面的rpm包进行更新,首先我们需要将所需的包及依赖下载下来但不安装,这就需要yum-plugin-downloadonly模块,相关说明可以看该博客http://www.cnblogs.com/dengtr/p/6518622.html,我们这里不再多做解释。

七、安装yum插件yum-plugin-downloadonly和epel第三方yum源

1 [root@192 ~]# yum install yum-plugin-downloadonly

3 [root@localhost ~]# yum install epel-release

八、将需要更新的包及依赖关系下载到本地

1 [root@localhost ~]# yum install --downloadonly gcc gcc-c++ libtool autoconf automake imake libxml2-devel expat-devel ncurses-devel cmake zlib.i686 libstdc++.i686 unzip wget vim ntpdate unzip

九、将下载到本地的包收集起来传到服务器A的/root/iso/Packages目录下

 1 [root@localhost 6]# find /var/cache/yum/x86_64/6/ -name "*.rpm" >>/root/rpm.txt     #将下载的rpm包绝对路径写到文件里

 2 [root@localhost ~]# mkdir /root/tmp                                                 #建立临时存放目录

 3 [root@localhost ~]# cat cp.sh                                                       #执行该脚本将下载的rpm包复制到tmp目录下
#!/bin/bash
while read line
do
cp $line /root/tmp/ || echo "$line don't cp......."
done < /root/rpm.txt 4 [root@localhost ~]# yum install openssh-clients #安装scp命令
 5 [root@localhost ~]# scp /root/tmp/*.rpm root@192.168.1.92:/root/iso/Packages/       #将收集到的rpm包远程传输到服务器A的/root/iso/Packages/目录上

rpm包及依赖关系的收集就完了,接着就需要回到服务器A上进行操作。

####以下为在服务器A上的操作,即镜像制作服务器####

十、因为/root/iso/Packages/目录下的包变动了,需要我们再回到上面第六步,执行xml.sh脚本,重新生成repodata下的comps.xml文件。这步主要是更新rpm包的依赖关系

 1 [root@localhost ~]# cat xml.sh
#!/bin/bash ISO_DIR=/root/iso
cd ${ISO_DIR}
declare -x discinfo=$(head -1 .discinfo)
cp /mnt/repodata/*-comps.xml ${ISO_DIR}/repodata/
createrepo -g ${ISO_DIR}/repodata/*-comps.xml ${ISO_DIR}
createrepo -u "media://$discinfo" -g ${ISO_DIR}/repodata/*-comps.xml ${ISO_DIR}

十一、制作 anaconda-ks.cfg 脚本

anaconda-ks.cfg记录了在安装系统时填写的参数和选项,即你在安装系统时选择分区、时区、设置用户密码等一系列操作,存放在/root目录,我们直接对由系统安装所创建的 anaconda-ks.cfg进行修改,当然也可以用system-config-kickstart工具制作而成

1 [root@localhost ~]# cp anaconda-ks.cfg  /root/iso         #复制到我们的定制镜像目录里,并进行修改

这里附上一个我在用的ks文件,其中新增的地方有注释,需要注意的是后面更新和增加的安装包需要追加到配置的后面

[root@localhost iso]# cat anaconda-ks.cfg
# Kickstart file automatically generated by anaconda. #version=DEVEL
install
cdrom
lang en_US.UTF-8               
keyboard us
network --onboot yes --device eth0 --bootproto dhcp --noipv6
rootpw --iscrypted $6$6u5l74FLeYsJgLRP$HnamRVB2RvRUFB2jEc
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --enforcing
timezone --utc Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="nomodeset crashkernel=auto rhgb quiet"
zerombr
clearpart --all --initlabel ####下面是系统分区,视个人情况修改,--size=1表示剩余空间全部分给该分区####
part /boot --asprimary --fstype="ext4" --ondisk=sda --size=300
part swap --asprimary --fstype="swap" --ondisk=sda --size=8192
part / --asprimary --fstype="ext4" --grow --ondisk=sda --size=1
reboot
# 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
#clearpart --none
#repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100 %packages
@core
@server-policy
@workstation-policy #下面的包即是我们在服务器B上更新的包名,相关依赖在第十步的时候就已经做好了
autoconf
automake
bison
cmake
expat-devel
gcc
gcc-c++
imake
libtool
libxml2-devel
ncurses-devel
yasm
glibc.i686
libgcc.i686
libstdc++.i686
nss-softokn-freebl.i686
zlib.i686 %post              #这里是系统安装完后执行的脚本命令,你可以在目录里放类似redis安装包、jdk安装包等,然后把安装命令都写在这里,博主这里写ls -l只是做实例。
ls -l eject              #安装完弹出光盘
%end

十一、修改 isolinux.cfg 配置文件,指定anaconda-ks.cfg路径

1 [root@localhost mnt]# cat /root/iso/isolinux/isolinux.cfg
2 default linux ks=cdrom:/anaconda-ks.cfg #修改第一行

十二、制作iso镜像,并生成 MD5校验码

1 [root@localhost ~]# mkisofs -o CentOS.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4  -boot-info-table -R -J -v -T /root/iso/
2 [root@localhost ~]# implantisomd5 CentOS.iso

新鲜出炉的自动安装镜像就完事了,之后刻盘,安装系统时只需要放入光盘就行了,简单吧

http://www.cnblogs.com/dengtr/p/5543820.html

定制linux镜像并自动化安装的更多相关文章

  1. 初涉定制linux系统之——自动化安装Centos系统镜像制作

    最近碰到个需求:要在内网环境安装centos6.5系统并搭建服务,但由于自动部署脚本里安装依赖包使用的是yum安装,而服务器无法连接外网,实施人员也不会本地yum源搭建O__O "….. 本 ...

  2. 定制属于自己的自动化安装的linux系统镜像

    使用软件和平台 1.基于平台:                  Vmware workstation 8.0 2.基于系统镜像:               rhel-server-5.8-i386 ...

  3. Linux中yum手动安装、手动建立仓库文件夹关联实现关联包自动安装、yum相关命令使用

               yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指 ...

  4. 通过yocto给p1010rdb定制linux,并启动linux

    一.通过yocto定制linux 1.安装yocto yocto只能在非root用户下编译,所以先新建一个用户. useradd chen  passwd -d chen 重启电脑进入chen用户. ...

  5. 制作iso镜像U盘自动化安装linux系统

    自制光盘引导自动化安装 首先我们要明白都需要哪些文件,我们列举下 ①需要一个文件夹来存放文件,将来把这个目录打包成iso ②准备kickstart文件(ks.cfg) ③准备启动文件启动菜单 差不多也 ...

  6. Linux PXE自动化安装centos6,centos7系统

    1.PXE是什么? pxe是Preboot Excution Environment的缩写,是intel公司研发,基于client/server的网络模式,支持远程主机通过网络从远端服务器下载镜,并由 ...

  7. Linux系统自动化安装之cobbler实现

    一.cobbler简介 cobbler是快速网络安装linux操作系统的服务,支持众多的Linux发行版本,如redhat|.fedora.centos.debian.ubuntu和suse,也可以支 ...

  8. 使用Kickstart+pxe自动化安装部署无人值守的linux服务器

    Kickstart+pxe Kickstart无人职守安装RHEL5过程分享(详细图解版) 启动应用有:httpd.dhcpd.named.xinetd 无人职守自动批量安装linux系统超详细 参考 ...

  9. Linux学习第一步(虚拟机的和镜像文件的安装)

    一.安装虚拟机(本文以vmware workstation 12为例) 1.在网上所有虚拟机并下载. 2.找到下载文件安装好 3.一直下一步 4.接下来的就是选择安装的目录了,当然如果你的电脑c盘够大 ...

随机推荐

  1. 痞子衡嵌入式:史上最强i.MX RT学习资源汇总(持续更新中...)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MX RT学习资源. 类别 资源 简介 官方汇总 i.MXRT产品主页 恩智浦官方i.MXRT产品主页,最权威的资料都在这里,参考手 ...

  2. Linux上编译安装PHP

    这篇文章主要介绍了关于Linux上编译安装PHP,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 之前在服务器上编译安装了PHP运行环境,但是安装完过了一段时间就差不多忘记了,只是零零星 ...

  3. Nebula Graph 技术总监陈恒:图数据库怎么和深度学习框架进行结合?

    引子 Nebula Graph 的技术总监在 09.24 - 09.30 期间同开源中国·高手问答的小伙伴们以「图数据库的设计和实践」为切入点展开讨论,包括:「图数据库的存储设计」.「图数据库的计算设 ...

  4. MongoDB 学习笔记之 匹配完整数组

    匹配完整数组: 创建一个集合(包含数组) db.ArrayTest.insert({name: "Sky" , address: [{"street" : &q ...

  5. .net core session的使用步骤

    步骤 操作 备注 1   Microsoft.AspNetCore.Session Microsoft.AspNetCore.Http.Extensions nuget安装包 2 ConfigureS ...

  6. Cannot access a disposed object in ASP.NET Core

    Cannot access a disposed object in ASP.NET Core 楠木大叔     导航 常见原因 总结   对于.neter来说,在使用ASP.NET Core的过程中 ...

  7. js完整

    jQuery jQuery介绍 jQuery是一个轻量级的.兼容多浏览器的JavaScript库. jQuery使用户能够更方便地处理HTML Document.Events.实现动画效果.方便地进行 ...

  8. 从零开始入门 K8s | Kubernetes 网络概念及策略控制

    作者 | 阿里巴巴高级技术专家  叶磊 一.Kubernetes 基本网络模型 本文来介绍一下 Kubernetes 对网络模型的一些想法.大家知道 Kubernetes 对于网络具体实现方案,没有什 ...

  9. POJ - 2393Yogurt factory

    The cows have purchased a yogurt factory that makes world-famous Yucky Yogurt. Over the next N (1 &l ...

  10. 【NOIP2015】子串

    题目描述 有两个仅包含小写英文字母的字符串 A 和 B.现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一 个新的字符串,请问 ...