Unfortunately the bug is still observed - i did some additional triaging.

* The bug is seen only when the samba share exported is on a vfat file system
    - for ext2 and ext3 the large sized copy succeeds without fail.

* I also tried using the samba package from debian-arm repositories(lenny-stable)
    - but there also the problem is seen.

* Even if the error is thrown up - the file is still being copied in the background - or ftruncate'ing in the background (I suspect it is only ftruncating and filling the space with zeroes because of two reasons - one the md5sums do not match afterwards and two the code seems to be doing the same thing) - but as previously stated adding a patch to always call ftruncate64() in sys_ftruncate() does not fix the problem.

[링크 : http://www.mail-archive.com/ubuntu-bugs@lists.ubuntu.com/msg1902987.html]

SH4 시스템에서 smbd / nmbd 조합으로
USB 메모리를 vfat으로 사용하여, 원격지에서 파일을 복사할경우
20MB 이상의 파일을 복사하려고 시도하면 죽는 문제가 발생했다.

임베디드 장비라서, 메모리 부족 에러와 함께 DMA 에러가 발생했지만,
이러한 문제가 발생하기전 vfat으로 rw가 아닌 ro로 mount 되는 것을 봐서
다른 문제나 버그가 있는 것으로 생각이 된다.
Posted by 구차니
# cat log.smbd
[2009/08/15 00:00:07,  0] lib/pidfile.c:121(pidfile_create)
  ERROR: smbd is already running. File /usr/local/samba/var/locks/smbd.pid exists and process id 687 is running.

삼바가 구동중에 제대로 종료되지 않고 재가동 될경우
$PIDDIR/smbd.pid
$PIDDIR/nmbd.pid

파일이 남아 있다 보면, 위와 같이 이미 구동중으로 착각을 하고
smbd나 nmbd를 구동하는데 실패를 한다.

fork() / execl() 로 구동시에는
waitpid() 에서 벗어 나지 못하고 멈추는 현상이 발생했다.





결론 : 혹시 모르니 종료가 불확실한 시스템(임베디드?)에서는 삼바 구동 이전에 pid 파일을 지워주도록 하는게 좋을듯 하다.
Posted by 구차니
삼바를 사용한다는 말은,
일반적으로 서버로 사용한는 의미인데,
그렇다고 해서 윈도우에서 아이피를 바꾸면 안되는건 아니다.


각설하고, 삼바를 구성하는 프로세스로는
nmbd
smbd
winbind 가 있다.

그 중에서 nmbd가 네트워크상에서 이름을 알리는 녀석인데,
아이피가 바뀔경우, smbd는 다시 시작안하고, nmbd만 다시 시작하면
약간의 시간이 흐른뒤 파일 공유가 연결된다.
(winbind는 안써봐서 모름)

물론 아이피가 바뀌어서 네트워크 갱신되는 동안은 접속이 끊어진다.
Posted by 구차니
[2009/11/11 08:17:07,  0] lib/util_sock.c:730(write_data)
[2009/11/11 08:17:07,  0] lib/util_sock.c:1468(get_peer_addr_internal)
  getpeername failed. Error was Transport endpoint is not connected
  write_data: write failure in writing to client 0.0.0.0. Error Transport endpoint is not connected
[2009/11/11 08:17:07,  0] smbd/process.c:62(srv_send_smb)
  Error writing 4 bytes to client. -1. (Transport endpoint is not connected)
위와 같은 에러가 발생한다면

/usr/local/samba/lib/smb.conf 파일에
smb ports = 139 를 넣어주면 해결이 된다고 한다.

These are generally innocuous. Windows XP will try to connect on both ports 139 and 445. Once an XP client connects on one of these ports, it silently drops the other. If you want to get rid of the error in your log, or just verify my answer, add the following parameter to the Global Section of /etc/samba/smb.conf , then restart samba.

[링크 : http://forums.opensuse.org/network-internet/413860-errors-log-smbd.html]

[링크 : http://threebit.net/mail-archive/samba/msg01516.html]
Posted by 구차니
# more /usr/local/samba/var/log.smbd
[2009/11/08 23:55:51,  0] lib/util_sec.c:assert_gid(113)
Failed to set gid privileges to (-1,65534) now set to (0,0) uid=(0,0)

위와 같은 에러가 발생하는 것은,
User ID / Group ID 설정상의 문제로 생각이 된다.

해결 방법은
좀.. 미심쩍지만

# vi /usr/local/samba/lib/smb.conf
[global]
guest account = root

[링크 : http://archives.devshed.com/forums/samba-120/panic-failed-to-set-gid-on-mipsel-1742988.html]



20091111 추가
Failed to set gid privileges to (-1,65534) now set to (0,0) uid=(0,0)

한글로 번역하자면,
현재 gid (0,0) uid (0,0)으로 설정되어 있는데 (-1,65534) 로 gid 권한을 설정하는데 실패를 했다는 의미이다.
현재 gid = 0, uid = 0 이고 이것은 일반적인 unix 시스템에서 root의 uid / gid 값이다.
그런 이유로, guest account 를 root로 했을시에 위와 같은 에러가 발생하지 않는 것으로 생각된다.
Posted by 구차니
# more /usr/local/samba/var/log.smbd
[2009/11/08 23:55:51,  0] smbd/service.c:1005(make_connection_snum)
  '/tmp' does not exist or permission denied when connecting to [IPC$] Error was No such file or directory

log.smbd 에서 위와 같은 에러가 발생되고,
/usr/local/samba/var/cores/smbd/core 파일이 생성되며,
smbtree 실행시에는 "failed tcon_X with NT_STATUS_BAD_NETWORK_NAME" 에러가 발생을 한다.

위의 에러는 간단하게 /tmp 디렉토리를 생성하거나, 퍼미션을 수정하면 해결된다.
# mkdir /tmp


20091117 추가
MTD에서 작동 시킬경우 tmp는 굳이 writable 하지 않아도 된다.
Posted by 구차니
/etc/services
netbios-ns      137/tcp                         # NETBIOS Name Service
netbios-ns      137/udp
netbios-dgm     138/tcp                         # NETBIOS Datagram Service
netbios-dgm     138/udp
netbios-ssn     139/tcp                         # NETBIOS session service
netbios-ssn     139/udp

microsoft-ds    445/tcp
microsoft-ds    445/udp



삼바라는 녀석.. 포트를 참 여러가지 쓰기도 한다.
# smbtree -N
timeout connecting to 192.168.10.123:445

위와 같은 에러가 발생하거나 삼바 접속이 안되면
445번 포트가 설정되어 있는지 /etc/services 에서 확인해야 한다.
Posted by 구차니
MTD에서 삼바를 구동하는데 위와 같은 에러가 발생하면, 말 그대로 MTD의 남은 공간이 없다는 의미이다.
파티션을 조절하거나, 파일 용량을 줄이거나 조치를 취해야 한다.

# ./smbd -S -F
Unable to setup corepath for smbd: No space left on device
smbd version 3.4.0 started.
Copyright Andrew Tridgell and the Samba Team 1992-2009
standard input is not a socket, assuming -D option

# ./smbd -S -F
Unable to setup corepath for smbd: No space left on device
smbd version 3.4.0 started.
Copyright Andrew Tridgell and the Samba Team 1992-2009
tdb(unnamed): tdb_open_ex: failed to truncate /usr/local/samba/var/locks/messages.tdb: No space left on device
ERROR: Failed to initialise messages database: No space left on device
messaging_tdb_init failed: NT_STATUS_DISK_FULL
Could not init smbd messaging context.

Posted by 구차니
MTD로 올리기 위해 이미지를 작성하는데, 위와 같은 에러가 발생했다.
파일은 존재하고, 디렉토리도 존재하는데.. 왜 안읽히는 걸까!?


결론 : private 디렉토리 자체가 read-only일 경우,
         그러니까 MTD에 올릴경우 cramfs 등의 read-only FS를 사용하게 되는데
         이 경우에는 writeable 하게 열면 에러가 발생하므로, 위와 같은 에러가 발생하는 것으로 보여진다.
Posted by 구차니
/lib/libnsl.so
/lib/libdl.so
/usr/lib/libpopt.so
/usr/lib/libz.so

/etc/printcap <- touch로 만들어도 됨

혹시나 모를 다음의 노가다를 위한 저장.
samba를 make DESTDIR=/ install 대신
직접 복사해서 타켓 rootfs를 만들때 필요한 파일들

smbtree 를 구동하려고 하니 위의 파일들을 추가로 요구했다.
Posted by 구차니