实践教程:定制自己的Linux系统安装盘

日期: 2012-09-25 来源:TechTarget中国

  这里教给大家如何定制自己的Linux系统安装盘 。

  1、在VM安装linux系统

  2、安装定制工具anaconda repodata createrepo mkisofs

  关联太多采用yum安装//定制过程需要产生comps.xml文件以及生成iso

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

  3、生成packages.list 所安装的RPM包文件清单

  (由于install.log文件在root目录,所以该操作在root目录进行)

  [root@localhost ~]# cat install.log | grep Installing | sed ‘s/Installing //g’ > /root/packages.list

  //生成后,需要仔细看该文件,一般会在某些文件开始部分如“1:”这样的字符,需要删除这些字符,否在后面执行copy动作会报错

  4、建立定制Centos的源目录

  [root@localhost ~]#mkdir /Disk                          //定制时要复制RPM包的目录;

  [root@localhost ~]#mkdir /mnt/cdrom                      //加载光驱目录

  [root@localhost ~]#mount -o loop /dev/cdrom

  /mnt/cdrom     //将光盘内容加载到/mnt/cdrom中;

  [root@localhost ~]#cp –R /mnt/cdrom/. /Disk

  切记,要把光盘中的“.discinfo”文件拷贝过来,如果没有拷贝此文件,在用光盘安装时会提示如下错误:“The CentOS CD was not found in any of your CDROM drives. Please insert the CentOS CD and press OK to retry.”

  [root@localhost ~]#rm –f /Disk/CentOS/*.rpm  //先删除所有RPM包

  5、通过脚本复制系统安装的包

  (注意一定要Unix格式)

  [root@localhost ~]#vi copyrpms.sh

  #!/bin/bash

  DEBUG=0

  DVD_CD=/disk/CentOS               

  ALL_RPMS_DIR=/mnt/cdrom/CentOS/ 
      
  DVD_RPMS_DIR=$DVD_CD

  packages_list=/root/packages.list

  number_of_packages=`cat $packages_list | wc -l`

  i=1

  while [ $i -le $number_of_packages ] ; do

        line=`head -n $i $packages_list | tail -n -1`

        name=`echo $line | awk ‘{print $1}’`

        version=`echo $line | awk ‘{print $3}’ | cut  -f  2  -d  :`

        if [ $DEBUG -eq “1” ] ; then

                echo $i: $line

                echo $name

                echo $version
        fi

        if [ $DEBUG -eq “1” ] ; then

                ls $ALL_RPMS_DIR/$name-$version*

                if [ $? -ne 0 ] ; then

                        echo “cp $ALL_RPMS_DIR/$name$version* “
                fi
        else

  echo “cp $ALL_RPMS_DIR/$name-$version* $DVD_RPMS_DIR/”

                cp $ALL_RPMS_DIR/$name$version* $DVD_RPMS_DIR/

                # in case the copy failed

                if [ $? -ne 0 ] ; then

                        echo “cp $ALL_RPMS_DIR/$name$version* “

                        cp $ALL_RPMS_DIR/$name* $DVD_RPMS_DIR/
                fi
        fi

        i=`expr $i + 1`
  done

  将以上内容保存为copyrpms.sh

  [root@localhost ~]#chmod 775 copyrpms.sh

  [root@localhost ~]#./copyrpms.sh

  经过一系列的复制就完成了你要定制的RPM包(在/Disk/CentOS/目录下)

  6、定制安装控制文件ks.cfg

  ks文件主要分为三个部分

  1、系统安装及配置

  2、自定义安装准备(%post –nochroot)

  3、用户自定义安装(%post)

  系统安装及配置一般写在ks.cfg文件最前面,定义系统安装设置,以%post –nochroot为结束标志,接着是用户自定义安装准备部分,以“%post –nochroot”作为开始,以“%post”作为结束,

  自定义安装部分以“%post”作为开始。

  一般方便可以直接由root下面的anaconda-ks.cfg修改

  [root@localhost ~]#cp anaconda-ks.cfg /Disk/ks.cfg

  样例内容如:

  # Kickstart file automatically generated by anaconda.

  install (指定开始全新安装系统)

  cdrom

  (系统安装方式,有很多种安装方式:

  光驱方式:如果是光驱,这里可直接写成cdrom。

  http方式安装:可以写为“url –url http://192.168.12.142/centos/”在这个访问路径下,应该是已经解压的Centos系统的所有文件和目录。

  硬盘安装方式:这里要写做“harddrive –partition=sda1 –dir=/iso,其中sda1是linux镜像文件所在的硬盘标识,/iso是镜像文件所在目录。)

  lang en_US.UTF-8 (系统语言设定)

  keyboard us (键盘设置)

  xconfig –startxonboot (设置X桌面)

  #network –device eth0 –bootproto static –ip 192.168.12.133 –netmask 255.255.255.0 –gateway 192.168.12.1 (设置系统的IP地址信息,可以根据情况进行指定)

  rootpw –iscrypted $1$sXpmDpgD$IOEYOpdpXtxXgw7RmjtZS/ (经过加密的root密码)

  firewall –disabled (关闭防火墙)

  authconfig –enableshadow –enablemd5 (系统验证方式,这里启用默认md5加密)

  selinux –disabled (安装系统时关闭Selinux)

  timezone Asia/Shanghai(系统时区设置)

  bootloader –location=mbr(引导选项)

  # 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 –all –initlabel

  #part / –fstype ext3 –size=3000

  #part /boot –fstype ext3 –size=100

  #part /usr –fstype ext3 –size=2000

  #part /var –fstype ext3 –size=2000

  #part /cicro –fstype ext3 –size=100 –grow

  #part swap –size=1024

  clearpart –all –initlabel (全部格式化系统磁盘所有分区,下面开始进行分区设置)

  part / –bytes-per-inode=4096 –fstype=”ext3″ –size=15000

  part /boot –bytes-per-inode=4096 –fstype=”ext3″ –size=100

  part /var –bytes-per-inode=4096 –fstype=”ext3″ –size=5000

  part /usr –bytes-per-inode=4096 –fstype=”ext3″ –size=10000

  part swap –bytes-per-inode=4096 –fstype=”swap” –size=8096

  part /cicro –bytes-per-inode=4096 –fstype=”ext3″ –grow –size=1

  reboot(这个reboot必须写在系统分区之后)

  %pre (表示安装之前执行的命令,这个是系统安装前拷贝数据,由于光盘在进行安装系统前,会首先挂载到系统的/mnt/source目录下,因而下面操作是在这个路径下)

  echo “Installing CWS “

  mkdir /tmp/custom_data

  cp /mnt/source/cws/cws_3.5.102_Linux_fixed.tar.gz /tmp/custom_data

  Linux系统安装进程在系统安装完成后,会卸载光盘,因此,象复制安装介质中的文件或 RPM 之类的任务将不能被执行。此时就需要用“%post –nochroot”选项。

  可以添加系统在安装完成后要运行的命令。这一节必须位于 kickstart 文件的结尾处,而且必须以 %post 命令开头。

  %post –nochroot (系统安装完成后,要运行的脚步,–nochroot表示允许你指定你想在 chroot 环境之外运行的命令)

  cp /tmp/custom_data/cws_3.5.102_Linux_fixed.tar.gz

  /mnt/sysimage/cicro

  cd /mnt/sysimage/cicro

  tar zxvf

  /mnt/sysimage/cicro/cws_3.5.102_Linux_fixed.tar.gz

  %post(系统安装完成后,要运行的脚步,–nochroot

  在root环境下进行的操作,与在真实linux系统下进行操作完全一致。此时光盘已经被系统安装程序自动卸载)

  echo “Configing Hostname”

  echo “HOSTNAME=webserver” >> /etc/sysconfig/network

  echo “# Do not remove the following line, or various programs” > /etc/hosts

  echo “# that require network functionality will fail.” >> /etc/hosts

  echo “127.0.0.1

  localhost” >> /etc/hosts

  echo “127.0.0.1

  webserver” >> /etc/hosts

  echo “Config OS iso88591”

  echo ‘LANG=”en_US.iso88591″ ‘>/etc/sysconfig/i18n

  echo ‘SUPPORTED=”en_US.iso885915:en_US:en” ‘>>/etc/sysconfig/i18n

  echo ‘SYSFONT=”lat0-sun16″ ‘>>/etc/sysconfig/i18n

  echo ‘SYSFONTACM=”iso15″ ‘>>/etc/sysconfig/i18n

  echo “Truning OS And Starting Services”

  chkconfig –level 35 sendmail off

  /cicro/cws3/bin/startdb.sh

  chown -R mysql:mysql /cicro/cws3/data/db/mysql

  /cicro/cws3/bin/startas.sh

  %packages (系统需要安装的软件包)

  /*

  %packages

  有两个可用选项。

  –resolvedeps

  安装列举的软件包,并自动解决软件包依赖关系。如果该选项没有被指定,而软件包依赖关系却存在,自动安装就会暂停并提示用户。例如:

  %packages –resolvedeps
 
  –ignoredeps

  忽略未解决的依赖关系,并安装所列举的没有依赖关系的软件包。例如:

  %packages –ignoredeps
 
  –ignoremissing[1]

  忽略缺少的软件包或软件包组,而不是暂停安装来向用户询问是中止还是继续安装。例如:

  %packages –ignoremissing
 
  */

  @development-libs

  @editors
  
  @gno me-software-development

  @x-software-development

  @gnome-desktop

  @dialup

  @core

  @base

  @legacy-software-development

  @java-development

  @base-x
 
  @ruby

  @kde-software-development

  @development-tools

  @graphical-internet

  mesa-libGLU-devel

  device-mapper-multipath

  xorg-x11-server-Xnest

  xorg-x11-server-Xvfb

  imake

  7、修改isolinux.cfg文件

  // 将/Disk/isolinu/目录下的isolinux.cfg文件第一行default linux修改成default linux ks=cdrom:/ks.cfg

   样例文件如:

  default linux ks=cdrom:/ks.cfg

  prompt 1

  timeout 60

  display boot.msg

  F1 boot.msg

  F2 options.msg

  F3 general.msg

  F4 param.msg

  F5 rescue.msg

  label linux

  kernel vmlinuz

  append initrd=initrd.img

  label text

  kernel vmlinuz

  append initrd=initrd.img text

  label ks

  kernel vmlinuz

  append ks initrd=initrd.img

  label local

  localboot 1

  label memtest86

  kernel memtest

  append –

  8、生成comps.xml

  [root@localhost ~]# cd /Disk/                        

  [root@localhost ~]# createrepo -g repodata/comps.xml /Disk/    

  到此以上定制任务已经完成。

  9、制作IOS文件

  [root@localhost ~]#cd /Disk/

  [root@localhost disk]#mkisofs -o MyCentOS.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -T /Disk/

  /Disk/ 目录下产生的MyCentOS.iso 生成的ISO文件。

  测试定制版本

  可以测试这个iso的正确性,通过VM的iso镜像安装即可测试定制系统的正确性。

  自定义启动界面

  在isolinux里面有三个文件和自定义安装界面有关

  boot.msg是定义启动界面如何显示

  isolinux.cfg决定如何处理用户的输入,并执行对应的安装过程

  splash.lss是启动界面的背景图片

  1、 boot.msgboot.msg内容大致如下:

  ^L
  ^Xsplash.lss

  -
  To install or upgrade in graphical mode, press the ^O0b<ENTER>^O07 key.

  -
  To install or upgrade in text mode, type: ^O0blinux text <ENTER>^O07.

  -
  Use the function keys listed below for more information.

  ^O0f[F1-Main] [F2-Options] [F3-General] [F4-Kernel] [F5-Rescue]^O07

  boot.msg中的^X用ctrl+X输入

  ^Xsplash.lss表示使用splash.lss作为启动界面的背景图片

  后面就是启动时界面下的提示信息^O0f和^O07之间的内容作为高亮显示。

  2、splash.lss

  splash.lss是启动界面的背景图片,该图形文件比较特殊,只能使用14色(标准16色除去黑白两色)的原始图片来生成。

  首先创建一个16色(包含黑白两色)的gif文档,名为splash.gif,还可以通过Linux下的gimp工具编辑gif图片,在gimp 的“图像”菜单中把“模式”改为索引色,数量为14,因为还有黑色和白色,加在一起一共是16种颜色。修改后,保存这个gif文件。

  接着将该文件转换为lss格式

  #giftopnm < splash.gif | ppmtolss16 > splash.lss

  此步骤也可以分为两步完成:

  #giftopnm <splash.gif > splash.pnm

  ppmtolss16 <splash.pnm >splash.lss

  Giftopnm工具需要netpbm工具包。可以通过yum install netpbm*安装即可,需要安装netpbm-progs、netpbm-devel和netpbm三个包。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