blob: c74033b51a55f28d6f5e417e8ef6758044d21cf8 (
plain) (
tree)
|
|
#! /bin/bash
#
# slxossetup - OpenSLX script for OS setup
#
# (c) 2006 - OpenSLX.com
#
# Lars Müller <lm@openslx.com>
#
: ${SLX_CONFIG_PATH:=/etc/opt/openslx}
: ${SLX_PRIVATE_PATH:=/var/opt/openslx}
SLX_SYSTEM_NAME=$1
test "$2" && \
SLX_OSSETUP_MODE=$2 ||
SLX_OSSETUP_MODE="install"
PATH="/bin:/usr/bin"
if test -z "${SLX_SYSTEM_NAME}"; then
echo "$0: Error, <system-name> not provided! "
exit 1
fi
SLX_SYSTEM_BASENAME="${SLX_SYSTEM_NAME%%-*}"
SLX_SYSTEM_VARIANTNAME="${SLX_SYSTEM_NAME##*-}"
test "${SLX_SYSTEM_VARIANTNAME}" = "${SLX_SYSTEM_BASENAME}" && \
unset SLX_SYSTEM_VARIANTNAME
for dir in . ${SLX_CONFIG_PATH}; do
if test -d "${dir}/systems/${SLX_SYSTEM_BASENAME}"; then
SLX_SYSTEM_CONFIG_PATH="${dir}/systems/${SLX_SYSTEM_BASENAME}"
break
fi
done
# Read config files for a particular system
for suffix in "" local ${SLX_SYSTEM_VARIANTNAME}; do
test -f "${SLX_SYSTEM_CONFIG_PATH}/settings${suffix:+.$suffix}" && \
. "${SLX_SYSTEM_CONFIG_PATH}/settings${suffix:+.$suffix}"
done
function slxossetup_rpm()
{
SLX_METADATA_PATH="${SLX_PRIVATE_PATH}/metadata/${SLX_SYSTEM_NAME}"
SLX_STAGE1_PATH="${SLX_PRIVATE_PATH}/stage1/${SLX_SYSTEM_NAME}"
for dir in ${SLX_METADATA_PATH} ${SLX_STAGE1_PATH}; do
if test -d "${dir}"; then
echo "$0: Error, ${dir} already exists! "
exit 1
fi
done
smart --data-dir="${SLX_METADATA_PATH}" \
config \
--set \
rpm-root="${SLX_STAGE1_PATH}"
for variable in ${!SLX_INST_SOURCE_BASEURL_*}; do
# Unset SMART_* to let smart fail if they are not set for a particular
# channel; unset PACKAGEKEYS to prevent adding them multiple times.
unset SMART_NAME SMART_TYPE PACKAGEKEYS
SMART_CHANNEL="${variable##*_}"
SMART_BASEURL=$( eval echo \$$variable)
SMART_NAME=$( eval echo \$SLX_INST_SOURCE_NAME_${SMART_CHANNEL})
SMART_TYPE=$( eval echo \$SLX_INST_SOURCE_TYPE_${SMART_CHANNEL})
PACKAGEKEYS=$( eval echo \$SLX_INST_SOURCE_PACKAGEKEYS_${SMART_CHANNEL})
smart --data-dir="${SLX_METADATA_PATH}" \
channel \
--add "${SMART_CHANNEL}" \
name="${SMART_NAME}" \
type="${SMART_TYPE}" \
baseurl=${SMART_BASEURL} \
-y
for packagekey in ${PACKAGEKEYS}; do
case "${packagekey}" in
*/*) ;;
*) packagekey="${SMART_BASEURL}/${packagekey}" ;;
esac
rpm --root="${SLX_STAGE1_PATH}" \
--import "${packagekey}"
done
done
smart --data-dir="${SLX_METADATA_PATH}" \
update
if test "${SLX_BASE_PREREQ_PACKAGES}"; then
# Download and unpack prerequired packages before any package installation
SLX_PACKAGE_PATH="${SLX_METADATA_PATH}/packages"
TMP_DIR=$( mktemp -d "${SLX_METADATA_PATH}/packages.XXXXXXXX")
if test $? -ne 0; then
echo "$0: Warning, can not create temp package download directory! "
echo " Using ${SLX_PACKAGE_DOWNLOAD_PATH} instead. "
SLX_PACKAGE_DOWNLOAD_PATH="${SLX_PACKAGE_PATH}"
else
SLX_PACKAGE_DOWNLOAD_PATH="${TMP_DIR}"
fi
test -d "${SLX_PACKAGE_DOWNLOAD_PATH}" || \
mkdir -p "${SLX_PACKAGE_DOWNLOAD_PATH}"
pushd "${SLX_PACKAGE_DOWNLOAD_PATH}" >/dev/null
smart --data-dir="${SLX_METADATA_PATH}" \
download \
"${SLX_BASE_PREREQ_PACKAGES}"
popd >/dev/null
test -d "${SLX_STAGE1_PATH}" || \
mkdir -p "${SLX_STAGE1_PATH}"
pushd "${SLX_STAGE1_PATH}" >/dev/null
for package in ${SLX_BASE_PREREQ_PACKAGES}; do
rpm2cpio ${SLX_PACKAGE_DOWNLOAD_PATH}/${package}-*.rpm | \
cpio -i --make-directories
done
# Move package from temp to package dir.
if test "${SLX_PACKAGE_DOWNLOAD_PATH}" != "${SLX_PACKAGE_PATH}"; then
test -d "${SLX_PACKAGE_PATH}" || \
mkdir -p "${SLX_PACKAGE_PATH}"
mv "${SLX_PACKAGE_DOWNLOAD_PATH}/"*.rpm "${SLX_PACKAGE_PATH}/"
rmdir "${SLX_PACKAGE_DOWNLOAD_PATH}"
fi
# Cleanup etc to prevent .rpnnew files
if test "${SLX_BASE_PREREQ_CLEANUP_PATH}"; then
for path in ${SLX_BASE_PREREQ_CLEANUP_PATH}; do
find "${SLX_STAGE1_PATH}/${path}" -type f -print0 | \
xargs -0 rm -f
done
fi
popd >/dev/null
fi
# Install prerequired files
cp -a "${SLX_SYSTEM_CONFIG_PATH}"/prereqfiles/* "${SLX_STAGE1_PATH}"
find "${SLX_STAGE1_PATH}" -type d -name .svn -print0 | \
xargs -0 rm -rf
test -x "${SLX_SYSTEM_CONFIG_PATH}"/scripts/postprereq && \
"${SLX_SYSTEM_CONFIG_PATH}"/scripts/postprereq "${SLX_STAGE1_PATH}"
for file in ${SLX_INSTALL_FAKE_FILE}; do
dir="${file%/*}"
test -d "${SLX_STAGE1_PATH}/${dir}" || \
mkdir -p "${SLX_STAGE1_PATH}/${dir}"
touch "${SLX_STAGE1_PATH}/${file}"
done
for mountpoint in ${SLX_INSTALL_BIND_MOUNT}; do
test -d "${SLX_STAGE1_PATH}/${mountpoint}" || \
mkdir -p "${SLX_STAGE1_PATH}/${mountpoint}"
mount -o bind "/${mountpoint}" "${SLX_STAGE1_PATH}/${mountpoint}"
done
unset packagelist
for variable in ${!SLX_INSTALL_PACKAGES_*}; do
packagelist="${packagelist} $( eval echo \$$variable)"
done
smart --data-dir="${SLX_METADATA_PATH}" \
install \
${packagelist} \
-y
# Move any .rpmnew file to the right name
for file in $( find "${SLX_STAGE1_PATH}" -type f -name '*.rpmnew'); do
mv "${file}" "${file%.rpmnew}"
done
for mountpoint in ${SLX_INSTALL_BIND_MOUNT}; do
umount "${SLX_STAGE1_PATH}/${mountpoint}"
done
for file in ${SLX_INSTALL_FAKE_FILE}; do
test -s "${SLX_STAGE1_PATH}/${file}" || \
rm -f "${SLX_STAGE1_PATH}/${file}"
done
}
function slxossetup()
{
case "${SLX_SYSTEM_BASENAME}" in
*suse*)
# Inform SUSE RPMs that we're performing an installation
export YAST_IS_RUNNING="instsys"
slxossetup_rpm
;;
*fedora*)
slxossetup_rpm
;;
*) echo "$0: Error, unkown system ${SLX_SYSTEM_BASENAME}" ;;
esac
}
case "${SLX_OSSETUP_MODE}" in
install) slxossetup ;;
*) echo "Usage: $0 system-name [install]" ;;
esac
|