Pull EL6 kdump fixes into Rawhide Resolves: 597588
This commit is contained in:
parent
68d2a8081e
commit
dc002368a1
13
.cvsignore
13
.cvsignore
@ -1,11 +1,4 @@
|
|||||||
kexec-tools-1.101.tar.gz
|
|
||||||
makedumpfile.tar.gz
|
|
||||||
makedumpfile-1.1.1.tar.gz
|
|
||||||
kexec-tools-po.tar.gz
|
|
||||||
makedumpfile-1.1.5.tar.gz
|
|
||||||
kexec-tools-testing-20070330.tar.bz2
|
|
||||||
makedumpfile-1.2.6.tar.gz
|
|
||||||
kexec-tools-2.0.0.tar.bz2
|
|
||||||
makedumpfile-1.3.3.tar.gz
|
|
||||||
mkdumprd2-files.tbz2
|
|
||||||
dracut-files.tbz2
|
dracut-files.tbz2
|
||||||
|
kexec-tools-2.0.0.tar.bz2
|
||||||
|
kexec-tools-po.tar.gz
|
||||||
|
makedumpfile-1.3.5.tar.gz
|
||||||
|
35
Makefile.kcp
35
Makefile.kcp
@ -1,35 +0,0 @@
|
|||||||
#
|
|
||||||
# kcp (copying date-stamped core files to filesystems)
|
|
||||||
#
|
|
||||||
|
|
||||||
KCP_C_SRCS:= kcp/kcp.c
|
|
||||||
|
|
||||||
KCP_C_OBJS:= $(patsubst %.c, $(OBJDIR)/%.o, $(KCP_C_SRCS))
|
|
||||||
KCP_C_DEPS:= $(patsubst %.c, $(OBJDIR)/%.d, $(KCP_C_SRCS))
|
|
||||||
KCP_SRCS:= $(KCP_C_SRCS)
|
|
||||||
KCP_OBJS:= $(KCP_C_OBJS)
|
|
||||||
KCP_DEPS:= $(KCP_C_DEPS)
|
|
||||||
KCP:= $(SBINDIR)/kcp
|
|
||||||
|
|
||||||
include $(KCP_DEPS)
|
|
||||||
|
|
||||||
$(KCP_C_DEPS): $(OBJDIR)/%.d: %.c
|
|
||||||
mkdir -p $(@D)
|
|
||||||
$(CC) $(CFLAGS) -M $< | sed -e 's|$(patsubst %.d,%.o,$(@F))|$(patsubst %.d,%.o,$(@))|' > $@
|
|
||||||
|
|
||||||
$(KCP_C_OBJS): $(OBJDIR)/%.o: %.c $(OBJDIR)/%.d
|
|
||||||
mkdir -p $(@D)
|
|
||||||
$(CC) $(CFLAGS) -o $@ -c $<
|
|
||||||
|
|
||||||
$(KCP): $(KCP_OBJS)
|
|
||||||
mkdir -p $(@D)
|
|
||||||
$(CC) $(CFLAGS) -o $@ $(KCP_OBJS)
|
|
||||||
|
|
||||||
echo::
|
|
||||||
@echo "KCP_C_SRCS $(KCP_C_SRCS)"
|
|
||||||
@echo "KCP_C_DEPS $(KCP_C_DEPS)"
|
|
||||||
@echo "KCP_C_OBJS $(KCP_C_OBJS)"
|
|
||||||
@echo "KCP_SRCS $(KCP_SRCS)"
|
|
||||||
@echo "KCP_DEPS $(KCP_DEPS)"
|
|
||||||
@echo "KCP_OBJS $(KCP_OBJS)"
|
|
||||||
|
|
@ -32,15 +32,13 @@ import time
|
|||||||
import gtk
|
import gtk
|
||||||
import gobject
|
import gobject
|
||||||
import commands
|
import commands
|
||||||
import rhpl.executil as executil
|
|
||||||
from firstboot.config import *
|
from firstboot.config import *
|
||||||
from firstboot.constants import *
|
from firstboot.constants import *
|
||||||
from firstboot.functions import *
|
from firstboot.functions import *
|
||||||
from firstboot.module import *
|
from firstboot.module import *
|
||||||
|
import gettext
|
||||||
from rhpl.translate import _, N_
|
_ = lambda x: gettext.ldgettext("firstboot", x)
|
||||||
from rhpl import translate
|
N_ = lambda x: x
|
||||||
translate.textdomain("firstboot")
|
|
||||||
|
|
||||||
class moduleClass(Module):
|
class moduleClass(Module):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@ -58,9 +56,9 @@ class moduleClass(Module):
|
|||||||
|
|
||||||
# possible bootloaders we'll need to adjust
|
# possible bootloaders we'll need to adjust
|
||||||
# bootloader : (config file, kdump offset)
|
# bootloader : (config file, kdump offset)
|
||||||
bootloaders = { "grub" : ("/boot/grub/grub.conf", 16),
|
bootloaders = { "grub" : (["/boot/grub/grub.conf", "/boot/efi/EFI/redhat/grub.conf"], [16, 256]),
|
||||||
"yaboot" : ("/boot/etc/yaboot.conf", 32),
|
"yaboot" : (["/boot/etc/yaboot.conf"], [32]),
|
||||||
"elilo" : ("/boot/efi/EFI/redhat/elilo.conf", 256) }
|
"elilo" : (["/boot/efi/EFI/redhat/elilo.conf"], [256]) }
|
||||||
bootloader = None
|
bootloader = None
|
||||||
offset = 0
|
offset = 0
|
||||||
|
|
||||||
@ -94,9 +92,17 @@ class moduleClass(Module):
|
|||||||
|
|
||||||
def getBootloader(self):
|
def getBootloader(self):
|
||||||
for (name, (conf, offset)) in self.bootloaders.items():
|
for (name, (conf, offset)) in self.bootloaders.items():
|
||||||
if os.access(conf, os.W_OK):
|
i = 0
|
||||||
|
for c in conf:
|
||||||
|
if os.access(c, os.W_OK):
|
||||||
self.bootloader = name
|
self.bootloader = name
|
||||||
|
self.offset = i
|
||||||
return self.bootloader
|
return self.bootloader
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
self.offset = None
|
||||||
|
self.bootloader = None
|
||||||
|
return None
|
||||||
|
|
||||||
def createScreen(self, doDebug = None):
|
def createScreen(self, doDebug = None):
|
||||||
self.doDebug = doDebug
|
self.doDebug = doDebug
|
||||||
@ -161,6 +167,7 @@ class moduleClass(Module):
|
|||||||
self.availMem += self.kdumpMem
|
self.availMem += self.kdumpMem
|
||||||
self.origCrashKernel = "%dM" % (self.kdumpMem)
|
self.origCrashKernel = "%dM" % (self.kdumpMem)
|
||||||
self.kdumpMemInitial = self.kdumpMem
|
self.kdumpMemInitial = self.kdumpMem
|
||||||
|
self.kdumpEnabled = True
|
||||||
else:
|
else:
|
||||||
self.kdumpEnabled = False
|
self.kdumpEnabled = False
|
||||||
self.initialState = self.kdumpEnabled
|
self.initialState = self.kdumpEnabled
|
||||||
@ -344,8 +351,6 @@ class moduleClass(Module):
|
|||||||
self.enableKdumpCheck.set_active(False)
|
self.enableKdumpCheck.set_active(False)
|
||||||
self.showHide(False)
|
self.showHide(False)
|
||||||
return RESULT_FAILURE
|
return RESULT_FAILURE
|
||||||
else:
|
|
||||||
self.offset = self.bootloaders[self.bootloader][1]
|
|
||||||
|
|
||||||
# Are we adding or removing the crashkernel param?
|
# Are we adding or removing the crashkernel param?
|
||||||
if self.kdumpEnabled:
|
if self.kdumpEnabled:
|
||||||
|
1
import.log
Normal file
1
import.log
Normal file
@ -0,0 +1 @@
|
|||||||
|
kexec-tools-2_0_0-36_fc14:HEAD:kexec-tools-2.0.0-36.fc14.src.rpm:1276456495
|
181
kcp.c
181
kcp.c
@ -1,181 +0,0 @@
|
|||||||
|
|
||||||
/* Cheap program to make a variable directory first before copying contents.
|
|
||||||
* Main use is for kdump because nash does not support variables, hence a
|
|
||||||
* command sequence like the following does not work:
|
|
||||||
* date=`date ...`
|
|
||||||
* mkdir -p /x/y/$date
|
|
||||||
* cp foo /x/y/$date/bar
|
|
||||||
*
|
|
||||||
* Don Zickus (dzickus@redhat.com)
|
|
||||||
*
|
|
||||||
* Copyright 2006 Red Hat Software
|
|
||||||
*
|
|
||||||
* This software may be freely redistributed under the terms of the GNU
|
|
||||||
* General Public License, version 2.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define _GNU_SOURCE
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <strings.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
/* grab the local time and replace the %DATE var with it */
|
|
||||||
char * xlate_time(const char *dst)
|
|
||||||
{
|
|
||||||
struct tm *lclnow;
|
|
||||||
time_t now;
|
|
||||||
char *new_dst,*top;
|
|
||||||
int x;
|
|
||||||
|
|
||||||
//get the time
|
|
||||||
if ((top=(char *)malloc(256)) == NULL)
|
|
||||||
return NULL;
|
|
||||||
if ((now = time(NULL)) < 1)
|
|
||||||
return NULL;
|
|
||||||
if ((lclnow = localtime(&now)) == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
//copy the easy stuff
|
|
||||||
new_dst=top;
|
|
||||||
while (*dst && (*dst != '%')) *new_dst++ = *dst++;
|
|
||||||
|
|
||||||
//translate the date part
|
|
||||||
//we output Year-Month-Day-Hour:Minute
|
|
||||||
if (*dst == '%'){
|
|
||||||
x = sprintf(new_dst,"%d-%02d-%02d-%02d:%02d", lclnow->tm_year+1900,
|
|
||||||
lclnow->tm_mon+1, lclnow->tm_mday, lclnow->tm_hour,
|
|
||||||
lclnow->tm_min);
|
|
||||||
new_dst += x;
|
|
||||||
|
|
||||||
//finish the copy
|
|
||||||
dst += 5; //skip over %DATE
|
|
||||||
while (*dst) *new_dst++ = *dst++;
|
|
||||||
}
|
|
||||||
*new_dst='\0';
|
|
||||||
|
|
||||||
return top;
|
|
||||||
}
|
|
||||||
|
|
||||||
void usage(int rc)
|
|
||||||
{
|
|
||||||
|
|
||||||
printf("usage: kcp source dest\n");
|
|
||||||
printf(" kcp --ssh src user@host:/dst\n");
|
|
||||||
printf(" kcp --local src dst\n");
|
|
||||||
printf("Will translate any %%DATE command properly\n");
|
|
||||||
printf("in the 'dest' variable\n");
|
|
||||||
exit(rc);
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
char *src, *dst, *new_dst, *ptr;
|
|
||||||
char *path;
|
|
||||||
int using_ssh=0;
|
|
||||||
char *login;
|
|
||||||
int status;
|
|
||||||
pid_t child;
|
|
||||||
|
|
||||||
if (argc < 4)
|
|
||||||
usage(1);
|
|
||||||
|
|
||||||
src = argv[2];
|
|
||||||
dst = argv[3];
|
|
||||||
if ((new_dst=xlate_time(dst)) == NULL){
|
|
||||||
printf("Failed to translate time\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!strcmp(argv[1], "--ssh"))
|
|
||||||
using_ssh =1;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Now that we have called xlate_time, new_dst
|
|
||||||
* holds the expanded ssh destination
|
|
||||||
*/
|
|
||||||
if (using_ssh) {
|
|
||||||
login=strdup(new_dst);
|
|
||||||
ptr=index(login, ':');
|
|
||||||
*ptr++='\0';
|
|
||||||
path = ptr;
|
|
||||||
} else {
|
|
||||||
login = NULL;
|
|
||||||
path = new_dst;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
*this makes our target directory
|
|
||||||
*/
|
|
||||||
if ((child = fork()) == 0) {
|
|
||||||
/*
|
|
||||||
* child
|
|
||||||
*/
|
|
||||||
if (using_ssh) {
|
|
||||||
if (execlp("ssh", "ssh", "-q", "-o", "BatchMode=yes", "-o",
|
|
||||||
"StrictHostKeyChecking=no", login, "mkdir", "-p",
|
|
||||||
path, NULL) < 0) {
|
|
||||||
perror("Failed to run ssh");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (execlp("mkdir", "mkdir", "-p", path, NULL) < 0) {
|
|
||||||
perror("Failed to run mkdir");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/*
|
|
||||||
* parent
|
|
||||||
*/
|
|
||||||
if (child < 0) {
|
|
||||||
perror("Could not fork");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
wait(&status);
|
|
||||||
if (WEXITSTATUS(status) != 0) {
|
|
||||||
printf ("%s exited abnormally: error = %d\n",
|
|
||||||
using_ssh ? "ssh":"mkdir", WEXITSTATUS(status));
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* now that we have our directory, lets copy everything over
|
|
||||||
* Note that scp can be used for local copies as well
|
|
||||||
*/
|
|
||||||
if ((child = fork()) == 0) {
|
|
||||||
/*need to include login info if scp to remote host*/
|
|
||||||
if (using_ssh)
|
|
||||||
path=new_dst;
|
|
||||||
if (execlp("scp", "scp", "-q", "-o", "BatchMode=yes", "-o",
|
|
||||||
"StrictHostKeyChecking=no", src, path, NULL) < 0) {
|
|
||||||
perror("Failed to run scp\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (child < 0) {
|
|
||||||
perror("Could not fork");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
wait(&status);
|
|
||||||
if (WEXITSTATUS(status) != 0) {
|
|
||||||
printf("scp exited abnormally: error = %d\n",
|
|
||||||
WEXITSTATUS(status));
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
exit(0);
|
|
||||||
}
|
|
@ -79,7 +79,7 @@
|
|||||||
# modules can be listed, separated by a space, and any
|
# modules can be listed, separated by a space, and any
|
||||||
# dependent modules will automatically be included.
|
# dependent modules will automatically be included.
|
||||||
#
|
#
|
||||||
# default <reboot | halt | shell>
|
# default <reboot | halt | poweroff | shell>
|
||||||
# - Action to preform instead of mounting root fs and
|
# - Action to preform instead of mounting root fs and
|
||||||
# running init process
|
# running init process
|
||||||
# reboot: If the default action is reboot simply reboot
|
# reboot: If the default action is reboot simply reboot
|
||||||
@ -88,6 +88,7 @@
|
|||||||
# halt: If the default action is halt, then simply
|
# halt: If the default action is halt, then simply
|
||||||
# halt the system after attempting to capture
|
# halt the system after attempting to capture
|
||||||
# a vmcore, regardless of success or failure.
|
# a vmcore, regardless of success or failure.
|
||||||
|
# poweroff: The system will be powered down
|
||||||
# shell: If the default action is shell, then drop to
|
# shell: If the default action is shell, then drop to
|
||||||
# an msh session inside the initramfs from
|
# an msh session inside the initramfs from
|
||||||
# where you can try to record the core manually.
|
# where you can try to record the core manually.
|
||||||
@ -96,9 +97,9 @@
|
|||||||
# will mount the root file system and run init.
|
# will mount the root file system and run init.
|
||||||
|
|
||||||
#raw /dev/sda5
|
#raw /dev/sda5
|
||||||
#ext3 /dev/sda3
|
#ext4 /dev/sda3
|
||||||
#ext3 LABEL=/boot
|
#ext4 LABEL=/boot
|
||||||
#ext3 UUID=03138356-5e61-4ab3-b58e-27507ac41937
|
#ext4 UUID=03138356-5e61-4ab3-b58e-27507ac41937
|
||||||
#net my.server.com:/export/tmp
|
#net my.server.com:/export/tmp
|
||||||
#net user@my.server.com
|
#net user@my.server.com
|
||||||
#path /var/crash
|
#path /var/crash
|
||||||
|
50
kdump.init
50
kdump.init
@ -136,39 +136,8 @@ function check_config()
|
|||||||
# 4GB of ram available. Returns 1 if we do, 0 if we dont
|
# 4GB of ram available. Returns 1 if we do, 0 if we dont
|
||||||
function need_64bit_headers()
|
function need_64bit_headers()
|
||||||
{
|
{
|
||||||
|
return `tail -n 1 /proc/iomem | awk '{ split ($1, r, "-"); \
|
||||||
MEMSZ=`sed -e's/\(^[0-9]\+.*\)/0x\1/' -e's/\(-\)\(.*\)/ 0x\2/' /proc/iomem | \
|
print (strtonum("0x" r[2]) > strtonum("0xffffffff")); }'`
|
||||||
awk 'BEGIN {
|
|
||||||
totalmem=0;
|
|
||||||
segmentmem=0;
|
|
||||||
}
|
|
||||||
/.*RAM.*/ {
|
|
||||||
start = strtonum($1);
|
|
||||||
end = strtonum($2);
|
|
||||||
segmentmem=end-start;
|
|
||||||
totalmem=totalmem+(segmentmem/1024);
|
|
||||||
if (end >= 4194304) {
|
|
||||||
totalmem=totalmem+4194304;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
END {
|
|
||||||
printf "%d", (totalmem+1);
|
|
||||||
}'`
|
|
||||||
|
|
||||||
#The AWK script above computes the total number of KB
|
|
||||||
#in the RAM areas of /proc/iomem
|
|
||||||
#Note also that we set totalmem to 4GB in the event that
|
|
||||||
#any physical address is larger than 4GB. This lets us
|
|
||||||
#default to 64 bit ELF headers for PAE kernels, which
|
|
||||||
#need then to access those higher addresses.
|
|
||||||
|
|
||||||
#This comparison tells us if the above amount is more than
|
|
||||||
#4GB (4096 KB). I do the funny math to avoid overflow
|
|
||||||
if [ $MEMSZ -ge 4194304 ]
|
|
||||||
then
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
return 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Load the kdump kerel specified in /etc/sysconfig/kdump
|
# Load the kdump kerel specified in /etc/sysconfig/kdump
|
||||||
@ -186,6 +155,10 @@ function load_kdump()
|
|||||||
if [ "$ARCH" == "ppc64" ]
|
if [ "$ARCH" == "ppc64" ]
|
||||||
then
|
then
|
||||||
MEM_RESERVED=`grep "crashkernel=[0-9]\+[MmKkGg]@[0-9]\+[MmGgKk]" /proc/cmdline`
|
MEM_RESERVED=`grep "crashkernel=[0-9]\+[MmKkGg]@[0-9]\+[MmGgKk]" /proc/cmdline`
|
||||||
|
if [ -z "$MEM_RESERVED" ]
|
||||||
|
then
|
||||||
|
MEM_RESERVED=`grep "crashkernel=[0-9]\+[MmKkGg]" /proc/cmdline`
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
MEM_RESERVED=`grep "Crash kernel" /proc/iomem | grep -v "00000000-00000000"`
|
MEM_RESERVED=`grep "Crash kernel" /proc/iomem | grep -v "00000000-00000000"`
|
||||||
fi
|
fi
|
||||||
@ -220,7 +193,7 @@ function load_kdump()
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
KDUMP_COMMANDLINE=`echo $KDUMP_COMMANDLINE | sed -e 's/crashkernel=[0-9]\+[MmKkGg]@[0-9]\+[MmGgKk]//'`
|
KDUMP_COMMANDLINE=`echo $KDUMP_COMMANDLINE | sed -e 's/crashkernel=[^ ]*//'`
|
||||||
KDUMP_COMMANDLINE="${KDUMP_COMMANDLINE} ${KDUMP_COMMANDLINE_APPEND}"
|
KDUMP_COMMANDLINE="${KDUMP_COMMANDLINE} ${KDUMP_COMMANDLINE_APPEND}"
|
||||||
|
|
||||||
$KEXEC $KEXEC_ARGS $standard_kexec_args \
|
$KEXEC $KEXEC_ARGS $standard_kexec_args \
|
||||||
@ -284,10 +257,10 @@ function propagate_ssh_key()
|
|||||||
SSH_SERVER=`echo $SSH_TARGET | sed -e's/\(.*@\)\(.*$\)/\2/'`
|
SSH_SERVER=`echo $SSH_TARGET | sed -e's/\(.*@\)\(.*$\)/\2/'`
|
||||||
|
|
||||||
#now send the found key to the found server
|
#now send the found key to the found server
|
||||||
cat $KEYFILE | ssh -x $SSH_USER@$SSH_SERVER "mkdir -p ~$SSH_USER/.ssh; chmod 700 ~$SSH_USER/.ssh; cat >> ~$SSH_USER/.ssh/authorized_keys2; chmod 600 ~$SSH_USER/.ssh/authorized_keys2"
|
ssh-copy-id -i $KEYFILE $SSH_USER@$SSH_SERVER &>/dev/null
|
||||||
RET=$?
|
RET=$?
|
||||||
if [ $RET == 0 ]; then
|
if [ $RET == 0 ]; then
|
||||||
echo $KEYFILE has been added to ~$SSH_USER/.ssh/authorized_keys2 on $SSH_SERVER
|
echo $KEYFILE has been added to ~$SSH_USER/.ssh/authorized_keys on $SSH_SERVER
|
||||||
$LOGGER "propagated ssh key (ssh server: $SSH_SERVER)"
|
$LOGGER "propagated ssh key (ssh server: $SSH_SERVER)"
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
@ -377,14 +350,15 @@ case "$1" in
|
|||||||
case "$?" in
|
case "$?" in
|
||||||
0)
|
0)
|
||||||
echo "Kdump is operational"
|
echo "Kdump is operational"
|
||||||
|
EXIT_CODE=0
|
||||||
;;
|
;;
|
||||||
1)
|
1)
|
||||||
echo "Kdump is not operational"
|
echo "Kdump is not operational"
|
||||||
EXIT_CODE=1
|
EXIT_CODE=3
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
echo "Kdump is unsupported on this kernel"
|
echo "Kdump is unsupported on this kernel"
|
||||||
EXIT_CODE=1
|
EXIT_CODE=3
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
exit $EXIT_CODE
|
exit $EXIT_CODE
|
||||||
|
@ -30,9 +30,8 @@ hence contents of first kernel's memory are preserved, which is essentially
|
|||||||
the kernel crash dump.
|
the kernel crash dump.
|
||||||
|
|
||||||
Kdump is supported on the i686, x86_64, ia64 and ppc64 platforms. The
|
Kdump is supported on the i686, x86_64, ia64 and ppc64 platforms. The
|
||||||
standard kernel and capture kernel are one in the same on i686, x86_64
|
standard kernel and capture kernel are one in the same on i686, x86_64,
|
||||||
and ia64, while ppc64 requires a separate capture kernel (provided by the
|
ia64 and ppc64.
|
||||||
kernel-kdump package) at this time.
|
|
||||||
|
|
||||||
If you're reading this document, you should already have kexec-tools
|
If you're reading this document, you should already have kexec-tools
|
||||||
installed. If not, you install it via the following command:
|
installed. If not, you install it via the following command:
|
||||||
@ -60,25 +59,34 @@ kexec-tools installed. If not, you install it via the following command:
|
|||||||
|
|
||||||
# yum install kexec-tools
|
# yum install kexec-tools
|
||||||
|
|
||||||
If you're on ppc64, you'll first need to install the kernel-kdump package:
|
|
||||||
|
|
||||||
# yum install kernel-kdump
|
|
||||||
|
|
||||||
To be able to do much of anything interesting in the way of debug analysis,
|
To be able to do much of anything interesting in the way of debug analysis,
|
||||||
you'll also need to install the kernel-debuginfo package, of the same arch
|
you'll also need to install the kernel-debuginfo package, of the same arch
|
||||||
as your running kernel, and the crash utility:
|
as your running kernel, and the crash utility:
|
||||||
|
|
||||||
# yum --enablerepo=\*debuginfo install kernel-debuginfo.$(uname -m) crash
|
# yum --enablerepo=\*debuginfo install kernel-debuginfo.$(uname -m) crash
|
||||||
|
|
||||||
Next up, we need to modify some boot parameters to reserve a chunk of memory
|
Next up, we need to modify some boot parameters to reserve a chunk of memory for
|
||||||
for the capture kernel. For i686 and x86_64, edit /etc/grub.conf, and append
|
the capture kernel. For i686 and x86_64, edit /etc/grub.conf, and append
|
||||||
"crashkernel=128M@16M" to the end of your kernel line. Similarly, append
|
"crashkernel=128M" to the end of your kernel line. Similarly, append the same to
|
||||||
the same to the append line in /etc/yaboot.conf for ppc64, followed by a
|
the append line in /etc/yaboot.conf for ppc64. On ia64, edit /etc/elilo.conf,
|
||||||
/sbin/ybin to load the new configuration (not needed for grub). On ia64,
|
adding "crashkernel=256M" to the append line for your kernel. Note that the X
|
||||||
edit /etc/elilo.conf, adding "crashkernel=256M@256M" to the append line for
|
values are such that X = the amount of memory to reserve for the capture kernel.
|
||||||
your kernel. Note that the X@Y values are such that X = the amount of memory
|
|
||||||
to reserve for the capture kernel and Y = the offset into memory at which
|
Note that there is an alternative form in which to specify a crashkernel
|
||||||
that reservation should start.
|
memory reservation, in the event that more control is needed over the size and
|
||||||
|
placement of the reserved memory. The format is:
|
||||||
|
|
||||||
|
crashkernel=range1:size1[,range2:size2,...][@offset]
|
||||||
|
|
||||||
|
Where range<n> specifies a range of values that are matched against the amount
|
||||||
|
of physical RAM present in the system, and the corresponding size<n> value
|
||||||
|
specifies the amount of kexec memory to reserve. For example:
|
||||||
|
|
||||||
|
crashkernel=512M-2G:64M,2G-:128M
|
||||||
|
|
||||||
|
This line tells kexec to reserve 64M of ram if the system contains between
|
||||||
|
512M and 2G of physical memory. If the system contains 2G or more of physical
|
||||||
|
memory, 128M should be reserved.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
# grub.conf generated by anaconda
|
# grub.conf generated by anaconda
|
||||||
@ -117,7 +125,7 @@ fstype=raw
|
|||||||
image=/vmlinuz-2.6.17-1.2621.el5
|
image=/vmlinuz-2.6.17-1.2621.el5
|
||||||
label=linux read-only
|
label=linux read-only
|
||||||
initrd=/initrd-2.6.17-1.2621.el5.img
|
initrd=/initrd-2.6.17-1.2621.el5.img
|
||||||
append="root=LABEL=/ crashkernel=128M@16M"
|
append="root=LABEL=/ crashkernel=128M"
|
||||||
|
|
||||||
|
|
||||||
# cat /etc/elilo.conf
|
# cat /etc/elilo.conf
|
||||||
@ -129,15 +137,15 @@ relocatable
|
|||||||
image=vmlinuz-2.6.17-1.2621.el5
|
image=vmlinuz-2.6.17-1.2621.el5
|
||||||
label=2.6.17-1.2621.el5
|
label=2.6.17-1.2621.el5
|
||||||
initrd=initrd-2.6.17-1.2621.el5.img read-only
|
initrd=initrd-2.6.17-1.2621.el5.img read-only
|
||||||
append="-- root=LABEL=/ crashkernel=256M@256M"
|
append="-- root=LABEL=/ crashkernel=256M"
|
||||||
|
|
||||||
|
|
||||||
After making said changes, reboot your system, so that the X MB of memory
|
After making said changes, reboot your system, so that the X MB of memory is
|
||||||
starting Y MB into your memory is left untouched by the normal system,
|
left untouched by the normal system, reserved for the capture kernel. Take note
|
||||||
reserved for the capture kernel. Take note that the output of 'free -m' will
|
that the output of 'free -m' will show X MB less memory than without this
|
||||||
show X MB less memory than without this parameter, which is expected. You
|
parameter, which is expected. You may be able to get by with less than 128M, but
|
||||||
may be able to get by with less than 128M, but testing with only 64M has
|
testing with only 64M has proven unreliable of late. On ia64, as much as 512M
|
||||||
proven unreliable of late. On ia64, as much as 512M may be required.
|
may be required.
|
||||||
|
|
||||||
Now that you've got that reserved memory region set up, you want to turn on
|
Now that you've got that reserved memory region set up, you want to turn on
|
||||||
the kdump init script:
|
the kdump init script:
|
||||||
@ -200,10 +208,6 @@ http://kbase.redhat.com/faq/FAQ_85_9129.shtm
|
|||||||
Once this feature has been enabled in the kernel, any lockups will result in an
|
Once this feature has been enabled in the kernel, any lockups will result in an
|
||||||
OOPs message to be generated, followed by Kdump being triggered.
|
OOPs message to be generated, followed by Kdump being triggered.
|
||||||
|
|
||||||
Please refrain from simultaneously enabling 'nmi_watchdog' and setting
|
|
||||||
/proc/sys/kernel/unknown_nmi_panic, as this would result in a Kernel Panic
|
|
||||||
from legitimate NMIs generated by the nmi_watchdog.
|
|
||||||
|
|
||||||
3) Kernel OOPs
|
3) Kernel OOPs
|
||||||
|
|
||||||
If we want to generate a dump everytime the Kernel OOPses, we can achieve this
|
If we want to generate a dump everytime the Kernel OOPses, we can achieve this
|
||||||
@ -231,9 +235,6 @@ the 'unknown_nmi_panic' option as follows:
|
|||||||
|
|
||||||
# echo 1 > /proc/sys/kernel/unknown_nmi_panic
|
# echo 1 > /proc/sys/kernel/unknown_nmi_panic
|
||||||
|
|
||||||
When enabling unknown_nmi_panic please be careful not to enable Nmi Watchdog
|
|
||||||
feature, else the system will panic.
|
|
||||||
|
|
||||||
5) PowerPC specific methods:
|
5) PowerPC specific methods:
|
||||||
|
|
||||||
On IBM PowerPC machines, issuing a soft reset invokes the XMON debugger(if
|
On IBM PowerPC machines, issuing a soft reset invokes the XMON debugger(if
|
||||||
@ -337,13 +338,13 @@ Dedicated file system
|
|||||||
Similar to raw partition dumping, you can format a partition with the file
|
Similar to raw partition dumping, you can format a partition with the file
|
||||||
system of your choice, leaving it unmounted during normal operation. Again,
|
system of your choice, leaving it unmounted during normal operation. Again,
|
||||||
it should be at least as large as the amount of memory in the system. Assuming
|
it should be at least as large as the amount of memory in the system. Assuming
|
||||||
/dev/sda3 has been formatted ext3, specify 'ext3 /dev/sda3' in kdump.conf,
|
/dev/sda3 has been formatted ext4, specify 'ext4 /dev/sda3' in kdump.conf,
|
||||||
and a vmcore file will be copied onto the file system after it has been
|
and a vmcore file will be copied onto the file system after it has been
|
||||||
mounted. Dumping to a dedicated partition has the advantage that you can dump
|
mounted. Dumping to a dedicated partition has the advantage that you can dump
|
||||||
multiple vmcores to the file system, space permitting, without overwriting
|
multiple vmcores to the file system, space permitting, without overwriting
|
||||||
previous ones, as would be the case in a raw partition setup. Restart the
|
previous ones, as would be the case in a raw partition setup. Restart the
|
||||||
kdump service via '/sbin/service kdump restart' to commit this change to
|
kdump service via '/sbin/service kdump restart' to commit this change to
|
||||||
your kdump initrd. Note that for local file systems ext3 and ext2 are
|
your kdump initrd. Note that for local file systems ext4 and ext2 are
|
||||||
supported as dumpable targets. Kdump will not prevent you from specifying
|
supported as dumpable targets. Kdump will not prevent you from specifying
|
||||||
other filesystems, and they will most likely work, but their operation
|
other filesystems, and they will most likely work, but their operation
|
||||||
cannot be guaranteed. for instance specifying a vfat filesystem or msdos
|
cannot be guaranteed. for instance specifying a vfat filesystem or msdos
|
||||||
|
12
kexec-tools-2.0.0-fix-page-offset.patch
Normal file
12
kexec-tools-2.0.0-fix-page-offset.patch
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
diff -up kexec-tools-2.0.0/kexec/arch/x86_64/crashdump-x86_64.h.orig kexec-tools-2.0.0/kexec/arch/x86_64/crashdump-x86_64.h
|
||||||
|
--- kexec-tools-2.0.0/kexec/arch/x86_64/crashdump-x86_64.h.orig 2010-01-29 09:12:07.000000000 -0500
|
||||||
|
+++ kexec-tools-2.0.0/kexec/arch/x86_64/crashdump-x86_64.h 2010-01-29 09:12:19.000000000 -0500
|
||||||
|
@@ -5,7 +5,7 @@ int load_crashdump_segments(struct kexec
|
||||||
|
unsigned long max_addr, unsigned long min_base);
|
||||||
|
|
||||||
|
#define __START_KERNEL_map 0xffffffff80000000UL
|
||||||
|
-#define PAGE_OFFSET 0xffff810000000000UL
|
||||||
|
+#define PAGE_OFFSET 0xffff880000000000UL
|
||||||
|
#define __pa(x) (((unsigned long)(x)>=__START_KERNEL_map)?(unsigned long)(x) - (unsigned long)__START_KERNEL_map:(unsigned long)(x) - PAGE_OFFSET)
|
||||||
|
|
||||||
|
#define MAXMEM 0x3fffffffffffUL
|
66
kexec-tools-2.0.0-makedumpfile-2.6.32-sparsemem.patch
Normal file
66
kexec-tools-2.0.0-makedumpfile-2.6.32-sparsemem.patch
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
From: Masayuki Igawa <igawa@mxs.nes.nec.co.jp>
|
||||||
|
Date: Tue, 6 Apr 2010 04:50:45 +0000 (+0900)
|
||||||
|
Subject: [PATCH] handle !SPARSEMEM_EX properly.
|
||||||
|
X-Git-Url: http://makedumpfile.git.sourceforge.net/git/gitweb.cgi?p=makedumpfile%2Fmakedumpfile;a=commitdiff_plain;h=27b71566ec11128c5b061a350e467546f2d26be6
|
||||||
|
|
||||||
|
[PATCH] handle !SPARSEMEM_EX properly.
|
||||||
|
|
||||||
|
In !SPARSEMEM_EX case, the symbol mem_section points a array of struct
|
||||||
|
mem_section, doesn't point a array of pointer to mem_section[], so I
|
||||||
|
think the check:
|
||||||
|
|
||||||
|
if (!is_kvaddr(mem_sec[SECTION_NR_TO_ROOT(nr)]))
|
||||||
|
return NOT_KV_ADDR;
|
||||||
|
|
||||||
|
in nr_to_section() is not a valid check in this case.
|
||||||
|
|
||||||
|
To make the matters worse, if CONFIG_CGROUP_MEM_RES_CTLR is enabled, the
|
||||||
|
end of struct mem_section is padded with 0.
|
||||||
|
|
||||||
|
So, reading mem_section by "rd" of crash will look like:
|
||||||
|
|
||||||
|
crash> rd mem_section 128
|
||||||
|
c08b71e0: c9002003 c9001200 f7000000 00000000
|
||||||
|
c08b71f0: c9002003 c9001260 f6980000 00000000
|
||||||
|
c08b7200: c9002003 c90012c0 f6300000 00000000
|
||||||
|
c08b7210: c9002003 c9001320 f5c80000 00000000
|
||||||
|
|
||||||
|
This means nr_to_section() will return 0 when "nr" is 3,7,11,... because
|
||||||
|
it meets the condition(mem_sec[SECTION_NR_TO_ROOT(nr)] == mem_sec[nr]
|
||||||
|
== 0 == !is_kvaddr).
|
||||||
|
|
||||||
|
As a result, mem_map for section 3,7,11,... cannot be handled properly.
|
||||||
|
|
||||||
|
This patch is a fix for this problem. nr_to_section() will check "addr"
|
||||||
|
by is_kvaddr() later anyway, so this patch just removes the problematic
|
||||||
|
check.
|
||||||
|
|
||||||
|
Signed-off-by: Masayuki Igawa <igawa@mxs.nes.nec.co.jp>
|
||||||
|
Signed-off-by: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
|
||||||
|
---
|
||||||
|
|
||||||
|
diff -up kexec-tools-2.0.0/makedumpfile-1.3.5/makedumpfile.c.orig kexec-tools-2.0.0/makedumpfile-1.3.5/makedumpfile.c
|
||||||
|
--- kexec-tools-2.0.0/makedumpfile-1.3.5/makedumpfile.c.orig 2010-04-06 17:01:15.858262785 +0200
|
||||||
|
+++ kexec-tools-2.0.0/makedumpfile-1.3.5/makedumpfile.c 2010-04-06 17:01:15.865290984 +0200
|
||||||
|
@@ -3550,9 +3550,6 @@ nr_to_section(unsigned long nr, unsigned
|
||||||
|
{
|
||||||
|
unsigned long addr;
|
||||||
|
|
||||||
|
- if (!is_kvaddr(mem_sec[SECTION_NR_TO_ROOT(nr)]))
|
||||||
|
- return NOT_KV_ADDR;
|
||||||
|
-
|
||||||
|
if (is_sparsemem_extreme())
|
||||||
|
addr = mem_sec[SECTION_NR_TO_ROOT(nr)] +
|
||||||
|
(nr & SECTION_ROOT_MASK()) * SIZE(mem_section);
|
||||||
|
diff -up kexec-tools-2.0.0/makedumpfile-1.3.5/makedumpfile.h.orig kexec-tools-2.0.0/makedumpfile-1.3.5/makedumpfile.h
|
||||||
|
--- kexec-tools-2.0.0/makedumpfile-1.3.5/makedumpfile.h.orig 2009-11-11 01:44:51.000000000 +0100
|
||||||
|
+++ kexec-tools-2.0.0/makedumpfile-1.3.5/makedumpfile.h 2010-04-06 17:02:36.471367908 +0200
|
||||||
|
@@ -449,7 +449,7 @@ do { \
|
||||||
|
#define KVER_MIN_SHIFT 16
|
||||||
|
#define KERNEL_VERSION(x,y,z) (((x) << KVER_MAJ_SHIFT) | ((y) << KVER_MIN_SHIFT) | (z))
|
||||||
|
#define OLDEST_VERSION KERNEL_VERSION(2, 6, 15)/* linux-2.6.15 */
|
||||||
|
-#define LATEST_VERSION KERNEL_VERSION(2, 6, 31)/* linux-2.6.31 */
|
||||||
|
+#define LATEST_VERSION KERNEL_VERSION(2, 6, 32)/* linux-2.6.32 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* vmcoreinfo in /proc/vmcore
|
83
kexec-tools-2.0.0-makedumpfile-2.6.32-utsname.patch
Normal file
83
kexec-tools-2.0.0-makedumpfile-2.6.32-utsname.patch
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
diff -up kexec-tools-2.0.0/makedumpfile-1.3.5/makedumpfile.c.orig kexec-tools-2.0.0/makedumpfile-1.3.5/makedumpfile.c
|
||||||
|
--- kexec-tools-2.0.0/makedumpfile-1.3.5/makedumpfile.c.orig 2009-11-10 19:44:51.000000000 -0500
|
||||||
|
+++ kexec-tools-2.0.0/makedumpfile-1.3.5/makedumpfile.c 2010-03-03 10:33:45.000000000 -0500
|
||||||
|
@@ -3772,6 +3772,8 @@ initialize_bitmap_memory(void)
|
||||||
|
int
|
||||||
|
initial(void)
|
||||||
|
{
|
||||||
|
+ int debug_info = FALSE;
|
||||||
|
+
|
||||||
|
if (!(vt.mem_flags & MEMORY_XEN) && info->flag_exclude_xen_dom) {
|
||||||
|
MSG("'-X' option is disable,");
|
||||||
|
MSG("because %s is not Xen's memory core image.\n", info->name_memory);
|
||||||
|
@@ -3803,6 +3805,7 @@ initial(void)
|
||||||
|
if (!read_vmcoreinfo())
|
||||||
|
return FALSE;
|
||||||
|
close_vmcoreinfo();
|
||||||
|
+ debug_info = TRUE;
|
||||||
|
/*
|
||||||
|
* Get the debug information for analysis from the kernel file
|
||||||
|
*/
|
||||||
|
@@ -3818,6 +3821,8 @@ initial(void)
|
||||||
|
|
||||||
|
if (!get_srcfile_info())
|
||||||
|
return FALSE;
|
||||||
|
+
|
||||||
|
+ debug_info = TRUE;
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* Check whether /proc/vmcore contains vmcoreinfo,
|
||||||
|
@@ -3847,6 +3852,7 @@ initial(void)
|
||||||
|
if (!read_vmcoreinfo_from_vmcore(info->offset_vmcoreinfo,
|
||||||
|
info->size_vmcoreinfo, FALSE))
|
||||||
|
return FALSE;
|
||||||
|
+ debug_info = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!get_value_for_old_linux())
|
||||||
|
@@ -3863,31 +3869,25 @@ out:
|
||||||
|
if (!get_max_mapnr())
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
- if ((info->max_dump_level <= DL_EXCLUDE_ZERO) && !info->flag_dmesg) {
|
||||||
|
- /*
|
||||||
|
- * The debugging information is unnecessary, because the memory
|
||||||
|
- * management system will not be analazed.
|
||||||
|
- */
|
||||||
|
- if (!get_mem_map_without_mm())
|
||||||
|
+ if (debug_info) {
|
||||||
|
+ if (!get_machdep_info())
|
||||||
|
return FALSE;
|
||||||
|
- else
|
||||||
|
- return TRUE;
|
||||||
|
- }
|
||||||
|
|
||||||
|
- if (!get_machdep_info())
|
||||||
|
- return FALSE;
|
||||||
|
-
|
||||||
|
- if (!check_release())
|
||||||
|
- return FALSE;
|
||||||
|
+ if (!check_release())
|
||||||
|
+ return FALSE;
|
||||||
|
|
||||||
|
- if (!get_versiondep_info())
|
||||||
|
- return FALSE;
|
||||||
|
+ if (!get_versiondep_info())
|
||||||
|
+ return FALSE;
|
||||||
|
|
||||||
|
- if (!get_numnodes())
|
||||||
|
- return FALSE;
|
||||||
|
+ if (!get_numnodes())
|
||||||
|
+ return FALSE;
|
||||||
|
|
||||||
|
- if (!get_mem_map())
|
||||||
|
- return FALSE;
|
||||||
|
+ if (!get_mem_map())
|
||||||
|
+ return FALSE;
|
||||||
|
+ } else {
|
||||||
|
+ if (!get_mem_map_without_mm())
|
||||||
|
+ return FALSE;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
27
kexec-tools-2.0.0-makedumpfile-boption.patch
Normal file
27
kexec-tools-2.0.0-makedumpfile-boption.patch
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
diff -up kexec-tools-2.0.0/makedumpfile-1.3.5/makedumpfile.8.orig kexec-tools-2.0.0/makedumpfile-1.3.5/makedumpfile.8
|
||||||
|
--- kexec-tools-2.0.0/makedumpfile-1.3.5/makedumpfile.8.orig 2009-11-10 19:44:51.000000000 -0500
|
||||||
|
+++ kexec-tools-2.0.0/makedumpfile-1.3.5/makedumpfile.8 2010-03-22 09:20:57.000000000 -0400
|
||||||
|
@@ -446,6 +446,10 @@ it is necessary to specfiy [\-x \fIVMLIN
|
||||||
|
Print debugging message.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
+\fB-b <order>\fR
|
||||||
|
+cache 2^order pages in ram when generating vmcore info before writing to output
|
||||||
|
+
|
||||||
|
+.TP
|
||||||
|
\fB\-h\fR
|
||||||
|
Show help message.
|
||||||
|
|
||||||
|
diff -up kexec-tools-2.0.0/makedumpfile-1.3.5/makedumpfile.c.orig kexec-tools-2.0.0/makedumpfile-1.3.5/makedumpfile.c
|
||||||
|
--- kexec-tools-2.0.0/makedumpfile-1.3.5/makedumpfile.c.orig 2010-03-22 09:20:33.000000000 -0400
|
||||||
|
+++ kexec-tools-2.0.0/makedumpfile-1.3.5/makedumpfile.c 2010-03-22 09:21:06.000000000 -0400
|
||||||
|
@@ -738,6 +738,9 @@ print_usage(void)
|
||||||
|
MSG(" [-D]:\n");
|
||||||
|
MSG(" Print debugging message.\n");
|
||||||
|
MSG("\n");
|
||||||
|
+ MSG(" [-b <order>]:\n");
|
||||||
|
+ MSG(" Specify the block write size of makedumpfile. 2^order pages are cached on each write\n");
|
||||||
|
+ MSG("\n");
|
||||||
|
MSG(" [-f]:\n");
|
||||||
|
MSG(" Overwrite DUMPFILE even if it already exists.\n");
|
||||||
|
MSG("\n");
|
@ -1,12 +1,11 @@
|
|||||||
diff -up kexec-tools-2.0.0/makedumpfile-1.3.3/Makefile.orig kexec-tools-2.0.0/makedumpfile-1.3.3/Makefile
|
--- kexec-tools-2.0.0/makedumpfile-1.3.5/Makefile.orig 2009-11-11 08:44:51.000000000 +0800
|
||||||
--- kexec-tools-2.0.0/makedumpfile-1.3.3/Makefile.orig 2009-07-06 15:45:56.000000000 -0400
|
+++ kexec-tools-2.0.0/makedumpfile-1.3.5/Makefile 2010-05-30 00:25:17.350869858 +0800
|
||||||
+++ kexec-tools-2.0.0/makedumpfile-1.3.3/Makefile 2009-07-06 15:46:06.000000000 -0400
|
@@ -32,7 +32,7 @@
|
||||||
@@ -32,7 +32,7 @@ $(OBJ_ARCH): $(SRC_ARCH)
|
|
||||||
$(CC) $(CFLAGS_ARCH) -c -o ./$@ ./$(@:.o=.c)
|
$(CC) $(CFLAGS_ARCH) -c -o ./$@ ./$(@:.o=.c)
|
||||||
|
|
||||||
makedumpfile: $(SRC) $(OBJ_ARCH)
|
makedumpfile: $(SRC) $(OBJ_ARCH)
|
||||||
- $(CC) $(CFLAGS) $(OBJ_ARCH) -o $@ $< -static -ldw -lelf -lz
|
- $(CC) $(CFLAGS) $(OBJ_ARCH) -o $@ $< -static -ldw -lelf -lz
|
||||||
+ $(CC) $(CFLAGS) $(OBJ_ARCH) -o $@ $< -ldw -lelf -lz
|
+ $(CC) $(CFLAGS) $(OBJ_ARCH) -o $@ $< -ldw -lelf -lz
|
||||||
gzip -c ./makedumpfile.8 > ./makedumpfile.8.gz
|
echo .TH MAKEDUMPFILE 8 \"$(DATE)\" \"makedumpfile v$(VERSION)\" \"Linux System Administrator\'s Manual\" > temp.8
|
||||||
|
grep -v "^.TH MAKEDUMPFILE 8" makedumpfile.8 >> temp.8
|
||||||
clean:
|
mv temp.8 makedumpfile.8
|
||||||
|
12
kexec-tools-2.0.0-x8664-kernel-text-size.patch
Normal file
12
kexec-tools-2.0.0-x8664-kernel-text-size.patch
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
diff -up kexec-tools-2.0.0/kexec/arch/x86_64/crashdump-x86_64.h.orig kexec-tools-2.0.0/kexec/arch/x86_64/crashdump-x86_64.h
|
||||||
|
--- kexec-tools-2.0.0/kexec/arch/x86_64/crashdump-x86_64.h.orig 2010-04-30 15:14:13.000000000 -0400
|
||||||
|
+++ kexec-tools-2.0.0/kexec/arch/x86_64/crashdump-x86_64.h 2010-04-30 15:14:20.000000000 -0400
|
||||||
|
@@ -11,7 +11,7 @@ int load_crashdump_segments(struct kexec
|
||||||
|
#define MAXMEM 0x3fffffffffffUL
|
||||||
|
|
||||||
|
/* Kernel text size */
|
||||||
|
-#define KERNEL_TEXT_SIZE (40UL*1024*1024)
|
||||||
|
+#define KERNEL_TEXT_SIZE (512UL*1024*1024)
|
||||||
|
|
||||||
|
#define CRASH_MAX_MEMMAP_NR (KEXEC_MAX_SEGMENTS + 1)
|
||||||
|
#define CRASH_MAX_MEMORY_RANGES (MAX_MEMORY_RANGES + 2)
|
@ -1,10 +1,10 @@
|
|||||||
Name: kexec-tools
|
Name: kexec-tools
|
||||||
Version: 2.0.0
|
Version: 2.0.0
|
||||||
Release: 33%{?dist}
|
Release: 36%{?dist}
|
||||||
License: GPLv2
|
License: GPLv2
|
||||||
Group: Applications/System
|
Group: Applications/System
|
||||||
Summary: The kexec/kdump userspace component.
|
Summary: The kexec/kdump userspace component.
|
||||||
Source0: %{name}-%{version}.tar.bz2
|
Source0: http://www.kernel.org/pub/linux/kernel/people/horms/kexec-tools/%{name}-%{version}.tar.bz2
|
||||||
Source1: kdump.init
|
Source1: kdump.init
|
||||||
Source2: kdump.sysconfig
|
Source2: kdump.sysconfig
|
||||||
Source3: kdump.sysconfig.x86_64
|
Source3: kdump.sysconfig.x86_64
|
||||||
@ -13,7 +13,7 @@ Source5: kdump.sysconfig.ppc64
|
|||||||
Source6: kdump.sysconfig.ia64
|
Source6: kdump.sysconfig.ia64
|
||||||
Source7: mkdumprd
|
Source7: mkdumprd
|
||||||
Source8: kdump.conf
|
Source8: kdump.conf
|
||||||
Source9: makedumpfile-1.3.3.tar.gz
|
Source9: http://downloads.sourceforge.net/project/makedumpfile/makedumpfile/1.3.5/makedumpfile-1.3.5.tar.gz
|
||||||
Source10: kexec-kdump-howto.txt
|
Source10: kexec-kdump-howto.txt
|
||||||
Source11: firstboot_kdump.py
|
Source11: firstboot_kdump.py
|
||||||
Source12: mkdumprd.8
|
Source12: mkdumprd.8
|
||||||
@ -47,6 +47,8 @@ Obsoletes: diskdumputils netdump
|
|||||||
#
|
#
|
||||||
# Patches 101 through 200 are meant for x86_64 kexec-tools enablement
|
# Patches 101 through 200 are meant for x86_64 kexec-tools enablement
|
||||||
#
|
#
|
||||||
|
Patch101: kexec-tools-2.0.0-fix-page-offset.patch
|
||||||
|
Patch102: kexec-tools-2.0.0-x8664-kernel-text-size.patch
|
||||||
|
|
||||||
#
|
#
|
||||||
# Patches 201 through 300 are meant for ia64 kexec-tools enablement
|
# Patches 201 through 300 are meant for ia64 kexec-tools enablement
|
||||||
@ -69,6 +71,9 @@ Obsoletes: diskdumputils netdump
|
|||||||
#
|
#
|
||||||
Patch601: kexec-tools-2.0.0-disable-kexec-test.patch
|
Patch601: kexec-tools-2.0.0-disable-kexec-test.patch
|
||||||
Patch602: kexec-tools-2.0.0-makedumpfile-dynamic-build.patch
|
Patch602: kexec-tools-2.0.0-makedumpfile-dynamic-build.patch
|
||||||
|
Patch603: kexec-tools-2.0.0-makedumpfile-2.6.32-utsname.patch
|
||||||
|
Patch604: kexec-tools-2.0.0-makedumpfile-boption.patch
|
||||||
|
Patch605: kexec-tools-2.0.0-makedumpfile-2.6.32-sparsemem.patch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
kexec-tools provides /sbin/kexec binary that facilitates a new
|
kexec-tools provides /sbin/kexec binary that facilitates a new
|
||||||
@ -83,8 +88,14 @@ component of the kernel's kexec feature.
|
|||||||
mkdir -p -m755 kcp
|
mkdir -p -m755 kcp
|
||||||
tar -z -x -v -f %{SOURCE9}
|
tar -z -x -v -f %{SOURCE9}
|
||||||
|
|
||||||
|
%patch101 -p1
|
||||||
|
%patch102 -p1
|
||||||
|
|
||||||
%patch601 -p1
|
%patch601 -p1
|
||||||
%patch602 -p1
|
%patch602 -p1
|
||||||
|
%patch603 -p1
|
||||||
|
%patch604 -p1
|
||||||
|
%patch605 -p1
|
||||||
|
|
||||||
tar -z -x -v -f %{SOURCE13}
|
tar -z -x -v -f %{SOURCE13}
|
||||||
|
|
||||||
@ -114,7 +125,7 @@ cp %{SOURCE10} .
|
|||||||
|
|
||||||
make
|
make
|
||||||
%ifarch %{ix86} x86_64 ia64 ppc64
|
%ifarch %{ix86} x86_64 ia64 ppc64
|
||||||
make -C makedumpfile-1.3.3
|
make -C makedumpfile-1.3.5
|
||||||
%endif
|
%endif
|
||||||
make -C kexec-tools-po
|
make -C kexec-tools-po
|
||||||
|
|
||||||
@ -145,7 +156,8 @@ install -m 644 %{SOURCE14} $RPM_BUILD_ROOT%{_sysconfdir}/udev/rules.d/98-kexec.r
|
|||||||
install -m 644 %{SOURCE15} $RPM_BUILD_ROOT%{_mandir}/man5/kdump.conf.5
|
install -m 644 %{SOURCE15} $RPM_BUILD_ROOT%{_mandir}/man5/kdump.conf.5
|
||||||
|
|
||||||
%ifarch %{ix86} x86_64 ia64 ppc64
|
%ifarch %{ix86} x86_64 ia64 ppc64
|
||||||
install -m 755 makedumpfile-1.3.3/makedumpfile $RPM_BUILD_ROOT/sbin/makedumpfile
|
install -m 755 makedumpfile-1.3.5/makedumpfile $RPM_BUILD_ROOT/sbin/makedumpfile
|
||||||
|
install -m 644 makedumpfile-1.3.5/makedumpfile.8.gz $RPM_BUILD_ROOT/%{_mandir}/man8/makedumpfile.8.gz
|
||||||
%endif
|
%endif
|
||||||
make -C kexec-tools-po install DESTDIR=$RPM_BUILD_ROOT
|
make -C kexec-tools-po install DESTDIR=$RPM_BUILD_ROOT
|
||||||
%find_lang %{name}
|
%find_lang %{name}
|
||||||
@ -268,6 +280,52 @@ done
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sun Jun 13 2010 Lubomir Rintel <lkundrak@v3.sk> - 2.0.0-36
|
||||||
|
- Cosmetic mkdumprd fixes (drop an unused function, streamline another)
|
||||||
|
|
||||||
|
* Sat May 29 2010 CAI Qian <caiqian@redhat.com> - 2.0.0-35
|
||||||
|
- Forward-port from F13
|
||||||
|
- Fixed kernel text area search in kcore (bz 587750)
|
||||||
|
|
||||||
|
* Sat May 29 2010 CAI Qian <caiqian@redhat.com> - 2.0.0-34
|
||||||
|
- Massive forward-port from RHEL6
|
||||||
|
- Update kexec-kdump-howto.txt
|
||||||
|
- Update docs to reflect use of ext4
|
||||||
|
- Update mkdumprd to pull in all modules needed
|
||||||
|
- Fix mkdumprd typo
|
||||||
|
- Removed universal add of ata_piix from mkdumprd
|
||||||
|
- Fix infinite loop from modprobe changes
|
||||||
|
- Fixed kexec-kdump-howto.doc for RHEL6
|
||||||
|
- Update makedumpfile to 1.3.5
|
||||||
|
- Improved mkdumprd run time
|
||||||
|
- Cai's fix for broken regex
|
||||||
|
- Fixing crashkernel syntax parsing
|
||||||
|
- Fix initscript to return proper LSB return codes
|
||||||
|
- Fixed bad call to resolve_dm_name
|
||||||
|
- Added poweroff option to mkdumprd
|
||||||
|
- Fixed readlink issue
|
||||||
|
- Fixed x86_64 page_offset specifictaion
|
||||||
|
- Fixed lvm setup loop to not hang
|
||||||
|
- Added utsname support to makedumpfile for 2.6.32
|
||||||
|
- Fix critical_disks list to exclude cciss/md
|
||||||
|
- Add help info for -b option
|
||||||
|
- Add ability to handle firmware hotplug events
|
||||||
|
- Update mkdumprd to deal with changes in busybox fsck
|
||||||
|
- Vitaly's fix to detect need for 64 bit elf
|
||||||
|
- Fix major/minor numbers on /dev/rtc
|
||||||
|
- Fix ssh id propogation w/ selinux
|
||||||
|
- Add blacklist feature to kdump.conf
|
||||||
|
- Removed rhpl code from firstboot
|
||||||
|
- Fixed firstboot enable sense
|
||||||
|
- Remove bogus debug comment from mkdumprd.
|
||||||
|
- Handle SPARSEMEM properly
|
||||||
|
- Fix scp monitoring script
|
||||||
|
- Fix firstboot to find grub on EFI systems
|
||||||
|
- Fixed mkdumprd to remove dup insmod
|
||||||
|
- Fixed kdump fsck pause
|
||||||
|
- Fixed kdump option handling
|
||||||
|
- fixed raid5 module detection
|
||||||
|
|
||||||
* Thu Mar 11 2010 Neil Horman <nhorman@redhat.com> - 2.0.0-33
|
* Thu Mar 11 2010 Neil Horman <nhorman@redhat.com> - 2.0.0-33
|
||||||
- Remove nash references from mkdumprd
|
- Remove nash references from mkdumprd
|
||||||
|
|
||||||
|
308
mkdumprd
308
mkdumprd
@ -122,7 +122,6 @@ moduledep() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
vecho -n "Looking for deps of module $1"
|
|
||||||
deps=$(awk 'BEGIN { searched=ARGV[2]; ARGV[2]=""; rc=1 } \
|
deps=$(awk 'BEGIN { searched=ARGV[2]; ARGV[2]=""; rc=1 } \
|
||||||
function modname(filename) { match(filename, /\/([^\/]+)\.k?o:?$/, ret); return ret[1] } \
|
function modname(filename) { match(filename, /\/([^\/]+)\.k?o:?$/, ret); return ret[1] } \
|
||||||
function show() { if (orig == searched) { print dep; orig=""; rc=0; exit } } \
|
function show() { if (orig == searched) { print dep; orig=""; rc=0; exit } } \
|
||||||
@ -131,24 +130,108 @@ moduledep() {
|
|||||||
if ($2) { for (i = 2; i <= NF; i++) { dep=sprintf("%s %s", dep, modname($i)); } } } \
|
if ($2) { for (i = 2; i <= NF; i++) { dep=sprintf("%s %s", dep, modname($i)); } } } \
|
||||||
/^ / { dep=sprintf("%s %s", dep, modname($1)); } \
|
/^ / { dep=sprintf("%s %s", dep, modname($1)); } \
|
||||||
END { show(); exit(rc) }' /lib/modules/$kernel/modules.dep $1)
|
END { show(); exit(rc) }' /lib/modules/$kernel/modules.dep $1)
|
||||||
|
for i in `modprobe --show-depends $1 2>/dev/null | awk '/insmod/ {print $2}'`
|
||||||
|
do
|
||||||
|
modname=`basename $i | sed -e's/\.ko//'`
|
||||||
|
if [ "$modname" == "$1" ]
|
||||||
|
then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
deps="$deps $modname"
|
||||||
|
done
|
||||||
[ -n "$deps" ] && vecho ":$deps" || vecho
|
[ -n "$deps" ] && vecho ":$deps" || vecho
|
||||||
}
|
}
|
||||||
|
|
||||||
findone() {
|
findone() {
|
||||||
echo nash-find "$@" | /sbin/nash --force --quiet \
|
find "$@" -print -quit
|
||||||
| /bin/awk '{ print $1; exit; }'
|
|
||||||
}
|
|
||||||
|
|
||||||
findall() {
|
|
||||||
find "$@"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dm_get_uuid() {
|
dm_get_uuid() {
|
||||||
dmsetup info "$1" | awk '/^.*UUID.*/ {print $2}'
|
dmsetup info "$1" | awk '/^.*UUID.*/ {print $2}'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
depsolve_modlist()
|
||||||
|
{
|
||||||
|
local TMPINMODS=$MODULES
|
||||||
|
local TMPOUTMODS=""
|
||||||
|
local i
|
||||||
|
local j
|
||||||
|
local mname
|
||||||
|
local dpcnt
|
||||||
|
local scnt
|
||||||
|
|
||||||
|
#
|
||||||
|
# So, basically, we just do this until TMPINMODS
|
||||||
|
# is an empty list
|
||||||
|
#
|
||||||
|
while [ -n "$TMPINMODS" ]
|
||||||
|
do
|
||||||
|
for i in $TMPINMODS
|
||||||
|
do
|
||||||
|
mname=`basename $i | sed -e's/\.ko//'`
|
||||||
|
dpcnt=`modprobe --show-depends $mname 2>/dev/null | awk '/insmod/ {print $2}' | wc -l`
|
||||||
|
if [ $dpcnt -le 1 ]
|
||||||
|
then
|
||||||
|
# we have no dependencies, just add it to the list
|
||||||
|
echo "$TMPOUTMODS" | grep -q $i
|
||||||
|
if [ $? -ne 0 ]
|
||||||
|
then
|
||||||
|
TMPOUTMODS="$TMPOUTMODS $i"
|
||||||
|
fi
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
# We should start this counter at 1, since we expect that the last
|
||||||
|
# line output by modprobe --show-depends will be the module we
|
||||||
|
# specify as mname below, but since modprobe is busted and
|
||||||
|
# sometimes doesn't do that, we start at zero, and increment an
|
||||||
|
# extra time below if we are searching for a dependency on ourself
|
||||||
|
let scnt=0
|
||||||
|
for j in `modprobe --show-depends $mname 2>/dev/null | awk '/insmod/ {print $2}'`
|
||||||
|
do
|
||||||
|
echo $TMPOUTMODS | grep -q $j
|
||||||
|
if [ $? -eq 0 ]
|
||||||
|
then
|
||||||
|
let scnt=$scnt+1
|
||||||
|
fi
|
||||||
|
# here we are looking to see if the insmod line is for the
|
||||||
|
# module that we are searching for dependencies on. We do this
|
||||||
|
# because modprobe is busted in its show-depends line
|
||||||
|
echo $j | grep -q $i
|
||||||
|
if [ $? -eq 0 ]
|
||||||
|
then
|
||||||
|
let scnt=$scnt+1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [ "$scnt" == "$dpcnt" ]
|
||||||
|
then
|
||||||
|
echo "$TMPOUTMODS" | grep -q $i
|
||||||
|
if [ $? -ne 0 ]
|
||||||
|
then
|
||||||
|
TMPOUTMODS="$TMPOUTMODS $i"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
#Finish for i loop
|
||||||
|
done
|
||||||
|
for j in $TMPOUTMODS
|
||||||
|
do
|
||||||
|
TMPTMPMODS=""
|
||||||
|
for z in $TMPINMODS
|
||||||
|
do
|
||||||
|
if [ "$j" == "$z" ]
|
||||||
|
then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
TMPTMPMODS="$TMPTMPMODS $z"
|
||||||
|
done
|
||||||
|
TMPINMODS=$TMPTMPMODS
|
||||||
|
done
|
||||||
|
done
|
||||||
|
MODULES=$TMPOUTMODS
|
||||||
|
}
|
||||||
|
|
||||||
findmodule() {
|
findmodule() {
|
||||||
skiperrors=""
|
local skiperrors=""
|
||||||
|
|
||||||
|
|
||||||
if [ $1 == "--skiperrors" ]; then
|
if [ $1 == "--skiperrors" ]; then
|
||||||
skiperrors=--skiperrors
|
skiperrors=--skiperrors
|
||||||
@ -156,6 +239,7 @@ findmodule() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
local modName=$1
|
local modName=$1
|
||||||
|
local skipdeps=$2
|
||||||
|
|
||||||
if [ "$modName" = "off" -o "$modName" = "null" ]; then
|
if [ "$modName" = "off" -o "$modName" = "null" ]; then
|
||||||
return
|
return
|
||||||
@ -176,6 +260,12 @@ findmodule() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# special cases
|
# special cases
|
||||||
|
case "$modName" in
|
||||||
|
raid[456])
|
||||||
|
modName=raid456
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
if [ "$modName" = "i2o_block" ]; then
|
if [ "$modName" = "i2o_block" ]; then
|
||||||
findmodule i2o_core
|
findmodule i2o_core
|
||||||
findmodule -i2o_pci
|
findmodule -i2o_pci
|
||||||
@ -192,32 +282,31 @@ findmodule() {
|
|||||||
findmodule raid456
|
findmodule raid456
|
||||||
modName="raid456"
|
modName="raid456"
|
||||||
else
|
else
|
||||||
|
if [ -z "$skipdeps" ]
|
||||||
|
then
|
||||||
moduledep $modName
|
moduledep $modName
|
||||||
for i in $deps; do
|
for i in $deps; do
|
||||||
findmodule $i
|
findmodule $i
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
fmPath=$(modprobe --set-version $kernel -l $modName 2>/dev/null)
|
fmPath=$(modprobe --set-version $kernel -l $modName 2>/dev/null)
|
||||||
|
if [ ! -f "/lib/modules/$kernel/$fmPath" ]; then
|
||||||
if [ ! -f "$fmPath" ]; then
|
|
||||||
for modExt in o.gz o ko
|
|
||||||
do
|
|
||||||
for modDir in /lib/modules/$kernel/updates /lib/modules/$kernel
|
for modDir in /lib/modules/$kernel/updates /lib/modules/$kernel
|
||||||
do
|
do
|
||||||
if [ -d $modDir ]
|
if [ -d $modDir ]
|
||||||
then
|
then
|
||||||
fmPath=$(findone $modDir -name $modName.$modExt)
|
fmPath=$(findone $modDir -name $modName.ko)
|
||||||
if [ -f "$fmPath" ]
|
if [ -f "$fmPath" ]
|
||||||
then
|
then
|
||||||
break 2
|
break 2
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
done
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -f "$fmPath" ]; then
|
if [ ! -f "/lib/modules/$kernel/$fmPath" ]; then
|
||||||
if [ -n "$skiperrors" ]; then
|
if [ -n "$skiperrors" ]; then
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
@ -239,7 +328,7 @@ findmodule() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# only need to add each module once
|
# only need to add each module once
|
||||||
MODULES="$MODULES $fmPath"
|
MODULES="$MODULES /lib/modules/$kernel/$fmPath"
|
||||||
|
|
||||||
# need to handle prescsimods here -- they need to go _after_ scsi_mod
|
# need to handle prescsimods here -- they need to go _after_ scsi_mod
|
||||||
if [ "$modName" = "scsi_mod" ]; then
|
if [ "$modName" = "scsi_mod" ]; then
|
||||||
@ -249,6 +338,17 @@ findmodule() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
do_blacklist()
|
||||||
|
{
|
||||||
|
local modName=$1
|
||||||
|
|
||||||
|
if echo "$modName" | grep -q "\/" ; then
|
||||||
|
local dirName="/lib/modules/$kernel/$modName"
|
||||||
|
find $dirName -xtype f -exec basename {} \; | sed "s/^\(.*\).ko/blacklist \1/g" >> $MNTIMAGE/etc/blacklist-kdump.conf
|
||||||
|
else
|
||||||
|
echo "blacklist $modName" >> $MNTIMAGE/etc/blacklist-kdump.conf
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
inst() {
|
inst() {
|
||||||
if [ "$#" != "2" ];then
|
if [ "$#" != "2" ];then
|
||||||
@ -259,11 +359,6 @@ inst() {
|
|||||||
cp $1 $2
|
cp $1 $2
|
||||||
}
|
}
|
||||||
|
|
||||||
readlink() {
|
|
||||||
readlink "$1"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
findstoragedriverinsys () {
|
findstoragedriverinsys () {
|
||||||
while [ ! -L device ]; do
|
while [ ! -L device ]; do
|
||||||
[ "$PWD" = "/sys" ] && return
|
[ "$PWD" = "/sys" ] && return
|
||||||
@ -278,23 +373,39 @@ findstoragedriverinsys () {
|
|||||||
for driver in $(modprobe --set-version $kernel --show-depends $modalias 2>/dev/null| awk '{ print gensub(".*/","","g",$2) }') ; do
|
for driver in $(modprobe --set-version $kernel --show-depends $modalias 2>/dev/null| awk '{ print gensub(".*/","","g",$2) }') ; do
|
||||||
findmodule ${driver%%.ko}
|
findmodule ${driver%%.ko}
|
||||||
done
|
done
|
||||||
|
# Handle special needs for missing deps or wierd modalias lines
|
||||||
|
case $modalias in
|
||||||
|
"scsi:t-0x00")
|
||||||
|
findmodule ata_generic
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
findstoragedriver () {
|
findstoragedriver () {
|
||||||
for device in $@ ; do
|
for device in $@ ; do
|
||||||
|
basedev=`echo $device | sed -e's/\/dev\///' -e's/[0-9]\+//'`
|
||||||
|
if [ -d /sys/block/$basedev ]
|
||||||
|
then
|
||||||
|
#only add devices which have a presence in sysfs
|
||||||
|
echo $basedev >> $TMPDISKLIST
|
||||||
|
fi
|
||||||
case " $handleddevices " in
|
case " $handleddevices " in
|
||||||
*" $device "*)
|
*" $device "*)
|
||||||
continue ;;
|
continue ;;
|
||||||
*) handleddevices="$handleddevices $device" ;;
|
*) handleddevices="$handleddevices $device" ;;
|
||||||
esac
|
esac
|
||||||
if [[ "$device" == "md[0-9]+" ]]; then
|
echo $device | grep -q "md[0-9]\+"
|
||||||
|
if [ $? == 0 ]; then
|
||||||
vecho "Found RAID component $device"
|
vecho "Found RAID component $device"
|
||||||
handleraid "$device"
|
handleraid "$device"
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
vecho "Looking for driver for device $device"
|
|
||||||
device=`echo $device | sed 's/\//\!/g'`
|
device=`echo $device | sed 's/\//\!/g'`
|
||||||
pushd $(readlink /sys/class/block/$device ) >/dev/null 2>&1 || return
|
sysfs=$(findone -L /sys/block -maxdepth 2 -type d -name $device)
|
||||||
|
[ -z "$sysfs" ] && return
|
||||||
|
pushd $sysfs >/dev/null 2>&1
|
||||||
findstoragedriverinsys
|
findstoragedriverinsys
|
||||||
popd >/dev/null 2>&1
|
popd >/dev/null 2>&1
|
||||||
done
|
done
|
||||||
@ -331,6 +442,7 @@ findnetdriver() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
handleraid() {
|
handleraid() {
|
||||||
|
echo IN HANDLERAID
|
||||||
local start=0
|
local start=0
|
||||||
|
|
||||||
if [ -n "$noraid" -o ! -f /proc/mdstat ]; then
|
if [ -n "$noraid" -o ! -f /proc/mdstat ]; then
|
||||||
@ -389,7 +501,6 @@ handlelvordev() {
|
|||||||
else
|
else
|
||||||
devname=$device
|
devname=$device
|
||||||
fi
|
fi
|
||||||
echo $devname | sed -e's/\/dev\///' -e's/[0-9]\+//' >> $TMPDISKLIST
|
|
||||||
findstoragedriver ${device##/dev/}
|
findstoragedriver ${device##/dev/}
|
||||||
done
|
done
|
||||||
;;
|
;;
|
||||||
@ -404,7 +515,6 @@ handlelvordev() {
|
|||||||
devname=$1
|
devname=$1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo $devname | sed -e's/\/dev\///' -e's/[0-9]\+//' >> $TMPDISKLIST
|
|
||||||
findstoragedriver ${1##/dev/}
|
findstoragedriver ${1##/dev/}
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@ -785,13 +895,15 @@ if [ -n "$testdm" ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if [ -x /sbin/dmraid -a -z "$nodmraid" ]; then
|
if [ -x /sbin/dmraid -a -z "$nodmraid" ]; then
|
||||||
for raid in $(/sbin/dmraid -s -craidname 2>/dev/null | grep -vi "no raid disks" ) ; do
|
NOBLK=`/sbin/dmraid -s -craidname 2>/dev/null | grep "no block devices"`
|
||||||
dmname=$(resolve_dm_name $raid)
|
NORAD=`/sbin/dmraid -s -craidname 2>/dev/null | grep "no raid disks"`
|
||||||
if [ -n "$dmname" ]; then
|
if [ -z "$NOBLK" ] && [ -z "$NORAD" ]
|
||||||
DMRAIDS="$DMRAIDS $dmname"
|
then
|
||||||
fi
|
for raid in $(/sbin/dmraid -s -craidname 2>/dev/null) ; do
|
||||||
|
DMRAIDS="$DMRAIDS $raid"
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for n in $basicmodules; do
|
for n in $basicmodules; do
|
||||||
@ -858,6 +970,21 @@ if [ -z "$MNTIMAGE" -o -z "$IMAGE" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# Just get all the modules that are currently loaded
|
||||||
|
# We're likely to need them
|
||||||
|
for i in `lsmod | tail --lines=+2 | awk '{print $1}'`
|
||||||
|
do
|
||||||
|
findmodule -$i skip
|
||||||
|
echo $MODULES | grep -q $i
|
||||||
|
if [ $? -ne 0 ]
|
||||||
|
then
|
||||||
|
ALTERNATE=`echo $i | sed -e's/_/-/g'`
|
||||||
|
findmodule $ALTERNATE skip
|
||||||
|
fi
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
#START BUILDING INITRD HERE
|
#START BUILDING INITRD HERE
|
||||||
mkdir -p $MNTIMAGE
|
mkdir -p $MNTIMAGE
|
||||||
mkdir -p $MNTIMAGE/lib
|
mkdir -p $MNTIMAGE/lib
|
||||||
@ -880,7 +1007,6 @@ ln -s bin $MNTIMAGE/sbin
|
|||||||
|
|
||||||
if [ -n "$KDUMP_CONFIG_FILE" ]; then
|
if [ -n "$KDUMP_CONFIG_FILE" ]; then
|
||||||
while read config_opt config_val; do
|
while read config_opt config_val; do
|
||||||
|
|
||||||
case "$config_opt" in
|
case "$config_opt" in
|
||||||
net)
|
net)
|
||||||
#grab remote host and xlate into numbers
|
#grab remote host and xlate into numbers
|
||||||
@ -981,6 +1107,11 @@ if [ -n "$KDUMP_CONFIG_FILE" ]; then
|
|||||||
extra_modules)
|
extra_modules)
|
||||||
extra_kdump_mods="$extra_kdump_mods $config_val"
|
extra_kdump_mods="$extra_kdump_mods $config_val"
|
||||||
;;
|
;;
|
||||||
|
blacklist)
|
||||||
|
blacklist_mods="$blacklist_mods $config_val"
|
||||||
|
;;
|
||||||
|
options)
|
||||||
|
;;
|
||||||
default)
|
default)
|
||||||
DEFAULT_ACTION=$config_val
|
DEFAULT_ACTION=$config_val
|
||||||
case $DEFAULT_ACTION in
|
case $DEFAULT_ACTION in
|
||||||
@ -990,18 +1121,35 @@ if [ -n "$KDUMP_CONFIG_FILE" ]; then
|
|||||||
halt)
|
halt)
|
||||||
FINAL_ACTION="halt -f"
|
FINAL_ACTION="halt -f"
|
||||||
;;
|
;;
|
||||||
|
poweroff)
|
||||||
|
FINAL_ACTION="poweroff -f"
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
disk_timeout)
|
disk_timeout)
|
||||||
DISK_TIMEOUT=$config_val
|
DISK_TIMEOUT=$config_val
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
IS_COMMENT=`echo $config_opt | grep ^#.*$`
|
IS_COMMENT=`echo $config_opt | grep "^#.*$"`
|
||||||
if [ -n "$IS_COMMENT" -o -z "$config_val" ]
|
if [ -n "$IS_COMMENT" -o -z "$config_opt" ]
|
||||||
then
|
then
|
||||||
#don't process comments or blank line
|
#don't process comments or blank line
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
let grep_rc=0
|
||||||
|
echo $config_opt | grep -q "ext[234]"
|
||||||
|
ga_rc=$?
|
||||||
|
echo $config_opt | grep -q "minix"
|
||||||
|
gb_rc=$?
|
||||||
|
echo $config_opt | grep -q "xfs"
|
||||||
|
gc_rc=$?
|
||||||
|
echo $config_opt | grep -q "btrfs"
|
||||||
|
gd_rc=$?
|
||||||
|
if [ $ga_rc -ne 0 -a $gb_rc -ne 0 -a $gc_rc -ne 0 -a $gd_rc -ne 0 ]
|
||||||
|
then
|
||||||
|
echo "Unknown parameter " $config_opt
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
USING_METHOD="filesystem"
|
USING_METHOD="filesystem"
|
||||||
if (echo $config_val | egrep -q "^(LABEL|UUID)="); then
|
if (echo $config_val | egrep -q "^(LABEL|UUID)="); then
|
||||||
config_val=$(findfs $config_val)
|
config_val=$(findfs $config_val)
|
||||||
@ -1068,6 +1216,14 @@ for n in $extra_kdump_mods; do
|
|||||||
findmodule $n
|
findmodule $n
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# After we get all the modules, lets depsolve the list
|
||||||
|
# so that we load them in proper order
|
||||||
|
depsolve_modlist
|
||||||
|
|
||||||
|
for n in $blacklist_mods; do
|
||||||
|
do_blacklist $n
|
||||||
|
done
|
||||||
|
|
||||||
if [ -z "$FINAL_ACTION" ]; then
|
if [ -z "$FINAL_ACTION" ]; then
|
||||||
FINAL_ACTION="reboot -f"
|
FINAL_ACTION="reboot -f"
|
||||||
else
|
else
|
||||||
@ -1100,8 +1256,15 @@ then
|
|||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# we need the fstab file so that we can fsck properly
|
||||||
|
cp /etc/fstab $MNTIMAGE/etc/fstab
|
||||||
|
bin="$bin /sbin/fsck.ext2 /sbin/fsck.ext3 /sbin/fsck.ext4"
|
||||||
|
|
||||||
#this provides us with a list of disks that we need to make sure we have available before we capture our core
|
#this provides us with a list of disks that we need to make sure we have available before we capture our core
|
||||||
mv $TMPDISKLIST $MNTIMAGE/etc/critical_disks
|
# don't block on cciss or md devices, parsing them in sysfs takes a special case and they are there
|
||||||
|
# as soon as the driver loads
|
||||||
|
egrep -v '(^cciss|^md)' $TMPDISKLIST > $MNTIMAGE/etc/critical_disks
|
||||||
|
rm -f $TMPDISKLIST
|
||||||
|
|
||||||
#THIS IS WHERE WE GENERATE OUR ADDITINONAL UTILITIES
|
#THIS IS WHERE WE GENERATE OUR ADDITINONAL UTILITIES
|
||||||
#Busybox doesn't have a /bin/sh applet,
|
#Busybox doesn't have a /bin/sh applet,
|
||||||
@ -1426,6 +1589,34 @@ done
|
|||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
cat >> $SCRIPTDIR/handle_event <<EOF
|
||||||
|
#!/bin/msh
|
||||||
|
|
||||||
|
FIRMWARE_DIRS="/lib/firmware"
|
||||||
|
|
||||||
|
if [ "\$ACTION" != "add" ]
|
||||||
|
then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "\$SUBSYSTEM" != "firmware" ]
|
||||||
|
then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
for DIR in \$FIRMWARE_DIRS; do
|
||||||
|
if [ ! -f \$DIR/\$FIRMWARE ]
|
||||||
|
then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
echo 1 > /sys\$DEVPATH/loading
|
||||||
|
cat "\$DIR/\$FIRMWARE" > /sys\$DEVPATH/data
|
||||||
|
echo 0 > /sys\$DEVPATH/loading
|
||||||
|
exit 0
|
||||||
|
done
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
#DONT ADD STUFF to SCRIPTDIR PAST HERE
|
#DONT ADD STUFF to SCRIPTDIR PAST HERE
|
||||||
for i in `ls $SCRIPTDIR/*`
|
for i in `ls $SCRIPTDIR/*`
|
||||||
do
|
do
|
||||||
@ -1469,7 +1660,6 @@ done
|
|||||||
mknod $MNTIMAGE/dev/tty c 5 0
|
mknod $MNTIMAGE/dev/tty c 5 0
|
||||||
mknod $MNTIMAGE/dev/console c 5 1
|
mknod $MNTIMAGE/dev/console c 5 1
|
||||||
mknod $MNTIMAGE/dev/ptmx c 5 2
|
mknod $MNTIMAGE/dev/ptmx c 5 2
|
||||||
mknod $MNTIMAGE/dev/rtc c 10 135
|
|
||||||
if [ "$(uname -m)" == "ia64" ]; then
|
if [ "$(uname -m)" == "ia64" ]; then
|
||||||
mknod $MNTIMAGE/dev/efirtc c 10 136
|
mknod $MNTIMAGE/dev/efirtc c 10 136
|
||||||
fi
|
fi
|
||||||
@ -1484,6 +1674,10 @@ if [ -n "$vg_list" ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Firmware, we need to suck it all in, just in case...
|
||||||
|
mkdir -p $MNTIMAGE/lib/firmware
|
||||||
|
cp -r /lib/firmware/* $MNTIMAGE/lib/firmware/
|
||||||
|
|
||||||
echo -n >| $RCFILE
|
echo -n >| $RCFILE
|
||||||
cat >> $MNTIMAGE/init << EOF
|
cat >> $MNTIMAGE/init << EOF
|
||||||
#!/bin/msh
|
#!/bin/msh
|
||||||
@ -1492,6 +1686,7 @@ mount -t proc /proc /proc
|
|||||||
echo Mounting proc filesystem
|
echo Mounting proc filesystem
|
||||||
echo Mounting sysfs filesystem
|
echo Mounting sysfs filesystem
|
||||||
mount -t sysfs /sys /sys
|
mount -t sysfs /sys /sys
|
||||||
|
echo "/scriptfns/handle_event" > /sys/kernel/uevent_helper
|
||||||
echo 1 > /proc/sys/vm/dirty_background_ratio
|
echo 1 > /proc/sys/vm/dirty_background_ratio
|
||||||
echo 5 > /proc/sys/vm/dirty_ratio
|
echo 5 > /proc/sys/vm/dirty_ratio
|
||||||
echo 10 > /proc/sys/vm/dirty_writeback_centisecs
|
echo 10 > /proc/sys/vm/dirty_writeback_centisecs
|
||||||
@ -1509,7 +1704,7 @@ mknod /dev/systty c 4 0
|
|||||||
mknod /dev/tty c 5 0
|
mknod /dev/tty c 5 0
|
||||||
mknod /dev/console c 5 1
|
mknod /dev/console c 5 1
|
||||||
mknod /dev/ptmx c 5 2
|
mknod /dev/ptmx c 5 2
|
||||||
mknod /dev/rtc c 10 135
|
mknod /dev/rtc c 254 0
|
||||||
mknod /dev/urandom c 1 9
|
mknod /dev/urandom c 1 9
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
@ -1530,6 +1725,13 @@ for MODULE in $MODULES; do
|
|||||||
fullmodule=`echo $MODULE | sed "s|.*/||"`
|
fullmodule=`echo $MODULE | sed "s|.*/||"`
|
||||||
|
|
||||||
options=`sed -n -e "s/^options[ ][ ]*$module[ ][ ]*//p" $modulefile 2>/dev/null`
|
options=`sed -n -e "s/^options[ ][ ]*$module[ ][ ]*//p" $modulefile 2>/dev/null`
|
||||||
|
options2=`sed -n -e "s/^options[ ][ ]*$module[ ][ ]*//p" $KDUMP_CONFIG_FILE 2>/dev/null`
|
||||||
|
|
||||||
|
# Overwrite options if option is specified in kdump.conf
|
||||||
|
if [ -n "$options2" ]; then
|
||||||
|
options=$options2
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
if [ -n "$options" ]; then
|
if [ -n "$options" ]; then
|
||||||
vecho "Adding module $module$text with options $options"
|
vecho "Adding module $module$text with options $options"
|
||||||
@ -1661,10 +1863,10 @@ if [ -n "$vg_list" ]; then
|
|||||||
emit "echo Activating logical volumes"
|
emit "echo Activating logical volumes"
|
||||||
emit "lvm vgchange -a y --ignorelockingfailure"
|
emit "lvm vgchange -a y --ignorelockingfailure"
|
||||||
emit "DM_NUM=0"
|
emit "DM_NUM=0"
|
||||||
emit "lvm lvs --noheadings -o lv_name,vg_name | while read i"
|
emit "for i in \`lvm lvs --noheadings -o lv_name,vg_name | sed -e's/ \\+/:/g'\`"
|
||||||
emit "do"
|
emit "do"
|
||||||
emit " LV=\`echo \$i | awk '{ print \$1 }'\`"
|
emit " LV=\`echo \$i | awk -F\":\" '{ print \$2 }'\`"
|
||||||
emit " VGRP=\`echo \$i | awk '{ print \$2 }'\`"
|
emit " VGRP=\`echo \$i | awk -F\":\" '{ print \$3 }'\`"
|
||||||
emit " mkdir -p /dev/\$VGRP"
|
emit " mkdir -p /dev/\$VGRP"
|
||||||
emit " if [ ! -e /dev/\$VGRP/\$LV ]"
|
emit " if [ ! -e /dev/\$VGRP/\$LV ]"
|
||||||
emit " then"
|
emit " then"
|
||||||
@ -1672,7 +1874,7 @@ if [ -n "$vg_list" ]; then
|
|||||||
emit " DM_NUM=\`echo \$DM_NUM 1 + p | dc\`"
|
emit " DM_NUM=\`echo \$DM_NUM 1 + p | dc\`"
|
||||||
emit " if [ -z \"\$noresume\" ]"
|
emit " if [ -z \"\$noresume\" ]"
|
||||||
emit " then"
|
emit " then"
|
||||||
emit " /sbin/dmsetup resume /dev/mapper/\$VGRP-\$LV"
|
emit " /sbin/dmsetup.static resume /dev/mapper/\$VGRP-\$LV"
|
||||||
emit " fi"
|
emit " fi"
|
||||||
emit " fi"
|
emit " fi"
|
||||||
emit "done"
|
emit "done"
|
||||||
@ -1756,6 +1958,7 @@ if [ -n "$KDUMP_CONFIG_FILE" ]; then
|
|||||||
emit "then"
|
emit "then"
|
||||||
emit " echo -e \"\\\033[0JSaving core complete\""
|
emit " echo -e \"\\\033[0JSaving core complete\""
|
||||||
emit "fi"
|
emit "fi"
|
||||||
|
emit "sync"
|
||||||
if [ -x "$KDUMP_POST" ]; then
|
if [ -x "$KDUMP_POST" ]; then
|
||||||
emit "$KDUMP_POST \$exitcode"
|
emit "$KDUMP_POST \$exitcode"
|
||||||
fi
|
fi
|
||||||
@ -1960,6 +2163,10 @@ if [ -n "$KDUMP_CONFIG_FILE" ]; then
|
|||||||
;;
|
;;
|
||||||
disk_timeout)
|
disk_timeout)
|
||||||
;;
|
;;
|
||||||
|
blacklist)
|
||||||
|
;;
|
||||||
|
options)
|
||||||
|
;;
|
||||||
default)
|
default)
|
||||||
;;
|
;;
|
||||||
link_delay)
|
link_delay)
|
||||||
@ -2013,7 +2220,7 @@ if [ -n "$KDUMP_CONFIG_FILE" ]; then
|
|||||||
emit "then"
|
emit "then"
|
||||||
emit " DUMPDEV=\`findfs \$DUMPDEV\`"
|
emit " DUMPDEV=\`findfs \$DUMPDEV\`"
|
||||||
emit "fi"
|
emit "fi"
|
||||||
emit "fsck.$config_opt \$DUMPDEV"
|
emit "fsck.$config_opt -y \$DUMPDEV"
|
||||||
emit "mount -t $config_opt \$DUMPDEV /mnt"
|
emit "mount -t $config_opt \$DUMPDEV /mnt"
|
||||||
emit "if [ \$? == 0 ]"
|
emit "if [ \$? == 0 ]"
|
||||||
emit "then"
|
emit "then"
|
||||||
@ -2030,6 +2237,7 @@ if [ -n "$KDUMP_CONFIG_FILE" ]; then
|
|||||||
emit " mv \$VMCORE-incomplete \$VMCORE"
|
emit " mv \$VMCORE-incomplete \$VMCORE"
|
||||||
emit " echo -e \"\\\033[0JSaving core complete\""
|
emit " echo -e \"\\\033[0JSaving core complete\""
|
||||||
emit " fi"
|
emit " fi"
|
||||||
|
emit " sync"
|
||||||
if [ -x "$KDUMP_POST" ]; then
|
if [ -x "$KDUMP_POST" ]; then
|
||||||
emit " $KDUMP_POST \$exitcode"
|
emit " $KDUMP_POST \$exitcode"
|
||||||
fi
|
fi
|
||||||
@ -2048,7 +2256,7 @@ if [ -n "$KDUMP_CONFIG_FILE" ]; then
|
|||||||
emit "/bin/msh"
|
emit "/bin/msh"
|
||||||
fi
|
fi
|
||||||
case $DEFAULT_ACTION in
|
case $DEFAULT_ACTION in
|
||||||
reboot|halt|shell)
|
reboot|halt|poweroff|shell)
|
||||||
emit "$FINAL_ACTION"
|
emit "$FINAL_ACTION"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@ -2099,7 +2307,7 @@ emit " ROOTDEV=/dev/rootdev"
|
|||||||
emit "fi"
|
emit "fi"
|
||||||
|
|
||||||
emit "echo Checking root filesystem."
|
emit "echo Checking root filesystem."
|
||||||
emit "fsck \$ROOTDEV"
|
emit "fsck -y \$ROOTDEV"
|
||||||
emit "echo Mounting root filesystem: mount -t $rootfs \$ROOTDEV /sysroot"
|
emit "echo Mounting root filesystem: mount -t $rootfs \$ROOTDEV /sysroot"
|
||||||
emit "mount -t $rootfs \$ROOTDEV /sysroot >/dev/null 2>&1 "
|
emit "mount -t $rootfs \$ROOTDEV /sysroot >/dev/null 2>&1 "
|
||||||
emit "if [ \$? != 0 ]"
|
emit "if [ \$? != 0 ]"
|
||||||
@ -2114,6 +2322,16 @@ emit "mount -t proc proc /sysroot/proc"
|
|||||||
emit "umount /sys"
|
emit "umount /sys"
|
||||||
emit "mount -t sysfs sysfs /sysroot/sys"
|
emit "mount -t sysfs sysfs /sysroot/sys"
|
||||||
emit "mount -o bind /dev /sysroot/dev"
|
emit "mount -o bind /dev /sysroot/dev"
|
||||||
|
|
||||||
|
if [ -f $MNTIMAGE/etc/blacklist-kdump.conf ] ; then
|
||||||
|
emit "tdir=\`mktemp -d\`"
|
||||||
|
emit "mkdir -p \$tdir"
|
||||||
|
emit "cp -r /sysroot/etc/modprobe.d/* \$tdir/"
|
||||||
|
emit "mount -t ramfs ramfs /sysroot/etc/modprobe.d"
|
||||||
|
emit "cp -r \$tdir/* /sysroot/etc/modprobe.d/"
|
||||||
|
emit "cp /etc/blacklist-kdump.conf /sysroot/etc/modprobe.d/"
|
||||||
|
fi
|
||||||
|
|
||||||
emit "touch /sysroot/fastboot"
|
emit "touch /sysroot/fastboot"
|
||||||
emit "echo Switching to new root and running init."
|
emit "echo Switching to new root and running init."
|
||||||
emit "exec switch_root /sysroot /sbin/init"
|
emit "exec switch_root /sysroot /sbin/init"
|
||||||
@ -2122,7 +2340,7 @@ emit "exec switch_root /sysroot /sbin/init"
|
|||||||
|
|
||||||
chmod +x $RCFILE
|
chmod +x $RCFILE
|
||||||
|
|
||||||
(cd $MNTIMAGE; findall . | cpio --quiet -c -o) >| $IMAGE || exit 1
|
(cd $MNTIMAGE; find | cpio --quiet -c -o) >| $IMAGE || exit 1
|
||||||
|
|
||||||
if [ -n "$compress" ]; then
|
if [ -n "$compress" ]; then
|
||||||
gzip -9 < $IMAGE >| $target || rc=1
|
gzip -9 < $IMAGE >| $target || rc=1
|
||||||
|
4
sources
4
sources
@ -1,4 +1,4 @@
|
|||||||
|
9a5f7a5781bd9c357badb0ade0896842 dracut-files.tbz2
|
||||||
d9f2ecd3c3307905f24130a25816e6cc kexec-tools-2.0.0.tar.bz2
|
d9f2ecd3c3307905f24130a25816e6cc kexec-tools-2.0.0.tar.bz2
|
||||||
3e802d638dce0080b910f15908c04a24 kexec-tools-po.tar.gz
|
3e802d638dce0080b910f15908c04a24 kexec-tools-po.tar.gz
|
||||||
190f8878aa7e7b63a96fde5d59538eec makedumpfile-1.3.3.tar.gz
|
e3a813bd6d7dace903a05c1296e20d57 makedumpfile-1.3.5.tar.gz
|
||||||
9a5f7a5781bd9c357badb0ade0896842 dracut-files.tbz2
|
|
||||||
|
Loading…
Reference in New Issue
Block a user