您的位置:首页 > 运维架构 > Linux

部分定制自己的linux系统

2013-01-13 15:44 459 查看

部分定制自己的linux系统

分类:
UNIX 2012-08-01 10:36
316人阅读 评论(0)
收藏
举报

目录(?)[+]

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的上一级目录,因为现在你已经在这个目录下面,所以这个位置你可以写上 “ . ”,表示当前目录。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: