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)

选上这个静态编译,去掉Build with Large File Support (for accessing files > 2 GB)

make && make  install

2.制作initrd文件

mkdir initrd

cp busybox-1.21.1/_install/*   initrd/  -rp

cd initrd/

mkdir -pv  proc  sys  etc/init.d  tmp  dev  mnt/sysroot

mknod  dev/console  c  5  1

mknod  dev/null  c  1  3

rm linuxrc

编辑init文件:

[[email protected] initrd]# cat > init << EOF

> #!/bin/sh

> mount -t proc proc /proc

> mount -t sysfs sysfs /sys

> insmod /lib/modules/jbd.ko

> insmod /lib/modules/ext3.ko

> insmod /lib/modules/scsi_mod.ko

> insmod /lib/modules/sd_mod.ko

> insmod /lib/modules/scsi_transport_spi.ko

> insmod /lib/modules/mptbase.ko

> insmod /lib/modules/mptscsih.ko

> insmod /lib/modules/mptspi.ko

> mdev -s

> mount -t ext3 /dev/sda2  /mnt/sysroot

> exec  switch_root  /mnt/sysroot  /sbin/init

> EOF

chmod  +x  init

这里因为没有把ext3编译进内核,所以需要挂载ext3模块,而ext3依赖于jbd模块,所以需要先加载jbd.ko,具体可以通过modinfo  ext3查看,

因为我在虚拟机用的是scsi硬盘,所以还要加载scsi驱动,scsi_mod.ko、sd_mod.ko等就是对应模块,模块要事先拷贝到对应路径,过程如下:

mkdir lib/modules -pv

modinfo  ext3

cp /lib/modules/2.6.18-308.el5/kernel/fs/ext3/ext3.ko lib/modules

cp /lib/modules/2.6.18-308.el5/kernel/fs/jbd/jbd.ko lib/modules/

cp /lib/modules/2.6.18-308.el5/kernel/drivers/scsi/scsi_mod.ko  lib/modules/

cp /lib/modules/2.6.18-308.el5/kernel/drivers/scsi/sd_mod.ko  lib/modules/

cp /lib/modules/2.6.18-308.el5/kernel/drivers/scsi/scsi_transport_spi.ko  lib/modules/

cp /lib/modules/2.6.18-308.el5/kernel/drivers/message/fusion/mptbase.ko  lib/modules/

cp /lib/modules/2.6.18-308.el5/kernel/drivers/message/fusion/mptscsih.ko  lib/modules/

cp /lib/modules/2.6.18-308.el5/kernel/drivers/message/fusion/mptspi.ko  lib/modules/

find  .  | cpio  --quiet  -H newc  -o  | gzip  -9 -n > /mnt/boot/initrd.gz

内核编译比较繁琐,下次有时间另起一篇

3.建立根文件系统

cp  busybox-1.21.1/_install/*  /mnt/sysroot/ -rp

cd  /mnt/sysroot

mkdir -pv  proc  sys  etc/rc.d/init.d  tmp  dev/pts  boot  var/log  usr/lib

mknod  dev/console  c  5  1

mknod  dev/null  c  1  3

mkdir  lib/modules -pv

cp  /lib/modules/2.6.18-308.el5/kernel/drivers/net/pcnet32.ko  lib/modules/

cp  /lib/modules/2.6.18-308.el5/kernel/drivers/net/mii.ko  lib/modules/

4.提供初始化脚本:

cat >etc/rc.d/rc.sysinit <<EOF

> echo -e "\tWelcome to  \033[31mlinzb‘s\033[0m Linux"

> echo -e "Remounting the root filesystem ..."

> mount -t proc proc /proc

> mount -t sysfs sysfs /sys

> mount -o  remount,rw  /

>

> echo -e "Creating the files of device ..."

> mdev -s

>

> echo -e "Mounting the filesystem ..."

> mount -a

> swapon -a

>

> echo -e "Starting the log daemon ..."

> syslogd

> klogd

>

> echo -e "Configuring loopback interface ..."

> insmod /lib/modules/mii.ko

> insmod /lib/modules/pcnet32.ko

> ifconfig  lo  127.0.0.1

> ifconfig eth0 192.168.2.227

> EOF

chmod +x etc/rc.d/rc.sysinit

rm  -f  linuxrc

5.提供inittab和fstab

[[email protected] sysroot]# cat  > etc/inittab <<EOF

> ::sysinit:/etc/rc.d/rc.sysinit

> console::respawn:-/bin/sh

> ::ctrlaltdel:/sbin/reboot

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

> EOF

[[email protected] sysroot]# vi etc/fstab

sysfs                   /sys                    sysfs   defaults        0 0

proc                    /proc                   proc    defaults        0 0

/dev/sda1               /boot                   ext3    defaults        0 0

/dev/sda2               /                       ext3    defaults        1 1

注意:用scsi硬盘做实验的时候就算你挂载的是sdb,minilinux识别的时候也是sda,这个是自己试验的结论,

大家可以多试一下。

6、由于在rc.sysinit文件中启动了日志进程,因此系统在运行中会产生大量日志并将其显示于控制台;这将会

经常性的打断正在进行的工作,为了避免这种情况,我们这里为日志进程建立配置文件,为其指定将日志发送

至/var/log/messages文件;

# vim  etc/syslog.conf

添加如下一行:

*.info    /var/log/messages

7.安装grub

grub-install --root-directory=/mnt/  /dev/sdb

注意:这里的sdb是mini linux所在的硬盘

8.提供grub.conf  和内核

[[email protected] sysroot]# vim  /mnt/boot/grub/grub.conf

default        0

timeout        1

color    light-green/black light-magenta/black

title    my mini Linux

root (hd0,0)

kernel /vmlinuz ro root=/dev/sda2 quiet

initrd /initrd.gz

cp  /boot/vmlinuz-2.6.18-308.el5   /mnt/boot/vmlinuz

######################################################

9.为新构建的miniLinux启用虚拟控制台

这个可以通过宿主机来实现,也可以直接启动刚构建成功的小Linux进行配置。我们这里采用通过宿主机的方式(重新启动宿主机):

# cd /mnt/sysroot

将 etc/inittab文件改为如下内容:

::sysinit:/etc/init.d/rc.sysinit

tty1::askfirst:/bin/sh

tty2::askfirst:/bin/sh

tty3::askfirst:/bin/sh

tty4::askfirst:/bin/sh

tty5::askfirst:/bin/sh

tty6::askfirst:/bin/sh

::ctrlaltdel:/sbin/reboot

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

10.为mini linux 创建登陆用户

[[email protected] sysroot]# vi  etc/passwd

内容为: root:x:0:0:root:/root:/bin/sh   (这里要修改shell,因为busybox没有bash,或者给sh创建个软连接为bash)

[[email protected] sysroot]# vi  etc/shadow

内容为: root:$1$gm6zfnou$Zpndu0pK3qCsiTHAM8kJP.:16909:0:99999:7::: (这里可以根据自己需要手动生成)

[[email protected] sysroot]# vi  etc/group

内容为: root:x:0:root

将 etc/inittab文件改为如下内容:

::sysinit:/etc/init.d/rc.sysinit     (这里记得先把rc.d  ln -s 到init.d)

tty1::respawn:/sbin/getty 9600 tty1

tty2::respawn:/sbin/getty 9600 tty2

tty3::respawn:/sbin/getty 9600 tty3

tty4::respawn:/sbin/getty 9600 tty4

tty5::respawn:/sbin/getty 9600 tty5

tty6::respawn:/sbin/getty 9600 tty6

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

::ctrlaltdel:/sbin/reboot

11.通过dropbear为系统提供ssh远程连接服务

<1>编译安装dropbear

tar xf dropbear-2016.73.tar.bz2

cd dropbear-2016.73

./configure

make

make install

<2>移植dropbear

which  dropbear  查找到命令所在位置

ldd dropbear查看命令依赖的庫,并cp可执行程序和库到目标对应目录中

可以自己写个脚本cp比较方便,内容如下:(仅供参考)

#!/bin/bash

#

function cp_command(){

COMMAND=`which $1|grep  -v "^alias\>"`

LIB=`ldd  $COMMAND |cut  -d ‘(‘ -f1 |grep -o  "\/.*\/.*so.*"`

ROOTDIR=/mnt/sysroot

for  i  in  $LIB

do

[ ! -e $ROOTDIR${i%/*} ]&& mkdir -p $ROOTDIR/${i%/*}

cp  $i $ROOTDIR${i%/*} -f &&  echo "cp $i success"||echo -e "\033[31mfailed cp !\033[0m"

done

[ ! -e $ROOTDIR${COMMAND%/*} ]&& mkdir -p $ROOTDIR/${COMMAND%/*}

cp  $COMMAND  $ROOTDIR${COMMAND%/*} -f && echo "cp $COMMAND success"||echo -e "\033[31mfailed cp !\033[0m"

}

while : ; do

read -p " please input a command (q means  quit) : " a

[ $a == "q" ]&& exit 0

which $a  && cp_command  $a ||echo "Usage: `basename $0` CMD ; q means quit"

done

需要拷贝dropbear、dropbearkey和dbclient三个命令

<3>为远程登录的用户提供伪终端设备文件

编辑/mnt/sysroot/etc/fstab,添加如下一行:

devpts/dev/ptsdevptsmode=6200 0

<4>为目标系统的dropbear生成主机密钥

默认情况下,dropbear到/etc/dropbear目录中查找使用的rsa格式主机密钥(默认名称为dropbear_rsa_host_key)和dss格式的主机密钥(默认名称为dropbear_dss_host_key)。其中,rsa格式可使用不同长度的密钥,但dss格式只使用1024位的密钥。

mkdir /mnt/sysroot/etc/dropbear

dropbearkey -t rsa -f /mnt/sysroot/etc/dropbear/dropbear_rsa_host_key -s 2048

dropbearkey -t rsa -f /mnt/sysroot/etc/dropbear/dropbear_dss_host_key

在生成rsa格式的key时,其长度指定部分-s 2048可以省略,也可以为其指定为其它长度,但长度需要为8的整数倍。

说明:此步骤也可以在目标主机上进行,但路径要做相应的修改。

<5>定义安全shell

安全起见,dropbear默认情况下仅允许其默认shell出现在/etc/shells文件中的用户远程登录,因此,这里还需要创建/etc/shells文件,并添加所有允许的shell。

# cat >> /mnt/sysroot/etc/shells << EOF

/bin/sh

/bin/ash

/bin/hush

/bin/bash

EOF

<6>为目标主机提供网络服务转换机制

在宿主机上使用默认选项编译的dropbear将依赖nsswitch实现用户名称解析,因此,还需要为目标主机提供nss相关的库文件及配置文件。

cat >> /mnt/sysroot/etc/nsswitch.conf << EOF

passwd:     files

shadow:     files

group:      files

hosts:      files dns

EOF

复制所需要的库文件:

cp -d /lib/libnss_files*  /mnt/sysroot/lib/

cp -d /usr/lib/libnss3.so /usr/lib/libnss_files.so /mnt/sysroot/usr/lib/

7、测试

启动目标主机,设定好网络属性后,使用如下命令启动dropbear服务即可。

# /usr/local/sbin/dropbear

debug:

busybox编译:

报错:miscutils/ubi_tools.c:67:26: error: mtd/ubi-user.h: No such file or directory

这是一个Linux下新支持的UBI文件系统,需要手工加入。从Linux内核源码包的include\mtd\ubi-user.h拷贝到busybox下的include\mtd下,

如果 busybox下的include没有mtd文件夹,那就先建立一个mtd文件夹,然后复制

dropbear可以到登陆界面,但是连不上,查看messages日志,报错:Login attempt for nonexistent user from 192.168.2.106:50307

解决方法:搞定了,复制库复制错了,因为我的系统是64位,所以拷贝nsswitch库的时候应该是:

cp  -d  /lib64/libnss_*    /mnt/sysroot/lib64/

cp  -d  /usr/lib64/libnss3.so   /mnt/sysroot/usr/lib64/

时间: 2024-12-08 09:16:37

busybox 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

redhat 5 系列 diy mini linux 之二

本文接上篇,假设mini linux挂载在宿主机的/mnt/boot和/mnt/sysroot下,本文的一些脚本都是简化的,只求达到我们的目的,linux的工作流程比想象中复杂的多 现在我们有一个可用的mini linux,让我们对它进行一些扩展 重新挂载根文件系统为读写 首先给minlinux提供个fstab配置文件,内容如下: 在rc.sysinit里面添加mount -o remount,rw / 如果此时mini linux 的etc目录下没有mstab文件,则使用 mount -o -

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

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

Mini linux

mini linux 启动流程: POST自检->BootSequence(BIOS)-->BootLoader-->Kernel(ramdisk)-->rootfs根文件系统->/sbin/init(centos7变成systemd) bootloader:lilo;grub legacy;grub2(stage1:mbr;stage1_5:filesystem driver;state2) 编写服务脚本 upstart配置文件(centos7变成systemd unit文

构建一个mini linux系统

mini linux: 启动流程: centos6:post>bootsequence(bios)>BootLoader(mbr)>kernel(如无法直接识别硬盘驱动,需借助ramdisk)>rootfs>/sbin/init centos7:post>bootsequence(bios)>BootLoader(mbr)>kernel(如无法直接识别硬盘驱动,需借助ramfs)>rootfs>/sbin/systemd bootloader:l

制作busybox完成自制Linux系统及远程登录和nginx安装测试

前言系统定制在前面的博文中我们就有谈到过了,不过那个裁减制作有简单了点,只是能让系统跑起来而,没有太多的功能,也没的用户登录入口,而这里我们将详细和深入的来谈谈Linux系统的详细定制过程和实现用户例如.远程登录和Nginx安装过程.一步一步从头开始定制属于我们自己的系统. 正文首先我们先来简单的介绍一下我们这里定制属于自己的Linux系统的基本元素,其中一些相关的信息也可以参考我前面写过的博文 一个定制的linux内核+一个定制的busybox就可以定制一个小型的Linux操作系统了,安装Dr

mini Linux制作过程(25/01)

Mini Linux: 启动流程: CentOS 6: POST --> BootSequence(BIOS) --> BootLoader --> Kernel (ramdisk) --> rootfs --> /sbin/init 编写服务脚本 upstart配置文件 /etc/init/*.conf(centos6)   /etc/inittab(centos5) 默认运行级别 运行系统初始化脚本:/etc/rc.d/rc.sysinit /etc/rc.d/rc $r

从无到有构建一个Mini Linux(7)

31.编译安装dropbear 32.创建远程登录时,用到的目录 33.为目标系统生成密钥文件 34.设置安全的shells 35.开启网络服务转换功能 36.复制相应的库文件,路径要对应,没有则创建之 37.测试 31.编译安装dropbear Dropbear是一个相对较小的SSH服务器和客户端 [[email protected] ~]# tar xf dropbear-2016.73.tar.bz2 [[email protected] ~]# cd dropbear-2016.73 [

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