定製自己的eversecOS

來源:互聯網
上載者:User

 

定製自己的eversecOS

 

一:要求:利用CentOS-5.5-i386-bin-DVD.iso定製自己的發行版。

       效能要求:安裝過程要求能選擇安裝公司的哪些組件,哪些RPM包,並且安裝過程中,可通過特定的介面來配置公司開發軟體的設定檔。

       介面要求: 文字圖片需是公司的內容或logo。

 

二:完成的工作:

       效能部分,配置好ks.cfg後,只能在text方式下可選安裝組件與RPM包。

       介面部分,安裝完成部分CentOS的圖片不知道怎麼替換。

 

三:製作方法:

1.在製作發行版之前,需要安裝一些軟體,安裝方法如下:

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

 

2. 要想做好一個基於CentOS發行版的linux,繼續要在虛擬機器中安裝一次CentOS,安裝時,將必要的包選中,比如,base,develop-tools,text-internet等等,其他的,用不到的東西最好不要選,這樣做出來的系統,可以保證體積。

 

3. 執行完第二步後,進入第二步安裝好的系統,在根目錄下建立一些目錄,用來存放linux發行版需要的檔案,比如,我將我的系統命名為eversecOS,則,我在/目錄下建立一個eversecOS的目錄,用來存放linux發行版製作時需要的檔案。

#mkdir /eversecOS

 

4. 我們需要將CentOS的dvd光碟片掛載到linux上來,可以通過掛載光碟機,也可以通過掛載iso檔案,在掛載之前,我們先在/mnt/目錄下建立一個目錄,用來掛載。

#mkdir /mnt/cdrom
//dvd
#mount -t iso9660 -o loop /dev/cdrom /mnt/cdrom      //掛載光碟機
//iso檔案
#mount -t iso9660 -o loop /mnt/hgfs/centos_data1/CentOS-5.5-i386-bin-DVD.iso  /mnt/cdrom      

 

5. 掛載完成之後,利用tar命令將光碟機中所有的檔案複製至/eversecOS目錄:

#cd /mnt/cdrom

#tar -cf - . | ( cd /eversecOS ; tar -xvpf - )

 

6. 進入/eversecOS/CentOS 刪除全部檔案(rpm包)

# cd  /eversecOS/CentOS

#rm –f  *

 

7.進入/eversecOS ,刪除部分檔案(夾)。刪除後ls –al 只留下一下內容:

#rm XXX XXX

#ls –al

drwxr-xr-x 2 ossec ossec 155648 09-03 01:44 CentOS
-rw-r--r-- 1 root root     112 03-21 23:05 .discinfo
drwxr-xr-x 4 root root    4096 03-21 23:04 images
drwxr-xr-x 2 root root    4096 09-03 19:51 isolinux
drwxr-xr-x 2 root root    4096 09-03 19:47 repodata
-rw-r--r-- 1 root root    1318 2009-09-04 TRANS.TBL
-rw-r--r-- 1 root root     413 03-21 23:04 .treeinfo

 

8. 在CentOS系統安裝完成之後,會將所有rpm包的安裝資訊記錄在/root/目錄下的install.log檔案中,我們可以通過一些指令碼對這個檔案及/mnt/cdrom檔案的操作,將需要的rpm包複製到/eversecOS/CentOS/目錄下。

#cd /root/

//產生packages.list,以便之後複製rpm包。

#cat install.log | grep Installing | sed 's/Installing //g'|sed 's/^[0-9]\+://g' >packages.list

 

建立自動提取相關rpm指令碼:

#vi cprpms.sh

#!/bin/bash
DEBUG=0
LT_CD=/mnt/cdrom

#掛載光碟片存放的目錄
ALL_RPMS_DIR=/mnt/cdrom/CentOS

#存放RPM包的目錄
LT_RPMS_DIR=/eversecOS/CentOS
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* $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

執行以上指令碼將定製eversecOS-0-1必要的rpm複製到/eversecOS/CentOS目錄

#chmod u+x cprpms.sh

#./cprpms.sh

 

9. 這個時候,在/eversecOS/CentOS下,有上次安裝centOS的所有需要的.rpm包了。

      如果需要添加自己的.rpm包,現在需要手動添加到這個檔案夾了。例如:假若上次安裝,沒有選擇安裝ftp,而自己定製的eversecOS-0-1.iso 需要安裝vsftpd,那麼請把vsftpd-2.0.5-16.el5_4.1.i386.rpm放入/eversecOS/CentOS

 

