利用CentOS 快速构建自己的发行版【背景】 一.制作 ... - LinuxTone.Org
利用CentOS 快速构建自己的发行版【背景】 一.制作 ... - LinuxTone.Org
利用CentOS 快速构建自己的发行版【背景】 一.制作 ... - LinuxTone.Org
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
IT 运 维 专 家 网<br />
http://www.linuxtone.org<br />
利 用 CentOS 快 速 构 建 自 己 的 发 行 版<br />
作 者 : NetSeek http://www.linuxtone.org<br />
日 期 : 2009-4-10 版 本 号 :V1<br />
【 背 景 】<br />
我 的 朋 友 不 少 是 个 人 网 站 站 长 并 且 网 站 运 营 的 都 很 不 错 。 但 是 每 次 业 务 扩 容 装 Linux 系 统 都 让 他 们 很 头 痛 。<br />
有 的 IDC 技 术 不 会 装 Linux 系 统 , 或 者 有 的 就 是 装 一 次 系 统 收 取 一 定 的 费 用 。 为 此 一 个 朋 友 向 我 提 出 能 不 能<br />
做 一 个 精 简 一 点 的 CentOS 发 行 版 , 并 且 针 对 <strong>LinuxTone</strong> 论 坛 里 的 做 个 版 本 并<br />
且 集 成 初 始 化 优 化 脚 本 。 为 此 我 建 立 了 LTOS 这 个 发 行 版 。 以 下 是 具 体 的 制 作 过 程 和 朋 友 们 一 起 分 享 ! 希 望<br />
能 共 同 进 步 并 且 支 持 http://www.linuxtone.org 的 发 展 !<br />
一 . 制 作 LTOS 具 体 过 程<br />
光 盘 结 构 介 绍<br />
* isolinux 目 录 存 放 光 盘 启 动 时 的 安 装 界 面 信 息<br />
* images 目 录 包 括 了 必 要 的 启 动 映 像 文 件<br />
* CentOS 目 录 存 放 安 装 软 件 包 及 信 息<br />
* .discinfo 文 件 是 安 装 价 质 的 识 别 信 息<br />
* lemp.tar.gz 文 件 存 放 系 统 初 始 化 及 其 相 关 程 序 安 装 脚 本 .<br />
》》 环 境 说 明 :CentOS 5.3-i386 Vmware Workstation 上 完 成 制 作 工 作 .<br />
1. 安 装 制 作 发 行 版 所 需 的 基 本 软 件 包<br />
# yum -y install anaconda-runtime createrepo yum-utils anaconda anaconda-help busybox-anaconda mkisofs<br />
2. 制 作 ltos 源 文 件 夹<br />
# mkdir /ltos<br />
# mkdir /mnt/cdrom<br />
# mount -t iso9660 -o loop /dev/cdrom /mnt/cdrom/ 挂 载 光 盘 镜 像<br />
或 者 挂 载 ISO 文 件 到 /mnt/cdrom<br />
# mount -t iso9660 -o loop centos.xxx.iso /mnt/cdrom 将 CentOS 的 ISO 文 件 挂 载 到 /mnt/cdrom 目 录<br />
# cd /mnt/cdrom<br />
# tar -cf - . | ( cd /ltos ; tar -xvpf - ) // 将 /mnt/cdrom 里 的 文 件 利 用 tar 全 部 拷 贝 到 /ltsos 这 个 目 录 下 .<br />
#cd /ltos // 进 入 此 目 录 删 除 一 些 无 关 的 文 件 , 仍 后 进 入 后 面 的 工 作 .<br />
[root@server ltos]# ls -al<br />
total 88<br />
drwxr-xr-x 6 root root 4096 Apr 11 21:00 .<br />
drwxr-xr-x 27 root root 4096 Apr 12 05:26 ..<br />
drwxr-xr-x 2 root root 36864 Apr 8 16:06 CentOS<br />
-rw-r--r-- 1 root root 97 Apr 8 16:43 .discinfo<br />
drwxr-xr-x 4 root root 4096 Mar 21 23:04 images<br />
drwxr-xr-x 2 root root 4096 Apr 12 00:00 isolinux<br />
-rw-r--r-- 1 root root 14371 Apr 11 23:16 lemp.tar.gz<br />
后 面 的 ks.cfg 脚 本 就 可 以 明 白 他 的 用 途 .<br />
drwxr-xr-x 2 root root 4096 Apr 11 21:00 repodata<br />
// 这 个 软 件 包 是 我 们 后 面 要 建 立 的 , 读 者 可 以 分 析 一 下<br />
IT 运 维 专 家 网 ------“ 我 为 人 人 , 人 人 为 我 ! 知 识 源 于 分 享 , 源 于 交 流 !”---<strong>LinuxTone</strong> 技 术 交 流 分 享 社 区 !
IT 运 维 专 家 网<br />
http://www.linuxtone.org<br />
-r--r--r-- 1 root root 7048 Mar 21 23:05 TRANS.TBL<br />
3. 定 制 package.list 软 件 包 清 单<br />
如 安 装 一 个 CentOS5.3 的 系 统 , 根 据 自 己 的 需 求 选 择 软 件 包 ; 如 果 想 你 的 系 统 很 小 , 建 议 选 择 最 少 的 包 。 安<br />
装 完 成 以 后 , 在 系 统 里 会 产 生 日 志 。 日 文 文 件 存 放 在 /root/install.log。<br />
# cat install.log | grep Installing | sed 's/Installing //g'|sed 's/^[0-9]\+://g' > packages.list<br />
#mkdir /ltos/CentOS 建 立 存 放 rpm 包 的 目 录 .<br />
创 建 自 动 提 取 相 关 rpm 脚 本 :<br />
#vi cprpms.sh<br />
#!/bin/bash<br />
DEBUG=0<br />
LT_CD=/mnt/cdrom<br />
ALL_RPMS_DIR=/mnt/cdrom/CentOS # 挂 载 光 盘 存 放 的 目 录<br />
LT_RPMS_DIR=/ltos/CentOS # 存 放 RPM 包 的 目 录<br />
packages_list=/root/packages.list<br />
number_of_packages=`cat $packages_list | wc -l`<br />
i=1<br />
while [ $i -le $number_of_packages ] ; do<br />
line=`head -n $i $packages_list | tail -n -1`<br />
name=`echo $line | awk '{print $1}'`<br />
version=`echo $line | awk '{print $3}' | cut -f 2 -d :`<br />
if [ $DEBUG -eq "1" ] ; then<br />
echo $i: $line<br />
echo $name<br />
echo $version<br />
fi<br />
if [ $DEBUG -eq "1" ] ; then<br />
ls $ALL_RPMS_DIR/$name-$version*<br />
if [ $? -ne 0 ] ; then<br />
echo "cp $ALL_RPMS_DIR/$name-$version* "<br />
fi<br />
else<br />
echo "cp $ALL_RPMS_DIR/$name-$version* $LT_RPMS_DIR/"<br />
cp $ALL_RPMS_DIR/$name-$version* $LT_RPMS_DIR/<br />
# in case the copy failed<br />
if [ $? -ne 0 ] ; then<br />
echo "cp $ALL_RPMS_DIR/$name-$version* "<br />
cp $ALL_RPMS_DIR/$name* $LT_RPMS_DIR/<br />
fi<br />
fi<br />
i=`expr $i + 1`<br />
IT 运 维 专 家 网 ------“ 我 为 人 人 , 人 人 为 我 ! 知 识 源 于 分 享 , 源 于 交 流 !”---<strong>LinuxTone</strong> 技 术 交 流 分 享 社 区 !
IT 运 维 专 家 网<br />
http://www.linuxtone.org<br />
done<br />
执 行 以 上 脚 本 将 定 制 ltos 必 要 的 rpm 复 制 到 /ltos/CentOS 目 录<br />
返 回 到 /ltos 目 录 下 , 执 行 createrepo 程 序 生 成 repodata 下 的 comps.xml 文 件<br />
#cd /ltos<br />
#createrepo -g repodata/comps.xml .<br />
4. 配 置 kickstart 脚 本<br />
通 过 CentOS5.3 定 制 安 装 系 统 以 后 , 会 在 系 统 里 产 生 一 个 kickstart 安 装 脚 本 (/root/anaconda-ks.cfg)<br />
# cp anaconda-ks.cfg /ltos/isolinux/ks.cfg<br />
# vi /ltos/isolinux/ks.cfg 并 修 改 脚 本 如 下 :<br />
# Kickstart file automatically generated by anaconda.<br />
# Install CentOS instead of Upgrade<br />
install<br />
text<br />
#install from cd-rom<br />
cdrom<br />
lang en_US.UTF-8<br />
keyboard us<br />
# Skip the X Configuration<br />
skipx<br />
network --device eth0 --bootproto dhcp --hostname ltos.linuxtone.org<br />
rootpw --iscrypted $1$jPZf0P0r$JRe7pd.5wq9k.VZEMOgdq/<br />
# Setup the firewall with SSH, HTTP/S, Syslog, Webmin, and Netflow enabled<br />
firewall --enabled --port=22:tcp --port=69:udp --port=80:tcp --port=443:tcp<br />
authconfig --enableshadow --enablemd5<br />
# Disable SELinux<br />
selinux --disabled<br />
timezone --utc Asia/Shanghai<br />
# Clear the Bootloader and load it to the Master Boot Record<br />
bootloader --location=mbr<br />
zerombr yes<br />
# Set the Mouse<br />
IT 运 维 专 家 网 ------“ 我 为 人 人 , 人 人 为 我 ! 知 识 源 于 分 享 , 源 于 交 流 !”---<strong>LinuxTone</strong> 技 术 交 流 分 享 社 区 !
IT 运 维 专 家 网<br />
http://www.linuxtone.org<br />
mouse generic3ps/2<br />
# The following is the partition information you requested<br />
# Note that any partitions you deleted are not expressed<br />
# here so unless you clear all partitions first, this is<br />
# not guaranteed to work<br />
clearpart --all --initlabel<br />
part /boot --fstype ext3 --size=100 --asprimary<br />
part / --fstype ext3 --size=25000<br />
part swap --size=4096<br />
part /data --fstype ext3 --size=1 --grow<br />
#--- Reboot the host after installation is done<br />
reboot<br />
%packages<br />
@development-libs<br />
@editors<br />
@system-tools<br />
@text-internet<br />
@legacy-network-server<br />
@dialup<br />
@core<br />
@base<br />
@mail-server<br />
@development-tools<br />
audit<br />
net-snmp-utils<br />
sysstat<br />
iptraf<br />
dstat<br />
tftp<br />
lynx<br />
device-mapper-multipath<br />
imake<br />
-zsh<br />
-vnc<br />
-zisofs-tools<br />
-xdelta<br />
-openldap-clients<br />
-samba-client<br />
-fetchmail<br />
-dovecot<br />
IT 运 维 专 家 网 ------“ 我 为 人 人 , 人 人 为 我 ! 知 识 源 于 分 享 , 源 于 交 流 !”---<strong>LinuxTone</strong> 技 术 交 流 分 享 社 区 !
IT 运 维 专 家 网<br />
http://www.linuxtone.org<br />
-spamassassin<br />
#<br />
# ------- Begin LEMP Install ---------<br />
#<br />
%post --nochroot<br />
# Mount CDROM<br />
mkdir -p /mnt/cdrom<br />
mount -r -t iso9660 /tmp/cdrom /mnt/cdrom<br />
# Copy our tar file and extract it<br />
cp /mnt/cdrom/lemp.tar.gz /mnt/sysimage/tmp/lemp.tar.gz > /dev/null<br />
cd /mnt/sysimage/tmp/<br />
tar -zxvf lemp.tar.gz > /dev/null<br />
# Move the contents of the tar into their new locations<br />
cp -R /mnt/sysimage/tmp/boot/* /mnt/sysimage/boot/ > /dev/null 2>/dev/null<br />
cp -R /mnt/sysimage/tmp/etc/* /mnt/sysimage/etc/ > /dev/null 2>/dev/null<br />
# Unmount CDROM<br />
umount /mnt/cdrom<br />
%post<br />
#vim syntax on<br />
sed -i "8 s/^/alias vi='vim'/" /root/.bashrc 2>/dev/null<br />
echo 'syntax on' > /root/.vimrc 2>/dev/null<br />
# Disable IPv6 until Cacti at least supports it<br />
echo "alias net-pf-10 off" >> /etc/modprobe.conf<br />
echo "alias ipv6 off" >> /etc/modprobe.conf<br />
/sbin/chkconfig --level 35 ip6tables off<br />
#init_ssh<br />
ssh_cf="/etc/ssh/sshd_config"<br />
sed -i -e '74 s/^/#/' -i -e '76 s/^/#/' $ssh_cf<br />
sed -i "s/#UseDNS yes/UseDNS no/" $ssh_cf<br />
#client<br />
sed -i -e '44 s/^/#/' -i -e '48 s/^/#/' $ssh_cf<br />
IT 运 维 专 家 网 ------“ 我 为 人 人 , 人 人 为 我 ! 知 识 源 于 分 享 , 源 于 交 流 !”---<strong>LinuxTone</strong> 技 术 交 流 分 享 社 区 !
IT 运 维 专 家 网<br />
http://www.linuxtone.org<br />
# Remove the ISO File translation files<br />
find / -name TRANS.TBL -exec rm {} \; /dev/null 2>/dev/null<br />
# Remove some unneeded services<br />
#--------------------------------------------------------------------------------<br />
cat >/etc/security/limits.conf<br />
.<br />
5. 让 系 统 从 kickstart 配 置 启 动<br />
# vi /ltos/ isolinux/ isolinux.cfg<br />
default auto<br />
prompt 1<br />
timeout 600<br />
display boot.msg<br />
IT 运 维 专 家 网 ------“ 我 为 人 人 , 人 人 为 我 ! 知 识 源 于 分 享 , 源 于 交 流 !”---<strong>LinuxTone</strong> 技 术 交 流 分 享 社 区 !
IT 运 维 专 家 网<br />
http://www.linuxtone.org<br />
F1 boot.msg<br />
F2 options.msg<br />
F3 general.msg<br />
F4 param.msg<br />
F5 rescue.msg<br />
label linux<br />
kernel vmlinuz<br />
append initrd=initrd.img<br />
label text<br />
kernel vmlinuz<br />
append initrd=initrd.img text<br />
label auto<br />
kernel vmlinuz<br />
append ks=cdrom:/isolinux/ks.cfg initrd=initrd.img<br />
label ks<br />
kernel vmlinuz<br />
append ks initrd=initrd.img<br />
label local<br />
localboot 1<br />
label memtest86<br />
kernel memtest<br />
append -<br />
二 . 个 性 化 定 制 你 的 系 统 ( 问 答 形 式 )<br />
1. 如 何 定 制 安 装 开 机 画 面 :<br />
启 动 画 面 用 的 是 一 种 比 较 奇 怪 的 格 式 lss16, 它 限 制 图 片 使 用 16 种 颜 色 , 除 去 前 景 和 背 景 色 只 能 有 14 种 颜<br />
色 。 我 们 需 要 ppmtolss16 giftopnm 等 程 序 , 系 统 一 般 默 认 都 安 装 了 。<br />
一 般 用 gimp 生 成 一 个 index 模 式 的 gif 图 形 , 颜 色 限 制 为 14, 然 后 通 过 如 下 的 办 法 进 行 转 :<br />
安 装 yum -y install syslinux<br />
giftopnm < splash.gif | ppmtolss16 > splash.lss<br />
另 外 你 还 需 要 修 改 isolinux/boot.msg 文 件 , 做 一 些 个 性 化 的 提 示 .<br />
? 如 何 生 成 高 质 量 的 图 。<br />
先 用 photoshop 打 开 任 何 一 张 图 片 , 然 后 在 文 件 的 下 拉 菜 单 里 , 保 存 的 时 候 选 择 “ 保 存 为 WEB 和 设 备 使 用 格<br />
式 “, 再 然 后 选 择 gif 再 选 择 16 色 保 存 就 OK.<br />
仍 后 利 用 giftopnm < splash.gif | ppmtolss16 > splash.lss 转 换 即 可 .<br />
2. 如 何 生 成 GRUP 的 xpm 文 件 ?<br />
(1) 将 备 一 张 640 x 480 16 色 图 片 , 档 案 类 型 为 JPG 的 格 式<br />
(2)convert grub.gif -colors 14 -geometry 640x480! splash.xpm && gzip -9 splash.xpm<br />
(3) 直 接 替 换 /boot/grup/splash.xpm.gz 文 件 即 可 .<br />
IT 运 维 专 家 网 ------“ 我 为 人 人 , 人 人 为 我 ! 知 识 源 于 分 享 , 源 于 交 流 !”---<strong>LinuxTone</strong> 技 术 交 流 分 享 社 区 !
IT 运 维 专 家 网<br />
http://www.linuxtone.org<br />
? 利 用 上 面 方 法 生 成 的 图 片 可 能 无 法 显 示 , 或 者 质 量 不 高 , 如 何 生 成 高 质 量 的 grub 图 片 呢 .<br />
利 用 文 中 后 面 我 提 供 的 ltospackl.tar.gz 里 面 的 grubtool.exe 即 可 在 windows 平 台 将 jpg,bmp 图 生 成 为 .xpm.gz<br />
格 式 的 文 件 , 直 接 替 换 /boot/grup 下 的 文 件 即 可 .<br />
2. 如 何 去 掉 安 装 过 程 中 的 CentOS 字 样 ?<br />
在 安 装 光 盘 里 面 有 两 个 .buildstamp 文 件 , 一 个 位 于 stage2.img 中 , 一 个 位 于 initrd.img 中 ,<br />
安 装 光 盘 运 行 时 读 取 的 是 initrd.img 中 的 那 个 .buildstamp 文 件 , 所 以 只 要 把 initrd.img 文 件 改 了 就 可 以 了 。<br />
如 何 解 压 initr.dimg 文 件 :<br />
2.6 内 核 中 的 initrd.img 采 用 cpio 压 缩 , 不 再 是 2.4 内 核 使 用 的 ext2 格 式 , 无 法 使 用 mount -o loop 挂 载 。 需<br />
要 使 用 gunzip 解 压 缩 , 然 后 再 使 用<br />
利 用 cpio 给 img 解 包<br />
# cd /ltos/isolinux/<br />
# cp initrd.img /tmp/initrd.img.gz<br />
# cd /tmp<br />
# gunzip initrd.img.gz<br />
# mkdir initrd<br />
# mv initrd.img initrd<br />
# cd initrd<br />
# cpio -ivmd < initrd.img<br />
仍 后 修 改 .buildstamp 文 件 , 将 CentOS 改 为 LTOS 即 可 .<br />
如 何 制 作 initrd.img 文 件 :<br />
# 假 设 当 前 目 录 位 于 准 备 好 的 initrd 文 件 系 统 的 根 目 录 下<br />
# find . | cpio -c -o > ../initrd.img<br />
# gzip ../initrd.img<br />
# mv initrd.img.gz initrd.img<br />
# cp initrd.img /ltos/isolinux/<br />
仍 后 将 initrd.img 复 制 到 /ltos/isolinux/<br />
3. 如 何 替 换 安 装 以 后 的 grub ?<br />
在 安 装 光 盘 里 的 ks.cfg 文 件 里 写 好 替 换 splash.xpm.gz 文 件 即 可 .<br />
4. 如 何 去 掉 启 动 过 程 中 的 "CentOS release 5 (Final)"<br />
在 安 装 光 盘 里 的 ks.cfg 文 件 里 写 好 脚 本 , 直 接 替 换 /etc/redhat-release 即 可 .<br />
三 . 打 包 生 成 ISO 文 件 发 布<br />
# cd /ltos<br />
# declare -x discinfo=`head -1 .discinfo`<br />
# createrepo -u "media://$discinfo" -g repodata/comps.xml .<br />
生 成 ISO 文 件<br />
#mkisofs -R -J -T -r -l -d -allow-multidot -allow-leading-dots -no-bak -o /tmp/ltos-0.1-i386.iso \<br />
-b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table .<br />
Md5<br />
IT 运 维 专 家 网 ------“ 我 为 人 人 , 人 人 为 我 ! 知 识 源 于 分 享 , 源 于 交 流 !”---<strong>LinuxTone</strong> 技 术 交 流 分 享 社 区 !
IT 运 维 专 家 网<br />
http://www.linuxtone.org<br />
/usr/lib/anaconda-runtime/implantisomd5 /tmp/ltos-0.1-i386.iso<br />
相 关 脚 本 及 制 作 工 具 下 载 :<br />
http://www.linuxtone.org/project/ltos/ltospack.tar.gz // 相 关 脚 本 及 工 具 下 载 .<br />
四 . 安 装 光 盘 效 果 演 示 图<br />
启 动 安 装 光 盘<br />
Grub 界 面<br />
IT 运 维 专 家 网 ------“ 我 为 人 人 , 人 人 为 我 ! 知 识 源 于 分 享 , 源 于 交 流 !”---<strong>LinuxTone</strong> 技 术 交 流 分 享 社 区 !
IT 运 维 专 家 网<br />
http://www.linuxtone.org<br />
系 统 登 陆 界 面 演 示<br />
五 . 参 考 文 档 ( 并 对 以 下 文 章 作 者 表 示 感 谢 和 致 敬 !)<br />
1. http://lingxiang.tang.googlepages.com/createalesssizecentos5<br />
2. http://sipx-wiki.calivia.com/index.php/A_Kickstart_CD_for_sipX_on_CentOS<br />
3. http://linux.chinaunix.net/ebook/doc/2009/04/02/1095757.shtml<br />
4. http://www.ibm.com/developerworks/cn/linux/l-k26initrd/<br />
IT 运 维 专 家 网 ------“ 我 为 人 人 , 人 人 为 我 ! 知 识 源 于 分 享 , 源 于 交 流 !”---<strong>LinuxTone</strong> 技 术 交 流 分 享 社 区 !