#!/bin/bash
+# $Id$
isTrue() {
case "$1" in
return 1
}
-setColorVars() {
+setColorVars() {
if isTrue ${USECOLOR}
then
GOOD=$'\e[32;01m'
# PRINT TO SCREEN ONLY IF PASSED LOGLEVEL IS HIGHER THAN
# OR EQUAL TO SET DEBUG LEVEL
- if [ "$1" -lt "${LOGLEVEL}" -o "$1" -eq "${LOGLEVEL}" ]
+ if [ "$1" -lt "${LOGLEVEL}" -o "$1" = "${LOGLEVEL}" ]
then
SCRPRINT='1'
fi
fi
# STRUCTURE DATA TO BE OUTPUT TO SCREEN, AND OUTPUT IT
- if [ "${SCRPRINT}" -eq '1' ]
+ if [ "${SCRPRINT}" = '1' ]
then
if [ "${PREFIXLINE}" = '1' ]
then
fi
# STRUCTURE DATA TO BE OUTPUT TO FILE, AND OUTPUT IT
- if [ "${SCRPRINT}" -eq '1' -o "${FORCEFILE}" -eq '1' ]
+ if [ "${SCRPRINT}" = '1' -o "${FORCEFILE}" = '1' ]
then
STRR=${2//${WARN}/}
STRR=${STRR//${BAD}/}
if [ "${NEWLINE}" = '0' ]
then
- if [ "${TODEBUGCACHE}" -eq 1 ]; then
+ if [ "${TODEBUGCACHE}" = '1' ]; then
DEBUGCACHE="${DEBUGCACHE}${STR}"
else
echo -ne "${STR}" >> ${LOGFILE}
- fi
+ fi
else
- if [ "${TODEBUGCACHE}" -eq 1 ]; then
+ if [ "${TODEBUGCACHE}" = '1' ]; then
DEBUGCACHE="${DEBUGCACHE}${STR}"$'\n'
else
echo "${STR}" >> ${LOGFILE}
# in the later sed expression
local SAFE_VAR
SAFE_VAR=`echo "${2}" | sed -e 's/\([\/\.]\)/\\\\\\1/g'`
-
+
echo "${3}" | sed -e "s/%%${1}%%/${SAFE_VAR}/g" -
}
var_replace "ARCH" "${ARCH}" "${1}"
}
-kv_replace() {
- var_replace "KV" "${KV}" "${1}"
-}
-
cache_replace() {
var_replace "CACHE" "${CACHE_DIR}" "${1}"
}
if [ -f "${LOGFILE}" ]
then
(echo > "${LOGFILE}") 2>/dev/null || small_die "Genkernel: Could not write to ${LOGFILE}."
- fi
+ fi
}
gen_die() {
exit 1
}
-has_loop() {
- if [ -e /var/log/dmesg ]
- then
- cat /var/log/dmesg | egrep -q '^loop:'
- else
- dmesg | egrep -q '^loop:'
- fi
- if [ -e '/dev/loop0' -o -e '/dev/loop/0' -a ${PIPESTATUS[1]} ]
- then
- # We found devfs or standard dev loop device, assume
- # loop is compiled into the kernel or the module is loaded
- return 0
- else
- return 1
- fi
-}
-
isBootRO()
{
return $(awk '( $2 == "'${BOOTDIR}'" && $4 ~ /(^|,)ro(,|$)/){ I=1; exit }END{print !I }' /proc/mounts);
if [ "${CLEAR_CACHE_DIR}" == 'yes' ]
then
print_info 1 "Clearing cache dir contents from ${CACHE_DIR}"
- CACHE_DIR_CONTENTS=`ls ${CACHE_DIR}|grep -v CVS|grep -v cpio|grep -v README`
-
- for i in ${CACHE_DIR_CONTENTS}
+ while read i
do
print_info 1 " >> removing ${i}"
- rm ${CACHE_DIR}/${i}
- done
+ rm "${i}"
+ done < <(find "${CACHE_DIR}" -maxdepth 1 -type f -name '*.tar.*' -o -name '*.bz2')
fi
}
clear_tmpdir()
{
-if ! isTrue ${CMD_NOINSTALL}
+if isTrue ${CMD_INSTALL}
then
- TMPDIR_CONTENTS=`ls ${TMPDIR}`
- print_info 1 "Removing tmp dir contents"
- for i in ${TMPDIR_CONTENTS}
- do
- print_info 1 " >> removing ${i}"
- rm ${TMPDIR}/${i}
- done
+ TMPDIR_CONTENTS=`ls ${TMPDIR}`
+ print_info 1 "Removing tmp dir contents"
+ for i in ${TMPDIR_CONTENTS}
+ do
+ print_info 1 " >> removing ${i}"
+ rm ${TMPDIR}/${i}
+ done
fi
-}
+}
#
# Function to copy various kernel boot image products to the boot directory,
# Old product might be a different version. If so, we need to read
# the symlink to see what it's name is, if there are symlinks.
- if [ "${SYMLINK}" -eq '1' ]
+ if [ "${SYMLINK}" = '1' ]
then
print_info 4 "automatically managing symlinks and old images." 1 0
if [ -e "${BOOTDIR}/${symlinkName}" ]
# When symlinks are not being managed by genkernel, old symlinks might
# still be useful. Leave 'em alone unless managed.
- if [ "${SYMLINK}" -eq '1' ]
+ if [ "${SYMLINK}" = '1' ]
then
print_info 5 " Deleting old symlinks, if any."
rm -f "${BOOTDIR}/${symlinkName}"
#
print_info 5 " Same base version. May have to delete old image to make room."
- if [ "${currDestImageExists}" -eq '1' ]
+ if [ "${currDestImageExists}" = '1' ]
then
if [ -e "${BOOTDIR}/${currDestImage}.old" ]
then
cp "${newSrceImage}" "${BOOTDIR}/${currDestImage}" ||
gen_die "Could not copy the ${symlinkName} image to ${BOOTDIR}!"
- if [ "${SYMLINK}" -eq '1' ]
+ if [ "${SYMLINK}" = '1' ]
then
print_info 5 " Make new symlink(s) (from ${BOOTDIR}):"
print_info 5 " ${symlinkName} -> ${currDestImage}"
pushd ${BOOTDIR} >/dev/null
ln -s "${currDestImage}" "${symlinkName}" ||
gen_die "Could not create the ${symlinkName} symlink!"
- if [ "${prevDestImageExists}" -eq '1' ]
+ if [ "${prevDestImageExists}" = '1' ]
then
print_info 5 " ${symlinkName}.old -> ${prevDestImage}"
ln -s "${prevDestImage}" "${symlinkName}.old" ||
fi
}
+#
+# Helper function to allow command line arguments to override configuration
+# file specified values and to apply defaults.
+#
+# Arguments:
+# $1 Argument type:
+# 1 Switch type arguments (e.g., --color / --no-color).
+# 2 Value type arguments (e.g., --debuglevel=5).
+# $2 Config file variable name.
+# $3 Command line variable name.
+# $4 Default. If both the config file variable and the command line
+# option are not present, then the config file variable is set to
+# this default value. Optional.
+#
+# The order of priority of these three sources (highest first) is:
+# Command line, which overrides
+# Config file (/etc/genkernel.conf), which overrides
+# Default.
+#
+# Arguments $2 and $3 are variable *names*, not *values*. This function uses
+# various forms of indirection to access the values.
+#
+# For switch type arguments, all forms of "True" are converted to a numeric 1
+# and all forms of "False" (everything else, really) to a numeric 0.
+#
+# - JRG
+#
+set_config_with_override() {
+ local VarType=$1
+ local CfgVar=$2
+ local OverrideVar=$3
+ local Default=$4
+ local Result
+
+ #
+ # Syntax check the function arguments.
+ #
+ case "$VarType" in
+ BOOL|STRING)
+ ;;
+ *)
+ gen_die "Illegal variable type \"$VarType\" passed to set_config_with_override()."
+ ;;
+ esac
+
+ if [ -n "${!OverrideVar}" ]
+ then
+ Result=${!OverrideVar}
+ if [ -n "${!CfgVar}" ]
+ then
+ print_info 5 " $CfgVar overridden on command line to \"$Result\"."
+ else
+ print_info 5 " $CfgVar set on command line to \"$Result\"."
+ fi
+ else
+ if [ -n "${!CfgVar}" ]
+ then
+ Result=${!CfgVar}
+ # we need to set the CMD_* according to configfile...
+ eval ${OverrideVar}=\"${Result}\"
+ print_info 5 " $CfgVar set in config file to \"${Result}\"."
+ else
+ if [ -n "$Default" ]
+ then
+ Result=${Default}
+ # set OverrideVar to Result, otherwise CMD_* may not be initialized...
+ eval ${OverrideVar}=\"${Result}\"
+ print_info 5 " $CfgVar defaulted to \"${Result}\"."
+ else
+ print_info 5 " $CfgVar not set."
+ fi
+ fi
+ fi
+
+ if [ "${VarType}" = BOOL ]
+ then
+ if isTrue "${Result}"
+ then
+ Result=1
+ else
+ Result=0
+ fi
+ fi
+
+ eval ${CfgVar}=\"${Result}\"
+}
+
+check_distfiles() {
+ for i in $BUSYBOX_SRCTAR $MULTIPATH_SRCTAR $LVM_SRCTAR $DMRAID_SRCTAR $E2FSPROGS_SRCTAR $ISCSI_SRCTAR $GPG_SRCTAR
+ do
+ if [ ! -f "${i}" ]
+ then
+ small_die "Could not find source tarball ${i}. Please refetch."
+ fi
+ done
+}
+
+find_kernel_binary() {
+ local kernel_binary=$*
+ local curdir=$(pwd)
+
+ cd "${KERNEL_DIR}"
+ for i in ${kernel_binary}
+ do
+ if [ -e "${i}" ]
+ then
+ tmp_kernel_binary=$i
+ break
+ fi
+ done
+# if [ -z "${tmp_kernel_binary}" ]
+# then
+# gen_die "Cannot locate kernel binary!"
+# fi
+ cd "${curdir}"
+ echo "${tmp_kernel_binary}"
+}