반응형

Docker container 내에서 GUi를 사용하기

Host의 XServer를 컨테이너와 공유해서 Container 내에서 GUI를 사용하는 방법.
X11 Forwarding을 사용하거나, Display를 통해서 사용 가능
다만 Forwarding을 하거나 Display에 대한 DISPLAY 환경 변수를 미리 정의를 하고 생성해야됨.

Host에서 Docker와 xserver 통신 설정

$ xhost +local:docker

Docker run parameter

 --volume /tmp/.X11-unix:/tmp/.X11-unix:ro -e DISPLAY=unix$DISPLAY

혹시 안될 경우

 --volume /tmp/.X11-unix:/tmp/.X11-unix:ro -e DISPLAY=$DISPLAY

혹시 안될 경우

 --volume /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY
반응형
반응형

Plugin 개발 할 때에 Memory Leak에 대해서 확인해보기 위해서 valgrind를 붙여보았는데, valgrind를 붙이면 launcher가 정상 동작 하지 않는다. 원인을 찾을 수 없어서 GStreamer에서 Memory leak에 대한 수단을 제공하지 않을까 해서 찾아보니 아래와 같이 Debugging을 할 수 있는 방법이 있다.

GST_DEBUG="GST_TRACER:7" GST_TRACERS="leaks" 

위와 같이 환경변수를 설정하고 동작시에 아래와 같이 종료 이후로 남아있는 메모리에 대해서 추적해준다.

0:00:33.676884568  6771 0x556451e88840 TRACE             GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)0x7f835dc012c0, description=(string)buffer: 0x7f835dc012c0, pts 0:00:45.833522174, dts 99:99:99.999999999, dur 0:00:00.100000000, size 2764800, offset 458, offset_end 459, flags 0x0, ref-count=(uint)1, trace=(string);
0:00:33.676887333  6771 0x556451e88840 TRACE             GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)0x7f834738a700, description=(string)buffer: 0x7f834738a700, pts 99:99:99.999999999, dts 99:99:99.999999999, dur 99:99:99.999999999, size 2764800, offset none, offset_end none, flags 0x0, ref-count=(uint)1, trace=(string);
0:00:33.676890357  6771 0x556451e88840 TRACE             GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)0x7f86d44efe20, description=(string)buffer: 0x7f86d44efe20, pts 0:00:53.533522174, dts 99:99:99.999999999, dur 0:00:00.100000000, size 2764800, offset 535, offset_end 536, flags 0x0, ref-count=(uint)1, trace=(string);

Typename과 Address, ref-count 등을 남겨준다.
다만 이 메모리가 어떤것인지 자세히 나오지 않아서 이 방법에 대해서도 검토가 필요할 것 같다.

