LFS(Linux From Scratch)学习
一、简介
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
工具检查脚本如下:
#/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)学习的更多相关文章
- LFS Linux From Scratch 笔记2(经验非教程)BLFS
LFS 完了. 其实还没完,还要装一些其他的组件,系统才算是对人类有用的系统. 正好这里有个BLFS Beyound Linux From Scratch 的教程. 其实,按照现有的可运行的LFS系统 ...
- LFS Linux From Scratch 笔记(经验非教程)
做了一个自己的DIY Linux系统.从编译每一行代码,建立每一个文件系统结构开始. 创造自己的GNU/Linux系统,不同于任何发行版.按照的教程是来自 linuxfromscratch.org 来 ...
- Welcome to Linux From Scratch!
/**************************************************************************** * Welcome to Linux Fro ...
- LFS(Linux From Scratch)构建过程全记录(五):交叉工具链的构建
写在前面 本文将详细讲述如何构建工具链 前置知识 在LFS-BOOK中,我们需要学习一些关于"交叉编译"的内容,详见书本 安装Binutils-2.39 我们cd到sources文 ...
- Linux From Scratch(从零开始构建Linux系统,简称LFS)- Version 7.7(三)
八. 构建LFS系统 1. 准备虚拟内核文件系统 内核会挂载几个文件系统用于自己和用户空间程序交换信息.这些文件系统是虚拟的,并不占用实际磁盘空间, 它们的内容会放在内存里. mkdir -pv $L ...
- Linux From Scratch(从零开始构建Linux系统,简称LFS)- Version 7.7(一)
一. 准备工作 1. 需要一个Linux宿主系统,例如早先版本的 LFS,Ubuntu/Fedora,SuSE 或者是在你的架构上可以运行的其它发行版 如果想实现Win7与Linux双系统,可参考我的 ...
- Linux From Scratch(从零开始构建Linux系统,简称LFS)(三)
九. 系统配置 1. 安装 LFS-Bootscripts-20150222 软件包包含一套在 LFS 系统启动和关闭时的启动和停止脚本. cd /sources tar -jxf lfs-boots ...
- Linux From Scratch(从零开始构建Linux系统,简称LFS)(一)
一. 准备工作 1. 需要一个Linux宿主系统,例如早先版本的 LFS,Ubuntu/Fedora,SuSE 或者是在你的架构上可以运行的其它发行版 如果想实现Win7与Linux双系统,可参考我的 ...
- 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
随机推荐
- win10 停留在启动画面
这是由于部分电脑的主板不支持快速启动造成的,所以把快速启动功能关闭掉即可.具体操作步骤如下:控制面板--硬件和声音--电源选项--选择电源按钮的功能--选择“更改当前不可用的设置”,然后把“启用快速启 ...
- JS - 函数,Math,number
函数分为:关键字function 匿名函数 — 没有名字的函数 有名函数 — 有名字的函数 <body> <div></div> <script> // ...
- Zookeeper 介绍翻译
源网址链接 https://zookeeper.apache.org/ Apache Zookeeper 开放源码的服务器,提供高可靠的分布式协调服务. Zookeeper是一个维护配置信息,命名服务 ...
- 24.OGNL与ValueStack(VS)-集合对象初步
转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 首先在LoginAction中增加如下字段并提供相应的get/set方法: ...
- 使用REGINI修改注册表权限
regini regset.ini 就行啦 regset.ini 是你要修改的数据 1.注册表修改 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr ...
- Spring MVC 运行流程图
- 5 python 内置类
1.实例属性和类属性 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Chinese: def __init__(self,name,sex,age): self.name = ...
- UI5-文档-4.33-Routing Back and History
现在我们可以导航到细节页面并显示发票,但是还不能回到概览页面.我们将向细节页面添加一个back按钮,并实现一个函数,再次显示概述页面. Preview A back button is now dis ...
- ubuntu下安装jdk,tomcat,mysql,ftp,telnet,svn
需求分析:自己弄了个小网站,想放到云服务器上,同时把自己积累的代码也放上去,服务器上的文件可以简单的在windows上查看,也可以方便的通过windows连接linux服务器. 解决:运行网站要用到j ...
- 面向对象三大特性一一封装(encapsulation)
为什么要封装? 我们看电视,只要按一下开关和换台就行了.有必要了解电视的内部结构吗?有必要了解显像管吗? 封装是为了隐藏对象内部的复杂性,只对外公开简单的接口.便于外界调用,从而提高系统的可扩展性,可 ...