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