应用程序使用以下软件

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

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 22022 -E -F     运行于前台测试下

# ss -tnlp | grep 22022

在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

转载于:https://blog.51cto.com/wukui/1544090

编译内核,busybox,dropbear组装linux小系统相关推荐

  1. 编译内核+busybox+dropbear,ssh登录

    以下是学习过程记录: 学习环境使用VMware虚拟机,宿主机使用centos6.10,内核源码linux-3.0.1,busybox-1.22.0,dropbear-2020.81. 1.目标硬盘分区 ...

  2. 基于busybox的Linux小系统制作 (initrd)

    我们有时候有需要在busybox基础上,制作linux,可是却不知道具体怎么做,这里将对基于busybox的linux小系统制作做出详细的步骤说明. 准备环境: 1.一个Redhat完整系统的虚拟机, ...

  3. 私人定制---打造属于自己的linux小系统

    为什么80%的码农都做不了架构师?>>>    一.前言 linux操作系统至1991.10.5号诞生以来,就源其开源性和自由性得到了很多技术大牛的青睐,每个linux爱好者都为其贡 ...

  4. Centos 6.8 为自己打造Linux小系统

    一.前言 Linux操作系统至1991.10.5号诞生以来,就源其开源性和自由性得到了很多技术大牛的青睐,每个Linux爱好者都为其贡献了自己的一份力,不管是在Linux内核还是开源软件等方面,都为我 ...

  5. 为自己打造Linux小系统

    为自己打造Linux小系统  一.前言 Linux操作系统至1991.10.5号诞生以来,就源其开源性和自由性得到了很多技术大牛的青睐,每个Linux爱好者都为其贡献了自己的一份力,不管是在Linux ...

  6. 裁剪Linux小系统

    一)从linux本身系统上裁剪出来一个小系统. 博客目的和实现功能: 从本身存在的系统上新添加一块硬盘,做一个grub引导,然后把新加的硬盘做好后,加上网卡驱动,放到其余的主机上能正常进入使用,pin ...

  7. linux编译内核实验,实验六 Linux内核编译实验.doc

    实验六 Linux内核编译 讲师:杨行 [实验目的] 1.掌握Linux内核编译 2.了解Linux内核Makefile 3.了解Linux内核Kbuild系统 [实验原理] 网站可以下载标准内核文件 ...

  8. 透明大页相关内核参数_Alibaba Cloud Linux 2系统中与透明大页THP相关的性能调优方法...

    免责声明:本文档可能包含第三方产品信息,该信息仅供参考.阿里云对第三方产品的性能.可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺. 概述 本文主要介绍在Alibaba Cloud Li ...

  9. linux内核时间函数us,Linux上系统时间函数、DST等相关有关问题总结

    http://www.reader8.cn/jiaocheng/20120910/1995886.html 2012 Linux下系统时间函数.DST等相关问题总结1. 内核中时间的基本类型:在Lin ...

最新文章

  1. Ubuntu14.04 64位上配置终端显示git分支名称
  2. 分析Booking的150种机器学习模型,我总结了六条成功经验
  3. Linux makefile 教程
  4. 深入理解Linux高性能网络架构的那些事!
  5. VS.NET 2003 安装问题
  6. 给大家推荐一款高大上的代码高亮插件(sublime,github风格)——highlight.js
  7. 传递给系统调用的数据区域太小怎么解决_一口气说出“分布式追踪系统”原理!...
  8. Android NDK--自己编写调用JNI
  9. linux errno的作用域,关于比特科技c语言的学习博客(1)
  10. Atom飞行手册翻译: 2.13 基本的自定义
  11. 万能电商Banner素材模板,一切产品为王
  12. Javascript特效:字体火焰背景
  13. 工作流Jpbm4.4工作流知识点总结(工作流开发宝典)
  14. Pytest - 使用介绍2
  15. CCIE红头发讲解CCNA、CCNP视频教程
  16. oracle 下载 pb12.5,PowerBuilder 12.6
  17. 2005计算机编程入门教学,Micro:bit教程05—小bit编程入门教程
  18. 【数学-常用公式】基本积分表
  19. Mac安装HomeBrewHomeBrew安装yarn
  20. html如何防止内部撑开,CSS3 流式图片的设置,避免图片撑开所在的容器(附样例)...

热门文章

  1. oracle高级查询案例,oracle高级查询(实例基于scott用户四张表)
  2. python3和2的区别大吗_python3和2为什么区别大吗
  3. python调用chrome插件_Python使用Chrome插件实现爬虫过程图解
  4. 7z001 002合并 linux,解压小工具-如何把拆分后的压缩包合并(如7z.001)
  5. python源码只有编译成二进制_Python源码包和二进制包(包含打包过程细节讲解)...
  6. linux执行指定程序的命令,linux 下使用指定的用户来执行命令
  7. linux脚本判断流程控制,linux shell awk 流程控制语句(if,for,while,do)详细介绍
  8. 寻找唯一特等奖java,大工斩获唯一特等奖!这次,请为我工老师疯狂打call!
  9. 征途LINUX服务端脚本,bat脚本实例征途夜行
  10. MySql数据库SQL语言基础知识点—Navicat