Allow running plymouth-populate-initrd in a cross-compiler environment

Signed-off-by: Böszörményi Zoltán <zboszor@pr.hu>
calculate-0.9.5
Böszörményi Zoltán 5 years ago committed by Zoltán Böszörményi
parent b78d921ce5
commit 19f3885d3e

@ -4,6 +4,14 @@
[ -z "$DESTDIR" ] || exit 0
# For running on a (cross-compiled) sysroot, the following
# settings are needed:
# PLYMOUTH_SYSROOT - the sysroot directory
# PLYMOUTH_LDD - an optional ldd command that works on foreign binaries
# PLYMOUTH_LDD_PATH - optional PATH ldd is run with
[ -z "$PLYMOUTH_LDD" ] && PLYMOUTH_LDD="ldd"
[ -z "$PLYMOUTH_LDD_PATH" ] && PLYMOUTH_LDD_PATH="$PATH"
[ -z "$PLYMOUTH_LIBEXECDIR" ] && PLYMOUTH_LIBEXECDIR="@PLYMOUTH_LIBEXECDIR@"
[ -z "$PLYMOUTH_DATADIR" ] && PLYMOUTH_DATADIR="@PLYMOUTH_DATADIR@"
[ -z "$PLYMOUTH_PLUGIN_PATH" ] && PLYMOUTH_PLUGIN_PATH="$(plymouth --get-splash-plugin-path)"
@ -106,12 +114,12 @@ inst_dir() {
# iterate over parent directories
for _file in $_dir; do
[[ -e "${initdir}/$_file" ]] && continue
if [[ -L $_file ]]; then
if [[ -L $PLYMOUTH_SYSROOT$_file ]]; then
inst_symlink "$_file"
else
# create directory
mkdir -m 0755 -p "${initdir}/$_file" || return 1
[[ -e "$_file" ]] && chmod --reference="$_file" "${initdir}/$_file"
[[ -e "$PLYMOUTH_SYSROOT$_file" ]] && chmod --reference="$PLYMOUTH_SYSROOT$_file" "${initdir}/$_file"
chmod u+w "${initdir}/$_file"
fi
done
@ -122,7 +130,7 @@ inst_dir() {
# Location of the image dir is assumed to be $initdir
# We never overwrite the target if it exists.
inst_simple() {
[[ -f "$1" ]] || return 1
[[ -f "$PLYMOUTH_SYSROOT$1" ]] || return 1
strstr "$1" "/" || return 1
local _src=$1 target="${2:-$1}"
@ -132,11 +140,11 @@ inst_simple() {
[[ -d "${initdir}/${target%/*}" ]] || inst_dir "${target%/*}"
fi
# install checksum files also
if [[ -e "${_src%/*}/.${_src##*/}.hmac" ]]; then
if [[ -e "$PLYMOUTH_SYSROOT${_src%/*}/.${_src##*/}.hmac" ]]; then
inst "${_src%/*}/.${_src##*/}.hmac" "${target%/*}/.${target##*/}.hmac"
fi
ddebug "Installing $_src"
cp --sparse=always -pfL "$_src" "${initdir}/$target"
cp --sparse=always -pfL "$PLYMOUTH_SYSROOT$_src" "${initdir}/$target"
}
# find symlinks linked to given library file
@ -158,7 +166,7 @@ rev_lib_symlinks() {
until [[ ${fn##*.} == so ]]; do
fn="${fn%.*}"
[[ -L ${fn} && $(readlink -f "${fn}") == ${orig} ]] && links+=" ${fn}"
[[ -L $PLYMOUTH_SYSROOT${fn} && $(readlink -f "$PLYMOUTH_SYSROOT${fn}") == ${orig} ]] && links+=" ${fn}"
done
echo "${links}"
@ -171,15 +179,19 @@ inst_library() {
local _src="$1" _dest=${2:-$1} _reallib _symlink
strstr "$1" "/" || return 1
[[ -e $initdir/$_dest ]] && return 0
if [[ -L $_src ]]; then
if [[ -L $PLYMOUTH_SYSROOT$_src ]]; then
# install checksum files also
if [[ -e "${_src%/*}/.${_src##*/}.hmac" ]]; then
if [[ -e "$PLYMOUTH_SYSROOT${_src%/*}/.${_src##*/}.hmac" ]]; then
inst "${_src%/*}/.${_src##*/}.hmac" "${_dest%/*}/.${_dest##*/}.hmac"
fi
_reallib=$(readlink -f "$_src")
_reallib=$(readlink -f "$PLYMOUTH_SYSROOT$_src")
_reallib=${_reallib#$PLYMOUTH_SYSROOT}
inst_simple "$_reallib" "$_reallib"
inst_dir "${_dest%/*}"
[[ -d "${_dest%/*}" ]] && _dest=$(readlink -f "${_dest%/*}")/${_dest##*/}
if [[ -d "$PLYMOUTH_SYSROOT${_dest%/*}" ]]; then
_dest=$(readlink -f "$PLYMOUTH_SYSROOT${_dest%/*}")/${_dest##*/}
_dest=${_dest#$PLYMOUTH_SYSROOT}
fi
ln -sfn $(convert_abs_rel "${_dest}" "${_reallib}") "${initdir}/${_dest}"
else
inst_simple "$_src" "$_dest"
@ -197,13 +209,23 @@ inst_library() {
# find a binary. If we were not passed the full path directly,
# search in the usual places to find the binary.
find_binary() {
if [[ -z ${1##/*} ]]; then
if [[ -x $1 ]] || { strstr "$1" ".so" && ldd $1 &>/dev/null; }; then
echo $1
local _delim
[[ -z ${1##/*} ]] || _delim="/"
if [[ "$1" == *.so* ]]; then
if { PATH="$PLYMOUTH_LDD_PATH" $PLYMOUTH_LDD "$PLYMOUTH_SYSROOT$_delim$1" &>/dev/null; }; then
printf "%s\n" "$1"
return 0
fi
fi
if [[ "$1" == */* ]]; then
if [[ -L $PLYMOUTH_SYSROOT$_delim$1 ]] || [[ -x $PLYMOUTH_SYSROOT$_delim$1 ]]; then
printf "%s\n" "$1"
return 0
fi
fi
[[ -n "$PLYMOUTH_SYSROOT" ]] && return 1
type -P $1
}
@ -218,7 +240,7 @@ inst_binary() {
local _file _line
local _so_regex='([^ ]*/lib[^/]*/[^ ]*\.so[^ ]*)'
# I love bash!
LC_ALL=C ldd "$_bin" 2>/dev/null | while read _line; do
LC_ALL=C PATH="$PLYMOUTH_LDD_PATH" $PLYMOUTH_LDD "$PLYMOUTH_SYSROOT$_bin" 2>/dev/null | while read _line; do
[[ $_line = 'not a dynamic executable' ]] && break
if [[ $_line =~ $_so_regex ]]; then
@ -230,7 +252,7 @@ inst_binary() {
if [[ $_line =~ not\ found ]]; then
dfatal "Missing a shared library required by $_bin."
dfatal "Run \"ldd $_bin\" to find out what it is."
dfatal "Run \"$PLYMOUTH_LDD $_bin\" to find out what it is."
dfatal "$_line"
dfatal "dracut cannot create an initrd."
exit 1
@ -246,7 +268,7 @@ inst_script() {
_bin=$(find_binary "$1") || return 1
shift
local _line _shebang_regex
read -r -n 80 _line <"$_bin"
read -r -n 80 _line <"$PLYMOUTH_SYSROOT$_bin"
# If debug is set, clean unprintable chars to prevent messing up the term
[[ $debug ]] && _line=$(echo -n "$_line" | tr -c -d '[:print:][:space:]')
_shebang_regex='(#! *)(/[^ ]+).*'
@ -258,11 +280,12 @@ inst_script() {
inst_symlink() {
local _src=$1 _target=${2:-$1} _realsrc
strstr "$1" "/" || return 1
[[ -L $1 ]] || return 1
[[ -L $PLYMOUTH_SYSROOT$_src ]] || return 1
[[ -L $initdir/$_target ]] && return 0
_realsrc=$(readlink -f "$_src")
_realsrc=$(readlink -f "$PLYMOUTH_SYSROOT$_src")
_realsrc=${_realsrc#$PLYMOUTH_SYSROOT}
if ! [[ -e $initdir/$_realsrc ]]; then
if [[ -d $_realsrc ]]; then
if [[ -d $PLYMOUTH_SYSROOT$_realsrc ]]; then
inst_dir "$_realsrc"
else
inst "$_realsrc"
@ -327,7 +350,7 @@ inst_any() {
[[ $1 = '-d' ]] && to="$2" && shift 2
for f in "$@"; do
if [[ -e $f ]]; then
if [[ -e $PLYMOUTH_SYSROOT$f ]]; then
[[ $to ]] && inst "$f" "$to" && return 0
inst "$f" && return 0
fi
@ -337,11 +360,12 @@ inst_any() {
}
inst_recur() {
for x in "${1%/}"/* ; do
if [[ -d "$x" ]]; then
for x in "$PLYMOUTH_SYSROOT${1%/}"/* ; do
x=${x#$PLYMOUTH_SYSROOT}
if [[ -d "$PLYMOUTH_SYSROOT$x" ]]; then
inst_dir "$x"
inst_recur "$x"
elif [[ -f "$x" ]]; then
elif [[ -f "$PLYMOUTH_SYSROOT$x" ]]; then
inst "$x"
else
break
@ -385,6 +409,10 @@ done
[ -z "$INITRDDIR" ] && usage error
ddebug "Running with PLYMOUTH_SYSROOT=$PLYMOUTH_SYSROOT"
ddebug "Running with PLYMOUTH_LDD=$PLYMOUTH_LDD"
ddebug "Running with PLYMOUTH_LDD_PATH=$PLYMOUTH_LDD_PATH"
mkdir -p ${INITRDDIR}${PLYMOUTH_DATADIR}/plymouth/themes
inst ${PLYMOUTH_DAEMON_PATH} $INITRDDIR
inst ${PLYMOUTH_CLIENT_PATH} $INITRDDIR
@ -411,33 +439,33 @@ if [ $THEME_OVERRIDE ]; then
sed -i "s/^ *Theme *=.*/# theme modified by plymouth-populate-initrd\nTheme=$PLYMOUTH_THEME_NAME/" $conf
fi
PLYMOUTH_MODULE_NAME=$(grep "ModuleName *= *" ${PLYMOUTH_DATADIR}/plymouth/themes/${PLYMOUTH_THEME_NAME}/${PLYMOUTH_THEME_NAME}.plymouth | sed 's/ModuleName *= *//')
PLYMOUTH_MODULE_NAME=$(grep "ModuleName *= *" ${PLYMOUTH_SYSROOT}${PLYMOUTH_DATADIR}/plymouth/themes/${PLYMOUTH_THEME_NAME}/${PLYMOUTH_THEME_NAME}.plymouth | sed 's/ModuleName *= *//')
PLYMOUTH_THEME_DIR="${PLYMOUTH_DATADIR}/plymouth/themes/${PLYMOUTH_THEME_NAME}"
PLYMOUTH_IMAGE_DIR=$(grep "ImageDir *= *" ${PLYMOUTH_THEME_DIR}/${PLYMOUTH_THEME_NAME}.plymouth | sed 's/ImageDir *= *//')
PLYMOUTH_IMAGE_DIR=$(grep "ImageDir *= *" ${PLYMOUTH_SYSROOT}${PLYMOUTH_THEME_DIR}/${PLYMOUTH_THEME_NAME}.plymouth | sed 's/ImageDir *= *//')
if [ ! -f ${PLYMOUTH_PLUGIN_PATH}/${PLYMOUTH_MODULE_NAME}.so ]; then
if [ ! -f ${PLYMOUTH_SYSROOT}${PLYMOUTH_PLUGIN_PATH}/${PLYMOUTH_MODULE_NAME}.so ]; then
echo "The default plymouth plugin (${PLYMOUTH_MODULE_NAME}) doesn't exist" >&2
exit 1
fi
inst ${PLYMOUTH_PLUGIN_PATH}/${PLYMOUTH_MODULE_NAME}.so $INITRDDIR
[ -f "${PLYMOUTH_PLUGIN_PATH}/renderers/drm.so" ] && inst ${PLYMOUTH_PLUGIN_PATH}/renderers/drm.so $INITRDDIR
[ -f "${PLYMOUTH_SYSROOT}${PLYMOUTH_PLUGIN_PATH}/renderers/drm.so" ] && inst ${PLYMOUTH_PLUGIN_PATH}/renderers/drm.so $INITRDDIR
inst ${PLYMOUTH_PLUGIN_PATH}/renderers/frame-buffer.so $INITRDDIR
if [ -d "${PLYMOUTH_THEME_DIR}" ]; then
if [ -d "${PLYMOUTH_SYSROOT}${PLYMOUTH_THEME_DIR}" ]; then
inst_recur "${PLYMOUTH_THEME_DIR}"
fi
if [ "${PLYMOUTH_IMAGE_DIR}" != "${PLYMOUTH_THEME_DIR}" -a -d "${PLYMOUTH_IMAGE_DIR}" ]; then
if [ "${PLYMOUTH_IMAGE_DIR}" != "${PLYMOUTH_THEME_DIR}" -a -d "${PLYMOUTH_SYSROOT}${PLYMOUTH_IMAGE_DIR}" ]; then
inst_recur "${PLYMOUTH_IMAGE_DIR}"
fi
if [ -L ${PLYMOUTH_DATADIR}/plymouth/themes/default.plymouth ]; then
cp -a ${PLYMOUTH_DATADIR}/plymouth/themes/default.plymouth $INITRDDIR${PLYMOUTH_DATADIR}/plymouth/themes
if [ -L ${PLYMOUTH_SYSROOT}${PLYMOUTH_DATADIR}/plymouth/themes/default.plymouth ]; then
cp -a ${PLYMOUTH_SYSROOT}${PLYMOUTH_DATADIR}/plymouth/themes/default.plymouth $INITRDDIR${PLYMOUTH_DATADIR}/plymouth/themes
fi
if [ -n "$SYSTEMD_UNIT_DIR" -a -d "$SYSTEMD_UNIT_DIR" ]; then
if [ -n "$SYSTEMD_UNIT_DIR" -a -d "${PLYMOUTH_SYSROOT}$SYSTEMD_UNIT_DIR" ]; then
inst $SYSTEMD_UNIT_DIR/systemd-ask-password-plymouth.path $INITRDDIR
inst $SYSTEMD_UNIT_DIR/systemd-ask-password-plymouth.service $INITRDDIR

Loading…
Cancel
Save