#!/usr/bin/env bash create_directories() { if [ ! -d "$SYSROOT" ]; then mkdir -p "$SYSROOT"/{etc,cross,sources,usr,dev,proc,sys,run} mkdir -p "$SYSROOT"/usr/{bin,sbin,lib,include} mkdir -p "$SYSROOT"/var/{cache,lib,run} for directory in bin sbin lib; do ln -fs usr/$directory "$SYSROOT"/$directory done ln -fs usr/lib "$SYSROOT"/lib64 ln -fs run "$SYSROOT"/var/run ln -fs run/lock "$SYSROOT"/var/lock install -d -m 0750 "$SYSROOT"/root install -d -m 1777 "$SYSROOT"/tmp "$SYSROOT"/var/tmp fi } create_files() { if [[ ! -L "$SYSROOT"/etc/mtab ]]; then sudo ln -s proc/self/mounts "$SYSROOT"/etc/mtab cat > "$SYSROOT"/etc/hosts <<- "EOF" 127.0.0.1 localhost axe ::1 localhost EOF cat > "$SYSROOT"/etc/passwd <<- "EOF" root:x:0:0:root:/root:/usr/bin/bash uuidd:x:6:6::/dev/null:/usr/bin/nologin messagebus:x:7:7::/run/dbus:/usr/bin/nologin nobody:x:65534:65534::/dev/null:/usr/bin/nologin EOF cat > "$SYSROOT"/etc/group <<- "EOF" root:x:0: tty:x:1: audio:x:2: video:x:3: input:x:4: wheel:x:5: uuidd:x:6: messagebus:x:7: users:x:999: nogroup:x:65534: EOF fi } create_sysroot() { create_directories create_files } change_owner() { sudo chown -R root:root "$SYSROOT"/{bin,cross,dev,etc,lib,lib64,proc,sys,root,run,sbin,sys,tmp,usr,var} } do_mount() { if ! mountpoint -q "$SYSROOT/dev"; then sudo mount --bind /dev "$SYSROOT"/dev sudo mount -t devpts devpts -o gid=1,mode=0620 "$SYSROOT"/dev/pts sudo mount -t proc proc "$SYSROOT"/proc sudo mount -t sysfs sysfs "$SYSROOT"/sys sudo mount -t tmpfs tmpfs "$SYSROOT"/run if [ -h "$SYSROOT"/dev/shm ]; then sudo install -d -m 1777 "$SYSROOT"$(realpath /dev/shm) else sudo mount -t tmpfs -o nosuid,nodev tmpfs "$SYSROOT"/dev/shm fi fi } do_unmount() { sudo mountpoint -q "$SYSROOT"/dev/shm sudo umount "$SYSROOT"/dev/shm sudo umount "$SYSROOT"/dev/pts sudo umount "$SYSROOT"/{sys,proc,run,dev} } fetch() { wget -N -c --show-progress -q -P "$SOURCES" $1 }