Pages

Saturday, 31 March 2012

shell脚本+kickstart文件定制CentOS 6

 from http://xiaosu.blog.51cto.com/2914416/820961
一个脚本,利用kickstart文件 + 脚本来生成自动安装的ISO, 基于CentOS 6,在CentOS 6.2下测试没问题,估计CentOS 6.*都没什么问题

这个脚本的最大的特点就是不需要CentOS的官方原版ISO镜像,所有需要的文件都是通过网络下载,有的是从sohu的镜像源,有的是163的(分散压力,呵呵) 这样做的还有一个好处就是安装的rpm包都是最新的,进入系统之后,不需要yum -y update了 (适合有洁癖的人) 

然后,rpm包都是通过yum安装,这里我安装了一个yum的插件,达到只下载不安装的目的,另外就是用yum的时候,还指定了一个--installroot的参数,让yum不去读本机的数据库,如果不加这个参数,就不能顺利的下载本机已经安装过的包


ks.cfg 是用system-config-kickstart生成的kickstart配置文件,如果没有这个命令,就yum -y install system-config-kickstart来安装一下就行,也可以通过修改本地/root目录下的ananconda-ks.cfg,但需要注意的 是这个文件里面有一行需要注释掉或者删除掉
repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100
如果不注释,安装的时候,ananconda会找这个yum源 

