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

歡迎訪問 生活随笔!

生活随笔

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

linux

制作微型linux

發(fā)布時間:2025/3/17 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 制作微型linux 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

----更新:一個腳本可以一鍵制作這個小Linux,功能沒有寫的那么多,基本的開機可以了,見附件mklinux----

?

先簡述一下開機原理:

機器加電--bios讀取cmos設定--把控制權(quán)交給第一個開機裝置MBR,如如果第一個開機裝置MBR中沒有bootloader則交給第二個,依次類推--MBR中的bootloader程序根據(jù)在硬盤中的設置讀取內(nèi)核與一個叫initrd的虛擬文件系統(tǒng),因為現(xiàn)在的硬盤大都是SATA與SCSI的,內(nèi)核中不集成這個驅(qū)動,通過加載Initrd這個虛擬的文件系統(tǒng)來加載SCSI的驅(qū)動,又有同學問了:為什么不把驅(qū)動做到內(nèi)核中呢?這個是因為SCSI的驅(qū)動很多,做進去內(nèi)核會很臃腫--畢竟是虛擬的文件系統(tǒng),所以要切換到真實的文件系統(tǒng)上來,內(nèi)核來完成根切換--完成根切換后內(nèi)核把控制權(quán)交給init程序--init讀取/etc/inittab它的配置文件,根據(jù)配置文件完成初始化。通過看配置文件我們可知inittab完成這些工作1.默認開機級別 2.調(diào)用/etc/rc.d/rc.sysinit完成環(huán)境初始化 3.根據(jù)默認的開機級別啟動不同的服務腳本 /etc/rc.d/rc 這個腳本完成的任務 4.設定Ctrl+Alt+Del鍵的作用 5.設定電源UPS管理 6.調(diào)用/sbin/mingetty啟動6個終端 。6.如果是5級別的話啟動圖形界面。OK ?下面再來說說rc.sysinit完成的工作:1.初始化網(wǎng)絡,設定主機名 2.啟動SELinux 3.加密裝置 4.設置系統(tǒng)時鐘 5.加載驅(qū)動 6.啟動軟raid與LVM 7.啟用quota 8.可寫方式重新掛載/ 9.啟動日志 ? ? 基本原理就是這樣的

下面在vmware上來制作一個微型的Linux系統(tǒng),能基于passwd認證,網(wǎng)絡可用,iptables可用,ssh可用,vi可用,其它的都舍去了,其實它就是一個tiny防火墻。

環(huán)境:vmware8.0 ?redhat5.8(宿主機) 內(nèi)核2.6

一.為宿主機添加一塊2G大小scsi硬盤,開機。

這個我就不演示了。

二.在新建的硬盤上建立系統(tǒng)

