crash: remove temporary dump files during booting 82/54882/2
authorTaeyoung Kim <ty317.kim@samsung.com>
Fri, 18 Dec 2015 10:48:29 +0000 (19:48 +0900)
committerKwon <k_c.kwon@samsung.com>
Mon, 21 Dec 2015 01:05:38 +0000 (17:05 -0800)
- If power is turned off during making coredump file,
  temporary dump files are stored in /var/lib/systemd/coredump.
  The dump files cannot be used and their sizes are very large.
  Thus they are removed from the path during booting.

- After reboot, previous coredummps are not necessary,
  and coredumpctl is not working for them since there is
  no information in journal. Thus they are removed form the
  path during booting.

Change-Id: I6765da9474f4668d13a4563950b274b0871dcffb
Signed-off-by: Taeyoung Kim <ty317.kim@samsung.com>
packaging/crash-worker.spec
src/crash-manager/CMakeLists.txt
src/crash-manager/crash-init.service.in [new file with mode: 0644]
src/crash-manager/crash-init.sh.in [new file with mode: 0644]

index 8888c25f1f8e3d66be19952297c59f659e52a589..2e0ac57d6888d149070fd7b53ea1b50101ea34d2 100644 (file)
@@ -32,6 +32,7 @@ export CFLAGS+=" -Werror"
 %cmake . \
           -DCMAKE_INSTALL_PREFIX=%{_prefix} \
           -DTZ_SYS_BIN=%{TZ_SYS_BIN} \
+          -DUNIT_DIR=%{_unitdir} \
           -DCRASH_PATH=%{crash_path}
 make %{?jobs:-j%jobs}
 
@@ -41,6 +42,8 @@ rm -rf %{buildroot}
 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
@@ -49,4 +52,7 @@ mkdir -p %{buildroot}%{crash_path}
 %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
index a775998f744b4bcf27e695a01e6e6913bb3d89c3..04451b0101999bcacb2abe8af99065b61c835139 100644 (file)
@@ -1,9 +1,12 @@
 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}
@@ -13,3 +16,13 @@ INSTALL(FILES ${CMAKE_SOURCE_DIR}/src/${CRASH_MANAGER}/${CRASH_MANAGER}.sh
 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)
diff --git a/src/crash-manager/crash-init.service.in b/src/crash-manager/crash-init.service.in
new file mode 100644 (file)
index 0000000..866c22d
--- /dev/null
@@ -0,0 +1,11 @@
+[Unit]
+Description=Crash init
+DefaultDependencies=no
+Before=sysinit.target
+
+[Service]
+Type=normal
+ExecStart=@TZ_SYS_BIN@/@CRASH_INIT@.sh
+
+[Install]
+WantedBy=sysinit.target
diff --git a/src/crash-manager/crash-init.sh.in b/src/crash-manager/crash-init.sh.in
new file mode 100644 (file)
index 0000000..80b94d9
--- /dev/null
@@ -0,0 +1,37 @@
+#!/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