[转]迁移linux到另一块硬盘(分区),首战告捷
一步一步打造自己的Linux--LFS6.3安装过程(二)

一步一步打造自己的Linux--LFS6.3安装过程(一)

獨立的圓 posted @ 2008年2月07日 20:39 in Linux with tags LFS , 16942 阅读

 本站文章已轉移,敬請移步:http://www.xxb.me/ ,謝謝!

I.近日无聊,趁家里网络比学校的好,玩Linux From Scratch,网上有详细教程,但有些地方过时了或者有些小问题,我将之综合整理一下,以作备份用,如有错误,欢迎指出。

(注:本文于2月28日修改,之前在家时由于时间关系,没有把LFS安装完成。回校后重新安装,不再用虚拟机装,改为使用现有的ubuntu 7.10作宿主系统,不再讨论中途重启的问题,如果需要,可以参考《制作LFS过程中各个阶段恢复工作状态的方法 第二版(适合LFS6.3)》

本文参考自以下文章,感谢原作者youbest:

手把手教你如何建立自己的Linux系统 第二版

http://kerrek.linuxfromscratch.org/pub/lfs-livecd/下载安装镜像,我下了lfslivecd-x86-6.3-r2160.iso

II. 构建前的准备工作

用此LiveCD启动电脑,推荐用虚拟机安装LFS,参看ubuntu下VirtualBox 安装和配置指南

启动LiveCD后输入命令cfdisk进行分区管理,保存退出后,进行磁盘分区的格式化:

  1. $ mkswap /dev/hda1
  2. $ mkfs.ext3 /dev/hda2 #格式化为ext3
  3. 或 mkfs.reiserfs /dev/hda2 #格式化为reiserfs
  4. 或 mkfs.xfs /dev/hda2 #格式化为xfs

激活交换分区:

  1. $ swapon /dev/hda1

创建LFS的“创作基地”: (我用现有的ubuntu作宿主系统,故从这步开始制作LFS,登录lfs用户之前一直用root,下文有些路径和实际可能有出入,我就不改了)

  1. $ export LFS=/mnt/lfs
  2. $ mkdir -pv $LFS

相关知识点:
export LFS=/mnt/lfs这条命令的作用是为了后面引用“创作基地”的绝对路径方便而设置LFS这样的环境变量。

加载/dev/hda2到“创作基地”:

  1. $ mount /dev/hda2 $LFS

创建必要的目录并设置属性,创建源代码编译用目录:

  1. $ mkdir -v $LFS/sources
  2. $ chmod -v a+wt $LFS/sources

创建工具链目录:

  1. $ mkdir -v $LFS/tools
  2. $ ln -sv $LFS/tools /

相关知识点:
上面这两句就建立了神奇的工具链目录(是工具链目录不是工具链),这样的创建方式是为了在创建工具链和使用工具链创建目标系统的时候对于工具链的位置都是/tools,这样可保证工具链的正常使用.

创建lfs用户,并设置lfs密码:

  1. $ groupadd lfs
  2. $ useradd -s /bin/bash -g lfs -m -k /dev/null lfs
  3. $ passwd lfs

将tools和sources目录的用户改为lfs,以便后面使用lfs来操作这两个目录:

  1. $ chown -v lfs $LFS/tools
  2. $ chown -v lfs $LFS/sources

登陆到lfs用户:

  1. $ su - lfs

相关知识点:
如果不使用lfs用root也是能完成工具链的,不过需要对root的环境变量进行修改,还要防止因为输入错误而导致覆盖主系统下的文件,所以LFS手册中制作工具链部分就是为了解决这种意外的发生而用lfs用户来建立工具链.

建立lfs用户的环境:

  1. $ cat > ~/.bash_profile << "EOF"
  2. exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
  3. EOF
  4.  
  5. $ cat > ~/.bashrc << "EOF"
  6. set +h
  7. umask 022
  8. LFS=/mnt/lfs
  9. LC_ALL=POSIX
  10. PATH=/tools/bin:/bin:/usr/bin
  11. export LFS LC_ALL PATH
  12. EOF
  13.  
  14. $ source ~/.bash_profile

这里利用了bash的环境变量的设置文件将lfs的环境设置为符合编译工具链要求的最少的环境参数
里面最重要的就是PATH这个参数,目的是为了能够利用工具链里面的工具制作工具链:首先查找/tools/bin下是否有需要的命令,如果没有再到 /bin和/usr/bin下找,然后用/bin或/usr/bin下面的命令来帮助生成需要的命令并放在/tools/bin下,这样此消彼涨,最终可完成一个自给自足的工具链。

检查一下,输入export命令查看输出,应该是:

declare -x HOME="/home/lfs"
declare -x LC_ALL="POSIX"
declare -x LFS="/mnt/lfs"
declare -x OLDPWD
declare -x PATH="/tools/bin:/bin:/usr/bin"
declare -x PS1="\\u:\\w\\\$ "
declare -x PWD="/home/lfs"
declare -x SHLVL="1"
declare -x TERM="linux"

如果没有问题,就可以开始下一步

开始工具链的制作
进入LFS包编译目录:

  1. $ cd $LFS/sources

Binutils-2.17 - Pass 1    (10分钟 #非精确,5分钟以内的一律视为5分钟)

  1. $ tar xvf /lfs-sources/binutils-2.17.tar.bz2
  2. $ mkdir -v binutils-build  #binutils建议使用一个空目录来编译
  3. $ cd binutils-build
  4. $ CC="gcc -B/usr/bin/" \
     ../binutils-2.17/configure --prefix=/tools \
     --disable-nls --disable-werror
  5. $ make
  6. $ make install
  7. $ make -C ld clean
  8. $ make -C ld LIB_PATH=/tools/lib
  9. $ cp -v ld/ld-new /tools/bin
  10. $ cd ..
  11. $ rm -rf binutils-build binutils-2.17

GCC-4.1.2 - Pass 1    (50分钟)

  1. $ tar xvf /lfs-sources/gcc-4.1.2.tar.bz2
  2. $ mkdir -v gcc-build
  3. $ cd gcc-build
  4. $ CC="gcc -B/usr/bin/" \
     ../gcc-4.1.2/configure --prefix=/tools \
     --with-local-prefix=/tools --disable-nls \
     --enable-shared --enable-languages=c
  5. $ make bootstrap
  6. $ make install
  7. $ ln -vs gcc /tools/bin/cc
  8. $ cd ..
  9. $ rm -rf gcc-build gcc-4.1.2

注意:这里不要图省事而不删gcc目录,因为这样可能会给后面的编译产生一些意外的错误。

linux-2.6.22.5    (5分钟  #6.3以前的版本是linux-libc-headers,这个地方郁闷了我很久)

  1. $ tar xvf /lfs-sources/linux-2.6.22.5.tar.bz2
  2. $ cd linux-2.6.22.5
  3. $ make mrproper
  4. $ make headers_check
  5. $ make INSTALL_HDR_PATH=dest headers_install
  6. $ cp -rv dest/include/* /tools/include
  7. $ cd ..
  8. $ rm -rf linux-2.6.22.5

Glibc-2.5.1    (1小时)

  1. $ tar xvf /lfs-sources/glibc-2.5.1.tar.bz2
  2. $ mkdir -v glibc-build
  3. $ cd glibc-build
  4. $ ../glibc-2.5.1/configure --prefix=/tools \
        --disable-profile --enable-add-ons \
        --enable-kernel=2.6.0 --with-binutils=/tools/bin \
        --without-gd --with-headers=/tools/include \
        --without-selinux
  5. $ make
  6. $ mkdir -v /tools/etc
  7. $ touch /tools/etc/ld.so.conf
  8. $ make install
  9. $ cd ..
  10. $ rm -rf glibc-build glibc-2.5.1

相关知识点:
这里的参数--enable-kernel=2.6.0,只是为了说明kernel的大版本,所以不需要根据实际的kernel版本来改,即使是用linux-2.6.22也一样只写2.6.0就可以。

(未完待续)

bstaint 说:
Jun 15, 2011 10:05:49 PM

linux-2.6.22.5 (5分钟 #6.3以前的版本是linux-libc-headers,这个地方郁闷了我很久)

谢谢分享 , 我也遇到这个问题 google来的 呵呵


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter