日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

私人定制---打造属于自己的linux小系统

發(fā)布時間:2025/4/16 linux 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 私人定制---打造属于自己的linux小系统 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??

一、前言

? ?linux操作系統(tǒng)至1991.10.5號誕生以來,就源其開源性和自由性得到了很多技術(shù)大牛的青睞,每個linux愛好者都為其貢獻了自己的一份力,不管是在linux內(nèi)核還是開源軟件等方面,都為我們后來人提供了一個良好的學習和研究環(huán)境。做為一個linuxer,感謝各位前輩們?yōu)槲覀兲峁┮粋€自由的空間,讓我們也能夠在學習的同時去研究linux。

? ?本文主要通過裁剪現(xiàn)有l(wèi)inux系統(tǒng),打造一個屬于自己的linux小系統(tǒng),讓其能夠裝載網(wǎng)卡驅(qū)動,并配置IP地址,實現(xiàn)網(wǎng)絡(luò)功能。

二、原理

?啟動流程介紹

? ?制作linux小系統(tǒng)之前,我們有必要再了解一下linux的啟動流程:

? ?1、首先linux要通過POST自檢,檢查硬件設(shè)備有沒有故障

? ?2、如果有多塊啟動盤的話,需要在BIOS中選擇啟動磁盤

? ?3、啟動MBR中的bootloader引導程序

? ?4、加載內(nèi)核文件

? ?5、執(zhí)行所有進程的父進程、老祖宗init

? ?6、打印歡迎界面

? ?在linux的啟動流程中,加載內(nèi)核文件時還需要借助別外兩個文件:

? ?1)initrd,是CentOS5上用內(nèi)存模擬的磁盤設(shè)備

? ?2)initramfs,是CentOS6上用內(nèi)存模擬的文件系統(tǒng)

? ?在啟程的流程中,init主要是用來做哪些操作的呢?

? ?init通過調(diào)用/etc/inittab這個配置文件,然后再去執(zhí)行/etc/rc.d/rc.sysinit的系統(tǒng)初始化腳本

啟發(fā)

? ?到linux打印歡迎界面后,就說明系統(tǒng)已經(jīng)啟動成功,如果我們要制作一個linux小系統(tǒng),我們只需要把它在開機流程中用到的各文件都裝載到一起,就可以點亮屬于我們自己的系統(tǒng)了,而linux是一個模塊化的操作系統(tǒng),好多功能組件都是通過模塊化的工具來實現(xiàn)的,而且支持動態(tài)裝載和卸載,我們要是想實現(xiàn)某種功能,只需加載相應的模塊即可,就可以實現(xiàn)我們的linux操作系統(tǒng)大瘦身了。

三、操作步驟

1、目標磁盤分區(qū)

? ?在宿主機上掛一塊新磁盤,命名為soft-linux,此塊磁盤是宿主機上的第二塊磁盤,所以這里是/dev/sdb,而到時候掛載到目標主機的時候,因為那里只有這一塊磁盤,所以在目標主機上的名稱應該是/dev/sda,這個不能搞混了。首先,我們要在目標磁盤上分兩個區(qū),并進行格式化。第一個分區(qū)500M,用來裝引導程序;第二個分區(qū)10G,用來裝根文件系統(tǒng)。然后再進行掛載操作,將/dev/sdb1掛載到/mnt/boot下,將/dev/sdb2掛載到/mnt/sysroot下。


[root@nmshuishui?~]#?mount?/dev/sdb1?/mnt/boot mount:?mount?point?/mnt/boot?does?not?exist [root@nmshuishui?~]#?mkdir?-p?/mnt/boot?/mnt/sysroot [root@nmshuishui?~]#?mount?/dev/sdb1?/mnt/boot [root@nmshuishui?~]#?mount?/dev/sdb2?/mnt/sysroot/ [root@nmshuishui?~]#

2、安裝grub至目標磁盤

