Chinaunix首页 | 论坛 | 博客
  • 博客访问: 694817
  • 博文数量: 85
  • 博客积分: 1797
  • 博客等级: 上尉
  • 技术积分: 1238
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-02 08:53
个人简介

职位:技术总监 1、精通c++(linux平台、vc++Mfc、qt)、java、php、unity3d,略懂python 2、用c++开发过嵌入式产品,用c++开发过大型银行运维产品 3、用java开发大型银行运维产品,学校教务系统 4、用php开发进销存系统(在销售中),用php开发淘宝小程序 5、用unity3d开发衣柜设计软件,在运营中

文章分类

全部博文(85)

分类: LINUX

2011-08-26 23:29:02

制作自己的linux操作系统

目   录

1.1 光盘结构介绍 2

1.2 VM安装linux系统 2

1.3 生成packages.list 2

1.4 建立定制Centos的源目录 3

1.5 通过脚本复制系统安装的包; 3

1.6 检查包的依赖性 4

1.7 定制安装控制文件ks.cfg 5

1.8 修改isolinux.cfg文件 6

1.9 生成comps.xml 8

1.10 制作IOS文件 8

自动硬盘分区 8

1.11 Rpm包安装 9

1.12 在光盘中执行脚本 11

%post字段详解 11

1.13 光盘启动画面修改 12

1.14 从硬盘启动 12

1.15 更改光盘安装过程中的名字 12

1. CentOS定制

1.1 光盘结构介绍

*isolinux 目录存放光盘启动时的安装界面信息

*images 目录包括了必要的启动映像文件

*CentOS 目录存放安装软件包及信息

*.discinfo 文件是安装价质的识别信息

*lemp.tar.gz 文件存放系统初始化及其相关程序安装脚本.

环境说明:

CentOS-5.5-i386-bin-DVD.iso.

VMware 

1.2 VM安装linux系统

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

yum -y install anaconda repodata createrepo mkisofs#安装制作发行版所需的基本软件包

yum -y install anaconda-runtime createrepo yum-utils anacondaanaconda-help busybox-anaconda mkisofs

1.3 生成packages.list

生成packages.list 所安装的RPM包文件清单(由于install.log文件在root目录,所以该操作在root目录进行)

cat install.log | grep Installing | sed 's/Installing //g' > /root/packages.list #生成后,需要仔细看该文件,一般会在某些文件开始部分如“1:”这样的字符,需要删除这些字符,否在后面执行copy动作会报错,注意引项为英文版Shell

cat install.log | grep 安装 | sed 's/安装 //g' > /root/packages.list   #同上,中文版Shell

删除1:的命令:

sed  's/[0-9]\{1,\}://g'  packages.list > packagesnew.list

1.4 建立定制Centos的源目录

mkdir /disk     #定制时要复制RPM包的目录

mkdir /mnt/cdrom   #加载光驱目录

mount -o loop /dev/cdrom /mnt/cdrom     #将光盘内容加载到/mnt/cdrom

cd /mnt/cdrom/   #复制光盘内容到disk文件下,或者

tar -cf - . | ( cd /disk ; tar -xvpf - )

不能使用普通的复制,因为普通的复制不能复制隐藏文件

rm -rf /disk/CentOS/   #先删除所有RPM

mkdir /disk/CentOS/   #创建RPM包存放目录

1.5 通过脚本复制系统安装的包;

#!/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

chmod 775 copyrpms.sh

./copyrpms.sh

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

1.6 检查包的依赖性

# mkdir /tmp/testdb

# rpm --initdb --dbpath /tmp/testdb

# rpm --test --dbpath /tmp/testdb -Uvh *.rpm

1.7 定制安装控制文件ks.cfg

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

cp anaconda-ks.cfg /disk/ks.cfg

样例内容如:

# Kickstart file automatically generated by anaconda.

install

cdrom

lang en_US.UTF-8

keyboard us

network --device eth0 --bootproto dhcp

firewall --disabled

authconfig --enableshadow --enablemd5

selinux --disabled

timezone --utc Asia/Shanghai

bootloader --location=mbr --driveorder=sda

# 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 --linux --drives=sda

#part /boot --fstype ext3 --size=100 --ondisk=sda

#part pv.6 --size=0 --grow --ondisk=sda

#volgroup VolGroup00 --pesize=32768 pv.6

#logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow

#logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=1000 --grow --maxsize=4032

%packages

@mysql

@core

@base

@network-server

@web-server

%post

echo "HOSTNAME=icesoul.local" >> /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         icesoul.local" >> /etc/hosts

eject

reboot

1.8 修改isolinux.cfg文件

修改isolinux.cfg文件// /disk/isolinux/目录下的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 –

