FEATURE default 설명
debug no Turn on compiler debugging information
developer no Turn on developer warnings and debugging
krb5developer no Turn on developer warnings and debugging, except -Wstrict-prototypes
picky-developter - Halt compilation on warnings
largefile - omit support for large files
external-libtalloc auto Enable external talloc
socket-wrapper no Turn on socket wrapper library
nss-wrapper no Turn on nss wrapper library
swat yes Build the SWAT tool
dmalloc no Enable heap debugging
cups auto Turn on CUPS support
iprint yes if cups is yes Turn on iPrint support
static=PKGS no build static libraries default
shared=PKGS yes build shared libraries default
pie yes Turn on pie support if available
relro yes Turn on Relocations Read-Only (relro) support if available
fam auto Turn on FAM support
shared-libs yes Use shared libraries internally
dnssd no Enable DNS service discovery support
avahi auto Enable Avahi support
merged-build - Build Samba 4 as well
gnutls yes Turn on gnutls support

configure --help 에서 정리

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 구차니
$ ll /usr/bin/smb*
-rwxr-xr-x 1 root root 2109576 Sep  2  2006 /usr/bin/smbcacls
-rwxr-xr-x 1 root root 1177152 Sep  2  2006 /usr/bin/smbclient
-rwxr-xr-x 1 root root  748836 Sep  2  2006 /usr/bin/smbcontrol
-rwxr-xr-x 1 root root 2002796 Sep  2  2006 /usr/bin/smbcquotas
-rwxr-xr-x 1 root root 2080776 Sep  2  2006 /usr/bin/smbget
-rwxr-xr-x 1 root root 2006920 Sep  2  2006 /usr/bin/smbpasswd
-rwxr-xr-x 1 root root    2295 Sep  2  2006 /usr/bin/smbprint
-rwxr-xr-x 1 root root  911124 Sep  2  2006 /usr/bin/smbspool
-rwxr-xr-x 1 root root  727968 Sep  2  2006 /usr/bin/smbstatus
-rwxr-xr-x 1 root root    4896 Sep  2  2006 /usr/bin/smbtar
-rwxr-xr-x 1 root root 1091552 Sep  2  2006 /usr/bin/smbtree

다른건 잘 모르겠고,
smbtree는 workgroup / computer 별로 공유되어 있는 목록을 보여주는 프로그램이다.

$ smbtree
Password:
WORKGROUP
        \\STREAM
                \\STREAM\C$                     Default share
                \\STREAM\ADMIN$                 Remote Admin
                \\STREAM\temp
                \\STREAM\D$                     Default share
                \\STREAM\IPC$                   Remote IPC
                \\STREAM\Stream Data
                \\STREAM\E$                     Default share
MSHOME
        \\KSJEON
cli_rpc_pipe_open: cli_nt_create failed on pipe \srvsvc to machine KSJEON.  Error was NT_STATUS_ACCESS_DENIED

이런식으로 쭈욱 나온다.

[링크 : http://master.samba.org/samba/docs/man/manpages-3/smbtree.1.html]
--------------------
smbstatus는 현재 삼바서버에 접속중인 클라이언트의 목록을 보여준다.

$ smbstatus

Samba version 3.0.23c-2
PID     Username      Group         Machine
-------------------------------------------------------------------
 2515   nevis1        dev           kwangho      (192.168.10.5)

Service      pid     machine       Connected at
-------------------------------------------------------
nevis1       2515   kwangho       Mon Aug 17 17:39:15 2009

No locked files

[링크 : http://master.samba.org/samba/docs/man/manpages-3/smbstatus.1.html]


-----------------
c 언어에서 조작하는 방법(source of smbtree.c)

[링크 : http://www.koders.com/c/fidB866C576E4391966493432682AF098446FDE9468.aspx?s=%22sam%22#L199]
[링크 : http://www.codase.com/search/display?file]
Posted by 구차니
samba는 윈도우에서 파일 공유 하듯, 리눅스 - 윈도우 간에 파일 공유 하도록 해주는 녀석이다.
원래 약자로 SMB를 읽기 쉽게 s m b 가 들어가는 단어를 찾다가 samba가 되었다고 하는데...

아무튼 리눅스에서 사용하는 명령어는

smbclient 이녀석은 단일 파일을 조작하는 녀석으로 보인다.
$ smbclient //mypc/yshare "" -N -Tx backup.tar

[링크 : http://linux.die.net/man/1/smbclient]
[링크 : http://linux.die.net/man/7/samba]

$ sudo mount -t cifs //SERVERIP/ /home/me/Desktop/SERVER/ -o user=myusername,password=mypass

cifs 타입으로 마운트 해서 사용도 가능하다.
[링크 : http://ubuntuforums.org/showthread.php?t=280473]

mount시에 //SERVERIP/path가 아닌 SERVERIP/path로 할 경우 아래의 에러가 발생하니 //를 꼭 넣어주도록 하자
CIFS: UNC Path does not begin with // or \\

만약에
mount: bad address 'SERVERNAME'
이라고 에러가 발생하면 SERVERNAME대신 SERVERIP로 해주면된다.

UNC는 Unified Naming Convention 의 약자로고 한다.
[링크 : http://www.terms.co.kr/UNC.htm ]

CIFS는 Common Internet File System 의 약자라고 한다(Interface가 아니군..)
[링크 : http://www.terms.co.kr/CIFS.htm]


Posted by 구차니