redhat 5 系列 diy mini linux 之二

本文接上篇,假设mini linux挂载在宿主机的/mnt/boot和/mnt/sysroot下,本文的一些脚本都是简化的,只求达到我们的目的,linux的工作流程比想象中复杂的多

现在我们有一个可用的mini linux,让我们对它进行一些扩展

  1. 重新挂载根文件系统为读写

    首先给minlinux提供个fstab配置文件,内容如下:

在rc.sysinit里面添加mount -o remount,rw /

如果此时mini linux 的etc目录下没有mstab文件,则使用 mount -o -n remount,rw /命令,否则报错

2.设定主机名

<1>移植hostname命令,并给mini linux 提供个配置文件

echo "HOSTNAME=mylinux" > /mnt/sysroot/etc/sysconfig/network

<2>在rc.sysinit中添加以下内容

echo -e "set up HOSTNAME..."

if [ -f /etc/sysconfig/network ]; then

. /etc/sysconfig/network

fi

if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ]; then

HOSTNAME=localhost

fi

hostname  $HOSTNAME

3.关机和重启

首先编辑级别服务脚本,(linux关机重启halt、reboot等命令会跳到对应启动级别去执行服务脚本)必须在对应级别下执行关机重启命令,否则无法执行成功。   这里还需要用到一个内建命令exec,bash执行某个命令的时候,会fork一个子进程去执行,使用exec命令后,直接替换父进程去执行。简单地讲,不用exec时候,halt 关机的子进程结束后,bash这个父进程不会自己结束,不能完全关机。

脚本内容如下:

[[email protected] sysroot]# cat etc/rc.d/init.d/halt

#!/bin/bash

case $0  in

*halt)

COMMAND="halt -p";;

*reboot)

COMMAND="reboot";;

*)

esac

exec $COMMAND

创建软连接:

ln /mnt/sysroot/etc/rc.d/init.d/halt   /mnt/sysroot/etc/rc0.d/K99halt  -sv

ln /mnt/sysroot/etc/rc.d/init.d/halt   /mnt/sysroot/etc/rc6.d/K99reboot  -sv

编辑etc/rc.d/下的rc和配置文件inittab

rc 内容如下:

#!/bin/bash

RUNLEVEL=$1

for i  in /etc/rc${RUNLEVEL}.d/K*

do

$i stop;

done

for i  in /etc/rc${RUNLEVEL}.d/S*

do

$i start;

done

inittab追加下面几行:

l0:0:wait:/etc/rc.d/rc 0

l3:3:wait:/etc/rc.d/rc 3

l6:6:wait:/etc/rc.d/rc 6

服务脚本和rc都要授予执行权限,到这里就可以在mini linux中使用init 0和init 6关机重启了。

4.各级别服务脚本

服务脚本格式参考linux启动流程篇。

5.启动终端

这里系统默认的mingetty不能只指定bash,它会一直调用login程序,而且也依赖/bin/sh,所以这里采用agetty替代。

移植agetty,并在inittab里面追加以下两行:

1:2345:respawn:/sbin/agetty -n -l /bin/bash 38400 tty1

2:2345:respawn:/sbin/agetty -n -l /bin/bash 38400 tty2

-n 要与-l 一起用,-n指不使用用户名登陆,-l指使用的shell 38400指的是屏幕显示速率可以用

stty -F /dev/console speed得出

6.定义function函数

这里只定义两个函数,为的是使开机流程看起来更像centos,内容如下:

