OS: Raspbian Jessie
Kernel version: 4.1.7-v7+
Device: Raspberry Pi 2 Model B
라즈베리 파이에서 리눅스 커널 헤더를 apt-get 으로 설치하면, 현재 OS가 실행 중인 것보다 낮은 버전이 설치된다. 실제 사용중인 버전의 커널 헤더를 설치하려면, 홈페이지에 가서 직접 다운로드받아서 설치해야 한다. (이전 포스팅의 1.2 Raspbian용 linux headers 다운로드/설치 항목 참조)
문제는 이렇게 sudo dpkg -i로 헤더를 설치하면, 루트 권한으로 설치되면서 소스코드 파일의 퍼미션이 모두 루트만 읽고 쓸 수 있게 되어서 (아마도 600, -rw-------) 일반 유저 프로세스에서 접근할 수 없게 되는 것이다.
이로 인해 아래와 같은 작업이 모두 루트 권한 없이는 불가능해진다:
- 커널 모듈을 비롯해서 리눅스 헤더를 참조해서 빌드하는 경우 (make를 sudo make로 해야 되는 상황... 따라서 생성되는 파일이 모두 owner가 root가 되어버린다)
- ctags 같은 vim 플러그인에서 리눅스 헤더 소스에 접근하지 못하게 됨 (permission denied 처리되면서 소스코드를 로딩하지 못함.)
일단 설치 자체가 루트 권한 없이 불가능하므로, 설치를 다 하고 나서 수동으로 퍼미션을 조정하기로 했다. 일단 리눅스 헤더 최상위 디렉토리 위치에서, 하위 디렉토리에 있는 모든 소스 파일에 644 퍼미션을 줘서 root가 아니어도 read-only 접근이 되도록 했다.
$ cd /usr/src/linux-headers-$(uname -r)
$ sudo chmod -R 644 ./*
이렇게 했더니 하위 디렉토리에 접근 자체가 안된다.
생각해 보니 디렉토리는 755 퍼미션(drwxr-xr-x)을 줘야 한다. ㅡㅡ;
다행히, 현재 위치에서 하위에 있는 모든 디렉토리의 퍼미션을 755로 변경하는 방법도 있다. [1]
$ cd /usr/src/linux-headers-$(uname -r)
$ sudo chmod 755 $(sudo find ./ -type d)
<추가사항>
여기까지 하면 ctag 같은 작업에는 문제가 없지만, make는 여전히 안될 때가 있다.
가끔 make가 scripts 디렉토리에 있는 실행 파일을 써야 할 때가 있어서 그렇다.
scripts 디렉토리에 있는 실행 파일들도 디렉토리와 마찬가지로 755 퍼미션을 걸어 줘야 한다.
$ cd /usr/src/linux-headers-$(uname -r)/scripts
$ sudo chmod -R 755 ./*
$ sudo chmod -R 644 ./*.[ch]
scripts 디렉토리 안에 실행파일이 아닌 소스 파일들도 있어서 소스 파일은 그냥 실행 옵션을 뺐다.
이제 sudo 없이 make도 잘 되고, ctags도 잘 작동한다. ^^
<참고자료>
[1] "How to chmod all directories except files (recursively)?", http://superuser.com/questions/91935/how-to-chmod-all-directories-except-files-recursively/91966
'Research > RaspberryPi' 카테고리의 다른 글
Raspberry Pi 5 VNC Server 설정 (1) | 2023.12.25 |
---|---|
Raspberry Pi Imager에 로컬 이미지 파일 사용하기 (1) | 2023.12.23 |
라즈베리파이에서 Realtek RTL8812au 드라이버 빌드 및 설치 (2) | 2016.05.19 |
라즈베리파이와 복수 개의 USB 무선랜카드 간의 전력 공급 문제 (0) | 2016.03.03 |
라즈베리파이 무선랜카드 드라이버(backports)를 소스코드에서 빌드하기 (0) | 2016.02.14 |