打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
纯手工打造mini linux实例

8.2.1、mini linux内核编译

实验目的:

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

实验环境:

操作系统:centos6.8(x86_64)

Linux内核版本:3.10.107

虚拟机:VirtualBox

GCC版本:4.4.7

 

1)安装前准备

官网下载内核及安装开发包组:

[root@bbs ~]# wget https://cdn.kernel.org/pub/linux/kernel/v3.x/linux-3.10.107.tar.xz

[root@bbs ~]# yum groupinstall"Development tools" "Server Platform Development" -y

[root@bbs ~]# yum install -y ncurses

[root@bbs ~]# yum install bc-y

2)解压缩

[root@bbs ~]# tar xf linux-3.10.107.tar.xz -C /usr/src

[root@bbs ~]# cd /usr/src

[root@bbs src]# ln -s linux-3.10.107.tar.xz linux

[root@bbs src]# cd linux

3)编译内核

先运行make help可以查看编译帮助,这里我们先运行make allnoconfig,对所有默认加载项全部设置为no,执行该命令后即在linux内核顶层目录下生成有.config文件。

[root@bbs linux]# make allnoconfig

[root@bbs linux]# make menuconfig

[*] 64-bit kernel                             ;64位

[*] Enableloadable module support  --->        ;支持模块装载

    [*]   Module unloading                 ;支持模块卸载

Processor type and features  --->

  [*] Symmetric multi-processing support     ;对称多处理器支持

    Processor family (Generic-x86-64) --->

      (X) Generic-x86-64                   ;处理器系列

[*] Networking support --->                  ;网络支持

     Networking options  --->

      <*> Packet socket

      [*]   IP:DHCP support      ;添加对dhcp的支持

[*]   IP: BOOTP support

[*]   Network packet filtering framework(Netfilter)  --->

      [*]   TCP/IP networking

      [*]   IP: multicasting

      [*]   IP: advanced router 

       [*]  IP: kernel level autoconfiguration

   Bus options (PCI etc.)  --->

     [*] PCI support                         ;支持PCI总线

查看主机硬盘型号,根据型号在内核设置对应的驱动:

[root@bbs ~]# lspci


   [*]Enable the block layer  --->

Device Drivers --->

   Generic DriverOptions  --->

       [*] Maintain a devtmpfs filesystem tomount at /dev

       [*] Automount devtmpfs at /dev, afterthe kernel mounted the rootfs

       上面两项在于将内核探测到的硬件信息输出至/dev目录;

   [*]  Network device support  --->      ;网络设备驱动支持

       [*]  Ethernet driver support (NEW) --->

          [*]  Intel devices

          <M>  Intel(R) PRO/1000 Gigabit Ethernet support ;编译为模块

   <*> Serial ATA and Parallel ATA drivers --->  ;支持SATA驱动

       [*]   ATA ACPI Support

         <*>   AHCI SATA support

SCSI devicesupport  --->               ;支持SCSI驱动

       -*- SCSI device support

       <*> SCSI disk support

[*] Fusion MPTdevice support  --->      ;支持SCSI驱动

       <*>   Fusion MPT ScsiHost drivers for SPI

       <*>   Fusion MPT misc device (ioctl) driver

         [*]    Fusion MPT logging facility

     Input device support  --->

          <*>  Mouse interface            ;鼠标接口

          [*]  Keyboards  --->

             <*>   AT keyboard (NEW)       ;标准键盘

          [*]  Mice  --->                 ;鼠标支持

       [*]USB support  --->

           <*>  Support for Host-side USB

           <*>   EHCI HCD (USB 2.0) support           ;USB2.0

<*>   xHCI HCD (USB 3.0) support           ;USB3.0

<*>   OHCI HCD support                   ;USB1.0

<*>   UHCIHCD (most Intel and VIA) support  ;USB1.0

