编译内核,busybox,dropbear组装linux小系统


应用程序使用以下软件

 busybox提供命令环境

 dropbear提供ssh服务实现远程管理。


查看本物理机的硬件,来确认编译内核时选择相应的驱动。硬件信息获取方法:

  cat /proc/cpuinfo

  cat /proc/meminfo

  lsusb

  lspci -v

  lscpu

为目标磁盘创建文件系统,并安装grub,大概有以下步骤。

    # fdisk /dev/sdb          为目标主机的启动盘分区,分两个区,第一个用作boot,第二个用作根文件系统

    # mke2fs -t ext4 /dev/sdb1      格式化

    # mke2fs -t ext4 /dev/sdb2

    # mount /dev/sdb1 /mnt/boot

    # mount /dev/sdb2 /mnt/sysroot

    # grub-install --root-directory=/mnt /dev/sdb    安装grub程序

    # ls /mnt/boot/grub    查看如下有以下文件说明grub已经安装好了

clipboard

编译内核

    解压内核,进入解压后的内核目录

    # make allnoconfig      清除所有选项,只会保留linux内核必须的选项。

    # make menuconfig

    1,选择64位内核

clipboard[1]

    2,修改本地内核版本信息

clipboard[2]

clipboard[3]

clipboard[4]然后返回主界面

    3,开启支持动态装卸载内核模块

clipboard[5]

clipboard[6]然后返回主界面

    4,支持块层

clipboard[7]

clipboard[8]然后返回主界面

    5,选择处理器特性

clipboard[9]

clipboard[10]

clipboard[11]

    6,选择支持总线的类型

clipboard[12]由此进入

clipboard[13]

    7,让内核支持ELF类型的二进制格式和以#!开头的脚本

clipboard[14] 由此进入

clipboard[15]

    8,选择设备驱动

clipboard[16] 由此进入

clipboard[17]

clipboard[18]

clipboard[19] 选择好返回上级

clipboard[20] 选择scsi总线类型

clipboard[21]

clipboard[22]

clipboard[23] 选择usb驱动

clipboard[24]

clipboard[25]

clipboard[26]

clipboard[27] 返回上级

clipboard[28] 选择输入设备的驱动

clipboard[29]

clipboard[30]

clipboard[31] 选择并进入

clipboard[32] 返回到主页

9,选择支持的文件系统

clipboard[33]

clipboard[34]返回主菜单

10,支持挂载内核中的伪文件系统

clipboard[35]

clipboard[36]

clipboard[37]

11,启动支持tcp/ip

clipboard[38]

clipboard[39]

clipboard[40]

clipboard[41] 基于uiux socket通信的进程需要此选项。

12,选择网卡驱动

clipboard[42]

clipboard[43]

clipboard[44]

clipboard[45]

clipboard[46]虚拟机使用的是其中的一个。

13 选择完成以上选项后,保存退出。然后开始编译内核。

    # make -j 3 开始编译内核,启动三个线程编译。

clipboard[47]

    经过一段时间后编译完成。红框中的路径为编译好的内核存放的目录。

clipboard[48]

    # cp arch/x86/boot/bzImage  /mnt/boot             把编译好的内核复制到boot目录。

编译busybox

# yum -y install glibc-static    因为是静态编译,所以需要这个开发包

# yum -y install libmcrypt-devel    还需要这个包,位于epel源中。

下载busybox解压后进入目录,配置busybox的特性。这里只需要选择busybox为静态编译。

# make menuconfig    

clipboard[49]

clipboard[50]

clipboard[51] 选择此项,表示静态编译。完成后返回上级。

clipboard[52]  进入此选项

clipboard[53]     在这里设置编译安装后的busybox文件存储位置。

# make -j 3      开始编译

# make install            编译好后开始安装

# cp _install/* /mnt/sysroot      把编译好的文件复制到目标系统的根下

# ls /mnt/sysroot/             查看复制过去的文件,这里只看了bin目录。

