busybox编译安装和pxe无盘系统

简介

    BusyBox 不多解释了

    网上有大量教程来讲解busybox的安装和使用,要么有的太深奥,要么有的古老,参照网上的教程来做,总是编译不成功,或是安装失败,本人是做运维工作的,有些代码层次的东西,没必要了解的太深奥。所以借鉴了一些大牛的文章,和自己的亲手实验,成功的完成了物理机通过pxe启动(网络启动)进入自己定制的无盘环境中,在这个环境下可以做很多事情,例如排查硬件故障,拷贝数据,安装系统等

大家按照我的步骤来,只会成功,不会失败。我写的这篇文章,简单明了,如果想深入了解,请自行在网上查询

安装环境和测试环境

centos7.4、 VMware Workstation 14 Pro

安装过程

1、安装必要的软件

yum -y install gcc glibc-static ncurses-devel libgcrypt-devel zlib-devel

2、下载busybox安装包

mkdir /tmp/box && cd /tmp/box

wget https://busybox.net/downloads/busybox-1.27.2.tar.bz2

3、解压-配置-安装

tar -jxvf busybox-1.27.2.tar.bz2 && cd busybox-1.27.2/

make menuconfig

以下一项要选择上,其它默认即可

    *  Build BusyBox as a static binary (no shared libs)

make && make install

4、创建pxe系统的必要文件

1)创建系统必须的文件,并把busybox拷过来

mkdir -p /tmp/myOS/rootfs  && cd /tmp/myOS/rootfs

mkdir etc usr var tmp proc home root dev lib lib64 sys

mkdir /tmp/myOS/rootfs/dev/shm

mkdir /tmp/myOS/rootfs/dev/pts

mkdir /tmp/myOS/rootfs/var/run

mkdir /tmp/myOS/rootfs/usr/lib64

cp -R /dev/{console,null,zero,raw,tty0,tty1,tty2,fb0,tty} /tmp/myOS/rootfs/dev/

cd /tmp/myOS/rootfs/dev/

mknod ram1 b 1 1

mknod ram0 b 1 0

mknod raw1 c 162 1

mknod hda b 3 0

mknod fd0 b 2 0

mknod loop0 b 7 0

mknod loop1 b 7 1

cp -R /tmp/box/busybox-1.27.2/_install/* /tmp/myOS/rootfs/

cp -R /tmp/box/busybox-1.27.2/examples/bootfloppy/etc/* /tmp/myOS/rootfs/etc

cp -R /etc/ld.so.conf* /tmp/myOS/rootfs/etc/

cp /etc/nsswitch.conf /tmp/myOS/rootfs/etc/

cp /etc/shells /tmp/myOS/rootfs/etc/

2)创建busybox开机启动脚本和登录脚本

rm -f /tmp/myOS/rootfs/etc/bashrc

rm -f /tmp/myOS/rootfs/etc/profile

cp /etc/bashrc /tmp/myOS/rootfs/etc/

cp /etc/profile /tmp/myOS/rootfs/etc/

cp /root/.bash_profile /tmp/myOS/rootfs/root/

cp /root/.bashrc /tmp/myOS/rootfs/root/

3)创建dhcpc服务需要的文件

mkdir -p /tmp/myOS/rootfs/usr/share/udhcpc/

cp /tmp/box/busybox-1.27.2/examples/udhcp/simple.script /tmp/myOS/rootfs/usr/share/udhcpc/default.script

chmod 775 /tmp/myOS/rootfs/usr/share/udhcpc/default.script

4)添加驱动

cp -R /lib/modules /tmp/myOS/rootfs/lib/

cp -R /lib/firmware/ /tmp/myOS/rootfs/lib/

cp -d /lib64/libnss* /tmp/myOS/rootfs/lib64/

cp -d /usr/lib64/libnss* /tmp/myOS/rootfs/usr/lib64/

5、添加额外的工具

使用脚本添加bash、curl、lspci、ldconfig等必要工具,脚本内容如下

[root@test01 rootfs]# cat /tmp/a.sh

#!/bin/bash

DEST_PATH=/tmp/myOS/rootfs

acp() {

        CPATH=`echo $1 | grep -o "/.*/"`

        [ ! -d $DEST_PATH$CPATH ] && mkdir -p $DEST_PATH$CPATH

        [ ! -e $DEST_PATH$1 ] && cp $1 $DEST_PATH$CPATH

}

bin_cp() {

        for i in `ldd $1 | grep -o "/[^[:space:]]*"`;

                do acp $i

        done

        echo "lib copy complete"

        acp $1 && echo "bin $1 copy complete"

}

read -p "please input your commad: " CMD

until [ $CMD == 'q' ] ;do

        ! which $CMD && read -p "commad err,please input again" CMD && continue

        BIN_COMMAND=`which $CMD | grep -v "^alias" | grep -o "/.*"`

        bin_cp $BIN_COMMAND

        read -p "please input your commad" CMD

done

添加完脚本之后,需要将busybox的bash替换掉

cd /tmp/myOS/rootfs/bin

rm -f sh && cp ../usr/bin/bash bash && cp -s bash sh

cd /tmp/myOS/rootfs/usr/bin && cp -s ../../bin/busybox hostname

cd /tmp/myOS/rootfs

mv linuxrc init

6、修改必要的配置文件

[root@test01 rootfs]# cat /tmp/myOS/rootfs/etc/fstab

tmpfs                   /dev/shm                tmpfs   defaults        0 0

devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

