Мой блог - Сборка Samba для платформы ARM из исходных кодов

Сборка Samba для платформы ARM из исходных кодов

Сегодня я предлагаю вам ознакомиться не с готовым решением, а принять участие в обсуждении ряда проблем на которые я обратил внимание при работе с общими ресурсами линукс, при доступе из Windows 10. С этими ситуациями я столкнулся при настройке файлового хранилища на базе BananaPI с Samba 4-ой версии.

Фотография автора

Автор: Антон Черноусов
Опубликовано: 1 месяц, 3 недели (последние правки: 0 минут назад) - 0 комментариев
Категории записи: ARM, BannanaPI, Debian, Linux, Samba, Ubuntu, Системное администрирование


Скажу честно, что с этими проблемами я столкнулся впервые, но они отнюдь не новые и в интернете есть много неструктурированной информации по проблеме работы SMB3-протокола в Linux, поэтому я хотел предложить структурировать информацию и подобрать наиболее адекватные пути решения возникших с Samba проблем.

Обсуждение проблемы с Samba реализацией SMB3

При реализации простой схемы файлового хранилища на базе BananaPI (схема типовая и многократно апробированная), я обратил внимание, что файловое хранилище работает очень медленно при доступе из Linux, а доступ из Windows 10 просто невозможен без особого объяснения причин (windows системы вообще не особо разговорчивы в плане отладки).

Версия Samba в ARM-репозитории для Ubuntu 16.04:

# samba --version
Version 4.3.11-Ubuntu

Версия Samba в штатном Linux репозитории (обычный x64 Ubuntu 16.04):

$ samba --version
Version 4.3.11-Ubuntu

Как вы видите версии Samba абсолютно идентичные и единственным отличием является платформа на которой они запущены, но фактически доступ к общим ресурсам SAMBA из Windows 10 с последними обновлениями невозможен в обоих случаях.

Невозможно подключиться к Samba из Windows 10 Creators Update

Проблема с доступом к общим ресурсам Samba после выхода обновления 1709 довольно хорошо описана и связана она с полным отключением поддержки протокола небезопасного SMB1 (его давно собирались отключить) и более подробно можно почитать здесь https://support.microsoft.com/en-nz/help/4034314/smbv1-is-not-installed-windows-10-and-windows-server-version-1709

Обычно рекомендуют использовать опции:

min protocol = SMB2
max protocol = SMB3

Эти опции ограничивают минимальную и максимальную версию используемого SMB-протокола, но в моем случае эти опции не сработали. Так как версия Samba довольно старая имеет смысл попробовать более свежую реализацию. Пересобираем SAMBA из GIT-репозитория https://github.com/samba-team/samba.git

Устанавливаем необходимые для сборки пакеты:

# apt-get install libreadline-dev git build-essential libattr1-dev libblkid-dev autoconf python-dev 
# apt-get install python-dnspython libacl1-dev gdb pkg-config libpopt-dev libldap2-dev 
# apt-get install dnsutils acl attr libbsd-dev docbook-xsl libcups2-dev libgnutls28-dev
# apt-get install libpam-dev libjansson4 libjansson-dev 

Собираем:

# cd /usr/src/
# git clone https://github.com/samba-team/samba
# cd ./samba
# ./configure --with-ads --with-shared-modules=idmap_ad --enable-selftest --with-systemd --prefix=/opt/samba4
# make && make install

Конфигурационный файл (/opt/samba4/etc/smb.conf):

[global]
    workgroup = GITADEV
    socket options = TCP_NODELAY SO_RCVBUF=524288 SO_SNDBUF=524288 IPTOS_LOWDELAY
    server string = GITA-DEV Temporary storage
    server role = standalone server
    hosts allow = 192.168.3.95 127. 10.252.0.
    guest account = samba-guest
    log file = /var/log/samba/log.%m
    max log size = 500
    passdb backend = tdbsam
    interfaces = 10.252.0.3/24 192.168.3.216/24
    dns proxy = no

[data_vol]
    comment = Temporary data volume
    path = /opt/data_vol
    writable = yes
    guest ok = yes
    force user = root
    force group = root
    create mask = 0664
    force create mode = 0664
    directory mask = 02775
    force directory mode = 02775

Создаем юнит SystemD для автоматического запуска (/lib/systemd/system/samba4.service):

[Unit]
Description=Samba4 AD Daemon
After=syslog.target network.target

[Service]
Type=forking
PIDFile=/opt/samba4/var/run/smbd.pid
LimitNOFILE=16384
ExecStart=/opt/samba4/sbin/smbd
ExecReload=/usr/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

Запускаем:

# systemctl enable samba4
# systemctl start samba4

С представленным выше конфигом к Samba из стабильной брэнч-ветки версии 4.5 можно подключиться, но не работает опция guest ok и пароль на стороне windows 10 все равно будет запрошен, но помимо того что мы починили работу с Windows 10, сломалось монтирование ресурсов из Linux при помощи опции mount -t cifs, теперь требуется принудительно указывать версию протокола и это при том, что я не ограничивал минимальную версию в конфигурации Samba.

Вопросов на данный момент стало больше чем ответов и хотя монтирование в Linux я победил (правда pam_mount больше не принимает пароль пользователя и его надо указывать в виде опции), реализация требует основательной доработки. Из плюсов стоит отметить что скорость работы SAMBA 4.5 гораздо выше и пропали подвисания при работе через графически проводники DE.

Пожалуйста, оцените мою статью (всего оценок 0, средняя оценка 4.00):

Комментарии к статье:

Пока комментариев нет

Оставьте комментарий:

обязательно

обязательно (не публикуется)

необязательно

обязательно

обязательно