samba移植到Android手机上(三星GS2)

这里我选用的版本是3.6.10,交叉编译比较容易,后面有说明,先说说编译完后调试需要注意的几个问题!

问题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/sh

case "$1" in
restart)
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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值