clipboard[54]

# cp /root/busybox-1.22.1/_install/* /mnt/sysroot/ -r

 

============================================

为目标创建根文件系统。

# cd /mnt/sysroot

# mkdir -pv boot dev etc/{rc.d,sysconfig,profile.d} home/{gentoo,test,wukui,fedora}  proc root sys usr/{bin,sbin,local,lib,lib64}

# chown gentoo.gentoo home/gentoo      为每个用户设定自己家目录的属主

# chown test.test  home/test

# chown wukui.wukui home/wukui

# chown fedora.fedora home/fedora

提供配置文件

# vim /mnt/boot/grub/grub.conf      grub配置文件内容如下。

    timeout 3

    default 0

    title WuKui linux

     root (hd0,0)

     kernel /bzImage ro root=/dev/sda2

# vim /mnt/sysroot/etc/inittab                            为init提供配置文件

提供多个终端的inittab  
::sysinit:/etc/rc.d/rc.sysinit                         定义init加载后执行的脚本    
::respawn:/sbin/getty 19200 tty1              定义用户启动的终端    
::respawn:/sbin/getty 19200 tty2 
::respawn:/sbin/getty 19200 tty3 
::ctrlaltdel:/sbin/reboot                             定义按下ctrl+alt+del键后执行的命令    
::shutdown:/bin/umount -a -r                   定义关机时卸载所有文件系统。

只提供物理控制台的inittab

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

console::respawn:-/bin/sh

::ctrlaltdel:/sbin/reboot

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

# vim /mnt/sysroot/etc/fstab          fstab配置内容如下  
/dev/sda2 / ext4 defaults 0 0    
/dev/sda1 /boot ext4 defaults 0 0    
proc /proc proc defaults 0 0    
sysfs /sys sysfs defaults 0 0

# vim /mnt/sysroot/etc/rc.d/rc.sysinit          开机启动脚本文件内容如下  
#!/bin/sh    
#    
echo -e "Welcome to \033[34mWuKui\033[0m Linux"    
echo "remounting root filesystem"    
mount -n -o remount,rw /dev/sda2 /    
echo "mount all filesystem"    
mount -a    
echo "create device file"    
mdev -s

echo "set hostname is $HOSTNAME"

[ -r /etc/sysconfig/network ] &&  source /etc/sysconfig/network

[ -z "$HOSTNAME" ]  && hostname $HOSTNAME || hostname localhost

export PS1='[\u@\h \W]\$'

# vim  /mnt/sysroot/etc/passwd      添加系统用户

root:x:0:0:root:/root:/bin/sh

wukui:x:500:500::/home/wukui:/bin/sh

fedora:x:501:501::/home/fedora:/bin/sh

test:x:502:502::/home/test:/bin/sh

gentoo:x:503:503::/home/gentoo:/bin/sh

# vim /mnt/sysroot/etc/group     添加组

root:x:0:

wukui:x:500:

fedora:x:501:

test:x:502:

gentoo:x:503:

# openssl passwd -1 -salt `openssl rand -hex 4`       为用户加密密码,  
Password:                                                                     这里输入密码    
$1$fc66576e$Q/Ntg4oKYue0bZjp/uh4T0                   这里是加密后的密码

# vim /mnt/sysroot/etc/shadow                                 编辑密码文件,这里所有用户都用了一个密码

root:$1$fc66576e$Q/Ntg4oKYue0bZjp/uh4T0:16272:0:99999:7:::             

wukui:$1$fc66576e$Q/Ntg4oKYue0bZjp/uh4T0:16302:0:99999:7:::

fedora:$1$fc66576e$Q/Ntg4oKYue0bZjp/uh4T0:16302:0:99999:7:::

test:$1$fc66576e$Q/Ntg4oKYue0bZjp/uh4T0:16302:0:99999:7:::

gentoo:$1$fc66576e$Q/Ntg4oKYue0bZjp/uh4T0:0:99999:7:::

