zoukankan      html  css  js  c++  java
  • Linux From Scratch(从零开始构建Linux系统,简称LFS)(二)

    七. 构建临时系统

      1. 通用编译指南

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

    echo $LFS

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

        c. 对于每个软件包:

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

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

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

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

      

      3. 改变属主

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

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

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

      

    八. 构建LFS系统

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

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

      2. 进入 Chroot 环境    

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

    chroot "$LFS" /tools/bin/env -i 
        HOME=/root                  
        TERM="$TERM"                
        PS1='u:w$ '              
        PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin 
        /tools/bin/bash --login +h

      3. 创建目录

    mkdir -pv /{bin,boot,etc/{opt,sysconfig},home,lib/firmware,mnt,opt}
    mkdir -pv /{media/{floppy,cdrom},sbin,srv,var}
    install -dv -m 0750 /root
    install -dv -m 1777 /tmp /var/tmp
    mkdir -pv /usr/{,local/}{bin,include,lib,sbin,src}
    mkdir -pv /usr/{,local/}share/{color,dict,doc,info,locale,man}
    mkdir -v  /usr/{,local/}share/{misc,terminfo,zoneinfo}
    mkdir -v  /usr/libexec
    mkdir -pv /usr/{,local/}share/man/man{1..8}
    
    case $(uname -m) in
     x86_64) ln -sv lib /lib64
             ln -sv lib /usr/lib64
             ln -sv lib /usr/local/lib64 ;;
    esac
    
    mkdir -v /var/{log,mail,spool}
    ln -sv /run /var/run
    ln -sv /run/lock /var/lock
    mkdir -pv /var/{opt,cache,lib/{color,misc,locate},local}
    View Code

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

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

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

    cd /sources
    chmod +x ch6-build.sh
    ./ch6-build.sh

      6. 清理

    logout
    chroot $LFS /tools/bin/env -i            
        HOME=/root TERM=$TERM PS1='u:w$ ' 
        PATH=/bin:/usr/bin:/sbin:/usr/sbin   
        /tools/bin/bash --login
    
    /tools/bin/find /usr/lib -type f -name *.a 
       -exec /tools/bin/strip --strip-debug {} ';'
    
    /tools/bin/find /lib /usr/lib -type f -name *.so* 
       -exec /tools/bin/strip --strip-unneeded {} ';'
    
    /tools/bin/find /{bin,sbin} /usr/{bin,sbin,libexec} -type f 
        -exec /tools/bin/strip --strip-all {} ';'
    
    rm -rf /tmp/*
    
    logout
    chroot "$LFS" /usr/bin/env -i              
        HOME=/root TERM="$TERM" PS1='u:w$ ' 
        PATH=/bin:/usr/bin:/sbin:/usr/sbin     
        /bin/bash --login
    
    rm -rf /tools
    rm -f /usr/lib/lib{bfd,opcodes}.a
    rm -f /usr/lib/libbz2.a
    rm -f /usr/lib/lib{com_err,e2p,ext2fs,ss}.a
    rm -f /usr/lib/libltdl.a
    rm -f /usr/lib/libfl.a
    rm -f /usr/lib/libfl_pic.a
    rm -f /usr/lib/libz.a
    View Code
  • 相关阅读:
    iOS开发之UIWebView自动滑动到顶部-备
    Android开发者须知的几种APP加密方式--备
    UITableView 小节-备
    判断字符串是否为数字-备
    关于iOS上的对象映射公用方法-备
    嵌入式开发之项目---uboot 内存合集
    多媒体开发之---h.264 SPS PPS解析源代码,C实现一以及nal分析器
    YUV视频格式到RGB32格式转换的速度优化 上篇
    多媒体开发之---音视频解码 视频回调的空转陷阱
    收集的网络上大型的开源图像处理软件代码(提供下载链接)
  • 原文地址:https://www.cnblogs.com/Mr-kevin/p/5667085.html
Copyright © 2011-2022 走看看