Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1514291
  • 博文数量: 290
  • 博客积分: 3468
  • 博客等级: 中校
  • 技术积分: 3461
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-28 22:21
文章分类

全部博文(290)

文章存档

2016年(13)

2015年(3)

2014年(42)

2013年(67)

2012年(90)

2011年(75)

分类: LINUX

2014-07-16 10:52:39

系统环境:centos 6.5 x64

虚拟机:vmwave workstatio 10.0

  

centos_6.5_x64_dvd 挂载到 /media下名为CentOS_6.5_Final, 利用虚拟机挂载。

             

Centos 6.5 光盘内容

文件/目录名

作用

CentOS_BuildTag

Centos 的编译标记

EFI   

EFI 引导的相关文件

EULA 

用户协议文件

GPL 

GPL协议文件

images 

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

isolinux

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

Packages 

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

repodata   

 

RELEASE-NOTES-en-US.html  

发行说明(英文版)

RPM-GPG-KEY-CentOS-6 

Gpg key

RPM-GPG-KEY-CentOS-Debug-6 

Gpg key

RPM-GPG-KEY-CentOS-Security-6

Gpg key

RPM-GPG-KEY-CentOS-Testing-6

Gpg key

TRANS.TBL

光盘中所有的文件类型信息说明

.discinfo 

安装介质的识别信息


1. 建立环境

# cd  //回到$HOME

# mkdir myos

# mkdir -p myos/Packages

同步光盘内的文件到 myosPackages 目录除外

# rsync av  --exclude=Packages /media/CentOS_6.5_Final myos

安装相应的工具软件

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

 

2. 获取所需的软件包

A) 将 anaconda-ks.cfg , install.log 复制到$HOME

Centos系统安装完成以后(我这里是以先安装centos(选择mini类型)的生成文件来做),在系统里会产生日志。日文文件存放在/root/install.log。会产生kickstart 安装配置文件,此配置存放在 /root/anaconda-ks.cfg

install.log 记录本系统安装了的软件包,anaconda-ks.cfg 为系统的安装配置文件。 

 

B) 根据install.log  复制出我们所需要的软件包

根据install.log 生成软件包列表文件

# cat install.log | grep Installing | sed 's/Installing //g' > packages.list

 

依据packages.list把相应的软件包从/media/CentOS_6.5_Final/Packages 复制到 ~/myos/Packages。 脚本如下:

#!/bin/bash


DEBUG=0


ALL_RPMS_DIR=/media/CentOS_6.5_Final/Packages

LT_RPMS_DIR=./myos/Packages

pkg_list=./packages.list


num_of_pkg=`cat $pkg_list | wc -l`

#echo $num_of_pkg


i=1


while [ $i -le $num_of_pkg ] ; do

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

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


if [ $DEBUG -eq "1" ] ; then

echo $i: $line

echo name:$name

fi


if [ $DEBUG -eq "1" ]; then 

ls $ALL_RPMS_DIR/$name*


if [ $? -eq 0 ] ; then 

echo "cp $ALL_RPMS_DIR/$name* "


fi

else 

echo "cp $ALL_RPMS_DIR/$name* $LT_RPMS_DIR "

cp $ALL_RPMS_DIR/$name* $LT_RPMS_DIR/ 


if [ $? -eq 0 ] ; then 

echo "cp $ALL_RPMS_DIR/$name* "

cp $ALL_RPMS_DIR/$name* $LT_RPMS_DIR/ 

fi

fi


i=`expr $i + 1`

done

 

 

C) 编写.cfg文件

anaconda-ks.cfg 复制到 ~/myos/isolinux/ks.cfg

Ks.cfg 的内容如下(.cfg 的详细语法见参考 [3])

# Kickstart file automatically generated by anaconda.


#version=DEVEL

install

#text

cdrom

#设置安装语言

#lang en_US.UTF-8

lang zh_CN.UTF-8

keyboard us

#skip the X configuration

skipx


network --onboot no --device eth0 --bootproto dhcp --noipv6

#设置root密码,此处为:centos

