七. 构建临时系统

  1. 通用编译指南

    a. 确认是否正确设置了 LFS 环境变量

  1. echo $LFS

    b. 假定你已经正确地设置了宿主系统需求和符号链接

    c. 对于每个软件包:

      (1). 确保解压软件包时你使用的是 lfs 用户

      (2). 除非特别说明,删除解压出来的目录和所有编译过程中生成的 build 目录

  2. 执行shell脚本,完成临时系统的构建

  1. cd $LFS/sources
  2. chmod +x ch5-build.sh
  3. ./ch5-build.sh

  

  3. 改变属主

    以后部分的命令都必须以 root 用户身份执行而不再是 lfs 用户。另外,再次确认下 $LFS 变量在 root 用户环境下也有定义。

  当前,$LFS/tools 目录属于 lfs 用户,通过下面的命令将 $LFS/tools 目录的属主改为 root 用户:

  1. su - root
    export LFS=/mnt/lfs
    chown -R root:root $LFS/tools

  

八. 构建LFS系统

  1. 准备虚拟内核文件系统

  1. mkdir -pv $LFS/{dev,proc,sys,run}
  2. mknod -m 600 $LFS/dev/console c 5 1
  3. mknod -m 666 $LFS/dev/null c 1 3
  4. mknod -m 444 $LFS/dev/random c 1 8
  5. mknod -m 444 $LFS/dev/urandom c 1 9
  6. mount -v --bind /dev $LFS/dev
  7. mount -vt devpts devpts $LFS/dev/pts -o gid=5,mode=620
  8. mount -vt proc proc $LFS/proc
  9. mount -vt sysfs sysfs $LFS/sys
  10. mount -vt tmpfs tmpfs $LFS/run
  11. if [ -h $LFS/dev/shm ]; then
  12. mkdir -pv $LFS/$(readlink $LFS/dev/shm)
  13. fi

  2. 进入 Chroot 环境    

    从这里以后,就不再需要 LFS 变量了,因为后面所有工作都将被限定在 LFS 文件系统里。

  1. chroot "$LFS" /tools/bin/env -i \
  2. HOME=/root \
  3. TERM="$TERM" \
  4. PS1='\u:\w\$ ' \
  5. PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
  6. /tools/bin/bash --login +h

  3. 创建目录

  1. mkdir -pv /{bin,boot,etc/{opt,sysconfig},home,lib/firmware,mnt,opt}
  2. mkdir -pv /{media/{floppy,cdrom},sbin,srv,var}
  3. install -dv -m 0750 /root
  4. install -dv -m 1777 /tmp /var/tmp
  5. mkdir -pv /usr/{,local/}{bin,include,lib,sbin,src}
  6. mkdir -pv /usr/{,local/}share/{color,dict,doc,info,locale,man}
  7. mkdir -v /usr/{,local/}share/{misc,terminfo,zoneinfo}
  8. mkdir -v /usr/libexec
  9. mkdir -pv /usr/{,local/}share/man/man{1..8}
  10.  
  11. case $(uname -m) in
  12. x86_64) ln -sv lib /lib64
  13. ln -sv lib /usr/lib64
  14. ln -sv lib /usr/local/lib64 ;;
  15. esac
  16.  
  17. mkdir -v /var/{log,mail,spool}
  18. ln -sv /run /var/run
  19. ln -sv /run/lock /var/lock
  20. mkdir -pv /var/{opt,cache,lib/{color,misc,locate},local}

  4. 创建必需的文件和符号链接

  1. ln -sv /tools/bin/{bash,cat,echo,pwd,stty} /bin
  2. ln -sv /tools/bin/perl /usr/bin
  3. ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib
  4. ln -sv /tools/lib/libstdc++.so{,.6} /usr/lib
  5. sed 's/tools/usr/' /tools/lib/libstdc++.la > /usr/lib/libstdc++.la
  6. ln -sv bash /bin/sh
  7. ln -sv /proc/self/mounts /etc/mtab
  8.  
  9. # root 用户的实际密码(这里的 “x” 只是占位符)将在后面创建。
  10. cat > /etc/passwd << "EOF"
  11. root:x:0:0:root:/root:/bin/bash
  12. bin:x:1:1:bin:/dev/null:/bin/false
  13. daemon:x:6:6:Daemon User:/dev/null:/bin/false
  14. messagebus:x:18:18:D-Bus Message Daemon User:/var/run/dbus:/bin/false
  15. nobody:x:99:99:Unprivileged User:/dev/null:/bin/false
  16. EOF
  17.  
  18. cat > /etc/group << "EOF"
  19. root:x:0:
  20. bin:x:1:daemon
  21. sys:x:2:
  22. kmem:x:3:
  23. tape:x:4:
  24. tty:x:5:
  25. daemon:x:6:
  26. floppy:x:7:
  27. disk:x:8:
  28. lp:x:9:
  29. dialout:x:10:
  30. audio:x:11:
  31. video:x:12:
  32. utmp:x:13:
  33. usb:x:14:
  34. cdrom:x:15:
  35. adm:x:16:
  36. messagebus:x:18:
  37. systemd-journal:x:23:
  38. input:x:24:
  39. mail:x:34:
  40. nogroup:x:99:
  41. users:x:999:
  42. EOF
  43.  
  44. exec /tools/bin/bash --login +h
  45. touch /var/log/{btmp,lastlog,faillog,wtmp}
  46. chgrp -v utmp /var/log/lastlog
  47. chmod -v 664 /var/log/lastlog
  48. chmod -v 600 /var/log/btmp

  5. 执行shell脚本,完成LFS系统的构建

  1. cd /sources
  2. chmod +x ch6-build.sh
  3. ./ch6-build.sh

  6. 清理

  1. logout
  2. chroot $LFS /tools/bin/env -i \
  3. HOME=/root TERM=$TERM PS1='\u:\w\$ ' \
  4. PATH=/bin:/usr/bin:/sbin:/usr/sbin \
  5. /tools/bin/bash --login
  6.  
  7. /tools/bin/find /usr/lib -type f -name \*.a \
  8. -exec /tools/bin/strip --strip-debug {} ';'
  9.  
  10. /tools/bin/find /lib /usr/lib -type f -name \*.so* \
  11. -exec /tools/bin/strip --strip-unneeded {} ';'
  12.  
  13. /tools/bin/find /{bin,sbin} /usr/{bin,sbin,libexec} -type f \
  14. -exec /tools/bin/strip --strip-all {} ';'
  15.  
  16. rm -rf /tmp/*
  17.  
  18. logout
  19. chroot "$LFS" /usr/bin/env -i \
  20. HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
  21. PATH=/bin:/usr/bin:/sbin:/usr/sbin \
  22. /bin/bash --login
  23.  
  24. rm -rf /tools
  25. rm -f /usr/lib/lib{bfd,opcodes}.a
  26. rm -f /usr/lib/libbz2.a
  27. rm -f /usr/lib/lib{com_err,e2p,ext2fs,ss}.a
  28. rm -f /usr/lib/libltdl.a
  29. rm -f /usr/lib/libfl.a
  30. rm -f /usr/lib/libfl_pic.a
  31. rm -f /usr/lib/libz.a

Linux From Scratch(从零开始构建Linux系统,简称LFS)- Version 7.7(二)的更多相关文章

  1. LFS(Linux From Scratch)构建过程全记录(二):磁盘分区

    写在前面 本文将会详细记录LFS中,构建分区,构建文件系统和挂载分区的全过程 准备新硬盘 为了更加符合"从零开始构建Linux"的要求,我在虚拟机中,新建了一个磁盘 我们将会在这个 ...

  2. Linux From Scratch(从零开始构建Linux系统,简称LFS)- Version 7.7(一)

    一. 准备工作 1. 需要一个Linux宿主系统,例如早先版本的 LFS,Ubuntu/Fedora,SuSE 或者是在你的架构上可以运行的其它发行版 如果想实现Win7与Linux双系统,可参考我的 ...

  3. Linux From Scratch(从零开始构建Linux系统,简称LFS)(一)

    一. 准备工作 1. 需要一个Linux宿主系统,例如早先版本的 LFS,Ubuntu/Fedora,SuSE 或者是在你的架构上可以运行的其它发行版 如果想实现Win7与Linux双系统,可参考我的 ...

  4. Linux From Scratch(从零开始构建Linux系统,简称LFS)- Version 7.7(三)

    八. 构建LFS系统 1. 准备虚拟内核文件系统 内核会挂载几个文件系统用于自己和用户空间程序交换信息.这些文件系统是虚拟的,并不占用实际磁盘空间, 它们的内容会放在内存里. mkdir -pv $L ...

  5. Linux From Scratch(从零开始构建Linux系统,简称LFS)(三)

    九. 系统配置 1. 安装 LFS-Bootscripts-20150222 软件包包含一套在 LFS 系统启动和关闭时的启动和停止脚本. cd /sources tar -jxf lfs-boots ...

  6. Linux From Scratch(从零开始构建Linux系统,简称LFS)(二)

    七. 构建临时系统 1. 通用编译指南 a. 确认是否正确设置了 LFS 环境变量 echo $LFS b. 假定你已经正确地设置了宿主系统需求和符号链接 c. 对于每个软件包: (1). 确保解压软 ...

  7. Raspberry Pi(树莓派)上从零开始构建Linux系统(简称PiLFS)(一)

    一. 准备工作 1. 装有Linux宿主系统的树莓派主板,可参考 Raspberry Pi(树莓派)上安装Raspbian(无路由器,无显示器) 2. 参考网址:Linux From Scratch ...

  8. 从零开始构建Linux

    目的:深入了解以Linux内核为基础的系统是如何组成,运行,以构建一个最基础的,纯净的系统. LFS构建步骤宿主机准备- linux操作系统安装- 使用独立硬盘,创建分区- 配置用户和组- 下载所有需 ...

  9. LFS(Linux From Scratch)构建过程全记录(五):交叉工具链的构建

    写在前面 本文将详细讲述如何构建工具链 前置知识 在LFS-BOOK中,我们需要学习一些关于"交叉编译"的内容,详见书本 安装Binutils-2.39 我们cd到sources文 ...

随机推荐

  1. 【知识积累】使用Httpclient实现网页的爬取并保存至本地

    程序功能实现了爬取网页页面并且将结果保存到本地,通过以爬取页面出发,做一个小的爬虫,分析出有利于自己的信息,做定制化的处理. 其中需要的http*的jar文件,可以在网上自行下载 import jav ...

  2. 【T-SQL】分布抽取部分数据

    好吧,我确实不知道该怎么起这个标题,整了一个“分布”,感觉还有点高档,其实没啥技术含量,看完你就知道了.情况是这样,刚刚接到一个临时任务,需要让几个营业点的销售数据[变]少一点,就是在ERP的相关报表 ...

  3. Android手机总是提示:存储空间不足,解决方法

    手机才有16G空间,用一段时间后,总是提示内存不足,各种清理软件都没卵用. 有一个方法立即见效: 1.进入Recovery 2.格式化 SDCard 博客园首席神棍 野生菌野菜干批发 大舍大得 小舍小 ...

  4. IBC编程社区

    IBC编程社区-.NET编程交流论坛 官方地址:http://www.ibcibc.com 新浪微博:IBC编程社区 微信公众号:ibcbcsq QQ一群:235371874(已满) QQ二群:248 ...

  5. SpringMVC的工作原理

    1.首先浏览器发送请求给前端控制器DispatcherServlet,DispatcherSerlvet根据请求信息,基于一定的原则选择合适的控制器进行处理并把请求委托给它. 2.页面控制器接收到请求 ...

  6. Mule入门基础

    Mule入门文档 零.前提 在按照本文进行操作之前,假设您的系统已经具备以下前提: 已经安装了Sun公司的JDK1.4或JDK5.0版本,推荐使用JDK5.0. 正确设置了JAVA_HOME环境变量到 ...

  7. ffmpeg实现dxva2硬件加速

    这几天在做dxva2硬件加速,找不到什么资料,翻译了一下微软的两篇相关文档.这是第二篇,记录用ffmpeg实现dxva2. 第一篇翻译的Direct3D device manager,链接:http: ...

  8. JAVA 异常处理机制

    主要讲述几点: 一.异常的简介 二.异常处理流程 三.运行时异常和非运行时异常 四.throws和throw关键字 一.异常简介 异常处理是在程序运行之中出现的情况,例如除数为零.异常类(Except ...

  9. No.006:ZigZag Conversion

    问题: The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows l ...

  10. spring入门(六)【springMVC中各数据源配置】

    在使用spring进行javaWeb开发的过程中,需要和数据库进行数据交换,为此要经常获取数据库连接,使用JDBC的方式获取数据库连接,使用完毕之后再释放连接,这种过程对系统资源的消耗无疑是很大的,这 ...