? ?一個系統(tǒng)能啟動,就需要引導,所以我們首先要安裝一個grub引導程序到我們的新磁盤上,安裝grub引導程序主要有兩個命令,一個是grub-install,另一個是setup,這里最好使用grub-install來安裝。因為:

? ?①grub-install會安裝grub引導第二階段的文件

? ?②setup不會安裝第二階段的引導程序,是安裝引導信息到MBR

? ?第二個需要注意的地方就是--root-directory=后面接的路徑應該是boot目錄所在的地方,而不是/mnt/boot,因為boot目錄在mnt下;目標磁盤是/dev/sdb

[root@nmshuishui?~]#?grub-install?--root-directory=/mnt?/dev/sdb Probing?devices?to?guess?BIOS?drives.?This?may?take?a?long?time. Installation?finished.?No?error?reported. This?is?the?contents?of?the?device?map?/mnt/boot/grub/device.map. Check?if?this?is?correct?or?not.?If?any?of?the?lines?is?incorrect, fix?it?and?re-run?the?script?`grub-install'. (fd0)???/dev/fd0 (hd0)???/dev/sda (hd1)???/dev/sdb [root@nmshuishui?~]#?cd?/mnt/boot/ [root@nmshuishui?boot]#?ls grub??lost+found [root@nmshuishui?boot]#?cd?grub/ [root@nmshuishui?grub]#?ls device.map??e2fs_stage1_5??fat_stage1_5??ffs_stage1_5??iso9660_stage1_5??jfs_stage1_5??minix_stage1_5??reiserfs_stage1_5??stage1??stage2??ufs2_stage1_5??vstafs_stage1_5??xfs_stage1_5 [root@nmshuishui?grub]#

?安裝完grub后,進入grub目錄,會發(fā)現(xiàn)沒有g(shù)rub.conf配置文件,這樣就導致我們的引導程序是不健全的,所以我們需要手動寫一個配置文件在里邊,不過這得需要知道內(nèi)核的版本,等移植完內(nèi)核版本,再回過頭來補充此步。

3、復制內(nèi)核文件和initrd文件

? ?init是系統(tǒng)中用來產(chǎn)生其它所有進程的程序。它以守護進程的方式存在,其進程號為1,init是所有進程的父進程,老祖宗,所以不移植是不行的。它通過調(diào)用/etc/inittab這個配置文件,然后再去執(zhí)行/etc/rc.d/rc.sysinit的系統(tǒng)初始化腳本。

? ?將內(nèi)核文件和initrd文件復制到/dev/sdb下的boot目錄中。

[root@nmshuishui?grub]#?cp?/boot/vmlinuz-2.6.32-358.el6.x86_64?/mnt/boot/vmlinuz-soft [root@nmshuishui?grub]#?cp?/boot/initramfs-2.6.32-358.el6.x86_64.img?/mnt/boot/initramfs-soft.img [root@nmshuishui?grub]#

4、創(chuàng)建目標主機根文件系統(tǒng)

? ?①使用命令行展開創(chuàng)建文件系統(tǒng)

[root@nmshuishui?sysroot]#?mkdir?-pv?/mnt/sysroot/{etc/rc.d,usr,var,proc,sys,dev,lib,lib64,bin,sbin,boot,srv,mnt,media,home,root} mkdir:?created?directory?`/mnt/sysroot/etc' mkdir:?created?directory?`/mnt/sysroot/etc/rc.d' mkdir:?created?directory?`/mnt/sysroot/usr' mkdir:?created?directory?`/mnt/sysroot/var' mkdir:?created?directory?`/mnt/sysroot/proc' mkdir:?created?directory?`/mnt/sysroot/sys' mkdir:?created?directory?`/mnt/sysroot/dev' mkdir:?created?directory?`/mnt/sysroot/lib' mkdir:?created?directory?`/mnt/sysroot/lib64' mkdir:?created?directory?`/mnt/sysroot/bin' mkdir:?created?directory?`/mnt/sysroot/sbin' mkdir:?created?directory?`/mnt/sysroot/boot' mkdir:?created?directory?`/mnt/sysroot/srv' mkdir:?created?directory?`/mnt/sysroot/mnt' mkdir:?created?directory?`/mnt/sysroot/media' mkdir:?created?directory?`/mnt/sysroot/home' mkdir:?created?directory?`/mnt/sysroot/root' [root@nmshuishui?sysroot]#?ls bin??boot??dev??etc??home??lib??lib64??lost+found??media??mnt??proc??root??sbin??srv??sys??usr??var [root@nmshuishui?sysroot]#

