完全手工打造自定义的LINUX
作者 佚名技术
来源 Linux系统
浏览
发布时间 2012-05-09
|
lfs 用户登录的时候,初始 shell 通常是一个登陆shell(login shell),它会读取宿主系统的 /etc/profile 文件(可能包含一些设置和环境变量),然后继续读取 .bash_profile 文件来完成登录初始化..bash_profile 文件中的 exec env -i.../bin/bash 命令用完全空的环境来取代当前的环境(除了继承 HOME, TERM, PS1 变量外).这样能保证我们的编译环境不会被宿主系统中不必要的或者有潜在危险的环境变量所影响,从而确保获得一个干净的工作环境.
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 export cd /mnt/lfs/sources/ |
二:构建临时编译环境.
这里的总体目标是提供一个临时环境,您可以 chroot 到这个环境,在里面构建一个干净、没有问题的目标 LFS 系统.为了尽量的与宿主系统分开,我们创建了一个自包含、自依赖的工具链.
1:Binutils第一遍
大家可以注意到后面所有的解包命令均使用tar xvf来完成,而不管文件的压缩方式是bz2还是gz,这是较新的tar程序都具有自动识别后缀名并自动调用相应的解压缩工具的能力,可以不需要指定压缩方式因LFS的LiveCD中提供的tar版本比较新,后面制作的tar版本也比较新,因此支持自动识别的能力,同时为了使文章的解压命令 看起来比较统一方便维护(同样对于想制作成脚本的朋友也会比较方便)因此后面统一使用tar xvf来解压.
tar xvf /lfs-sources/binutils-2.17.tar.bz2 cd binutils-2.17/ mkdir -v ../binutils-build 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/ rm -rf binutils-2.17/ |
2:GCC第一遍
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 -sv gcc /tools/bin/cc cd .. rm -rf gcc-build/ rm -rf gcc-4.1.2/ |
3:Linux-2.6.22.5 API 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 |
4:Glibc
tar xvf /lfs-sources/glibc-2.5.1.tar.bz2 cd glibc-2.5.1 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/ rm -rf glibc-2.5.1/ |
5:调整并测试工具链
mv -v /tools/bin/{ld,ld-old} mv -v /tools/$(gcc -dumpmachine)/bin/{ld,ld-old} mv -v /tools/bin/{ld-new,ld} ln -sv /tools/bin/ld /tools/$(gcc -dumpmachine)/bin/ld gcc -dumpspecs | sed ''s@^/lib/ld-linux.so.2@/tools&@g'' > `dirname $(gcc -print-libgcc-file-name)`/specs 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 |
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn
为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
|