1.對新建的硬盤分區(qū)

  • fdisk?/dev/sdb??????????????##這個是新加的那個硬盤?
  • n?
  • p?
  • 1?
  • 1?
  • +50M?????????????????????????##新建一個分區(qū)為/boot分區(qū)?
  • n?
  • p?
  • 2?
  • [回車]?
  • +1G??????????????????????????##新建一個分區(qū)為/分區(qū)?
  • w??????????????????????????????##保存?
  • #?partprobe?/dev/sdb????##不用重啟機器,立馬分區(qū)生效?
  • #?mke2fs?–j?/dev/sdb1?
  • #?mke2fs?–j?/dev/sdb2??##格式化兩個分區(qū)?
  • #?mkdir?–pv?/mnt/{boot,sysroot}???##建立兩個目錄,用于掛載sdb1,sdb2?
  • #?mount?/dev/sdb1?/mnt/boot??
  • #?mount?/dev/sdb2?/mnt/sysroot????##掛載它們???
  • 2.提供內(nèi)核

  • #?cp?/boot/vmlinuz-`uname?-r`?/mnt/boot/vmlinuz-tiny????##用宿主機的內(nèi)核?
  • 3.提供Initrd這個用于切換根分區(qū)的文件,這個文件不同系統(tǒng)是不一樣的,下面我們修改原來的。

  • #?cp?/boot/initrd-`uname?-r`.img?/tmp/initrd.gz?
  • #?cd?/tmp?
  • #?gzip?–d?initrd.gz?????##解壓后type?initrd可知為cpio壓縮的,下面用cpio解壓?
  • #?mkdir?init?
  • #?cd?init?
  • #?cpio?–ivcdu?<?../initrd?????##cpio解壓?
  • #?vi?init?????##編輯它?
  • #resume?LABEL=SWAP-sda3???##注釋這個swap分區(qū),因為我們沒有啟用swap?
  • ?
  • mkrootdev?-t?ext3?-o?defaults,ro?/dev/sda2????##把我們新建的第二個分區(qū)將來當作根分區(qū),看好是sda2
  • ##因為把這個磁盤放到新機器上它就是sda2?
  • 保存,退出

  • #?find?.?|?cpio?–ovcB?|?gzip?–9?>?/mnt/boot/initrd-tiny?
  • 3.為磁盤安裝grub,分兩個步驟,先安裝/boot/grub這個配置部分,再安裝MBR中的程序部分

  • #?grub-install?–root-directory=/mnt?/dev/sdb????##程序會到/mnt下找boot目錄,在boot下生成grub的配置目錄,
  • ##/dev/sdb代表安裝到MBR中?
  • ?
  • #?ls?/mnt/boot?查看是否生成了grub目錄?,如果有則繼續(xù)?
  • #?grub?
  • >root?(hd1,0)/?????????##輸入?root?(hd1,0)/?按TAB查看有沒有剛才拷貝的vmlinuz-tiny,有的話繼續(xù)?
  • >setup?(hd2)???????????##安裝到MBR中?
  • 為grub建立配置文件/mnt/boot/grub/grub.conf?
  • #?vi?/mnt/boot/grub/grub.conf?
  • ?
  • default=0?
  • timeout=3?
  • title?A?Tiny?Linux??
  • ????root?(hd0,0)?
  • ????kernel?/vmlinuz-tiny?
  • ????initrd?/initrd-tiny?
  • 到此grub安裝完畢

    4.在/mnt/sysroot 下建立必備的目錄

  • #?mkdir?-pv?/mnt/sysroot/{root,sbin,bin,usr/{lib,sbin,bin},etc/rc.d,var,\
  • proc,sys,tmp,dev,lib,home}?
  • 5.移植init這個程序到/mnt/sysroot下

  • #?which?init????#可知Init在/sbin/下?
  • #?ldd?/sbin/init?查看依賴的庫文件??
  • 把init與下面顯示的庫文件復制到相對應的位置

  • #?cp?/sbin/init?/mnt/sysroot/sbin/init?
  • #?cp?/lib/libsepol.so.1?/mnt/sysroot/lib?
  • #?cp?/lib/libselinux.so.1?/mnt/sysroot/lib?
  • #?cp?lib/libc.so.6??/mnt/sysroot/lib?
  • #?cp?/lib/libdl.so.2?/mnt/sysroot/lib?
  • #?cp?/lib/ld-linux.so.2?/mnt/sysroot/lib??
  • 6.以同樣方式移植bash,方法同上,我就不寫了

    7.有了這兩個程序,在添加如下配置文件系統(tǒng)就可以啟動了

  • #?vi?/mnt/sysroot/etc/inittab?
  • ?
  • id:3:initdefault:?
  • si::sysinit:/etc/rc.d/rc.sysinit?
  • #?vi?/etc/rc.d/rc.sysinit?
  • ?
  • #!/bin/bash?
  • export?PATH=/bin:/sbin:/usr/bin:/usr/sbin?
  • echo?"Welcome?to?Tiny?Linux"?
  • /bin/bash?
  • chmod?+x?/mnt/sysroot/etc/rc.d/rc.sysinit?
  • 到此系統(tǒng)基本可以啟動了,下面測試

    休眠宿主機,新建虛擬機,選擇磁盤時選已存在的磁盤,用剛才的磁盤

    測試能否啟動到bash,如果能則繼續(xù)

    三.添加一些命令,并支持密碼認證,hostname,并支持網(wǎng)絡

    你是否發(fā)現(xiàn)copy命令與庫時很麻煩,下面提供個腳本cp.sh,用來copy命令與庫的,關閉tinylinux,打開宿主機繼續(xù)吧

  • #?vi?cp.sh?
  • ?
  • function?cpbin?{?
  • ????????if?which?$1?&>?/dev/null;?then?
  • ?????????????????local?binpath=$(which?--skip-alias?$1)??
  • ????????else?
  • ?????????????????return?10?
  • ????????fi???
  • ????????if?[?!?-d?/mnt/sysroot${binpath%/*}?];then?
  • ?????????????????mkdir?-p?/mnt/sysroot${binpath%/*}?
  • ????????fi???
  • ????????if?[?!?-e?/mnt/sysroot/$binpath?];then?
  • ????????????????cp?$binpath?/mnt/sysroot/$binpath?
  • ????????else?
  • ????????????????return?11?
  • ????????fi???
  • }?
  • ?
  • function?cplib?{?
  • ????????if?which?$1?&>/dev/null;then?
  • ????????????????local?binpath=$(which?--skip-alias?$1)?
  • ????????else?
  • ????????????????return?10?
  • ????????fi???
  • ????????modules=$(ldd?$binpath?|?grep?-o?'[^[:space:]]*/lib/[^[:space:]]\+')?
  • ????????for?I?in?$modules?
  • ????????do???
  • ????????????????[?!?-e?/mnt/sysroot$I?]&&?cp?$I?/mnt/sysroot/$I?
  • ????????done?
  • }?
  • while?:?;do?
  • ????????read?-p?"A?command?(q?to?exit):?"?cmd?
  • ????????if?[?$cmd?!=?"q"?];then?
  • ????????????????stat=?
  • ????????????????cpbin?$cmd?
  • ????????????????stat=$??
  • ????????????????if?[?$stat?==?"10"?]?;then?
  • ????????????????????????echo?"No?such?Command"?
  • ????????????????elif?[?$stat?==?"11"?];then?
  • ????????????????????????echo?"$cmd?have?been?existed?"?
  • ????????????????else?
  • ????????????????????????cplib?$cmd?
  • ????????????????fi?
  • ????????else?
  • ???????????????break;?
  • ????????fi?
  • done?
  • 給個執(zhí)行權(quán)限,就拷貝需要的命令吧!!

    1.拷貝 ls mv cat cp ifconfig ping vi iptables mingetty login depmod modprobe hostname mount shudown reboot sync halt poweroff

  • #?sh?cp.sh?輸入以上命令即可?
  • 2.修改/mnt/sysroot/etc/inittab 如下?

  • id:3:initdefault:?
  • si::sysinit:/etc/rc.d/rc.sysinit?
  • 1:2345:respawn:/sbin/mingetty?tty1????????##就添加了幾個虛擬終端?
  • 2:2345:respawn:/sbin/mingetty?tty2?
  • 3:2345:respawn:/sbin/mingetty?tty3?
  • init 調(diào)用mingetty來啟動虛擬終端,mingetty會調(diào)用login來讓用戶登陸,而login會調(diào)用pam接口來認證用戶的賬號密碼,pam對這個tinylinux來說,顯的太大了,于是我們用修改過的login程序直接調(diào)用/etc/passwd /etc/shadow 來認證吧,上面移植那個login是為了庫文件,修改過的login在附件中

    4.下載login,copy到/mnt/sysroot/bin下,并給執(zhí)行權(quán)限

  • #?chmod?+x?/mnt/syroot/bin/login?
  • 5.建立/etc/passwd /etc/shadow ?/etc/group ,直接用系統(tǒng)上的吧

  • #?grep?^root?/etc/passwd?>?/mnt/sysroot/etc/passwd?
  • #?grep?^root?/etc/group?>?/mnt/sysroot/etc/group?
  • #?grep?^root?/etc/shadow?>?/mnt/sysroot/etc/shadow?
  • #?chmod?400?/mnt/sysroot/etc/shadow?
  • 或許你以為認證應該完了,其實login會調(diào)用/lib/libnss開頭的庫文件,把它們與它們的配置文件/etc/nsswitch.conf 移植過去

  • #?cp?/etc/nsswitch.conf?/mnt/sysroot/etc/?
  • #?cp?/lib/libnss*?/mnt/sysroot/lib/?
  • 6.一般內(nèi)核編譯時網(wǎng)卡驅(qū)動被編譯成模塊,比如vmware需要的pcnet32模塊,所以我們要移植過去,當然還有它依賴的mii模塊。iptables需要的模塊有很多,我們不可能一個個的加載. # find /lib/modules/2.6.18-308.el5/kernel/ | grep netfilter ?發(fā)現(xiàn)netfilter的模塊的主要目錄,移植過去。

  • #?modinfo?pcnet32????##查看pcnet32的位置,及依賴模塊?
  • #?modinfo?mii????##查看mii的位置,沒有依賴任何模塊?
  • 移植它們

  • #?mkdir?-pv?/mnt/sysroot/lib/modules/2.6.18-308.el5/kernel/drivers/net/ipv4?
  • ?
  • #?cp?/lib/modules/2.6.18-308.el5/kernel/drivers/net/pcnet32.ko?\
  • /mnt/sysroot/lib/modules/2.6.18-308.el5/kernel/drivers/net/?
  • ?
  • #?cp??/lib/modules/2.6.18-308.el5/kernel/drivers/net/mii.ko?\
  • /mnt/sysroot/lib/modules/2.6.18-308.el5/kernel/drivers/net/?
  • ?
  • #?cp?/lib/modules/2.6.18-308.el5/kernel/net/netfilter/???\
  • /mnt/sysroot/lib/modules/2.6.18-308.el5/kernel/drivers/net/?
  • ?
  • #?cp?/lib/modules/2.6.18-308.el5/kernel/net/ipv4/netfilter/?\
  • /mnt/sysroot/lib/modules/2.6.18-308.el5/kernel/drivers/net/ipv4/?
  • #?chroot?/mnt/sysroot/?
  • #?depmod??????????????##生成依賴關系以便modprobe加載?
  • iptables 依賴/lib/iptables 下的模塊,移植過去

  • #?cp?/lib/iptables?/mnt/sysroot/lib/?
  • 7.修改/mnt/sysroot/etc/rc.d/rc.sysinit,如下

  • #!/bin/bash?
  • ?
  • export?PATH=/bin:/sbin:/usr/bin:/usr/sbin?
  • echo?"Welcome?to?Tiny?Linux"?
  • modprobe?pcnet32?
  • modprobe?iptable_filter?
  • modprobe?iptable_nat?
  • mount?-o?rw?/?
  • ifconfig?eth0?172.16.1.2/16?
  • hostname?www.laoguang.me?
  • export?PS1='[\u@\h?\W]\$'?
  • 休眠宿主機,啟動tinylinx,哇,需要驗證了,輸入你宿主機root的賬號密碼,登陸成功,這時ifconfig 你會發(fā)現(xiàn)eth0有ip了,世界立馬美好了好多。

    8.移植/etc/sysctl.conf 并修改ip_forward的值

  • #?cp?/etc/sysctl.conf?/mnt/sysroot/etc/?
  • #?vi?/mnt/sysroot/etc/sysctl.conf?
  • ?
  • net.ipv4.ip_forward?=?1?
  • 開機測試

  • #?iptables?-A?INPUT -p?icmp?-j?DROP??
  • ping 一下別的主機測試

    頭疼,移植Dropbear實現(xiàn)ssh有空再寫。。。。。。。。

    轉(zhuǎn)載于:https://blog.51cto.com/laoguang/1061950

    總結(jié)

    以上是生活随笔為你收集整理的制作微型linux的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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