?②移植bash命令和其庫文件到根文件系統(tǒng)


[root@nmshuishui?mnt]#?sh?~/scripts/cporder.sh Enter?a?command:?bash Enter?a?command:?shutdown Enter?a?command:?reboot Enter?a?command:?vim Enter?a?command:?touch Enter?a?command:?mkdir Enter?a?command:?rm Enter?a?command:?ls Enter?a?command:?cat Enter?a?command:?less Enter?a?command:?ifconfig Enter?a?command:?ip Enter?a?command:?route Enter?a?command:?quit quit [root@nmshuishui?mnt]#?sync [root@nmshuishui?mnt]#?sync [root@nmshuishui?mnt]#?ls boot??sysroot [root@nmshuishui?mnt]#?cd?sysroot/ [root@nmshuishui?sysroot]#?ls bin??lib64??sbin??usr [root@nmshuishui?sysroot]#?cd?bin/ [root@nmshuishui?bin]#?ls bash??cat??ls??mkdir??rm??touch [root@nmshuishui?bin]#?ln?-sv?bash?sh `sh'?->?`bash' [root@nmshuishui?bin]#?sync [root@nmshuishui?bin]#

附:命令移植腳本


#!/bin/bash # target=/mnt/sysroot clearCmd()?{if?which?$cmd?&>?/dev/null;?thencmdPath=`which?--skip-alias?$cmd`elseecho?"No?such?command"return?5fi } cmdCopy()?{cmdDir=`dirname?$1`[?-d?${target}${cmdDir}?]?||?mkdir?-p?${target}${cmdDir}[?-f?${target}${1}?]?||?cp?$1?${target}${cmdDir} } libCopy()?{for?lib?in?`ldd?$1?|?grep?-o?"/[^[:space:]]\{1,\}"`;?dolibDir=`dirname?$lib`[?-d?${target}${libDir}?]?||?mkdir?-p?${target}${libDir}[?-f?${target}${lib}?]?||?cp?$lib?${target}${libDir}done } while?true;?doread?-p?"Enter?a?command:?"?cmdif?[?"$cmd"?==?'quit'?]?;thenecho?"quit"exit?0ficlearCmd?$cmd[?$??-eq?5?]?&&?continuecmdCopy?$cmdPathlibCopy?$cmdPath done

5、為grub提供配置文件

? ?上面移植了內(nèi)核和initrd文件,我們就可以根據(jù)內(nèi)核版本和initrd版本來編寫grub.conf配置文件了

[root@nmshuishui?grub]#?vim?grub.conf default=0 timeout=5 title???nmshuishui???soft-linuxroot?(hd0,0)kernel?/vmlinuz-soft?ro?root=/dev/sda2?quiet?selinux=0?init=/bin/bashinitrd?/initramfs-soft.img ~

quiet是靜默安裝,不再顯示安裝時的一大堆信息。后面要把selinux關(guān)掉,而且init要使用/bin/bash,告訴內(nèi)核不要再去找init程序了。如果不指定這一步,在啟動過程中就會報kernel panic(內(nèi)核恐慌),以為系統(tǒng)就它一個了,沒有init進程,恐慌的不行。

6、啟動測試


7、特別提醒

? ?如果在vmvare上做此實驗,在新建虛擬機創(chuàng)建新磁盤的時候,一定要選“Store virtual disk as a single file”,否則,也會出現(xiàn)內(nèi)核恐慌kennel panic。


四、裝載模塊,實現(xiàn)網(wǎng)絡(luò)功能

