1. Устанавливаем Samba-сервер. На arm-устройстве c установленным Entware-ng:
Код: Выделить всё
# opkg install http://pkg.entware.net/binaries/armv7/experimental/samba36-server_3.6.25-50_armv7soft.ipk
В случае с Entware-3x достаточно
Код: Выделить всё
# opkg install samba36-server
2. Создаем пользователя с uid 1023 и задаем ему Samba-пароль
Код: Выделить всё
# adduser -DHu 1023 media_rw
# smbpasswd -a media_rw
New SMB password:
Retype SMB password:
В принципе не обязательно называть пользователя именно media_rw, но я предпочитаю именно так, чтобы не путались андроидные и энтварные имена.
3. Создаем и правим конфиг /opt/etc/samba/smb.conf. У меня он такой
Код: Выделить всё
[global]
netbios name = Android
display charset = UTF-8
interfaces = wlan0
server string = Android
unix charset = UTF-8
workgroup = WORKGROUP
browseable = yes
deadtime = 30
domain master = yes
encrypt passwords = true
enable core files = no
guest account = media_rw
guest ok = yes
local master = yes
load printers = no
map to guest = Bad User
max protocol = SMB2
min protocol = NT1
min receivefile size = 16384
null passwords = yes
obey pam restrictions = yes
os level = 20
passdb backend = smbpasswd
preferred master = yes
printable = no
security = user
smb encrypt = disabled
smb passwd file = /opt/etc/samba/smbpasswd
socket options = TCP_NODELAY IPTOS_LOWDELAY
syslog = 2
use sendfile = yes
writeable = yes
[Download]
path = /data/media/0/Download
read only = yes
guest ok = yes
create mask = 0666
directory mask = 0777
[Internal Storage]
path = /data/media/0
read only = no
guest ok = no
create mask = 0666
directory mask = 0777
valid users = media_rw
[External SdCard]
path = /mnt/media_rw/sdcard1
read only = no
guest ok = no
create mask = 0666
directory mask = 0777
valid users = media_rw
В шарах важно указать правильные пути к первичным источникам андроидных "внутренней" и "внешней" памяти. Это не должны быть эмулированные пути (типа /storage/emulated/0 или, как в моем случае, /storage/sdcard1). Шара Download предназначена для гостевого read-only доступа. Доступ к Internal Storage и External SdCard осуществляется по логину media_rw и определенного ранее паролю. Опция "min protocol" может быть в целях безопасности выставлена в SMB2, но не все андроид-клиенты работают с SMB2.
4. Запускаем сервер через /opt/etc/init.d/S08samba start. На виндовых машинах в той же сети расшаренные папки будут доступны по пути //ANDROID или //[ip-адрес].
P.S. Вот честное слово, ненавижу самбу из-за постоянных проблем в настройках. Если конфиг неправильный, то винда попытавшесь неудачно залезть на эту самба-шару, пароль и настройки куда-то кэширует. А потом как самбу не перенастраивай, то результат будет виден только после перезагрузки винды. И это на Windows 7! С последними виндами результат может оказаться еще хуже. Еще пример: у меня работала Ubuntu-виртуалка, раздающая через samba скрытый от винды ext4-раздел винчестера. Работала она какое-то время, но вдруг отчего-то перестала, и так до сих пор и не работает. С андроидов доступ есть, а из винды - нет. Что случилось - детективная история. После долгих мучений решил доунгрейдить samba до 3-й версии, а чтобы не рушить зависимости в Ubuntu (ну и для эксперимента, конечно же) поставил туда samba из Entware-3x с тем же почти конфигом, что и выше. Понятно, что менее безопасно стало, но зато работает.
P.P.S. Если кто-то хорошо знает самбу, то пожалуйста сообщите, если что-то не так, конфиг поправлю.