• linux的定制和发布(二)


    Linux的发布

            有时候希望将定制好的Linux移植到其他的机器上使用,所以我们将定制好的Linux制作

    成安装光盘的形式,可以方便在其他机器上安装。

         为此我们要先制作一个引导系统,由引导系统引导我们进行一步步的安装。其中引导系统

    有grub、initramfs、内核三部分组成,相当于一个微型linux,下面我们详细介绍制作过程。

    必要的准备

    1、安装cdrtools-2.01

        安装这个包是为了使用其包含的命令mkisofs,这个是建立光盘镜像的工具。该

    包的编译安装命令为:

              tar xvf cdrtools-2.01.tar.bz2

              cd cdrtools-2.01

              patch -Np1 -i ../cdrtools-2.01-mkisofs_iconv-1.patch

              patch -Np1 -i ../cdrtools-2.01-ascii-2.patch

              make INS_BASE=/usr DEFINSUSR=root DEFINSGRP=root 

              make INS_BASE=/usr DEFINSUSR=root DEFINSGRP=root install &&

              install -v -m755 -d /usr/share/doc/cdrtools-2.01 &&

              install -v -m644 README* ABOUT doc/*.ps  /usr/share/doc/cdrtools-2.01

    2、安装cpio

         用来生成initramfs.igz。编译安装命令为:

          patch -Np1 -i ../cpio-2.9-gcc43_inline-1.patch &&

          ./configure CPIO_MT_PROG=mt
                --prefix=/usr
                --bindir=/bin
                --libexecdir=/tmp
                --with-rmt=/usr/sbin/rmt &&

          make

    安装脚本

        安装脚本的内容为:

    1、分区硬盘并格式化

    2、解压缩定制的linux系统压缩包

    3、调整grub

    /install/INSTALL文件:

    #!/bin/sh
    #create partitions
    fdisk /dev/sda << "EOF"
    n
    p
    1
    1
    +512M
    n
    p
    2

    w
    q
    EOF
    #setup swap
    mkswap /dev/sda1
    swapon /dev/sda1
    #prepare partition
    mkfs -t ext3 /dev/sda2
    mount /dev/sda2 $LFS
    #extract the lfs
    cd $LFS
    tar xvf /install/lfs.tar.gz
    #setup grub
    mount --bind /dev $LFS/dev
    chroot $LFS
    grub
    grub> root (hd0, 1)
    grub> setup (hd0)
    grub> quit
    exit
    umount $LFS/dev
    #end
    cd /
    umount $LFS
    reboot

    Initramfs构建

    Initramfs简介

            在2.6版本的linux内核中,都包含一个压缩过的cpio格式的打包文件。当内核启

    动时,会从这个打包文件中导出文件到内核的rootfs文件系统,然后内核检查rootfs

    中是否包含有init文件,如果有则执行它,作为PID为1的第一个进程。这个init进程负

    责启动系统后续的工作,包括定位、挂载“真正的”根文件系统设备(如果有的话)。

    如果内核没有在rootfs中找到init文件,则内核会按以前版本的方式定位、挂载根分区,

    然后执行/sbin/init程序完成系统的后续初始化工作。这个压缩过的cpio格式的打包文件

    就是initramfs。

    Initramfs的文件和目录

          1、确定需要的可执行文件,如:ls, cat, tar, fdisk, mount等常用命令

    的可执行文件,并查找这些可执行文件所依赖的库文件,将它们复制到initramfs对应

    的目录中。可以在网上找一些抓库脚本程序,根据实际情况稍做修改,运行脚本即可自动

    完成上述功能。也可参考本例的脚步文件。

        2、init文件

               #!/bin/sh

               /etc/rc.d/init.d/rc sysinit

               /bin/bash --rcfile /etc/profile

          3、 rc 启动脚本

              使用如下命令将启动脚本复制到initramfs下对应的目录:

               cp /etc/udev initramfs/etc/ -a

               mkdir -p initramfs/etc/rc.d/init.d

               cp -a /etc/rc.d/init.d/{functions,mountfs,mountkernfs,rc,udev,udev_retry} initramfs/etc/rc.d/init.d/

               mkdir -p initramfs/etc/rc.d/rcsysinit.d

    cp -a /etc/rc.d/rcsysinit.d/{S00mountkernfs,S10udev,S40mountfs,S50udev_retry}   initramfs/etc/rc.d/rcsysinit.d/ 

               mkdir -p initramfs/etc/sysconfig

                cp -a /etc/sysconfig/rc initramfs/etc/sysconfig/rc

           4、一些配置文件和目录 

           创建挂载目录/proc, /sys, /media/cdrom; 

           复制udev 相关的文件: cp -a /lib/udev/devices $WORK/tmpfs/lib/udev/,并udev 自动创建/dev/cdrom 链接;

           /etc/fstab文件:

    /dev/root     /                    ext2      defaults        0     0
    /dev/cdrom  /media/cdrom  iso9660  defaults        0     0
    proc           /proc               proc      defaults        0     0
    sysfs         /sys                 sysfs     defaults        0     0
    devpts       /dev/pts           devpts   defaults        0     0

           /etc/profile文件:

    export PATH=/bin:/usr/bin:/sbin:/usr/sbin
    export TERM=xterm
    export HISTSIZE=1000
    export PS1="w# "
    alias ls="ls --color"
    alias ll="ls -lh"
    alias la="ll -a"

    生成Initramfs

        find . | cpio -H newc -o | gzip > $WORK/iso/boot/initramfs.igz

    grub启动

    /boot/grub/menu.lst 文件如下:

    default 0
    timeout 5
    color green/black light-green/black
    title bootcd
      root(cd)
      kernel /boot/kernel
      initrd /boot/initramfs.igz

    root (cd)表示从光盘启动;

    kernel /boot/kernel 表示kernel文件的位置;

    initrd  /boot/initramfs.igz 表示initramfs.igz文件的位置。

    结束

    生成ISO文件

    mkisofs                       
      -R                          
      -b boot/grub/stage2_eltorito
      -no-emul-boot               
      -boot-load-size 4           
      -boot-info-table            
      -o $WORK/bootcd.iso         
      $WORK/iso

    测试

    gwlinux1.0_setup.iso 在vmware6.5上测试安装通过。安装方法简单描述如下:

    1、  在vmware6.5中安装时默认硬盘驱动为LSI logic,请设置为BUS logic; 

    2、  该版本linux的网络暂时没有配置,请设置为不使用网络连接;

    3、  使用iso引导进入安装界面

    4、  命令提示符中输入:/install/INSTALL,执行完后如果不能自动重启,手动重启即可。

    5、  重启进入gwlinux1.0

    Gwlinux1.0_setupk可在以下硬件平台上正常安装:e5000+g31+WD160G硬盘+dvd-rom

    但仍存在一些遗留问题:

    1、  启动盘启动时会提示cdrom不存在,这时,需要先输入:mount /dev/sr0 /media/cdrom,再按步骤安装;

    2、  安装结束时reboot命令不起作用,要手动重启;

    3、  硬盘分区方式固定,缺乏灵活性;

    4、  其他硬件平台还未验证,对某些硬件可能不支持。

     

     下载:linux的定制和发布.zip

          

  • 相关阅读:
    【线程控制:线程休眠】
    【线程调度-优先级】
    【多线程实现方案一:继承Thread 类】
    【多线程概述】
    【使用Mybatis-Generator自动生成Mapper、Model、Mapping相关文件】
    【springmvc集成mybatis框架】
    【UltraISO制作centos7系统安装盘】
    【己有原码, 为何还有反码和补码?】
    【原码, 反码, 补码的基础概念和计算方法】
    【数据类型】
  • 原文地址:https://www.cnblogs.com/wenjingu/p/4126567.html
Copyright © 2020-2023  润新知