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

是迈开自己的脚步,踏出第一步,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

linux的定制和发布(一)的更多相关文章

  1. linux的定制和发布(二)

    Linux的发布         有时候希望将定制好的Linux移植到其他的机器上使用,所以我们将定制好的Linux制作 成安装光盘的形式,可以方便在其他机器上安装. 为此我们要先制作一个引导系统,由 ...

  2. Frugalware Linux 1.9 RC1 发布

    Frugalware Linux 1.9 RC1 发布了,下载地址:fvbe-1.9rc1-full-x86_64.iso (1,874MB, SHA1). 发行通知:http://www.fruga ...

  3. 跨年呈献:HP-Socket for Linux 1.0 震撼发布

    三年,三年,又三年,终于,终于,终于不用再等啦!就在今天,HP-Socket for Linux v1.0 震撼发布!还是一样的接口,一样的高效,一样的简便,一样的味道.     HP-Socket ...

  4. 在Linux下使用linuxdeployqt发布Qt程序

    一.简介 linuxdeployqt 是Linux下的qt打包工具,可以将应用程序使用的资源(如库,图形和插件)复制到二进制运行文件所在的文件夹中. 二.安装linuxdeployqt 去github ...

  5. slax linux的定制

    由于数据结构教学的需要,需要用到linux,要求就是小,启动快,可定制性强,恰好slax正好满足要求,以下就是定制slax linux的过程记录: 什么是Slax Slax是一个基于Linux的Liv ...

  6. 基于busybox和LFS的linux系统定制

    自从在大学知道了Linux这玩意是可以定制的之后,一直想做出一版属于自己的Linux系统.最近工作比较闲,终于塌下心来好好学习了一下.   目前来说,我接触的定制Linux的方法主要有两种:   1. ...

  7. Linux安装Tomcat服务器发布项目教程

    前面小Alan跟大家聊了在Linux服务器上jdk运行环境的安装以及redis非关系型数据库的安装,今天继续跟大家聊聊Tomcat的安装,以及将我们的项目发布上去并成功的访问. 第一步:将tomcat ...

  8. Bedrock Linux 0.7.3 发布

    Bedrock Linux是一种元分发,允许用户利用其他通常互斥的Linux发行版的功能,并让它们无缝地一起工作.该项目发布了其0.7.x系列,Bedrock Linux 0.7.3的更新. 新的更新 ...

  9. Linus Torvalds正式宣布Linux Kernel 5.1RC2 发布,相当正常

    导读 Linus Torvalds刚刚发布了Linux Kernel 5.2-rc2,这是继上周关闭合并窗口和随后的RC1之后的第一个内核测试版本. 在本周合并后的窗口活动中,Linus评论道,“嘿, ...

随机推荐

  1. python + docker, 实现天气数据 从FTP获取以及持久化(三)-- python获取FTP数据

    前言 经过前面两个小节的介绍,我们已经完成了MySQL数据库的搭建和数据库操作的事宜. 在本小节中,我们需要完成的任务是:使用python从FTP服务其上面获取文本文件. 搭建测试FTP服务器 LZ的 ...

  2. django-控制mysql事物

    from django.db import transaction 两种方式控制事务:为了保持数据一致性 一个Book表,一个Author表.添加一本书,也要保证添加作者.By事物控制 book = ...

  3. HTTP代理器Fiddler(三)

    HTTP代理神器Fiddler Fiddler是一款强大Web调试工具,它能记录所有客户端和服务器的HTTP请求. Fiddler启动的时候,默认IE的代理设为了127.0.0.1:8888,而其他浏 ...

  4. (1/24) 认识webpack

    1.什么是webpack (1)webpack是一个模块打包工具,它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript ...

  5. C# 中带有中国农历的日期选择控件

    开源一款自己刚开始接触 C# 时开发的带有农历信息的日期选择控件,记得那时还是在2010年的寒假期间做的这个东西.刚开始接触 C# 时,使用WinForm来开发桌面程序,觉得简直是简单又迅速,由于 C ...

  6. 在VS2005编程中,有的时候DataGridView数据源有几个表的联合查询,而系统又有限制为一个表,怎么办?

    在VS2005编程中,有的时候DataGridView数据源有几个表的联合查询,而系统又有限制为一个表,怎么办? 解决方法:在SqlServer的企业管理器里增加一个视图吧!!!!!!!!(从来没用过 ...

  7. JAVA 非对称加密工具

    import java.io.File; import java.io.FileInputStream; import java.math.BigInteger; import java.securi ...

  8. 迷你MVVM框架 avalonjs 学习教程5、显示隐藏控制

    今天的主角是ms-visible,它的效果类拟于jQuery的toggle,如果它后面跟着的表达式为真值时则显示它所在的元素,为假值时则隐藏.不过显示不是 display:none这么简单,众所周知, ...

  9. Docker构建redis cluster集群

    准备工作 安装gcc ruby 解压编译redis Redis 是 c 语言开发的.安装 redis 需要 c 语言的编译环境.如果没有 gcc 需要在线安装. yum install gcc-c++ ...

  10. leetcode 1 A+B problems

    描述: 给个数组和整数t,一串整数中,存在两个数其和等于t,求这两个数的索引. 解决: 想要快,用个哈希储存曾经出现过的数的索引. vector<int> twoSum(vector< ...