打造自己的centos/linux发行版,基于centos 6.5制作自己的发行版

系统环境: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

同步光盘内的文件到 myos,Packages目录除外

# 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.sh

onekey.sh

点击(此处)折叠或打开

#!/bin/sh

echo "install some tools ..."

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

echo "set up env and copy files to myos from Centos DVD ..."

MYOS_DIR=../myos-onekey

DVD_DIR=../CentOS_6.5_Final/

OUTPUT_ISO=${MYOS_DIR}-0.1.iso

mkdir -p ${MYOS_DIR}/Packages

rsync -av --exclude=Packages $DVD_DIR $MYOS_DIR

if [ $? -ne 0 ] ; then

exit

fi

echo "get packages list ..."

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

echo "copy packages from Centos DVD to myos ..."

sh ./cprpms.sh

if [ $? -ne 0 ] ; then

exit

fi

echo "copy isolinux.cfg and ks.cfg to myos/isolinux ..."

cp -rf configs/isolinux.cfg $MYOS_DIR/isolinux

cp -rf configs/ks.cfg $MYOS_DIR/isolinux

if [ $? -ne 0 ] ; then

echo "copy failure, please check and try again"

exit

fi

echo "update *comps.xml"

cd $MYOS_DIR

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

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

echo "genrate iso ..."

mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -o ${OUTPUT_ISO} \

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

echo "clean some files ..."

rm -f packages.list

cprpms.sh

点击(此处)折叠或打开

#!/bin/bash

DEBUG=0

MYOS_DIR=../myos-onekey

DVD_DIR=../CentOS_6.5_Final

ALL_RPMS_DIR=${DVD_DIR}/Packages

LT_RPMS_DIR=${MYOS_DIR}/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}'`

ver=`echo $line | awk '{print $3}' | cut -f 2 -d:`

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

echo $i: $line

echo name:$name

echo ver:$ver

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

参考链接:

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

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

[3]. Anaconda/Kickstart - FedoraProject

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

[5]. createrepo 与repodata数据库

[6]. RepoCreate - yum - Trac

[7]. createrepo - Trac

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值