問題1:SamInfo3_for_guest: Unable to locate guest account [nobody]!
我估計是沒有nobody這個使用者導致的,於是在passwd檔案中加入了nobody這個使用者後果然好了。(注意:這裡的/etc/passwd檔案在android下本來是沒有的,是我手動加的,裡面的記錄也是我手工加的,至於怎麼加,需要重新mount system分區為rw才能完成,如我是執行:mount -o remount,rw /dev/block/mmcblk0p9 system命令。當然也可以在Adb下直接執行adb remount)
vi /etc/passwd加入如下兩條記錄(紅色):
root@android:/data/data/test/etc # cat /etc/passwd
root::0:0:root:/data/data/test:/system/bin/sh
nobody::65534:65534:nobody:/nonexistent:/system/bin/sh
root@android:/data/data/test/etc #
問題2:能看到共用目錄,但一進入就卡死,查看smbd日誌有如下錯誤列印:
[2013/01/10 08:49:16.335483, 0] smbd/vfs.c:173(vfs_init_custom)
error probing vfs module 'fake_perms': NT_STATUS_UNSUCCESSFUL
[2013/01/10 08:49:16.336495, 0] smbd/vfs.c:315(smbd_vfs_init)
smbd_vfs_init: vfs_init_custom failed for fake_perms
[2013/01/10 08:49:16.337105, 0] smbd/service.c:902(make_connection_snum)
vfs_init failed for service test
我看見日誌中有“fake_perms”的列印,想到自己從網上拷貝的smb.conf檔案中也有這麼一項估計是這個導致的,於是注釋掉,OK。
[test]
#vfs objects = fake_perms
comment = Android /mnt/sdcard
#path = /mnt/sdcard
path = /data/data/test
#path = /etc
force user = root
read only = no
writable = yes
samba-3.6.10的設定檔及編譯:
echo samba_cv_CC_NEGATIVE_ENUM_VALUES=yes > my.cache
echo "samba_cv_HAVE_Werror=yes" >> my.cache
echo "samba_cv_HAVE_Werror_implicit_function_declaration" >> my.cache
echo "samba_cv_CC_NEGATIVE_ENUM_VALUES=yes" >> my.cache
./configure --prefix=/home/rebi/cross_tools/samba-3.6.10/source3/_install --host=arm-unknown-linux-gnueabi -cache-file=my.cache --with-quotas=no --with-sys-quotas=no --enable-swat=no --enable-smbtorture4=no --enable-cups=no --enable-pie=no --enable-relro=no
--enable-fam=no --enable-avahi=no --with-rootsbindir=/data/data/test --with-statedir=/data/data/test/etc --with-cachedir=/data/data/test/etc --with-ncalrpcdir=/data/data/test/etc --with-nmbdsocketdir=/data/data/test/etc --with-logfilebase=/data/data/test/etc
--with-privatedir=/data/data/test/etc --with-privatedir=/data/data/test/etc --with-swatdir=/data/data/test/etc --with-lockdir=/data/data/test/etc --with-piddir=/data/data/test/etc --with-configdir=/data/data/test/etc LDFLAGS="-Wl,-dynamic-linker=/data/app/ld-linux.so.3"
注意,我把privatedir、piddir等全部都指定到/data/data/test/etc目錄下去了,所以需要在手機上建立這個目錄。
編成功後無需make install,直接去source3下的bin目錄下將smbd,nmbd, smbpasswd, testparm拷貝出來就行了。
傳到手機上後,先執行./smbpasswd -a root,增加一個root使用者並給它設定上密碼。
考慮到調試需要反覆啟動殺死smbd及nmbd我先了一個指令檔調試samba.sh:
#!/bin/shcase "$1" inrestart)killall -9 smbd nmbd 2>/dev/null./smbd./nmbd;;stop)killall -9 smbd nmbd;;start)./smbd./nmbd;;*)echo "invalid param: $1";;esac
指令碼在使用時帶參數:如sh samba.sh restart就是重啟samba服務。
我使用的完整的smb.conf如下(由於我修改了代碼中的路徑,所以這個檔案需要放在/data/data/test/etc目錄下),對這個檔案修改後如果不確定,可以執行./testparm來檢測一下,這也是為什麼要把它拷過來的原因。
root@android:/data/data/test/etc # cat smb.conf
[global]
interfaces = 192.168.1.11/24
workgroup = WORKGROUP
server string = Samba on Android
netbios name = ANDROID
remote announce = 255.255.255.255
encrypt passwords = yes
security = user
#security = share
restrict anonymous = 1
load printers = no
printcap name = /dev/null
disable spoolss = yes
deadtime = 5
delete readonly = yes
nt acl support = no
inherit permissions = yes
socket options = SO_SNDBUF=16384 SO_RCVBUF=16384
[test]
#vfs objects = fake_perms
comment = Android /mnt/sdcard
#path = /mnt/sdcard
path = /data/data/test
#path = /etc
force user = root
read only = no
writable = yes
#guest ok = no
browseable = yes