10. 準備rpm包完成之後,返回到/eversecOS目錄下,執行createrepo程式生repodata下的comps.xml檔案

#cd /eversecOS

#createrepo -g repodata/comps.xml .  

 

11. 產生comps.xml之後,就要開始建立kickstart指令碼了,可以通過anaconda-ks.cfg來完成對kickstart指令碼的定製:

#cd ~

# cp anaconda-ks.cfg /eversecOS/isolinux/ks.cfg

 

 

用vi修改ks.cfg成如下:

#vi /eversecOS/isolinux/ks.cfg

# Kickstart file automatically generated by anaconda.

install     

text          

cdrom      

lang en_US.UTF-8         

keyboard us           

skipx               

network --device eth0 --bootproto dhcp --hostname eversecOS

#這兒密碼加密了,必須與anaconda-ks.cfg的一致

rootpw --iscrypted $1$g.aM7xrn$XviIYCTu8r51cm91dgQOG/

authconfig --enableshadow --enablemd5   

selinux --disabled                

timezone --utc Asia/Shanghai       

bootloader --location=mbr         

zerombr yes                        

mouse generic3ps/2                    

clearpart --all --initlabel 

reboot      

 

%packages

@base

@core

@dns-server

@development-libs

@development-tools

@dialup

@editors

@gnome-desktop

@games

@graphical-internet

@graphics

@office

@printing

@sound-and-video

@text-internet

@base-x

keyutils

trousers

fipscheck

device-mapper-multipath

imake

java-1.6.0-openjdk

libsane-hpaio

xorg-x11-server-Xnest

xorg-x11-server-Xvfb

vsftpd

#post後面可以安裝tar.gz 程式

%post

mkdir -p /yin/hai/long #實驗成功語句

 

mount  /dev/cdrom /mnt  #實驗失敗語句

cp /mnt/test.jpg /yin/hai/long/test.jpg #實驗失敗語句

 

12. kickstart指令碼寫完之後,需要修改linux的預設安裝方式,這裡,修改/eversecOS/isolinux/isolinux.cfg這個檔案,達到我們的目標,值得注意的是,isolinux.cfg檔案是唯讀,要想修改,需要為其賦予可寫入權限:

#chmod +w /eversecOS/isolinux/isolinux.cfg

#cd /eversecOS/isolinux/

#vi isolinux.cfg

default ks

prompt 1

timeout 600

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=cdrom:/isolinux/ks.cfg initrd=initrd.img

label local

  localboot 1

label memtest86

  kernel memtest

  append –

 

13. 修改畫面:

安裝啟動畫面用的是一種比較奇怪的格式lss16,它限制圖片使用16種顏色,除去前景和背景色只能有14種顏色。我們需要ppmtolss16 giftopnm等程式,系統一般預設都安裝了。
一般用gimp產生一個index模式的gif圖形,顏色限制為14, 然後通過如下的辦法進行轉:

 #yum -y install syslinux

先產生高品質的gif圖:
用photoshop開啟圖片,然後在檔案的下拉式功能表裡,儲存的時候選擇“儲存為WEB和裝置使用格式“,再然後選擇gif再選擇16色儲存,就得到splash.gif
仍後利用giftopnm < splash.gif | ppmtolss16 > splash.lss 轉換即可.

然後把新產生的splash.lss替換/eversecOS/isolinux裡的同名檔案。
另外修改isolinux/boot.msg檔案,做一些個人化的提示.

修改images/stage2.img 定製安裝過程圖片。

stage2.img 使用的是squashfs 檔案系統直接掛在即可

我們建立兩個目錄一個使用者掛載一個用於修改檔案

mkdir /tmp/stage{1..2}

mount -o loop -t squashfs stage2.img /tmp/stage1

拷貝檔案到stage2

cd /tmp/stage1

tar xzf - . |(cd /tmp/stage1 ; tar -xvpf -)

注意如果是直接cp

這個檔案/tmp/stage1/.buildstamp 一定要拷貝到stage2 的相關目錄去,否則

在安裝的時候會出現"no centos cd was found which matches your boot

media"

cd /tmp/stage2/usr/share/anaconda/pixmaps

