'프로그램 사용/SMB(Samba)'에 해당되는 글 63건

  1. 2009.09.11 삼바 크로스 컴파일 하기 : cross compile the samba / source3
  2. 2009.09.07 smbtree / smbstatus
  3. 2009.09.05 삼바 - 윈도우 리눅스 파일 공유
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 구차니

댓글을 달아 주세요