鱼C论坛

 找回密码
 立即注册
查看: 3401|回复: 1

利用CentOS快速构建自己的发行版

[复制链接]
发表于 2011-10-23 15:12:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 黑夜 于 2011-10-25 14:21 编辑

对于很多个人站长来说,每次业务扩容装Linux系统都是件很麻烦的事情。有的IDC技术不会装Linux系统,或者有的就是装一次系统收取一定的费用。为此制作一个精简的CentOS发行版是很重要的。下面就一起来看下具体制作过程吧
一、制作LTOS具体过程
光盘结构介绍
* isolinux 目录存放光盘启动时的安装界面信息
* images 目录包括了必要的启动映像文件
* CentOS 目录存放安装软件包及信息
* .discinfo 文件是安装价质的识别信息
* lemp.tar.gz 文件存放系统初始化及其相关程序安装脚本.
》》环境说明:CentOS 5.3-i386 Vmware Workstation上完成制作工作.
1.安装制作发行版所需的基本软件包
  1. # yum -y install anaconda-runtime createrepo yum-utils anaconda anaconda-help busybox-anaconda mkisofs
复制代码
2.制作 ltos源文件夹
  1. # mkdir /ltos
  2. # mkdir /mnt/cdrom
  3. # mount -t iso9660 -o loop /dev/cdrom /mnt/cdrom/ 挂载光盘镜像
  4.   或者挂载ISO 文件到/mnt/cdrom
  5. # mount -t iso9660 -o loop centos.xxx.iso /mnt/cdrom   将CentOS 的ISO文件挂载到/mnt/cdrom目录
  6. # cd /mnt/cdrom
  7. # tar -cf - . | ( cd /ltos ; tar -xvpf - )  //将/mnt/cdrom里的文件利用tar全部拷贝到/ltsos这个目录下.
  8. #cd /ltos  //进入此目录删除一些无关的文件,仍后进入后面的工作.
复制代码
  1. [root@server ltos]# ls -al
  2. total 88
  3. drwxr-xr-x  6 root root  4096 Apr 11 21:00 .
  4. drwxr-xr-x 27 root root  4096 Apr 12 05:26 ..
  5. drwxr-xr-x  2 root root 36864 Apr  8 16:06 CentOS
  6. -rw-r--r--  1 root root    97 Apr  8 16:43 .discinfo
  7. drwxr-xr-x  4 root root  4096 Mar 21 23:04 images
  8. drwxr-xr-x  2 root root  4096 Apr 12 00:00 isolinux
  9. -rw-r--r--  1 root root 14371 Apr 11 23:16 lemp.tar.gz   //这个软件包是我们后面要建立的,读者可以分析一下
  10. 后面的ks.cfg脚本就可以明白他的用途.
  11. drwxr-xr-x  2 root root  4096 Apr 11 21:00 repodata
复制代码
3.定制 package.list软件包清单
如安装一个CentOS5.3的系统,根据自己的需求选择软件包;如果想你的系统很小,建议选择最少的包。安
装完成以后,在系统里会产生日志。日文文件存放在/root/install.log。
  1. # cat install.log | grep Installing | sed 's/Installing //g'|sed 's/^[0-9]\+://g' > packages.list
复制代码
  1. #mkdir /ltos/CentOS   建立存放 rpm包的目录.