rootpw  --iscrypted $6$q4pbJVjqD7ZmOEEq$f7C0H8gIBf3rlKXqVn0UOVfOYqYIG8kFU2yBghH5lc0uVjmU0mFTSgHe4MwZGuXvHWZOyXxhnBoIK9yIuDBt20

firewall --service=ssh

authconfig --enableshadow --passalgo=sha512

selinux --enforcing

timezone --utc Asia/Chongqing

bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"

# 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

#volgroup VolGroup --pesize=4096 pv.008002

#logvol / --fstype=ext4 --name=lv_root --vgname=VolGroup --grow --size=1024 --maxsize=51200

#logvol swap --name=lv_swap --vgname=VolGroup --grow --size=1984 --maxsize=1984


#part /boot --fstype=ext4 --size=500

#part pv.008002 --grow --size=1


#clearpart --linux --drives=sda


#clearpart --all --initlabel


clearpart --all --drives=sda

#此处设置分区

part /boot --fstype=ext4 --size=300

part /home --fstype=ext4 --grow --size=3000

part /opt --fstype=ext4 --size=3000

part /var --fstype=ext4 --size=2000

part / --fstype=ext4 --size=8000

part swap --recommended


#repo --name="CentOS"  --baseurl=cdrom:sr0 --cost=100 #这句一定要注释掉不然会提示找不到名为CentOS 的有效的repo


#要安装的软件包开头的为group,也可写单个包名如 vim

%packages 

@core

@server-policy

@workstation-policy

%end


#%post --nochroot

#mount cdrom

#/bin/mkdir -p /mnt/cdrom

#/bin/mount -r -t iso9660 /tmp/cdrom /mnt/cdrom


#umount cdrom

#/bin/umount /mnt/cdrom


%post   #这部分是安装完系统之后执行的步骤,可自定义

/bin/echo "mount -n -o remount,ro /" >> /etc/rc.local

/bin/echo "tmpfs /tmp tmpfs defaults 0 0" >> /etc/fstab

%end



#--Reboot the host after installation is done

reboot

 

D) 修改 isolinux.cfg

修改后的如下(主要是添加蓝色部分的语句):

default auto

 

#default vesamenu.c32

#prompt 1

timeout 600

 

display boot.msg

 

menu background splash.jpg

menu title Welcome to CentOS 6.5!

menu color border 0 #ffffffff #00000000

menu color sel 7 #ffffffff #ff000000

menu color title 0 #ffffffff #00000000

menu color tabmsg 0 #ffffffff #00000000

menu color unsel 0 #ffffffff #00000000

menu color hotsel 0 #ff000000 #ffffffff

menu color hotkey 7 #ffffffff #ff000000

menu color scrollbar 0 #ffffffff #00000000

 

label auto 

  kernel vmlinuz

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

label linux

  menu label ^Install or upgrade an existing system

  menu default

  kernel vmlinuz

  append initrd=initrd.img

label vesa

  menu label Install system with ^basic video driver

  kernel vmlinuz

  append initrd=initrd.img xdriver=vesa nomodeset

label rescue

  menu label ^Rescue installed system

  kernel vmlinuz

  append initrd=initrd.img rescue

label local

  menu label Boot from ^local drive

  localboot 0xffff

label memtest86

  menu label ^Memory test

  kernel memtest

  append -

 

 

 

3. 制作 iso 文件

A) 更新 comps.xml  //如不执行此步骤会提示找不到软件包,要求插入磁盘1

# cd myos

# declare -x discinfo=`head -1 .discinfo`

# createrepo -u "media://$discinfo" -g repodata/*-comps.xml ./

Spawning worker 0 with 217 pkgs

Workers Finished

Gathering worker results

 

Saving Primary metadata

Saving file lists metadata

Saving other metadata

Generating sqlite DBs

Sqlite DBs complete

 

B) 生成制作iso

# cd myos

# mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -o ../myos-0.1-x86.iso \

-b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table ./ 

 

附录:

    一键制作脚本见 onekey 目录下的onekey.shonekey.zip

 onekey.sh

