아마도 이 글을 읽는 분들 중에서 다운 받은 리눅스 커널 소스를 윈도우즈 환경에서 압축 해제 후, 리눅스 환경으로


가져와서 커널 소스 컴파일을 시도하신 분이 있다면 이 글이 도움이 될 확률이 높다. (내가 그랬으므로)


-----


우분투 9.10 에서 리눅스 커널 소스 버전 2.6.31.1을 컴파일 하는 도중 다음과 같은 에러를 만났다.


No rule to make target `net/ipv4/netfilter/ipt_ecn.c', needed by `net/ipv4/netfilter/ipt_ecn.o'. Stop.



net/ipv4/netfilter 디렉터리에 있는 ipt_ecn.c 라는 타겟을 make할 rule이 없다는 것인데..


실제로 net/ipv4/netfilter 디렉터리 내에는 어떤 파일들이 있는지 찾아보았다.


(참고 : 해당 경로는 [커널소스위치]/net/ipv4/netfilter 이다)





문제가 발생한 디렉터리에서 ls ipt_* 명령어를 입력해서 "ipt_" 로 시작하는 모든 파일들을 출력 해본 결과이다.


위의 그림에서 보이는 것 처럼 실제로 ipt_ecn.c 라는 파일이 없음을 확인할 수 있다. 실제로 이 파일은 원래 다운


받은 리눅스 커널 소스에 포함되어 있는 파일인데, 이상하게 이 파일을 찾을 수 없다.



원인을 알고보니.. 문제는 내가 다운받은 linux-2.6.31.1.tar.xz 파일을 윈도우즈 환경에서 압축해제 했기 때문이었다..


왜 그것이 문제가 되는가?


그 이유는 윈도우즈 환경과 리눅스 환경에서 인식하는 파일의 이름 포맷이 다르기 때문이다.


무슨 말이냐면.. 윈도우즈 환경에서는 파일의 이름으로 대문자, 소문자를 구분하지 않는다.


즉, ipt_ECN.c 나 ipt_ecn.c 둘 다 같은 파일로 생각한다는 말이다.


반면 리눅스 환경에서는 파일의 이름으로 대,소문자를 구분하기 때문에 ipt_ECN.c와 ipt_ecn.c는 서로 다른 파일이다.


나는 linux-2.6.31.1.tar.xz 파일을 먼저 7zip으로 tar파일로 만들고, 알집 프로그램으로 tar파일을 압축해제 하였다.


(실제로 tar파일은 압축된 파일을 의미하지는 않으나 편의상 압축해제 라는 말을 사용)


그리고 내가 tar 파일을 압축해제 하는 과정에서, 알집 프로그램은 (아마도) ipt_ENC.c 파일과 ipt_ecn.c 파일을 같은


것으로 보고 이 둘 중 중복되는 것에 대한 압축을 해제 하지 않았던 것이다.


(실제로는 tar 파일을 알집으로 압축해제 하면 중복되는 파일이 있어서 건너뛸껀지 어쩔건지를 묻는 확인 메시지가 꽤


많이 떴었는데, 귀찮아서 모두 건너뛰기를 체크했었다.. 그게 이런 문제를 야기할줄은..)


그러면 linux-2.6.31.1.tar 파일을 리눅스로 가져와서 tar 명령어로 풀어보면 그 안에는 ipt_enc.c 파일이 있을까?






있다..ㅋ.. 그림에서 볼 수 있듯이 커널소스를 정상적으로 압축해제 했다면 ipt_ecn.c 파일과 ipt_ECN.c 파일이 둘 


[커널소스경로]/net/ipv4/netfilter/ 경로에 들어있어야 한다.



문제의 원인을 알았으니 해결 방법은 간단하다.


tar 파일을(혹은 tar.xz 파일을) 윈도우즈 환경에서 압축해제 하지 말고, 리눅스 환경에서 압축 해제 한 후 컴파일


한다.


그리고 그 결과..





커널 컴파일에 성공하여 deb 파일이 만들어졌다.




one thing just learned : tar 파일 윈도우즈에서 풀지 말자.




Posted by huammmm1
,