复制代码
创建自动提取相关rpm脚本:
#vi cprpms.sh

  1. #!/bin/bash
  2. DEBUG=0
  3. LT_CD=/mnt/cdrom     
  4. ALL_RPMS_DIR=/mnt/cdrom/CentOS  #挂载光盘存放的目录
  5. LT_RPMS_DIR=/ltos/CentOS          #存放RPM包的目录
  6. packages_list=/root/packages.list
  7. number_of_packages=`cat $packages_list | wc -l`
  8. i=1
  9. while [ $i -le $number_of_packages ] ; do
  10. line=`head -n $i $packages_list | tail -n -1`
  11. name=`echo $line | awk '{print $1}'`
  12. version=`echo $line | awk '{print $3}' | cut -f 2 -d :`
  13. if [ $DEBUG -eq "1" ] ; then
  14. echo $i: $line
  15. echo $name
  16. echo $version
  17. fi
  18. if [ $DEBUG -eq "1" ] ; then
  19. ls $ALL_RPMS_DIR/$name-$version*
  20. if [ $? -ne 0 ] ; then
  21. echo "cp $ALL_RPMS_DIR/$name-$version* "
  22. fi
  23. else
  24. echo "cp $ALL_RPMS_DIR/$name-$version* $LT_RPMS_DIR/"
  25. cp $ALL_RPMS_DIR/$name-$version* $LT_RPMS_DIR/
  26. # in case the copy failed
  27. if [ $? -ne 0 ] ; then
  28. echo "cp $ALL_RPMS_DIR/$name-$version* "
  29. cp $ALL_RPMS_DIR/$name* $LT_RPMS_DIR/
  30. fi
  31. fi
  32. i=`expr $i + 1`
复制代码
  1. done
复制代码
执行以上脚本将定制ltos必要的rpm复制到/ltos/CentOS 目录

返回到/ltos目录下,执行createrepo程序生成repodata下的comps.xml 文件

  1. #cd /ltos
  2. #createrepo -g repodata/comps.xml .
复制代码
4.配置 kickstart 脚本
  通过CentOS5.3定制安装系统以后,会在系统里产生一个kickstart安装脚本(/root/anaconda-ks.cfg)

  1. # cp anaconda-ks.cfg /ltos/isolinux/ks.cfg
