LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 52171|回复: 215

[大话LFS/BLFS]从LFS到BLFS轻松上手——关于编译LFS/BLFS的可行性报告

[复制链接]
发表于 2007-5-28 10:57:03 | 显示全部楼层 |阅读模式
[color="Red"]
从LFS到BLFS轻松上手
——关于编译LFS/BLFS的可行性报告



青 铜 镜

[color="Red"]严正声明:本贴可能含有危险成份,未满18岁的网友,为了您的身体健康、思想健康和机器健康着想,请勿阅读!
严重警告:如果您决定继续阅读下去,那么表明您愿意承担因阅读本贴后所产生的不可预知的后果!
版权声明:本水贴部分为唐师父口述,部分引自BLFS官方文档,青铜镜执笔!一般人我不告诉他!


引  言


LFS/BLFS是一个浩大的软件编译安装工程,耗时耗精力。而且,有好多朋友辛辛苦苦花了几天甚至是几个星期的时间编译安装LFS,到了结束时还不一定能够顺利启动系统,最后只好放弃,实在是让人不爽。本贴的目的,就是让喜欢LFS的朋友能够简单、快速、有效地完成从LFS到BLFS的艰巨任务,让LINUX在机器上流畅地运行起来。
唐师父说:世界是美好的,生命是珍贵的!不要在折腾电脑上消耗太多的精力!在电脑面前呆得太久了,这样不好!电脑只是一种工具,而不要把它当成玩具!这样妈妈会不放心的!请问:你妈贵姓?
    本水贴共分三集,即上集、下集和续集。唐师父说:青铜镜,你这样写贴,难道就不能一个就写完?这样写贴,你还有时间晒衣服吗?青铜镜答:根据内容不同分为三集来写,主要是为了方便查阅。上集主要是介绍编译安装LFS,下集主要是介绍BLFS,编译方向是KDE桌面。续集则是对编译KDE桌面多媒体功能的补充介绍。再说了,人家琼瑶老太太写《还珠格格》,都连续写了三部,俺为何就不能写三集?唐师父说:打雷啦,下雨收衣服啊!
    小平同志说过:不管黑猫白猫,抓得到老鼠的就是好猫。
    青铜镜模仿着说:不管用啥方法,能够装上LFS/BLFS的就是管用的方法!
    唐师父读易经:乾以易知,坤以简能。易则易知,简则易从。易知则有亲,易从则有功。有亲则可久,有功则可大。可久则贤人之德,可大则贤人之业。易简,而天下之理得矣;天下之理得,而成位乎其中矣。
    哈哈哈!
 楼主| 发表于 2007-5-28 10:58:52 | 显示全部楼层

上 集 轻松搞定LFS

[color="Red"]上   集  轻松搞定LFS

第一章  启  动


    到www.linuxfromscratch.org下载LiveCD,刻成光盘。俺青铜镜当时下载的LiveCD的版本号是6.2-1。不同版本号的LiveCD是有区别的。请各位看官注意!将LFS的LiveCD放将光驱,从光驱启动,将会看到以下按系列号顺序出现的步骤:

01.01
boot:
按F1将会出现帮助画面。
可以设置显示屏的显示配置:
795=1280*1024*24
794=1280*1024*16
792=1024*768*24
791=1024*768*16
789=800*600*24
788=800*600*16

可以在boot后输入
linux vga=792或是其他数字以设置屏幕显示的配置。
也可以输入
TZ=Asia/Shanghai

设置时区。

01.02
Configure System Clock
配置系统时钟
02.01 Asia/Shanghai
02.02 localtime

01.03
Regional setting
Choose your locale
中文有以下各项:
03.01 Chinese Traditional BIG5
03.02 Chinese Traditional UTF8
03.03 Chinese Traditional EUC-TW
03.04 Chinese Simplified GB2312
03.05 Chinese Simplified GB18030
03.06 Chinese Simplified GBK
03.07 Chinese Simplified UTF-8

俺青铜镜选的是Chinese Simplified UTF-8这一项。这样,当LiveCD启动startx以后,X的界面就是中文的,很清爽啊!

