部分定制自己的linux系统
1. 修改grub menu背景图片
Grub的背景图片主要是通过splash.xpm.gz来实现的,这个文件位于目录/boot/grub/下面。 Grub的图片格式要求:分辨率为640x480,色彩深度为14色。用convert工具可以转换图片到指定的格式。现在加入我们有一个menu.jpg格式图片:
#convert menu.jpg –geometry 640x480 -colors 14 splash.xpm /*转换图片格式*/
#gzip splash.xpm /*建立图片压缩文件,生成splash.xpm.gz*/
#cp splash.xpm.gz /boot/grub/splash.xpm.gz /*替换grub背景*/
1.1 出现问题
第一次用gif格式,第二次用jpg格式。
没有convert命令:找一个有这个命令的系统,执行命令:
#rpm -qf /usr/bin/convert 可以看到它依赖哪一个包,可以知道依赖的包是:ImageMagick这个rpm包。
我修改了spalsh.xpm.gz之后,重启系统,但是还是没有任何改变。
1.2 解决办法
用上面的办法,我们看到xpm格式文件:
#vim splash.xpm
这里面可以看到图片的格式其实不是"640 480",而是"640 400",改变方法:
#convert menu.jpg -resize 640x480! -colors 14 splash.xpm
然后再压缩,复制到/boot/grub中,重启,可以了。
1.3 图片格式
Png、jpg、jif格式的也行,但是效果不好。
640 480 14 1 不清楚
2. 修改开机界面
3. 修改安装界面中的商标
如何去掉安装过程中的CentOS字样?
在安装光盘里面有两个.buildstamp文件,一个位于stage2.img中,一个位于initrd.img中,安装光盘运行时读取的是initrd.img中的那个.buildstamp文件,所以只要把initrd.img文件中的.buikdstamp里面的centos改成你自己的就可以了。
4. 如何解压和得到initr.dimg文件
4.1 data格式
#file initrd.img
如果格式是data,此时不能通过简单的方式来解压,可以通过下面方式解压。
#mv initrd.img initrd.img.xz
#xz - - format=lzma initrd.img.xz - - decompress
#file initrd.img 这时得到的是cpio格式的
#mkdir initrd-new
#cd initrd-new
#cpio -ivdum < ../initrd.img
此时相对应的生成方式是:
#find . -print | cpio -o -H newc | xz --format=lzma > ../initrd.img
4.2 gz格式的
需要使用gunzip解压缩,然后再使用
# 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
#vim .buildstamp
仍后修改.buildstamp文件,将CentOS改为LTOS即可.
5. 安装修改
Bash:/bin/bash^M:bad interpreter:no such file or directory
这是因为windows和unix的文档格式不一样。
解决办法用:
#dos2unix filename
6. 制作ltos源文件夹
# mkdir /ltos
# mkdir /mnt/cdrom
# mount -o loop centos.xxx.iso /mnt/cdrom 将CentOS的ISO文件挂载到/mnt/cdrom目录
# cd /mnt/cdrom
# tar -cf - . | ( cd /ltos ; tar -xvpf - ) //将/mnt/cdrom里的文件利用tar全部拷贝到/ltsos这个目录下.
#cd /ltos //进入此目录删除一些无关的文件,仍后进入后面的工作.
[root@server ltos]# ls -al
total 88
drwxr-xr-x 6 root root 4096 Apr 11 21:00 .
drwxr-xr-x 27 root root 4096 Apr 12 05:26 ..
drwxr-xr-x 2 root root 36864 Apr 8 16:06 CentOS
-rw-r--r-- 1 root root 97 Apr 8 16:43 .discinfo
drwxr-xr-x 4 root root 4096 Mar 21 23:04 images
drwxr-xr-x 2 root root 4096 Apr 12 00:00 isolinux
-rw-r--r-- 1 root root 14371 Apr 11 23:16 lemp.tar.gz //这个软件包是我们后面要建立的,读者可以分析一下后面的ks.cfg脚本就可以明白他的用途.
drwxr-xr-x 2 root root 4096 Apr 11 21:00 repodata
-r--r--r-- 1 root root 7048 Mar 21 23:05 TRANS.TBL
6.1 定制package.list软件包清单
如安装一个CentOS5.3的系统,根据自己的需求选择软件包;如果想你的系统很小,建议选择最少的包。安装完成以后,在系统里会产生日志。日文文件存放在/root/install.log。
# cat install.log | grep Installing | sed 's/Installing //g'|sed 's/^[0-9]\+://g' > packages.list /*将系统已经安装的软件包的名字统计,输出到文件packages.list*/
#mkdir /ltos/Packages 建立存放rpm包的目录.
创建自动提取相关rpm脚本:
#vi cprpms.sh
#!/bin/bash
DEBUG=0
LT_CD=/mnt/cdrom
ALL_RPMS_DIR=/mnt/cdrom/Packages #挂载光盘存放的目录
LT_RPMS_DIR=/ltos/Packages #存放RPM包的目录
packages_list=/ltos/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}'`
if [ $DEBUG -eq "1" ] ; then
echo $i: $line
echo $name
fi
if [ $DEBUG -eq "1" ] ; then
ls $ALL_RPMS_DIR/$name*
if [ $? -ne 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/
# in case the copy failed
if [ $? -ne 0 ] ; then
echo "cp $ALL_RPMS_DIR/$name* "
cp $ALL_RPMS_DIR/$name* $LT_RPMS_DIR/
fi
fi
i=`expr $i + 1`
done
执行以上脚本将定制ltos必要的rpm复制到/ltos/Packages目录
返回到/ltos目录下,执行createrepo程序生成repodata下的comps.xml文件
#cd /ltos
#createrepo -g repodata/comps.xml .
6.2 kickstart文件
通常,我们在安装操作系统的过程需要大量的人机交互过程,减少交互过程,为了提高安装效率Red Hat Linux 开始支持一个称为kickstart 的功能。使用这种方法,只需事先定义好一个Kickstart自动应答配置文件(通常存放在安装服务器上),并让安装程序知道该配置文件的位置,在安装过程中安装程序就可以自己从该文件中读取安装配置,这样就避免了繁琐的人机交互,实现无人值守的自动化安装。
我们可以通过多种方法生成Kickstart配置文件,无论使用哪种方法无非就是创建一个应答文件,当你安装好一台Red Hat Linux机器,Red Hat Linux 安装程序都会创建一个 kickstart 配置文件,记录你的真实安装配置。如果你希望实现和某系统类似的安装,可以基于该系统的kickstart配置文件来生成你自己的kickstart配置文件。 该文件位于/root/anaconda-ks.cfg。
Anaconda提供两种安装方式:交互式安装和非交互式安装。其中,非交互式安装就是通过ks文件实现。
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install /*表示是安装,而不是升级 */
#text /*表示文本方式安装*/
cdrom /*安装方式,从光盘安装,如果是网络安装的话可以写成 url ––url ftp://192.168.1.254/dir 或者 nfs --server=192.168.0.2
41 --dir=/centosinstall */
lang zh_CN.UTF-8 /*安装字体*/
keyboard us /*键盘样式*/
#mouse generic3ps/2 /*指定鼠标类型*/ 这个不需要,在anaconda安装程序运行ks文件时会出错,安装退出。原因是现在的anaconda已经不能识别这条命令。
network --onboot no --device eth0 --noipv4 --noipv6
rootpw --iscrypted $6$fVIRuntynX/qOaY9$DZHI.s4nb0.ND7COs1Hx94R3z2
i7yqbMoC8FWaZkbs8WWoTVGYrSnpxNNZ9kkw4BqnBJvPfbeIXmdFI8DUS5d/
/*管理员密码,是加过密的;如果不加密可以用:rootpw 123456*/
firewall --service=ssh /*开启防火墙,并打开ssh端口 */
authconfig --enableshadow --passalgo=sha512 /*用户认证和密码加密方式*/
selinux --enforcing /*强制打开selinux*/
timezone --utc Asia/Shanghai /*设置时区*/
zerombr yes /*清空磁盘的mbr */
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 --none --drives=sda /*初始化磁盘 */
#part / --fstype=ext4 --grow --maxsize=250000 --size=200 /*分区*/
#part swap --grow --maxsize=10000 --size=200 /*交换分区*/
repo --name="Red Hat Enterprise Linux" --baseurl=cdrom:sr0 --cost=100
%packages /*定义需要安装的软件包*/
@开头的表示软件包组
- 表示不安装这个软件包
表示安装单个软件包
@additional-devel
@base
@chinese-support
@client-mgmt-tools
@console-internet
@core
@debugging
@basic-desktop
@desktop-debugging
@desktop-platform
@desktop-platform-devel
@development
@directory-client
@directory-server
@eclipse
@emacs
@ftp-server
@fonts
@general-desktop
@graphical-admin-tools
@graphics
@hardware-monitoring
@input-methods
@internet-browser
@java-platform
@kde-desktop
@large-systems
@legacy-unix
@legacy-x
@system-management-messaging-client
@mysql-client
@mysql
@nfs-file-server
@network-server
@storage-server
@network-file-system-client
@network-tools
@php
@performance
@perl-runtime
@remote-desktop-clients
@system-management-snmp
@security-tools
@server-platform
@server-platform-devel
@server-policy
@system-management
@system-admin-tools
@system-management-messaging-server
@tex
@technical-writing
@virtualization
@virtualization-client
@virtualization-platform
@virtualization-tools
@web-server
@web-servlet
@system-management-wbem
@x11
libXinerama-devel
xorg-x11-proto-devel
startup-notification-devel
libgnomeui-devel
libbonobo-devel
junit
libXau-devel
libgcrypt-devel
popt-devel
libdrm-devel
libXrandr-devel
libxslt-devel
libglade2-devel
gnutls-devel
mtools
pax
python-dmidecode
oddjob
sgpio
genisoimage
wodim
abrt-gui
qt-mysql
desktop-file-utils
ant
rpmdevtools
jpackage-utils
rpmlint
certmonger
pam_krb5
krb5-workstation
netpbm-progs
ImageMagick
tcp_wrappers
xterm
xorg-x11-xdm
libXmu
perl-DBD-MySQL
dnsmasq
radvd
ebtables
perl-DBD-SQLite
rdesktop
hmaccalc
crypto-utils
scrub
libvirt-java
certmonger
perl-CGI
tog-pegasus
%post /*后安装脚本,可以自己添加*/
id lustlost &>; /dev/null || useradd lustlost /*检查是否有lustlost用户,如果没有则添加*/
echo 123456 | passwd –stdin lustlost /*配置密码*/
cat >> /etc/yum.repos.d/base.repo << eof
[base]
name=baseserver
baseurl=http://192.168.1.254/yum
gpgcheck=0
enable=1
eof /*这里在安装系统成功后执行脚本自动配置一个yum源,其他脚本可以按照需要定义 */
%end
那这个文件有什么用呢?
这个配置文件经修改之后可以用于雷同环境下,使用Kickstart来自动安装大量同样的操作系统,可以把这个文件经修改之后放入U盘,命名为ks.cfg在装系统时,出现boot界面时就可以输入:
#ks的路径视你的U盘的为哪个盘而定
linux ks=/dev/sdb:/yourpath/ks.cfg
也可以放入nfs服务器,通过网络安装,出现boot界面时就可以输入:
linux ks=nfs:servername:/yourpath/ks.cfg
7. 得到iso文件
通过下面命令,可以生产我们的iso镜像文件。
#mkisofs -J -R -r -T -V nk_new.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -o nk_new.iso -no-emul-boot -boot-load-size 4 -boot-info-table $ISO_FILE_PATH
命令中的红色部分 nk_new.iso是你生成的iso镜像存放的路径和名字;
$ISO_FILE_PATH 指的是镜像目录,就是isolinux的上一级目录,因为现在你已经在这个目录下面,所以这个位置你可以写上 “ . ” ,表示当前目录。