亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > FreeBSD > 正文

教你制作可以隨身攜帶的FreeBSD系統

2024-07-26 00:34:51
字體:
來源:轉載
供稿:網友

  前言

  大家可能見到過很多在軟盤上運行的linux系統,可在軟盤上運行的FreeBSD反而比較少,雖然有PICOBSD,然而很多時候PICOBSD并不能滿足我們的需要,那么可不可以自己制作一個在軟盤上運行的FreeBSD系統呢?答案是肯定的。我在維護著一個Floppy Firewall的PRoject,它是一個基于FreeBSD和ipFilter的運行在軟盤上的防火墻系統,很多網友在使用了Floppy Firewall之后發郵件來詢問如何使FreeBSD運行在一張小小的軟盤上。但由于前段時間事情太多一直沒有時間,今天終于找到時間,所以把制作在軟盤上運行的FreeBSD的過程寫出來與大家分享,由于時間倉促,文中難免有錯誤之處,還請大家指教。


  1、FreeBSD的啟動過程簡介
  當BIOS讀入MBR之后,MBR中的程序讀入硬盤FreeBSD Slice(FreeBSD分區)中的引導程序,引導程序默認情況下會加載/boot/loader,然后loader將加載/kernel,此時 kernel開始檢測一些硬件和做一些初始化。初始化完成后kernel將mount root device,然后啟動系統初始化進程/sbin/init,init將根據/etc/rc中的設置來進行初始化等。

  可以看出我們需要解決的部分就是:引導程序 -> /boot/loader -> /kernel -> /sbin/init -> /etc/rc在了解了啟動過程之后和問題所在之后,我們便可以開始制作軟盤上的FreeBSD了。

  2、初始化軟盤

  首先要做的就是要將軟盤初始化,包括設置disklabel和創建文件系統(格式化成ufs格式)。

  bsd# disklabel -r -w fd0a fd1440

  接下來是安裝引導程序。

  bsd# disklabel -B fd0a

  現在軟盤已經能夠引導了,但因為我們要在它上面放置程序,所以要創建文件系統。

  bsd# newfs fd0a

  剛才已經做好了引導程序,因為引導程序會加載/boot/loader,所以我們還需要將系統中的/boot/loader復制到軟盤中。


bsd# mkdir /fd
bsd# mount /dev/fd0a /fd
bsd# mkdir /fd/boot
bsd# cp /boot/loader /fd/boot/loader

  根據FreeBSD的啟動過程,現在我們已經準備好了引導程序和loader,接下來就要準備內核了。
  3、定制內核
  軟盤的空間有限,所以我們需要定制一個小內核,而不能直接使用系統原來的內核。由于我們只使用軟盤,所以內核中的關于scsi、ata、atapi和raid等這些東西都應該刪除,因為我們不需要IPv6所以INET6也應該刪除,具體留下些什么要看自己的用途了,這沒有什么標準。不過有幾樣是必須的:


options MFS              # 內存文件系統支持
options MD_ROOT      # 使用MD(內存磁盤)設備做root
options UFS              # UFS文件系統支持 
options UFS_ROOT    # UFS ROOT
pseudo-device md    # MD設備支持

  下面是我使用的一個內核配制文件:


#
# GENERIC -- Generic kernel configuration file for FreeBSD/i386
#
#
# $FreeBSD: src/sys/i386/conf/GENERIC,v 1.246.2.38 2002/01/25 17:41:40 murray Exp $
machine                  i386
cpu                         I386_CPU
cpu                         I486_CPU
cpu                         I586_CPU
cpu                         I686_CPU
ident                        "MINI-KERNEL"
maxusers                0                               
#maxusers最好讓系統自動分配,如果設得過大,會占用過多的內存。 
options                   INET                 #InterNETworking
options                   FFS                   #Berkeley Fast Filesystem
options                   FFS_ROOT             #FFS usable as root device [keep this!]
options                   MFS                   #Memory Filesystem
options                   MD_ROOT               #MD is a potential root device
options                   COMPAT_43            #Compatible with BSD 4.3 [KEEP THIS!]
options                   NO_SWAPPING      #Disable swap