success(){

STRING=$1

OK="[ \033[32m  ok \033[0m  ]"

ALL=`stty -F /dev/console size|awk ‘{print $2}‘`

SPA=$[$ALL-${#STRING}-${#OK}]

echo -n "$STRING"

for i  in `seq 1 $SPA`

do

echo  -n " "

done

echo  -e  "$OK"

}

failed(){

STRING=$1

FAILED="[\033[31m failed \033[0m]"

ALL=`stty -F /dev/console size|awk ‘{print $2}‘`

SPA=$[$ALL-${#STRING}-${#FAILED}]

echo -n "$STRING"

for i  in `seq 1 $SPA`

do

echo  -n " "

done

echo  -e  "$FAILED"

}

err_check(){

if [ $? -eq 0 ];then

success $1

else

failed $1

fi

}

修改rc.sysinit如下:

#!/bin/bash

. /etc/init.d/functions

echo "remount  /  ..."

mount -o remount,rw  /

err_check "remount  / ..."

echo -e "set up HOSTNAME..."

if [ -f /etc/sysconfig/network ]; then

. /etc/sysconfig/network

fi

if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ]; then

HOSTNAME=localhost

fi

hostname  $HOSTNAME

err_check "set up HOSTNAME..."

echo -e "Welcome to \033[31m linzb\033[0m‘s mini linux"

效果如下图:

6. 给mini linux配置网络功能

首先要装载网卡驱动模块,因为实在虚拟机操作的,网卡类型为pcnet32,pcnet32又依赖于mii模块(可以用modinfo pcnet32查看),所以要装载两个模块

编辑/mnt/sysroot/etc/sysconfig/network-scripts/ifcfg-eth0 文件内容如下:

DEVICE=eth0

BOOTPROTO=static

HWADDR=00:0C:29:5B:58:99

ONBOOT=yes

IPADDR=192.168.2.224

GATEWAY=192.168.2.1

NETMASK=255.255.255.0

编辑启动脚本/mnt/sysroot/etc/init.d/network,内容如下:

#!/bin/bash

#chkconfig:3 20 79

#description:network config

#

. /etc/init.d/functions

. /etc/sysconfig/network-scripts/ifcfg-eth0

LOCK_FILE=/var/lock/subsys/network

start(){

echo "starting  network  config ... "

touch $LOCK_FILE

insmod  /lib/modules/mii.ko

insmod  /lib/modules/pcnet32.ko

ifconfig $DEVICE $IPADDR  netmask $NETMASK up

route add default gw $GATEWAY

err_check "network starting.."

}

stop(){

echo "stopping network ...."

rm  $LOCK_FILE

modprobe -r pcnet32.ko

modprobe -r mii.ko

err_check "network stopping.."

}

status(){

if [ -f $LOCK_FILE ] ;then

echo  "network working ..."

else

echo  "network stopped.."

fi

}

case $1 in

start)

start ;;

stop)

stop ;;

restart)

stop

start;;

status)

status;;

*)

echo "Usage: $0 [start|stop|status|restart]";;

esac

chmod +x给network执行权限,并用chkconfig创建启动级别软连接(这个要chroot 到/mnt/sysroot再执行,自己手动会有错),最终效果如下:

注:

如果启动过程包device no found 看看是否有挂载网卡,这个network脚本是stop不了的,模块无法卸载会报modprobe: FATAL: Could not load /lib/modules/2.6.8.custem/modules.deb的错,具体原因有待研究

时间: 2024-08-24 12:33:08

redhat 5 系列 diy mini linux 之二的相关文章

redhat 5 系列 diy mini linux 之一

用户空间访问.监控内核的方式: /proc,/sys 伪文件系统: /proc/sys:此目录中的文件很多事可读写的 /sys/:某些文件可写 设定内核参数值得方法: echo VALUE>/proc/sys/TO/SOMEFILE sysctl -w kernel.hostname=HOSTNAME     这里的写法相当于 echo HOSTNAME > /proc/sys/kernel/hostname 永久有效:/etc/sysctl.conf 修改完立即生效: sysctl -p s

busybox diy mini linux

系统:centos 5.8 64bit 软件版本:busybox-1.21.1.tar.bz2 dropbear-2016.73.tar.bz2 参考:http://os.51cto.com/art/201403/431943.htm 1.编译 busybox-1.21.1.tar.bz2 make menuconfig (Busybox Settings-->Build Options-->Build BusyBox as a static binary (no shared libs) 选

手动制作mini linux详细步骤—之一

