手動自制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 包含了一些簡單的工具,例如ls、catecho等等,還包含了一些更大、更復雜的工具,例grepfind、mount以及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 23:45
下一篇 2016-05-03 09:28

相關推薦

  • 如何在Java中避免equals方法的隱藏陷阱

    譯者注 :你可能會覺得Java很簡單,Object的equals實現也會非常簡單,但是事實并不是你想象的這樣,耐心的讀完本文,你會發現你對Java了解的是如此的少。如果這篇文章是一份Java程序員的入職筆試,那么不知道有多少人會掉落到這樣的陷阱中。原文轉自http://www.artima.com/lejava/articles/equality.…

    開發運維 2015-04-03
  • mariadb的主從復制、主主復制、半同步復制

    主從服務器的時間要同步,數據庫版本最好是一致的,以免造成函數處理、日志讀取、日志解析等發生異常。 以下三個主從復制的設置是獨立的。 注意防火墻和selinux的影響。 1、簡單主從復制的實現 (1)主服務器的配置 1)安裝mariadb-server [root@localhost ~]# yum -y install…

    Linux干貨 2016-11-21
  • N25-第1周博客作業

    計算機概述及命令 一、計算機原理及其組成功能 計算機作為一個整體,由軟件和硬件兩大部分組成:  (1)計算機硬件系統。        計算機的硬件系統結構有哈佛結構和馮·諾伊曼結構兩種。 哈佛結構是一種將程序指令存儲和數據存儲分開的存儲器結構。中央處理器首先到程序指令存儲器中讀取程序指令內…

    Linux干貨 2016-12-03
  • 磁盤分區,文件系統的創建、修改和檢測

        寫博客,對我來說不僅是學習的過程,也是一個心理歷練的過程,多說無益,開始吧?。?!     博客是馬哥視頻里的博客作業:文件系統的創建、修改和檢測。我就從磁盤管理開始把      環境:     創建的centos6.5虛擬機 &nb…

    Linux干貨 2016-06-26
  • sed簡介及常見用法

    sed是一個文本流處理器,配合正則表達式用可以實現很多文本處理操作。 和grep一樣,sed是一行一行的處理的。sed處理文本時,首先會將源文件復制一份到內存中,然后將文本一行一行拿到模式空間內進行操作,最后輸出到標準輸出,即屏幕上。 在模式空間中,每一行都會根據用戶給的條件進行匹配,匹配到了進行編輯后輸出,沒有匹配到,直接輸出到標準輸出。sed除了模式空間…

    2018-01-04
  • 6個用于大數據分析的最好工具

    大數據是一個含義廣泛的術語,是指數據集,如此龐大而復雜的,他們需要專門設計的硬件和軟件工具進行處理。該數據集通常是萬億或EB的大小。這些數據集收集自各種各樣的來源:傳感器,氣候信息,公開的信息,如雜志,報紙,文章。大數據產生的其他例子包括購買交易記錄,網絡日志,病歷,軍事監控,視頻和圖像檔案,及大型電子商務。  在大數據和大數據分析,他們對企業的影…

    Linux干貨 2015-04-04

評論列表(2條)

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

    是在centos6.5環境下嗎?

    • frameboy
      frameboy 2016-05-04 16:00

      @n18-judecentos 6.7

欧美性久久久久