Skip to content

Commit

Permalink
samba 4.14.5 (new formula)
Browse files Browse the repository at this point in the history
samba 4.14.5

Samba (v3) was removed from Homebrew in 2016 due to technical issues,
however, Samba v4 seems actively supporting macOS recently, and worth
including again in Homebrew.

Samba v4 is already included in MacPorts.

Further discussion in Homebrew/discussions 1736 .

The formula is based on Alexander Richardson (arichardson)'s PR 32031 .

Example usage with qemu:
```
qemu-system-x86_64 \
  -accel hvf \
  -m 4096 \
  -cdrom ubuntu-21.04-desktop-amd64.iso \
  -net nic \
  -net user,smb=/tmp/foo
```

The shared folder can be mounted with `mount.cifs //10.0.2.4/qemu /mnt`
in the guest.

Closes #80171.

Co-authored-by: Alex Richardson <Alexander.Richardson@cl.cam.ac.uk>
Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
Signed-off-by: Sean Molenaar <1484494+SMillerDev@users.noreply.github.com>
Signed-off-by: Carlo Cabrera <30379873+carlocab@users.noreply.github.com>
Signed-off-by: BrewTestBot <1589480+BrewTestBot@users.noreply.github.com>
  • Loading branch information
2 people authored and BrewTestBot committed Jul 17, 2021
1 parent 2db9346 commit ceb48e8
Showing 1 changed file with 123 additions and 0 deletions.
123 changes: 123 additions & 0 deletions Formula/samba.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
class Samba < Formula
# Samba can be used to share directories with the guest in QEMU user-mode (SLIRP) networking
# with the `-net nic -net user,smb=/share/this/with/guest` option.
# The shared folder appears in the guest as "\\10.0.2.4\qemu".
desc "SMB/CIFS file, print, and login server for UNIX"
homepage "https://samba.org/"
url "https://download.samba.org/pub/samba/stable/samba-4.14.5.tar.gz"
sha256 "bb6ef5d2f16b85288d823578abc453d9a80514c42e5a2ea2c4e3c60dc42335c3"
license "GPL-3.0-or-later"

# configure requires python3 binary to be present, even when --disable-python is set.
depends_on "python@3.9" => :build
depends_on "gnutls"

uses_from_macos "perl" => :build

resource "Parse::Yapp" do
url "https://cpan.metacpan.org/authors/id/W/WB/WBRASWELL/Parse-Yapp-1.21.tar.gz"
sha256 "3810e998308fba2e0f4f26043035032b027ce51ce5c8a52a8b8e340ca65f13e5"
end

def install
# avoid `perl module "Parse::Yapp::Driver" not found` error on macOS 10.xx (not required on 11)
if MacOS.version < :big_sur
ENV.prepend_create_path "PERL5LIB", buildpath/"lib/perl5"
ENV.prepend_path "PATH", buildpath/"bin"
resource("Parse::Yapp").stage do
system "perl", "Makefile.PL", "INSTALL_BASE=#{buildpath}"
system "make"
system "make", "install"
end
end
# CFLAGS is for avoiding hitting https://bugzilla.samba.org/show_bug.cgi?id=14680 .
# Remove this CFLAGS when the patch ( https://attachments.samba.org/attachment.cgi?id=16579 ) gets merged.
ENV.append "CFLAGS", "-include #{buildpath}/lib/util/debug.h"
system "./configure",
"--disable-cephfs",
"--disable-cups",
"--disable-iprint",
"--disable-glusterfs",
"--disable-python",
"--without-acl-support",
"--without-ad-dc",
"--without-ads",
"--without-dnsupdate",
"--without-ldap",
"--without-libarchive",
"--without-json",
"--without-ntvfs-fileserver",
"--without-pam",
"--without-regedit",
"--without-syslog",
"--without-utmp",
"--without-winbind",
"--prefix=#{prefix}"
system "make"
system "make", "install"
on_macos do
# macOS has its own SMB daemon as /usr/sbin/smbd, so rename our smbd to samba-dot-org-smbd to avoid conflict.
# samba-dot-org-smbd is used by qemu.rb .
mv "#{sbin}/smbd", "#{sbin}/samba-dot-org-smbd"
end
end

def caveats
on_macos do
<<~EOS
macOS has its own SMB daemon as /usr/sbin/smbd, so Samba version of smbd is installed as "#{HOMEBREW_PREFIX}/sbin/samba-dot-org-smbd"
On macOS, Samba should be executed as a non-root user: https://bugzilla.samba.org/show_bug.cgi?id=8773
EOS
end
end

test do
smbd = "#{sbin}/smbd"
on_macos do
smbd = "#{sbin}/samba-dot-org-smbd"
end

system smbd, "--build-options"
system smbd, "--version"

mkdir_p "samba/state"
mkdir_p "samba/data"
(testpath/"samba/data/hello").write "hello"

# mimic smb.conf generated by qemu
# https://github.com/qemu/qemu/blob/v6.0.0/net/slirp.c#L862
(testpath/"smb.conf").write <<~EOS
[global]
private dir=#{testpath}/samba/state
interfaces=127.0.0.1
bind interfaces only=yes
pid directory=#{testpath}/samba/state
lock directory=#{testpath}/samba/state
state directory=#{testpath}/samba/state
cache directory=#{testpath}/samba/state
ncalrpc dir=#{testpath}/samba/state/ncalrpc
log file=#{testpath}/samba/state/log.smbd
smb passwd file=#{testpath}/samba/state/smbpasswd
security = user
map to guest = Bad User
load printers = no
printing = bsd
disable spoolss = yes
usershare max shares = 0
[test]
path=#{testpath}/samba/data
read only=no
guest ok=yes
force user=#{ENV["USER"]}
EOS

port = free_port
spawn smbd, "-S", "-F", "--configfile=smb.conf", "--port=#{port}", "--debuglevel=4", in: "/dev/null"

sleep 5
mkdir_p "got"
system "smbclient", "-p", port.to_s, "-N", "//127.0.0.1/test", "-c", "get hello #{testpath}/got/hello"
assert_equal "hello", (testpath/"got/hello").read
end
end

0 comments on commit ceb48e8

Please sign in to comment.