]> git.ipfire.org Git - people/ms/ipfire-2.x.git/commitdiff
make.sh: Create a new, minimal /dev in the build environment
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 4 Jul 2024 17:48:53 +0000 (17:48 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 8 Jul 2024 15:39:43 +0000 (15:39 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
make.sh

diff --git a/make.sh b/make.sh
index b684cc973cd5cead38217eec115c04657dfe7df2..490d3578bf3db19f3344c3bd5b55f1f9084913bb 100755 (executable)
--- a/make.sh
+++ b/make.sh
@@ -402,6 +402,8 @@ prepareenv() {
        # Set LFS Directory
        LFS=$BASEDIR/build
 
+       BUILD_DIR="${BASEDIR}/build"
+
        # Setup environment
        set +h
        LC_ALL=POSIX
@@ -424,13 +426,53 @@ prepareenv() {
 
        mkdir -p $BASEDIR/build/usr/src/{cache,config,doc,html,langs,lfs,log,src,ccache}
 
-       mknod -m 600 $BASEDIR/build/dev/console c 5 1 2>/dev/null
-       mknod -m 666 $BASEDIR/build/dev/null c 1 3 2>/dev/null
+       # Create a new, minimal /dev
+       mount build_dev "${BUILD_DIR}/dev" \
+               -t tmpfs -o "nosuid,noexec,mode=0755,size=4m,nr_inodes=64k"
+
+       # Create device nodes
+       mknod -m 600 "${BUILD_DIR}/dev/console"                 c   5   1
+       mknod -m 666 "${BUILD_DIR}/dev/null"                    c   1   3
+       mknod -m 666 "${BUILD_DIR}/dev/zero"                    c   1   5
+       mknod -m 666 "${BUILD_DIR}/dev/full"                    c   1   7
+       mknod -m 444 "${BUILD_DIR}/dev/random"                  c   1   8
+       mknod -m 444 "${BUILD_DIR}/dev/urandom"                 c   1   9
+       mknod -m 444 "${BUILD_DIR}/dev/kmsg"                    c   1  11
+       mknod -m 666 "${BUILD_DIR}/dev/tty"                             c   5   0
+       mknod -m 666 "${BUILD_DIR}/dev/rtc0"                    c 252   0
+
+       # Create loop devices
+       mknod -m 666 "${BUILD_DIR}/dev/loop-control"    c  10 237
+       mknod -m 666 "${BUILD_DIR}/dev/loop0"                   c   7   0
+       mknod -m 666 "${BUILD_DIR}/dev/loop1"                   c   7   1
+       mknod -m 666 "${BUILD_DIR}/dev/loop2"                   c   7   2
+       mknod -m 666 "${BUILD_DIR}/dev/loop3"                   c   7   3
+       mknod -m 666 "${BUILD_DIR}/dev/loop4"                   c   7   4
+       mknod -m 666 "${BUILD_DIR}/dev/loop5"                   c   7   5
+       mknod -m 666 "${BUILD_DIR}/dev/loop6"                   c   7   6
+       mknod -m 666 "${BUILD_DIR}/dev/loop7"                   c   7   7
+
+       # Create directories
+       mkdir -p "${BUILD_DIR}/dev/pts"
+       mkdir -p "${BUILD_DIR}/dev/shm"
+
+       # Create symlinks
+       ln -s  "pts/ptmx"                               "${BUILD_DIR}/dev/ptmx"
+       ln -s "../proc/self/fd"                 "${BUILD_DIR}/dev/fd"
+       ln -s "../proc/self/fd/0"               "${BUILD_DIR}/dev/stdin"
+       ln -s "../proc/self/fd/1"               "${BUILD_DIR}/dev/stdout"
+       ln -s "../proc/self/fd/2"               "${BUILD_DIR}/dev/stderr"
+       ln -s "../proc/kcore"                   "${BUILD_DIR}/dev/core"
+
+       # Mount a new /dev/pts
+       mount build_dev_pts "${BUILD_DIR}/dev/pts" \
+               -t devpts -o "nosuid,noexec,newinstance,ptmxmode=0666,mode=620"
+
+       # Mount a new /dev/shm
+       mount build_dev_shm "${BUILD_DIR}/dev/shm" \
+               -t tmpfs -o "nosuid,nodev,strictatime,mode=1777,size=1024m"
 
        # Make all sources and proc available under lfs build
-       mount --bind /dev            $BASEDIR/build/dev
-       mount --bind /dev/pts        $BASEDIR/build/dev/pts
-       mount --bind /dev/shm        $BASEDIR/build/dev/shm
        mount --bind /sys            $BASEDIR/build/sys
        mount --bind $BASEDIR/cache  $BASEDIR/build/usr/src/cache
        mount --bind $BASEDIR/ccache/${BUILD_ARCH}/${TOOLCHAINVER} $BASEDIR/build/usr/src/ccache