Executable file formats / Emulations  --->

   [*] Kernel support for ELF binaries        ;支持Linux的ELF可执行程序

   <*> Kernel support for scriptsstarting with #! ;支持脚本程序

4)开始编译内核

[root@bbs linux]# make -j 4 bzImage

如果能成功编译,则在编译完成后,内核文件保存在:arch/x86/boot/bzImage


[root@bbs linux]# sync  

5)添加一块新硬盘并安装grub

步骤如下:

①  、先将/dev/sdb按照基本分区分为3个:boot,swap(可无需添加),/,并在上面制作对应的文件系统,比如ext4;

②  、在当前宿主机系统上的/mnt目录下创建名为boot,sysroot(该目录下还包含linux系统所需的各子目录,如:etc,bin,sbin...)的目录;

③  、挂载/dev/sdb1至宿主机的/mnt/boot目录,作为文件系统访问入口;

④  、挂载/dev/sdb2至宿主机的/mnt/sysroot目录,作为文件系统访问入口;

⑤  、在宿主机上运行如下命令:

# grub-install --root-directory=/mnt/dev/sdb,该步骤就将grub安装到了宿主机第2 块磁盘(/dev/sdb)的mbr并安装了stage1_5和stage2;

⑥  、拷贝已编译好的内核:/usr/src/linux/arch/x86/boot/bzImage至/mnt/boot/目录;

⑦  、新增文件/mnt/boot/grub/grub.conf,并添加如下内容:

   default=0

   timeout=5

   title Mini Linux

         root (hd0,0)

         kernel /bzImage ro root=/dev/sda2 init=/sbin/init

⑧  、使用bincp脚本拷贝bash程序至/mnt/sysroot/bin/目录下,bincp脚本会自动拷贝二进制文件及其所依赖的库文件到/mnt/sysroot目录;

下面为bincp.sh脚本源码:

#!/bin/sh
sysdir=/mnt/sysroot

[ -d $sysdir ] || mkdir -p $sysdir
while : 
do
  echo -n "Please enter a binary executable program[q for quit]:"
  read prog
  if [ "$prog" = "quit" ] || [ "$prog" = "q" ] ;then
    break
  fi
  if which --skip-alias "$prog" &>/dev/null; then
    if [ -f ${sysdir}$(which --skip-alias $prog) ];then
      echo "File ${sysdir}$(which $prog) exists" 
      continue 
    else
      mkdir -p $(dirname ${sysdir}$(which --skip-alias $prog)) &>/dev/null
      cp $(which --skip-alias $prog) ${sysdir}$(which --skip-alias $prog)
      ldd $(which --skip-alias $prog) | while read line
      do
        var1=${line#*=>}
var2=${var1%(*}
var3=$(echo $var2|sed -r 's/^[[:space:]]?//')
if [ -n "$var3" ] && [ ! -d $(dirname ${sysdir}$var3) ];then
 mkdir -p $(dirname ${sysdir}$var3)
fi
[ -n "$var3" ]  && cp $var3 ${sysdir}$var3
      done
    fi
  else
    echo "Wrong binary executable program"
    continue
  fi
done

为了测试我们上面安装的grub以及编译好的linux内核,再配合移植到mini linux上的bash,为了测试其能否正常工作,这里我们再手动创建一个init程序进行测试。

新增init文件在/mnt/sysroot/sbin/init:

[root@bbs sysroot]# vi /mnt/sysroot/sbin/init

#!/bin/bash

mount -n -t proc proc /proc

mount -n -t sysfs sys /sys

mount -n -t ext4 /dev/sda1 /boot

mount -n -t ext4 -o remount,rw /dev/sda2 /

[root@bbs sysroot]# chmod +x /sbin/init

上面的init脚本在linux内核完成驱动加载后即为执行第一个程序:init,该程序可为二进制格式的ELF也可为上面编写的init脚本。

⑨  在宿主机系统上测试安装在/dev/sdb磁盘上的bash是否可用,使用命令: chroot /mnt/sysroot

⑩  重启宿主机,在BIOS界面调整磁盘开机顺序:将第2块磁盘调整为第一个开机启动项即可。

在Mini Linux上启动后即可进入Bash,如果/sbin/init未能执行成功,也可手动挂载如下文件系统:

bash-4.1# mount -n -t ext4 -oremount,rw /dev/sda2 / ;重新挂载根文件系统,使其可写

bash-4.1# mount -n -t ext4 /dev/sda1/boot  ;将boot分区挂载至/boot目录

bash-4.1# mount -n -t proc proc /proc

bash-4.1# mount -n -t sysfs sys /sys

bash-4.1# cd /proc

bash-4.1# cat mounts

 

如果开机mini linux系统能进入bash提示符,则表明上面的步骤没有问题,下一步就该为mini linux系统定制根文件系统了:编译、安装busybox。

8.2.2、mini linux根文件系统:busybox编译安装

Mini Linux:kernel+busybox+dropbear

busybox提供了非常丰富的用户空间程序,可以在编译busybox时选择静态方式编译,这样就不依赖于库文件了,其通过一个静态编译的二进制程序以各种软链接(或者硬链接,脚本)的形式提供丰富多样的小程序。由于通过静态编译需要依赖于glibc-static,所以编译busybox前需要先安装此程序。

busybox编译安装步骤:

1)  下载busybox源码包:

官网地址:https://busybox.net/

busybox-1.23.0版本地址:

https://busybox.net/downloads/busybox-1.23.0.tar.bz2

2)  解压缩、编译

