arm 添加 samb 文件共享

编译环境: ubunto 12 arm-linux-gcc 4.3.2 arm linux 4.1.36 开发板 2440

 

测试上传速度,大文件

github源码 https://github.com/samba-team/samba

测试了几个版本,各有问题。

samba-4.6.2 ~ 3.6 需要安装 python 环境,才能编译。4.6 需要 python2.7 ,4.0 3.6 需要 phtyon2.x ,apt-get install 安装的 没有 phtyon.h 还需要编译安装。实在太费时间,不装这个。

samba-2.2.8 编译正常,安装报错 codepages 不能编译,后面有介绍解决方法, 解决了 codepages 以后,启动 报错 Unable to open printcap file /etc/printcap for read!
Failed to setup RT_SIGNAL_LEASE handler ,  touch /etc/printcap 可以解决,但是 Failed to setup RT_SIGNAL_LEASE handler还是出错。

samba-3.4.17 编译,正常使用。 下载地址 : https://github.com/samba-team/samba/archive/samba-3.4.17.tar.gz

下载好解压 cd source3

./autogen.sh
./configure  --bindir=/usr/local/samba --prefix=/usr/local/samba
make CC=arm-linux-gcc
make install

将编译出来的文件全复制到 开发板nfs 文件系统中
cp /usr/local/samba /home/nfs/usr/local/ -rfd
还需要复制 so 库文件 到开发板 nfs 文件系统中
cp /usr/local/samba/lib/*so* /home/nfs/lib/ -d

修改 examples/smb.conf.default  改名为 smb.conf 上传到 开发板 etc 下

smb.conf 红字部分是修改的

  1 # This is the main Samba configuration file. You should read the
  2 # smb.conf(5) manual page in order to understand the options listed
  3 # here. Samba has a huge number of configurable options (perhaps too
  4 # many!) most of which are not shown in this example
  5 #
  6 # For a step to step guide on installing, configuring and using samba, 
  7 # read the Samba-HOWTO-Collection. This may be obtained from:
  8 #  http://www.samba.org/samba/docs/Samba-HOWTO-Collection.pdf
  9 #
 10 # Many working examples of smb.conf files can be found in the 
 11 # Samba-Guide which is generated daily and can be downloaded from: 
 12 #  http://www.samba.org/samba/docs/Samba-Guide.pdf
 13 #
 14 # Any line which starts with a ; (semi-colon) or a # (hash) 
 15 # is a comment and is ignored. In this example we will use a #
 16 # for commentry and a ; for parts of the config file that you
 17 # may wish to enable
 18 #
 19 # NOTE: Whenever you modify this file you should run the command "testparm"
 20 # to check that you have not made any basic syntactic errors. 
 21 #
 22 #======================= Global Settings =====================================
 23 [global]
 24 
 25 # workgroup = NT-Domain-Name or Workgroup-Name, eg: MIDEARTH
 26    workgroup = WORKGROUP
 27 
 28 # server string is the equivalent of the NT Description field
 29    server string = Samba Server
 30 
 31 # Security mode. Defines in which mode Samba will operate. Possible 
 32 # values are share, user, server, domain and ads. Most people will want 
 33 # user level security. See the Samba-HOWTO-Collection for details.
 34    security = share
 35 
 36 # This option is important for security. It allows you to restrict
 37 # connections to machines which are on your local network. The
 38 # following example restricts access to two C class networks and
 39 # the "loopback" interface. For more examples of the syntax see
 40 # the smb.conf man page
 41 ;   hosts allow = 192.168.1. 192.168.2. 127.
 42 
 43 # If you want to automatically load your printer list rather
 44 # than setting them up individually then you'll need this
 45    load printers = yes
 46 
 47 # you may wish to override the location of the printcap file
 48 ;   printcap name = /etc/printcap
 49 
 50 # on SystemV system setting printcap name to lpstat should allow
 51 # you to automatically obtain a printer list from the SystemV spool
 52 # system
 53 ;   printcap name = lpstat
 54 
 55 # It should not be necessary to specify the print system type unless
 56 # it is non-standard. Currently supported print systems include:
 57 # bsd, cups, sysv, plp, lprng, aix, hpux, qnx
 58 ;   printing = cups
 59 
 60 # Uncomment this if you want a guest account, you must add this to /etc/passwd
 61 # otherwise the user "nobody" is used
 62 ;  guest account = pcguest
 63 guest account = root
 64 
 65 # this tells Samba to use a separate log file for each machine
 66 # that connects
 67    log file = /usr/local/samba/var/log.%m
 68 
 69 # Put a capping on the size of the log files (in Kb).
 70    max log size = 50
 71 
 72 # Use password server option only with security = server
 73 # The argument list may include:
 74 #   password server = My_PDC_Name [My_BDC_Name] [My_Next_BDC_Name]
 75 # or to auto-locate the domain controller/s
 76 #   password server = *
 77 ;   password server = <NT-Server-Name>
 78 
 79 # Use the realm option only with security = ads
 80 # Specifies the Active Directory realm the host is part of
 81 ;   realm = MY_REALM
 82 
 83 # Backend to store user information in. New installations should 
 84 # use either tdbsam or ldapsam. smbpasswd is available for backwards 
 85 # compatibility. tdbsam requires no further configuration.
 86 ;   passdb backend = tdbsam
 87 
 88 # Using the following line enables you to customise your configuration
 89 # on a per machine basis. The %m gets replaced with the netbios name
 90 # of the machine that is connecting.
 91 # Note: Consider carefully the location in the configuration file of
 92 #       this line.  The included file is read at that point.
 93 ;   include = /usr/local/samba/lib/smb.conf.%m
 94 
 95 # Configure Samba to use multiple interfaces
 96 # If you have multiple network interfaces then you must list them
 97 # here. See the man page for details.
 98 ;   interfaces = 192.168.12.2/24 192.168.13.2/24 
 99 
100 # Browser Control Options:
101 # set local master to no if you don't want Samba to become a master
102 # browser on your network. Otherwise the normal election rules apply
103 ;   local master = no
104 
105 # OS Level determines the precedence of this server in master browser
106 # elections. The default value should be reasonable
107 ;   os level = 33
108 
109 # Domain Master specifies Samba to be the Domain Master Browser. This
110 # allows Samba to collate browse lists between subnets. Don't use this
111 # if you already have a Windows NT domain controller doing this job
112 ;   domain master = yes 
113 
114 # Preferred Master causes Samba to force a local browser election on startup
115 # and gives it a slightly higher chance of winning the election
116 ;   preferred master = yes
117 
118 # Enable this if you want Samba to be a domain logon server for 
119 # Windows95 workstations. 
120 ;   domain logons = yes
121 
122 # if you enable domain logons then you may want a per-machine or
123 # per user logon script
124 # run a specific logon batch file per workstation (machine)
125 ;   logon script = %m.bat
126 # run a specific logon batch file per username
127 ;   logon script = %U.bat
128 
129 # Where to store roving profiles (only for Win95 and WinNT)
130 #        %L substitutes for this servers netbios name, %U is username
131 #        You must uncomment the [Profiles] share below
132 ;   logon path = \\%L\Profiles\%U
133 
134 # Windows Internet Name Serving Support Section:
135 # WINS Support - Tells the NMBD component of Samba to enable it's WINS Server
136 ;   wins support = yes
137 
138 # WINS Server - Tells the NMBD components of Samba to be a WINS Client
139 #    Note: Samba can be either a WINS Server, or a WINS Client, but NOT both
140 ;   wins server = w.x.y.z
141 
142 # WINS Proxy - Tells Samba to answer name resolution queries on
143 # behalf of a non WINS capable client, for this to work there must be
144 # at least one    WINS Server on the network. The default is NO.
145 ;   wins proxy = yes
146 
147 # DNS Proxy - tells Samba whether or not to try to resolve NetBIOS names
148 # via DNS nslookups. The default is NO.
149    dns proxy = no 
150 
151 # These scripts are used on a domain controller or stand-alone 
152 # machine to add or delete corresponding unix accounts
153 ;  add user script = /usr/sbin/useradd %u
154 ;  add group script = /usr/sbin/groupadd %g
155 ;  add machine script = /usr/sbin/adduser -n -g machines -c Machine -d /dev/null -s /bin/false %u
156 ;  delete user script = /usr/sbin/userdel %u
157 ;  delete user from group script = /usr/sbin/deluser %u %g
158 ;  delete group script = /usr/sbin/groupdel %g
159 
160 
161 #============================ Share Definitions ==============================
162 [homes]
163    comment = Home Directories
164    browseable = no
165    writable = yes
166 
167 # Un-comment the following and create the netlogon directory for Domain Logons
168 ; [netlogon]
169 ;   comment = Network Logon Service
170 ;   path = /usr/local/samba/lib/netlogon
171 ;   guest ok = yes
172 ;   writable = no
173 ;   share modes = no
174 
175 
176 # Un-comment the following to provide a specific roving profile share
177 # the default is to use the user's home directory
178 ;[Profiles]
179 ;    path = /usr/local/samba/profiles
180 ;    browseable = no
181 ;    guest ok = yes
182 
183 
184 # NOTE: If you have a BSD-style print system there is no need to 
185 # specifically define each individual printer
186 [printers]
187    comment = All Printers
188    path = /usr/spool/samba
189    browseable = no
190 # Set public = yes to allow user 'guest account' to print
191    guest ok = no
192    writable = no
193    printable = yes
194 
195 # This one is useful for people to share files
196 ;[tmp]
197 ;   comment = Temporary file space
198 ;   path = /tmp
199 ;   read only = no
200 ;   public = yes
201 
202 # A publicly accessible directory, but read only, except for people in
203 # the "staff" group
204 ;[public]
205 ;   comment = Public Stuff
206 ;   path = /home/samba
207 ;   public = yes
208 ;   writable = no
209 ;   printable = no
210 ;   write list = @staff
211 
212 # Other examples. 
213 #
214 # A private printer, usable only by fred. Spool data will be placed in fred's
215 # home directory. Note that fred must have write access to the spool directory,
216 # wherever it is.
217 ;[fredsprn]
218 ;   comment = Fred's Printer
219 ;   valid users = fred
220 ;   path = /homes/fred
221 ;   printer = freds_printer
222 ;   public = no
223 ;   writable = no
224 ;   printable = yes
225 
226 # A private directory, usable only by fred. Note that fred requires write
227 # access to the directory.
228 ;[fredsdir]
229 ;   comment = Fred's Service
230 ;   path = /usr/somewhere/private
231 ;   valid users = fred
232 ;   public = no
233 ;   writable = yes
234 ;   printable = no
235 
236 # a service which has a different directory for each machine that connects
237 # this allows you to tailor configurations to incoming machines. You could
238 # also use the %U option to tailor it by user name.
239 # The %m gets replaced with the machine name that is connecting.
240 ;[pchome]
241 ;  comment = PC Directories
242 ;  path = /usr/pc/%m
243 ;  public = no
244 ;  writable = yes
245 
246 # A publicly accessible directory, read/write to all users. Note that all files
247 # created in the directory by users will be owned by the default user, so
248 # any user with access can delete any other user's files. Obviously this
249 # directory must be writable by the default user. Another user could of course
250 # be specified, in which case all files would be owned by that user instead.
251 ;[public]
252 ;   path = /usr/somewhere/else/public
253 ;   public = yes
254 ;   only guest = yes
255 ;   writable = yes
256 ;   printable = no
257 
258 # The following two entries demonstrate how to share a directory so that two
259 # users can place files there that will be owned by the specific users. In this
260 # setup, the directory should be writable by both users and should have the
261 # sticky bit set on it to prevent abuse. Obviously this could be extended to
262 # as many users as required.
263 ;[myshare]
264 ;   comment = Mary's and Fred's stuff
265 ;   path = /usr/somewhere/shared
266 ;   valid users = mary fred
267 ;   public = no
268 ;   writable = yes
269 ;   printable = no
270 ;   create mask = 0765
271 
272 [share]
273 path = /dev/
274 writeable = yes
275 browseable = yes
276 guest ok = yes
277 
278 [mnt]
279 path = /mnt/
280 writeable = yes
281 browseable = yes
282 guest ok = yes
283 
284 [rootfs]
285 path = /
286 writeable = yes
287 browseable = yes
288 guest ok = yes

 

在arm 开发板上,使用 -i -s 启动,这样将错误信息打印到控制台,方便调试
/usr/local/samba/sbin/smbd -i -s /etc/smb.conf

ARM 启动出错
/ # /usr/local/samba/sbin/smbd -i -s /etc/smb.conf
smbd version 3.4.17 started.
Copyright Andrew Tridgell and the Samba Team 1992-2009
get_root_nt_token: getpwnam("root") failed!
svcctl_init_keys: key lookup failed! (WERR_NOMEM)
upgrade_to_version_4: upgrading printer security descriptors
upgrade_to_version_5: normalizing printer keys
guest_user_info: Unable to locate guest account [nobody]!
ERROR: failed to setup guest info.

需要创建一个用户 (在开发板上执行)

如果没有 /etc/passwd
也需要创建一个
touch /etc/passwd

如果没有用户,需要创建一个用户
adduser root


创建软链(在开发板上执行)
ln -s /usr/local/samba/sbin/smbd /usr/bin/smbd

最后测试正常后,将 smb.conf 复制到 /usr/local/samba/lib/ 下

 

并修改自启动文件
/etc/init.d/rcS
#添加 开机自动运行
smbd
bftpd -d

最后补充一下

出现错误2.2.8 的 错误解决方法
Installing codepage files in /usr/local/samba/lib/codepages
Creating codepage file /usr/local/samba/lib/codepages/codepage.437
/usr/local/samba/make_smbcodepage: 1: /usr/local/samba/make_smbcodepage: Syntax error: word unexpected (expecting ")")
Creating unicode map /usr/local/samba/lib/codepages/unicode_map.437
/usr/local/samba/make_unicodemap: 1: /usr/local/samba/make_unicodemap: Syntax error: word unexpected (expecting ")")

出错原因是因为 make_unicodemap 和 make_smbcodepage 是 使用 编译生成后的文件,而这2个文件是 使用 arm-linux-gcc 编译的 在 ubunto 上无法执行。

解决方法是,在 arm 开发板上运行转码功能,将 源码中的 codepages 文件夹复制到 arm 开发板上 samba 的目录中 /usr/local/samba ,执行以下 我编写的 shell 。

arm_installcp.sh

 1 #!/bin/sh
 2 #author: ningdi date:2017-04-20 15:20
 3 srcdir=$(pwd)
 4 BINDIR=$(pwd)
 5 CODEPAGEDIR=$(pwd)/lib/codepages
 6 # The current codepage definition list.
 7 CODEPAGELIST="437 737 775 850 852 861 932 866 949 950 936 1251 ISO8859-1 ISO8859-2 ISO8859-5 
 8 ISO8859-7 KOI8-R 857 ISO8859-9 ISO8859-13 ISO8859-15 1125 KOI8-U"
 9 for p in $(echo $CODEPAGELIST|tr " " "\n");
10 do
11     echo ${srcdir}/codepages/codepage_def.$p
12     if [ -f ${srcdir}/codepages/codepage_def.$p ]; then
13         echo Creating codepage file $CODEPAGEDIR/codepage.$p
14     $BINDIR/make_smbcodepage c $p ${srcdir}/codepages/codepage_def.$p $CODEPAGEDIR/codepage.$p
15 fi
16 if [ -f ${srcdir}/codepages/CP${p}.TXT ]; then
17     echo Creating unicode map $CODEPAGEDIR/unicode_map.$p
18         $BINDIR/make_unicodemap $p ${srcdir}/codepages/CP${p}.TXT $CODEPAGEDIR/unicode_map.$p
19 fi
20 done

执行后就会在 ARM 文件系统中 生成编码文件 /lib/codepages

posted @ 2017-04-20 15:24  宁次  阅读(2693)  评论(0编辑  收藏  举报