삼바를 하면서 고생한게 몇개 있는데..

첫째는 크로스 컴파일시에 --target 옵션 넣으면 안된다는 것과
둘째는 설치 경로를 못잡아서 헤맨 것이다.


일단 삼바가 제대로 설정되었는지 확인하기 위한 testparm툴을 삼바에서 제공한다.
이 녀석을 사용하면 무엇이 잘못되었는지 찾는데 도움이 될 것이다.
[링크 : http://forums.debian.net/viewtopic.php?f=5&t=42082]

나의 경우에는 무리하게 Makefile 을 수정해서 생긴문제였는데
testparm을 하면 아래와 같이 출력되었었다.
# testparm
Load smb config files from /etc/smb.conf
creating default valid table
Loaded services file OK.
ERROR: lock directory /home/morpheuz/st7109/target/var/locks does not exist
ERROR: state directory /home/morpheuz/st7109/target/var/locks does not exist
ERROR: cache directory /home/morpheuz/st7109/target/var/locks does not exist
ERROR: pid directory /home/morpheuz/st7109/target/var/locks does not exist
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions

[global]
        netbios name = SMB TEST

Makefile에서
prefix를 /home/morpheuz/st7109/target 으로 했었는데. 이 경우에 컴파일 된 smbd에 저 경로를 이식하는 바람에
타켓 환경에서 엉뚱한 경로를 뒤적이게 되서 이러한 현상이 발생하게 되었다.

이를 해결하기 위해서는
아~~~무런 Makefile 수정없이 아래와 같이 입력하면 된다.

make DESTDIR=/home/morpheuz/st7109/target install

물론 Makefile 내에 DESTDIR이 있지만, 설정상의 문제인지 강제로 저값을 넣어주면
설치중에 엉뚱한 경로가 추가되어 설치에 실패하게 된다.
($(DESTDIR)%(LIBDIR) 사이에 이상하게도 /가 하나더 들어간다 결과적으로
/home/moprheuz/st7109/target//usr/local 경로가 되면서 설치 실패한다.)


아래의 링크는 autoconf의 DESTDIR 과 각종 디렉토리 변수에 대한 gnu 문서이다.
[링크 : http://www.gnu.org/software/autoconf/manual/standards/DESTDIR.html#DESTDIR]
[링크 : http://www.gnu.org/software/autoconf/manual/standards/Directory-Variables.html#Directory-Variables]
Posted by 구차니
sh4-linux 용으로 samba3.4.0 버전을 크로스컴파일을 시도하는데
이래저래 자꾸만 에러가 나서 검색을 해봤다.

결론 : 검색하고 꼼꼼하게 읽어보자.. OTL


실질적으로 크로스컴파일에서 필요한건 CC 환경변수 설정과 configure에서 --host=i686(혹은 현재 아키텍쳐)를
해주는 것 외에는 별다른 것이 없다.

Step 1. 다운받고 압축푼다.
Step 2. samba-3.4.0/source3/ 에서 ./autogen.sh 를 실행시킨다.
Step 3. 환경을 설정한다.
           export CC=sh4-linux-gcc
           export samba_cv_CC_NEGATIVE_ENUM_VALUES=yes

export samba_cv_CC_NEGATIVE_ENUM_VALUES=yes 를 해주는 이유는

checking that the C compiler understands negative enum values...
                                                    configure: error: cannot run test program while cross compiling

이런 에러가 발생을 하기 때문이다.
원래대로라면, 크로스 컴파일시에는 이 부분이 실행불가능 하므로 넘어가야 하는데,
이 부분이 제대로 처리되지 않아서 그런것으로 생각된다.

Step 4. configure를 실행한다. --target은 지정하지 않아야 컴파일이 진행된다.
           ./configure --host=i686

컴파일 하다가 winbind 와 ldap 오류가 나면 귀차니즘으로
./configure --host=i686 --without-winbind --without-ldap --disable-swat
라고 해주면 winbind와 ldap를 컴파일 하지 않는다.
SWAT(Samba Web Admin Tool)는 사용하지 않는다면 꺼주면 된다.

Step 5. Makefile을 수정한다.
           make install 시에 설치될 위치를 정해준다.
prefix=/usr/local/samba
exec_prefix=${prefix}
...
CONFIGDIR = ${exec_prefix}/lib

원래 내용은 위와 같지만,
prefix 의 주소는 target NFS 주소의 root를 정해주고
/etc/smb.conf가 기본 환경파일의 위치이므로, 이를 정해주기 위해
CONFIGDIR의 위치를 /etc로 정해준다.

prefix=$(HOME)/target
exec_prefix=${prefix}
...
CONFIGDIR = /etc

컴파일 시에 talloc.c 에서 lber.h ldap.h 에러가 나면
Compiling ../lib/talloc/talloc.c
In file included from ../lib/talloc/talloc.c:36:
include/includes.h:156:18: error: lber.h: No such file or directory
include/includes.h:172:18: error: ldap.h: No such file or directory

CPPFLAGS=-DHAVE_CONFIG_H -I/usr/include -Iinclude -I./include -I. -I. -I./../lib/replace -I./../lib/talloc -I./../lib/tevent -I./../lib/tdb/include -I./libaddns -I./librpc -I./.. -I./../lib/popt
를 추가해주면 해결된다. lber.h의 경로가 제대로 추가되지 않아서 발생하는 문제이다.

Step 6. 컴파일 및 설치 한다.
          make
          make install

Step 7. 파일이 부족하면 복사한다.
          나의 경우에는 libnsl.so libdl.so가 부족했다.

[링크 : http://en.wikibooks.org/wiki/Samba/Compiling_Samba_from_Source]
Posted by 구차니