[root@bbs ~]# yum install glibc-static -y          ;安装依赖库

[root@bbs ~]# tar xf busybox-1.23.0.tar.bz2

[root@bbs ~]# cd busybox-1.23.0

具体编译步骤可通过查看busybox根目录下INSTALL文件查看:

[root@bbs busybox-1.23.0]# less INSTALL


从文档可以看出编译分为三步:make menuconfig, make ,make install这点与编译安装kernel比较类似。

配置选项中比较关键的一项就是确定以静态方式编译:

Busybox Settings --->BuildOptions --->[*] Build BusyBox as a static binary (no shared libs)

另外一个选项是配置安装后的程序文件存放位置:

BusyboxSettings--->Installation Options ("make install" behavior)--->(./_install) BusyBox installation prefix

从默认配置可以看出,安装完之后的程序保存在busybox顶层目录下名为_install的目录,安装完后可将该目录下生成的所有程序文件拷贝至需要的根文件系统上,如/mnt/sysroot。

另外,为了添加对dhcp客户端的支持,需要开启udhcp:

Networking Utilities --->  [*] udhcp client (udhcpc)


下面进入busybox选项配置界面:

[root@bbs busybox-1.23.2]# make menuconfig


上图是一个基于ncurses的文本配置界面,可以根据需要对busybox各选项进行配置。

最后执行编译和安装指令:

[root@bbs busybox-1.23.2]# make && make install

3)  拷贝程序至mini linux根文件系统

[root@bbs busybox-1.23.2]# mount /dev/sdb2 /mnt/sysroot

[root@bbs busybox-1.23.2]# cp -a _install/* /mnt/sysroot

[root@bbs busybox-1.23.2]# cd /mnt/sysroot

[root@bbs sysroot]# rm -f linuxrc

创建根文件系统下其它所需目录,可用如下脚本生成:

[root@bbs sysroot]# sh createDirs.sh  ;运行脚本生成根文件系统下所需其它目录

#!/bin/sh

#内核版本

kernel_vers="3.10.107"

for dir in etc/{rc.d,init.d,sysconfig/modules} home var/{log,lib,lock,run,lastlog} tmp root usr/{local,src,bin,sbin,lib,lib64,include,etc,share} bin sbin lib/modules/${kernel_vers}/kernel/drivers/net/e1000 lib64 dev/pts sys proc media mnt boot src opt

