diff options
author | Colin Guthrie <colin@mageia.org> | 2012-10-28 20:16:00 +0000 |
---|---|---|
committer | Colin Guthrie <colin@mageia.org> | 2012-10-28 20:16:00 +0000 |
commit | 5b2ce4ba3ff6cf5d7df7f5760107ff2f3e7dbe6f (patch) | |
tree | ec8a31bfe3ca67db6c5f31e1e34e59708fdfe557 /rc.d/init.d/functions | |
parent | 35326f41a29186a00331117c4419a904c6563c7c (diff) | |
parent | bf95e22c4164b82112d043169495a71d1bfa0068 (diff) | |
download | initscripts-5b2ce4ba3ff6cf5d7df7f5760107ff2f3e7dbe6f.tar initscripts-5b2ce4ba3ff6cf5d7df7f5760107ff2f3e7dbe6f.tar.gz initscripts-5b2ce4ba3ff6cf5d7df7f5760107ff2f3e7dbe6f.tar.bz2 initscripts-5b2ce4ba3ff6cf5d7df7f5760107ff2f3e7dbe6f.tar.xz initscripts-5b2ce4ba3ff6cf5d7df7f5760107ff2f3e7dbe6f.zip |
Merge tag 'initscripts-9.41-1' into mga-41
Tag as initscripts-9.41-1
Conflicts:
.gitignore
Makefile
inittab
po/xgettext_sh.py
prefdm
rc.d/init.d/functions
rc.d/init.d/halt
rc.d/init.d/killall
rc.d/init.d/netfs
rc.d/init.d/network
rc.d/init.d/single
rc.d/rc
rc.d/rc.local
rc.d/rc.sysinit
service
src/console_check.c
src/console_init.c
sysconfig.txt
sysconfig/network-scripts/ifdown
sysconfig/network-scripts/ifdown-eth
sysconfig/network-scripts/ifup
sysconfig/network-scripts/ifup-eth
sysconfig/network-scripts/ifup-ippp
sysconfig/network-scripts/network-functions
systemd/system/fedora-wait-storage.service
udev/rules.d/10-console.rules
Merge Notes:
1. prefdm: We are keeping the current prefdm script which parses
/etc/sysconfig/desktop to find the current preferred dm. We also
keep the hunk in sysconfig.txt which relates to the afore mentioned
file. Longer term, we should drop this and move to per-dm units.
2. sysconfig/network-scripts/ifup-ippp is still removed at our end...
is there a replacement?
3. I used our /sbin/service as it varies quite a lot from fedora. I'd
be tempted to drop our custom version in favour of upstream
(s/libexec/lib/)
4. ifup/ifdown NM wrappers have been included - previously we just
printed a "Device is manged by NM skipping.." message.
CONFLICT (modify/delete): udev/rules.d/10-console.rules deleted in initscripts-9.41-1 and modified in HEAD. Version HEAD of udev/rules.d/10-console.rules left in tree.
Auto-merging systemd/system/fedora-wait-storage.service
CONFLICT (content): Merge conflict in systemd/system/fedora-wait-storage.service
Auto-merging systemd/fedora-storage-init
Auto-merging sysconfig/network-scripts/network-functions
CONFLICT (content): Merge conflict in sysconfig/network-scripts/network-functions
Removing sysconfig/network-scripts/net.hotplug
Auto-merging sysconfig/network-scripts/ifup-sit
Auto-merging sysconfig/network-scripts/ifup-post
Auto-merging sysconfig/network-scripts/ifup-plusb
CONFLICT (modify/delete): sysconfig/network-scripts/ifup-ippp deleted in
HEAD and modified in initscripts-9.41-1. Version initscripts-9.41-1 of sysconfig/network-scripts/ifup-ippp left in tree.
Auto-merging sysconfig/network-scripts/ifup-eth
CONFLICT (content): Merge conflict in sysconfig/network-scripts/ifup-eth
Auto-merging sysconfig/network-scripts/ifup
CONFLICT (content): Merge conflict in sysconfig/network-scripts/ifup
Auto-merging sysconfig/network-scripts/ifdown-sit
Auto-merging sysconfig/network-scripts/ifdown-post
Auto-merging sysconfig/network-scripts/ifdown-eth
CONFLICT (content): Merge conflict in sysconfig/network-scripts/ifdown-eth
Auto-merging sysconfig/network-scripts/ifdown
CONFLICT (content): Merge conflict in sysconfig/network-scripts/ifdown
Auto-merging sysconfig.txt
CONFLICT (content): Merge conflict in sysconfig.txt
Removing src/testdinit
Removing src/testd.c
Removing src/securetty.c
Removing src/securetty.8
Removing src/getkey.c
Removing src/getkey.1
Removing src/fstab-decode.c
Removing src/fstab-decode.8
CONFLICT (modify/delete): src/console_init.c deleted in initscripts-9.41-1 and modified in HEAD. Version HEAD of src/console_init.c left in tree.
CONFLICT (modify/delete): src/console_check.c deleted in initscripts-9.41-1 and modified in HEAD. Version HEAD of src/console_check.c left in tree.
Auto-merging service
CONFLICT (content): Merge conflict in service
CONFLICT (modify/delete): rc.d/rc.sysinit deleted in initscripts-9.41-1 and modified in HEAD. Version HEAD of rc.d/rc.sysinit left in tree.
CONFLICT (modify/delete): rc.d/rc.local deleted in initscripts-9.41-1 and modified in HEAD. Version HEAD of rc.d/rc.local left in tree.
CONFLICT (modify/delete): rc.d/rc deleted in initscripts-9.41-1 and modified in HEAD. Version HEAD of rc.d/rc left in tree.
CONFLICT (modify/delete): rc.d/init.d/single deleted in initscripts-9.41-1 and modified in HEAD. Version HEAD of rc.d/init.d/single left in tree.
Auto-merging rc.d/init.d/network
CONFLICT (content): Merge conflict in rc.d/init.d/network
CONFLICT (modify/delete): rc.d/init.d/netfs deleted in initscripts-9.41-1 and modified in HEAD. Version HEAD of rc.d/init.d/netfs left in tree.
Auto-merging rc.d/init.d/netconsole
CONFLICT (modify/delete): rc.d/init.d/killall deleted in initscripts-9.41-1 and modified in HEAD. Version HEAD of rc.d/init.d/killall left in tree.
CONFLICT (modify/delete): rc.d/init.d/halt deleted in initscripts-9.41-1 and modified in HEAD. Version HEAD of rc.d/init.d/halt left in tree.
Auto-merging rc.d/init.d/functions
CONFLICT (content): Merge conflict in rc.d/init.d/functions
CONFLICT (modify/delete): prefdm deleted in initscripts-9.41-1 and modified in HEAD. Version HEAD of prefdm left in tree.
Auto-merging ppp/ip-up.ipv6to4
CONFLICT (modify/delete): po/xgettext_sh.py deleted in HEAD and modified in initscripts-9.41-1. Version initscripts-9.41-1 of po/xgettext_sh.py left in tree.
Removing inittab.upstart
Removing inittab.systemd
Removing inittab.s390
Auto-merging inittab
CONFLICT (content): Merge conflict in inittab
Removing init/tty.conf
Removing init/start-ttys.conf
Removing init/splash-manager.conf
Removing init/serial.conf
Removing init/rcS.conf
Removing init/rcS-sulogin.conf
Removing init/rc.conf
Removing init/quit-plymouth.conf
Removing init/prefdm.conf
Removing init/plymouth-shutdown.conf
Removing init/control-alt-delete.conf
Removing crypttab.5
Removing README-init
Removing NetworkManager/dispatcher.d/05-netfs
Auto-merging Makefile
CONFLICT (content): Merge conflict in Makefile
Auto-merging .gitignore
CONFLICT (content): Merge conflict in .gitignore
Automatic merge failed; fix conflicts and then commit the result.
Diffstat (limited to 'rc.d/init.d/functions')
-rw-r--r-- | rc.d/init.d/functions | 414 |
1 files changed, 34 insertions, 380 deletions
diff --git a/rc.d/init.d/functions b/rc.d/init.d/functions index 48fa2c01..33f9eb20 100644 --- a/rc.d/init.d/functions +++ b/rc.d/init.d/functions @@ -61,7 +61,14 @@ systemctl_redirect () { } -[ -z "${CONSOLETYPE:-}" ] && CONSOLETYPE="$(/sbin/consoletype <&2)" +if [ -z "${CONSOLETYPE:-}" ]; then + if [ -c "/dev/stderr" -a -r "/dev/stderr" ]; then + CONSOLETYPE="$(/sbin/consoletype < /dev/stderr 2>/dev/null)" + else + CONSOLETYPE="serial" + fi +fi + # Get a sane screen width, and default to 80 when exact info not available [ -z "${COLUMNS:-}" ] && COLUMNS=`stty -a 2>/dev/null | sed -n 's/.*columns \([0-9]*\);.*/\1/p'` [ -z "${COLUMNS:-}" ] && COLUMNS=80 @@ -176,11 +183,6 @@ inmyroot() { } -# Interpret escape sequences in an fstab entry -fstab_decode_str() { - fstab-decode echo "$1" -} - # Check if any of $pid (could be plural) are running checkpid() { local i @@ -191,82 +193,6 @@ checkpid() { return 1 } -__readlink() { - ls -bl "$@" 2>/dev/null| awk '{ print $NF }' -} - -__fgrep() { - s=$1 - f=$2 - while read line; do - if strstr "$line" "$s"; then - echo $line - return 0 - fi - done < $f - return 1 -} - -# __umount_loop awk_program fstab_file first_msg retry_msg retry_umount_args -# awk_program should process fstab_file and return a list of fstab-encoded -# paths; it doesn't have to handle comments in fstab_file. -__umount_loop() { - local remaining sig=-15 - local retry=3 count - - remaining=$(LC_ALL=C awk "/^#/ {next} $1" "$2" | sort -r) - while [ -n "$remaining" -a "$retry" -gt 0 ]; do - if [ "$retry" -eq 3 ]; then - action "$3" fstab-decode umount $remaining - else - action "$4" fstab-decode umount $5 $remaining - fi - count=4 - remaining=$(LC_ALL=C awk "/^#/ {next} $1" "$2" | sort -r) - while [ "$count" -gt 0 ]; do - [ -z "$remaining" ] && break - count=$(($count-1)) - usleep 500000 - remaining=$(LC_ALL=C awk "/^#/ {next} $1" "$2" | sort -r) - done - [ -z "$remaining" ] && break - fstab-decode /sbin/fuser -k -m $sig $remaining >/dev/null - sleep 3 - retry=$(($retry -1)) - sig=-9 - done -} - -# Similar to __umount loop above, specialized for loopback devices -__umount_loopback_loop() { - local remaining devremaining sig=-15 - local retry=3 - - remaining=$(awk '$1 ~ /^\/dev\/loop/ && $2 != "/" && $2 !~ /^\/live\// {print $2}' /proc/mounts) - devremaining=$(awk '$1 ~ /^\/dev\/loop/ && $2 != "/" && $2 !~ /^\/live\// {print $1}' /proc/mounts) - while [ -n "$remaining" -a "$retry" -gt 0 ]; do - if [ "$retry" -eq 3 ]; then - action "Unmounting loopback filesystems: " \ - fstab-decode umount $remaining - else - action "Unmounting loopback filesystems (retry):" \ - fstab-decode umount $remaining - fi - for dev in $devremaining ; do - losetup $dev > /dev/null 2>&1 && \ - action "Detaching loopback device %s: " $dev \ - losetup -d $dev - done - remaining=$(awk '$1 ~ /^\/dev\/loop/ && $2 != "/" && $2 !~ /^\/live\// {print $2}' /proc/mounts) - devremaining=$(awk '$1 ~ /^\/dev\/loop/ && $2 != "/" && $2 !~ /^\/live\// {print $1}' /proc/mounts) - [ -z "$remaining" ] && break - fstab-decode /sbin/fuser -k -m $sig $remaining >/dev/null - sleep 3 - retry=$(($retry -1)) - sig=-9 - done -} - # __proc_pids {program} [pidfile] # Set $pid to pids from /var/run* for {program}. $pid should be declared # local in the caller. @@ -398,7 +324,7 @@ daemon() { killproc() { local RC killlevel= base pid pid_file= delay try - RC=0; delay=3 + RC=0; delay=3; try=0 # Test syntax. if [ "$#" -eq 0 ]; then gprintf "Usage: killproc [-p pidfile] [ -d delay] {program} [-signal]" @@ -409,7 +335,11 @@ killproc() { shift 2 fi if [ "$1" = "-d" ]; then - delay=$2 + delay=$(echo $2 | awk -v RS=' ' -v IGNORECASE=1 '{if($1!~/^[0-9.]+[smhd]?$/) exit 1;d=$1~/s$|^[0-9.]*$/?1:$1~/m$/?60:$1~/h$/?60*60:$1~/d$/?24*60*60:-1;if(d==-1) exit 1;delay+=d*$1} END {printf("%d",delay+0.5)}') + if [ "$?" -eq 1 ]; then + echo $"Usage: killproc [-p pidfile] [ -d delay] {program} [-signal]" + return 1 + fi shift 2 fi @@ -697,121 +627,6 @@ strstr() { return 0 } - -# Confirm whether we really want to run this service -confirm() { - gprintf "Start service %s (Y)es/(N)o/(C)ontinue? [Y] \n" $1 - local YES=`gprintf "yY"` - local NOT=`gprintf "nN"` - local CNT=`gprintf "cC"` - read answer - - if strstr "$YES" "$answer" || [ "$answer" = "" ] ; then - return 0 - elif strstr "$CNT" "$answer" ; then - return 2 - elif strstr "$NOT" "$answer" ; then - return 1 - fi - confirm $* -} - -initsplash() { - [[ -f /etc/sysconfig/bootsplash ]] && source /etc/sysconfig/bootsplash - [[ -n $SPLASH ]] && splash_rc=$SPLASH - [[ -x /sbin/plymouthd ]] || splash_rc=no - if [ -x /sbin/plymouthd ]; then - splash_mode=plymouth - if [ -r /proc/cmdline ] && grep -q splash /proc/cmdline && [ "$splash_rc" != "no" ]; then - splash_rc=yes - else - splash_rc=no - /bin/plymouth quit 2>/dev/null - PLYMOUTH= - fi - else - splash_rc=no - fi - - [[ $splash_rc != "no" && $splash_rc != "No" && $splash_rc != "NO" ]] && export splash_rc=yes - [[ $splash_mode = "plymouth" ]] || splash_rc= - if [[ -z "$1" ]]; then - set `/sbin/runlevel` - __runlevel=$2 - __previous=$1 - else - __runlevel=$1 - __previous=N - fi - [ "$splash_mode" = "plymouth" -a "$splash_rc" = "yes" -a -e /sys/class/graphics/fb0 ] && [ "$__runlevel" = 0 -o "$__runlevel" = 6 ] && /sbin/plymouthd --mode=shutdown - export splash_mode splash_rc -} - -rc_splash() { - [[ "$splash_rc" = "yes" ]] || return - if [ "$splash_mode" = "plymouth" ]; then - if [ "$1" = "start" ]; then - /bin/plymouth --show-splash 2>/dev/null - if [ "$2" = "1" ]; then - /bin/plymouth message --text="`OUTPUT_CHARSET=UTF-8 gprintf 'Booting the system... Press Esc for verbose mode.'`" 2> /dev/null - elif [ "$2" = "0" ]; then - /bin/plymouth message --text="`OUTPUT_CHARSET=UTF-8 gprintf 'Shutting down the system... Press Esc for verbose mode.'`" 2> /dev/null - else - /bin/plymouth message --text="`OUTPUT_CHARSET=UTF-8 gprintf 'Restarting the system... Press Esc for verbose mode.'`" 2> /dev/null - fi - elif [ "$1" = "stop" -o "$1" = "exit" ]; then - /bin/plymouth quit 2>/dev/null - elif [ "$1" = "umount" ]; then - /bin/plymouth quit --retain-splash 2>/dev/null - elif [ "$1" = "verbose" ]; then - /bin/plymouth --hide-splash 2>/dev/null - else - /bin/plymouth --update "$1" 2>/dev/null - fi - fi -} - -# -# This function finds the encoding of the current locale (it can -# be overwritten by a "CHARSET" variable if needed); the call -# to "locale charmap" should return the proper value; in case it -# fails, a guess from the locale name is done. -# this function is also defined in setsysfont script -# if you change it here change it there too, to have the same behaviour -# -get_locale_encoding() { - CHARSET=${CHARSET=`LC_ALL=$GP_LANG locale charmap 2> /dev/null`} - case "$CHARSET" in - ANSI_X3.4-1968) - # this means that the locale has not been - # correctly initialized; we will look at the - # locale naming and use the known - # default values for various languages - case "${LC_ALL}${LC_CTYPE}${LANG}" in - # the locale tells it is in UTF-8, or it is a language - # we know must be in UTF-8 by default - *.utf8*|*.UTF-8*| \ - am*|an*|ar*|as*|az*|bn*|cy*|eo*|fa*|gn*|gu*|he*|hi*|hy*| \ - id*|ka*|kn*|ku*|ky*|lo*|m*|ne*|om*|pa*|ph*|se*|sr*|st*| \ - ta*|te*|tg*|ti*|tk*|tl*|tt*|ug*|ur*|uz*|vi*|xh*|y*) - CHARSET="UTF-8" ;; - esac - ;; - esac - echo "$CHARSET" -} - -# resolve a device node to its major:minor numbers in decimal or hex -get_numeric_dev() { -( - fmt="%d:%d" - if [ "$1" = "hex" ]; then - fmt="%x:%x" - fi - ls -lH "$2" | awk '{ sub(/,/, "", $5); printf("'"$fmt"'", $5, $6); }' -) 2>/dev/null -} - # Check whether file $1 is a backup or rpm-generated file and should be ignored is_ignored_file() { case "$1" in @@ -844,187 +659,26 @@ is_false() { # Apply sysctl settings, including files in /etc/sysctl.d apply_sysctl() { - sysctl -e -p /etc/sysctl.conf >/dev/null 2>&1 - for file in /etc/sysctl.d/* ; do - is_ignored_file "$file" && continue - test -f "$file" && sysctl -e -p "$file" >/dev/null 2>&1 - done -} - -key_is_random() { - [ "$1" = "/dev/urandom" -o "$1" = "/dev/hw_random" \ - -o "$1" = "/dev/random" ] -} - -find_crypto_mount_point() { - local fs_spec fs_file fs_vfstype remaining_fields - local fs - while read fs_spec fs_file remaining_fields; do - if [ "$fs_spec" = "/dev/mapper/$1" ]; then - echo $fs_file - break; - fi - done < /etc/fstab -} - -# Because of a chicken/egg problem, init_crypto must be run twice. /var may be -# encrypted but /var/lib/random-seed is needed to initialize swap. -init_crypto() { - local have_random dst src key opt lsl owner params makeswap skip arg opt - local param value rc ret mke2fs mdir prompt mount_point - - ret=0 - have_random=$1 - while read dst src key opt; do - [ -z "$dst" -o "${dst#\#}" != "$dst" ] && continue - [ -b "/dev/mapper/$dst" ] && continue; - if [ "$have_random" = 0 ] && key_is_random "$key"; then - continue - fi - if [ -n "$key" -a "x$key" != "xnone" ]; then - if test -e "$key" ; then - owner=$(ls -l $key | (read a b owner rest; echo $owner)) - if ! key_is_random "$key"; then - lsl=$(ls -l "$key") - if [ "${lsl:4:6}" != "------" ]; then - gprintf "INSECURE MODE FOR %s\n" $key - fi - fi - if [ "$owner" != root ]; then - gprintf "INSECURE OWNER FOR %s\n" $key - fi - else - gprintf "Key file for %s not found, skipping\n" $dst - ret=1 - continue - fi - else - key="" - fi - params="" - makeswap="" - mke2fs="" - skip="" - # Parse the src field for UUID= and convert to real device names - if [ "${src%%=*}" == "UUID" ]; then - src=$(/sbin/blkid -t "$src" -l -o device) - elif [ "${src/^\/dev\/disk\/by-uuid\/}" != "$src" ]; then - src=$(__readlink $src) - fi - # Is it a block device? - [ -b "$src" ] || continue - # Is it already a device mapper slave? (this is gross) - devesc=${src##/dev/} - devesc=${devesc//\//!} - for d in /sys/block/dm-*/slaves ; do - [ -e $d/$devesc ] && continue 2 - done - # Parse the options field, convert to cryptsetup parameters and - # contruct the command line - while [ -n "$opt" ]; do - arg=${opt%%,*} - opt=${opt##$arg} - opt=${opt##,} - param=${arg%%=*} - value=${arg##$param=} - - case "$param" in - cipher) - params="$params -c $value" - if [ -z "$value" ]; then - gprintf "%s: no value for cipher option, skipping\n" $dst - skip="yes" - fi - ;; - size) - params="$params -s $value" - if [ -z "$value" ]; then - gprintf "%s: no value for size option, skipping\n" $dst - skip="yes" - fi - ;; - hash) - params="$params -h $value" - if [ -z "$value" ]; then - gprintf "%s: no value for hash option, skipping\n" $dst - skip="yes" - fi - ;; - noauto) - skip="yes" - ;; - verify) - params="$params -y" - ;; - swap) - makeswap=yes - ;; - tmp) - mke2fs=yes - esac - done - if [ "$skip" = "yes" ]; then - ret=1 - continue - fi - if [ -z "$makeswap" ] && cryptsetup isLuks "$src" 2>/dev/null ; then - if key_is_random "$key"; then - gprintf "%s: LUKS requires non-random key, skipping\n" $dst - ret=1 - continue - fi - if [ -n "$params" ]; then - echo "$dst: options are invalid for LUKS partitions," \ - "ignoring them" - fi - if [ -n "$key" ]; then - /sbin/cryptsetup -d $key luksOpen "$src" "$dst" <&1 2>/dev/null && success || failure - rc=$? - else - mount_point="$(find_crypto_mount_point $dst)" - [ -n "$mount_point" ] || mount_point=${src##*/} - prompt=$(printf $"%s is password protected" "$mount_point") - if [ "$splash_rc" = yes ] && [ -d /usr/share/plymouth ]; then - plymouth ask-for-password --prompt "$prompt" --command="/sbin/cryptsetup luksOpen -T1 $src $dst" --number-of-tries=3 <&1 - rc=$? - else - # stop splash to ask for password - rc_splash verbose - /sbin/cryptsetup luksOpen "$src" "$dst" <&1 && success || failure - rc=$? - fi - fi - else - if [ -z "$key" ]; then - mount_point="$(find_crypto_mount_point $dst)" - [ -n "$mount_point" ] || mount_point=${src##*/} - prompt=$(printf $"%s is password protected" "$mount_point") - plymouth ask-for-password --prompt "$prompt" --command="/sbin/cryptsetup $params create $dst $src" <&1 - rc=$? - else - /sbin/cryptsetup $params ${key:+-d $key} create "$dst" "$src" <&1 2>/dev/null && success || failure - rc=$? - fi - fi - if [ $rc -ne 0 ]; then - ret=1 - continue - fi - if [ -b "/dev/mapper/$dst" ]; then - if [ "$makeswap" = "yes" ]; then - mkswap "/dev/mapper/$dst" 2>/dev/null >/dev/null - fi - if [ "$mke2fs" = "yes" ]; then - if mke2fs "/dev/mapper/$dst" 2>/dev/null >/dev/null \ - && mdir=$(mktemp -d /tmp/mountXXXXXX); then - mount "/dev/mapper/$dst" "$mdir" && chmod 1777 "$mdir" - umount "$mdir" - rmdir "$mdir" - fi - fi - fi - done < /etc/crypttab - return $ret + if [ -x /lib/systemd/systemd-sysctl ]; then + /lib/systemd/systemd-sysctl + else + for file in /usr/lib/sysctl.d/*.conf ; do + is_ignored_file "$file" && continue + [ -f /run/sysctl.d/${file##*/} ] && continue + [ -f /etc/sysctl.d/${file##*/} ] && continue + test -f "$file" && sysctl -e -p "$file" >/dev/null 2>&1 + done + for file in /run/sysctl.d/*.conf ; do + is_ignored_file "$file" && continue + [ -f /etc/sysctl.d/${file##*/} ] && continue + test -f "$file" && sysctl -e -p "$file" >/dev/null 2>&1 + done + for file in /etc/sysctl.d/*.conf ; do + is_ignored_file "$file" && continue + test -f "$file" && sysctl -e -p "$file" >/dev/null 2>&1 + done + sysctl -e -p /etc/sysctl.conf >/dev/null 2>&1 + fi } # A sed expression to filter out the files that is_ignored_file recognizes |