device                   isa
device                   pci

# Floppy drives
device                   fdc0 at     isa?    port IO_FD1    irq 6   drq 2
device                   fd0   at     fdc0   drive 0

# atkbdc0 controls both the keyboard and the PS/2 mouse
device                   atkbdc0   at    isa?   port   IO_KBD
device                   atkbd0     at   atkbdc?   irq 1   flags 0x1

device                   vga0        at    isa?

# syscons is the default console driver, resembling an SCO console
device                    sc0         at    isa?   flags 0x100

# Floating point support - do not disable.
device                   npx0        at    nexus?   port IO_NPX   irq 13

# PCI Ethernet NICs that use the common MII bus controller code.
# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
device                    miibus       # MII bus support
device                    fxp            # Intel EtherExpress PRO/100B (82557, 82558)
device                    rl               # RealTek 8129/8139
device                    xl              # 3Com 3c90x
device                    lnc0      
 at     isa?   port 0x280   irq 10   drq 0            # VMware Nic

# Pseudo devices - the number indicates how many units to allocate.
pseudo-device                    loop            # Network loopback
pseudo-device                    ether          # Ethernet support
pseudo-device                    md             # Memory "disks"

  上面的內核基本上是一個系統要運行的最小配制了,當然如果你的機器不同具體也不同,大家按自己的情況來定,我的機器配制是:


CPU: Pentium III 733Mhz
MotherBoard: Via 693A Chipset
NIC: Realtek 8139c

  當配制好之后就是編譯內核了,建議大家使用config的方式來編譯,注意,最后不要使用make install,否則你原來的內核會被替換。


