Ubuntu 에 Systemtap 설치 하기

10141 단어
최근 Nginx 를 배우 기 시 작 했 기 때문에 인터넷 에서 강력 한 커 널 탐지 도구 인 Systemtap 를 소개 하 는 것 을 보고 이 탐지 도 구 를 배 워 향후 코드 분석 을 준비 하려 고 한다.
첫 번 째 단 계 는 설치 다.자신의 컴퓨터 에 설치 할 때 도 한바탕 애 를 썼 다.따라서 나중에 다시 설치 해 야 하 는 것 을 막 기 위해 나중에 공부 하 는 사람 을 도와 블 로 그 를 만들어 기록 할 준 비 를 하고 있다.
다음은 설치 절차 입 니 다.
(0) elfutils 를 설치 하고 디 버 깅 정 보 를 분석 하 는 라 이브 러 리 함수 와 libcap - dev 를 제공 합 니 다.
Ubuntu 의 편리 하고 강력 한 패키지 관리자 덕분에 설치 가 편리 합 니 다. 다음 과 같 습 니 다.
sudo apt-get install elfutils
sudo apt-get install  libcap-dev

(1) 시스템 탭 을 설치 합 니 다.
Ubuntu 의 편리 하고 강력 한 패키지 관리자 덕분에 설치 가 편리 합 니 다. 다음 과 같 습 니 다.
sudo apt-get install systemtap

다음 에 마 운 트 해제 가 필요 하 다 면 다음 명령 을 실행 할 수 있 습 니 다.
sudo apt-get remove systemtap

원본 코드 를 통 해 설치 할 수도 있 고 주소 다운로드:https://sourceware.org/systemtap/ftp/releases/ 。압축 을 풀 고 루트 디 렉 터 리 에 들 어가 다음 명령 을 수행 합 니 다.
./configure
make
sudo make instal

나중에 마 운 트 해제 가 필요 하 다 면 루트 디 렉 터 리 에 들 어가 다음 명령 을 수행 할 수 있 습 니 다.
sudo make uninstall

(2) debug symbols 를 설치 합 니 다.
1), ddeb reposcory 설정.
sudo cat > /etc/apt/sources.list.d/ddebs.list << EOF
deb http://ddebs.ubuntu.com/ precise main restricted universe multiverse
EOF

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ECDCAD72428D7C01
sudo apt-get update

위 에 창고 주 소 를 추가 해도 ddebs. list 파일 뒤에 해당 주 소 를 직접 추가 할 수 있 습 니 다.
    2) reposcory 를 추가 한 후 현재 커 널 버 전과 대응 하 는 debug symbols 를 다운로드 합 니 다.외국 친구 가 쓴 스 크 립 트 를 추천 합 니 다. 아주 잘 썼 습 니 다. 블 로그 링크 (http://www.domaigne.com/blog/random/getting-debug-kernel-on-ubuntu/), 관심 있 는 것 은 공부 하 러 갈 수 있 습 니 다.따라서 오류 발생 을 줄 이기 위해 이 스 크 립 트 를 다운로드 하고 설치 합 니 다.
wget http://www.domaigne.com/download/tools/get-dbgsym

chmod +x get-dbgsym

sudo ./get-dbgsy

스 크 립 트 를 실행 하면 다른 일 을 할 수 있 습 니 다. 오래 기 다 려 야 할 수도 있 기 때 문 입 니 다.
3), systemtap / libelf 생 성 에 필요 한 모듈 정보.다음 명령 을 debug 에 넣 습 니 다.ko.sh:
for file in `find /usr/lib/debug -name '*.ko' -print`
do
        buildid=`eu-readelf -n $file| grep Build.ID: | awk '{print $3}'`
        dir=`echo $buildid | cut -c1-2`
        fn=`echo $buildid | cut -c3-`
        mkdir -p /usr/lib/debug/.build-id/$dir
        ln -s $file /usr/lib/debug/.build-id/$dir/$fn
        ln -s $file /usr/lib/debug/.build-id/$dir/${fn}.debug
