编译内核,busybox,dropbear组装linux小系统
?busybox提供命令環(huán)境
?dropbear提供ssh服務(wù)實現(xiàn)遠(yuǎn)程管理。
查看本物理機的硬件,來確認(rèn)編譯內(nèi)核時選擇相應(yīng)的驅(qū)動。硬件信息獲取方法:
? cat /proc/cpuinfo
? cat /proc/meminfo
? lsusb
? lspci -v
? lscpu
為目標(biāo)磁盤創(chuàng)建文件系統(tǒng),并安裝grub,大概有以下步驟。
??? # fdisk /dev/sdb????????? 為目標(biāo)主機的啟動盤分區(qū),分兩個區(qū),第一個用作boot,第二個用作根文件系統(tǒng)
??? # 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已經(jīng)安裝好了
編譯內(nèi)核
??? 解壓內(nèi)核,進(jìn)入解壓后的內(nèi)核目錄
??? # make allnoconfig????? 清除所有選項,只會保留linux內(nèi)核必須的選項。
??? # make menuconfig
??? 1,選擇64位內(nèi)核
??? 2,修改本地內(nèi)核版本信息
然后返回主界面
??? 3,開啟支持動態(tài)裝卸載內(nèi)核模塊
然后返回主界面
??? 4,支持塊層
然后返回主界面
??? 5,選擇處理器特性
??? 6,選擇支持總線的類型
由此進(jìn)入
??? 7,讓內(nèi)核支持ELF類型的二進(jìn)制格式和以#!開頭的腳本
由此進(jìn)入
??? 8,選擇設(shè)備驅(qū)動
由此進(jìn)入
選擇好返回上級
選擇scsi總線類型
選擇usb驅(qū)動
返回上級
選擇輸入設(shè)備的驅(qū)動
選擇并進(jìn)入
返回到主頁
9,選擇支持的文件系統(tǒng)
返回主菜單
10,支持掛載內(nèi)核中的偽文件系統(tǒng)
11,啟動支持tcp/ip
基于uiux socket通信的進(jìn)程需要此選項。
12,選擇網(wǎng)卡驅(qū)動
虛擬機使用的是其中的一個。
13 選擇完成以上選項后,保存退出。然后開始編譯內(nèi)核。
??? # make -j 3 開始編譯內(nèi)核,啟動三個線程編譯。
??? 經(jīng)過一段時間后編譯完成。紅框中的路徑為編譯好的內(nèi)核存放的目錄。
??? # cp arch/x86/boot/bzImage? /mnt/boot???????????? 把編譯好的內(nèi)核復(fù)制到boot目錄。
編譯busybox
# yum -y install glibc-static??? 因為是靜態(tài)編譯,所以需要這個開發(fā)包
# yum -y install libmcrypt-devel??? 還需要這個包,位于epel源中。
下載busybox解壓后進(jìn)入目錄,配置busybox的特性。這里只需要選擇busybox為靜態(tài)編譯。
# make menuconfig????
選擇此項,表示靜態(tài)編譯。完成后返回上級。
? 進(jìn)入此選項
???? 在這里設(shè)置編譯安裝后的busybox文件存儲位置。
# make -j 3????? 開始編譯
# make install??????????? 編譯好后開始安裝
# cp _install/* /mnt/sysroot????? 把編譯好的文件復(fù)制到目標(biāo)系統(tǒng)的根下
# ls /mnt/sysroot/???????????? 查看復(fù)制過去的文件,這里只看了bin目錄。
# cp /root/busybox-1.22.1/_install/* /mnt/sysroot/ -r
?
============================================
為目標(biāo)創(chuàng)建根文件系統(tǒng)。
# 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????? 為每個用戶設(shè)定自己家目錄的屬主
# chown test.test? home/test
# chown wukui.wukui home/wukui
# chown fedora.fedora home/fedora
提供配置文件
# vim /mnt/boot/grub/grub.conf????? grub配置文件內(nèi)容如下。
??? 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加載后執(zhí)行的腳本 ? ?
::respawn:/sbin/getty 19200 tty1????????????? 定義用戶啟動的終端 ? ?
::respawn:/sbin/getty 19200 tty2?
::respawn:/sbin/getty 19200 tty3?
::ctrlaltdel:/sbin/reboot???????????????????????????? 定義按下ctrl+alt+del鍵后執(zhí)行的命令 ? ?
::shutdown:/bin/umount -a -r?????????????????? 定義關(guān)機時卸載所有文件系統(tǒng)。
只提供物理控制臺的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配置內(nèi)容如下 ?
/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????????? 開機啟動腳本文件內(nèi)容如下 ?
#!/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????? 添加系統(tǒng)用戶
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 相當(dāng)于ssh
????? dropbearkey?? 相當(dāng)于 ssh-keygen
??????? 常用選項
??????????? -t :指定密鑰的算法有。rsa , dss(dsa)等。
??????????? -f:指定生成文件的路徑
??????????? -s:指定密鑰的長度,dss不用指定。rsa的長度是8整數(shù)倍的位數(shù)。
????? scp? 和 openssh 的 scp 一樣。 ?
# ls sbin/ ? ?
??? dropbear 命令是服務(wù)程序,相當(dāng)于openssh 的 sshd
???????? 常用選項
??????????? -r keyfile : 指定key文件的位置
????????????????? dss /etc/dropbear/dropbear_dss_host_key
????????????????? rsa /etc/dropbear/dropbear_rsa_host_key
??????????? -F : 運行于前臺
??????????? -E:把運行中的所有錯誤發(fā)送到屏幕上
??????????? -s:設(shè)定只能使用密鑰認(rèn)證
??????????? -P:指定pid文件。默認(rèn)在/var/run/dropbear.pid
??????????? -p:(小寫)指定dropbear啟動時監(jiān)聽的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
? ?
提供遠(yuǎn)程登陸需要的偽終端設(shè)備目錄,讓其開機自動掛載
# echo "devets??? /dev/pts??? devpts??? gid=5,mode=620 0 0" >> /mnt/etc/fstab
因為內(nèi)核會自動掛載/dev文件系統(tǒng),所以在掛載后再創(chuàng)建pts。此文件系統(tǒng)和proc一樣,都是內(nèi)存中的文件系統(tǒng)。
# 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
轉(zhuǎn)載于:https://blog.51cto.com/wukui/1544090
總結(jié)
以上是生活随笔為你收集整理的编译内核,busybox,dropbear组装linux小系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 每周日更新学习情况
- 下一篇: CISCO 3560配置作为DHCP服务