天天看點

打造自己的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 CD光牒内容

檔案/目錄名

作用

CentOS_BuildTag

Centos 的編譯标記

EFI

EFI 引導的相關檔案

EULA

使用者協定檔案

GPL

GPL協定檔案

images

目錄包括了必要的啟動映像檔案

isolinux

目錄存放CD光牒啟動時的安裝界面資訊

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

CD光牒中所有的檔案類型資訊說明

.discinfo

安裝媒體的識别資訊

1. 建立環境

# cd  //回到$HOME

# mkdir myos

# mkdir -p myos/Packages

同步CD光牒内的檔案到 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