Floppylinux的制作(将web服务器装到软盘里)

目的:通过这个小项目,学习linux的运行机理和配置过程,并不需要真正的软盘,因为VMware里面已经提供了创   建虚拟软盘的功能,用创建的软盘文件就可以实现本试验。
测试环境:
redhat9.0+VMware6.5

最终实现:制作一个软盘linux系统,并且,floppylinux启动后,自动通过dhcp获得ip并提供http服务。

 

首先在虚拟机上安装redhat,选择工作站安装,并选择上内核开发软件包,这样可以将内核源码包安装到/usr/src/目录下,如果没有选择,可以自己从网上下对应版本的内核。

下面开始操作,不多做解释,不明白的可以google一下原因。

root身份登录系统
进入/usr/src/linux-2.4目录
[root@linuxserver root]# cd /usr/src/linux-2.4

清理源代码树:
[root@linuxserver linux-2.4]# make mrproper

运行配置程序:
[root@linuxserver linux-2.4]# make menuconfig
下面是几乎最简内核配置。
Code maturity level options --->
                           
[*] Prompt for development and/or incomplete code/drivers

Loadable module support
选择N
                           [ ] Enable loadable module support 

Processor type and features --->

                           Processor family选择兼容的386,其他全N

General setup

                           [*] Networking support
                           [*] PCI support
                           (Any)   PCI access mode
                          
(ELF) Kernel core (/proc/kcore) format
                           
[*] Kernel support for ELF binaries
                          
其他全部N

Memory Technology Devices (MTD) --->

Parallel port support --->

Plug and Play configuration --->
以上三个大项中的所有内容都选择N

Block devices --->
                          [*] Normal floppy disk support
                          [*] Loopback device support
                          [*] RAM disk support 
                          [*] Initial RAM disk (initrd) support
                          [*] Per partition statistics in /proc/partitions
以上几项选择Y,其余全选择N.

Multi-device support (RAID and LVM) --->
Cryptography support (CryptoAPI) --->
这两个大项全部选择N.

Networking options --->

                                [*] Packet socket
                                [*] Packet socket: mmapped IO
                                [*] Socket Filtering
                                [*] TCP/IP networking
                                [*] IP: multicasting
                                [*] IP: kernel level autoconfiguration
                                [*] IP: DHCP support
                               
其他全N
 

Telephony Support --->选择N

ATA/IDE/MFM/RLL support --->
                        [*] ATA/IDE/MFM/RLL support
               
子项IDE, ATA and ATAPI Block devices --->
                        
[*] Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
                        [*] Auto-Geometry Resizing support
                        
其余都N.


SCSI support --->
如果需要,就在里面选几项,不需要就全N
下面几个大项:
Fusion MPT device support --->
IEEE 1394 (FireWire) support (EXPERIMENTAL) --->
I2O device support ---> 
全部选择N

 
下面一个大项:
Network device support
选择Y,这样就可以支持网卡了,其余都选择N.然后点Ethernet(10 or 100 Mbit)按钮选择[*] AMD PCnet32 PCI support(必选)和其他你想要的网卡驱动,因为是虚拟机,只选那一个就够了,其他全N

接下来几个大项:
Amateur Radio support --->
IrDA (infrared) support --->
ISDN subsystem --->
Old CD-ROM drivers (not SCSI,not IDE) --->
Input core support --->
全部选择N.

Charcter devices---> 
                           [*] Virtual terminal
                           
[*] Support for console on virtual terminal
                          
其他全选N.

接下来的几个大项:
Multimedia devices--->
Crypto Hardware support--->
全部选择N.

File sytems
必需选的:
                 [*] /proc file system support  
                 [*] Second extended fs support 
                  
其他都可以是N

Console drivers
                 [*] Support for frame buffer devices (EXPERIMENTAL)
                 [*] VESA VGA graphics console
                 [*] Ignore bad video mode selections

                  其他都可以N

 

剩下的几大项,全部为N就可以了
内核配置完毕。


编译内核
[root@linuxserver linux-2.4]# make dep

[root@linuxserver linux-2.4]# make bzImage

如果没有错误,会生成一个600k左右的bzImage内核,还是很小的。
编译好的内核放在/usr/src/linux-2.4.20-8/arch/i386/boot

建立一个专放floppylinux文件的目录
[root@linuxserver root]# mkdir /floppylinux
建立一个做floppylinux根文件系统的目录
[root@linuxserver root]# mkdir /floppylinux/rootfs
拷贝内核
[root@linuxserver root]#cp /usr/src/linux-2.4.20-8/arch/i386/boot/bzImage /floppylinux/

配置busybox

