To be a better coder
分类: 系统运维
2018-07-13 15:15:54
原文地址:基于CentOS 6.2制作自己的发行版 作者:niao5929
基于CentOS 6.2制作自己的发行版 |
时间:2013-11-20 16:39:01 来源: 作者: |
想自己做一个Linux发行版吗?很多Linuxer都有这个想法,但是完全DIY是不现实的,涉及的东西太多了。有什么办法吗?当然有,可以基于现有的开放的Linux发行版自己定制。很多的软件开发者都自己定制适合自己软件运行的个性化Linux发行版(比如用来做软件Demo,方便用户安装之类的),还是非常实用的。下面的文章是来自网络的,基于CentOS进行定制自己的ISO发行版。
说明:本文档所用方法来自网络,经过本人亲自成功实践总结,如有谬误,欢迎各位指正,定制系统过程,得到zero,逸马驰骋等众多兄弟的帮助,在此表示感谢!
一,基础环境的搭建
操作环境:
VM7.1(版本不限)+centos6.2X86_64
VM需设置2个光驱,分别挂载DVD1和DVD2
安装centos6.2X 86_64系统,所需组件自行定义,安装后得到install.log和anaconda-ks.cfg文件(在此基础上修改比较方便)
mkdir /mnt/cd{1,2} 建立光盘的挂载目录
mkdir /home/centos/Packages -p 建立定制光盘文件目录
mkdir /home/source 建立放置软件资源目录
mount /dev/cdrom /mnt/cd1 挂载DVD1
mount /dev/cdrom1 /mnt/cd2 挂载DVD2
二,ks文件的准备
ks文件由系统安装所得anaconda-ks.cfg进行修改,当然也可以用system-config-kickstart工具制作而得,此处省略ks制作方法。
# Kickstart file automatically generated by anaconda.
#Itnihao OS
#date 2012-04-24
#version=V1.0
install
text
cdrom
lang en_US.UTF-8
keyboard us
skipx
network --onboot yes --device eth0 --bootproto static --ip 192.168.16.154 --netmask 255.255.255.0 --gateway 192.168.16.1 --noipv6 --nameserver 114.114.114.114
rootpw itnihao
firewall --service=ssh --port=80:tcp
authconfig --enableshadow --passalgo=sha512
selinux --enforcing
timezone --utc Asia/Chongqing
bootloader --location=mbr --driveorder=sda --append=" rhgb crashkernel=auto 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 --none
clearpart --all --initlabel
part /boot --fstype=ext4 --size=2000
part /var --fstype=ext4 --size=80000
part swap --size=5000
part / --fstype=ext4 --grow --size=200
reboot
#repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100
%packages --nobase
@base
@chinese-support
@client-mgmt-tools
@core
@development
@legacy-unix
@network-file-system-client
@network-tools
@php
@performance
@perl-runtime
@system-management-snmp
@server-policy
@system-admin-tools
@web-server
sgpio
imake
tcp_wrappers
iptraf
php-mysql
perl-DBD-SQLite
rrdtool
crypto-utils
perl-Cache-Memcached
perl-CGI-Session
perl-CGI
lrzsz
bind
bind-chroot
bind-devel
mysql
perl-DBD-MySQL
mysql-server
mysql-devel
createrepo
python-devel
-vconfig
-rng-tools
-readahead
-prelink
-rfkill
-pinfo
-rdate
-words
-pm-utils
-pcmciautils
-usbutils
-samba-client
-nfs4-acl-tools
-nfs-utils
-cifs-utils
-webalizer
-httpd-manual
zlib-devel
openssl-devel
openssl-perl
openssl098e
%post --nochroot 此处是定义从光盘拷贝文件到安装后的系统
cp /mnt/source/Packages/conf/settings.sh /mnt/sysimage/tmp/
mv /mnt/sysimage/etc/httpd/conf/httpd.conf /mnt/sysimage/etc/httpd/conf/httpd.conf.back
mv /mnt/sysimage/etc/snmp/snmpd.conf /mnt/sysimage/etc/snmp/snmpd.conf.back
cp /mnt/source/Packages/conf/httpd.conf /mnt/sysimage/etc/httpd/conf/httpd.conf
cp /mnt/source/Packages/conf/snmpd.conf /mnt/sysimage/etc/snmp/snmpd.conf
cp /mnt/source/Packages/cacti.tar.gz /mnt/sysimage/tmp
%post 从光盘切换到新安装的系统里面,相当于chroot的功能
/tmp/settings.sh 运行自定义脚本,对新安装的系统进行设置,系统优化参数都可以写在此脚本,各位童鞋只有发挥
cd /tmp
tar zxvf cacti.tar.gz -C /var/www/html 此处是安装cacti,下面都是对cacti的安装
service mysqld restart
mysqladmin -uroot password itnihao
mysql -uroot -pitnihao -e "create database cacti;"
mysql -uroot -pitnihao -D cacti -e "source /var/www/html/cacti/cacti.sql"
mysql -uroot -pitnihao -e "grant all privileges on cacti.* to cacti@localhost identified by 'cacti';"
mysql -uroot -pitnihao -e "flush privileges;"
#mysql -ucacti -pcacti -D cacti
sed -i "s/cactiuser/cacti/g" /var/www/html/cacti/include/config.php
sed -i "s/;date.timezone/wqdate.timezone =/Asia/Chongqing/g" /etc/php.ini
chmod 777 -R /var/www/html/cacti/rra /var/www/html/cacti/log
echo "* * */2 * * /usr/sbin/ntpdate time-a.nist.gov && hwclock -w" >/tmp/crontab.tmp
crontab -uroot /tmp/crontab.tmp
/usr/sbin/eject 弹出光盘
rm /tmp/* 删除/tmp/*下文件
%end 结束
三,定制系统文件的准备
新定制系统由以上系统组件包说决定,文件由安装日志得来
awk -F "Installing" '{print $2}' ~/install.log |sed -e '/^$/d' -e 's/^ //g' >/home/source/packges.list
for packges in `cat /home/source/packges.list`
do
cp /mnt/cd1/Packages/$packges* /home/centos/Packages
[ $? != 0 ] && echo "copy $packges is faied!"&& cp /mnt/cd2/Packages/$packges* /home/centos/Packages
done
rsync -a --exclude=Packages /mnt/cd1 /home/centos 注意rsync拷贝了影藏文件
四,生成新的配置文件
rm -rf /home/centos/repodata
cd /home/centos
createrepo /home/centos/ #重新生成repodata文件
createrepo -g repodata/repomd.xml /home/centos #创建组文件,此处似乎有bug,需经过以下处理
vim repodata/repomd.xml 将goup文件重新改写
=================================================
=====================================================
/home/centos/repodata存在以下文件,没有的文件需要从光盘里面复制到此,这里要特别注意,为成功安装的关键
#ls /home/centos/repodata
207ae7829f9e94a26b62d3d2d370c39c43e020f5a56d01baff38f85c5d4323e7-primary.xml.gz
3a27232698a261aa4022fd270797a3006aa8b8a346cbd6a31fae1466c724d098-c6-x86_64-comps.xml
badeded316fc87571779d92c5cde816fdc357646b84cb191c4611e05c981ffa1-c6-x86_64-comps.xml.gz
bedb7dc8fdf920deffbdc5a70ea0d6d77255656556184f5e996e8a88a63d145c-c6-x86_64-comps.xml.gz
filelists.xml.gz
other.xml.gz
primary.xml.gz
repomd.xml
repomd.xml.gz
五,系统logo的修改
如何修改安装过程中的centos字样呢?
5.X定制使用如下方法
如何去掉安装过程中的CentOS 字样?
在安装光盘里面有两个.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 /home/centos/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 改为Itnihao 即可.
如何制作initrd.img 文件:
#假设当前目录位于准备好的initrd 文件系统的根目录下
#find . | cpio -c -o > ../initrd.img
#gzip ../initrd.img
#mv initrd.img.gz initrd.img
#rm /home/centos/isolinux/initrd.img
#cp initrd.img /home/centos/isolinux/
仍后将initrd.img 复制到/ltos/isolinux/
6.X方法如下,为这个问题,纠结了一个半小时,官方文档找到解决办法
#mkdir /tmp/initrd
#cp /mnt/cd1/isolinux/initrd.img /tmp/initrd
#cd /tmp/initrd
#xz -dc initrd.img | cpio -id 不在使用原先的gzip格式
#rm initrd.img 解压完毕,删除原先的initrd.img文件
#vim /tmp/initrd/.buildstamp 编辑此文件
201204251719.x86_64
Itnihao 修改此处,变为自己的标识符
1.0
# find . | cpio -c -o | xz -9 --format=lzma > initrd.img 重新生成img文件
xz: Adjusted LZMA1 dictionary size from 64 MiB to 26 MiB to not exceed the memory usage limit of 320 MiB 此处似乎是警告,忽略不管,对结果没有影响
#rm /home/centos/isolinux/initrd.img 删除源img文件
#cp /tmp/initrd/initrd.img /home/centos/isolinux/initrd.img 拷贝新img文件
最终,系统目录下面存在以下文件
.discinfo
EFI
EULA
GPL
images
isolinux
ItnihaoOS_BuildTag 这个可以自己修改的
Packages
repodata
TRANS.TBL
.treeinfo
多余文件可以全部删除
六,引导文件的修改
vim /home/centos/isolinux/isolinux.cfg
default auto
timeout 600
label auto
kernel vmlinuz
append ks=cdrom:/isolinux/ks.cfg initrd=initrd.img 设置ks文件位置 initrd位置
display boot.msg
七,ISO文件的生成
mkisofs -o itnihaoOS.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -T /home/centos
八.测试安装
|