done

그리고 이 파일 을 실행 합 니 다:
sudo ./debug_ko.sh

(4) 설치 성공 여 부 를 테스트 합 니 다.다음 명령 을 실행 합 니 다:
stap -e 'probe kernel.function("sys_open") {log("hello world") exit()}'

터미널 에 "hello World" 를 인쇄 하면 설치 가 성공 했다 는 것 을 설명 합 니 다.없 으 면 계속 내 려 다 보 세 요.
(5) 상기 절차 에 따라 설치 한 후에 도 사용 할 수 없다 면 아래 의 장면 을 참고 하여 각각 보충 하 시기 바 랍 니 다.
1). (4) 의 명령 을 실행 하면 터미널 에서 다음 과 같은 정 보 를 인쇄 합 니 다.
stap: Symbol `SSL_ImplementedCiphers' has different size in shared object, consider re-linking
In file included from include/linux/mutex.h:15:0,
                 from /tmp/staphH2yQD/stap_6e022ad97cbe9c6f46b582f7a0eac81d_1242_src.c:25:
include/linux/spinlock_types.h:55:14: error: ‘__ARCH_SPIN_LOCK_UNLOCKED’ undeclared here (not in a function)
  .raw_lock = __ARCH_SPIN_LOCK_UNLOCKED, \
              ^
include/linux/spinlock_types.h:79:15: note: in expansion of macro ‘__RAW_SPIN_LOCK_INITIALIZER’
  { { .rlock = __RAW_SPIN_LOCK_INITIALIZER(lockname) } }
               ^
include/linux/spinlock_types.h:82:16: note: in expansion of macro ‘__SPIN_LOCK_INITIALIZER’
  (spinlock_t ) __SPIN_LOCK_INITIALIZER(lockname)
                ^
include/linux/mutex.h:111:18: note: in expansion of macro ‘__SPIN_LOCK_UNLOCKED’
   , .wait_lock = __SPIN_LOCK_UNLOCKED(lockname.wait_lock) \
                  ^
include/linux/mutex.h:117:27: note: in expansion of macro ‘__MUTEX_INITIALIZER’
  struct mutex mutexname = __MUTEX_INITIALIZER(mutexname)
                           ^
/tmp/staphH2yQD/stap_6e022ad97cbe9c6f46b582f7a0eac81d_1242_src.c:26:8: note: in expansion of macro ‘DEFINE_MUTEX’
 static DEFINE_MUTEX(module_refresh_mutex);
        ^
scripts/Makefile.build:258: recipe for target '/tmp/staphH2yQD/stap_6e022ad97cbe9c6f46b582f7a0eac81d_1242_src.o' failed
make[1]: *** [/tmp/staphH2yQD/stap_6e022ad97cbe9c6f46b582f7a0eac81d_1242_src.o] Error 1
Makefile:1398: recipe for target '_module_/tmp/staphH2yQD' failed
make: *** [_module_/tmp/staphH2yQD] Error 2
WARNING: kbuild exited with status: 2
Pass 4: compilation failed.  [man error::pass4]

일부 공유 라 이브 러 리 는 링크 를 다시 읽 고 다음 명령 을 실행 해 야 한 다 는 것 을 설명 합 니 다.
readlink /lib/modules/`uname -r`/build/

 
참고 문장 은 다음 과 같다.
  1、http://www.domaigne.com/blog/random/running-systemtap-on-ubuntu/
  2、https://sourceware.org/systemtap/wiki/SystemtapOnUbuntu
  3、https://wiki.ubuntu.com/Kernel/Systemtap
【 주 】 전 재 는 본인 의 동 의 를 거 쳐 출처 를 밝 혀 야 합 니 다.http://www.cnblogs.com/wtb2012/p/5218889.html

좋은 웹페이지 즐겨찾기