busybox
的配置程序和linux内核菜单配置方式简直一模一样.熟悉用make menuconfig方式配置linux内核的朋友很容易上手.

[root@linuxserver root]#cp busybox-1.00.tar.gz /floppylinux
[root@linuxserver root]#cd /floppylinux
[root@linuxserver floppylinux]#tar zxvf busybox-1.00.tar.gz
[root@linuxserver floppylinux]#cd busybox-1.00
[root@linuxserver busybox]#make menuconfig

下面是需要编译进busybox的功能选项,其他按默认就可以
 Build Options  --->  [*] Build BusyBox as a static binary (no shared libs)


Installation Options---> [*] Don't use /usr

Networking Utilities --->[*]httpd
                                    udhcp Server/Client --->[*] udhcp Client (udhcpc)

Login/Password Management Utilities  --->
                                    [*] getty 
                                    [*] login
                                    [*] Support for /etc/securetty (NEW)
                                    [*] passwd

编译并安装busybox

[root@linuxserver busybox]#make
[root@linuxserver busybox]#make install


编译好后在busybox目录下生成子目录_install

 

制作根文件系统

基本目录结构

[root@linuxserver busybox]#cd /floppylinux /rootfs
[root@linuxserver floppylinux]#mkdir etc usr var tmp proc home root dev
[root@linuxserver floppylinux]#cp -R /floppylinux/busybox-1.00/_install/* /floppylinux/rootfs/

注意在sbin目录的链接要删除重新做。否则会提示找不到命令。做成这个格式的:ln –s /bin/busybox [命令名],它默认的是ln –s ../bin/busybox [命令名],这个放到软盘里后会出问题的,先把命令名记下来,然后再重新连接一次就可以了。几个重要的命令不要忘了,比如initifconfigroutehttpdudhcpc等:

[root@linuxserver sbin]# rm -f *
[root@linuxserver sbin]# ln -s /bin/busybox chroot
[root@linuxserver sbin]# ln -s /bin/busybox httpd
[root@linuxserver sbin]# ln -s /bin/busybox init
[root@linuxserver sbin]# ln -s /bin/busybox pivot_root
[root@linuxserver sbin]# ln -s /bin/busybox reboot
[root@linuxserver sbin]# ln -s /bin/busybox swapoff
[root@linuxserver sbin]# ln -s /bin/busybox swapon
[root@linuxserver sbin]# ln -s /bin/busybox syslogd
[root@linuxserver sbin]# ln -s /bin/busybox halt
[root@linuxserver sbin]# ln -s /bin/busybox ifconfig
[root@linuxserver sbin]# ln -s /bin/busybox klogd
[root@linuxserver sbin]# ln -s /bin/busybox poweroff
[root@linuxserver sbin]# ln -s /bin/busybox route
[root@linuxserver sbin]# ln -s /bin/busybox udhcpc
[root@linuxserver sbin]# ln -s /bin/busybox udhcpc


建立设备文件名
[root@linuxserver floppylinux]#cd /floppylinux/rootfs/dev

直接从/dev下把需要的设备文件拷贝过来.
[root@linuxserver dev]#cp –R /dev/urandom ./
[root@linuxserver dev]#cp -R /dev/console ./
[root@linuxserver dev]#cp -R /dev/null ./
[root@linuxserver dev]#cp -R /dev/zero ./
[root@linuxserver dev]#cp –R /dev/ffy[0-6] ./

[root@linuxserver dev]#cp –R /dev/hd[a-d][0-6] ./

……………………

以下是我拷的设备名:
console fd1 hda1 hda3 hda5 hdb1 hdb3 hdb5 hdc1 hdc3 hdc5 hdd1 hdd3 hdd5   loop2 loop4 ram   ram2 ram4 ram6 ram8 ramdisk tty1 tty3 tty5 zero urandom   fd0      hda hda2 hda4 hdb   hdb2 hdb4 hdc   hdc2 hdc4 hdd   hdd2 hdd4 loop0 loop3 null   ram0 ram3 ram5 ram7 ram9 tty0    tty2 tty4 tty6

其中, urandom ,fd0,hda,ram,ram1,tty1,null,zero,loop1,fb0,fb,console等是必备的.
其他自选。

在文件系统(rootfs)中创建/share/udhcpc目录。拷贝配置文件。

[root@linuxserver root]#cp busybox-1.00/examples/udhcp/simple.script /babylinux/rootfs/share/udhcpc/default.script

确保其可执行

[root@linuxserver udhcpc]chmod u+x default.script

etc目录下创建一个httpd.conf文件,作为httpd的配置文件,可以先保存成空文件。

然后在rootfs里创建www目录,然后在里面添加一个index.html文件。作为首页。

 