复制代码
vi /ltos/isolinux/ks.cfg 并修改脚本如下:\
  1. # Kickstart file automatically generated by anaconda.
  2. # Install CentOS instead of Upgrade
  3. install
  4. text

  5. #install from cd-rom
  6. cdrom
  7. lang en_US.UTF-8
  8. keyboard us

  9. # Skip the X Configuration
  10. skipx
  11. network --device eth0 --bootproto dhcp --hostname ltos.linuxtone.org
  12. rootpw --iscrypted $1$jPZf0P0r$JRe7pd.5wq9k.VZEMOgdq/

  13. # Setup the firewall with SSH, HTTP/S, Syslog, Webmin, and Netflow enabled
  14. firewall --enabled --port=22:tcp --port=69:udp --port=80:tcp --port=443:tcp
  15. authconfig --enableshadow --enablemd5
  16. # Disable SELinux
  17. selinux --disabled

  18. timezone --utc Asia/Shanghai

  19. # Clear the Bootloader and load it to the Master Boot Recor
  20. bootloader --location=mbr  
  21. zerombr yes

  22. # Set the Mouse
  23. mouse generic3ps/2

  24. # The following is the partition information you requested
  25. # Note that any partitions you deleted are not expressed
  26. # here so unless you clear all partitions first, this is
  27. # not guaranteed to work
  28. clearpart --all --initlabel
  29. part /boot --fstype ext3 --size=100 --asprimary
  30. part / --fstype ext3 --size=25000
  31. part swap --size=4096
  32. part /data --fstype ext3 --size=1 --grow
  33. #--- Reboot the host after installation is done
  34. reboot

  35. %packages
  36. @development-libs
  37. @editors
  38. @system-tools
  39. @text-internet
  40. @legacy-network-server
  41. @dialup
  42. @core
  43. @base
  44. @mail-server
  45. @development-tools

  46. audit

  47. net-snmp-utils

  48. sysstat

  49. iptraf

  50. dstat

  51. tftp

  52. lynx

  53. device-mapper-multipath

  54. imake

  55. -zsh

  56. -vnc

  57. -zisofs-tools

  58. -xdelta

  59. -openldap-clients

  60. -samba-client

  61. -fetchmail

  62. -dovecot
  63. -spamassassin

  64. #

  65. #     ------- Begin LEMP Install ---------

  66. #

  67. %post --nochroot

  68. # Mount CDROM

  69. mkdir -p /mnt/cdrom

  70. mount -r -t iso9660 /tmp/cdrom /mnt/cdrom

  71. # Copy our tar file and extract it

  72. cp /mnt/cdrom/lemp.tar.gz /mnt/sysimage/tmp/lemp.tar.gz > /dev/null

  73. cd /mnt/sysimage/tmp/

  74. tar -zxvf lemp.tar.gz > /dev/null

  75. # Move the contents of the tar into their new locations

  76. cp -R /mnt/sysimage/tmp/boot/* /mnt/sysimage/boot/ > /dev/null 2>/dev/null

  77. cp -R /mnt/sysimage/tmp/etc/* /mnt/sysimage/etc/ > /dev/null 2>/dev/null

  78. # Unmount CDROM

  79. umount /mnt/cdrom

  80. %post

  81. #vim syntax on

  82. sed -i "8 s/^/alias vi='vim'/" /root/.bashrc 2>/dev/null

  83. echo 'syntax on' > /root/.vimrc 2>/dev/null

  84. # Disable IPv6 until Cacti at least supports it

  85. echo "alias net-pf-10 off" >> /etc/modprobe.conf

  86. echo "alias ipv6 off" >> /etc/modprobe.conf

  87. /sbin/chkconfig --level 35 ip6tables off

  88. #init_ssh

  89. ssh_cf="/etc/ssh/sshd_config"

  90. sed -i -e '74 s/^/#/' -i -e '76 s/^/#/' $ssh_cf

  91. sed -i "s/#UseDNS yes/UseDNS no/" $ssh_cf

  92. #client

  93. sed -i -e '44 s/^/#/' -i -e '48 s/^/#/' $ssh_cf

  94. # Remove the ISO File translation files

  95. find / -name TRANS.TBL -exec rm {} \; /dev/null 2>/dev/null

  96. # Remove some unneeded services

  97. #--------------------------------------------------------------------------------

  98. cat << EOF

  99. +--------------------------------------------------------------+

  100. |             === Welcome to Tunoff services ===                                    |

  101. +--------------------------------------------------------------+

  102. EOF

  103. #---------------------------------------------------------------------------------

  104. for i in `ls /etc/rc3.d/S*`

  105. do

  106.                    CURSRV=`echo $i|cut -c 15-`

  107. echo $CURSRV

  108. case $CURSRV in

  109.              crond | irqbalance | microcode_ctl | network | random | sendmail | sshd | syslog | local | mysqld )

  110.        echo "Base services, Skip!"

  111.        ;;

  112.        *)

  113.              echo "change $CURSRV to off"

  114.              chkconfig --level 235 $CURSRV off

  115.              service $CURSRV stop

  116.        ;;

  117. esac

  118. done

  119. # file descriptors

  120. ulimit -HSn 65535

  121. echo -ne "

  122. * soft nofile 65536

  123. * hard nofile 65536

  124. " >>/etc/security/limits.conf

  125. .
  126. 5.让系统从kickstart 配置启动
  127. # vi /ltos/ isolinux/ isolinux.cfg

  128. default auto

  129. prompt 1

  130. timeout 600

  131. display boot.msg
复制代码
5.让系统从 kickstart配置启动

# vi /ltos/ isolinux/ isolinux.cfg
  1. default auto
  2. prompt 1
  3. timeout 600
  4. display boot.msg


  5. F1 boot.msg

  6. F2 options.msg

  7. F3 general.msg

  8. F4 param.msg

  9. F5 rescue.msg

  10. label linux

  11. kernel vmlinuz

  12. append initrd=initrd.img

  13. label text

  14. kernel vmlinuz

  15. append initrd=initrd.img text

  16. label auto

  17. kernel vmlinuz

  18. append ks=cdrom:/isolinux/ks.cfg initrd=initrd.img

  19. label ks

  20. kernel vmlinuz

  21. append ks initrd=initrd.img

  22. label local

  23. localboot 1

  24. label memtest86

  25. kernel memtest

  26. 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 下的文件即可.

2.如何去掉安装过程中的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/

3. 如何替换安装以后的grub ?

在安装光盘里的ks.cfg 文件里写好替换splash.xpm.gz 文件即可.

4. 如何去掉启动过程中的"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

相关脚本及制作工具下载:
http://www.linuxtone.org/project/ltos/ltospack.tar.gz   //相关脚本及工具下载.





想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-13 00:59:35 | 显示全部楼层
都没人顶 太无辜了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 12:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表