# chmod 600 /mnt/sysroot/etc/shadow

# vim /mnt/sysroot/etc/sysconfig/network   提供主机名配置文件

HOSTNAME=mylinux

========================================================

提供dropbaer

编译

# wget http://matt.ucc.asn.au/dropbear/dropbear-2014.65.tar.bz2

# ./configure --prefix=/usr/local/dropbear

# make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"

# make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install

# cd /usr/local/dropbear/

# ls bin/  
clipboard[55]

      dbclient 相当于ssh

      dropbearkey   相当于 ssh-keygen

        常用选项

            -t :指定密钥的算法有。rsa , dss(dsa)等。

            -f:指定生成文件的路径

            -s:指定密钥的长度,dss不用指定。rsa的长度是8整数倍的位数。

      scp  和 openssh 的 scp 一样。  
# ls sbin/    
clipboard[56]

    dropbear 命令是服务程序,相当于openssh 的 sshd

         常用选项

            -r keyfile : 指定key文件的位置

                  dss /etc/dropbear/dropbear_dss_host_key

                  rsa /etc/dropbear/dropbear_rsa_host_key

            -F : 运行于前台

            -E:把运行中的所有错误发送到屏幕上

            -s:设定只能使用密钥认证

            -P:指定pid文件。默认在/var/run/dropbear.pid

            -p:(小写)指定dropbear启动时监听的tcp端口。

提供密钥文件

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

# bin/dropbearkey -t rsa -s 2048 -f /etc/dropbear/dropbear_rsa_host_key

# ll /etc/dropbear/

clipboard[57]

# sbin/dropbear -p 22022 -E -F     运行于前台测试下

clipboard[58]

# ss -tnlp | grep 22022

clipboard[59]

在XSHELL中测试登陆

clipboard[60]

开始移植

# PATH=/usr/local/dropbear/bin/:/usr/local/dropbear/sbin/:$PATH

clipboard[61]

clipboard[62]

# mkdir /mnt/sysroot/etc/dropbear

# dropbearkey -t dss -f /mnt/sysroot/etc/dropbear/dropbear_dss_host_key

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

# mkdir -pv /mnt/sysroot/var/run     提供dropbear运行时的pid文件所在目录

dropbear启动时会检查/etc/shells文件中定义的安全shell,需要把busybox的ash写在里面

# cp /etc/shells /mnt/sysroot/etc

# echo /bin/ash >> /mnt/sysroot/etc/shells

提供dropbare启动时依赖的nsswitch

# cp /etc/nsswitch.conf /mnt/sysroot/etc

# cp -a -d /usr/lib64/libnsspem.so /usr/lib64/libnsssysinit.so /usr/lib64/libnssutil3.so /mnt/sysroot/usr/lib64

# cp -a -d /lib64/libnss_files* /mnt/sysroot/lib64

# cp -a -d /usr/lib64/libnss3.so  /usr/lib64/libnss_files.so /mnt/sysroot/usr/lib64

   

提供远程登陆需要的伪终端设备目录,让其开机自动挂载

# echo "devets    /dev/pts    devpts    gid=5,mode=620 0 0" >> /mnt/etc/fstab

因为内核会自动挂载/dev文件系统,所以在挂载后再创建pts。此文件系统和proc一样,都是内存中的文件系统。

# vim /mnt/sysroot/etc/rc.d/rc.sysinit    编辑加入一行

mkdir /dev/pts    必须放在mount -a之前

clipboard[63]

# vim /mnt/sysroot/etc/rc.d/rc.sysinit  加入以下行几行

/sbin/ifconfig lo 127.0.0.1 netmask 255.0.0.0

/sbin/ifconfig eth0 192.168.1.60 netmask 255.255.255.0

export PATH=/usr/local/dropbear/bin:/usr/local/dropbear/sbin:$PATH

/usr/local/dropbear/sbin/dropbear -p 22

你可能感兴趣的:(linux,软件,NetWork,应用程序)