142 lines
3.4 KiB
Text
142 lines
3.4 KiB
Text
function fullpath() {
|
|
local f=$1
|
|
if [ "${f#/}" = "$f" ]; then
|
|
echo `pwd`/"$f"
|
|
else
|
|
echo "$f"
|
|
fi
|
|
}
|
|
|
|
function cleanup () {
|
|
rm -rf "$TMP_BUILD_DIR"
|
|
}
|
|
|
|
function ensure_binaries() {
|
|
BINARY_DEPS="${BUSYBOX}"
|
|
for _FLVR in ${RAMDISK_FLAVOUR} ; do
|
|
_FILE="${FLAVOURS_DIR}/${_FLVR}/binary-deps"
|
|
if [ -a $_FILE ]; then
|
|
for _LINE in $(cat $_FILE) ; do
|
|
BINARY_DEPS="${BINARY_DEPS} $_LINE"
|
|
done
|
|
fi
|
|
done
|
|
|
|
for _BIN in $BINARY_DEPS ; do
|
|
_LOCATION=""
|
|
_LOCATION="${_LOCATION:-$(which $_BIN)}"
|
|
if [ -z "$_LOCATION" ]; then
|
|
echo "$_BIN is not found in your PATH" 1>&2
|
|
echo "Please install it on your system"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
export BINARY_DEPS
|
|
}
|
|
|
|
function create_base () {
|
|
echo "Creating base system"
|
|
|
|
mkdir -p "$TMP_MOUNT_PATH/bin"
|
|
ln -s bin "$TMP_MOUNT_PATH/sbin"
|
|
mkdir -p "$TMP_MOUNT_PATH/lib"
|
|
ln -s lib "$TMP_MOUNT_PATH/lib64"
|
|
mkdir -p "$TMP_MOUNT_PATH/lib/modules"
|
|
mkdir -p "$TMP_MOUNT_PATH/etc"
|
|
mkdir -p "$TMP_MOUNT_PATH/etc/udev"
|
|
|
|
cp -a "$LIB_UDEV" "$TMP_MOUNT_PATH/lib/udev"
|
|
|
|
mkdir -p "$TMP_MOUNT_PATH/etc/modprobe.d"
|
|
echo "blacklist evbug" > "$TMP_MOUNT_PATH/etc/modprobe.d/blacklist.conf"
|
|
|
|
mkdir -p "$TMP_MOUNT_PATH/etc/udev"
|
|
cat >"$TMP_MOUNT_PATH/etc/udev/udev.conf" <<EOF
|
|
udev_root="/dev"
|
|
udev_rules="/lib/udev/rules.d"
|
|
udev_log="no"
|
|
EOF
|
|
}
|
|
|
|
function populate_lib () {
|
|
echo "Populating /lib"
|
|
|
|
libs=
|
|
for i in "$BUSYBOX" bash lsmod modprobe udevd udevadm wget reboot shutdown $BINARY_DEPS ; do
|
|
if "$BUSYBOX" --list | grep "^$i\$" >/dev/null; then
|
|
continue
|
|
fi
|
|
path=`which $i 2>/dev/null` || path=$i
|
|
if ! [ -x "$path" ]; then
|
|
echo "$i is not found in PATH" 2>&1
|
|
exit 1
|
|
fi
|
|
cp -L "$path" "$TMP_MOUNT_PATH/bin/"
|
|
if l=`ldd "$path"`; then
|
|
l=$( echo "$l" | grep '/' | tr "\t" " " )
|
|
l=$( echo "$l" | sed 's/^.* => \([^ ]*\).*$/\1/' )
|
|
l=$( echo "$l" | sed 's/^ *\([^ ]*\) *(0x[0-9a-f]*)/\1/' )
|
|
l=$( echo "$l" | tr " " "\n" )
|
|
libs=$( printf "%s\n%s\n" "$l" "$libs" | sort | uniq )
|
|
fi
|
|
done
|
|
cp $libs "$TMP_MOUNT_PATH/lib/"
|
|
|
|
cp -a "$MODULE_DIR" "$TMP_MOUNT_PATH/lib/modules/$KERNEL_VERSION"
|
|
cp -a "$FIRMWARE_DIR" "$TMP_MOUNT_PATH/lib/firmware"
|
|
}
|
|
|
|
function populate_busybox () {
|
|
echo "Creating symlinks for busybox binaries"
|
|
|
|
for i in $( "$BUSYBOX" --list ); do
|
|
if [ -f "$TMP_MOUNT_PATH/bin/$i" ]; then
|
|
echo "skip $i"
|
|
continue
|
|
fi
|
|
ln -s busybox "$TMP_MOUNT_PATH/bin/$i"
|
|
done
|
|
}
|
|
|
|
function populate_init () {
|
|
echo "Installing init"
|
|
cp "$INIT" "$TMP_MOUNT_PATH/init"
|
|
chmod +x $TMP_MOUNT_PATH/init
|
|
for F in "$FUNCTIONS_D"/* ; do
|
|
cp "$F" "$TMP_MOUNT_PATH"
|
|
done
|
|
|
|
# Append /init with any flavour fragments that are present
|
|
for _FLVR in ${RAMDISK_FLAVOUR} ; do
|
|
_FILE="${FLAVOURS_DIR}/${_FLVR}/init"
|
|
if [ -a $_FILE ]; then
|
|
cat >>$TMP_MOUNT_PATH/init <<EOF
|
|
|
|
# init fragment from ${_FLVR}
|
|
EOF
|
|
cat <$_FILE >>$TMP_MOUNT_PATH/init
|
|
fi
|
|
done
|
|
|
|
# Add our final steps to /init
|
|
cat <${INIT}-end >>$TMP_MOUNT_PATH/init
|
|
}
|
|
|
|
function finalise_image () {
|
|
echo "Finalising image"
|
|
(cd "$TMP_MOUNT_PATH"; find . | cpio -o -H newc | gzip > "$TMP_IMAGE_PATH" )
|
|
}
|
|
|
|
function populate_udev () {
|
|
echo "Installing udev rules"
|
|
|
|
for _FLVR in ${RAMDISK_FLAVOUR} ; do
|
|
_DIR="${FLAVOURS_DIR}/${_FLVR}/udev"
|
|
if [ -d $_DIR ]; then
|
|
find $_DIR -type f -exec cp -v {} $TMP_MOUNT_PATH/lib/udev/rules.d/ \;
|
|
fi
|
|
done
|
|
}
|
|
|
|
|