点击(此处)折叠或打开

  1. #!/bin/sh

  2. echo "install some tools ..."
  3. #yum -y install anaconda-runtime createrepo yum-utils anaconda anaconda-help busybox-anaconda mkisofs


  4. echo "set up env and copy files to myos from Centos DVD ..."
  5. MYOS_DIR=../myos-onekey
  6. DVD_DIR=../CentOS_6.5_Final/
  7. OUTPUT_ISO=${MYOS_DIR}-0.1.iso

  8. mkdir -p ${MYOS_DIR}/Packages
  9. rsync -av --exclude=Packages $DVD_DIR $MYOS_DIR

  10. if [ $? -ne 0 ] ; then
  11.     exit
  12. fi


  13. echo "get packages list ..."
  14. cat install.log | grep Installing | sed 's/Installing //g' > packages.list

  15. echo "copy packages from Centos DVD to myos ..."
  16. sh ./cprpms.sh

  17. if [ $? -ne 0 ] ; then
  18.     exit
  19. fi

  20. echo "copy isolinux.cfg and ks.cfg to myos/isolinux ..."
  21. cp -rf configs/isolinux.cfg $MYOS_DIR/isolinux
  22. cp -rf configs/ks.cfg $MYOS_DIR/isolinux

  23. if [ $? -ne 0 ] ; then
  24.     echo "copy failure, please check and try again"
  25.     exit
  26. fi


  27. echo "update *comps.xml"
  28. cd $MYOS_DIR
  29. declare -x discinfo=`head -1 .discinfo`

  30. createrepo -u "media://$discinfo" -g repodata/*-comps.xml ./

  31. echo "genrate iso ..."
  32. mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -o ${OUTPUT_ISO} \
  33. -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table ./

  34. echo "clean some files ..."
  35. rm -f packages.list


 cprpms.sh

点击(此处)折叠或打开

  1. #!/bin/bash

  2. DEBUG=0

  3. MYOS_DIR=../myos-onekey
  4. DVD_DIR=../CentOS_6.5_Final

  5. ALL_RPMS_DIR=${DVD_DIR}/Packages
  6. LT_RPMS_DIR=${MYOS_DIR}/Packages
  7. pkg_list=./packages.list

  8. num_of_pkg=`cat $pkg_list | wc -l`
  9. #echo $num_of_pkg

  10. i=1

  11. while [ $i -le $num_of_pkg ] ; do
  12.     line=`head -n $i $pkg_list | tail -n -1`
  13.     name=`echo $line | awk '{print $1}'`
  14.     ver=`echo $line | awk '{print $3}' | cut -f 2 -d:`

  15.     if [ $DEBUG -eq "1" ] ; then
  16.         echo $i: $line
  17.         echo name:$name
  18.         echo ver:$ver
  19.     fi

  20.     if [ $DEBUG -eq "1" ]; then
  21.         ls $ALL_RPMS_DIR/$name*

  22.         if [ $? -eq 0 ] ; then
  23.             echo "cp $ALL_RPMS_DIR/$name* "

  24.         fi
  25.     else
  26.         echo "cp $ALL_RPMS_DIR/$name* $LT_RPMS_DIR "
  27.         cp $ALL_RPMS_DIR/$name* $LT_RPMS_DIR/
  28.         
  29.         if [ $? -eq 0 ] ; then
  30.             echo "cp $ALL_RPMS_DIR/$name* "
  31.             cp $ALL_RPMS_DIR/$name* $LT_RPMS_DIR/
  32.         fi
  33.     fi

  34.     i=`expr $i + 1`
  35. done


 

参考链接:

[1]. 于CentOS 6.2制作自己的发行版-niao5929-ChinaUnix博客 

http://blog.chinaunix.net/uid-20104120-id-4025146.html

[2]. 定制CentOS 6.0精简的自动安装版 聆听未来 - 51CTO技术博客 

http://kerry.blog.51cto.com/172631/646549/

[3]. Anaconda/Kickstart - FedoraProject 

[4]. 独辟蹊径网络安装系列之Redhat衍生版重构初探[093月刊] - 电子杂志 技术新知 Linux时代 开源、自由、共享 中国最大的Linux技术社区 

[5]. createrepo 与 repodata 数据库 

[6]. RepoCreate - yum - Trac 

[7]. createrepo - Trac 

阅读(3222) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~