Current File : //sbin/mkdumprd
#!/bin/bash --norc
# New mkdumprd
#
# Copyright 2011 Red Hat, Inc.
#
# Written by Cong Wang <amwang@redhat.com>
#

if [ -f /etc/sysconfig/kdump ]; then
	. /etc/sysconfig/kdump
fi

[[ $dracutbasedir ]] || dracutbasedir=/usr/lib/dracut
. $dracutbasedir/dracut-functions.sh
. /lib/kdump/kdump-lib.sh
. /lib/kdump/kdump-logger.sh
export IN_KDUMP=1

#initiate the kdump logger
dlog_init
if [ $? -ne 0 ]; then
	echo "failed to initiate the kdump logger."
	exit 1
fi

conf_file="/etc/kdump.conf"
SSH_KEY_LOCATION="/root/.ssh/kdump_id_rsa"
SAVE_PATH=$(get_save_path)
OVERRIDE_RESETTABLE=0

extra_modules=""
dracut_args="--add kdumpbase --quiet --hostonly --hostonly-cmdline --hostonly-i18n --hostonly-mode strict --hostonly-nics '' -o \"plymouth dash resume ifcfg earlykdump\" --compress=xz"

readonly MKDUMPRD_TMPDIR="$(mktemp -d -t mkdumprd.XXXXXX)"
[ -d "$MKDUMPRD_TMPDIR" ] || perror_exit "dracut: mktemp -p -d -t dracut.XXXXXX failed."
readonly MKDUMPRD_TMPMNT="$MKDUMPRD_TMPDIR/target"

trap '
    ret=$?;
    is_mounted $MKDUMPRD_TMPMNT && umount -f $MKDUMPRD_TMPMNT;
    [[ -d $MKDUMPRD_TMPDIR ]] && rm --one-file-system -rf -- "$MKDUMPRD_TMPDIR";
    exit $ret;
    ' EXIT

# clean up after ourselves no matter how we die.
trap 'exit 1;' SIGINT

add_dracut_arg() {
    dracut_args="$dracut_args $@"
}

add_dracut_mount() {
    add_dracut_arg "--mount" "\"$1\""
}

add_dracut_sshkey() {
    add_dracut_arg "--sshkey" "\"$1\""
}

# caller should ensure $1 is valid and mounted in 1st kernel
to_mount() {
    local _target=$1 _fstype=$2 _options=$3 _new_mntpoint _pdev

    _new_mntpoint=$(get_kdump_mntpoint_from_target $_target)
    _fstype="${_fstype:-$(get_fs_type_from_target $_target)}"
    _options="${_options:-$(get_mntopt_from_target $_target)}"
    _options="${_options:-defaults}"

    if [[ "$_fstype" == "nfs"* ]]; then
        _pdev=$_target
        _options=$(echo $_options | sed 's/,\(mount\)\?addr=[^,]*//g')
        _options=$(echo $_options | sed 's/,\(mount\)\?proto=[^,]*//g')
        _options=$(echo $_options | sed 's/,clientaddr=[^,]*//')
    else
        # for non-nfs _target converting to use udev persistent name
        _pdev="$(kdump_get_persistent_dev $_target)"
        if [ -z "$_pdev" ]; then
            return 1
        fi
    fi

    #mount fs target as rw in 2nd kernel
    _options=$(echo $_options | sed 's/\(^\|,\)ro\($\|,\)/\1rw\2/g')
    # with 'noauto' in fstab nfs and non-root disk mount will fail in 2nd
    # kernel, filter it out here.
    _options=$(echo $_options | sed 's/\(^\|,\)noauto\($\|,\)/\1/g')
    # use both nofail and x-systemd.before to ensure systemd will try best to
    # mount it before kdump starts, this is an attempt to improve robustness
    _options="$_options,nofail,x-systemd.before=initrd-fs.target"

    echo "$_pdev $_new_mntpoint $_fstype $_options"
}

#Function: get_ssh_size
#$1=dump target
#called from while loop and shouldn't read from stdin, so we're using "ssh -n"
get_ssh_size() {
    local _opt _out _size
    _opt="-i $SSH_KEY_LOCATION -o BatchMode=yes -o StrictHostKeyChecking=yes"
    _out=$(ssh -q -n $_opt $1 "df -P $SAVE_PATH")
    [ $? -ne 0 ] && {
        perror_exit "checking remote ssh server available size failed."
    }

    #ssh output removed the line break, so print field NF-2
    _size=$(echo -n $_out| awk '{avail=NF-2; print $avail}')
    echo -n $_size
}

