手動自制Mini Linux

    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

    手動自制Mini Linux

                            cpu 類型

手動自制Mini Linux

手動自制Mini Linux

 

                支持多核心

手動自制Mini Linux

 

                支持pci

手動自制Mini Linux

 

 

                硬盤驅動編入:

手動自制Mini Linux

 

手動自制Mini Linux

                fusion mptscsi的中層驅動,等于是通訊層驅動,還要選擇物理層驅動:

                scsi device support—scsi device support scsi disk support

手動自制Mini Linux

            輸入設備驅動選擇:

手動自制Mini Linux

 

            6、基礎的功能都選擇完畢,可以先編譯一次看看:

                            make -j 4 bzImage  —-只編譯內核

            編譯完成后,會顯示編譯好的內核的大小和路勁

手動自制Mini Linux

 

            7、安裝grub,以便新系統啟動引導:

                                gurb-install –root-directory=/mnt /dev/sdc

手動自制Mini Linux

                編輯grub配置文件:

                                    vim /mnt/boot/grub/grub.conf

手動自制Mini Linux

              8、將編譯好的文件拷貝到boot

手動自制Mini Linux

 

 

    至此,最基本的配置及文件準備完成,我們用此硬盤作為一個新虛擬機的硬盤啟動系統,會發現如下提示:

手動自制Mini Linux

可以看到,雖然硬盤被識別,但是文件系統并未被識別驅動,為此我們需要選擇內核支持的文件系統并重新編譯。

 

            9、在file system中選擇需要加載的文件系統的格式:

手動自制Mini Linux

 

            同時,選擇支持的可執行程序的格式,因為我們加載文件系統,就需要運行上面的程序

手動自制Mini Linux

 

                10、編譯完成后我們重新啟動新的主機,發現文件系統可以識別了,但是沒有init程序,系統還是無法正常啟動。

手動自制Mini Linux

            我們可以查看/usr/src/linux2/init/main.c中查看系統默認啟動時查找應用程序順序:

手動自制Mini Linux

            我們還是先移一個bashsysroot中,以便啟動系統。

            對于一個根文件系統,我們先創建基本的目錄

手動自制Mini Linux

            下面我們要復制程序,復制程序除了復制程序本身,還要復制程序文件所依賴的庫文件,我們需要建立一個腳本,以實現程序的復制

                        vim cpcmd.sh

手動自制Mini Linux

 

            通過此腳本將bash,ls拷貝到/mnt/sysroot,可以通過chroot來測試一下

手動自制Mini Linux

 

         此時bash已經拷貝完成,我們編輯一下/mnt/boot/grub/grub.conf,明確告訴系統init程序

手動自制Mini Linux

            再啟動新主機,會發現系統已經可以運轉

手動自制Mini Linux

     到此,我們實現了一個簡單的MINI LINUX。

 

 

二、下面我們將演示如何使用busybox構建。 

BusyBox 是一個集成了一百多個最常用linux命令和工具的軟件。BusyBox 包含了一些簡單的工具,例如lscatecho等等,還包含了一些更大、更復雜的工具,例grep、findmount以及telnet。有些人將 BusyBox 稱為 Linux 工具里的瑞士軍刀。簡單的說BusyBox就好像是個大工具箱,它集成壓縮了 Linux 的許多工具和命令,也包含了 Android 系統的自帶的shell。

 

為了方便我們拷貝使用,我們采用靜態編譯的方式編譯busybox,而不是采用共享庫方式。

要實現靜態編譯,我們要依賴于glibc庫中的glibc-static支持,首先需要安裝glibc-static

手動自制Mini Linux

busybox的編譯方法和內核的編譯方法類似,可以采用make menuconfig配置編譯選項

手動自制Mini Linux

Busybox Settings-build options中選擇采用靜態編譯方式:

手動自制Mini Linux

busybox settings-installation options中可以選擇采用什么樣的鏈接安裝,默認采用軟鏈接方式

手動自制Mini Linux