반응형
반응형
  1. CMakeLists.txt에 아래와 같이 FLAG를 추가해준다.
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
set(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -fsanitize=address")
  1. 실행시 환경 변수값을 포함하여 실행해준다.

    LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libasan.so.5 {EXECUTABLE BINARY}
  2. expor를 하는 방법도 있다.
    하지만 추천하지 않는다. 커맨드도 sanitizer에 물려서 제대로 실행이 안된다;

    $ export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libasan.so.5
반응형
반응형

EOG

원격 서버에서 개발/테스트를 진행할때에 Dump Image를 보기 위해서는 모니터를 연결하거나 파일을 압축해서 가져와서 봐야 하는 귀찮음이 있는데, 이미지 뷰어를 사용하면 X.11 환경에서는 커맨드로 이용하기도 좋고 귀찮음이 덜하다.

EOG라는 프로그램이 있어서 찾아보니 대충 사용하기 용이하다.

EOG Homepage

https://manpages.ubuntu.com/manpages/trusty/man1/eog.1.html

How to install

$ sudo apt install eog

How to run

$ eog ${PATH or FILENAME}
반응형
반응형

User list

$ sudo ipmitool user list 
혹은
$ sudo ipmitool user list 1

위에서 빈 slot number를 이용하거나 추가하고자 하는 number로 id를 보통 추가한다.

User add

$ sudo ipmitool user set name <ID> <USERNAME>

User Password set

$ sudo ipmitool user set password <ID>
Password for user <ID> : 

위와 같이 User를 추가했을 때에 Web에서 접근을 할경우 로그인 오류가 발생한다.
이와 같을 경우 해당 User가 Enable되지 않았을 경우이므로 Enable 해준다.

User enable list 확인

$ sudo ipmitool user summary <CH>
Maximum IDs        : 16
Enabled User Count  : 0
Fixed Name Count    : 0

위에서 "Enabled User Count가 0일 경우 Enable이 되지 않은 상태로 Enable 시켜준다.

Added user ID enable

$ sudo ipmitool user enable <ID>

그 다음 웹에 접근할 경우 정상적으로 접근되는 것이 확인되었다.

반응형
반응형
반응형
반응형

Buffer의 VideoMetadata 출력 방법

static void print_video_meta_data_all(GstBuffer *buf) {
  GstVideoMeta *meta = gst_buffer_get_video_meta(buf);
  if (meta) {
    g_print("Video Meta:\n");
    g_print("  format: %s\n", gst_video_format_to_string(meta->format));
    g_print("  width: %d\n", meta->width);
    g_print("  height: %d\n", meta->height);
    g_print("  flags: %d\n", meta->flags);
    g_print("  n_planes: %d\n", meta->n_planes);
    for (guint i = 0; i < meta->n_planes; i++) {
      g_print("  stride[%d]: %d\n", i, meta->stride[i]);
      g_print("  offset[%d]: %d\n", i, meta->offset[i]);
    }
    g_print("  map: %p\n", meta->map);
    g_print("  unmap: %p\n", meta->unmap);
  }
}

Buffer의 Metadata Count 출력 및 Metadata의 Type 출력 방법

static void print_all_meta_info(GstBuffer *buf){
  GstVideoMeta *meta = gst_buffer_get_video_meta(buf);
  if (meta)
  {
    gst_print("Video Meta Count : %d\n", meta->n_planes);
  }
  GstMeta *m;
  gpointer state = NULL;
  guint meta_count = 0;
  while ((m = gst_buffer_iterate_meta(buf, &state))) {
    g_print("Metadata API type: %s\n", g_type_name(m->info->api));
    meta_count++;
  }
  g_print("Meta count: %d\n", meta_count);
}

Buffer의 모든 Metadata 중에 LOCK 상태인 Metadata 찾는 방법

static void find_lock_meta(GstBuffer *buffer) {
  GstMeta *meta;
  gpointer state = NULL;

  while ((meta = gst_buffer_iterate_meta(buffer, &state))) {
    if (GST_META_FLAG_IS_SET(meta, GST_META_FLAG_LOCKED)) {
      g_print("Found locked meta: %s\n", g_type_name(meta->info->api));
    }
  }
}
반응형

'개발, 웹, 블로그 > Linux 상식' 카테고리의 다른 글

Gstreamer Log Viewer  (0) 2024.01.25
[gdb] 환경변수 적용하여 gdb 돌리기  (0) 2024.01.11
[Git] LFS Cheat Sheet  (0) 2024.01.04
반응형

gdb binary

일반적으로 gdb를 사용하려면 단순히 gdb binary 이렇게 간단하게 사용한다.
가끔 특정 library를 환경 변수를 주어 실해아 하는 경우가 있는데, 이럴 경우에는 env binary 이렇게 사용하는데,
gdb env binary 아니면 env gdb binary 이렇게 해도 안된다.
환경 변수는 gdb 에서 아래와 같이 사용한다.

binary 실행 예제

현재 폴더의 lib 폴더를 library path로 잡고 실행 예제

$ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:./lib binary 

gdb 로 실행 방법

환경 변수 없이 gdb로 실행

$ gdb binary

환경 변수 설정

(gdb) set environment LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:./lib

Run

(gdb) run
반응형
반응형

Ubuntu에 LFS 설치하기

curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
sudo apt install git-lfs

Repository에 git lfs 적용

git lfs install

Repository에 git lfs 해제

git lfs uninstall

LFS 적용하기

git lfs rm --cached FILE
git lfs track FILE

git add FILE
git commit FILE -m "MESSAGE"
git push

LFS 관리 해제

git lfs untrack FILE

LFS 관리 완전 해제

git lfs untrack FILE
git rm --cached FILE
git add FILE
git commit FILE
git push

LFS 적용 확인

${REPO ROOT}/.gitattributes에 추가되어 있음.

LFS 리스트 확인

git lfs ls-files

LFS 적용된 Repository clone

git clone URL
git lfs pull

참고 : https://newsight.tistory.com/330

반응형
반응형
$ git log origin/<branch name>..HEAD
반응형

+ Recent posts