sysfs                   /sys                    sysfs   defaults        0 0

proc                    /proc                   proc    defaults        0 0

[root@test01 etc]# cat /tmp/myOS/rootfs/etc/init.d/rcS

#! /bin/sh

/bin/mount -a

/bin/sh /etc/boot.sh

[root@test01 rootfs]# cat /tmp/myOS/rootfs/etc/boot.sh

#!/bin/sh

function get_mod_name()

{

  for mod_num in $(lspci -nn |egrep -o '\[.........\]' |tr -d '[|]' |sed s/:/.*/g)

  do

    grep -i "$mod_num" /lib/modules/$(uname -r)/modules.alias |awk '{print $NF}'

  done

  return 0

}

function insert_mod_name()

{

  for mod_name in $(echo "$(get_mod_name)"|sort -u)

  do

    echo "modprobe $mod_name"

    modprobe $mod_name

    sleep 1

  done

  return 0

}

function insert_other_mod()

{

  echo "modprobe sd_mod"

  modprobe sd_mod

  sleep 1

  return 0

}

function set_hostname()

{

  hostname PXE

  return 0

}

function set_net()

{

  udhcpc eth0

  sleep 3

  return 0

}

function set_dropbear()

{

  mkdir /etc/dropbear

  /usr/bin/dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key

  /usr/bin/dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key

  /usr/bin/dropbearkey -t ecdsa -f /etc/dropbear/dropbear_ecdsa_host_key

  #/usr/bin/dropbear

  return 0

}

function set_mdev()

{

  echo /sbin/mdev > /proc/sys/kernel/hotplug

  mdev -s

  ldconfig

  return 0

}

function main()

{

  insert_mod_name

  insert_other_mod

  set_hostname

  set_mdev

  set_net

  set_dropbear

  return 0

}

#------------------

main

[root@test01 etc]# cat /tmp/myOS/rootfs/etc/inittab

::sysinit:/etc/init.d/rcS

tty1::respawn:/root/autologin.sh tty1

tty2::askfirst:-/bin/sh

::ctrlaltdel:/sbin/reboot

::shutdown:/bin/umount -a -r

[root@test01 rootfs]# cat /tmp/myOS/rootfs/root/autologin.sh

#!/bin/sh

/bin/login -f root

[root@test01 rootfs]# chmod 775 /tmp/myOS/rootfs/root/autologin.sh

[root@test01 rootfs]# cat /tmp/myOS/rootfs/etc/ld.so.conf

include ld.so.conf.d/*.conf

/lib

/lib64

/usr/lib

/usr/lib64

[root@test01 rootfs]# cat /tmp/myOS/rootfs/etc/passwd

root:x:0:0:root:/root:/bin/bash

[root@test rootfs]# cat /tmp/myOS/rootfs/etc/group

root:x:0:

[root@test rootfs]# cat /tmp/myOS/rootfs/etc/shadow

root:UO4IOJCCO.E6.:17538:0:99999:7:::

[root@test01 rootfs]# cat /tmp/myOS/rootfs/root/.bashrc

# .bashrc

# User specific aliases and functions

alias rm='rm -i'

alias cp='cp -i'

alias mv='mv -i'

alias ll='ls -l'

alias vim='vi'

# Source global definitions

if [ -f /etc/bashrc ]; then

    . /etc/bashrc

fi

export PATH=$PATH:$HOME:/sbin

#exportPS1="[$USER@\h \W]\\$ "

/bin/sh /root/login.sh

[root@test01 rootfs]# cat /tmp/myOS/rootfs/root/login.sh

#!/bin/sh

echo "start login.sh.........."

[root@test01 rootfs]# chmod 775 /tmp/myOS/rootfs/root/login.sh

7、向busybox里安装dropbear

mkdir /tmp/dropbear && cd /tmp/dropbear

wget https://matt.ucc.asn.au/dropbear/releases/dropbear-2017.75.tar.bz2

tar -jxvf dropbear-2017.75.tar.bz2 &&cd dropbear-2017.75/

./configure --prefix=/tmp/myOS/rootfs/usr

make && make install

将dropbear的依赖拷贝过去,还要执行a.sh脚本

bash a.sh /tmp/myOS/rootfs/usr/sbin/dropbear

8、打包成initrd.img

cd /tmp/myOS/rootfs

find . | cpio -c -o | xz -9 --format=lzma > /var/www/html/tftpboot/initrd.img

cp /boot/vmlinuz-3.10.0-693.el7.x86_64 /var/www/html/tftpboot/vmlinuz

[root@test01 ~]# cat /var/www/html/tftpboot/pxelinux.cfg/default

default vesamenu.c32

#default 1

#prompt 1

timeout 100

#display boot.msg

menu background splash.jpg

menu title Welcome to OS INSTALL!

menu color border 0 #ffffffff #00000000

menu color sel 7 #ffffffff #ff000000

menu color title 0 #ffffffff #00000000

menu color tabmsg 0 #ffffffff #00000000

menu color unsel 0 #ffffffff #00000000

menu color hotsel 0 #ff000000 #ffffffff

menu color hotkey 7 #ffffffff #ff000000

menu color scrollbar 0 #ffffffff #00000000

label 0

  menu label Boot from ^local drive

  localboot 0xffff

label 1

  menu label Auto Install

  menu default

  kernel http://10.0.0.50/tftpboot/vmlinuz

  append initrd=http://10.0.0.50/tftpboot/initrd.img

  ipappend 1

9、验证成功


ssh登录


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容