Chinaunix首页 | 论坛 | 博客
  • 博客访问: 298904
  • 博文数量: 58
  • 博客积分: 2763
  • 博客等级: 少校
  • 技术积分: 731
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-04 19:07
文章分类

全部博文(58)

文章存档

2011年(55)

2009年(1)

2008年(2)

分类: LINUX

2011-08-14 12:03:08

 
本人的制作是借助于虚拟机,以你的虚拟机作为宿主机,在虚拟机上新加一块SCSI的硬盘,大小为8G,由于之前的磁盘也是SCSI,因此添加新SCSI磁盘后就是/dev/sdb。我这里以/dev/sdb来进行演示。此脚本的功能就是一脚生成小linux。生成之后你把这块磁盘安装到你的虚拟机上就可以使用了。
    我先把每一部分单独写出来,方便你查阅。总共六个部分:第一部分是创建分区,这
一部分是针对特定的磁盘的创建,你可以修改成适合你自己的;第二部分是挂载分区;建立两个目录分别为/mnt/boot和/mnt/sysroot。一个作为引导分区,一个作为根分区;第三部分是初始化根文件系统;第四部分是添加相关命令;第五部分是引导分区的设定;第六部分就是设定grub。
    最后我会整合到一个脚本里,你只需要执行一下这个脚本,你的小linux就诞生了。
    最后进行完之后,将虚拟机关掉,选择编辑虚拟机设置,选择Options选项卡,查看右下角的工作目录,然后到你工作目录找一下你刚才配置的磁盘。因为建立虚拟机要
用到。选择新建虚拟机,当你进行到选择磁盘的时候,这里选择“使用一个存在的虚拟磁盘”,点下一步,找到你刚才配置好的磁盘,把它添加进来,就可以了。然后你启动此虚拟机就可以了。
 
    我会把我写的脚本作为附件附带上去你可以使用。总共有七个,第一个也就是第一部分是fenquchongjian.sh,第二个是guazaimulu.sh,第三个是rootfs.sh,第四个是copy.sh,第五个是yindaofenqu.sh,第六个是grub.sh。最后一个是整合过的,叫zhenghe.sh,不过这里有个login程序,不能用系统自带的,我会给你一个,也在附件中有。当你解压出来后,把login弄到你的虚拟机上,放在/root下。最后整合的功能比较完善,如果你想试试就赶快来吧。
 
第一部分
一、写一个脚本,实现将一个硬盘中原有分区信息全部删除,并重新将其分为三个区:
   1、提示用户指定要操作的磁盘,为了后面的方便,这里你得输入/dev/sdb。若你只想执行
这个脚本
   2、提示用户接下来操作会破坏硬盘上的所有数据,并询问用户是否继续进行;形如:
Continue(y/N)?
   如果用户选择继续,如果此硬盘中有分区,则抹除此硬盘上的所有分区信息(如果是
仍处理挂载状态的分区,则需要先卸载);否则退出;
3、将此硬盘分为三个主分区:
  第一个主分区,50M,ext3文件系统
  第二个主分区,512M,ext3文件系统
  第三个主分区,256M,swap文件系统
要求:上面第2和第3步要求用函数实现;函数执行结束要有返回值;
 
第二部分:
二、写一个脚本,实现将上述步骤中创建的分区挂载至某目录:
1、写一个函数,接受两个参数,完成以下功能:   
      参数1为/boot分区对应的设备,传递至函数之后将其挂载至/mnt/boot;
      参数2为/分区对应的设备,传递至函数之后将其挂载至/mnt/sysroot;
      说明:上述的挂载点/mnt/boot和/mnt/sysroot如果事先不存在,需要先创建;如果事
   先存在,且已经被某设备挂载使用,则需要先卸载原来挂载的设备;
2、将第一个脚本中实现的分区1和分区2传递给些函数执行;
 
第三部分:
三、写一个脚本,初始化rootfs
    1、写一个函数,接受一个参数(参数为第二步骤中挂载的/mnt/sysroot),完成以下功
能;
       1)判断/mnt/sysroot是否存在并且如果存在是否是挂载的一个独立的分区,如果是,
则继续后面的操作;否则,则提示用户错误信息,而后询问是否继续;
       2)在/mnt/sysroot目录中创建如下子目录:
