簡介
BusyBox 不多解釋了,網(wǎng)上有大量教程來講解busybox的安裝和使用,要么有的太深奧,要么有的古老,參照網(wǎng)上的教程來做,總是編譯不成功,或是安裝失敗。所以借鑒了一些大牛的文章,和自己的親手實驗,成功的完成了物理機通過pxe啟動(網(wǎng)絡(luò)啟動)進入自己定制的無盤環(huán)境中,在這個環(huán)境下可以做很多事情,例如排查硬件故障,拷貝數(shù)據(jù),安裝系統(tǒng)等
大家按照我的步驟來,基本上都能成功。我寫的這篇文章,簡單明了,如果想深入了解,請自行在網(wǎng)上查詢相關(guān)知識
安裝環(huán)境和測試環(huán)境
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
以下一項要選擇上,其它默認即可
- [ x ] Build BusyBox as a static binary (no shared libs)
make && make install
4、創(chuàng)建pxe系統(tǒng)的必要文件
1)創(chuàng)建系統(tǒng)必須的文件,并把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)創(chuàng)建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)創(chuàng)建dhcpc服務(wù)需要的文件
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)添加驅(qū)動
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等必要工具,腳本內(nèi)容如下
[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的依賴拷貝過去,還要執(zhí)行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 登錄
