-
=====================LFS 学习日志=============================
-
第一章:LFS准备
-
一:笔记本里安装了CentOS 6.0【大小20G】 ,通过putty登录CentOS,通过SSH传递文件。
-
关于笔记本如何与虚拟机里面的CentOS主机进行通信,本次步骤如下:
-
①设置:
-
开启虚拟机前,将网络设置选择自定义虚拟网络(Custom Virtual Network)里面的VMnet8(NAT);
-
同时确保笔记本的VMnet8已经开启。
-
②配置:
-
在笔记本cmd下,输入ipconfig /all,查找VMnet8的ip地址,如本次的192.168.13.1 ,掩码值为255.255.255.0 .
-
然后在设置了第①步的虚拟机中的CentOS终端下输入:ifconfig eth0 192.168.13.2 netmask 255.255.255.0 (eth0为默认的以太网卡)以给其配置一个ip。
-
③测试:
-
在笔记本cmd下,ping 192.168.13.2 ,该ip为CentOS的ip地址,如果通表示虚拟机与笔记本建立通信成功。
-
-
-
二:安装完系统后将CentOS 6.0 安装ISO文件用ssh传上去,默认传到/media/uploas目录中,然后挂载到/media/CentOS上,修改了/etc/yum.respon.d下的文件,建立的CentOS的yum源。
挂载CentOS镜像到系统本地
#mkdir /media/CentOS
#mount -o loop /media/uploads/CentOS-6.0-i386-bin-DVD.iso /media/CentOS/
#echo "mount -o loop /media/uploads/CentOS-6.0-i386-bin-DVD.iso /media/CentOS/" > mountOS ;生成脚本供下次使用
#cd /etc/yum.repos.d/
#mv CentOS-Base.repo CentOS-Base.repo.bak
#vi CentOS-Media.repo
----------------------------
[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///media/CentOS/ ;这个是重点
file:///media/cdrom/
file:///media/cdrecorder/
gpgcheck=1
enabled=1 ;这个要改的
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
----------------------------
-
紧接着,进行宿主系统需求检测了,把命令用ssh传上去一执行就出现了一坨的错误了。
-
首先是export LC_ALL=C,它在直接执行下木得问题,但放在script中就一直说它用不了什么的,然后就不用这个脚本了,一行一行的执行。
-
CentOS 6.0 的软件包版本基本是符合LFS 7.2的软件要求的,除了xz的版本稍稍低了点,相关版本对比文件查看version.sh文件。
-
-
!!! #yum install bison ;解决找不到bison程序问题,因centos 6.0默认不安装此软件
-
!!! #yum install byacc ;解决找不到yacc程序问题,
-
!!! #yum install texinfo ;解决找不到textinfo程序问题,
-
-
完成之后可以检查了:
-
#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 [ -e /usr/bin/yacc ];
then echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`";
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 [ -e /usr/bin/awk ];
then echo "/usr/bin/awk -> `readlink -f /usr/bin/awk`";
else echo "awk not found"; fi
gcc --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
echo "Texinfo: `makeinfo --version | head -n1`"
xz --version | head -n1
echo 'main(){}' > dummy.c && gcc -o dummy dummy.c
if [ -x dummy ]
then echo "gcc compilation OK";
else echo "gcc compilation failed"; fi
rm -f dummy.c dummy EOF
#bash version-check.sh //测试是否有通过!!!
-
-
********** written at 2013-01-19 23:23 ************
-
-
-
-
三:LFS系统的分区已经文件格式的建立
-
3.1 分区废话说明
-
-
分区大小至少10G,要创建swap分区,以弥补RAM(内存)的不足,其实swap分区完全可以使用宿主系统的。
-
使用cdisk或fdisk创建分区。更多的关于 RAID和 LVM分区的创建,不在此涉及。
-
记住分区的名字,稍后在 /etc/fstab 文件中会被用到。
-
必备分区:
-
/ 根分区(而不是 /root 分区),10G大小足够,但是用于扩展的话是不够的。
-
swap 交换分区,一般为物理内存(RAM)的两倍,如果磁盘空间受限,创建2G好了,
-
然后使用模拟的磁盘交换空间。
-
可选分区:
-
/boot 推荐,用来存储内核和引导信息,100 mb 足够的,确保这个物理分区在第一块磁盘上。
-
/home 推荐,这个分区应该大点,用于存储文件。
-
/usr 瘦客户端和无盘工作站的服务器的使用目录,对LFS不使用,5GB足够。
-
/opt 对于BLFS用来安装Gnome或者KDE是需要大的空间的,通常5~10GB是足够的。
-
/tmp 一个独立的/tmp 目录是很少的,但是它常用于配置瘦客户端,如果用不需要超过2G。
-
/usr/src对于BLFS的文件存储和对构造LFS共享是有用的,大约30~50GB吧。
-
任何单独的分区需要挂载的话,可以在文件 /etc/fstab 中声明。
3.2分区开始了
在虚拟机中新加了一块硬盘,大小为30G,类型为SCSI。
-
(/dev/sda 为宿主系统的磁盘名, /dev/sdb 为要建立LFS系统的磁盘名,即目标磁盘)
-
①分区:
-
#fdisk /dev/sdb
-
):m //请求帮助
-
):p //打印分区表
-
[因为默认使用的新盘符,如果是使用过的,使用d+n(n为分区序号)]删除再操作
-
# ):n ):p ):1 ):【Enter】 (使用默认的起始位置) ):+100M (作为/boot分区)
-
# ):n ):p ):2 ):【Enter】 (使用承接上面的位置) ):+2048M (作为swapt分区)
-
# ):n ):p ):3 ):【Enter】 (使用承接上面的位置) ):【Enter】 (默认使用后面所有的空间)
-
>write 保存退出!
-
②创建文件系统:
-
#mke2fs -jv /dev/sdb1
-
#mkswap /dev/sdb2
-
#mke2fs -jv /dev/sdb3
-
使用 #debugfs -R feature /dev/sdb1 或者 /dev/sdb3 可以看到与下面的内容相同:
-
has_journal, ext_attr, resize_inode, dir_index, filetype, sparse_super, large_file or needs_recovery。
-
③挂载各分区(挂载分区如果与selinux相冲突的话,可将sellinux关闭重启再进行挂载):
-
# export LFS=/mnt/lfs 设置环境变量,expor导入到全局变量中
-
# mkdir -pv $LFS 创建/ 目录挂载点,-p 可以一次建立多个目录,-v versbos 表示回显信息
-
# mount -v -t ext3 /dev/sdb3 $LFS 挂载/ 目录
-
# mkdir -pv $LFS/boot 创建/boot 挂载点
-
# mount -v -t ext3 /dev/sdb1 $LFS/boot 挂载/boot 目录
-
# /sbin/swapon -v /dev/sdb2 激活swap分区
-
-
④下载包和补丁
-
#mkdir -v $LFS/sources 创建存储源代码的地方
-
#chmod -v a+wt $LFS/sources 使这个目录具有可写和黏着性
-
将包和md5sums文件下载到 $LFS/sources目录中:
-
#pushd $LFS/sources 存储一个目录以备用户使用
-
#md5sum -c md5sums 用md5程序检验下载包的每个md5值是否正确
-
#popd 将当前目录更改到最近, pushd命令存储目录
-
-
四:最后的准备
-
1.因为 $LFS 变量有一直在用,所有要时刻确保 改变的存在,已经正确的存在。
#echo $LFS
同时也确保它的子目录 $LFS/boot 、$LFS/sources 的存在。
尤其在你用 su 切换用户的时候!!!
2.创建 $LFS/tools 目录,它是独立的,在第6章会被抛弃,为什么?因为它的诞生只是为了使得lfs初期的构造能够使用宿主系统的编译器,链接器等工具罢了。
#mkdir -v $LFS/tools
然后为它创建到宿主系统的符号链接,那么它会被指向系统的 /tools 分区
#ln -sv $LFS/tools /
********** modified at 2013-05-17 20:14 ************
3.增加 lfs 用户
使用lfs用户而不是用root是为了将系统的可能造成的损失降到最小,同时在增加lfs用户名也会新增lfs用户组。
#groupadd lfs
#useradd -s /bin/bash -g lfs -m -k /dev/null lfs
解释:-s shell,-g group,-m 用户登录目录,-k 重写/etc/login.defs内容
#passwd lfs
#chown -v lfs $LFS/tools
#chown -v lfs $LFS/sources
#su - lfs
为lfs用户设置密码,赋权之后,切换到lfs用户。
4.最后的准备:设置环境
创建2个新的启动脚本,能够让lfs用户登录的时候用到。
# cat > ~/.bash_profile << "EOF"
> exec env -i HOME=$HOME TERM=$TERM PS1='\u:\v\$' /bin/bash
> EOF
当用户登录时替换成一个新的bash环境,而不会替换掉 HOME、TERM、PS1变量。这样确保不想要的和垃圾环境变量从宿主系统中泄露到构造环境中,这样确保构造的 lfs 系统是干净的。
新的 shell 是一个 non-login shell,它不会读取 /etc/profile 或 .bash_profile ,但是会立即读取.bashrc 文件。创建 .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
解释: set +h ,关闭了bash的hash功能,hash是bash用来建立hash表,以减少搜索可执行文件位置花费的时间。
因为新的工具在 $LFS/tools 中会不断的增加,我们需要它不断的去搜索,而不是去查表,避免它搜索不到我们需要的命令。
umask 022 ,新的文件和文件夹,只能被所有者读写和执行,所属组和其它用户只读写。
LC_ALL=POSIX ,LC (Location Of Certain Program)特定程序的本土化。 “POSIX” or “C” 是等价的,它确保所有的事物能在chroot环境中正常工作。
LFS_TGT ,设置了非默认的机器称呼。
PATH 结合关闭了bash的hash功能,同时限制lfs从宿主系统搜索老的程序的问题。
脚本写完,立即启用:
#source ~/.bash_profile
5.关于 SBUs(标准构造单元)
想要酷睿 2支持2个处理器同时工作:#export MAKEFLAGS='-j 2' 或者构造时用 #make -j2
6.关于测试事宜
大部分包提供了测试。新安装的包测试下是有好处的,它可以提供完整性检查。
有些包是必须测试的,如GCC, Binutils, 和 Glibc,虽然过程很慢,但是这是必须的。
在第5章,不建议每一个人都运行测试,因为那一章常常会导致很多费解的错误出现。那些测试指导是给测试人员和开发者受益的,所以,记住,它们是可选的。
关于Binutils 和 GCC 在伪终端的测试大多数问题是由于没有正确的安装devpts文件系统,。
一些包的测试失败,可以相关的日志看看这些包错误是否为预期的。
********** written at 2013-05-18 11:07 ************