简化后:(默认字符模式启动)

default text ks=cdrom:/ks.cfg

label text

  kernel vmlinuz

  append initrd=initrd.img text 

1.9 生成comps.xml

cd /disk/

createrepo -g repodata/comps.xml /disk/

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

1.10 制作IOS文件

cd /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/

mkisofs -o /mnt/hgfs/mycentos/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文件。

自动硬盘分区

自动硬盘分区,分区策略是:30G根目录、1Gswap分区、其余为raid分区。

clearpart --linux

part / --fstype ext3 --size=30720

part swap --size=1024

part raid.3 --size=100 --grow

1.11 Rpm包安装

光盘rpm包的安装需要三个步骤:

1)拷贝rpm包到Centos目录下

2)重新生成comps.xml文件

3)配置ks.cfg文件的%packages字段

系统之外的rpm包,如mysql要放在%packages字段下,这个字段下可以填写包名字(这个报名字指的是comps.xml文件中规定的包),也可以填写rpm包。如:

%packages

@core

antlr

ccid

cdk

cdk-devel

cpp

drbd

e2fsprogs-devel

fipscheck-devel

fonts-ISO8859-2-75dpi

gcc

gcc-c++

giflib

gjdoc

glib2-devel

glibc-devel

glibc-headers

heartbeat

heartbeat-pils

heartbeat-stonith

java

java

jpackage-utils

kernel-headers

keyutils-libs-devel

kmod-drbd

krb5-devel

libgcj

libgomp

libselinux-devel

libsepol-devel

libstdc++-devel

libXmu

libXt

libXtst

lm_sensors

lua

lua-devel

make

mx

mysql

MySQL-python

mysql-server

nc

ncurses-devel

net-snmp

net-snmp-libs

ntp

openssl-devel

pcsc-lite

pcsc-lite-libs

perl-Compress-Zlib

perl-DBD-MySQL

perl-DBI

perl-HTML-Parser

perl-HTML-Tagset

perl-libwww-perl

perl-URI

perl-XML-Parser

pkgconfig

PyXML

rdesktop

rsyslog

telnet

telnet-server

vnc-server

vsftpd

xinetd

xorg-x11-fonts-base

xorg-x11-xauth

zip

zlib-devel

1.12 在光盘中执行脚本

在光盘中执行脚本,是通过将脚本放在%post字段中来执行的。具体如下:

%post --nochroot

#!/bin/sh

# Mount CDROM

mkdir -p /mnt/cdrom

mkdir /mnt/sysimage/tempdir

mount -t iso9660 /tmp/cdrom /mnt/cdrom

cp -r /mnt/cdrom/cmd.sh  /mnt/sysimage/tempdir

# Unmount CDROM

umount /mnt/cdrom

%post  --log=/root/my.log

sh   cmd.sh

%post字段详解

参数%post代表光盘安装后所要做的工作。

这里有几个关键点要注意。%post分两个阶段,这两个阶段的目录结构是不一样的

1) 两个阶段

具体使用参数nochroot来区分。我们规定,使用nochroot阶段为“阶段一”,不使用的阶段为“阶段二”

2) 光盘路径

在阶段一,光盘路径是/tmp/cdrom, 阶段二光盘路径有待确定,好像就没有光盘了。

3) 系统目录路径

阶段一,根目录不是平常的linux路径,根目录的路径是/mnt/sysimage/

阶段二,就是我们熟悉的linux路径了,根目录的路径是/

1.13 光盘启动画面修改

光盘启动文件在目录isolinux下。其中splash.lss是启动图片,lss这是一种图片格式,是一种很怪异的图片格式。它限制图片使用16种颜色,可以通过gif图片转化而来。

Giflss命令:

giftopnm< splash.gif | ppmtolss16 > splash.lss

制作高质量的16gif图片:

先用photoshop打开任何一张图片,然后在文件的下拉菜单里,保存的时候选择“保存为WEB和设备使用格式“,再然后选择gif再选择16色保存就OK

图片格式:

大小640*300, 72像素,16

1.14 从硬盘启动

isolinux/isolinux.cfg中增加:

label h

  localboot 0x80

意思是键入h,从硬盘启动

1.15 更改光盘安装过程中的名字

# cd /disk/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

#rm initrd.img

然后修改.buildstamp文件,将CentOS改为自定义名字即可

制作initrd.img文件:

# find . | cpio -c -o >../initrd.img

# gzip ../initrd.img

# cp initrd.img /ltos/isolinux/

然后将initrd.img复制到/disk/isolinux/

阅读(7624) | 评论(0) | 转发(0) |
0

上一篇:ucos任务调度调试

下一篇:uip的使用

给主人留下些什么吧!~~