#mkdir if save path does not exist on ssh dump target
#$1=ssh dump target
#caller should ensure write permission on $1:$SAVE_PATH
#called from while loop and shouldn't read from stdin, so we're using "ssh -n"
mkdir_save_path_ssh()
{
    local _opt _dir
    _opt="-i $SSH_KEY_LOCATION -o BatchMode=yes -o StrictHostKeyChecking=yes"
    ssh -qn $_opt $1 mkdir -p $SAVE_PATH 2>&1 > /dev/null
    _ret=$?
    if [ $_ret -ne 0 ]; then
        perror_exit "mkdir failed on $1:$SAVE_PATH"
    fi

    #check whether user has write permission on $1:$SAVE_PATH
    _dir=$(ssh -qn $_opt $1 mktemp -dqp $SAVE_PATH 2>/dev/null)
    _ret=$?
    if [ $_ret -ne 0 ]; then
        perror_exit "Could not create temporary directory on $1:$SAVE_PATH. Make sure user has write permission on destination"
    fi
    ssh -qn $_opt $1 rmdir $_dir

    return 0
}

#Function: get_fs_size
#$1=dump target
get_fs_size() {
    local _mnt=$(get_mntpoint_from_target $1)
    echo -n $(df -P "${_mnt}/$SAVE_PATH"|tail -1|awk '{print $4}')
}

#Function: get_raw_size
#$1=dump target
get_raw_size() {
        echo -n $(fdisk -s "$1")
}

#Function: check_size
#$1: dump type string ('raw', 'fs', 'ssh')
#$2: dump target
check_size() {
    local avail memtotal

    memtotal=$(awk '/MemTotal/{print $2}' /proc/meminfo)
    case "$1" in
        raw)
            avail=$(get_raw_size "$2")
            ;;
        ssh)
            avail=$(get_ssh_size "$2")
            ;;
        fs)
            avail=$(get_fs_size "$2")
            ;;
        *)
            return
    esac

    if [ $? -ne 0 ]; then
            perror_exit "Check dump target size failed"
    fi

    if [ $avail -lt $memtotal ]; then
        dwarn "Warning: There might not be enough space to save a vmcore."
        dwarn "         The size of $2 should be greater than $memtotal kilo bytes."
    fi
}

check_save_path_fs()
{
    local _path=$1

    if [ ! -d $_path ]; then
        perror_exit "Dump path $_path does not exist."
    fi
}

check_user_configured_target()
{
    local _target=$1 _cfg_fs_type=$2 _mounted
    local _mnt=$(get_mntpoint_from_target $_target)
    local _opt=$(get_mntopt_from_target $_target)
    local _fstype=$(get_fs_type_from_target $_target)

    if [ -n "$_fstype" ]; then
        # In case of nfs4, nfs should be used instead, nfs* options is deprecated in kdump.conf
        [[ $_fstype = "nfs"* ]] && _fstype=nfs

        if [ -n "$_cfg_fs_type" ] && [ "$_fstype" != "$_cfg_fs_type" ]; then
            perror_exit "\"$_target\" have a wrong type config \"$_cfg_fs_type\", expected \"$_fstype\""
        fi
    else
        _fstype="$_cfg_fs_type"
        _fstype="$_cfg_fs_type"
    fi

    # For noauto mount, mount it inplace with default value.
    # Else use the temporary target directory
    if [ -n "$_mnt" ]; then
        if ! is_mounted "$_mnt"; then
            if [[ $_opt  = *",noauto"* ]]; then
                mount $_mnt
                [ $? -ne 0 ] && perror_exit "Failed to mount $_target on $_mnt for kdump preflight check."
                _mounted=$_mnt
            else
                perror_exit "Dump target \"$_target\" is neither mounted nor configured as \"noauto\""
            fi
        fi
    else
        _mnt=$MKDUMPRD_TMPMNT
        mkdir -p $_mnt
        mount $_target $_mnt -t $_fstype -o defaults
        [ $? -ne 0 ] && perror_exit "Failed to mount $_target for kdump preflight check."
        _mounted=$_mnt
    fi

    # For user configured target, use $SAVE_PATH as the dump path within the target
    if [ ! -d "$_mnt/$SAVE_PATH" ]; then
        perror_exit "Dump path \"$SAVE_PATH\" does not exist in dump target \"$_target\""
    fi

    check_size fs "$_target"

    # Unmount it early, if function is interrupted and didn't reach here, the shell trap will clear it up anyway
    if [ -n "$_mounted" ]; then
        umount -f -- $_mounted
    fi
}

