diff options
| author | linxin <[email protected]> | 2023-05-22 18:52:59 +0800 |
|---|---|---|
| committer | linxin <[email protected]> | 2023-05-22 18:52:59 +0800 |
| commit | 92774597eb5849bb62fb88732939c5cf5a1738ae (patch) | |
| tree | c479ae629309c1db26973f8edefc7ab139e7f78e | |
| parent | b60f3669d967a5c999fd415fb1a424e6a24338af (diff) | |
修改脚本制作.so动态库
| -rw-r--r-- | ci/travis.sh | 4 | ||||
| -rw-r--r-- | coredump-handler/coredump-handler.go | 64 | ||||
| -rw-r--r-- | coredump-handler/coredump_handler_wrapper.h | 20 | ||||
| -rw-r--r-- | script/coredump.spec | 5 |
4 files changed, 55 insertions, 38 deletions
diff --git a/ci/travis.sh b/ci/travis.sh index c0b61d1..1de775d 100644 --- a/ci/travis.sh +++ b/ci/travis.sh @@ -43,6 +43,10 @@ go env pwd ls mkdir -p /builds/linxin/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} +cd /builds/linxin/coredump-tools/breakpad/src/tools/linux/coredump_handler_wrapper +make +mkdir /opt/tsg/coredump/bin +cp coredump_handler_wrapper.so /opt/tsg/coredump/bin mv /builds/linxin/coredump-tools /builds/linxin/coredump-tools-${VERSION_ID} tar --warning=no-file-changed -czvf /builds/linxin/rpmbuild/SOURCES/coredump-tools-${VERSION_ID}-${COMMIT_ID}.tar.gz ../coredump-tools-${VERSION_ID} cp /builds/linxin/coredump-tools-${VERSION_ID}/script/coredump.spec /builds/linxin/rpmbuild/SPECS diff --git a/coredump-handler/coredump-handler.go b/coredump-handler/coredump-handler.go index c30a7d8..554980d 100644 --- a/coredump-handler/coredump-handler.go +++ b/coredump-handler/coredump-handler.go @@ -1,5 +1,11 @@ package main +//#cgo CXXFLAGS: -std=c++11 +// #cgo CFLAGS: -I . +// #cgo LDFLAGS: /opt/tsg/coredump/bin/coredump_handler_wrapper.so +//#include "coredump_handler_wrapper.h" +import "C" + import ( "archive/zip" "context" @@ -12,7 +18,6 @@ import ( "io" "math" "os" - "os/exec" "regexp" "strconv" "strings" @@ -163,54 +168,43 @@ func writeCoreDumpToFile(config types.Coredump_config) error { } defer file.Close() buf := make([]byte, 1024*1024) - data := make([]byte, 1024*1024) - // create a pipe to write file - reader, writer := io.Pipe() - go func() { - defer writer.Close() - // io.Copy(writer, os.Stdin) - for { - // 从标准输入中读取数据块 - n, err := os.Stdin.Read(buf) - if err != nil { - journal.Print(journal.PriErr, err.Error()) - writer.Close() - return - } - // 将读取的数据块写入到管道中 - _, err = writer.Write(buf[:n]) - if err != nil { - journal.Print(journal.PriErr, err.Error()) - return - } - } - }() - for { - // 从管道中读取数据,直到管道被关闭 - _, err = io.CopyBuffer(file, reader, data) - if err != nil { - if err != io.EOF { - return err - } + n, err := os.Stdin.Read(buf) + if err != nil && err != io.EOF { + return err + } + if n == 0 { break } - _, err = file.Write(data) + _, err = file.Write(buf[:n]) if err != nil { return err } } return nil } +func HandleCrash(pid int, procfsDir string, mdFilename string) bool { + journal.Print(journal.PriInfo, "start convert to minidump") + return bool(C.HandleCrash(C.pid_t(pid), C.CString(procfsDir), C.CString(mdFilename))) +} func writeMiniDumpToFile(config types.Coredump_config) error { filename := fmt.Sprintf("%s/%s_%s_%d.minidump", config.Storage, config.Initial_ns_pid, config.Process_ns_pid, config.Timestamp) - cmd := exec.Command("/opt/tsg/coredump/bin/core_handler", config.Initial_ns_pid, filename) - cmd.Stdin = os.Stdin - output, err := cmd.Output() + pid, err := strconv.Atoi(config.Initial_ns_pid) if err != nil { return err } - fmt.Println(string(output)) + flag := HandleCrash(pid, "/proc/"+config.Initial_ns_pid, filename) + if !flag { + return errors.New("can not convert to minidump") + } + journal.Print(journal.PriInfo, "end convert to minidump") + // cmd := exec.Command("/opt/tsg/coredump/bin/core_handler", config.Initial_ns_pid, filename) + // cmd.Stdin = os.Stdin + // output, err := cmd.Output() + // if err != nil { + // return err + // } + // fmt.Println(string(output)) return nil } func compress(config types.Coredump_config) error { diff --git a/coredump-handler/coredump_handler_wrapper.h b/coredump-handler/coredump_handler_wrapper.h new file mode 100644 index 0000000..0983d58 --- /dev/null +++ b/coredump-handler/coredump_handler_wrapper.h @@ -0,0 +1,20 @@ +#ifndef CORE_HANDLER_H_ +#define CORE_HANDLER_H_ + +#include <pwd.h> +#include <stdio.h> +#include <stdlib.h> +#include <sys/mman.h> +#include <sys/types.h> +#include <syslog.h> +#include <unistd.h> + +#ifdef __cplusplus +extern "C" { +#endif +_Bool HandleCrash(pid_t pid, const char* procfs_dir, const char* md_filename); +#ifdef __cplusplus +} +#endif + +#endif // CORE_HANDLER_H_ diff --git a/script/coredump.spec b/script/coredump.spec index c3d5837..39f9dfe 100644 --- a/script/coredump.spec +++ b/script/coredump.spec @@ -31,9 +31,8 @@ mkdir -p %{buildroot}/opt/tsg/coredump/etc mkdir -p %{buildroot}/etc/profile.d mkdir -p %{buildroot}/usr/lib/tmpfiles.d mkdir -p %{buildroot}/usr/lib/sysctl.d +cp /builds/linxin/coredump-tools/breakpad/src/tools/linux/coredump_handler_wrapper/coredump_handler_wrapper.so %{buildroot}/opt/tsg/coredump/bin cp ./coredump-handler/coredump-handler %{buildroot}/opt/tsg/coredump/bin -chmod +x ./coredump-handler/core_handler -cp ./coredump-handler/core_handler %{buildroot}/opt/tsg/coredump/bin cp ./config/config.json %{buildroot}/opt/tsg/coredump/etc cp ./coredump-tool/coredump-tool %{buildroot}/opt/tsg/coredump/bin cp ./script/coredump-tools.sh %{buildroot}/etc/profile.d @@ -44,7 +43,7 @@ cp ./60-coredump.conf %{buildroot}/usr/lib/sysctl.d /opt/tsg/coredump/etc/config.json /opt/tsg/coredump/bin/coredump-handler /opt/tsg/coredump/bin/coredump-tool -/opt/tsg/coredump/bin/core_handler +/opt/tsg/coredump/bin/coredump_handler_wrapper.so /etc/profile.d/coredump-tools.sh /usr/lib/tmpfiles.d/coredump.conf /usr/lib/sysctl.d/60-coredump.conf |
