• linux的定制和发布(一)


    如果总是仰视高山,就会挫伤我们攀登的勇气,使我们固步自封。我们需要做的就

    是迈开自己的脚步,踏出第一步,let's go!

          Linux的裁剪一般有三种方法:

    1、以一个已经安装好的系统为基础,删除掉不需要的软件和文件,以减少整个系统的大小;

    2、从零开始根据需要定制整个系统;

    3、安装一个完整的Linux系统,然后将必要的软件、文件、内核等复制出来构建一个小系统。

          其中第一个方法在实际操作中几乎是不可行的。因为很难确定哪些东西需要删除,而那些

    东西不能删除,如果删除了不该删除的文件,很容易导致系统不稳定或某些应用程序出错;第

    二和第三种方法类似,第三种方法更简单,但会受到宿主系统的限制,第二种方法较复杂,但

    灵活性更强。我们采取第二种方法。

           最终的ISO文件将包括三部分:定制好的linux、引导系统、安装脚本。中引导 

    系统有grub、initramfs、内核三部分组成。

    原理

            计算机启动时需要引导器(Boot Loader),Boot Loader的任务是从引导设备装载内核,

    引导系统运行,我们使grub做引导器。grub 会加载内核,所有的2.6版本linux内核都有一

    个特殊的文件系统rootfs,是内核启动的初始始根文件系统,内核启动完成后会把initramfs的

    件复制到rootfs,作为内核初始的根文件系统,它的任务是挂载系统真正的根文件系统。

          引导系统相当于一个微型的linux,它从定制的linux中复制而来,包括定制的linux的小部

    分功能,区别是该引导系统是从光盘直接启动到linux界面。引导系统启动到命令行界面后,我

    们先将硬盘分区,然后将定制好的linux解压到相应分区,并修改grub为从硬盘启动。重启系统

    后就进入定制的linux环境。

    Linux的定制

             我们定制linux的方法采用序言中所提到的第二种方法,即通常所说的LFS(Linux from Scratch)。

    这种方法简单说就是对需要的软件包一个个手动下载、编译、安装。这种方法虽然比较“笨”,但有以下好处:

    1、它让用户对于系统有更多的控制,而不是依赖于某些人的 linux 实现。

    2、它可以创建一个非常紧凑的 linux 系统,甚至小到几兆。

    3、它有可靠的安全性。通过从源码编译整个系统,能够审查任何东西,打上所有的安全补丁。

             下面我们介绍LFS的过程。

    准备工作

    1、事先下载好所需要的软件包源码,软件包彼此之间有依赖关系,下载时要注意下载全;

    也可以使用别人已下载好的,比如有些发行版中已带有各种软件包源码。

    2、可选择在虚拟机上制作,也可以在真实机器上制作。如果在虚拟机上制作需要做好虚

    拟机的配置,比如SCSI Adpters的设置不同,内核的配置方法也不同。

    3、下载一个引导光盘作为制作LFS的环境。

    4、在http://www.linuxsir.org/网站上有一些很有用的文章,用来指导安装。

    构建LFS系统

          构建LFS系统的步骤如下:

    1、构建临时编译环境

    2、安装系统基础软件

    3、配置内核

    4、配置系统启动脚本

          其中第1、2步在金步国的《Linux彻底定制指南》中已有详细的介绍,如果需要

    我可以提供,也可以到网络上下载。按照这些网络上提供的方法做一般不会有问题,

    但由于制作的环境不同可能会出现一些问题,只要有耐心和恒心都是可以解决的。

    内核配置

    输入如下命令:

    cd linux-2.6.*   //进入linux源码所在目录

    make mrproper

    make menuconfig

    在界面中按如下配置:

    Device Drivers  --->
      SCSI device support  --->
         <*> SCSI device support
         <*>   SCSI disk support
               SCSI low-level drivers  --->
                  <*> BusLogic SCSI support

    Device Drivers  --->
      ATA/ATAPI/MFM/RLL support  --->
         <*> Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
         <*>   Include IDE/ATAPI CDROM support
         [*]   PCI IDE chipset support
         [*]   Generic PCI bus-master DMA support
         <*>     Intel PIIXn chipsets support

    File systems  --->
      CD-ROM/DVD Filesystems  --->
        <*> ISO 9660 CDROM file system support
        [*]   Microsoft Joliet CDROM extensions

    保存退出后输入如下命令:

    make

    make modules_install

    cp -v arch/i386/boot/bzImage /boot/lfskernel-*

    cp -v System.map /boot/System.map-*

    cp -v .config /boot/config-*

    install -d /usr/share/doc/linux-*

    cp -r Documentation/* /usr/share/doc/linux-*

    制作LFS的很多问题都是因为内核配置不当引起的,请注意!

    配置系统启动脚本

    /etc/fstab文件:

    /dev/ext3          defaults                 1     1
    /dev/sda1     swap         swap             pri=1                       0     0
    proc           /proc              proc            defaults                   0     0
    sysfs          /sys                 sysfs          defaults                  0     0
    devpts         /dev/pts        devpts         gid=4,mode=620   0     0
    shm            /dev/shm        tmpfs          defaults                  0     0

    标记为红色的部分请注意,请按照自己的实际情况修改。一般SATA硬盘是sda1和sda2,

    IDE硬盘是hda1和hda2。根目录的文件系统格式请按具体情况。

     /boot/grub/menu.lst 文件:

    default 0
    timeout 5
    color green/black light-green/black
    title gwlinux 1.0
    root (hd0,1)
    kernel /boot/lfskernel-* root=/dev/sda2

    标记为红色的部分请注意,请按照自己的实际情况修改。grub中对磁盘的表示方法

    和/dev中的不太相同,/dev/hda2在grub中表示为(hd0,1),而/dev/hdb1表示为(hd1,0),

    SCSI的表示方法也不一样/dev/sda2也表示为(hd0,1)。

    LFS过程中各个阶段工作状态的恢复方法

            LFS的制作时间漫长,有时候不得以必须关机然后重新启动并恢复到工

    作状态,以下是LFS过程中各个阶段工作状态的恢复方法。

             http://www.linuxsir.org/bbs/thread322895.html

    黏贴如下:

    开始~4.4. Setting Up the Environment
      从头开始好了,没什么好可惜的。
    4.5. About SBUs~5.33. Stripping
      从现在开始一直到第五章结束,也就是完成Stripping中间的步骤中如果重新启动的恢复步骤:
      1.重新启动计算机,并从LiveCD启动
      2.加载分区
      export LFS=/mnt/lfs
      mkdir -pv $LFS
      mount /dev/sda2 $LFS
      3.加载交换分区(如果不想用交换分区或者没有交换分区可跳过此步骤)
      swapon /dev/sda1
      4.建立工具链的链接
      ln -sv $LFS/tools /
      5.创建lfs用户
      groupadd lfs
      useradd -s /bin/bash -g lfs -m -k /dev/null lfs
      passwd lfs
      chown -v lfs $LFS/tools
      chown -v lfs $LFS/sources
      su - lfs
      6.建立lfs用户的环境
      cat > ~/.bash_profile << "EOF"
      exec env -i HOME=$HOME TERM=$TERM PS1='u:w$ ' /bin/bash
      EOF
      cat > ~/.bashrc << "EOF"
      set +h
      umask 022
      LFS=/mnt/lfs
      LC_ALL=POSIX
      PATH=/tools/bin:/bin:/usr/bin
      export LFS LC_ALL PATH
      EOF
      source ~/.bash_profile
      7.检查一下
      export命令查看输出,应该是
      declare -x HOME="/home/lfs"
      declare -x LC_ALL="POSIX"
      declare -x LFS="/mnt/lfs"
      declare -x OLDPWD
      declare -x PATH="/tools/bin:/bin:/usr/bin"
      declare -x PS1="\u:\w\$ "
      declare -x PWD="/home/lfs"
      declare -x SHLVL="1"
      declare -x TERM="linux"
      基本上就恢复工作状态了。
    6.1. Introduction
      这个时候也许你想睡觉关机了,那么重新开机后回到工作状态的步骤是:
      1.重新启动计算机,并从LiveCD启动
      2.加载分区
      export LFS=/mnt/lfs
      mkdir -pv $LFS
      mount /dev/sda2 $LFS
      3.加载交换分区(如果不想用交换分区或者没有交换分区可跳过此步骤)
      swapon /dev/sda1
    相关知识点:
      这时候已经制作好了工具链,因此可以不需要建立根目录下的tools链接了。
    6.2. Mounting Virtual Kernel File Systems~6.8. Populating /dev
      这个时候如果你关机或重新启动,那么重新开机后回到工作状态的步骤是:
      1.重新启动计算机,并从LiveCD启动
      2.加载分区
      export LFS=/mnt/lfs
      mkdir -pv $LFS
      mount /dev/sda2 $LFS
      3.加载交换分区(如果不想用交换分区或者没有交换分区可跳过此步骤)
      swapon /dev/sda1
      4.加载必要的文件系统
      mount -v --bind /dev $LFS/dev
      mount -vt devpts devpts $LFS/dev/pts
      mount -vt tmpfs shm $LFS/dev/shm
      mount -vt proc proc $LFS/proc
      mount -vt sysfs sysfs $LFS/sys
      5.Chroot到目标系统下
      chroot "$LFS" /tools/bin/env -i
      HOME=/root TERM="$TERM" PS1='u:w$ '
       PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin
      /tools/bin/bash --login +h
    6.9. Linux-Libc-Headers-2.6.11.2~6.59. Stripping Again
      从现在开始一直到第六章的Stripping Again之前,这个阶段如果你关机或重新启动,那么重新开机后回到工作状态的步骤是:
      1.重新启动计算机,并从LiveCD启动
      2.加载分区
      export LFS=/mnt/lfs
      mkdir -pv $LFS
      mount /dev/sda2 $LFS
      3.加载交换分区(如果不想用交换分区或者没有交换分区可跳过此步骤)
      swapon /dev/sda1
      4.加载必要的文件系统
      mount -v --bind /dev $LFS/dev
      mount -vt devpts devpts $LFS/dev/pts
      mount -vt tmpfs shm $LFS/dev/shm
      mount -vt proc proc $LFS/proc
      mount -vt sysfs sysfs $LFS/sys
      5.Chroot到目标系统下
      chroot "$LFS" /tools/bin/env -i
      HOME=/root TERM="$TERM" PS1='u:w$ '
       PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin
      /bin/bash --login +h
      6.进入编译目录
      cd /sources

    6.61. Stripping Again
      如果现在重新启动,那么重新开机后回到工作状态的步骤是:
      1.重新启动计算机,并从LiveCD启动
      2.加载分区
      export LFS=/mnt/lfs
      mkdir -pv $LFS
      mount /dev/sda2 $LFS
      3.加载交换分区(如果不想用交换分区或者没有交换分区可跳过此步骤)
      swapon /dev/sda1
      4.加载必要的文件系统
      mount -v --bind /dev $LFS/dev
      mount -vt devpts devpts $LFS/dev/pts
      mount -vt tmpfs shm $LFS/dev/shm
      mount -vt proc proc $LFS/proc
      mount -vt sysfs sysfs $LFS/sys
      5.Chroot到目标系统下
      chroot "$LFS" /tools/bin/env -i
      HOME=/root TERM="$TERM" PS1='u:w$ '
       PATH=/bin:/usr/bin:/sbin:/usr/sbin
      /tools/bin/bash --login

    6.62. Cleaning Up~结束
      从现在开始一直到制作结束,重新开机后回到工作状态的步骤是:
      1.重新启动计算机,并从LiveCD启动
      2.加载分区
      export LFS=/mnt/lfs
      mkdir -pv $LFS
      mount /dev/sda2 $LFS
      3.加载交换分区(如果不想用交换分区或者没有交换分区可跳过此步骤)
      swapon /dev/sda1
      4.加载必要的文件系统
      mount -v --bind /dev $LFS/dev
      mount -vt devpts devpts $LFS/dev/pts
      mount -vt tmpfs shm $LFS/dev/shm
      mount -vt proc proc $LFS/proc
      mount -vt sysfs sysfs $LFS/sys
      5.Chroot到目标系统下
      chroot "$LFS" /usr/bin/env -i
      HOME=/root TERM="$TERM" PS1='u:w$ '
       PATH=/bin:/usr/bin:/sbin:/usr/sbin
      /bin/bash --login
      6.进入编译目录
      cd /sources

  • 相关阅读:
    LostRoutes项目日志——玩家飞机精灵Fighter解析
    quartz Cron表达式一分钟教程
    vue-cli入门
    SQL中merge into用法
    SQLSERVER查询那个表里有数据
    C#实现复杂XML的序列化与反序列化
    MVC和WebApi 使用get和post 传递参数。
    项目管理软件推荐
    JS跨域请求
    Android动画效果translate、scale、alpha、rotate详解
  • 原文地址:https://www.cnblogs.com/wenjingu/p/4126545.html
Copyright © 2020-2023  润新知