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

一. Samba 简介 Samba(SMB是其缩写) 是一个网络服务器,用于Linux和Windows共享文件之用;Samba 即可以用于Windows和Linux之间的共享文件,也一样用于Linux和Linux之间的共享文件;不过对于Linux和Linux之间共享文件有更好的网络文件系统NFS,NFS也是需要架设服务器的; 大家知道在Windows 网络中的每台机器即可以是文件共享的服务器,也可以同是客户机;Samba 也一样能行,比如一台Linux的机器,如果架了Samba Server 后,它能充当共享服务器,同时也能做为客户机来访问其它网络中的Windows共享文件系统,或其它Linux的Sabmba 服务器; 我们在Windows网络中,看到共享文件功能知道,我们直接就可以把共享文件夹当做本地硬盘来使用。在Linux的中,就是通过Samba的向网络中的机器提供共享文件系统,也可以把网络中其它机器的共享挂载在本地机上使用;这在一定意义上说和FTP是不一样的。 二. Samba的几个套件,安装及简单配置 sambasamba-client, samba-common 一句 sudo apt-get install samba samba-client 就能全部装上 启动samba也很简单: sudo /etc/init.d/samba start 设置samba的密码, 可以先添加samba用户, 必须是系统用户。 smbpasswd -a yourname 三. 互访 1)windows访问ubuntu windows访问ubuntu很简单, 先在ubuntu上设置共享目录即可, 鼠标右键点目录,选择sharing options, 够选share this folder,需要的话也可以够选下面的allow write 这时在windows的网络邻居中的网络中查找就能找到共享目录了,通过//host也行 2)ubuntu访问windows 第一种:在ubuntu的网络中直接浏览访问 位置->网络,点击界面中windows网络->workgroup,在workgroup组中就可以看到windows计算机名,双击会弹出输入用户名和密码的对话框,将我们上面设置smb的用户名和密码输入就可以进行访问。 第二种:用ubuntu 系统自带的连接到服务器功能访问 位置->连接到服务器,在服务类型中选择“windows共享”,在服务器中输入windows计算机的ip地址或计算机名,点击连接,这样在系统桌面中就会显示一个连接到windows 计算机的文件卷,里面就是windows计算机的共享目录了。 同样在访问的时候要输入smb的用户名和密码。 第三种:用mount’挂载windows的共享目录到本地磁盘 首先要在ubuntu系统中建立一个挂载点,在这里我们建立的挂在点为 /mnt/wind 同样在保证网络连接正常,且windows中有共享目录的前提下,进行一下操作 以windows的ip为192.168.0.1,共享文件夹为share为例 命令如下: mount -t smbfs –o username=wangyh,password=123456 //192.168.0.1/share /mnt/wind 有是这样在访问的时候会出现中文乱码的问题,这样我们可以按下面命令来执行,可以解决这个问题 mount -o smbfs -o iocharset=uft8,codepage=cp936,clmask=777,fmask=777,userneme=wangyh,password=123456 //192.168.0.1/share /mnt/wind 注解:usename和password都为smb的用户和密码,如果要详细了解mount命令,使用man mount在终端查看详细用法 第四种:使用smbclient 命令 一般来讲先列出所有共享目录,命令如下: smbclient –L //192.168.0.1/ -U yourname 输入smb的密码后,将看到共享目录列表。 假设进入共享目录share,命令如下: smbclient //192.168.0.1/share -U yourname 之后将看到一个smb:> 已经进入了smb模式,有些像ftp,敲help可以查看相关命令,get,put可以下载和上传文件。 五. 小结 以上几步,对于简单使用ubuntu和windows的文件共享于互访已经足够,更详细的资料可以参考:http://linux.vbird.org/linux_server/0370samba.php#server_pkg
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值