linux系統內核非常的精簡,而且基于一切皆文件的思想,使得我們可以再現有系統上掛載一個空硬盤,利用現有系統編譯一個內核和相關程序文件并拷貝到空硬盤上。我們就可以用空硬盤來單獨運行一個精簡的linux系統,這對于依賴于注冊表的windows系統來說是不可能實現的。本文簡要介紹一下一個mini linux的安裝制作過程
實現的基本換進:vmware workstation
實現的基本思想:kernel+busybox
軟件包:kernel www.kernel.org busybox www.busybox.net
一、基本實現
1、在現有系統上添加一塊獨立硬盤,以便裝載mini linux
fdisk /dev/sdc
mke2fs -t ext4 /dev/sdc1
mke2fs -t ext4 /dev/sdc2
mkdir /mnt/{boot,fsroot}
mount /dev/sdc1 /mnt/boot
mount /dev/sdc2 /mnt/fsroot
2、下載kernel到/usr/src并解壓包tar xf linux-4.5.2.tar.xz
3、make allnoconfig 先生成一個純凈的.config
可能出錯情況說明
[root@node1 linux]# make allnoconfig
make: Warning: File `arch/x86/Makefile' has modification time 2.7e+06 s in the future
make[1]: Warning: File `scripts/Makefile.host' has modification time 2.7e+06 s in the future
這個是由于系統時間不對引起 date -s設置系統時間 或者使用ntpdate同步系統時間 netdate ntpserver
4、make menuconfig配置需要的編譯項目
可能出錯情況說明
[root@node1 linux]# make menuconfig
scripts/kconfig/lxdialog/dialog.h:38:20: error: curses.h: No such file or directory
In file included from scripts/kconfig/mconf.c:23:
這個是由于ncurses-devel模塊,yum安裝一下,ncurses提供字符終端處理庫,包括面板和菜單。
5、選擇基礎的需要的配置項目:
由于要在現有平臺直接移植一些功能,所以基礎平臺需要選擇一樣的:
64-bit kernel
cpu 類型
支持多核心
支持pci
硬盤驅動編入:
fusion mpt是scsi的中層驅動,等于是通訊層驅動,還要選擇物理層驅動:
scsi device support—scsi device support scsi disk support
輸入設備驅動選擇:
6、基礎的功能都選擇完畢,可以先編譯一次看看:
make -j 4 bzImage —-只編譯內核
編譯完成后,會顯示編譯好的內核的大小和路勁
7、安裝grub,以便新系統啟動引導:
gurb-install –root-directory=/mnt /dev/sdc
編輯grub配置文件:
vim /mnt/boot/grub/grub.conf
8、將編譯好的文件拷貝到boot中
至此,最基本的配置及文件準備完成,我們用此硬盤作為一個新虛擬機的硬盤啟動系統,會發現如下提示:
可以看到,雖然硬盤被識別,但是文件系統并未被識別驅動,為此我們需要選擇內核支持的文件系統并重新編譯。
9、在file system中選擇需要加載的文件系統的格式:
同時,選擇支持的可執行程序的格式,因為我們加載文件系統,就需要運行上面的程序
10、編譯完成后我們重新啟動新的主機,發現文件系統可以識別了,但是沒有init程序,系統還是無法正常啟動。
我們可以查看/usr/src/linux2/init/main.c中查看系統默認啟動時查找應用程序順序:
我們還是先移一個bash到sysroot中,以便啟動系統。
對于一個根文件系統,我們先創建基本的目錄
下面我們要復制程序,復制程序除了復制程序本身,還要復制程序文件所依賴的庫文件,我們需要建立一個腳本,以實現程序的復制
vim cpcmd.sh
通過此腳本將bash,ls拷貝到/mnt/sysroot,可以通過chroot來測試一下
此時bash已經拷貝完成,我們編輯一下/mnt/boot/grub/grub.conf,明確告訴系統init程序
再啟動新主機,會發現系統已經可以運轉
到此,我們實現了一個簡單的MINI LINUX。
二、下面我們將演示如何使用busybox構建。
BusyBox 是一個集成了一百多個最常用linux命令和工具的軟件。BusyBox 包含了一些簡單的工具,例如ls、cat和echo等等,還包含了一些更大、更復雜的工具,例grep、find、mount以及telnet。有些人將 BusyBox 稱為 Linux 工具里的瑞士軍刀。簡單的說BusyBox就好像是個大工具箱,它集成壓縮了 Linux 的許多工具和命令,也包含了 Android 系統的自帶的shell。
為了方便我們拷貝使用,我們采用靜態編譯的方式編譯busybox,而不是采用共享庫方式。
要實現靜態編譯,我們要依賴于glibc庫中的glibc-static支持,首先需要安裝glibc-static
busybox的編譯方法和內核的編譯方法類似,可以采用make menuconfig配置編譯選項
在Busybox Settings-build options中選擇采用靜態編譯方式:
busybox settings-installation options中可以選擇采用什么樣的鏈接安裝,默認采用軟鏈接方式
執行make && make install,默認安裝在當前目錄的_install目錄下。
清空原有的/mnt/sysroot目錄
拷貝安裝后的busybox到/mnt/sysroot/目錄中
cp -a _install/* /mnt/sysroot/
可以看到,ash已經可以運行
修改grub的conf文件:
由于目前sysroot目錄下只有bin,sbin,usr目錄,我們再創建相關目錄補全(少了boot)
目前系統依賴于init,所以我們需要編輯inittab,告知系統如何初始化:
vim /mnt/sysroot/etc/inittab
第一項:說明系統初始化腳本
第二項:說明控制臺
第三項:說明重啟
第四項:說明關機時卸載所有掛載文件
再創建rc.sysinit腳本
mkdir /mnt/sysroot/etc/rc.d
vim /mnt/sysroot/etc/rc.d/rc.sysinit
chmod +x /mnt/sysroot/etc/rc.d/rc.sysinit
至此,我們可以嘗試啟動新的mini linux
(注意,如果系統提示沒有/dev/console文件,則編譯內核需要選擇:
device drivers–Generic device option中自動裝在devtmpfs到dev目錄
)
三、我們對上述的簡單的Mini Linux做相應的補充:
1、創建fstab文件以開機自動掛載文件系統:
vim etc/fstab
2、在rc.sysinit中指明執行mount -a(mount -a就是掛載fstab文件中所有的文件)
3、啟動時候我們只是采用了控制臺console,我們可以使用虛擬終端,編輯inittab文件:
完成以上幾步后我們再啟動Mini Linux,可以看到我們可以通過ctrl+alt+F123里切換中斷了。
同時可以看到開機要求的掛載的系統也都已經自動掛載上
4、我們用模塊方式加載網卡的驅動:
lspci 查看網卡類型
我們要重新編譯內核,首先編譯網絡支持模塊打開網絡功能
networking support–networking options中:
在編譯網卡驅動:
上面我們是將網卡編譯進了內核,那么我們如何用模塊編譯呢?
修改內核編譯配置 ethernet driver support
此時我們對內核編譯就拆除了對網卡驅動的支持
我們對單獨的網卡驅動模塊編譯:
網卡模塊所在位置:由于我們之前編譯進內核過,所以現在只有.O的文件,一般來說都是.c的文件:
單獨編譯內核模塊:
make M=path/to/somedir/
#make M=drivers/net/ethernet/intel/e1000/
然后將編譯好的ko文件拷貝到/mnt/sysroot/lib/modules目錄下:
完成后我們進入Mini Linux中會發現網卡已經沒有了,需要手動裝在網卡模塊
如果要自動裝在,需要寫腳本自動掃描所有硬件并安裝合適的驅動。
簡單一點我們可以在rc.sysinit中用命令實現開機自動裝載
5、我們還可以為系統創建登錄
創建passwd,group,shadow文件:
chroot到minilinux中采用useradd添加root,并對文件作相應修改
vim etc/passwd
vim etc/group
將目前系統的root密碼傳遞過來
修改inittab文件
以上配置即可
6、配置為minilinux提供ssh服務支持
vim etc/issue—顯示ssh登錄的提示
編譯安裝dropbear
tar xf dropbear-2016.72.tar.bz2
cd dropbear-2016.72
./configure(需要openssl-devel包支持)
make && make install
使用命令復制腳本將dropbear,dropbearkey,dbclient
為目標系統的dropbear生成密鑰文件
注意:key文件放的位置可以查看options.h獲得(在編譯路徑下)
通過遠程ssh登錄時,登陸者使用的shell必須為安全shell,在etc/shells文件中定義:
系統上nsswitch服務支持(dropbear在登錄認證是需要將用戶名轉換成對應的用戶id號)
vim etc/nsswitch.conf
將相關的庫文件拷貝到對應目錄下
注意:可以將passwd文件中用戶最后對應的shell修改為該用戶想啟用的shell
編輯/root/.bash_profile(只爭對bash有效)
創建/vra/run目錄 (創建pid file需要)
啟動dropbear :dropbear -E -F
發現dropbear已經可以正常啟動(注:新版本dropbear禁止使用root登錄)
以上就是mini linux制作的全部內容,可以加深對于linux操作系統的理解。
原創文章,作者:frameboy,如若轉載,請注明出處:http://www.www58058.com/15814
是在centos6.5環境下嗎?
@n18-jude:centos 6.7