建立etc目录下的配置文件

busybox.conf  group  inittab  motd  passwd  resolv.conf  passwd-
fstab  init.d  issue  mtab  profile  

其中init.d是一个目录,busybox-1.00源代码目录下拷贝过来.

[root@linuxserver busybox-1.00]#cp –R examples/bootflopyp/etc/init.d /babylinux/rootfs/etc/

busybox.conf是一个空文件.
其他文件的内容如下:

fstab
/dev/fd0 / ext2 defaults 0 0
none /proc proc defaults 0 0
/dev/cdrom /mnt/cdrom udf,iso9660 noauto,owner,kudzu,ro 0 0
/dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0


group
root:x:0:root


inittab

::sysinit:/etc/init.d/rcS
tty1::respawn:-/bin/getty 38400 tty1
tty4::askfirst:-/bin/sh
::restart:/bin/init
::ctrlaltdel:/bin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/bin/swapoff -a

issue
Floppylinux release 1.0

motd

mtab

passwd  (这里root的密码是123456,busibox的加密方式和一般的linux不同)
root:$$1$$RmyPVMlhpXjJj8iv4w.UI.:0:0:root:/root:/bin/sh

passwd-
root:$$1$$RmyPVMlhpXjJj8iv4w.UI.:0:0:root:/root:/bin/sh

profile
echo
export PS1="["u@"h "w]"#"
echo "Done"
alias ll='ls -l'
alias du='du -h'
alias df='df -h'
alias rm='rm -i'
echo

resolv.conf
nameserver 10.186.122.12
nameserver 10.186.122.13

上面两个ip根据实际情况填写

上面两个文件的内容,你可以直接从你的linux系统里面的相应文件里复制
转到bin下,看是否有getty,如果没有,加上,否则会出错。
[root@linuxserver root]#cd /babylinux/rootfs/bin
[root@linuxserver bin]#ln -s busybox getty

init.d下的文件:
rcS
请确保这个文件是可执行的,否则请改成可执行的:
[root@linuxserver init.d]#chmod u+x rcS

rcS
的内容:
#! /bin/sh

mount -o remount,rw /
/bin/mount -a
>/etc/mtab
hostname FloppyLinux
udhcpc
httpd -p 80 -h /www -c /etc/httpd.conf

制作ramdisk映象文件
VMware虚拟机的设备中,给linux挂上一个软盘,VMware自带了一个自动创建软盘的功能,点“create”就可以创建一个虚拟软盘。

新建一个lilo.conf 配置文件:

prompt
timeout=60
default=linux
boot=/dev/fd0
map=/mnt/floppy/map
install=/mnt/floppy/boot.b
linear
image=/mnt/floppy/bzImage
label=linux
read-only
vga=768
root=/dev/fd0
append="load_ramdisk=1 ramdisk_start=776"

以下命令依次运行就可以完成操作了:

[root@linuxserver floppylinux]mkdir /mnt/ram
[root@linuxserver floppylinux]dd if=/dev/zero of=/dev/ram1 bs=1M count=4
[root@linuxserver floppylinux]fdformat /dev/fd0
[root@linuxserver floppylinux]mkfs.ext2 -m0 /dev/ram1
[root@linuxserver floppylinux]mount /dev/ram1 /mnt/ram
[root@linuxserver floppylinux]cp -R /floppylinux/rootfs/* /mnt/ram
[root@linuxserver floppylinux]umount /dev/ram1
[root@linuxserver floppylinux]dd if=/dev/ram1 of=/babylinux/ramdisk.img
[root@linuxserver floppylinux]gzip -v9 ramdisk.img
[root@linuxserver floppylinux]mkfs.ext2 -m0 /dev/fd0 775
[root@linuxserver floppylinux]mount /dev/fd0
[root@linuxserver floppylinux]cp /floppylinux/bzImage /mnt/floppy/
[root@linuxserver floppylinux]cp /boot/boot.b /mnt/floppy
[root@linuxserver floppylinux]dd if=/floppylinux/ramdisk.img.gz of=/dev/fd0 bs=1k seek=776
[root@linuxserver floppylinux]lilo -C lilo.conf
[root@linuxserver floppylinux]umount /dev/fd0

整个工程已经完成了,你可以重新启动机器,设置电脑从软盘启动.看看有没有成功.从本机打开一个浏览器,输入虚拟机的ip,发现It works。说明你成功了。

这次的主要是操作过程。原理方面初学者可以通过google搜索相关资料。只要细心,一步一步都能成功完成,这个项目是肯定能成功的。 

 

转载于:https://www.cnblogs.com/thesunforever/archive/2009/05/27/Floppylinux.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值