LFS Bash脚本小试牛刀 一


题目:
将给定的一块硬盘制作为可启动硬盘,操作全程使用二进制程序或者脚本自动完成:
  1.系统为一个裁剪后的GNU/Linux操作系统;
  2.使用init脚本初始化系统,要求能装载网卡驱动,并配置IP地址;
  3.最后进入bash shell交互环境。

 

解:

  处理过程鸟瞰

#!/bin/ #kernel_step3. #: : // read -p ! [ -b [ = exit read -p read -p ! [ = -o = exit =/dev/zero of=$dev bs= count= fdisk - + + fdisk - mkfs -t ext3 mkfs -t ext3 [ -e /mnt/boot ] || /mnt/ [ -d /mnt/boot ] || ( ; exit [ -e /mnt/sysroot ] || /mnt/ [ -d /mnt/sysroot ] || ( ; exit /mnt/ /mnt/sysroot View Code

  第二步:将这两个分区挂载到两个宿主机目录,分别是/mnt/boot与/mnt/sysroot,在磁盘上安装grub系统启动管理程序,复制内核压缩映像与initramfs至boot分区,配置grub。

  /boot/vmlinuz-.-.el6.x86_64 /mnt/boot/
  /boot/initramfs-.-.el6.x86_64.img /mnt/boot/
 
 grub- --root-directory=/ 
  > /mnt/boot/grub/grub.conf << default=
 timeout=
          root (hd0,         kernel /vmlinuz-.-.el6.x86_64 ro root=/dev/sda2 selinux= init=/sbin/         initrd /initramfs-.- EOF

  第三步:初始化根目录,创建必要的目录文件,复制需要的命令与其所使用的库文件,复制网卡驱动,配置系统的初始化脚本init。此处用到了文章《LFS Bash脚本热身任务 二》中的一个函数。

cpy_bin_and_so() { # cmd=$ : #dest_dir=$ : / #usage: cpy_bin_and_so iptables /mnt/ #usage: cpy_bin_and_so /root/ # func cmd local cmd= local dest_dir= local fullpath= local dirpath= local filename= local i= ! &> /dev/ return ! [ -d return fullpath=` | -o #dirpath=` #cpy bin & * i `ldd $fullpath | -o dirpath=` filename=` [ -e ] || - [ -d ] || ( ; return -f ${i} ${dest_dir}${dirpath}/ return } View Code
  /mnt/sysroot/ declare i=
  i  ` /bin`    
   cpy_bin_and_so $i /mnt/ 
 
  /mnt/sysroot/lib/  /lib/modules/.-.el6.x86_64/kernel/drivers/net/e1000/e1000.ko /mnt/sysroot/lib/modules/
 
  > /mnt/sysroot/sbin/init << #!/bin/  -n -t proc proc /  -n -t sysfs sysfs /  /lib/modules/  eth0 ./
 
 busybox 
   
  
 
         --            
  +x /mnt/sysroot/sbin/ 
 
 
  ${dev}
  ${dev}
  

 

 附录Ⅰ  实验结果

   1.在宿主机上添加一新磁盘:

#!/bin/ #kernel_step3. #: : // read -p ! [ -b [ = exit read -p read -p ! [ = -o = exit =/dev/zero of=$dev bs= count= fdisk - + + fdisk - mkfs -t ext3 mkfs -t ext3 [ -e /mnt/boot ] || /mnt/ [ -d /mnt/boot ] || ( ; exit [ -e /mnt/sysroot ] || /mnt/ [ -d /mnt/sysroot ] || ( ; exit /mnt/ /mnt/ cpy_bin_and_so() { # cmd=$ : #dest_dir=$ : / #usage: cpy_bin_and_so iptables /mnt/ #usage: cpy_bin_and_so /root/ # func cmd local cmd= local dest_dir= local fullpath= local dirpath= local filename= local i= ! &> /dev/ return ! [ -d return fullpath=` | -o #dirpath=` #cpy bin & * i `ldd $fullpath | -o dirpath=` filename=` [ -e ] || - [ -d ] || ( ; return -f ${i} ${dest_dir}${dirpath}/ return /boot/vmlinuz-.-.el6.x86_64 /mnt/boot/ /boot/initramfs-.-.el6.x86_64.img /mnt/boot/ grub- --root-directory=/ > /mnt/boot/grub/grub.conf << default= timeout= root (hd0, kernel /vmlinuz-.-.el6.x86_64 ro root=/dev/sda2 selinux= init=/sbin/ initrd /initramfs-.- /mnt/sysroot/ declare i= i ` /bin` cpy_bin_and_so $i /mnt/ /mnt/sysroot/lib/ /lib/modules/.-.el6.x86_64/kernel/drivers/net/e1000/e1000.ko /mnt/sysroot/lib/modules/ > /mnt/sysroot/sbin/init << #!/bin/ -n -t proc proc / -n -t sysfs sysfs / /lib/modules/ eth0 ./ busybox -- +x /mnt/sysroot/sbin/ ${dev} ${dev} View Code

相关内容