1、查看宿主機的網(wǎng)卡模塊信息

[root@nmshuishui?net]#?lsmod?|?grep?e1000 e1000?????????????????170646??0 [root@nmshuishui?net]#

2、查看網(wǎng)卡的詳細信息


[root@nmshuishui?net]#?modinfo?e1000 filename:???????/lib/modules/2.6.32-358.el6.x86_64/kernel/drivers/net/e1000/e1000.ko version:????????7.3.21-k8-NAPI license:????????GPL description:????Intel(R)?PRO/1000?Network?Driver author:?????????Intel?Corporation,?<linux.nics@intel.com> srcversion:?????1D4F1E82BB99EA36D320B1B alias:??????????pci:v00008086d00002E6Esv*sd*bc*sc*i* alias:??????????pci:v00008086d000010B5sv*sd*bc*sc*i* alias:??????????pci:v00008086d00001099sv*sd*bc*sc*i* alias:??????????pci:v00008086d0000108Asv*sd*bc*sc*i* alias:??????????pci:v00008086d0000107Csv*sd*bc*sc*i*

這里查詢到了網(wǎng)卡模塊的路徑,把它復制到/dev/sdb的庫文件下


[root@nmshuishui?net]#?mkdir?-pv?/mnt/sysroot/lib64/modules mkdir:?created?directory?`/mnt/sysroot/lib64/modules' [root@nmshuishui?net]#?cp?/lib/modules/2.6.32-358.el6.x86_64/kernel/drivers/net/e1000/e1000.ko?/mnt/sysroot/lib64/modules/e1000.ko

3、init程序

? ?現(xiàn)在雖然是模塊復制過去了,但是還不能用,而且現(xiàn)在也不滿足我們的流程需要,因為連最起碼的init程序都沒有,如果我們想要這個init,有兩個選擇,第一,移植宿主系統(tǒng)的,但是格式會復雜一些;所以我們還是先自己動手寫腳本吧,把腳本當作init來用,能夠讓小系統(tǒng)跑起來。init一般在sbin目錄下,所以我們要在/dev/sdb2這個分區(qū)上編寫一個init腳本。

[root@nmshuishui?~]#?cd?/mnt/sysroot/sbin/ [root@nmshuishui?sbin]#?vim?init #!/bin/bash #print?Welcome?info echo?-e?"Welcome?to?\033[34m?nmshuishui?soft-linux\033[0m" #mount?wei?wenjian?system?when?the?system?is?running. mount?-n?-t?proc?proc?/proc mount?-n?-t?sysfs?sysfs?/sys #mount?ethernet?driver?autl?when?the?system?is?start. insmod?/lib64/modules/e1000.ko [?$??-eq?0?]?&&?echo?-e?"Load?e1000?module?succeeded????????????????????[\033[32m0K\033[0m]" ifconfig?lo?172.0.0.1/8 ifconfig?eth0?172.16.251.235/16 #mount?the?/dev/sda2?to?make?it?can?be?write?and?read. mount?-n?-o?remount,rw?/dev/sda2?/ #run?/bin/bash /bin/bash

寫完這個init腳本后,我們要把我們要給其一個執(zhí)行權(quán)限,讓其能夠被執(zhí)行;此腳本中還用到mount,insmod這些命令,所以要用上一個腳本把這些命令移植過去。最后還需要把/mnt/boot/grub/grub.conf中的init=/bin/bash換成init=/sbin/init,因為我現(xiàn)在要用這個init腳本來執(zhí)行系統(tǒng)啟動了,再也不需讓/bin/bash來替換了。

4、實現(xiàn)網(wǎng)絡(luò)功能的linux小系統(tǒng) ? ?

? ?上面的步驟完成后,就可以把/dev/sdb掛到另一臺主機上體驗我們的私人訂制小系統(tǒng)了。


轉(zhuǎn)載于:https://my.oschina.net/kcw/blog/350956

總結(jié)

以上是生活随笔為你收集整理的私人定制---打造属于自己的linux小系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。