8.2.1.mini linux内核编译 实验目的: 对Linux内核以非模块化手动编译,并借助busybox安装根文件系统,来制作最小化的linux系统.所谓非模块化,就是将各种所需的硬件驱动.支持的文件系统等直接编译进内核,所以initramfs也就不需要了,对于网卡驱动,我们采用模块化编译,当然也可以根据自己网卡型号,直接将驱动编译进内核:最终在我们的mini linux上能通过DHCP自动获取ip并实现基于dropbear的远程终端登录. 实验环境: 操作系统:centos6.8(x86

大型网站架构系列:消息队列(二)

本文是大型网站架构系列:消息队列(二),主要分享JMS消息服务,常用消息中间件(Active MQ,Rabbit MQ,Zero MQ,Kafka).[第二篇的内容大部分为网络资源的整理和汇总,供大家学习总结使用,最后有文章来源] 本次分享大纲 消息队列概述(见第一篇:大型网站架构系列:分布式消息队列(一)) 消息队列应用场景(见第一篇:大型网站架构系列:分布式消息队列(一)) 消息中间件示例(见第一篇:大型网站架构系列:分布式消息队列(一)) JMS消息服务 常用消息队列 参考(推荐)资料 本

大型网站架构系列:消息队列(二) (转)

本文是大型网站架构系列:消息队列(二),主要分享JMS消息服务,常用消息中间件(Active MQ,Rabbit MQ,Zero MQ,Kafka).[第二篇的内容大部分为网络资源的整理和汇总,供大家学习总结使用,最后有文章来源] 本次分享大纲 消息队列概述(见第一篇:大型网站架构系列:分布式消息队列(一)) 消息队列应用场景(见第一篇:大型网站架构系列:分布式消息队列(一)) 消息中间件示例(见第一篇:大型网站架构系列:分布式消息队列(一)) JMS消息服务 常用消息队列 参考(推荐)资料 本

25.1 mini Linux制作

搭建虚拟机环境:  配置服务器:192.168.1.64 一.搭建环境 1.关闭配置服务器,添加一块硬盘,用来存放mini Linux系统(大小建议10G左右,名字为mini.vmdk),启动配置服务器. 2.安装编译环境所需的软件 [[email protected] ~]# yum groupinstall "Development Tools" "Server Platform development" -y 二.配置Mini Linux 1.基本配置 [[e

大型网站架构系列:消息队列(二)(转)

大型网站架构系列:消息队列(二) 本文是大型网站架构系列:消息队列(二),主要分享JMS消息服务,常用消息中间件(Active MQ,Rabbit MQ,Zero MQ,Kafka).[第二篇的内容大部分为网络资源的整理和汇总,供大家学习总结使用,最后有文章来源] 本次分享大纲 消息队列概述(见第一篇:大型网站架构系列:分布式消息队列(一)) 消息队列应用场景(见第一篇:大型网站架构系列:分布式消息队列(一)) 消息中间件示例(见第一篇:大型网站架构系列:分布式消息队列(一)) JMS消息服务

linux基础之Mini Linux制作

一.编译一个简单的linux步骤如下: # yum groupinstall ""Development Tools" "Server Platform Development" -y //安装开发包组 # tar xf linux-3.10.65.tar.xz //下载内核这里就不介绍了 # cd /usr/src # ln -sv linux-3.10.15 linux # cd linux # make help# make allnoconfig

攻城狮在路上(叁)Linux(二十九)--- 完整备份工具:dump以及restore

一.dump命令: 该命令既可以针对整个文件系统进行备份,也可以仅针对目录来备份.还可以指定不同的备份等级(-0~-9共10个等级). dump -W:列出在/etc/fstab中具有dump设置的分区是否备份过. 命令格式: dump [-Suvj] [-level] [-f 备份文件] 待备份数据 参数说明: -S:仅列出后面的待备份数据所需要的磁盘空间大小. -u:将这次dump的时间记录到/etc/dumpdates文件中. -v:将dump的文件过程显示出来. -j:加入bzip2的支