bsd# cd /sys/i386/conf
bsd# config MINI
bsd# cd ../../compile/MINI
bsd# make depend && make kernel

  編譯完成后就會成生kernel這個文件,這時它的體積還是比較大,不過現在不用管它,后面將會介紹如何處理它。
  4、編譯系統程序
  現在就要準備系統所需要的基本程序了,首先最基本的是init和sh,init是所有進程的父進程,它負責進行一些初始化工作,它將是kernel引導完成后要運行的第一個用戶進程,而sh用于解釋/etc/rc中的命令。在UNIX中大部程序都使用了共享庫,這有利減少磁盤空間的占用,這對于使用硬盤是非常有用的,然而對于軟盤就不太適用了,因為單一個大部分程序都要使用的庫libc.so就有500多K,加上其它的庫軟盤根本就裝不下。

  我們可以發現,大部分時候一個程序只是用到了庫中的某個函數,但同樣也要加載整個庫,所以我們可以使用靜態編譯來使程序只包含它使用的那部分函數,這樣可以減少程序的大小。

  不過這樣問題同樣存在,如果只有少數程序這到沒有什么,一旦程序很多時,那么空間問題同樣存在。如果會C語言的朋友都知道,其實每一個程序中有很大一部分函數是相同的,比如printf,這個函數在大部分程序中都會用到,如果每個程序都包含一段printf的代碼,那么如果有100個程序的話,就會包含 100個這樣的代碼,然而這些代碼都是相同的,實際上有99個都是浪費了空間,那么可不可以讓一些程序在靜態編譯的情況下也能夠共享一些函數呢?要知道答案,往下接著看。

  幸好,PICOBSD為我們提供了這樣的一個機制,使得程序即不用加載標準庫也可以利用其它程序中的相同函數,這就是crunch(crunch好像是世界頂級黑客高手John Draper的網名,不知道這與他有沒有關系。crunch是將所有需要的軟件編譯在一個文件中即crunch,然后當中的程序通過symbol link的方式link到它上面,這樣便可以使用相應的程序(類似于linux中的busybox),同時又節約了空間。PICOBSD為我們提供了一個自己定制crunch的機會,在FreeBSD4.5 Release(注:4.8 Release中的crunch無法定制,至少我沒有找到,所以建議大家使用4.5)中,crunch的配制文件是 /usr/src/release/picobsd/custom/crunch1/crunch.conf,編輯它以選擇你需要哪些軟件,下面以一個例子來說明它的用法。


# $FreeBSD: src/release/picobsd/router/crunch.conf,
v 1.1.2.2 2001/02/20 02:53:35 luigi Exp $
#
# NOTE: the string "/usr/src" will be automatically replaced with the
# correct value set in 'build' script - you should change it there 
# Default build options
buildopts -DNOPAM -DRELEASE_CRUNCH -DNOSECURE -DNOCRYPT -DNONETGRAPH -DNOIPSEC

# other sources
srcdirs /usr/src/bin
srcdirs /usr/src/sbin/i386
srcdirs /usr/src/sbin
srcdirs /usr/src/usr.bin
srcdirs /usr/src/usr.sbin
srcdirs /usr/src/gnu/usr.bin
srcdirs /usr/src/gnu/usr.sbin
srcdirs /usr/src/libexec
# sources for ns & vm
srcdirs /usr/src/release/picobsd/tinyware

  以下為你所需要在crunch包含的程序列表,以空格分隔。


progs dmesg ping ifconfig route hostname
progs cp rm ls cat test mkdir less
progs uname sysctl
progs init sh reboot

  ln是表示建立一個別名,如ln less more,表示當執行more的時候實際上是執行less,ln less more。以下是指定編譯時需要的庫:


libs -lncurses -lmytinfo -lipx 
libs -lz -lpcap -lalias
libs -ledit -lutil -lmd -lcrypt -lmp -lgmp -lm -lkvm
libs -lgnuregex -ltelnet

  當編輯好crunch.conf之后,你就可以開始編譯crunch了:

  bsd# make

  這時會生成一個名為crunch1的程序,我們要的就是它了。
  5、建立內存磁盤
  大家可以看到crunch1加上我們剛才編譯的內核和loader程序,已經超出了軟盤的容量,同時為了加速程序的運行我們需要使用MD(內存磁盤)來解決這個問題,MD將作為系統的根文件系統和用來存放系統程序。對于內存磁盤的大小一般不易太大,因為這樣會占用過多的內存,下面我們就以建立一個3M的內存磁盤為例說明如何建立內存磁盤:


bsd# cd /root
bsd# dd if=/dev/zero of=bsd bs=1k count=3072        # 生成一個3M的文件,用來做MD
bsd# vnconfig -c -s labels vn0c bsd                    
 # 使用bsd來創建一個vn設置,以便在其中存放程序
bsd# disklabel -w -r vn0c auto                     # 建立disklabel
bsd# disklabel -B vn0c                            # 安裝啟動代碼
bsd# newfs vn0c # 創建UFS文件系統
bsd# mount /dev/vn0c /mnt # 將vn0c即bsd mount到/mnt

  接下來要做的就是建立目錄結構,具體建立哪些目錄這要視需要決定,本例中需要建立如下目錄:


bsd# mkdir /mnt/etc
bsd# mkdir /mnt/sbin
bsd# mkdir /mnt/bin
bsd# mkdir /mnt/dev

  然后將crunch1復制到/mnt/sbin中,再將剛才編譯進crunch1中的那些命令分別做上symbol link:


bsd# cp /usr/src/release/picobsd/custom/crunch1/crunch1 /mnt/sbin
bsd# cd /mnt/sbin
bsd# ln -s ./crunch1 init                      # init必須在/mnt/sbin目錄中
bsd# ln -s ./crunch1 reboot
bsd# ln -s ./crunch1 sysctl
bsd# ln -s ./crunch1 ifconfig
bsd# ln -s ./crunch1 route
bsd# ln -s ./crunch1 ping
bsd# ln -s ./crunch1 dmesg
bsd# cd /mnt/bin
bsd# ln -s ../sbin/crunch1 sh                  # sh必須在/mnt/bin目錄中
bsd# ln -s ../sbin/crunch1 hostname
bsd# ln -s ../sbin/crunch1 cp
bsd# ln -s ../sbin/crunch1 rm
bsd# ln -s ../sbin/crunch1 ls
bsd# ln -s ../sbin/crunch1 cat
bsd# ln -s ../sbin/crunch1 test
bsd# ln -s ../sbin/crunch1 mkdir
bsd# ln -s ../sbin/crunch1 less
bsd# ln -s ../sbin/crunch1 uname
bsd# ln -s ../sbin/crunch1 more

  6、編寫啟動腳本

  因為我們的系統只是為了測試在軟盤上運行FreeBSD,因而這里的啟動腳本非常簡單只是讓系統可以工作,沒有做其它的工作,其內容如下:


#!/bin/sh
# Floppy BSD init script 
PATH=/sbin:/bin
HOME=/
export PATH HOME

echo
echo "Hello, it's my Floppy BSD"
echo

  因為沒有使用登錄驗證,所以這里只是簡單的一直運行shell


while : ; do
/bin/sh
done
  7、建立設備文件
  現在需要建立一些基本的設備文件,我們使用/dev/MAKEDEV來完成這些操作:


bsd# cd /mnt/dev
bsd# cp /dev/MAKEDEV .
bsd#./MAKEDEV std # 建立標準設備
bsd# rm MAKEDEV

  8、最后工作

  到目前為止,我們的啟動部分,Kernel和內存磁盤都已經準備好了,下面就開始整合它們了。

  因為init啟動的時候會查找login class中的daemon這個類別,如果沒有則會出現錯誤提示,為了使init不報錯,我們還需要復制/etc/login.conf到/mnt/etc中: bsd# cp /etc/login.conf /mnt/etc/login.conf因為loader支持直接加載gzip壓縮格式的文件,這為我們節約磁空提供了方便,同時也解決了我們空間不夠的問題,現在壓縮kernel和內存磁盤bsd:


bsd# cd /root
bsd# cp /sys/compile/MINI/kernel .
bsd# gzip -9 kernel                   # 使用最大壓縮率,將生成文件kernel.gz
bsd# umount /mnt
bsd# gzip -9 bsd              # 使用最大壓縮率,將生成文件bsd.gz

  然后編輯loader的配制文件:


bsd# cd /fd/boot
bsd# vi loader.rc

  輸入:


load kernel
load -t mfs_root bsd         # 表示將bsd.gz以md的方式加載,并且成為root device

  存盤退出,將kernel.gz和bsd.gz復制到軟盤中:


bsd# cd /root
bsd# cp kernel.gz /fd
bsd# cp bsd.gz /fd
bsd# umount /fd

  現在用你的這張軟盤就可以啟動你的機器,如果一切正常的話,你將看到"Hello, it's my Floppy BSD"的提示,并且看到可愛的shell符"#"了,是不是很有滿足感呢?:)到此為止一個基本的BSD系統已經完成了,如果你想繼續擴展Floppy BSD的功能,那就按照上面的方法自己做吧!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