do

   if [ ! -d $dir ];then

      mkdir -pv $dir

   fi

done

touch lib/modules/${kernel_vers}/modules.dep

chmod 1777 ./tmp

最后在mini linux根文件系统上成功生成用户空间程序:

[root@bbs sysroot]# ls


测试安装之后的busybox程序是否可用:

[root@bbs sysroot]# chroot /mnt/sysroot/ /bin/ash


注意:busybox上的shell是能兼容bash的ash,如果想使用bash,则用bincp脚本拷贝至/mnt/sysroot。

4)  创建、配置mini linux文件系统上etc/inittab和etc/rc.d/rc.sysinit

根据linux系统启动流程我们知道,linux内核在内存自解压运行后读取硬件信息、加载硬件驱动、以只读方式挂载根文件系统之后就执行第一个init程序,我们这里制作的mini linux的init程序是由busybox提供,其会读取根文件系统上/etc/inittab配置文件,执行/etc/rc.d/rc.sysinit系统初始化等过程。所以我们需要手动创建文件etc/inittab和etc/rc.d/rc.sysinit用于busybox的init程序读取该配置文件,以便执行系统初始化和登录控制台等功能,另外为了实现自动挂载文件系统,我们还需要创建etc/fstab文件:

配置文件:etc/inittab

[root@bbs sysroot]# vi etc/inittab

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

tty1::respawn:/bin/sh       ;虚拟终端,ctrl+alt+F1可打开此终端

tty2::askfirst:/bin/sh        ;虚拟终端,ctrl+alt+F2可打开此终端

tty3::respawn:/bin/sh

tty4::respawn:/bin/sh

ca::ctrlaltdel:/sbin/reboot

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

系统初始化脚本:etc/rc.d/rc.sysinit

[root@bbs sysroot]# vi etc/rc.d/rc.sysinit

#!/bin/sh

#设置主机名

HOSTNAME=$(/bin/hostname)

[ -f /etc/sysconfig/network ] && . /etc/sysconfig/network

if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ];then

   echo "Seting host name to localhost..."

   hostname "localhost"

else

   echo "Seting host name to $HOSTNAME..."

   hostname $HOSTNAME

fi

#打印欢迎信息

echo -e "Welcome to \033[32mMini\033[0m Linux"

#扫描/sys目录,运行mdev用于生成/dev设备文件

echo "Scan /sysand populate /dev..."

mdev -s

#生成/dev/pts目录,用于dropbear远程登录软件所用

mkdir -pv /dev/pts

#挂载/etc/fstab中的文件系统

echo "Mountingfile system in fstab..."

mount -a

#再次以读写方式挂载根文件系统

echo "Remountingroot file system rw..."

mount -t ext4 -o remount,rw /dev/sda2 /

#开机加载/etc/sysconfig/modules/*.modules模块

