2023年12月8日发(作者:)

制作自己的Linux发行版

1、 安装linux系统(如CentOS),安装完后在/root/下有、、文件

2、 在某目录下(如:/root/zhenglei/)创建目录(如:isotest)存放linux发行版所需文件

#cd /root/zhenglei/

#mkdir isotest

3、 挂载iso文件到linux上。挂载前,先在/mnt/下创建cdrom目录,用来挂载

#mkdir /mnt/cdrom/

#mount –t iso9660 –o loop /xxx/ /mnt/cdrom/

此处的xxx是文件所在的绝对路径

4、 利用tar命令将iso文件中的所有文件复制到/root/zhenglei/isotest/下

#cd /mnt/cdrom/

#tar -cf - . | ( cd /root/zhenglei/isotest/ ; tar –xvpf - )

挂载完成后,进入/root/zhenglei/isotest/下,ls –al查看一下:

[root@cluster2 isotest]# ls -al

total 152

dr-xr-xr-x. 9 root root 4096 Sep 23 08:50 .

drwxr-xr-x. 5 root root 4096 Sep 24 09:58 ..

dr-xr-xr-x. 2 root root 4096 Sep 22 11:30 [BOOT]

-r--r--r--. 1 root root 14 Sep 22 11:29 CentOS_BuildTag

-r--r--r--. 1 root root 33 Sep 22 11:29 .discinfo

dr-xr-xr-x. 3 root root 4096 Sep 22 11:29 EFI

-r--r--r--. 1 root root 212 Sep 22 11:29 EULA

-r--r--r--. 1 root root 18009 Sep 22 11:29 GPL

-r--r--r--. 1 root root 9591 Sep 23 08:48 icfs_ks_auto_

dr-xr-xr-x. 3 root root 4096 Sep 22 11:29 images

dr-xr-xr-x. 2 root root 4096 Sep 22 15:19 isolinux

dr-xr-xr-x. 2 root root 49152 Sep 23 08:47 Packages

-r--r--r--. 1 root root 1354 Sep 22 11:30

dr-xr-xr-x. 3 root root 4096 Sep 23 08:50 repodata

-r--r--r--. 1 root root 1706 Sep 22 11:30 RPM-GPG-KEY-CentOS-6

-r--r--r--. 1 root root 1730 Sep 22 11:30 RPM-GPG-KEY-CentOS-Debug-6

-r--r--r--. 1 root root 1730 Sep 22 11:30 RPM-GPG-KEY-CentOS-Security-6

-r--r--r--. 1 root root 1734 Sep 22 11:30 RPM-GPG-KEY-CentOS-Testing-6

dr-xr-xr-x. 6 root root 4096 Sep 22 11:29 .svn

-r--r--r--. 1 root root 4052 Sep 23 08:50

-r--r--r--. 1 root root 276 Sep 22 11:29 .treeinfo

用命令rm删除不必要的文件,删除Packages文件夹下所有内容,保留Packages目录,再ls –al查看一下:

[root@cluster2 isotest]# ls -al

total 40

dr-xr-xr-x. 7 root root 4096 Sep 24 10:23 . drwxr-xr-x. 5 root root 4096 Sep 24 09:58 ..

-r--r--r--. 1 root root 33 Sep 22 11:29 .discinfo

dr-xr-xr-x. 3 root root 4096 Sep 22 11:29 images

dr-xr-xr-x. 2 root root 4096 Sep 22 15:19 isolinux

drwxr-xr-x. 2 root root 4096 Sep 24 10:23 Packages

dr-xr-xr-x. 3 root root 4096 Sep 23 08:50 repodata

-r--r--r--. 1 root root 4052 Sep 23 08:50

-r--r--r--. 1 root root 276 Sep 22 11:29 .treeinfo

文件看起来就舒服多了。

5、 复制所需rpm包到packages文件夹中。在CentOS系统安装完成后,会将所有rpm包的安装信息记录在/root/文件中,我们可以将这个文件输出为自己想要的格式,再通过脚本,将所需rpm包复制到/root/zhenglei/isotest/Packages/下。

#cd /root/

//生成,以便之后复制rpm包

#cat | grep Installing | sed 's/Installing //g' | sed 's/^[0-9]+://g' >

//创建自动提取相关rpm脚本

#vim

DEBUG=0

LT_CD=/mnt/cdrom

ALL_RPMS_DIR=/mnt/cdrom/Packages #挂载iso存放的目录

LT_RPMS_DIR=/root/zhenglei/isotest/Packages #存放rpm包的目录

packages_list=/root/

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* $LT_RPMS_DIR/"

cp $ALL_RPMS_DIR/$name-$version* $LT_RPMS_DIR/ # in case the copy failed

if [ $? -ne 0 ] ; then

