# one time jobs # determine packet manager: if [ ! -z "$(which apt-get)" ]; then PACKET_MANAGER="apt" elif [ ! -z "$(which zypper)" ]; then PACKET_MANAGER="zypper" else perror "Could not determine this platform's packet manager" fi # # copy list of files using tar tarcopy () { [ $# -ne 2 ] && perror "Sanity check failed: tarcopy needs exactly two params, but $# were given." local FROM=$(trim "$1") local TO=$(trim "$2") if [ -z "$FROM" ]; then pwarning "tarcopy called with empty input list (dest was '$TO')" return fi local SHORT=$FROM [ ${#SHORT} -gt 23 ] && SHORT=$(echo "$SHORT" | cut -c-18)...$(echo "$SHORT" | cut -c$[${#SHORT} - 4]-) [ -z "$TO" ] && perror "tarcopy called with empty destination." [ ! -d "$TO" ] && { mkdir -p "$TO" || perror "could not create destination "$TO" for tar-copy."; } tar -cp $FROM | tar -xp -C "$TO" local PS=(${PIPESTATUS[*]}) [ "x${PS[0]}" != "x0" ] && perror "packing-part of tar-copy from '$SHORT' to '$TO' failed. (${PS[0]})" [ "x${PS[1]}" != "x0" ] && perror "unpacking-part of tar-copy from '$SHORT' to '$TO' failed. (${PS[1]})" } # get all files of required packages by a module list_packet_files() { [ -z "$REQUIRED_PACKAGES" ] && pinfo "No required packages for $TOOL" && return 1 for PACKAGE in $REQUIRED_PACKAGES; do local FILES="" if [ "$PACKET_MANAGER" = "apt" ]; then FILES="$(dpkg -L "$PACKAGE" | grep -v share/doc | grep -v share/man; echo ":###:${PIPESTATUS[0]}")" elif [ "$PACKET_MANAGER" = "zypper" ]; then FILES="$(rpm -ql "$PACKAGE" | grep -v share/doc | grep -v share/man; echo ":###:${PIPESTATUS[0]}")" fi # ugly hack to get our return value #local LPRET=$(echo "$FILES" | tail -1 | sed 's/^.*:###:\([0-9]*\)$/\1/g') #FILES=$(echo "$FILES" | sed 's/^\(.*\):###:[0-9]*$/\1/g') local LPRET=$(echo "$FILES" | awk -F ':###:' '{printf $2}') FILES=$(echo "$FILES" | awk -F ':###:' '{print $1}') [ "x$LPRET" != "x0" ] && pwarning "list_packet_files exited with code '$LPRET' for packet ${PACKAGE}." [ -z "$FILES" ] && pwarning "list_packet_files empty for packet ${PACKAGE}." for FILE in $FILES; do [ ! -d "$FILE" ] && echo "$FILE" done done } # # install all dependencies of a module # goes through all package as given in the variable REQUIRED_DEPENDENCIES install_dependencies() { [ -z "$REQUIRED_DEPENDENCIES" ] && return if [ "$PACKET_MANAGER" = "apt" ]; then apt-get install -y $REQUIRED_DEPENDENCIES || perror "Could not apt-get install $REQUIRED_DEPENDENCIES" elif [ "$PACKET_MANAGER" = "zypper" ]; then zypper install -y $REQUIRED_DEPENDENCIES || perror "Could not zypper install $REQUIRED_DEPENDENCIES" fi } # # generate initramfs of directory # usage: # generate_initramfs # generate_initramfs() { [ $# -ne 2 ] && perror "Sanity check failed: generate_initramfs needs exactly two params, but $# were given." cd "$2" || perror "Cannot cd to '$2'" find . | cpio --format="newc" --create | gzip -9 > "${MODULE_DIR}/$1" local PS=(${PIPESTATUS[*]}) [ "x${PS[0]}" != "x0" ] && perror "'find .' in '$(pwd)' failed." [ "x${PS[1]}" != "x0" ] && perror "cpio create failed." [ "x${PS[2]}" != "x0" ] && perror "gzip to '${MODULE_DIR}/$1' failed." cd - pinfo "Created initramfs of $2 at ${MODULE_DIR}/$1" } # generates squashfs of directory # usage: # generate_squashfs generate_squashfs() { [ $# -ne 2 ] && perror "Sanity check failed: generate_squashfs needs exactly two params, but $# were given." [ -d $2 ] || perror "$2 is not a directory." mksquashfs "$2" "${MODULE_DIR}/$1" -comp xz -b 1M -no-recovery >&6 \ || perror "mksquashfs failed ($?)." pinfo "Created squashfs of $2 at ${MODULE_DIR}/$1" }