01.04
Configrm/edit Setting
这里显示默认的自动配置是:
locale:                       zh_CN.UTF8
Console keymap:               defkeymap
Console font:                 default8*16
autoconverted from charset:
X keymap:                     us


01.05
Press Enter to activate this virtual console
出现以上提示时,按回车进入控制台。至此,LiveCD算是正式启动完成了。

01.06
进入控制台以后,先对硬盘进行分区,输入cfdisk命令进行分区。具体的分区方法很简单,这里就省了。
以下是我的分区:
Name   PartType  FS Type            Size(MB)   
hda1   Primary   linux ext3         3960.95
hda2   Primary   linux swap/solaris  403.04


01.07
格式化分区:
mke2fs -jv /dev/hda1  (这是俺的硬盘分区设备号,俺只分一个区,后面fstab文件要用到!)
格式化交换分区,同时启动它:
mkswap /dev/hda2
swapon /dev/hda2


01.08
启动X,进入的是XFce桌面管理器:
startx

01.09
Xfce的下面是控制台,控制台有“终端防真程序”,点击一下,启动它。还有一部手册,图标是一个救生圈。打开手册后,将地址指到://usr/share/LFS-BOOK-6.2-HTML找到indel.html,打开LFS手册。这样,你就可以一边看着手册,一边输入命令了。哈哈哈。青铜镜的意见和建议:一般情况下,如果命令相对比较短而且容易记住,推荐用手工输入;如果命令比较长而且复杂,甚至是容易出错的,建议用复制的方法输入命令!要不到了最后系统收工时,因为其中的命令出错而让人前功尽弃,那才是让人不爽!比如下面这条命令:
GCC_INCLUDEDIR=`dirname $(gcc -print-libgcc-file-name)`/include &&
find ${GCC_INCLUDEDIR}/* -maxdepth 0 -xtype d -exec rm -rvf '{}' \; &&
rm -vf `grep -l "DO NOT EDIT THIS FILE" ${GCC_INCLUDEDIR}/*` &&
unset GCC_INCLUDEDIR

飞豹大侠的作法是,不管命令长短,一般都是手工输入……太长的,用脚工,据说是佛山无影脚。哈哈哈。对于飞豹大侠过于个性化或是偏执的行为,青铜镜的看法是:不支持、不赞成、不提倡、不反对、不关注。反正是萝卜青菜,各有所爱嘛,更何况LFS是个性化很强的东西,飞豹大侠爱咋折腾,我们只管看热闹就是了。没事还可以冲他泼冷水,恶搞一下下也好。
据唐师父所掌握的可靠消息,近来江湖人才紧缺啊!为了缓解江湖人才紧缺的问题,飞豹大侠作出了一个伟大的、具有划时代意义的决定:他准备要出书了!此乃青铜镜的独家新闻!希望广大LINUX粉丝支持飞豹大侠具有里程碑意义的决定!有部戏叫做《拿什么来拯救你,我的爱人》,青铜镜想来想去,正确的答案是:钱!当然是得拿钱!我们要支持飞豹大侠,当然得拿出点钱意来呀!为此,青铜镜决定赞助飞豹大侠人民币一块钱,一块钱可以买一个葱油大饼,当飞豹大侠写书到半夜时,肚子饿了,可以买一个葱油大饼吃!当然,要是飞豹大侠拿青铜镜赞助的一块钱去买一个鸡蛋的话,那样的话前景就更加美好了:鸡蛋里孵出小鸡,小鸡又生下一堆鸡蛋,又孵出一群小鸡,子子孙孙生生不息,飞豹大侠就可以开个养鸡场了。呵呵…… 还有,江湖传闻天花大侠在修炼《葵花宝典2007》,飞豹大侠您老人家得赶紧写书稿呀,要不等你的书出来时,天花大侠的武功早炼好了,那时天花大侠就可以千秋万载,一统江湖了……

01.10
转到“终端防真程序”,开始LFS的制作历程。剩下的工作,如果你是新手或者是比较懒,只要将手册中的命令选中,然后转到“终端防真程序”里面粘贴、回车就行了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-28 11:08:02 | 显示全部楼层

第二章 配 置

[color="Red"]
第二章 配  置


    青铜镜下载的LiveCD是6.2-1版本的,LiveCD中的jhalfs是1.0,这个jhalfs-1.0比较爽啊,只要稍做配置一下,就可以让电脑自动给俺们编译LFS了,实在是方便呀!当然,也有人反对说,我们做LFS的目的就是学习,还是手工输入一条一条命令比较好。其实青铜镜在前面说过了, 俺想简单、快速、有效地完成从LFS到BLFS的艰巨任务,俺要学习LFS,俺已将LFS的手册打印出来了,拿在手上,天天都可以拜读,当然啦,俺这也是一种学习方法,你要一条一条命令输入,青铜镜坚决不拦着你,还在精神上支持你哦!唐师父说:我佛慈悲!大伙要爱惜身体呀!

02.01
创建分区好了以后挂载目录
export LFS=/mnt/lfs
mkdir -pv $LFS
mount -v -t ext3 /dev/hda1 $LFS (各位看官,请注意自己的分区设备号)


02.02
配置jhalfs文件。点开“终端防真程序”,当前的目录就是root,里面就有jhalfs-1.0这个文件夹,先进入jhalfs-1.0这目录在里面编辑配置文件。
02.02.01
修改LFS/config,输入命令:
cd jhalfs-1.0
vi LFS/config
下面是LFS/config文件的全部内容及编辑说明:
####
#
# Configuration file for the LFS module
#
# $Id: config 2822 2006-07-16 10:06:03Z manuel $
#
#####
#--- Location of fstab file (if empty, a template is created)
FSTAB=   (注:留空!我们也可以先将fstab写好以后,放到指定位置并在这里填上fstab的路径。)
#--- Fully qualified path to a kernel config file
# If no config file is  specified the kernel is NOT compiled
CONFIG= (注:留空!我们也可以先行将编译内核的.config放到指定位置并在这里填上路径。)

# Get the kernel package and patches even if no configutation file
# has been supplied? 0(no)/1(yes)
GETKERNEL=1  (注:修改这里,将原来的0改为1)

#--- Book's sources directory
# If you have previously checked out the book from the repository
BOOK=/usr/share/LFS-BOOK-6.2-XML(注:这里原来是空的,将手册的路径写到这里!)

#==== INTERNAL VARIABLES ====
# Don't edit it unless you know what you are doing

#--- Extra files that need be copied to $JHALFSDIR
FILES=""

#--- Default stylesheet
XSL=lfs.xsl

#--- Book version
LFSVRS=development
TREE=trunk/BOOK

#--- Name of the makefile
MKFILE=$JHALFSDIR/Makefile

修改好上面的配置以后,保存退出。(唐师父说:按esc键,接着输入冒号:,在冒号后面输入wq,回车退去。)

02.02.02
修改common/config,输入命令:
vi common/config
下面是common/config文件的全部内容及编辑说明:
#####
#
# common configuration file
#
# $Id: config 2799 2006-06-20 23:43:07Z georgeb $
#####

declare -r SVN="svn://svn.linuxfromscratch.org"
declare -r LOG=000-masterscript.log

#--- Mount point for the build
BUILDDIR=/mnt/lfs    (注:这里原来是build_dir,改为lfs。)

# Create SBU and disk usage report  0(no)/1(yes)
# NOTE: requires to have bc installed on the host
REPORT=1

#=== Getting packages ===
#    Files will be retrieved from the local archive SRC_ARCHIVE
#    (if defined) or the 'net and will be stored in $BUILDDIR/sources
#--- Download the source packages 0(no)/1(yes)
GETPKG=0

#--- The local repository for packages/file
#    Used only if GETPKG = 1
#    Any missing file will be downloaded and archived here,
#    if the user has the right priviledges.
SRC_ARCHIVE=$SRC_ARCHIVE

# --- Server used if the file isn't found in SRC_ARCHIVE.
# As a last resort, the file will dowloaded from upstream, if possible.

SERVER=ftp://ftp.lfs-matrix.net
#=== Build options ===
#--- Automatically run the makefile once it has been created  0(no)/1(yes)
RUNMAKE=0

#--- Optimize the build  [0-2]
#  0 = no optimization
#  1 = optimize final system only
#  2 = optimize both temporary tools and final system
# Optimization values are set in optimize/* files
OPTIMIZE=0

#--- Run test suites  [0-3]
#  0 = none
#  1 = only chapter06 Glibc, GCC and Binutils testsuites
#  2 = all chapter06 testsuites
#  3 = all chapter05 and chapter06 testsuites
#    (in CLFS, alias to 2)
TEST=1(如果在编译安装过程中你需要测试,那么这里不用修改。俺从来都不test,因此俺将这里修改为0。)

#--- Run the stripping phases  0(no)/1(yes)
STRIP=1

#--- page definition for groff letter/A4
PAGE=letter  (我国公文习惯使用的纸张尺寸标准是A4,这里改为A4。)

#--- set default timezone.
TIMEZONE=${TZ:-GMT}(注:这里是时区。青铜镜一直填写Asia/Shanghai,晨想姐姐推荐我们中华人民共和国的时区。)

#--- install the optional vim-lang package  0(no)/1(yes)
VIMLANG=1

#--- Language information in /etc/profile  See <locale -a> for values
LANG=$LANG (注:这里是系统语言。推荐en_US.UTF8。有一次,青铜镜在前面第一章第三小节选的是Chinese Simplified UTF-8这一项,这里没有修改,导致jhalfs运行到第六章的6.45. Man-DB-2.4.3时停止了,没办法,只得手工继续编译安装,很不爽!其实,刚刚装好的LFS都是满屏鸟语的,想汉化,还得到后来装上KDE时才方便呀!)
LC_ALL=$LC_ALL # (not used in LFS)

#--- Include the keymap in the kernel if defined. Path to the
#    keymap file relative to /usr/share/kbd/keymaps/
#    (e.g., i386/qwerty/us.map.gz) or "none"
#    Not used in LFS
KEYMAP=none

#=== Variables needed by iterative comparison analysis ===
#--- Should some iterative comparison analysis by made? 0(no)/1(yes)
COMPARE=0

#--- The number of final stage builds to create and compare, min. 2, max. 5
ITERATIONS=3

#--- Run ICA testing 0(no)/1(yes)
RUN_ICA=0

#--- Run farce testing 0(no)/1(yes)
RUN_FARCE=0

#==== INTERNAL VARIABLES ====
# Don't edit it unless you know what you are doing
#--- Working directories
SCRIPT_ROOT=jhalfs
  JHALFSDIR=$BUILDDIR/$SCRIPT_ROOT
     LOGDIR=$JHALFSDIR/logs
TESTLOGDIR=$JHALFSDIR/test-logs

#--- File listing package contents (from where package sources dir is extracted)
PKG_LST=unpacked

#--- ICA report log directory
ICALOGDIR=$LOGDIR/ICA

#--- farce report log directory
FARCELOGDIR=$LOGDIR/farce

02.03
修改optimize/opt_config.d/O3pipe_march,输入命令:
vi optimize/opt_config.d/O3pipe_march
下面是optimize/opt_config.d/O3pipe_march文件的全部内容:
#####
#
#  $Id: O3pipe_march 2677 2006-05-11 20:21:14Z manuel $
#
#####
#
#  MODE O3pipe_march configuration
#
#  Usage: - Apply optimization string to each variable
#         - "unset" will cause the variable to be not set
#          instead of just set to null.
#
#  Use this as an example for modeA_modeB combined modes
#
#####

# Inherit optimizations from O3pipe
source optimize/opt_config.d/O3pipe

CFLAGS_O3pipe_march=$CFLAGS_O3pipe" -march=pentium4"
CXXFLAGS_O3pipe_march=$CFLAGS_O3pipe"  -march=pentium4"
LDFLAGS_O3pipe_march=$LDFLAGS_O3pipe

OTHER_CFLAGS_O3pipe_march=$CFLAGS_O3pipe" -march=pentium4"
OTHER_CXXFLAGS_O3pipe_march=$CXXFLAGS_O3pipe" -march=pentium4"
OTHER_LDFLAGS_O3pipe_march=$LDFLAGS_O3pipe

说明:青铜镜的CPU是AMD Althon XP 2000+,俺在这里将-march=pentium4全部改为-march=athlon-xp。

02.04
设定环境变量,代码:
export SRC_ARCHIVE=/lfs-sources
配置至此,差不多可以运行jhalfs啦!输入命令export看看一下设置。

02.05
好戏来了,执行以下命令:
time ./lfs -G -M
其间系统会有相应的提示,它会问你,你对刚刚的设置是不是很爽啊?爽的鸟语是不是happy?接下来将是考验你耐心的时刻!如果你的机器性能强劲、速度飞快,估计用不了多长时间,你的LFS半成品就可新鲜出炉了。
回复 支持 反对

使用道具 举报

小水流木草蛇 该用户已被删除
发表于 2007-5-28 11:21:43 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-28 11:30:53 | 显示全部楼层
[color="Red"]
第三章  收   工


    当你看到屏幕上有这些鸟语时,也就是你的jhalfs打完收工了:
……
-set-up the boot loader, except if building CLFS with METHOO=boot, You can set-up the host bootloader or the new boot-loader installed on the new system.
    If the last, you must to mount the virtual file system, re-enter the chroot and be sure that /dev is populated with the required devices before configure the boot-loader. When ready, exit from the chroot and umount the file systems.

    If you are an experienced LFS user, several of those steps can be skipped or done in a different way. But then, that is something that you already know and there is no need to discuss it here.
……
    Have a nice day:-)
done
    Goodbye and thank you for choosing <jhalfs>
TIME   
real 192m39.637s
user 153m2.200s
sys  28m39.990s
(机器配置:Athlon XP 2000+  DDR400 256M*2双通道  SWAP:403.04M)
刚刚青铜镜说了,至此,你的LFS半成品就可新鲜出炉了。我们还得进行最后的收尾工作!

03.01
设定系统配置文件
03.01.01
挂载并填充 /dev 目录
mount --bind /dev $LFS/dev

03.01.02
挂载虚拟内核文件系统
mount -vt devpts devpts $LFS/dev/pts
mount -vt tmpfs shm $LFS/dev/shm
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys

03.01.03
进入chroot环境
chroot "$LFS" /usr/bin/env -i \
    HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
    PATH=/bin:/usr/bin:/sbin:/usr/sbin \
    /bin/bash --login

03.01.04
设定root password
passwd root

03.01.05
编辑/etc/sysconfig/clock
# Begin /etc/sysconfig/clock

UTC=1        (注:青铜镜一般将这里改为0)

# End /etc/sysconfig/clock

03.01.06
运行下面的命令创建 /etc/sysconfig/network 文件并设置主机名:
echo "HOSTNAME=<lfs>" > /etc/sysconfig/network

<lfs> 请用您的计算机名替换 [lfs] ,哈哈,青铜镜建议大伙用自己名字的拼音,这样很有成就感,可以大大满足了自己的虚荣心!不要在这里输入全限定域名(Fully Qualified Domain Name),FQDN 的信息稍后将放在 /etc/hosts 文件里。
03.01.07
编辑 /etc/hosts 文件:
# Begin /etc/hosts (network card version)

127.0.0.1 localhost
<192.168.1.1><HOSTNAME.example.org> [alias1] [alias2 ...]

# End /etc/hosts (network card version)

把 [192.168.1.1] 和 [<HOSTNAME>.example.org] 更改为特定用户或特别要求所需要的值(如果这台机器要连入一个已存在的网络,并且网络/系统管理员已经给您分配了一个 IP 地址)。 如果您不打算配置网卡,可以采用下面的方式:

# Begin /etc/hosts (no network card version)

127.0.0.1 <HOSTNAME.example.org> <HOSTNAME> localhost

# End /etc/hosts (no network card version)

03.01.08
编辑/etc/sysconfig/network-devices/ifconfig.eth0/ipv4文件:
ONBOOT=yes
SERVICE=ipv4-static
IP=192.168.1.1
GATEWAY=192.168.1.2
PREFIX=24
BROADCAST=192.168.1.255

03.01.09
编辑/etc/resolv.conf文件:
# Begin /etc/resolv.conf

domain {<域名>}
nameserver <主域名服务器IP地址>
nameserver <副域名服务器IP地址>

# End /etc/resolv.conf

03.01.10
编辑/etc/fstab文件。如果你在前面已经做好这个文件,并配置到jhalfs里面,那么这里就可以省略了。
# Begin /etc/fstab

# file system  mount-point  type   options         dump  fsck
#                                                        order

/dev/hda1      /            ext3    defaults       1     1
/dev/hda2      swap         swap    pri=1          0     0
proc           /proc        proc    defaults       0     0
sysfs          /sys         sysfs   defaults       0     0
devpts         /dev/pts     devpts  gid=4,mode=620 0     0
shm            /dev/shm     tmpfs   defaults       0     0
# End /etc/fstab

(请注意硬盘设备号!一定要按照自己的分区设置,不要照抄青铜镜的!要不你的系统会起不来了!)

03.02
安装内核和grub
03.02.01
安裝kernel(如果你已备好.config文件并写入jhalfs的设定路径,则内核早安装好了!)
cd /sources
tar -jxvf linux-2.6.16.27.tar.bz2
cd linux-2.6.16.27.tar.bz2
patch -Np1 -i ../linux-2.6.16.27-utf8_input-1.patch
make mrproper
make menuconfig
make
make modules_install
cp -v arch/i386/boot/bzImage /boot/lfskernel-2.6.16.27
cp -v System.map /boot/System.map-2.6.16.27
cp -v .config /boot/config-2.6.16.27
install -d /usr/share/doc/linux-2.6.16.27 &&
cp -r Documentation/* /usr/share/doc/linux-2.6.16.27
cd ..
rm -rf linux-2.6.16.27.tar.bz2

03.02.02
安裝grub
运行 grub shell:
grub
root (hd0,0) (注意分区设备号!)
setup (hd0)
quit

创建一个 "显示菜单"文件定义 GRUB 的启动菜单:
cat > /boot/grub/menu.lst << "EOF"
# Begin /boot/grub/menu.lst

# By default boot the first menu entry.
default 0

# Allow 30 seconds before booting the default.
timeout 30

# Use prettier colors.
color green/black light-green/black

# The first entry is for LFS.
title LFS 6.2
root (hd0,0)     (注意硬盘分区设备号!)
kernel /boot/lfskernel-2.6.16.27 root=/dev/hda1  (注意你自己的硬盘分区设备号!)
EOF

FHS 规定 GRUB 的 menu.lst 文件必须链接到 /etc/grub/menu.lst。为了符合这个规定,可以用下面的命令:
mkdir -v /etc/grub &&
ln -sv /boot/grub/menu.lst /etc/grub


03.03
完成,重启系统!
首先,退出 chroot 环境:
logout

卸载虚拟文件系统:
umount -v $LFS/dev/pts
umount -v $LFS/dev/shm
umount -v $LFS/dev
umount -v $LFS/proc
umount -v $LFS/sys

卸载 LFS 自己的文件系统:
umount -v $LFS

重启系统:
shutdown -r now
回复 支持 反对

使用道具 举报

发表于 2007-5-28 15:21:02 | 显示全部楼层
留名支持 !!
请继续 !!
回复 支持 反对

使用道具 举报

发表于 2007-5-28 15:58:14 | 显示全部楼层
很好.支持一下.希望镜子做出自己特点的发型板本.造福人类,阿门!
回复 支持 反对

使用道具 举报

发表于 2007-5-28 17:19:16 | 显示全部楼层
好文,而且还不时的幽默一下,呵呵
回复 支持 反对

使用道具 举报

发表于 2007-5-28 19:40:10 | 显示全部楼层
好!楼主辛苦了!
回复 支持 反对

使用道具 举报

发表于 2007-5-28 19:44:47 | 显示全部楼层
很期待下集!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表