%cmake . \
-DCMAKE_INSTALL_PREFIX=%{_prefix} \
-DTZ_SYS_BIN=%{TZ_SYS_BIN} \
+ -DUNIT_DIR=%{_unitdir} \
-DCRASH_PATH=%{crash_path}
make %{?jobs:-j%jobs}
mkdir -p %{buildroot}%{crash_root_path}
mkdir -p %{buildroot}%{crash_path}
+%install_service sysinit.target.wants crash-init.service
+
%files
%license LICENSE
%manifest crash-worker.manifest
%dir %{crash_path}
%attr(0755,system,system) %{_bindir}/dump_systemstate
%{_bindir}/crash-manager.sh
+%{_bindir}/crash-init.sh
%{_prefix}/lib/sysctl.d/99-crash-manager.conf
+%{_unitdir}/crash-init.service
+%{_unitdir}/sysinit.target.wants/crash-init.service
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
SET(CRASH_MANAGER "crash-manager")
+SET(CRASH_INIT "crash-init")
CONFIGURE_FILE(${CRASH_MANAGER}.sh.in ${CRASH_MANAGER}.sh @ONLY)
CONFIGURE_FILE(99-${CRASH_MANAGER}.conf.in 99-${CRASH_MANAGER}.conf @ONLY)
+CONFIGURE_FILE(${CRASH_INIT}.service.in ${CRASH_INIT}.service @ONLY)
+CONFIGURE_FILE(${CRASH_INIT}.sh.in ${CRASH_INIT}.sh @ONLY)
INSTALL(FILES ${CMAKE_SOURCE_DIR}/src/${CRASH_MANAGER}/${CRASH_MANAGER}.sh
DESTINATION ${TZ_SYS_BIN}
INSTALL(FILES ${CMAKE_SOURCE_DIR}/src/${CRASH_MANAGER}/99-${CRASH_MANAGER}.conf
DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/sysctl.d
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
+
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/src/${CRASH_MANAGER}/${CRASH_INIT}.service
+ DESTINATION ${UNIT_DIR}
+ PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
+ GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
+
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/src/${CRASH_MANAGER}/${CRASH_INIT}.sh
+ DESTINATION ${TZ_SYS_BIN}
+ PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
+ GROUP_READ GROUP_EXECUTE WORLD_READ)
--- /dev/null
+[Unit]
+Description=Crash init
+DefaultDependencies=no
+Before=sysinit.target
+
+[Service]
+Type=normal
+ExecStart=@TZ_SYS_BIN@/@CRASH_INIT@.sh
+
+[Install]
+WantedBy=sysinit.target
--- /dev/null
+#!/bin/sh
+
+id=""
+
+if [ -e "/proc/sys/kernel/random/boot_id" ]
+then
+ read line< /proc/sys/kernel/random/boot_id
+ id=`echo ${line} | sed -e 's/-//g'`
+fi
+
+if [ -d "/var/lib/systemd/coredump" ]
+then
+ cd /var/lib/systemd/coredump
+
+#remove temporary dump files
+ if [ -e ".#core.*" ]
+ then
+ for i in `ls -a .#core.*`
+ do
+ rm -f "$i"
+ done
+ fi
+
+ for i in `ls -a`
+ do
+ if [ -d $i ]
+ then
+ continue
+ fi
+
+#remove dump files if boot id is different
+ if [ $i != *.$id.* ]
+ then
+ rm -f "$i"
+ fi
+ done
+fi