300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 编译内核 busybox dropbear组装linux小系统

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

时间:2018-07-28 09:51:37

相关推荐

编译内核 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已经安装好了

编译内核

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

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

# make menuconfig

1,选择64位内核

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

然后返回主界面

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

然后返回主界面

4,支持块层

然后返回主界面

5,选择处理器特性

6,选择支持总线的类型

由此进入

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

由此进入

8,选择设备驱动

由此进入

选择好返回上级

选择scsi总线类型

选择usb驱动

返回上级

选择输入设备的驱动

选择并进入

返回到主页

9,选择支持的文件系统

返回主菜单

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

11,启动支持tcp/ip

基于uiux socket通信的进程需要此选项。

12,选择网卡驱动

虚拟机使用的是其中的一个。

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

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

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

# 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

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

进入此选项

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

# make -j 3 开始编译

# make install 编译好后开始安装

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

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

# 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-.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/

dbclient 相当于ssh

dropbearkey 相当于 ssh-keygen

常用选项

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

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

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

scp 和 openssh 的 scp 一样。

# ls sbin/

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/

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

# ss -tnlp | grep 2

在XSHELL中测试登陆

开始移植

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

# 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之前

# 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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。