一、简介

LFS──Linux from Scratch,就是一种从网上直接下载源码,从头编译LINUX的安装方式。它不是发行版,只是一个菜谱,告诉你到哪里去买菜(下载源码),怎么把这些生东西( raw code) 作成符合自己口味的菜肴──个性化的linux,不单单是个性的桌面。

参考:http://www.linuxfromscratch.org/

http://www.ha97.com/book/lfs-book-6.6/index.html

http://xxb.is-programmer.com/2008/3/26/LFS-8.1730.html

http://sinojelly.blog.51cto.com/479153/201337/

二、环境准备

使用Debian平台,需做如下环境检查:

1、检查各个需要的工具及内核版本号,看看是否符合lfs7.7的列表要求

2、检查需要用到的库,一共有三个,gmp, mpfr和mpc

工具检查脚本如下:

#filename:check_env.sh
 
#/bin/sh
export LC_ALL=C # check for bash
bash --version | head -n1 | cut -d" " -f2-4
echo "/bin/sh -> `readlink -f /bin/sh`"
echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-
bison --version | head -n1 # check for yacc
if [ -h /usr/bin/yacc ]; then
echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`";
elif [ -x /usr/bin/yacc ]; then
echo yacc is `/usr/bin/yacc --version | head -n1`
else
echo "yacc not found"
fi # check for other
bzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,6-
echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2
diff --version | head -n1
find --version | head -n1
gawk --version | head -n1
if [ -h /usr/bin/awk ]; then
echo "/usr/bin/awk -> `readlink -f /usr/bin/awk`";
elif [ -x /usr/bin/awk ]; then
echo yacc is `/usr/bin/awk --version | head -n1`
else
echo "awk not found"
fi gcc --version | head -n1
g++ --version | head -n1
ldd --version | head -n1 | cut -d" " -f2- # glibc version
grep --version | head -n1
gzip --version | head -n1
cat /proc/version
m4 --version | head -n1
make --version | head -n1
patch --version | head -n1
echo Perl `perl -V:version`
sed --version | head -n1
tar --version | head -n1
makeinfo --version | head -n1
xz --version | head -n1 echo "main(){}" > dummy.c && g++ -o dummy dummy.c
if [ -x dummy ]; then
echo "g++ compilation OK";
else
echo "g++ compilation failed";
fi rm -f dummy.c dummy

若结果如下,则环境就绪

若出现“command not found”,则缺少工具,可执行如下命令进行安装(以安装gawk工具为例)

sudo aptitude install gawk

库检查脚本如下:

#filename:check_lib.sh
 
#!/bin/bash

for lib in lib{gmp,mpfr,mpc}.la; do
echo $lib: $(
if find /usr/lib* -name $lib | grep -q $lib; then
:;
else
echo not;
fi
) found
done unset lib

结果显示,三个库目前都不具备

三、存储设备准备

LFS的编译需要单独有一块存储,条件不好的就单独划个分区,条件好的就再挂块硬盘,实在不行就新建个目录来做这件事好了,只不过这样是没法引导起来,只能chroot之后当编译环境用。

下面以VMware新建一块SATA硬盘,然后接入虚拟机,分区,挂载为例来描述这个过程。

点击“编辑虚拟机设置”,选择添加硬盘,如下图:

选择“SATA(A)”,点击“下一步”,如下图:

选择“创建新的虚拟磁盘”,点击“下一步”,如下图:

设置磁盘大小为:20G,然后选择“将虚拟磁盘存储为单个文件”,点击“下一步”,如下图:

点击“完成”,如下图:

点击“确定”,如下图:

启动虚拟机,执行如下命令,查看新的硬盘信息

ls -l /dev | grep sd

新的硬盘为sdb,如下图:

执行如下命令后,选择”New”来新建一个分区,如下图:

cfdisk /dev/sdb

选择[Primary],创建一个新的主分区,如下图:

提示Size (in MB),选择要创建的分区大小为:128,如下图:

选择[Beginning],在空闲空间的起始位置来添加一个分区,如下图:

选择[ Bootable ],回车,在上方新建的分区这一栏Flags字段会出现Boot字样,如下图:

方向键按向下,光标选中”Free Space”,建立交换分区。基本上都是重复刚才的步骤,只不过大小改成1024,不需要置Boot标识。

移动光标到[ Type ],更改文件系统类型,回车后进入类型选择菜单,编号默认输入就是82,也就是”Linux swap / Solaris”,直接回车即可

此时回到主菜单,可以看到第二个分区sdb2的”FS Type”一项改成了”Linux swap / Solaris”,如下图:

按方向键向下,选中Free Space,重复sdb1的创建步骤,类型选择[Logical],大小默认最大即可,不需要更改,如下图:

此时回到主菜单,可以看到Name栏会显示sdb5,如下图:

新的硬盘分区表建立完毕,需要写入硬盘了,横移光标到[ Write ],回车,如下图:

提示”Are you sure you want to write the partition table to disk? (yes or no):”,敲入“yes”并回车,如下图:

右移光标到[ Quit ]回车,退出cfdisk,如下图:

至此,分区工作完成,LFS需要的独立存储设备与分区准备完毕,如下图:

四、磁盘初始化与源码准备

下面需要格式化分区,步骤如下:

/dev/sdb1使用ext2,执行如下命令,如下图

mkfs -v -t ext2 /dev/sdb1

/dev/sdb2使用swap,执行如下命令,如下图

mkswap /dev/sdb2

/dev/sdb5使用ext4,执行如下命令,如下图

mkfs -v -t ext4 /dev/sdb5

执行如下命令,创建目录:/mnt/lfs

mkdir -pv /mnt/lfs

方便起见,把/mnt/lfs目录的属主改为当前用户,否则每次操作都要加sudo,执行如下命令

chown -R lenovo.sudo lfs/

把lfs工程的主要存储分区/dev/sdb5挂载到这个目录上

mount -v -t ext4 /dev/sdb5 /mnt/lfs

每次宿主系统重启之后,都需要重新export和mount,方便起见,执行如下命令,建立环境变量$LFS=/mnt/lfs

vi ~/.bashrc
#在文件尾添加如下内容
export LFS=/mnt/lfs

执行如下命令,使环境变量立即生效

source ~/.bashrc

至此我们就可以在$LFS上面来下载和编译我们所需的lfs组件了。

下面,新建用于存储源码的目录,并下载源码

mkdir $LFS/src
cd $LFS/src

wget http://www.haopingrui.cn/lfs.tar.gz 124e1eb0e52f176ab84c38118b4975e3

至此,分区和源码准备完成。

五、工具链编译

为了避免使用权限大的账号误操作造成宿主机损失,首先,新建一个lfs用户

为用户lfs设置密码

为用户lfs添加环境变量

vi ~/.bashrc

在文件尾添加如下内容

HOME=$HOME
TERM=$TERM
#PS1=’${debian_chroot:+($debian_chroot)}\[\033[01;31m\][\A]\[\033[01;33m\]\u\[\033[00m\]@\[\033[01;32m\]\h:\[\033[01;34m\]\w\[\033[00m\]$ ‘
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
LFS_TGT=$(uname -m)-lfs-linux-gnu
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL LFS_TGT PATH

执行如下命令

source ~/.bashrc

最后,将用户lfs加入sudo组,以获得执行sudo的权限

usermod -g sudo -G sudo lfs

执行如下命令,创建目录并建立软链接后,更改文件属主

mkdir -v $LFS/tools
sudo ln -sv $LFS/tools /tools
sudo chown -Rv lfs $LFS/src

解压并移动文件至目录$LFS/src/

cd /mnt/lfs/src
tar -zxvf lfs.tar.gz
mv $LFS/src/lfs/* $LFS/src/

接下来进行工具编译

编译binutils

tar jxvf binutils-2.25.tar.bz2
cd binutils-2.25
mkdir -v ../binutils-build
cd ../binutils-build/
../binutils-2.25/configure --prefix=/tools --with-sysroot=$LFS --with-lib-path=/tools/lib --target=$LFS_TGT --disable-nls --disable-werror
make
case $(uname -m) in
x86_64) mkdir -v /tools/lib && ln -sv lib /tools/lib64 ;;
esac
make install

LFS(Linux From Scratch)学习的更多相关文章

  1. LFS Linux From Scratch 笔记2(经验非教程)BLFS

    LFS 完了. 其实还没完,还要装一些其他的组件,系统才算是对人类有用的系统. 正好这里有个BLFS Beyound Linux From Scratch 的教程. 其实,按照现有的可运行的LFS系统 ...

  2. LFS Linux From Scratch 笔记(经验非教程)

    做了一个自己的DIY Linux系统.从编译每一行代码,建立每一个文件系统结构开始. 创造自己的GNU/Linux系统,不同于任何发行版.按照的教程是来自 linuxfromscratch.org 来 ...

  3. Welcome to Linux From Scratch!

    /**************************************************************************** * Welcome to Linux Fro ...

  4. LFS(Linux From Scratch)构建过程全记录(五):交叉工具链的构建

    写在前面 本文将详细讲述如何构建工具链 前置知识 在LFS-BOOK中,我们需要学习一些关于"交叉编译"的内容,详见书本 安装Binutils-2.39 我们cd到sources文 ...

  5. Linux From Scratch(从零开始构建Linux系统,简称LFS)- Version 7.7(三)

    八. 构建LFS系统 1. 准备虚拟内核文件系统 内核会挂载几个文件系统用于自己和用户空间程序交换信息.这些文件系统是虚拟的,并不占用实际磁盘空间, 它们的内容会放在内存里. mkdir -pv $L ...

  6. Linux From Scratch(从零开始构建Linux系统,简称LFS)- Version 7.7(一)

    一. 准备工作 1. 需要一个Linux宿主系统,例如早先版本的 LFS,Ubuntu/Fedora,SuSE 或者是在你的架构上可以运行的其它发行版 如果想实现Win7与Linux双系统,可参考我的 ...

  7. Linux From Scratch(从零开始构建Linux系统,简称LFS)(三)

    九. 系统配置 1. 安装 LFS-Bootscripts-20150222 软件包包含一套在 LFS 系统启动和关闭时的启动和停止脚本. cd /sources tar -jxf lfs-boots ...

  8. Linux From Scratch(从零开始构建Linux系统,简称LFS)(一)

    一. 准备工作 1. 需要一个Linux宿主系统,例如早先版本的 LFS,Ubuntu/Fedora,SuSE 或者是在你的架构上可以运行的其它发行版 如果想实现Win7与Linux双系统,可参考我的 ...

  9. Linux From Scratch - Version 7.7-systemd (中文)

    Linux From Scratch - Version 7.7-systemd: https://linux.cn/lfs/LFS-BOOK-7.7-systemd/index.html

随机推荐

  1. win10 停留在启动画面

    这是由于部分电脑的主板不支持快速启动造成的,所以把快速启动功能关闭掉即可.具体操作步骤如下:控制面板--硬件和声音--电源选项--选择电源按钮的功能--选择“更改当前不可用的设置”,然后把“启用快速启 ...

  2. JS - 函数,Math,number

    函数分为:关键字function 匿名函数 — 没有名字的函数 有名函数 — 有名字的函数 <body> <div></div> <script> // ...

  3. Zookeeper 介绍翻译

    源网址链接 https://zookeeper.apache.org/ Apache Zookeeper 开放源码的服务器,提供高可靠的分布式协调服务. Zookeeper是一个维护配置信息,命名服务 ...

  4. 24.OGNL与ValueStack(VS)-集合对象初步

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 首先在LoginAction中增加如下字段并提供相应的get/set方法: ...

  5. 使用REGINI修改注册表权限

    regini regset.ini 就行啦 regset.ini 是你要修改的数据 1.注册表修改 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr ...

  6. Spring MVC 运行流程图

  7. 5 python 内置类

    1.实例属性和类属性 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Chinese: def __init__(self,name,sex,age): self.name = ...

  8. UI5-文档-4.33-Routing Back and History

    现在我们可以导航到细节页面并显示发票,但是还不能回到概览页面.我们将向细节页面添加一个back按钮,并实现一个函数,再次显示概述页面. Preview A back button is now dis ...

  9. ubuntu下安装jdk,tomcat,mysql,ftp,telnet,svn

    需求分析:自己弄了个小网站,想放到云服务器上,同时把自己积累的代码也放上去,服务器上的文件可以简单的在windows上查看,也可以方便的通过windows连接linux服务器. 解决:运行网站要用到j ...

  10. 面向对象三大特性一一封装(encapsulation)

    为什么要封装? 我们看电视,只要按一下开关和换台就行了.有必要了解电视的内部结构吗?有必要了解显像管吗? 封装是为了隐藏对象内部的复杂性,只对外公开简单的接口.便于外界调用,从而提高系统的可扩展性,可 ...