summaryrefslogtreecommitdiff
path: root/mk/rootfs/openrc/etc/init.d/urandom
diff options
context:
space:
mode:
Diffstat (limited to 'mk/rootfs/openrc/etc/init.d/urandom')
-rw-r--r--mk/rootfs/openrc/etc/init.d/urandom39
1 files changed, 39 insertions, 0 deletions
diff --git a/mk/rootfs/openrc/etc/init.d/urandom b/mk/rootfs/openrc/etc/init.d/urandom
new file mode 100644
index 0000000..edd645d
--- /dev/null
+++ b/mk/rootfs/openrc/etc/init.d/urandom
@@ -0,0 +1,39 @@
+#!/sbin/openrc-run
+# Copyright (c) 2007-2009 Roy Marples <roy@marples.name>
+# Released under the 2-clause BSD license.
+
+: ${urandom_seed:=${URANDOM_SEED:-/etc/random-seed}}
+description="Initializes the random number generator."
+
+save_seed()
+{
+ local psz=1
+
+ if [ -e /proc/sys/kernel/random/poolsize ]; then
+ : $(( psz = $(cat /proc/sys/kernel/random/poolsize) / 4096 ))
+ fi
+
+ ( # sub shell to prevent umask pollution
+ umask 077
+ dd if=/dev/urandom of="$urandom_seed" count=${psz} 2>/dev/null
+ )
+}
+
+start()
+{
+ [ -c /dev/urandom ] || return
+ if [ -f "$urandom_seed" ]; then
+ ebegin "Initializing random number generator"
+ cat "$urandom_seed" > /dev/urandom
+ eend $? "Error initializing random number generator"
+ fi
+ rm -f "$urandom_seed" && save_seed
+ return 0
+}
+
+stop()
+{
+ ebegin "Saving random seed"
+ save_seed
+ eend $? "Failed to save random seed"
+}