下面贴出脚本

  1. #!/bin/bash 
  2. if [ ! -e  /root/xiaosu.cfg ];then 
  3. echo "you must put the kickstart file named xiaosu.cfg to /root/" 
  4. exit 1 
  5. fi 
  6. yum -y install  yum-plugin-downloadonly createrepo genisoimage 
  7. mv /etc/yum.repos.d/  /etc/yum.repos.d.bak 
  8. mkdir /etc/yum.repos.d  
  9. cat >/etc/yum.repos.d/suzezhi.repo << EOF 
  10. [suzezhi-base] 
  11. name=CentOS-$releasever - Base - 163.com 
  12. baseurl=http://mirrors.163.com/centos/6/os/x86_64/ 
  13. gpgcheck=1 
  14. gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6 
  15.  
  16. [suzezhi-updates] 
  17. name=CentOS-$releasever - Updates - 163.com 
  18. baseurl=http://mirrors.163.com/centos/6/updates/x86_64/ 
  19. gpgcheck=1 
  20. gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6 
  21.  
  22. #additional packages that may be useful 
  23. [suzezhi-extras] 
  24. name=CentOS-$releasever - Extras - 163.com 
  25. baseurl=http://mirrors.163.com/centos/6/extras/x86_64/ 
  26. gpgcheck=1 
  27. gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6 
  28.  
  29. #additional packages that extend functionality of existing packages 
  30. [suzezhi-centosplus] 
  31. name=CentOS-$releasever - Plus - 163.com 
  32. baseurl=http://mirrors.163.com/centos/6/centosplus/x86_64/ 
  33. gpgcheck=1 
  34. gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6 
  35.  
  36. #contrib - packages by Centos Users 
  37. [suzezhi-contrib] 
  38. name=CentOS-$releasever - Contrib - 163.com 
  39. baseurl=http://mirrors.163.com/centos/6/contrib/x86_64/ 
  40. gpgcheck=1 
  41. gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6 
  42. EOF 
  43.  
  44. mkdir -p /tmp/suzezhi/temp 
  45. cd /tmp/suzezhi/temp 
  46. wget -r --no-parent -c --cut-dirs=4 --reject=gz --exclude-directories=centos/6/os/x86_64/Packages http://mirrors.sohu.com/centos/6/os/x86_64/ 
  47. find . -name index.html -exec rm -f {} \; 
  48.  
  49. cat >> /tmp/suzezhi/temp/yum.conf <<EOF 
  50. [main] 
  51. cachedir=/var/cache/Packages 
  52. keepcache=0 
  53. debuglevel=2 
  54. logfile=/var/log/yum.log 
  55. exactarch=1 
  56. obsoletes=1 
  57. gpgcheck=1 
  58. plugins=1 
  59. installonly_limit=5 
  60. bugtracker_url=http://bugs.centos.org/set_project.php?project_id=16&ref=http://bugs.centos.org/bug_report_page.php?category=yum 
  61. distroverpkg=centos-release 
  62. EOF 
  63. for i in $(awk '/^%packages$/,/^%end$/' /root/xiaosu.cfg  |grep -v -E  '%end|%packages'); do 
  64. yum --installroot=/tmp/suzezhi/test -c yum.conf  --downloadonly --downloaddir=/tmp/suzezhi/Packages -y  install $i 
  65. done 
  66. rm -rf  /etc/yum.repos.d  
  67. mv /etc/yum.repos.d.bak  /etc/yum.repos.d 
  68. cd /tmp/suzezhi/ 
  69. mv Packages/ /tmp/suzezhi/temp/mirrors.sohu.com/ 
  70. cd /tmp/suzezhi/temp/mirrors.sohu.com 
  71. cat > .discinfo  << EOF 
  72. 1333560292.885204 
  73. x86_64 
  74. EOF 
  75. cat > .treeinfo << EOF 
  76. [general] 
  77. family = CentOS 
  78. timestamp = 1333560005.81 
  79. variant =  
  80. totaldiscs = 1 
  81. version = 6 
  82. discnum = 1 
  83. packagedir = Packages  
  84. arch = x86_64 
  85.  
  86. [images-x86_64] 
  87. kernel = images/pxeboot/vmlinuz 
  88. initrd = images/pxeboot/initrd.img 
  89.  
  90. [images-xen] 
  91. kernel = images/pxeboot/vmlinuz 
  92. initrd = images/pxeboot/initrd.img 
  93.  
  94. [stage2] 
  95. mainimage = images/install.img 
  96. EOF 
  97. cp /root/xiaosu.cfg . 
  98. sed -i "/menu default/d" isolinux/isolinux.cfg 
  99. cat >> isolinux/isolinux.cfg << EOF 
  100. label auto 
  101.   menu label ^Auto install an  system 
  102.   menu default 
  103.   kernel vmlinuz 
  104.   append ks=cdrom:/xiaosu.cfg initrdinitrd=initrd.img  
  105. EOF 
  106. mv repodata/*-comps.xml . 
  107. rm -f repodata/* 
  108. mv *-comps.xml repodata 
  109. createrepo -d  --unique-md-filenames   -g repodata/*-comps.xml . 
  110. cd .. 
  111. mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -o /root/xiaosu.iso -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table mirrors.sohu.com/ 
  112. rm -rf /tmp/suzezhi 
下面解释一下大概的意思
先检测 /root目录下面有没有文件名为xiaosu.cfg的kickstart配置文件

然后安装制作ISO包和yum的插件还有创建yum源数据库的包

备份原来的yum配置文件

将163的源写入配置文件

创建目录

用wget从sohu的镜像源上下载ISO文件中必须的一些文件(比如initrd文件,install.img)

生成一个临时的yum配置文件

从kickstart配置文件中读取需要安装的包,然后用一个for循环遍历安装

恢复原来的配置文件

生成ISO中必须的文本文件.treeinfo 和 .discinfo 

将kickstart的配置文件复制到光盘目录

用sed取消掉原来的默认选项  然后追加一个自动安装的选项(如刚才那个图片所示,开机之后,自动将光标停留在自动安装的选项上)

重新生成yum源的数据库

生成ISO文件,并放到/root目录下
再贴一下xiaosu.cfg

  1. #platform=x86, AMD64, 或 Intel EM64T 
  2. #version=DEVEL 
  3. # Firewall configuration 
  4. firewall --disabled 
  5. # Install OS instead of upgrade 
  6. install 
  7. # Use CDROM installation media 
  8. cdrom 
  9. # Root password 
  10. rootpw --iscrypted $1$oSWcILwo$7OFkCcL9u6jvQxFeavj5V0 
  11. # System authorization information 
  12. auth  --useshadow  --passalgo=sha512 
  13. # Use graphical install 
  14. graphical 
  15. firstboot --disable 
  16. # System keyboard 
  17. keyboard us 
  18. # System language 
  19. lang en_US 
  20. # SELinux configuration 
  21. selinux --disabled 
  22. # Installation logging level 
  23. logging --level=info 
  24. # Reboot after installation 
  25. reboot 
  26. # System timezone 
  27. timezone  Asia/Shanghai 
  28. # Network information 
  29. network  --bootproto=dhcp --device=eth0 --onboot=on 
  30. zerombr 
  31. # System bootloader configuration 
  32. bootloader --location=mbr 
  33. # Partition clearing information 
  34. clearpart --all  
  35. # Disk partitioning information 
  36. part / --fstype="ext4" --ondisk=sda --size=10000 
  37. part /boot --fstype="ext4" --ondisk=sda --size=100 
  38. part swap --fstype="swap" --ondisk=sda --size=1000 
  39.  
  40. %packages 
  41. @base 
  42. @client-mgmt-tools 
  43. @chinese-support 
  44. @core 
  45. @basic-desktop 
  46. @desktop-platform 
  47. @fonts 
  48. @general-desktop 
  49. @graphical-admin-tools 
  50. @input-methods 
  51. @internet-applications 
  52. @internet-browser 
  53. @java-platform 
  54. @legacy-x 
  55. @server-platform 
  56. @server-policy 
  57. @x11 
  58. mtools 
  59. pax 
  60. oddjob 
  61. sgpio 
  62. wodim 
  63. abrt-gui 
  64. certmonger 
  65. pam_krb5 
  66. krb5-workstation 
  67. libXmu 
  68.  
  69. %end

No comments:

Post a Comment