LFS学习笔记第一篇:准备篇

linux from scratch 官网: http://www.linuxfromscratch.org/
主要参照lfs7.7中文文档,地址:https://linux.cn/lfs/LFS-BOOK-7.7-systemd/
主要记录过程,可以算是LFS7.7的一个浓缩版

宿主机是vmware虚拟机:


cpu :4核 内存:2GB 硬盘:60GB 系统:kali2.0 x86_64  

宿主机系统分区:

根分区:  /dev/sda1 60GB 无swap分区  
lfs分区: /dev/sdb1 20GB 无swap分区

一、检查软件环境

1.1 检查宿主机所需软件

脚本:

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
echo "/bin/sh -> `readlink -f /bin/sh`"
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 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
EOF

会在当前目录生成 version-check.sh,运行:

bash  version-check.sh

如果有command not found用系统自带的包管理安装下,软件版本一般关系不大
注意/bin/sh 的软链接应该是/bin/bash, 在一些系统中默认指向/bin/dash,会造成编译GCC等软件出现错误

1.2 分区

宿主机为kali2.0的虚拟机,在虚拟机中添加一个20G硬盘,启动虚拟机。新加硬件为/dev/sdb:

fdisk /dev/sdb
依次输入: n (添加分区) ---> p (设置分区类型为主分区) ---> 1 (分区号为 1)
         --->回车(默认开始扇区) --->回车(黙认结束扇区)--->w (保存退出)

设置分区可启动:

fdisk /dev/sdb
依次输入:a (设置启动标记)---> 1(第一个分区)---> w(保存退出)

新分好的区为 /dev/sdb1,挂载新分区:

mkdir /opt/lfs
mount /dev/sdb1 /opt/lfs

二、准备编译环境

2.1 创建源码目录

mkdir /opt/lfs
export LFS=/opt/lfs
mkdir -v $LFS/sources
chmod -v a+wt $LFS/sources
wget https://linux.cn/lfs/LFS-BOOK-7.7-systemd/wget-list
wget --input-file=wget-list --continue --directory-prefix=$LFS/sources

2.2 创建tools目录

mkdir -v $LFS/tools
ln -sv $LFS/tools /

2.3 添加 LFS 用户

groupadd lfs
useradd -s /bin/bash -g lfs -m -k /dev/null lfs
passwd lfs
chown -v lfs.lfs $LFS/tools
chown -v lfs.lfs $LFS/sources
su - lfs

2.4 设置lfs用户的环境

2.4.1 设置.bash_profile

cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF

2.4.2设置.bashrc

cat > ~/.bashrc << "EOF"
set +h
umask 022
LFS=/opt/lfs
LC_ALL=POSIX
LFS_TGT=$(uname -m)-lfs-linux-gnu
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL LFS_TGT PATH
export MAKEFLAGS='-j 4'        #四核机器,设置编译时使用4个cpu,加快编译速度
EOF

source .bash_profile

lfs-7.7学习笔记(1)准备篇
lfs-7.7学习笔记(2)构建临时系统
lfs-7.7学习笔记(3)构建 LFS 系统
lfs-7.7学习笔记(4)系统配置