设为首页 收藏本站
查看: 1705|回复: 0

[经验分享] redhat 5 系列 diy mini linux 之二

[复制链接]

尚未签到

发表于 2018-5-10 09:01:02 | 显示全部楼层 |阅读模式
  本文接上篇,假设mini linux挂载在宿主机的/mnt/boot和/mnt/sysroot下,本文的一些脚本都是简化的,只求达到我们的目的,linux的工作流程比想象中复杂的多
  

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

  •   重新挂载根文件系统为读写
      首先给minlinux提供个fstab配置文件,内容如下:
    DSC0000.png

  在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这个父进程不会自己结束,不能完全关机。
  脚本内容如下:

[root@test 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"
  

  效果如下图:
DSC0001.png

  

  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再执行,自己手动会有错),最终效果如下:
DSC0002.png

  注:
  如果启动过程包device no found 看看是否有挂载网卡,这个network脚本是stop不了的,模块无法卸载会报modprobe: FATAL: Could not load /lib/modules/2.6.8.custem/modules.deb的错,把modprobe -r改成rmmod命令后成功解决

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-457892-1-1.html 上篇帖子: Redhat6.X 配置HP3PAR7200存储多路径过程 下篇帖子: Domino 9 Language Pack install fails on RedHat 6 64-bit
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表