1.41. tmp basefiles

Package with essential files and links, which are not distributed to another packages.

#!/bin/sh
# Copyright © 1999-2022 Gerard Beekmans
# Copyright © 2017-2022 Random Crew
# Distributed under the terms of MIT License.

Configuration

src_config()
{
    return
}

Compilation

src_compile()
{
    return
}

Installation

We write down to the file formerbase the path at a host system, where the system was built.

With the calls of id utility we write the user ID and group ID of current user into user database of newly created system. That way we can operate later inside chrooted environment from the same user as outside.

chgrp utility is not called during the build, as it requires root privileges. Instead it is called later in the postinstall script.

src_install()
{
    target_dir=${PREFIX#${LFS}}
    inner_path=${D}/${LFS}/$(dirname ${PREFIX})
    inner_name=$(basename ${PREFIX})
    mkdir -p ${inner_path}
    ln -s ${target_dir} ${inner_path}/${inner_name}
    mkdir -p ${D}/${LFS}/var/lib/
    echo ${LFS} > ${D}/${LFS}/var/lib/formerbase

    mkdir -p ${D}/${LFS}/bin
    ln -s ${target_dir}/bin/bash ${D}/${LFS}/bin
    ln -s ${target_dir}/bin/cat ${D}/${LFS}/bin
    ln -s ${target_dir}/bin/echo ${D}/${LFS}/bin
    ln -s ${target_dir}/bin/pwd ${D}/${LFS}/bin
    ln -s ${target_dir}/bin/stty ${D}/${LFS}/bin

    mkdir -p ${D}/${LFS}/usr/bin
    ln -s ${target_dir}/bin/perl ${D}/${LFS}/usr/bin
    ln -s ${target_dir}/bin/env ${D}/${LFS}/usr/bin

    mkdir -p ${D}/${LFS}/usr/lib
    ln -s ${target_dir}/lib/libgcc_s.so ${D}/${LFS}/usr/lib
    ln -s ${target_dir}/lib/libgcc_s.so.1 ${D}/${LFS}/usr/lib
    ln -s ${target_dir}/lib/libstdc++.so ${D}/${LFS}/usr/lib
    ln -s ${target_dir}/lib/libstdc++.so.6 ${D}/${LFS}/usr/lib
    ln -s bash ${D}/${LFS}/bin/sh

    mkdir -p ${D}/${LFS}/etc
    ln -s /proc/self/mounts ${D}/${LFS}/etc/mtab

    cat > ${D}/${LFS}/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
$(id -un):x:$(id -u):$(id -g):Current user:/tmp:/bin/bash
EOF

    cat > ${D}/${LFS}/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:
$(id -gn):x:$(id -g):
EOF

    mkdir -p ${D}/${LFS}/var/log
    touch \
        ${D}/${LFS}/var/log/btmp \
        ${D}/${LFS}/var/log/lastlog \
        ${D}/${LFS}/var/log/faillog \
        ${D}/${LFS}/var/log/wtmp
#    chgrp utmp ${D}/${LFS}/var/log/lastlog
    chmod 664 ${D}/${LFS}/var/log/lastlog
    chmod 600 ${D}/${LFS}/var/log/btmp

    case $(uname -m) in
        x86)
            mkdir -p ${D}/${LFS}/lib
            ln -s ld-linux.so.2 ${D}/${LFS}/lib/ld-lsb.so.3
        ;;
        x86_64) 
            mkdir -p ${D}/${LFS}/lib64
            ln -s ../lib/ld-linux-x86-64.so.2 ${D}/${LFS}/lib64
            ln -s ../lib/ld-linux-x86-64.so.2 ${D}/${LFS}/lib64/ld-lsb-x86-64.so.3
        ;;
    esac
    
}

lfs_install

Method lfs_install is empty, which means the package is not installed into chroot at the main stage of the build. Instead it is installed only at pass1 stage, which uses another method for installation.

lfs_install()
{
    return
}

Links

url.lfs: https://linuxfromscratch.org/lfs/view/9.1/chapter06/createfiles.html
url.lfs.stage1: https://linuxfromscratch.org/lfs/view/9.1/chapter06/createfiles.html