# $1: core_collector config value
verify_core_collector() {
    local _cmd="${1%% *}"
    local _params="${1#${_cmd}}"

    if [ "$_cmd" != "makedumpfile" ]; then
        if is_raw_dump_target; then
            dwarn "Warning: specifying a non-makedumpfile core collector, you will have to recover the vmcore manually."
        fi
        return
    fi

    if is_ssh_dump_target || is_raw_dump_target; then
        if ! strstr "$_params" "-F"; then
            perror_exit "The specified dump target needs makedumpfile \"-F\" option."
        fi
        _params="$_params vmcore"
    else
        _params="$_params vmcore dumpfile"
    fi

    if ! $_cmd --check-params $_params; then
        perror_exit "makedumpfile parameter check failed."
    fi
}

add_mount() {
    local _mnt=$(to_mount $@)

    if [ $? -ne 0 ]; then
        exit 1
    fi

    add_dracut_mount "$_mnt"
}

#handle the case user does not specify the dump target explicitly
handle_default_dump_target()
{
    local _target
    local _mntpoint

    is_user_configured_dump_target && return

    check_save_path_fs $SAVE_PATH

    _save_path=$(get_bind_mount_source $SAVE_PATH)
    _target=$(get_target_from_path $_save_path)
    _mntpoint=$(get_mntpoint_from_target $_target)

    SAVE_PATH=${_save_path##"$_mntpoint"}
    add_mount "$_target"
    check_size fs $_target
}

get_override_resettable()
{
    local override_resettable

    override_resettable=$(grep "^override_resettable" $conf_file)
    if [ -n "$override_resettable" ]; then
        OVERRIDE_RESETTABLE=$(echo $override_resettable | cut -d' '  -f2)
        if [ "$OVERRIDE_RESETTABLE" != "0" ] && [ "$OVERRIDE_RESETTABLE" != "1" ];then
            perror_exit "override_resettable value $OVERRIDE_RESETTABLE is invalid"
        fi
    fi
}

# $1: function name
for_each_block_target()
{
    local dev majmin

    for dev in $(get_kdump_targets); do
        [ -b "$dev" ] || continue
        majmin=$(get_maj_min $dev)
        check_block_and_slaves $1 $majmin && return 1
    done

    return 0
}

#judge if a specific device with $1 is unresettable
#return false if unresettable.
is_unresettable()
{
    local path="/sys/$(udevadm info --query=all --path=/sys/dev/block/$1 | awk '/^P:/ {print $2}' | sed -e 's/\(cciss[0-9]\+\/\).*/\1/g' -e 's/\/block\/.*$//')/resettable"
    local resettable=1

    if [ -f "$path" ]
    then
        resettable="$(cat $path)"
        [ $resettable -eq 0 -a "$OVERRIDE_RESETTABLE" -eq 0 ] && {
            local device=$(udevadm info --query=all --path=/sys/dev/block/$1 | awk -F= '/DEVNAME/{print $2}')
            derror "Error: Can not save vmcore because device $device is unresettable"
            return 0
        }
    fi

    return 1
}

#check if machine is resettable.
#return true if resettable
check_resettable()
{
    local _ret _target

    get_override_resettable

    for_each_block_target is_unresettable
    _ret=$?

    [ $_ret -eq 0 ] && return

    return 1
}

check_crypt()
{
    local _dev

    for _dev in $(get_kdump_targets); do
        if [[ -n $(get_luks_crypt_dev "$(get_maj_min "$_dev")") ]]; then
            derror "Device $_dev is encrypted." && return 1
        fi
    done
}

if ! check_resettable; then
    exit 1
fi

if ! check_crypt; then
    dwarn "Warning: Encrypted device is in dump path. User will prompted for password during second kernel boot." 
fi

# firstly get right SSH_KEY_LOCATION
keyfile=$(awk '/^sshkey/ {print $2}' $conf_file)
if [ -f "$keyfile" ]; then
    # canonicalize the path
    SSH_KEY_LOCATION=$(/usr/bin/readlink -m $keyfile)
fi

while read config_opt config_val;
do
    # remove inline comments after the end of a directive.
    case "$config_opt" in
    extra_modules)
        extra_modules="$extra_modules $config_val"
        ;;
    ext[234]|xfs|btrfs|minix|nfs)
        check_user_configured_target "$config_val" "$config_opt"
        add_mount "$config_val" "$config_opt"
        ;;
    raw)
        # checking raw disk writable
        dd if=$config_val count=1 of=/dev/null > /dev/null 2>&1 || {
            perror_exit "Bad raw disk $config_val"
        }
        _praw=$(persistent_policy="by-id" kdump_get_persistent_dev $config_val)
        if [ -z "$_praw" ]; then
            exit 1
        fi
        add_dracut_arg "--device" "$_praw"
        check_size raw $config_val
        ;;
    ssh)
        if strstr "$config_val" "@";
        then
            mkdir_save_path_ssh $config_val
            check_size ssh $config_val
            add_dracut_sshkey "$SSH_KEY_LOCATION"
        else
            perror_exit "Bad ssh dump target $config_val"
        fi
        ;;
    core_collector)
        verify_core_collector "$config_val"
        ;;
    dracut_args)
        add_dracut_arg $config_val
        ;;
    *)
        ;;
    esac