for file in /etc/sysconfig/modules/*.modules ; do

   [ -x $file ] && $file

done

#手动配置固定ip及默认路由,如果有用dhcp则注释掉

#echo "CoufiguringIP address to 192.168.0.119..."

#ifconfig eth0192.168.0.119 up

#ifconfig lo 127.0.0.1up

#route add default gw 192.168.0.1

#启动dropbear

echo "Startingdropbear..."

if /usr/local/sbin/dropbear ;then

   echo -e "Dropbear started \033[32m[ OK ]\033[0m"

else

   echo -e "Dropbear started\033[31m[FAILED]\033[0m"

fi

#启动udhcpc程序

echo "Starting udhcpc..."

for ifc in $(ifconfig-a|awk '{print $1}'|egrep -o eth[0-9]+);do

   if ifconfig $ifc up ;then

#senddiscover最大发送5,若未能获得租约则立即退出

      if /sbin/udhcpc -t 5 -n -i $ifc ;then

         echo -e "Start udhcpc on $ifc \033[32m[ OK ]\033[0m"

      else

         echo -e "Start udhcpc on $ifc \033[31m[FAILED]\033[0m"

      fi

   else

      echo -e "Initialization interface $ifc \033[31m[FAILED]\033[0m"

   fi

done

ifconfig lo 127.0.0.1 up

 

注:mdev工具是busybox用于在系统启动时扫描/sys目录下文件并在/dev目录下自动创建设备文件,查看其使用说明如下截图:


[root@bbs sysroot]# vi etc/fstab

proc              /proc     proc       defaults        0 0

sysfs              /sys        sysfs       defaults        0 0

/dev/sda1     /boot     ext4       defaults        00

/dev/sda2     /             ext4       defaults        00

 

至此我们已经实现mini linux两项重要功能:kernel+busybox,下面就可以创建一个新的虚拟机,添加一块我们安装有kernel+grub+busybox的硬盘,随后即可开机启动,下面是开机后的画面:


8.2.3、编译mini linux网卡驱动模块

对于网卡驱动,我们是通过在内核中设置为模块形式来动态加载,所以需要再次针对单个内核模块进行编译,编译单个内核模块使用如下命令:

# cd /usr/src/linux

# make M=drivers/net/ethernet/intel/e1000/ e1000.ko

具体操作步骤:

[root@bbs ~]# cd /usr/src/linux         ;进入linux内核顶层目录

[root@bbs linux]# find . -name e1000    ;查找e1000目录在内核源码哪个目录下

./drivers/net/ethernet/intel/e1000

[root@bbs linux]# make M=drivers/net/ethernet/intel/e1000 e1000.ko ;编译e1000.ko

[root@bbs linux]# cp drivers/net/ethernet/intel/e1000/e1000.ko /mnt/sysroot/lib/modules/3.10.107/kernel/drivers/net/e1000

注意:mini linux中的路径:/lib/modules/3.10.107/kernel/drivers/net/e1000为目录生成脚本根据mini linux的内核版本自动创建的,必须要与内核版本一致。

至此,已经将网卡驱动模块加入到mini linux中了,下一步就是开机进入mini linux系统,执行模块加载命令:modprobe e1000:

/ #  ls /lib/modules/$(uname -r) ;查看模块相依性文件是否存在

kernel    modules.dep      modules.dep.bb

/ #  depmod -a        ;生成模块相依性文件

/ #  modprobe e1000   ;加载网卡驱动

/ #  lsmod            ;查看系统上已加载的所有驱动模块

/ #  modinfo e1000     ;查看网卡驱动信息

filename:             e1000


设置网卡驱动开机自动挂载:

/ #  vi /etc/sysconfig/modules/e1000.modules

#!/bin/sh

echo “Loading network card drivers e1000…”

modprobe e1000

/ #   chmod +x /etc/sysconfig/modules/e1000.modules

设置mini linux 的网卡IP地址:

/ #  ifconfig -a


/ #  ifconfig eth0 192.168.0.119 up

/ #  ifconfig lo 127.0.0.1 up

/ #  ifconfig

/ # ping -c2 192.168.0.1



8.2.4、创建mini linux密码文件和用户登录终端

一些基本概念

控制台:

在Linux系统中,计算机显示器通常被称为控制台(Console)。有一些设备特殊文件与之相关联:tty0、tty1、tty2等。当你在控制台上登录时,使用的是tty1。使用Ctrl+Alt+[F2-F6]组合键时,我们就可以切换到tty2、tty3等上面去。

getty:

busybox为我们提供了getty和login程序,getty用于侦听终端,其调用login程序提示让用户登录,在centos6上的终端登录程序是mingetty和login,centos7上为agetty和login。如下,我们可以在/etc/inittab中写明终端:

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

tty1::respawn:/bin/sh       ;虚拟终端,ctrl+alt+F1可打开此终端

tty2::askfirst:/bin/sh        ;虚拟终端,ctrl+alt+F2可打开此终端

tty3::respawn:/bin/sh

tty4::respawn:/bin/sh

为了能够登录mini linux系统,我们还需要在mini linux上提供/etc/{passwd,group,shadow}3个文件,login 登录程序正是通过查询/etc/passwd文件来确认是否允许登录的。

 

进入mini linux,创建密码文件:

/ #  touch /etc/passwd /etc/group /etc/shadow /etc/issue

/ #  chmod 000 /etc/shadow

/ #   echo -e -n "Welcome to Mini Linux\nkernel \\\r\n" > /etc/issue

为mini linux创建root组和root用户:

/ #  addgroup -g 0 root     ;为mini linux创建root组

/ #  adduser -h /root -s /bin/bash -u 0 -G root root   ;为mini linux 创建root 账号

 

注意:这里我们修改root的默认shell为bash,所以需要确保之前有通过bincp脚本拷贝bash到mini linux。

修改mini linux上的/etc/inittab:

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

::respawn:/sbin/getty 38400 tty1       ;虚拟登录终端,ctrl+alt+F1可打开此终端

::respawn:/sbin/getty 38400 tty2       ;虚拟登录终端,ctrl+alt+F2可打开此终端

::respawn:/sbin/getty 38400 tty3

::respawn:/sbin/getty 38400 tty4

ca::ctrlaltdel:/sbin/reboot

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

重启mini linux即可进入登录界面:


至此,在mini linux控制台就实现了账号登录功能。

8.2.5、下载安装 dropbear

Dropbear是一个相对较小的SSH服务器和客户端。它运行在一个基于POSIX的各种平台,Dropbear是开源软件。

官网地址:

https://matt.ucc.asn.au/dropbear/dropbear.html

最新版下载地址:

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

官网下载下来的是源码包,需要编译安装:

打开宿主机centos,并挂载/dev/sdb2至/mnt/sysroot目录:

[root@bbs ~]# tar xf dropbear-2017.75.tar.bz2

[root@bbs ~]# cd dropbear-2017.75

dropbear默认安装在/usr/local目录下,另外需要注意,我们的mini linux系统上并没有安装pam模块,所以在编译dropbear时不要添加--enable-pam选项。

[root@bbs dropbear-2017.75]# ./configure

执行上面步骤后,dropbear在最后有输出提示信息:

configure: Now edit options.h tochoose features.

options里面有对dropbear配置文件的定义:


下一步执行make:

[root@bbs dropbear-2017.75]# make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"

最后执行make install,使dropbear安装在宿主机上,以便后面我们通过bincp脚本拷贝需要的程序到mini linux的根文件系统:/mnt/sysroot。

[root@bbs dropbear-2017.75]# make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install

[root@bbs bin]# sh bincp.sh

[root@bbs ~]# sh bincp.sh 

Please enter a binary executable program[q for quit]:dropbear

Please enter a binary executable program[q for quit]:dropbearkey

Please enter a binary executable program[q for quit]:dbclient

Please enter a binary executable program[q for quit]:scp

使用bincp脚本将dropbear,dropbearkey,dbclient三个程序拷贝至mini linux根文件系统上。

[root@bbs ~]# tree /mnt/sysroot/usr/local/

/mnt/sysroot/usr/local/

├── bin

│   ├── dbclient

│   └── dropbearkey

└── sbin

└── dropbear

 

8.2.6、配置 dropbear

[root@bbs ~]# cd /mnt/sysroot/

[root@bbs sysroot]# ls dev/

pts                         ;确保dev目录下已有pts目录

再次编辑mini linux根文件系统上的/etc/fstab文件,添加devpts伪文件系统:

[root@bbs sysroot]# vi etc/fstab

proc              /proc     proc       defaults        0 0

sysfs              /sys        sysfs       defaults        0 0

devpts          /dev/pts      devpts   mode=620   0 0

/dev/sda1     /boot     ext4       defaults        00

/dev/sda2     /             ext4       defaults        00

创建dropbear目录:

[root@bbs sysroot]# mkdir etc/dropbear

生成dropbear密钥:

[root@bbs sysroot]# cd etc/dropbear

[root@bbs sysroot]# dropbearkey -h      ;获取dropbearkey帮助信息


[root@bbs dropbear]# dropbearkey -t rsa -s 2048 -f dropbear_rsa_host_key

[root@bbs dropbear]# dropbearkey -t dss -f dropbear_dss_host_key

[root@bbs dropbear]# ls -l

total 8

-rw------- 1 root root 457 Sep  1 11:04 dropbear_dss_host_key

-rw------- 1 root root 805 Sep  1 11:03 dropbear_rsa_host_key

 

在mini linux系统上创建安全shells:

[root@bbs sysroot]# vi etc/shells

/bin/sh

/bin/ash

/bin/bash

/bin/hush

/sbin/nologin

 

安装、配置nsswitch.conf配置文件:

[root@bbssysroot]#vi etc/nsswitch.conf

passwd: files

group: files

shadow: files

hosts: files dns

 

拷贝nsswitch.conf所需的库文件:

[root@bbssysroot]#cp -d /lib64/libnss_files* lib64/

[root@bbssysroot]#cp -d /usr/lib64/libnss3.so usr/lib64

[root@bbssysroot]#cp -d /usr/lib64/libnssutil3.so usr/lib64

[root@bbssysroot]#cp -d /usr/lib64/libnss_files* usr/lib64/

[root@bbssysroot]#cp -d /lib64/libnss_dns* lib64/  ;支持域名解析库

[root@bbssysroot]#cp -d /lib64/libresolv* lib64/    ;支持域名解析库

[root@bbssysroot]#vi etc/profile

[ $UID -eq 0 ] && export PATH=/sbin:/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

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

至此,dropbear相关配置已经完成,下面即可启动mini linux系统了,在mini linux系统上可前台启动dropbear,查看输出的log信息:

[root@mini ~]# dropbear -E -F

更为详细的dropbear用法如下:

[root@mini ~]# dropbear -h

Dropbear server v2017.75https://matt.ucc.asn.au/dropbear/dropbear.html

Usage: dropbear [options]

-b bannerfile       Displaythe contents of bannerfile before user login

              (default:none)

-r keyfile Specify hostkeys (repeatable)

              defaults:

              dss/etc/dropbear/dropbear_dss_host_key

              rsa/etc/dropbear/dropbear_rsa_host_key

              ecdsa/etc/dropbear/dropbear_ecdsa_host_key

-R           Createhostkeys as required

-F           Don'tfork into background

-E           Logto stderr rather than syslog

-m          Don'tdisplay the motd on login

-w          Disallowroot logins

-s           Disablepassword logins

-g           Disablepassword logins for root

-B           Allowblank password logins

-j            Disablelocal port forwarding

-k           Disableremote port forwarding

-a           Allowconnections to forwarded ports from any host

-p [address:]port

              Listenon specified tcp port (and optionally address),

              upto 10 can be specified

              (defaultport is 22 if none specified)

-P PidFile      Createpid file PidFile

              (default/var/run/dropbear.pid)

-i            Startfor inetd

-W <receive_window_buffer> (default 24576,larger may be faster, max 1MB)

-K <keepalive> (0 is never, default 0, in seconds)

-I <idle_timeout>  (0 is never, default 0, in seconds)

-V    Version

 

要想让mini linux开机启动dropbear,可以加入/etc/rc.d/rc.sysinit

if /usr/local/sbin/dropbear ; then

   echo -e "Dropbearstarted \033[32m[ OK ]\033[0m"

else

   echo -e "Dropbearstarted \[033[31m[ failed ]\033[0m"

fi

8.2.7、为mini linux提供域名解析支持

最后,为了将mini linux支持域名解析,我们需要继续在mini linux系统上做如下工作:

1、创建/etc/resolv.conf

该文件是DNS域名解析的配置文件,它的配置很简单,每行以一个关键字开头,后接配置参数。resolv.conf的关键字主要有四个:

nameserver  #定义DNS服务器的IP地址
domain     #定义本地域名
search      #定义域名的搜索列表
sortlist      #对返回的域名进行排序

resolv.conf文件中,nameserver关键字必须存在,它用于指定DNS服务器,其它关键字可选。

2、  创建/etc/hosts

hosts是一个没有扩展名的系统文件,其作用就是将主机名映射到对应的ip地址。当用户执行一条ping命令时(如ping www.baidu.com),系统会首先自动从hosts文件中寻找www.baidu.com对应的ip地址,一旦找到,系统会立即对相应的ip执行ping命令,否则系统将域名提交DNS域名解析服务器进行ip地址的解析。

#cat /etc/hosts
127.0.0.1  localhost:localdomain  localhost

192.168.0.119 your.host.name

3、创建/etc/host.conf

当系统中同时存在DNS域名解析与/etc/hosts主机表时,host.conf用于确定主机名解析顺序。它每行含一个配置关键字,其后跟着合适的配置信息。系统识别的关键字有:order、trim、multi、nospoof和reorder。

#cat /etc/host.conf
order hosts,bind  #名称解析顺序
multi on  #允许主机拥有多个IP地址
nospoof on  #禁止IP地址欺骗

4、拷贝必要的库文件并设置默认路由

[root@bbssysroot]#cp -d /lib64/libnss_dns* lib64/  ;支持域名解析库

[root@bbssysroot]#cp -d /lib64/libresolv* lib64/    ;支持域名解析库

[root@bbssysroot]# routeadd default gw 192.168.0.1  ;添加默认路由

[root@mini~]# ping-c2 www.baidu.com

PING www.baidu.com (183.232.231.172): 56 data bytes

64 bytes from 183.232.231.172: seq=0 ttl=53time=26.925 ms

64 bytes from 183.232.231.172: seq=1 ttl=53time=19.069 ms

8.2.8、配置udhcpc以自动获取ip

busybox是支持客户端和服务器端dhcp的,程序分别为udhcpc和udhcpd,需要在编译时选定相关模块,另外在编译内核时需选定对DHCP的支持:

编译内核时,添加Linux内核对DHCP的支持:

[*] Networking support --->     ;网络支持

     Networking options  --->

      <*> Packet socket

      [*]   IP:DHCP support      ;添加对dhcp的支持

[*]   IP: BOOTP support

[*]   Network packet filtering framework(Netfilter)  --->

编译busybox时添加busybox对udhcpc支持

NetworkingUtilities  --->

[*]udhcp client (udhcpc)

[*]udhcp server (udhcpd)

 

进入busybox源码顶层目录,将examples/udhcp下的simple.script文件拷贝至mini linux系统的/usr/share/udhcpc下,并重命名为default.script,注意要有可执行权限:chmod +x usr/share/udhcpc/default.script,关于这点可通过udhcpc -h获取帮助信息。


最后在mini linux系统上执行如下命令:

[root@mini ~]# udhcpc -t 5 -n -i eth0

注:-t选项指明udhcpc的send discover最大发送次数,-n选项表示达到最大send discover次数仍未获得租约则立即退出。

 

至此一个较为完善的mini linux系统已经成功制作完毕!

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
[转]利用BusyBox ~私人定制 My LINUX~ - 姜名则
自制简单的Linux
尝试构建自己的busybox
手把手带你自制Linux系统之六 编译内核及busybox完成系统定制
ZYNQ启动流程分析及各环节文件生成流程
使用 linux kernel +busybox 定制linux系统
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服