编译内核,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-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小系统相关推荐
- 编译内核+busybox+dropbear,ssh登录
以下是学习过程记录: 学习环境使用VMware虚拟机,宿主机使用centos6.10,内核源码linux-3.0.1,busybox-1.22.0,dropbear-2020.81. 1.目标硬盘分区 ...
- 基于busybox的Linux小系统制作 (initrd)
我们有时候有需要在busybox基础上,制作linux,可是却不知道具体怎么做,这里将对基于busybox的linux小系统制作做出详细的步骤说明. 准备环境: 1.一个Redhat完整系统的虚拟机, ...
- 私人定制---打造属于自己的linux小系统
为什么80%的码农都做不了架构师?>>> 一.前言 linux操作系统至1991.10.5号诞生以来,就源其开源性和自由性得到了很多技术大牛的青睐,每个linux爱好者都为其贡 ...
- Centos 6.8 为自己打造Linux小系统
一.前言 Linux操作系统至1991.10.5号诞生以来,就源其开源性和自由性得到了很多技术大牛的青睐,每个Linux爱好者都为其贡献了自己的一份力,不管是在Linux内核还是开源软件等方面,都为我 ...
- 为自己打造Linux小系统
为自己打造Linux小系统 一.前言 Linux操作系统至1991.10.5号诞生以来,就源其开源性和自由性得到了很多技术大牛的青睐,每个Linux爱好者都为其贡献了自己的一份力,不管是在Linux ...
- 裁剪Linux小系统
一)从linux本身系统上裁剪出来一个小系统. 博客目的和实现功能: 从本身存在的系统上新添加一块硬盘,做一个grub引导,然后把新加的硬盘做好后,加上网卡驱动,放到其余的主机上能正常进入使用,pin ...
- linux编译内核实验,实验六 Linux内核编译实验.doc
实验六 Linux内核编译 讲师:杨行 [实验目的] 1.掌握Linux内核编译 2.了解Linux内核Makefile 3.了解Linux内核Kbuild系统 [实验原理] 网站可以下载标准内核文件 ...
- 透明大页相关内核参数_Alibaba Cloud Linux 2系统中与透明大页THP相关的性能调优方法...
免责声明:本文档可能包含第三方产品信息,该信息仅供参考.阿里云对第三方产品的性能.可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺. 概述 本文主要介绍在Alibaba Cloud Li ...
- linux内核时间函数us,Linux上系统时间函数、DST等相关有关问题总结
http://www.reader8.cn/jiaocheng/20120910/1995886.html 2012 Linux下系统时间函数.DST等相关问题总结1. 内核中时间的基本类型:在Lin ...
最新文章
- Ubuntu14.04 64位上配置终端显示git分支名称
- 分析Booking的150种机器学习模型,我总结了六条成功经验
- Linux makefile 教程
- 深入理解Linux高性能网络架构的那些事!
- VS.NET 2003 安装问题
- 给大家推荐一款高大上的代码高亮插件(sublime,github风格)——highlight.js
- 传递给系统调用的数据区域太小怎么解决_一口气说出“分布式追踪系统”原理!...
- Android NDK--自己编写调用JNI
- linux errno的作用域,关于比特科技c语言的学习博客(1)
- Atom飞行手册翻译: 2.13 基本的自定义
- 万能电商Banner素材模板,一切产品为王
- Javascript特效:字体火焰背景
- 工作流Jpbm4.4工作流知识点总结(工作流开发宝典)
- Pytest - 使用介绍2
- CCIE红头发讲解CCNA、CCNP视频教程
- oracle 下载 pb12.5,PowerBuilder 12.6
- 2005计算机编程入门教学,Micro:bit教程05—小bit编程入门教程
- 【数学-常用公式】基本积分表
- Mac安装HomeBrewHomeBrew安装yarn
- html如何防止内部撑开,CSS3 流式图片的设置,避免图片撑开所在的容器(附样例)...
热门文章
- oracle高级查询案例,oracle高级查询(实例基于scott用户四张表)
- python3和2的区别大吗_python3和2为什么区别大吗
- python调用chrome插件_Python使用Chrome插件实现爬虫过程图解
- 7z001 002合并 linux,解压小工具-如何把拆分后的压缩包合并(如7z.001)
- python源码只有编译成二进制_Python源码包和二进制包(包含打包过程细节讲解)...
- linux执行指定程序的命令,linux 下使用指定的用户来执行命令
- linux脚本判断流程控制,linux shell awk 流程控制语句(if,for,while,do)详细介绍
- 寻找唯一特等奖java,大工斩获唯一特等奖!这次,请为我工老师疯狂打call!
- 征途LINUX服务端脚本,bat脚本实例征途夜行
- MySql数据库SQL语言基础知识点—Navicat