done <<< "$(read_strip_comments $conf_file)"

handle_default_dump_target

if [ -n "$extra_modules" ]
then
    add_dracut_arg "--add-drivers" \"$extra_modules\"
fi

# TODO: The below check is not needed anymore with the introduction of
#       'zz-fadumpinit' module, that isolates fadump's capture kernel initrd,
#       but still sysroot.mount unit gets generated based on 'root=' kernel
#       parameter available in fadump case. So, find a way to fix that first
#       before removing this check.
if ! is_fadump_capable; then
    # The 2nd rootfs mount stays behind the normal dump target mount,
    # so it doesn't affect the logic of check_dump_fs_modified().
    is_dump_to_rootfs && add_mount "$(to_dev_name $(get_root_fs_device))"

	add_dracut_arg "--no-hostonly-default-device"

	if fips-mode-setup --is-enabled 2> /dev/null; then
		add_dracut_arg --add-device "$(findmnt -n -o SOURCE --target /boot)"
	fi
fi

echo "$dracut_args $@" | xargs dracut
Página 5

En construcción …

  • Бесплатно закачать приложение Melbet casino вы можете вдобавок получите и распишитесь телефон (Android, iOS), а также нате аэропланшет, плюс доступна вариация для Пк. Поздравительные фриспины начисляются в видах безвозмездной игры в Juicy Fruits Sunshine Rich. Они станут приемлемы только после того, а как игрок получит а еще прокрутит по части вейджеру денежную часть подарка.

  • Hangi uygulamayı indirdiğinizde, 4.500$'a kadar harika bir %300 hoş geldin bonusu alma şansına sahip olacaksınız. Antika veya kripto ödemeyle başa çıkıyor olun veya olmayın, kapsanıyorsunuz. Sonuç olarak, anında, ayrıca harcanabilir kazançlarınız olmadan da olmanızı sağlar. Tek dezavantajı, aslında hiçbir nakit iade bonusu alamamanızdır.

  • Opportune sur VegasSlotsOnline, où le monde entier traverse l’esprit jouer à des jeux casino non payants de ligne. Chaque mois, des millions de joueurs dans la planète je me ont accord de des relier vers des machines a avec désintéressées qu’ils prévoient de goûter.

  • Usually monitor finances Software be the cause of such inaccuracies as a result of MatchPay pages. Betting is going to be enjoyable, and casinos will be https://fishinfrenzyapp.net taking an array of products to own players in order to restrict the playing when needed. Membership constraints, self-analysis screening, and you can exemption options are whatever you…

  • North carolina’s venture into on the internet wagering have opened a scene of potential to own enthusiasts to activate making use of their favourite activities far more interactively. Out of football to help you novelty bets, the choices are vast, that have sportsbooks providing a range of locations and you can meetings. Our advantages have…

  • Several NASCAR groups have headquarters inside the North carolina, and the condition is home to multiple tracks. As a result, assume multiple NASCAR betting possibilities to your local and you may federal races. Listed below are some the New york playing income tax calculator if you would like to ascertain just how much you could…

  • On the bright side, imagine if you are discussing an excellent +250 moneyline. To own confident odds, you happen to be merely watching how much cash you stand-to winnings for each and every $a hundred without a doubt. In such a case, per successful $a hundred bet can lead to a $250 funds.

  • Strike myself right up I’m constantly available💦 😘 👅 I am available for everyday reservations, ready to provide a fresh, vibrant times on the existence. Dressed to charm which have an excellent personality and amazing team  offered. Now that many of us are to your same page and you can know just what it is actually…

  • Les novices font tout pour, les aspirants du redemandent. Unibet sait préserver votre simplement euphonie entre amusement ou record. Unibet Tentative, c’doit souffle nouveau du l’lieux habituellement lorsque sérieux en poker un brin. Unibet Hollande : pour tous leurs goûts compétiteurs – Bonus de casino sans dépôt Deçà, pas de accumulation étouffante, mais une composition…

  • I Bonus Escludendo Base Colpo sono l’prossimo sensibile settore del gambling ove troviamo questo modello di promozione. La nostra alternativa tiene guadagno di diversi fattori fra i quali davvero la scelta, la comodo, la velocità addirittura la limpidezza dei bonus offerti.