반응형

Bash 스크립트에서 매번 if [ $? -ne 0 ];을 써서 명령어의 실행 결과를 확인하는 건 번거롭고 코드가 지저분해 보일 수 있다. 이를 깔끔하게 처리할 수 있는 몇 가지 방법을 소개한다.

  1. set -e 사용
    스크립트에 set -e를 추가하면, 명령어가 실패할 때(exit code가 0이 아닐 때) 자동으로 스크립트 실행이 중지된다. 이렇게 하면 매번 $?를 체크할 필요가 없어진다.
#!/bin/bash
set -e

# 명령어 실행 (실패하면 스크립트가 중지됨)

command\_1  
command\_2

echo "이 메시지는 위 명령어들이 성공한 경우에만 출력됨"  

set -e는 스크립트 실행을 중단해야 할 때 유용하지만, 모든 경우에 적합하지 않을 수 있다. 실패해도 계속 실행해야 하는 상황이라면 다른 방법을 고려하는 게 좋다.

  1. 함수로 처리
    자주 사용하는 에러 확인을 함수로 만들어 놓으면 매번 $?를 확인하는 중복을 줄일 수 있다.
#!/bin/bash

check\_command() {  
"$@"  
if \[ $? -ne 0 \]; then  
echo "Error: '$\*' 명령어가 실패했습니다." >&2  
exit 1  
fi  
}

check\_command ls /path/to/dir  
check\_command another\_command  

check_command 함수는 전달받은 명령어를 실행하고, 실패하면 에러 메시지를 출력한 뒤 스크립트를 종료하는 방식이다.

  1. 명령어 체인 (&&와 || 사용)
    명령어가 성공하거나 실패할 때 각각 다른 동작을 하고 싶다면 &&와 ||를 사용하는 것도 깔끔하다.
command && echo "성공" || echo "실패"  
&&는 명령어가 성공했을 때 실행되고, ||는 명령어가 실패했을 때 실행된다. 단순한 에러 처리를 할 때 유용하다.
  1. 트랩(Trap) 사용
    스크립트 전체에서 에러가 발생할 경우에 대한 공통 처리가 필요하다면 trap을 사용할 수 있다. 특정 상황이나 에러 발생 시 자동으로 호출되는 함수를 정의할 수 있다.
#!/bin/bash

trap 'echo "Error occurred at line $LINENO"; exit 1' ERR

# 명령어 실행

command\_1  
command\_2  

이 코드는 ERR 신호가 발생할 때, 즉 명령어가 실패하면 해당 트랩이 실행돼 에러 메시지를 출력하고 스크립트를 종료한다.

반응형
반응형

필요 패키지 설치

$ sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

gpg key 추가

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Repository 추가

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

업데이트

$ sudo apt update

Docker 설치

$ sudo apt-get install docker-ce docker-ce-cli containerd.io

필요시 Reboot 혹은 docker service restart

$ sudo reboot now

or 

$ sudo systemctl restart docker

Docker service 확인

$ systemctl status docker

User docker group 권한 추가

$ sudo gpasswd -a ${USER} docker

이후 shell 종료 및 재접속 필요

반응형
반응형

Client 에서 Key 생성

$ cd ${HOME}
$ ssh-keygen -t rsa -P ""

Key 등록

$ ssh-copy-id -i ${HOME}/.ssh/rd_rsa.pub <USER>@<IP>

Test

$ ssh <USER>@<IP>
반응형
반응형

Ubuntu GUI 영상 캡쳐 방법(22.04)

간단하게 PrintScreen 버튼으로 이미지/동영상 캡쳐 가능
동영상 캡쳐시 상단에 중지 버튼으로 중지시 까지 영상 캡쳐됨

mp4 변환

기본적으로 영상 캡쳐시 포멧은 webm 포멧임.
mp4로 ffmpeg를 이용해서 간단하게 converting 할 수 있음.

기본 변환 방법

 $ ffmpeg -i <INPUT FILE> -vcodec libx264 -acodec aac <OUTPUT FILE>

Scale 지정 converting 방법

 $ ffmpeg -i <INPUT FILE> -vf "scale=<WIDTH>:<HEIGHT>" -vcodec libx264 -acodec aac <OUTPUT FILE>

Scale 지정시 Width 고정(예.1280), Height 가변

 $ ffmpeg -i <INPUT FILE> -vf "scale=1280:trunc(720/2)*2" -vcodec libx264 -acodec aac <OUTPUT FILE>

FPS 지정

영상 캡쳐를 하면 원본 영상 화질과 상관없이 무겁다. FPS를 지정하고 싶을 경우

 $ ffmpeg -i <INPUT FILE> -vf "scale=1280:trunc(720/2)*2" -vcodec libx264 -acodec aac -r <FPS NUM> <OUTPUT FILE>
반응형
반응형

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
반응형
반응형
  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>

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

반응형
반응형

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

반응형

+ Recent posts