initramfs: launch rngd depending on kernel version

Use the kernel version to decide to launch the rngd tool
for kernels previous to v3.17

https://jira.digi.com/browse/DEL-5362
https://jira.digi.com/browse/DEL-5363

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
This commit is contained in:
Arturo Buzarra 2017-11-23 13:53:03 +01:00
parent b8d04da22a
commit d76db197e1
2 changed files with 39 additions and 4 deletions

View File

@ -349,6 +349,19 @@ set_encryption_flag() {
fi
}
#------------------------------------------------------------------------------
# Function - get_kernel_version
#
# Obtain the kernel version and return it in number format
#
# @return - kernel version
#------------------------------------------------------------------------------
get_kernel_version() {
major="$(uname -r | cut -d'.' -f1)"
minor="$(uname -r | cut -d'.' -f2)"
echo $(((major << 8) + minor))
}
# Main
#------------------------------------------------------------------------------
# Setup the environment.
@ -381,8 +394,9 @@ mkdir -p /var/lock
# Set kernel console loglevel.
sysctl -q -w kernel.printk=4
if [ "$(is_nand)" = "no" ]; then
# Launch 'rngd' to feed random data to kernel entropy pool
# Launch 'rngd' to feed random data to kernel entropy pool
# for kernels previous to v3.17
if [ "$(get_kernel_version)" -lt "$(((3 << 8) + 17))" ]; then
mkdir -p /var/run && rngd
fi

View File

@ -24,6 +24,22 @@ error() {
sync && poweroff -f
}
#------------------------------------------------------------------------------
# Function - get_kernel_version
#
# Obtain the kernel version and return it in number format
#
# @return - kernel version
#------------------------------------------------------------------------------
get_kernel_version() {
major="$(uname -r | cut -d'.' -f1)"
minor="$(uname -r | cut -d'.' -f2)"
echo $(((major << 8) + minor))
}
# Main
#------------------------------------------------------------------------------
# Setup the environment.
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
mkdir -p /proc /sys /dev
@ -36,7 +52,10 @@ LOGLEVEL="$(sysctl -n kernel.printk)"
sysctl -q -w kernel.printk=4
# Launch 'rngd' to feed random data to kernel entropy pool
mkdir -p /var/run && rngd
# for kernels previous to v3.17
if [ "$(get_kernel_version)" -lt "$(((3 << 8) + 17))" ]; then
mkdir -p /var/run && rngd
fi
for arg in $(cat /proc/cmdline); do
case "${arg}" in
@ -76,7 +95,9 @@ mount ${FSTYPE:+-t ${FSTYPE}} ${root} /newroot
# - restore previous kernel console loglevel
# - umount virtual filesystems
#
pkill -9 rngd
if [ "$(get_kernel_version)" -lt "$(((3 << 8) + 17))" ]; then
pkill -9 rngd
fi
[ -n "${LOGLEVEL}" ] && sysctl -q -w kernel.printk="${LOGLEVEL}"
mount --move /dev /newroot/dev
umount /sys /proc