執行make && make install,默認安裝在當前目錄的_install目錄下。

清空原有的/mnt/sysroot目錄

拷貝安裝后的busybox/mnt/sysroot/目錄中

cp -a _install/*  /mnt/sysroot/

手動自制Mini Linux

可以看到,ash已經可以運行

修改grubconf文件:

手動自制Mini Linux

由于目前sysroot目錄下只有bin,sbin,usr目錄,我們再創建相關目錄補全(少了boot

手動自制Mini Linux

目前系統依賴于init,所以我們需要編輯inittab,告知系統如何初始化:

vim /mnt/sysroot/etc/inittab

手動自制Mini Linux

第一項:說明系統初始化腳本

第二項:說明控制臺

第三項:說明重啟

第四項:說明關機時卸載所有掛載文件

 

再創建rc.sysinit腳本

mkdir /mnt/sysroot/etc/rc.d

vim /mnt/sysroot/etc/rc.d/rc.sysinit

手動自制Mini Linux

 

chmod +x /mnt/sysroot/etc/rc.d/rc.sysinit

至此,我們可以嘗試啟動新的mini linux

(注意,如果系統提示沒有/dev/console文件,則編譯內核需要選擇:

device drivers–Generic device option中自動裝在devtmpfsdev目錄

                                              手動自制Mini Linux 

 

三、我們對上述的簡單的Mini Linux做相應的補充:

1、創建fstab文件以開機自動掛載文件系統:

            vim etc/fstab

 

手動自制Mini Linux

 

2、rc.sysinit中指明執行mount -amount  -a就是掛載fstab文件中所有的文件)

手動自制Mini Linux

3、啟動時候我們只是采用了控制臺console,我們可以使用虛擬終端,編輯inittab文件:

手動自制Mini Linux

 

完成以上幾步后我們再啟動Mini Linux,可以看到我們可以通過ctrl+alt+F123里切換中斷了。

同時可以看到開機要求的掛載的系統也都已經自動掛載上

 

4、我們用模塊方式加載網卡的驅動:

lspci 查看網卡類型

手動自制Mini Linux

 

我們要重新編譯內核,首先編譯網絡支持模塊打開網絡功能

networking support–networking options中:

手動自制Mini Linux

 

在編譯網卡驅動:

手動自制Mini Linux

 

上面我們是將網卡編譯進了內核,那么我們如何用模塊編譯呢?

    修改內核編譯配置 ethernet driver support

手動自制Mini Linux

此時我們對內核編譯就拆除了對網卡驅動的支持

我們對單獨的網卡驅動模塊編譯:

網卡模塊所在位置:由于我們之前編譯進內核過,所以現在只有.O的文件,一般來說都是.c的文件:

手動自制Mini Linux

單獨編譯內核模塊:

make M=path/to/somedir/

#make M=drivers/net/ethernet/intel/e1000/

手動自制Mini Linux

然后將編譯好的ko文件拷貝到/mnt/sysroot/lib/modules目錄下:

手動自制Mini Linux

完成后我們進入Mini Linux中會發現網卡已經沒有了,需要手動裝在網卡模塊

手動自制Mini Linux

如果要自動裝在,需要寫腳本自動掃描所有硬件并安裝合適的驅動。

簡單一點我們可以在rc.sysinit中用命令實現開機自動裝載

 

 

5、我們還可以為系統創建登錄

    創建passwd,groupshadow文件:

         手動自制Mini Linux

    chrootminilinux中采用useradd添加root,并對文件作相應修改

         手動自制Mini Linux

         vim etc/passwd

手動自制Mini Linux

    vim etc/group

手動自制Mini Linux

 

    將目前系統的root密碼傳遞過來

手動自制Mini Linux

    修改inittab文件

手動自制Mini Linux

以上配置即可

 

6、配置為minilinux提供ssh服務支持

vim etc/issue—顯示ssh登錄的提示

手動自制Mini Linux

        編譯安裝dropbear

                tar xf dropbear-2016.72.tar.bz2

                cd dropbear-2016.72

                ./configure(需要openssl-devel包支持)

                make && make install

        使用命令復制腳本將dropbeardropbearkey,dbclient

 

手動自制Mini Linux

手動自制Mini Linux

    為目標系統的dropbear生成密鑰文件

手動自制Mini Linux

            注意:key文件放的位置可以查看options.h獲得(在編譯路徑下)

 

    通過遠程ssh登錄時,登陸者使用的shell必須為安全shell,在etc/shells文件中定義:

手動自制Mini Linux

 

    系統上nsswitch服務支持(dropbear在登錄認證是需要將用戶名轉換成對應的用戶id號)

            vim etc/nsswitch.conf

手動自制Mini Linux

            將相關的庫文件拷貝到對應目錄下

手動自制Mini Linux

 

            注意:可以將passwd文件中用戶最后對應的shell修改為該用戶想啟用的shell

 

            編輯/root/.bash_profile(只爭對bash有效)

手動自制Mini Linux

 

                創建/vra/run目錄 (創建pid file需要)

                啟動dropbear dropbear -E -F

                發現dropbear已經可以正常啟動(注:新版本dropbear禁止使用root登錄)

 

以上就是mini linux制作的全部內容,可以加深對于linux操作系統的理解。

 

 

 

 

原創文章,作者:frameboy,如若轉載,請注明出處:http://www.www58058.com/15814

(0)
frameboyframeboy
上一篇 2016-05-01
下一篇 2016-05-03

相關推薦

  • 26期全程班-第二周博客作業

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。     cp  復制命         ex:cp -a /etc/initab /var/log/message /tmp/   …

    Linux干貨 2017-01-10
  • Python from entry to abandon

          學習Linux已經有大致兩周了,依然感覺到自己仍然在運維的大門外徘徊。于是我想要找到一個在Linux之外的業余方向,可以作為枯燥基礎學習的調節。沒過多久我就發現了Python可以 說是欽定的選擇,它作為Linux的內置語言,傳言風格簡潔優美,功能強大。Python老生常談的缺點是效率不高,哎,沒辦…

    Linux干貨 2017-04-01
  • Windows PHP 中 VC6 X86 和 VC9 X86 的區別及 Non Thread Safe 的意思

    PHP5.3以后 For Windows 提供了四個版本VC9 x86 Non Thread Safe、VC9 x86 Thread Safe、VC6 x86 Non Thread Safe、VC6 x86 Thread Safe 在 官網 左邊欄有提示: Which version do I choose? If you are usi…

    Linux干貨 2015-06-16
  • 網絡班第27期第一周作業

    1、         描述計算機的組成及其功能 CPU:主要由控制器和運算器組成,其他還有寄存器和緩存等。 控制器:其功能是對程序規定的控制信息進行解釋,根據其要求進行控制,調度程序、數據、地址,協調計算機各部分工作及內存與外設的訪問等。 運算器:功能是對數據進行各種算術運算和邏…

    2017-07-29
  • DNS簡單配置

    正向解析,反向解析,主從, 主:主配置文件:options {        listen-on port 53 { 127.0.0.1; 172.16.252.194; };  //監聽的端口,即哪些主機可以進行訪問        directory   &…

    Linux干貨 2017-05-24
  • NFS服務器設置

    一、NFS的相關概念     NFS(Network File System)即網絡文件系統的縮寫,由Sun公司研發,其目的是為了解決網絡文件共享的問題。用戶可以實現像掛載本地文件系統一樣掛載NFS服務器的共享目錄;其具有配置簡單、使用高效的特點,但只能在Linux系統使用,不能跨平臺使用。 &nb…

    Linux干貨 2015-06-25

評論列表(2條)

  • n18-jude
    n18-jude 2016-05-04 15:37

    是在centos6.5環境下嗎?

    • frameboy
      frameboy 2016-05-04 16:00

      @n18-judecentos 6.7

欧美性久久久久