rand(){
  hexdump -e '"%x"' -n 4 /dev/urandom
}

source_parts(){
  [ -z "$temppath" ] && temppath="/tmp"
  mkdir -p "$temppath"
  local script="$temppath/script_$(rand)"
  rm -f "$script"
  local searchpath="$(dirname "$1")"
  [ -d "$searchpath" ] || return 1
  for i in $(find "$searchpath" -maxdepth 1 -path "$1" | sort); do
    cat "$i" >> "$script"
  done
  dos2unix -u "$script"
  source "$script"
  local ret=$?
  rm -f "$script"
  return $ret
}

source_base(){
  if [ -d "$1" ]; then
    source_parts "$1/b????_*"
    return 0
  fi
  if [ -d "$preinit.d" ]; then
    source_parts "$preinit.d/b????_*"
    return 0
  fi
  if [ -d "$rootfs/etc/preinit.d" ]; then
    source_parts "$rootfs/etc/preinit.d/b????_*"
    return 0
  fi
  if [ -d "/etc/preinit.d" ]; then
    source_parts "/etc/preinit.d/b????_*"
    return 0
  fi
  return 1
}

source_config(){
  [ -f "$preinit.d/p0000_config" ] && source "$preinit.d/p0000_config"
}

save_config(){
  [ -f "$preinit.d/pffff_config" ] && source "$preinit.d/pffff_config"
}

script_init(){
  source_base
  source_config
  softwareCheck
}

preinit(){
  source_base
  mountSquash # for backward compatibility
  source_parts "$preinit.d/p????_*"
}