更換此目錄下的圖片即可

產生新的stage2.img

cd /tmp/stage2/

mksquashfs . ../stage2.img -all-root -no-fragments

 

14. 去掉安裝過程中的CentOS字樣,用EversecOS 替代:
在安裝光碟片裡面有兩個.buildstamp檔案,一個位於stage2.img中,一個位於initrd.img中,安裝光碟片運行時讀取的是initrd.img中的那個.buildstamp檔案,所以只要把initrd.img檔案改了就可以了。

解壓initr.dimg檔案:
2.6核心中的initrd.img採用cpio壓縮,不再是2.4核心使用的ext2格式,無法使用mount -o loop 掛載。需要使用gunzip解壓縮,然後再使用
利用cpio給img解包
# cd /eversecOS/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
仍後修改.buildstamp檔案,將CentOS改為EversecOS即可.
製作initrd.img檔案:
#假設目前的目錄位於準備好的initrd檔案系統的根目錄下
# find . | cpio -c -o > ../initrd.img
# gzip ../initrd.img
# mv initrd.img.gz initrd.img
# cp initrd.img /eversecOS/isolinux/
仍後將initrd.img複製到/eversecOS/isolinux/

 

15. 如何替換安裝以後的grub ?

(1) 將備一張640 x 480 16色grub.gif圖片,檔案類型為JPG的格式
(2)convert grub.gif -colors 14 -geometry 640x480! splash.xpm && gzip -9 splash.xpm
(3) 把產生的splash.xpm.gz直接替換/boot/grup/splash.xpm.gz 檔案即可.(在安裝光碟片的ks.cfg檔案%post語句後面寫shell指令碼.)

16. 如何去掉啟動過程中的"CentOS release 5 (Final)"
在安裝光碟片裡的ks.cfg檔案裡寫好指令碼,直接替換/etc/redhat-release /etc/issue /boot/grub/grub.conf即可。

if [ -f /etc/issue ];then sed -i 's/CentOS release 5.5 (Final)/EversecOS 0.1/' /etc/issue; fi >/dev/null 2>&1

if [ -f /boot/grub/grub.conf ];then sed -i 's/CentOS/EversecOS 0.1 /' /boot/grub/grub.conf; fi >/dev/null 2>&1

echo "eversecOS 0.1" > /etc/redhat-release

 

 

17. 在完成以上工作之後,就可以使用mkisofs發布iso檔案,不能將/eversecOS這個目錄直接複製到windows用UltraISO這樣的軟體直接製作,因為這樣做出來,不能夠引導

#cd  /eversecOS

#mkisofs -R -J -T -r -l -d -allow-multidot -allow-leading-dots -no-bak -o /mnt/hgfs/centos_data1/eversecOS-0-1.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table
.

 

結束:

製作iso完成之後,即可將iso下載至windows,使用VMware安裝看看,若能夠安裝成功,則iso製作成功。

 

 

/////////////////////////////////////////////////////////////////////////////////////

 

例子:

%post --nochroot

# Mount CDROM

mkdir -p /mnt/cdrom

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

 

# Copy our file

unalias cp

 

cp -f /mnt/cdrom/splash.xpm.gz /mnt/sysimage/ > /dev/null

cp -f /mnt/cdrom/default.jpg /mnt/sysimage/ > /dev/null

#cp -f /mnt/cdrom/default.jpg / > /dev/null

cp /mnt/cdrom/splash.xpm.gz / > /dev/null

umount /mnt/cdrom

%post

if [ -f /etc/issue ];then sed -i 's/CentOS release 5.5 (Final)/EversecOS 0.1/' /etc/issue; fi >/dev/null 2>&1

if [ -f /boot/grub/grub.conf ];then sed -i 's/CentOS/EversecOS 0.1 /' /boot/grub/grub.conf; fi >/dev/null 2>&1

echo "eversecOS 0.1" > /etc/redhat-release

 

unalias cp > /dev/null

cp -f /default.jpg /usr/share/backgrounds/images/ > /dev/null

#unalias cp > /dev/null

rm -f /boot/grub/splash.xpm.gz > /dev/null

cp -f /splash.xpm.gz /boot/grub/ > /dev/null

startx > /dev/null

 

 

// 對CentOS    的修改還有: /var/log/boot.log

http://bbs.linuxtone.org/thread-2448-1-1.html     

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.