黄色一区二区在线| 永久555www成人免费| 精品香蕉一区二区三区| 中文字幕国产精品| 在线视频中文亚洲| 欧美一区二区三区艳史| 成人国产亚洲精品a区天堂华泰| 日韩精品免费在线视频观看| 国产精品黄页免费高清在线观看| 久久久久久国产精品三级玉女聊斋| 日本国产欧美一区二区三区| 欧美极品少妇xxxxⅹ裸体艺术| 国产午夜精品美女视频明星a级| 日韩在线视频观看正片免费网站| 正在播放国产一区| 91精品综合久久久久久五月天| 久久手机精品视频| 中文字幕日韩av综合精品| 色先锋久久影院av| 亚洲天堂男人天堂女人天堂| 欧美一级大片在线免费观看| 精品久久中文字幕久久av| 色偷偷噜噜噜亚洲男人| 亚洲欧美变态国产另类| 国产久一一精品| 国产精品久久二区| 不卡在线观看电视剧完整版| 国产综合在线视频| 中文字幕亚洲欧美日韩在线不卡| 亚洲精品国精品久久99热一| 欧美日韩在线免费| 久久精品国产99国产精品澳门| 国产婷婷97碰碰久久人人蜜臀| 7m精品福利视频导航| 国产日韩精品综合网站| 欧美亚洲另类视频| 欧美日韩国产成人在线观看| 欧美理论电影在线观看| 国精产品一区一区三区有限在线| 亚洲91精品在线| 亚洲在线免费看| 久久国产加勒比精品无码| 欧美黑人性生活视频| 岛国av一区二区在线在线观看| 日韩高清人体午夜| 欧美大人香蕉在线| 成人免费福利视频| 亚洲乱码一区av黑人高潮| 国产精品色午夜在线观看| 欧美肥婆姓交大片| 欧美野外猛男的大粗鳮| 日韩精品日韩在线观看| 人人爽久久涩噜噜噜网站| 国产精品丝袜高跟| 国产视频精品xxxx| 亚洲aaa激情| 成人免费视频a| 中文字幕精品视频| 亚洲精品国产成人| 日韩在线观看免费全| 日韩免费不卡av| 国产亚洲精品久久| 国产精品久久久av久久久| 成人av资源在线播放| 成人精品在线观看| 国产网站欧美日韩免费精品在线观看| 一本一本久久a久久精品牛牛影视| 亚洲国产欧美日韩精品| 国产成人精品视频| 成人久久久久久| 国产精品av在线播放| 国产精品激情自拍| 91成人天堂久久成人| 国产精品嫩草影院久久久| 日本欧美国产在线| 懂色av中文一区二区三区天美| 国产精品专区第二| 国产精品自产拍高潮在线观看| 欧美影院在线播放| 最新亚洲国产精品| 91天堂在线视频| 国产精品久久久久久久久久新婚| 成人免费福利在线| 欧美大片在线看免费观看| 欧美激情综合色| 亚洲国产另类 国产精品国产免费| 国产精品久久91| 操人视频在线观看欧美| 欧美刺激性大交免费视频| 97人人做人人爱| 日韩精品免费视频| 久久综合国产精品台湾中文娱乐网| 中文字幕日韩在线观看| 亚洲激情电影中文字幕| 国产精品电影在线观看| 欧美xxxx做受欧美.88| 亚洲综合色激情五月| 国产精品扒开腿爽爽爽视频| …久久精品99久久香蕉国产| 国产精品久久久久免费a∨大胸| 最近2019中文免费高清视频观看www99| 亚洲精品之草原avav久久| 欧美一性一乱一交一视频| 欧美黑人巨大精品一区二区| 亚洲精品电影网| 91久久中文字幕| 欧美最猛性xxxxx免费| 日韩网站在线观看| 午夜欧美大片免费观看| 国产男女猛烈无遮挡91| 久久精品成人欧美大片古装| 欧美日韩福利电影| 91精品在线播放| 亚洲美腿欧美激情另类| 欧洲午夜精品久久久| 国产精品高潮呻吟久久av黑人| 国产精品专区h在线观看| 日韩高清有码在线| 亲子乱一区二区三区电影| 日韩av在线网站| 国产成人综合精品在线| 久久精品国产一区二区三区| 亚洲国产精品成人av| 免费不卡在线观看av| 九九九热精品免费视频观看网站| 青草青草久热精品视频在线网站| 亚洲欧美在线看| 日韩中文字幕在线精品| 插插插亚洲综合网| 亚洲国产成人av在线| 九九热这里只有精品免费看| www高清在线视频日韩欧美| 成人在线免费观看视视频| 92国产精品久久久久首页| 成人网页在线免费观看| 亚洲综合在线中文字幕| 精品欧美aⅴ在线网站| 欧美激情中文字幕乱码免费| 韩国精品美女www爽爽爽视频| 热久久美女精品天天吊色| 最近更新的2019中文字幕| 久久久精品视频在线观看| 精品亚洲永久免费精品| 欧美中文字幕视频在线观看| 欧美电影免费观看高清完整| 最近中文字幕日韩精品| 国产精品久久久久久久久久久新郎| 亚洲国产中文字幕在线观看| 日本精品视频在线观看| 亚州国产精品久久久| 中文国产亚洲喷潮| 久久久亚洲网站| 国产精品视频yy9099| 95av在线视频| 日韩欧美亚洲综合| 国产精品大片wwwwww| 91社影院在线观看| 国产精品热视频| 久久精品2019中文字幕| 亚洲欧美一区二区激情| 精品久久香蕉国产线看观看gif| 欧美亚洲第一区| 成人国产精品久久久久久亚洲| 3344国产精品免费看|