boot, proc, sys, dev, home, root, etc/{rc.d,sysconfig,init.d}, bin, sbin,
lib, usr/{bin,sbin,lib,include}, var/{log,run}, tmp, mnt, opt, media;
       3)将上面创建的tmp目录的权限设置为1777;
       4)创建文件/mnt/sysroot/etc/inittab,内容如下:
         id:3:initdefault:
         si::sysinit:/etc/rc.d/rc.sysinit
       5)创建文件/mnt/sysroot/etc/rc.d/rc.sysinit,内容如下:
         #!/bin/bash
         echo -e "\t\tWelcome to \033[31;1mLittle\033[0m Linux..."
  
         mount -n -o remount,rw /
         mount -n -a
         /bin/bash
  
         而后给此文件以执行(755)权限;
      6)创建文件/mnt/sysroot/etc/fstab,内容如下:
        /dev/sda2        /                    ext3    defaults        0 0
        /dev/sda1        /boot                ext3    defaults        0 0
        sysfs            /sys                 sysfs   defaults        0 0
        proc             /proc                proc    defaults        0 0
2、执行此函数
 
第四部分:
四、写一个脚本,实现二进制命令及对应库文件的拷贝:
    1、写一个函数,接受两个参数(参数1为要复制的命令,参数2为复制命令对应的目标位
置,如/mnt/sysroot),完成以下功能:
      1)判断参数1所对应的命令是否存在;如果存在:
        取得其目录路径,及命令对应的文件的名字;
        而后将此命令复制到参数2对应的路径下,跟此命令原来的目录路径相同的子目录中
;比如,如果参数2为/mnt/sysroot,而命令路径为/bin/ls,则需要将ls复制到/mnt/sysroot/bin目录;如果命令路径为/usr/bin/man,则需要将man复制至/mnt/sysroot/usr/bin/中去;
      2)复制命令的同时,判定此命令所依赖的库文件,而后对每一个库文件做如下操作:
         取得其目录路径,及命令对应的文件的名字;
         而后将此命令复制到参数2对应的路径下,跟此命令原来的目录路径相同的子目录中
;但如果此库文件已经复制过,则不需要再次复制;
2、执行此函数;
 
第五部分:
五、写一个脚本,实现引导分区的设定:
1、写一个函数,接受一个参数(参数为目标Linux的boot目录),实现以下功能:
   1)创建一个临时目录/tmp/little.XX;
   2)将宿主机的/boot/initrd-`uname -r`.img文件展开至临时目录;
这里使用cpio命令,zcat /boot/initrd-`uname -r`.img |cpio -id
   3)修改展开而来的init文件:
    a)注释掉如下行:
    echo Scanning and configuring dmraid supported devices
    echo Scanning logical volumes
    lvm vgscan --ignorelockingfailure
    echo Activating logical volumes
    lvm vgchange -ay --ignorelockingfailure  vol0
    resume LABEL=SWAP-sda3
    b)将如下行中的设备修改为你所需要的,我这里就改为sda2
    mkrootdev -t ext3 -o defaults,ro /dev/vol0/root
   4)将修改好的内容重新封闭为cpio的归档文件,并gzip压缩后存放至参数所指定的目录

命令为:find . | cpio -H newc -o --quiet |gzip -9 > /mnt/boot/initrd.gz
   5)复制/boot/vmlinuz-`uname -r`至参数所指定的目录,并重命令为vmlinuz;
2、执行此函数;
3、说明:此处的`uname -r`只是为了引用当前系统正在使用的内核和initrd文件,但这
并非是必须。即如果你有其它内核和对应的initrd文件,也可使用。
 
第六部分:
六、写一个脚本,为目标主机所以磁盘设定grub:
   1、写一个函数,接受四个参数(参数1为目标磁盘,参数2为引导分区的挂载点,参数3为
内核文件名,参数4为initrd文件名),完成以下功能:
     1)判断挂载点路径的基名是否为boot,如果不是,则停止执行,并提示用户修改
;否则,则继续下面的操作;
     2)向目标磁盘安装grub;
     3)在参数3中的子目录grub下建立文件grub.conf;内容类似如下内容:
       default=0
       timeout=10
       title Little Linux
             root (hd0,0)
             kernel /$3
             initrd /$4
2、执行此函数 
 
 OK!
阅读(1536) | 评论(0) | 转发(0) |
0

上一篇:web服务器的介绍

下一篇:httpd的简单介绍

给主人留下些什么吧!~~