Linux From Scratch(从零开始构建Linux系统,简称LFS)- Version 7.7(一)
一. 准备工作
1. 需要一个Linux宿主系统,例如早先版本的 LFS,Ubuntu/Fedora,SuSE 或者是在你的架构上可以运行的其它发行版
如果想实现Win7与Linux双系统,可参考我的上一篇博文:Win7下硬盘安装Ubuntu双系统
2. 一个8G的U盘,LFS系统将安装在上面
3. 参考网址:Linux From Scratch V7.10
4. 中文版参考网址:Linux From Scratch Version 7.7-systemd (简体中文版)
5. 参考文档:LFS-BOOK-7.10.pdf
二. LFS目标架构
LFS主要支持 AMD/Intel 的 x86(32 位)和 x86_64(64 位) 的目标架构。
假如按照本文的默认方式构建,那么你将得到一个“纯” 64 位系统————这意味着你仅能够执行64 位的程序。
三. 宿主系统需求
1. 如果未设置root密码,先设置,再以root用户登录
sudo passwd root
su - root
2. 请执行以下命令,查看宿主机的各个软件包的版本以及编译环境是否准备妥当:
cat > version-check.sh << "EOF"
#!/bin/bash
# Simple script to list version numbers of critical development tools
export LC_ALL=C
bash --version | head -n1 | cut -d" " -f2-4
MYSH=$(readlink -f /bin/sh)
echo "/bin/sh -> $MYSH"
echo $MYSH | grep -q bash || echo "ERROR: /bin/sh does not point to bash"
unset MYSH echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-
bison --version | head -n1 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 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 awk 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 'int 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
EOF bash version-check.sh
a. 如果宿主系统是Ubuntu 14.04.5,你会发现缺少了五个包,使用命令行增加:
apt-get update
apt-get install bison gawk m4 texinfo g++
b. 同时,/bin/sh 是指向dash,使用命令行修改指向bash:
ln -sf bash /bin/sh
3. 同时,还请进行库文件的一致性检查,这些文件应该要么都在或者是都缺失,而不应该只有一两个。
cat > library-check.sh << "EOF"
#!/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
EOF bash library-check.sh
如果宿主系统是Ubuntu 14.04.5,这些库文件都是缺失的,不用管它
四. 准备新分区
1. 宿主系统下安装分区工具 gparted,命令:
apt-get install gparted
2. 利用 gparted 重新划分U盘,我的U盘是分为:
/dev/sdc1 100M EXT4 boot分区
/dev/sdc2 7.3G EXT4 LFS系统分区
3. 我的宿主分区是这样的:
/dev/sda5 2G Swap 交换分区
/dev/sda6 100M EXT4 boot分区
/dev/sda7 28G EXT4 Ubuntu系统分区
5. 挂载新分区
export LFS=/mnt/lfs
mkdir -pv $LFS
mount -v -t ext4 /dev/sdc2 $LFS # 如果你正在使用交换分区,用 swapon 命令确保它已经启用
/sbin/swapon -v /dev/sda5
五. 软件包与补丁
1. 执行下面的命令创建$LFS/sources目录
mkdir -v $LFS/sources
此目录用于保存软件包和补丁,同时用来解压源代码并执行编译。
2. 设置目录的写权限和粘滞模式
chmod -v a+wt $LFS/sources
“粘滞模式”意思是就算有多个用户对某个目录有写权限,仍然只有该文件的主人能删除一个粘滞目录里的文件。
3. 下载需要的软件包和补丁,它们用来构建一个基本的 Linux 系统
点击此下载 wget-list 文件作为 wget 的输入:
wget --input-file=wget-list --continue --directory-prefix=$LFS/sources
4. 下载批处理脚本 ch5-build.sh、ch6-build.sh,放到 $LFS/sources 文件夹下
六. 最后的准备工作
1. 创建 $LFS/tools 文件夹
# 编译的临时工具会安装到 $LFS/tools 文件夹,不会成为最终 LFS 系统的一部分。 mkdir -v $LFS/tools
2. 在宿主系统中创建 /tools
的符号链接,将其指向$LFS/tools
# 创建的符号链接使得编译的工具链总是指向 /tools 文件夹。 ln -sv $LFS/tools /
3. 添加lfs用户
groupadd lfs # 添加新组
useradd -s /bin/bash -g lfs -m -k /dev/null lfs # 添加新用户
passwd lfs # 为用户设置密码
chown -v lfs $LFS/tools # 赋予了访问 $LFS/tools 文件夹的所有权限
chown -vR lfs $LFS/sources # 赋予了访问 $LFS/sources 文件夹的所有权限
su - lfs # 切换用户
4. 设置环境
# 以 lfs 用户登录运行以下两个命令,为 bash shell 创建两个开机启动的文件。
# 当以 lfs 用户身份登录时,初始 shell 通常是一个可登录的 shell
# 它先读取宿主机的 /etc/profile 文件(很可能包括一些设置和环境变量),然后是 .bash_profile 文件
# .bash_profile 文件使用完全空环境的 shell 代替运行中的 shell cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF # 新的 shell 实例是一个非登录 shell,不会读取 /etc/profile 或者 .bash_profile 文件,而是读取 .bashrc 文件
cat > ~/.bashrc << "EOF"
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
EOF # 启用配置文件
source ~/.bash_profile
Linux From Scratch(从零开始构建Linux系统,简称LFS)- Version 7.7(一)的更多相关文章
- LFS(Linux From Scratch)构建过程全记录(二):磁盘分区
写在前面 本文将会详细记录LFS中,构建分区,构建文件系统和挂载分区的全过程 准备新硬盘 为了更加符合"从零开始构建Linux"的要求,我在虚拟机中,新建了一个磁盘 我们将会在这个 ...
- Linux From Scratch(从零开始构建Linux系统,简称LFS)(一)
一. 准备工作 1. 需要一个Linux宿主系统,例如早先版本的 LFS,Ubuntu/Fedora,SuSE 或者是在你的架构上可以运行的其它发行版 如果想实现Win7与Linux双系统,可参考我的 ...
- Linux From Scratch(从零开始构建Linux系统,简称LFS)- Version 7.7(三)
八. 构建LFS系统 1. 准备虚拟内核文件系统 内核会挂载几个文件系统用于自己和用户空间程序交换信息.这些文件系统是虚拟的,并不占用实际磁盘空间, 它们的内容会放在内存里. mkdir -pv $L ...
- Linux From Scratch(从零开始构建Linux系统,简称LFS)(三)
九. 系统配置 1. 安装 LFS-Bootscripts-20150222 软件包包含一套在 LFS 系统启动和关闭时的启动和停止脚本. cd /sources tar -jxf lfs-boots ...
- Linux From Scratch(从零开始构建Linux系统,简称LFS)- Version 7.7(二)
七. 构建临时系统 1. 通用编译指南 a. 确认是否正确设置了 LFS 环境变量 echo $LFS b. 假定你已经正确地设置了宿主系统的符号链接: 1)shell 使用的是 bash. 2)sh ...
- Linux From Scratch(从零开始构建Linux系统,简称LFS)(二)
七. 构建临时系统 1. 通用编译指南 a. 确认是否正确设置了 LFS 环境变量 echo $LFS b. 假定你已经正确地设置了宿主系统需求和符号链接 c. 对于每个软件包: (1). 确保解压软 ...
- Raspberry Pi(树莓派)上从零开始构建Linux系统(简称PiLFS)(一)
一. 准备工作 1. 装有Linux宿主系统的树莓派主板,可参考 Raspberry Pi(树莓派)上安装Raspbian(无路由器,无显示器) 2. 参考网址:Linux From Scratch ...
- 从零开始构建Linux
目的:深入了解以Linux内核为基础的系统是如何组成,运行,以构建一个最基础的,纯净的系统. LFS构建步骤宿主机准备- linux操作系统安装- 使用独立硬盘,创建分区- 配置用户和组- 下载所有需 ...
- LFS(Linux From Scratch)构建过程全记录(五):交叉工具链的构建
写在前面 本文将详细讲述如何构建工具链 前置知识 在LFS-BOOK中,我们需要学习一些关于"交叉编译"的内容,详见书本 安装Binutils-2.39 我们cd到sources文 ...
随机推荐
- 【JVM】JVM系列之JVM体系(一)
一.前言 为什么要学习了解Java虚拟机 1.我们需要更加清楚的了解Java底层是如何运作的,有利于我们更深刻的学习好Java. 2.对我们调试错误提供很宝贵的经验. 3.这是合格的Java程序必须要 ...
- Linux上的SQL Server的起步
我们知道,几个星期前,微软发布了在Linux上直接运行的SQL Server第一个公开CTP版本!因此,对我来说,是时候跨界在Linux上安装我的第一个SQL安装,这样的话,我就可以在Linux上折腾 ...
- 分享一个UI与业务逻辑分层的框架(一)
序言 .NET(C#)的WinForm如何简单易行地进行UI与业务逻辑分层?本系列文章介绍一个WinForm分层框架,该框架针对WinForm中的TextBox,CheckBox,RadioButto ...
- 单例模式 - Singleton
对今天学习的Singleton Pattern简单总结下: 定义:保证一个类只有一个实例,必须自己创建自己的实例,并提供一个访问它的全局访问点. private 构造函数: private stati ...
- C# ~ 从 委托事件 到 观察者模式 - Observer
委托和事件的部分基础知识可参见 C#/.NET 基础学习 之 [委托-事件] 部分: 参考 [1]. 初识事件 到 自定义事件: [2]. 从类型不安全的委托 到 类型安全的事件: [3]. 函数指针 ...
- C#模拟Http请求时出现 基础连接已经关闭 未能为 SSLTLS 安全通道建立信任关系
//解决方法: //引入命名空间: using System.Security.Cryptography.X509Certificates; using System.Net.Security; // ...
- Spring框架IOC容器和AOP解析
主要分析点: 一.Spring开源框架的简介 二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面向切面编程(AOP)和事务管理配置 一.S ...
- 深入理解Redis系列
Redis基础教程详情参考:http://www.yiibai.com/redis/redis_quick_guide.html 基础知识: 0.Redis特点:Redis是Remote Dictio ...
- PHP中抽象类,接口定义
这里先介绍接口,因为在我最近看的好几本php工具书中都没有提到抽象类. 本人也觉得,在理解了接口后抽象类也非常好理解. 例子代码随便写了一下.例子代码是很ok的,测试过了不会报错,懒得看代码的筒靴们看 ...
- springmvc添加mock json的支持
在springmvc中 添加对服务器classPath下的json文件解析之后返回的mock功能: import java.io.FileNotFoundException; import java. ...