firstboot script 类似功能实现
博客专区 > davis_qi 的博客 > 博客详情
firstboot script 类似功能实现
davis_qi 发表于3年前
firstboot script 类似功能实现
  • 发表于 3年前
  • 阅读 101
  • 收藏 3
  • 点赞 0
  • 评论 0
摘要: 就是脚本只在启动时执行,仅仅执行一次。主要功能 fdisk /dev/vda 完成后,reboot, 起来后mkfs.ext4 /dev/vda5 和mount 简化了脚本,明天有时间看看firstboot script 的实现方式。遇到的问题是sed -i 会把softlink变成文件。 需要添加--follow-symlinks, 要慎用软链呀。
#!/bin/bash

echo "fdisk success"

-sed -i '/fdisk.sh/d'  /etc/rc.d/rc.local
+sed -i 's/fdisk.sh/reboot.sh/'  /etc/rc.d/rc.local
+ reboot

主要是格式化磁盘,写在 /etc/rc.local 删除不彻底(/etc/rc.local 是links,用sed 修改文件时 把/etc/rc.local 变成regular file)  这个回头找个时间再看看sed实现原理,运行脚本是执行完后 从rc.d/rc.local 中去掉 /opt/fdisk.sh 

#!/bin/bash

-if [ ! -f /opt/fdisk ]
-then
-  echo "fdisk not exist"
-  touch /opt/fdisk
-  echo "reboot"
-else
  -echo "fdisk is exist" 
  touch /opt/testNB
  sed -i '/reboot.sh/d'  /etc/rc.d/rc.local
-fi

这一步 先test -f /opt/fdisk 文件存在,则执行mkfs.ext4 等操作, 这个文件本身是不存在的,所以先利用这一点 创建fdisk 文件,再reboot, 启动后,会在执行这个脚本,由于文件fdisk 存在了,就开始执行下面的操作。

我是写了个/opt/testNB的文件,最后都搞定了,就需要把reboot.sh 这个脚本干掉。

[root@BJ-W-2101 opt]# cat /etc/rc.d/rc.local 
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local
/opt/fdisk.sh
-/opt/reboot.sh


下面是在开机把salt-minion id的 信息添加到/etc/salt/minion中

#!/bin/bash

if [ -z `grep "^id:" /etc/salt/minion ` ]
then
 echo "id is not found"
 ip=`cat /etc/sysconfig/network-scripts/ifcfg-eth0|awk -F"=" '/IPADDR/{print $2}'|tr -d '"'`
 echo "id: $ip" >> /etc/salt/minion
 /etc/init.d/salt-minion restart
else
 echo "id is exist in file"
fi
sed -i '/salt.sh/d'  /etc/rc.d/rc.local

格式化磁盘脚本 开机自动格式化磁盘,生成/dev/vda5 挂载到/export上

#!/bin/bash
# script name fdisk.sh
# create user: davis.ying@gmail.com
fdisk -cu /dev/vda <<ESXU
n 
e


n


w
ESXU
sed -i 's/fdisk.sh/new.sh/'  /etc/rc.d/rc.local
reboot

#!/bin/bash
# script name: new.sh
mkfs.ext4 /dev/vda5

#mount -t ext4 /dev/vda5 /export

uuid=`blkid /dev/vda5|awk -F'"' '{print $2}'`

echo "UUID=$uuid /export                 ext4    defaults      1 2" >>/etc/fstab

mount -a

sed -i '/new/d' /etc/rc.d/rc.local

[root@ export]# cat /etc/rc.local 
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local
/opt/fdisk.sh


共有 人打赏支持
粉丝 10
博文 108
码字总数 64742
×
davis_qi
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: