zoukankan      html  css  js  c++  java
  • 快速构建自己的CentOS发行版


      一、制作LTOS具体过程
      光盘结构介绍
      * isolinux 目录存放光盘启动时的安装界面信息
      * images 目录包括了必要的启动映像文件
      * CentOS 目录存放安装软件包及信息
      * .discinfo 文件是安装价质的识别信息
      * lemp.tar.gz 文件存放系统初始化及其相关程序安装脚本.
      》》环境说明:CentOS 5.3-i386 Vmware Workstation上完成制作工作.
      1.安装制作发行版所需的基本软件包
      # yum -y install anaconda-runtime createrepo yum-utils anaconda anaconda-help busybox-anaconda mkisofs2.制作ltos源文件夹
      # mkdir /ltos
      # mkdir /mnt/cdrom
      # mount -t iso9660 -o loop /dev/cdrom /mnt/cdrom/ 挂载光盘镜像
      或者挂载ISO文件到/mnt/cdrom
      # mount -t iso9660 -o loop centos.xxx.iso /mnt/cdrom 将CentOS的ISO文件挂载到/mnt/cdrom目录
      # cd /mnt/cdrom
      # tar -cf - . | ( cd /ltos ; tar -xvpf - ) //将/mnt/cdrom里的文件利用tar全部拷贝到/ltsos这个目录下.
      #cd /ltos //进入此目录删除一些无关的文件,仍后进入后面的工作.
      [root@server ltos]# ls -al
      total 88
      drwxr-xr-x 6 root root 4096 Apr 11 21:00 .
      drwxr-xr-x 27 root root 4096 Apr 12 05:26 ..
      drwxr-xr-x 2 root root 36864 Apr 8 16:06 CentOS
      -rw-r--r-- 1 root root 97 Apr 8 16:43 .discinfo
      drwxr-xr-x 4 root root 4096 Mar 21 23:04 images
      drwxr-xr-x 2 root root 4096 Apr 12 00:00 isolinux
      -rw-r--r-- 1 root root 14371 Apr 11 23:16 lemp.tar.gz //这个软件包是我们后面要建立的,读者可以分析一下后面的ks.cfg脚本就可以明白他的用途.
      drwxr-xr-x 2 root root 4096 Apr 11 21:00 repodata
      -r--r--r-- 1 root root 7048 Mar 21 23:05 TRANS.TBL3.定制package.list软件包清单
      如安装一个CentOS5.3的系统,根据自己的需求选择软件包;如果想你的系统很小,建议选择最少的包。安装完成以后,在系统里会产生日志。日文文件存放在/root/install.log。
      # cat install.log | grep Installing | sed 's/Installing //g'|sed 's/^[0-9]+://g' > packages.list
      #mkdir /ltos/CentOS 建立存放rpm包的目录.创建自动提取相关rpm脚本:
      #vi cprpms.sh
      #!/bin/bash
      DEBUG=0
      LT_CD=/mnt/cdrom
      ALL_RPMS_DIR=/mnt/cdrom/CentOS #挂载光盘存放的目录
      LT_RPMS_DIR=/ltos/CentOS #存放RPM包的目录
      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* $LT_RPMS_DIR/"
      cp $ALL_RPMS_DIR/$name-$version* $LT_RPMS_DIR/
      # in case the copy failed
      if [ $? -ne 0 ] ; then
      echo "cp $ALL_RPMS_DIR/$name-$version* "
      cp $ALL_RPMS_DIR/$name* $LT_RPMS_DIR/
      fi
      fi
      i=`expr $i + 1`
      done执行以上脚本将定制ltos必要的rpm复制到/ltos/CentOS目录
      返回到/ltos目录下,执行createrepo程序生成repodata下的comps.xml文件
      #cd /ltos
      #createrepo -g repodata/comps.xml .4.配置kickstart脚本
      通过CentOS5.3定制安装系统以后,会在系统里产生一个kickstart安装脚本(/root/anaconda-ks.cfg)
      # cp anaconda-ks.cfg /ltos/isolinux/ks.cfg
      # vi /ltos/isolinux/ks.cfg 并修改脚本如下:
      # Kickstart file automatically generated by anaconda.
      # Install CentOS instead of Upgrade
      install
      text
      #install from cd-rom
      cdrom
      lang en_US.UTF-8
      keyboard us
      # Skip the X Configuration
      skipx
      network --device eth0 --bootproto dhcp --hostname ltos.linuxtone.org
      rootpw --iscrypted $1$jPZf0P0r$JRe7pd.5wq9k.VZEMOgdq/
      # Setup the firewall with SSH, HTTP/S, Syslog, Webmin, and Netflow enabled
      firewall --enabled --port=22:tcp --port=69:udp --port=80:tcp --port=443:tcp
      authconfig --enableshadow --enablemd5
      # Disable SELinux
      selinux --disabled
      timezone --utc Asia/Shanghai
      # Clear the Bootloader and load it to the Master Boot Record
      bootloader --location=mbr
      zerombr yes
      # Set the Mouse
      mouse generic3ps/2
      # 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 /boot --fstype ext3 --size=100 --asprimary
      part / --fstype ext3 --size=25000
      part swap --size=4096
      part /data --fstype ext3 --size=1 --grow
      #--- Reboot the host after installation is done
      reboot
      %packages
      @development-libs
      @editors
      @system-tools
      @text-internet
      @legacy-network-server
      @dialup
      @core
      @base
      @mail-server
      @development-tools
      audit
      net-snmp-utils
      sysstat
      iptraf
      dstat
      tftp
      lynx
      device-mapper-multipath
      imake
      -zsh
      -vnc
      -zisofs-tools
      -xdelta
      -openldap-clients
      -samba-client
      -fetchmail
      -dovecot
      -spamassassin
      #
      # ------- Begin LEMP Install ---------
      #
      %post --nochroot
      # Mount CDROM
      mkdir -p /mnt/cdrom
      mount -r -t iso9660 /tmp/cdrom /mnt/cdrom
      # Copy our tar file and extract it
      cp /mnt/cdrom/lemp.tar.gz /mnt/sysimage/tmp/lemp.tar.gz > /dev/null
      cd /mnt/sysimage/tmp/
      tar -zxvf lemp.tar.gz > /dev/null
      # Move the contents of the tar into their new locations
      cp -R /mnt/sysimage/tmp/boot/* /mnt/sysimage/boot/ > /dev/null 2>/dev/null
      cp -R /mnt/sysimage/tmp/etc/* /mnt/sysimage/etc/ > /dev/null 2>/dev/null
      # Unmount CDROM
      umount /mnt/cdrom
      %post
      #vim syntax on
      sed -i "8 s/^/alias vi='vim'/" /root/.bashrc 2>/dev/null
      echo 'syntax on' > /root/.vimrc 2>/dev/null
      # Disable IPv6 until Cacti at least supports it
      echo "alias net-pf-10 off" >> /etc/modprobe.conf
      echo "alias ipv6 off" >> /etc/modprobe.conf
      /sbin/chkconfig --level 35 ip6tables off
      #init_ssh
      ssh_cf="/etc/ssh/sshd_config"
      sed -i -e '74 s/^/#/' -i -e '76 s/^/#/' $ssh_cf
      sed -i "s/#UseDNS yes/UseDNS no/" $ssh_cf
      #client
      sed -i -e '44 s/^/#/' -i -e '48 s/^/#/' $ssh_cf
      # Remove the ISO File translation files
      find / -name TRANS.TBL -exec rm {} ; /dev/null 2>/dev/null
      # Remove some unneeded services
      #--------------------------------------------------------------------------------
      cat << EOF
      +--------------------------------------------------------------+
      | === Welcome to Tunoff services === |
      +--------------------------------------------------------------+
      EOF
      #---------------------------------------------------------------------------------
      for i in `ls /etc/rc3.d/S*`
      do
      CURSRV=`echo $i|cut -c 15-`
      echo $CURSRV
      case $CURSRV in
      crond | irqbalance | microcode_ctl | network | random | sendmail | sshd | syslog | local | mysqld )
      echo "Base services, Skip!"
      ;;
      *)
      echo "change $CURSRV to off"
      chkconfig --level 235 $CURSRV off
      service $CURSRV stop
      ;;
      esac
      done
      # file descriptors
      ulimit -HSn 65535
      echo -ne "
      * soft nofile 65536
      * hard nofile 65536" >>/etc/security/limits.conf5.让系统从kickstart配置启动
      # vi /ltos/ isolinux/ isolinux.cfg
      default auto
      prompt 1
      timeout 600
      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 auto
      kernel vmlinuz
      append ks=cdrom:/isolinux/ks.cfg initrd=initrd.img
      label ks
      kernel vmlinuz
      append ks initrd=initrd.img
      label local
      localboot 1
      label memtest86
      kernel memtest
      append -

      二.个性化定制你的系统
      1.如何定制安装开机画面:
      启动画面用的是一种比较奇怪的格式lss16,它限制图片使用16种颜色,除去前景和背景色只能有14种颜色。我们需要ppmtolss16 giftopnm等程序,系统一般默认都安装了。
      一般用gimp生成一个index模式的gif图形,颜色限制为14, 然后通过如下的办法进行转:
      安装yum -y install syslinux
      giftopnm < splash.gif | ppmtolss16 > splash.lss
      另外你还需要修改isolinux/boot.msg文件,做一些个性化的提示.
      ?如何生成高质量的图。
      先用photoshop打开任何一张图片,然后在文件的下拉菜单里,保存的时候选择“保存为WEB和设备使用格式“,再然后选择gif再选择16色保存就OK.
      仍后利用giftopnm < splash.gif | ppmtolss16 > splash.lss 转换即可.
      2.如何生成GRUP的xpm文件?
      (1) 将备一张640 x 480 16色图片,档案类型为JPG的格式
      (2)convert grub.gif -colors 14 -geometry 640x480! splash.xpm && gzip -9 splash.xpm
      (3) 直接替换/boot/grup/splash.xpm.gz 文件即可.
      ? 利用上面方法生成的图片可能无法显示,或者质量不高,如何生成高质量的grub图片呢.
      利用文中后面我提供的ltospackl.tar.gz里面的grubtool.exe即可在windows平台将jpg,bmp图生成为.xpm.gz格式的文件,直接替换/boot/grup下的文件即可.
      3.如何去掉安装过程中的CentOS字样?
      在安装光盘里面有两个.buildstamp文件,一个位于stage2.img中,一个位于initrd.img中,
      安装光盘运行时读取的是initrd.img中的那个.buildstamp文件,所以只要把initrd.img文件改了就可以了。
      如何解压initr.dimg文件:
      2.6内核中的initrd.img采用cpio压缩,不再是2.4内核使用的ext2格式,无法使用mount -o loop 挂载。需要使用gunzip解压缩,然后再使用
      利用cpio给img解包
      # cd /ltos/isolinux/
      # cp initrd.img /tmp/initrd.img.gz
      # cd /tmp
      # gunzip initrd.img.gz
      # mkdir initrd
      # mv initrd.img initrd
      # cd initrd
      # cpio -ivmd < initrd.img仍后修改.buildstamp文件,将CentOS改为LTOS即可.
      如何制作initrd.img文件:
      #假设当前目录位于准备好的initrd文件系统的根目录下
      # find . | cpio -c -o > ../initrd.img
      # gzip ../initrd.img
      # mv initrd.img.gz initrd.img
      # cp initrd.img /ltos/isolinux/仍后将initrd.img复制到/ltos/isolinux/
      4. 如何替换安装以后的grub ?
      在安装光盘里的ks.cfg文件里写好替换splash.xpm.gz文件即可.
      5. 如何去掉启动过程中的"CentOS release 5 (Final)"
      在安装光盘里的ks.cfg文件里写好脚本,直接替换/etc/redhat-release即可.
      三.打包生成ISO文件发布
      # cd /ltos
      # declare -x discinfo=`head -1 .discinfo`
      # createrepo -u "media://$discinfo" -g repodata/comps.xml .生成ISO文件
      #mkisofs -R -J -T -r -l -d -allow-multidot -allow-leading-dots -no-bak -o /tmp/ltos-0.1-i386.iso
      -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table .Md5
      /usr/lib/anaconda-runtime/implantisomd5 /tmp/ltos-0.1-i386.iso

  • 相关阅读:
    Android 使用系统签名打包apk
    创业公司如何巧用工具提高团队生产力——豌豆荚创始人王俊煜讲述团队背后的“利器”
    Spring整合BoneCP+Hibernate配置数据连接池
    EhCache集群方案JGroups
    IOS 目录结构
    关于hibernate的缓存使用
    用webbrowser控件做一个资源管理器,如何得到IE控件中选中(鼠标多选)的文件名称列表?
    轮回!
    转载:谨以此文献给才毕业25年的朋友
    新的开始
  • 原文地址:https://www.cnblogs.com/xiaOt119/p/3142045.html
Copyright © 2011-2022 走看看