echo "cp $ALL_RPMS_DIR/$name-$version* "

cp $ALL_RPMS_DIR/$name* $LT_RPMS_DIR/

fi

fi

i=`expr $i + 1`

done

执行脚本将所需的rpm包复制到/root/zhenglei/isotest/Packages/下。

#sh //若无法执行,使用chmod +x 为该脚本添加执行权限。

进入到/root/zhenglei/isotest/Packages/下,ls查看一下:(rpm包太多,仅列出几个)

[root@inspur isotest]# ls /root/zhenglei/isotest/Packages/

6.x86_

6.x86_

6.x86_ 6.x86_

6、 进入/root/zhenglei/isotest/下,执行createrepo程序生成repodata目录下相对应的压缩文件

#cd /root/zhenglei/isotest/

#createrepo -g repodata/*minimal*.xml . //此处的*minimal*.xml为repodata目录下的一个文件,参考自己repodata目录来写。

若出现createrepo命令找不到,则需安装相应软件,用CentOS的yum来安装即可

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

busybox-anaconda mkisofs

7、 创建kickstart脚本,通过来完成对kickstart脚本的定制

#cd //进入/root/下

#cp zhenglei/isotest/isolinux/ //将复制到/root/zhenglei/isotest/isolinux/下,并将其改名为,用vi命令按需修改文件。修改完文件后,需修改linux的默认安装方式,即修改/root/zhenglei/isotest/isolinux/文件,这个文件是只读的,想要修改,需要为其赋予可写权限:

#chmod +w /root/zhenglei/isotest/isolinux/

#cd /root/zhenglei/isotest/isolinux/

#vi

default ks

#prompt 1

timeout 600

display

label linux menu label ^Install or upgrade an existing system

kernel vmlinuz

append initrd=

label vesa

menu label Install system with ^basic video driver

kernel vmlinuz

append initrd= xdriver=vesa nomodeset

label rescue

menu label ^Rescue installed system

kernel vmlinuz

append initrd= rescue

label ks

kernel vmlinuz

append ks=cdrom:/isolinux/ initrd=

label local

menu label Boot from ^local drive

localboot 0xffff

label memtest86

menu label ^Memory test

kernel memtest

append –

8、 进入/root/zhenglei/isotest/下,用mkisofs发布iso文件。新建一个release文件夹来存放发布的iso文件

#cd /root/zhenglei/isotest/

#mkdir release

#mkisofs -R -J -T -r -l -d -allow-multidot -allow-leading-dots -no-bak -o

/root/zhenglei/isotest/release/ -b isolinux/ -c isolinux/

-no-emul-boot -boot-load-size 4 -boot-info-table .

若出现genisoimage: Error: ./repodata/xxx-xxx-minimal-x86_

and ./repodata/xxx-minimal-x86_ have the same Joliet name错误,则需在repodata下用rm命令删掉命名较短的那个文件(即rm –rf

xxx-minimal-x86_或者在-allow-multidot前添加-joliet-long)

完成后再/root/release/下就会有制作的文件了。

9、 在/root/zhenglei/isotest/release/下用sz命令拷贝文件到windows上,若使用VMware安装成功,则说明iso制作成功。

安装过程可能会出现提示需要一些包的依赖包,只需将这些依赖包添到Packages目录下,修改文件把新填包的名字加进去即可。

温馨提示:可以将制作iso的上述步骤写成一个脚本,这样就避免了每次制作iso时都进行重复的操作。

小技巧:

在CentOS系统安装完成之后,会将所有rpm包的安装信息记录在/root/目录下的文件中,我们可以将这个文件输出为我们想要的格式,在通过一些脚本,将需要的rpm包复制到/rice/CentOS/目录下。

#cd /root/

#cat | grep Installing | sed 's/Installing //g'|sed 's/^[0-9]+://g' >

//生成,以便之后复制rpm包。

创建自动提取相关rpm脚本:

#vi

#!/bin/bash

DEBUG=0

LT_CD=/mnt/cdrom

ALL_RPMS_DIR=/mnt/cdrom/CentOS #挂载光盘存放的目录

LT_RPMS_DIR=/rice/CentOS #存放RPM包的目录

packages_list=/root/

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* $LT_RPMS_DIR/"

cp $ALL_RPMS_DIR/$name-$version* $LT_RPMS_DIR/

# in case the copy failed

if [ $? -ne 0 ] ; then

echo "cp $ALL_RPMS_DIR/$name-$version* "

cp $ALL_RPMS_DIR/$name* $LT_RPMS_DIR/

fi

fi

i=`expr $i + 1`

done

执行以上脚本将定制ltos必要的rpm复制到/rice/CentOS目录

#./ //若无法执行,使用chmod +x 为该脚本添加执行权限。

复制rpm包完成。