tmux 세션 관리와 스크립팅으로 원격 작업 환경 구성하기

SSH 연결이 끊기면(노트북을 덮거나, 와이파이 끊김, VPN 타임아웃) 터미널에 붙어 있던 셸과 프로세스가 통째로 죽는다. nohup/disown으로 프로세스는 살릴 수 있어도 다시 접속해서 출력을 보거나 개입할 방법은 없다. tmux(terminal multiplexer)는 터미널…

Continue Readingtmux 세션 관리와 스크립팅으로 원격 작업 환경 구성하기

라즈베리파이에서 I2C 센서 데이터 읽기 — python-smbus2 실전

센서마다 GPIO 핀을 하나씩 배정하는 방식은 핀 개수 제한과 배선 복잡도 때문에 금방 한계에 부딪힌다. I2C는 SDA/SCL 두 핀만으로 여러 센서를 동시에 연결하는 버스 프로토콜이고, BME280 같은 저가형 온습도/기압 센서는…

Continue Reading라즈베리파이에서 I2C 센서 데이터 읽기 — python-smbus2 실전

ARM Pointer Authentication(PAC)와 BTI로 ROP/JOP 공격 막기

스택 카나리·NX/DEP·ASLR로 오랫동안 막아온 리턴 주소 조작을, 공격자는 새 코드 주입 대신 기존 코드 조각을 이어붙이는 ROP/JOP로 우회해왔다. ARM은 ARMv8.3-A의 Pointer Authentication(PAC)과 ARMv8.5-A의 Branch Target Identification(BTI)으로 이를 하드웨어 레벨에서 막는다.…

Continue ReadingARM Pointer Authentication(PAC)와 BTI로 ROP/JOP 공격 막기

Bash trap과 시그널 처리로 안전한 스크립트 작성하기

배포 스크립트가 Ctrl+C나 SIGTERM으로 중간에 끊기면 임시 파일이 /tmp에 남고, lock 파일이 안 지워져 다음 실행이 죽고, 쓰다 만 결과 파일이 완료된 것처럼 남기도 한다. Bash의 trap은 시그널을 받거나 종료될…

Continue ReadingBash trap과 시그널 처리로 안전한 스크립트 작성하기

QEMU/KVM 라이브 마이그레이션 원리와 실습

하이퍼바이저 호스트를 재부팅해야 할 때, VM을 끄고 다른 호스트에서 다시 켜는 cold migration은 서비스가 몇 분씩 죽는다. QEMU/KVM의 live migration은 VM을 실행 상태 그대로 유지하며 메모리/디바이스 상태를 다른 호스트로 옮기고…

Continue ReadingQEMU/KVM 라이브 마이그레이션 원리와 실습

Python multiprocessing.shared_memory로 프로세스 간 메모리 공유하기

numpy 배열을 multiprocessing.Queue/Pipe로 주고받으면 매번 pickle 직렬화·역직렬화가 일어나 배열이 클수록 병목이 된다. Python 3.8부터 표준 라이브러리에 들어온 multiprocessing.shared_memory는 pickle 없이 OS의 진짜 공유 메모리(POSIX /dev/shm)를 이름으로 attach해 여러 프로세스가 같은…

Continue ReadingPython multiprocessing.shared_memory로 프로세스 간 메모리 공유하기

리눅스 커널 DAMON으로 메모리 접근 패턴 모니터링하기

메모리 회수는 LRU 리스트로 hot/cold 페이지를 구분해야 하는데, page table의 accessed bit를 주기적으로 스캔하는 전통적 방식은 메모리가 커질수록 오버헤드가 커진다. DAMON(Data Access MONitor)은 리눅스 5.15부터 커널에 들어온 범용 데이터 접근…

Continue Reading리눅스 커널 DAMON으로 메모리 접근 패턴 모니터링하기

Ubuntu에서 커널을 직접 빌드해 DAMON 활성화하기

Ubuntu 24.04 generic 커널은 CONFIG_DAMON이 꺼져 있어 /sys/kernel/mm/damon/admin/이 없다. 실제로 쓰려면 커널을 직접 빌드해야 한다. 현재 설정 기반으로 DAMON 옵션만 추가해 빌드·설치·재부팅하고 동작까지 확인한 기록이다. 준비 $ sudo apt-get install…

Continue ReadingUbuntu에서 커널을 직접 빌드해 DAMON 활성화하기

strace -f로 멀티프로세스/스레드 시스템 콜 한 번에 추적하기

strace nginx나 strace sh script.sh로 걸어보면 부모 프로세스의 fork/execve까지만 잡히고, 실제 작업을 하는 워커/자식 프로세스 내부는 안 보인다. -f(--follow-forks)가 이 문제를 해결한다. 이 글에서는 -f/-ff/-e trace=로 멀티프로세스·멀티스레드 프로그램을 추적하는 방법을…

Continue Readingstrace -f로 멀티프로세스/스레드 시스템 콜 한 번에 추적하기

Ubuntu Netplan으로 네트워크 설정 관리하기

예전 /etc/network/interfaces는 배포판마다 문법이 다르고 cloud-init 같은 자동 구성 환경과 궁합이 안 좋았다. Ubuntu 17.10부터는 Netplan이 YAML로 원하는 상태만 선언하면 systemd-networkd/NetworkManager를 백엔드로 골라 실제 설정을 만들어준다. 이 글에서는 YAML 구조,…

Continue ReadingUbuntu Netplan으로 네트워크 설정 관리하기