-
$ mkswap /dev/hda1
-
$ mkfs.ext3 /dev/hda2 #格式化为ext3
-
或 mkfs.reiserfs /dev/hda2 #格式化为reiserfs
-
或 mkfs.xfs /dev/hda2 #格式化为xfs
[转]迁移linux到另一块硬盘(分区),首战告捷
一步一步打造自己的Linux--LFS6.3安装过程(一)
一步一步打造自己的Linux--LFS6.3安装过程(二)
I.近日无聊,趁家里网络比学校的好,玩Linux From Scratch,网上有详细教程,但有些地方过时了或者有些小问题,我将之综合整理一下,以作备份用,如有错误,欢迎指出。
(注:本文于2月28日修改,之前在家时由于时间关系,没有把LFS安装完成。回校后重新安装,不再用虚拟机装,改为使用现有的ubuntu 7.10作宿主系统,不再讨论中途重启的问题,如果需要,可以参考《制作LFS过程中各个阶段恢复工作状态的方法 第二版(适合LFS6.3)》)
到http://kerrek.linuxfromscratch.org/pub/lfs-livecd/下载安装镜像,我下了lfslivecd-x86-6.3-r2160.iso
II. 构建前的准备工作
用此LiveCD启动电脑,推荐用虚拟机安装LFS,参看ubuntu下VirtualBox 安装和配置指南。
启动LiveCD后输入命令cfdisk进行分区管理,保存退出后,进行磁盘分区的格式化:
激活交换分区:
-
$ swapon /dev/hda1
创建LFS的“创作基地”: (我用现有的ubuntu作宿主系统,故从这步开始制作LFS,登录lfs用户之前一直用root,下文有些路径和实际可能有出入,我就不改了)
-
$ export LFS=/mnt/lfs
-
$ mkdir -pv $LFS
相关知识点:
export LFS=/mnt/lfs这条命令的作用是为了后面引用“创作基地”的绝对路径方便而设置LFS这样的环境变量。
加载/dev/hda2到“创作基地”:
-
$ mount /dev/hda2 $LFS
创建必要的目录并设置属性,创建源代码编译用目录:
-
$ mkdir -v $LFS/sources
-
$ chmod -v a+wt $LFS/sources
创建工具链目录:
-
$ mkdir -v $LFS/tools
-
$ ln -sv $LFS/tools /
相关知识点:
上面这两句就建立了神奇的工具链目录(是工具链目录不是工具链),这样的创建方式是为了在创建工具链和使用工具链创建目标系统的时候对于工具链的位置都是/tools,这样可保证工具链的正常使用.
创建lfs用户,并设置lfs密码:
-
$ groupadd lfs
-
$ useradd -s /bin/bash -g lfs -m -k /dev/null lfs
-
$ passwd lfs
将tools和sources目录的用户改为lfs,以便后面使用lfs来操作这两个目录:
-
$ chown -v lfs $LFS/tools
-
$ chown -v lfs $LFS/sources
登陆到lfs用户:
-
$ su - lfs
相关知识点:
如果不使用lfs用root也是能完成工具链的,不过需要对root的环境变量进行修改,还要防止因为输入错误而导致覆盖主系统下的文件,所以LFS手册中制作工具链部分就是为了解决这种意外的发生而用lfs用户来建立工具链.
建立lfs用户的环境:
-
$ cat > ~/.bash_profile << "EOF"
-
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
-
EOF
-
-
$ cat > ~/.bashrc << "EOF"
-
set +h
-
umask 022
-
LFS=/mnt/lfs
-
LC_ALL=POSIX
-
PATH=/tools/bin:/bin:/usr/bin
-
export LFS LC_ALL PATH
-
EOF
-
-
$ source ~/.bash_profile
这里利用了bash的环境变量的设置文件将lfs的环境设置为符合编译工具链要求的最少的环境参数
里面最重要的就是PATH这个参数,目的是为了能够利用工具链里面的工具制作工具链:首先查找/tools/bin下是否有需要的命令,如果没有再到 /bin和/usr/bin下找,然后用/bin或/usr/bin下面的命令来帮助生成需要的命令并放在/tools/bin下,这样此消彼涨,最终可完成一个自给自足的工具链。
检查一下,输入export命令查看输出,应该是:
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包编译目录:
-
$ cd $LFS/sources
Binutils-2.17 - Pass 1 (10分钟 #非精确,5分钟以内的一律视为5分钟)
-
$ tar xvf /lfs-sources/binutils-2.17.tar.bz2
-
$ mkdir -v binutils-build #binutils建议使用一个空目录来编译
-
$ cd binutils-build
-
$ CC="gcc -B/usr/bin/" \../binutils-2.17/configure --prefix=/tools \--disable-nls --disable-werror
-
$ make
-
$ make install
-
$ make -C ld clean
-
$ make -C ld LIB_PATH=/tools/lib
-
$ cp -v ld/ld-new /tools/bin
-
$ cd ..
-
$ rm -rf binutils-build binutils-2.17
GCC-4.1.2 - Pass 1 (50分钟)
-
$ tar xvf /lfs-sources/gcc-4.1.2.tar.bz2
-
$ mkdir -v gcc-build
-
$ cd gcc-build
-
$ CC="gcc -B/usr/bin/" \../gcc-4.1.2/configure --prefix=/tools \
--with-local-prefix=/tools --disable-nls \--enable-shared --enable-languages=c -
$ make bootstrap
-
$ make install
-
$ ln -vs gcc /tools/bin/cc
-
$ cd ..
-
$ rm -rf gcc-build gcc-4.1.2
注意:这里不要图省事而不删gcc目录,因为这样可能会给后面的编译产生一些意外的错误。
linux-2.6.22.5 (5分钟 #6.3以前的版本是linux-libc-headers,这个地方郁闷了我很久)
-
$ tar xvf /lfs-sources/linux-2.6.22.5.tar.bz2
-
$ cd linux-2.6.22.5
-
$ make mrproper
-
$ make headers_check
-
$ make INSTALL_HDR_PATH=dest headers_install
-
$ cp -rv dest/include/* /tools/include
-
$ cd ..
-
$ rm -rf linux-2.6.22.5
Glibc-2.5.1 (1小时)
-
$ tar xvf /lfs-sources/glibc-2.5.1.tar.bz2
-
$ mkdir -v glibc-build
-
$ cd glibc-build
-
$ ../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 -
$ make
-
$ mkdir -v /tools/etc
-
$ touch /tools/etc/ld.so.conf
-
$ make install
-
$ cd ..
-
$ rm -rf glibc-build glibc-2.5.1
相关知识点:
这里的参数--enable-kernel=2.6.0,只是为了说明kernel的大版本,所以不需要根据实际的kernel版本来改,即使是用linux-2.6.22也一样只写2.6.0就可以。
(未完待续)
- 版权所有,转载请遵循“署名-非商业用途-保持一致”创作共用协议。
