1 # Based partially on (wongsyrone/hbl0307106015) versions
2 include $(TOPDIR
)/rules.mk
8 PKG_SOURCE
:=$(PKG_NAME
)-$(PKG_VERSION
).
tar.gz
10 https
://ftp.gwdg.de
/pub
/samba
/stable
/ \
11 https
://ftp.heanet.ie
/mirrors
/ftp.samba.org
/stable
/ \
12 https
://ftp.riken.jp
/net
/samba
/samba
/stable
/ \
13 http
://www.nic.funet.fi
/index
/samba
/pub
/samba
/stable
/ \
14 http
://samba.mirror.bit.nl
/samba
/ftp
/stable
/ \
15 https
://download.samba.org
/pub
/samba
/stable
/
16 PKG_HASH
:=284c8a994ce989c87cd6808c390fcb9d00c36b21a0dc1a8a75474b67c9e715e7
18 PKG_BUILD_FLAGS
:=gc-sections
20 PKG_LICENSE
:=GPL-3.0
-only
21 PKG_LICENSE_FILES
:=COPYING
22 PKG_CPE_ID
:=cpe
:/a
:samba
:samba
24 # samba4=(asn1_compile,compile_et) rpcsvc-proto=(rpcgen)
25 HOST_BUILD_DEPENDS
:=python3
/host rpcsvc-proto
/host perl
/host perl-parse-yapp
/host
26 PKG_BUILD_DEPENDS
:=samba4
/host libtasn1
/host perl
/host
28 PKG_CONFIG_DEPENDS
:= \
29 CONFIG_SAMBA4_SERVER_NETBIOS \
30 CONFIG_SAMBA4_SERVER_AVAHI \
31 CONFIG_SAMBA4_SERVER_QUOTAS \
32 CONFIG_SAMBA4_SERVER_VFS \
33 CONFIG_SAMBA4_SERVER_VFSX \
34 CONFIG_SAMBA4_SERVER_AD_DC \
35 CONFIG_PACKAGE_kmod-fs-btrfs \
36 CONFIG_PACKAGE_kmod-fs-xfs \
37 CONFIG_KERNEL_IO_URING
41 include $(INCLUDE_DIR
)/package.mk
42 include $(INCLUDE_DIR
)/host-build.mk
43 include $(INCLUDE_DIR
)/kernel.mk
44 include $(INCLUDE_DIR
)/version.mk
45 include ..
/..
/lang
/python
/python3-host.mk
46 include ..
/..
/lang
/python
/python3-package.mk
47 include ..
/..
/lang
/perl
/perlver.mk
49 define Package
/samba4
/Default
52 TITLE
:=Samba
$(PKG_VERSION
)
53 URL
:=https
://www.samba.org
/
56 define Package
/samba4
/Default
/description
57 The Samba software suite is a collection of programs that implements the
58 SMB
/CIFS protocol for UNIX systems
, allowing you to serve files and printers.
60 Samba
4 implements up-to protocol version SMB v3.1
.1 (Win10
), supports mDNS via AVAHI and a AD-DC setup via krb5.
61 NOTE
: No cluster and printer support.
64 define Package
/samba4-libs
65 $(call Package
/samba4
/Default
)
67 DEPENDS
:= +libtirpc
+libreadline
+libpopt
+libcap
+zlib
+libgnutls
+libtasn1
+libuuid
+libopenssl
+libpthread
+KERNEL_IO_URING
:liburing \
68 +PACKAGE_libpam
:libpam \
69 +SAMBA4_SERVER_VFS
:attr \
70 +SAMBA4_SERVER_AVAHI
:libavahi-client \
71 +SAMBA4_SERVER_AD_DC
:python3-cryptodome
+SAMBA4_SERVER_AD_DC
:python3-markdown
+SAMBA4_SERVER_AD_DC
:python3-dns
+SAMBA4_SERVER_AD_DC
:libopenldap
+SAMBA4_SERVER_AD_DC
:jansson
+SAMBA4_SERVER_AD_DC
:libarchive
+SAMBA4_SERVER_AD_DC
:acl
+SAMBA4_SERVER_AD_DC
:attr
74 define Package
/samba4-server
75 $(call Package
/samba4
/Default
)
77 DEPENDS
:= +samba4-libs
78 CONFLICTS
:=samba36-server
81 define Package
/samba4-server
/description
82 installs
: smbd
(nmbd
) smbpasswd pdbedit testparm
(nmblookup
) (smbcacls sharesec
)
83 (samba samba-tool ntlm_auth samba-gpupdate samba_dnsupdate samba_kcc samba_spnupdate samba_upgradedns samba_downgrade_db
)
85 This provides the basic fileserver service and is the minimum needed to serve file shares.
86 HINT
: https
://fitzcarraldoblog.wordpress.com
/2016/10/17/a-correct-method-of-configuring-samba-for-browsing-smb-shares-in-a-home-network
/
89 define Package
/samba4-server
/config
90 source
"$(SOURCE)/Config.in"
93 define Package
/samba4-client
94 $(call Package
/samba4
/Default
)
96 DEPENDS
:= +samba4-libs
99 define Package
/samba4-client
/description
100 installs
: cifsdd smbclient smbget
102 The smbclient program implements a simple ftp-like client for accessing SMB shares
105 define Package
/samba4-admin
106 $(call Package
/samba4
/Default
)
108 DEPENDS
:= +samba4-libs
111 define Package
/samba4-admin
/description
112 installs
: net smbcontrol profiles rpcclient dbwrap_tool eventlogadm
113 ldbadd ldbdel ldbedit ldbmodify ldbrename ldbsearch
114 tdbbackup tdbdump tdbrestore tdbtool
116 Administration tools collection
119 define Package
/samba4-utils
120 $(call Package
/samba4
/Default
)
122 DEPENDS
:= +samba4-libs
125 define Package
/samba4-utils
/description
126 installs
: smbstatus smbtree mvxattr smbtar
(smbcquotas
)
131 TARGET_CFLAGS
+= $(FPIC
)
132 TARGET_LDFLAGS
+= -Wl
,--as-needed
133 # dont mess with sambas private rpath!
137 CPP
="$(TARGET_CROSS)cpp" \
141 CONFIGURE_CMD
= .
/buildtools
/bin
/waf
142 HOST_CONFIGURE_CMD
= .
/buildtools
/bin
/waf
144 # Strip options that WAF configure script does not recognize
145 CONFIGURE_ARGS
:=$(filter-out \
155 HOST_CONFIGURE_ARGS
:=$(filter-out \
163 , $(HOST_CONFIGURE_ARGS
))
165 # Waf needs the "configure" argument
166 CONFIGURE_ARGS
:=configure
$(CONFIGURE_ARGS
)
167 HOST_CONFIGURE_ARGS
:=configure
$(HOST_CONFIGURE_ARGS
)
170 --hostcc
="$(HOSTCC)" \
172 --cross-answers
=cross-answers.txt \
176 --disable-fault-handling \
177 --disable-glusterfs \
178 --disable-spotlight \
180 --without-automount \
192 HOST_CONFIGURE_ARGS
+= \
193 --hostcc
="$(HOSTCC)" \
197 --disable-fault-handling \
198 --disable-glusterfs \
199 --disable-spotlight \
201 --disable-rpath-install \
202 --disable-rpath-private-install \
204 --without-automount \
216 HOST_CONFIGURE_ARGS
+= --disable-avahi
--without-quotas
--without-acl-support
--without-winbind \
217 --without-ad-dc
--without-json
--without-libarchive
--disable-python
--nopyc
--nopyo \
218 --without-ads
--without-ldap
--without-ldb-lmdb
220 # Optional AES-NI support - https://lists.samba.org/archive/samba-technical/2017-September/122738.html
221 # Support for Nettle wasn't comitted
222 ifdef CONFIG_TARGET_x86_64
223 CONFIGURE_ARGS
+= --accel-aes
=intelaesni
225 CONFIGURE_ARGS
+= --accel-aes
=none
229 --with-lockdir
=/var
/lock \
230 --with-logfilebase
=/var
/log \
231 --with-piddir
=/var
/run \
232 --with-privatedir
=/etc
/samba
235 ifeq ($(CONFIG_SAMBA4_SERVER_QUOTAS
),y
)
236 CONFIGURE_ARGS
+= --with-quotas
238 CONFIGURE_ARGS
+= --without-quotas
240 ifeq ($(CONFIG_SAMBA4_SERVER_AVAHI
),y
)
241 CONFIGURE_ARGS
+= --enable-avahi
243 CONFIGURE_ARGS
+= --disable-avahi
246 ifeq ($(CONFIG_SAMBA4_SERVER_AD_DC
),y
)
247 CONFIGURE_ARGS
+= --without-winbind
--without-ldb-lmdb
--with-acl-support
249 CONFIGURE_ARGS
+= --without-winbind
--without-ads
--without-ldap
--without-ldb-lmdb
--without-ad-dc \
250 --without-json
--without-libarchive
--disable-python
--nopyc
--nopyo
--without-acl-support
253 SAMBA4_PDB_MODULES
:=pdb_smbpasswd
,pdb_tdbsam
,
254 SAMBA4_AUTH_MODULES
:=auth_builtin
,auth_sam
,auth_unix
,
255 SAMBA4_VFS_MODULES
:=vfs_default
,
256 SAMBA4_VFS_MODULES_SHARED
:=auth_script
,
257 # always build if kernel supports io_uring
258 ifdef CONFIG_KERNEL_IO_URING
259 SAMBA4_VFS_MODULES_SHARED
:=$(SAMBA4_VFS_MODULES_SHARED
)vfs_io_uring
,
261 ifeq ($(CONFIG_SAMBA4_SERVER_VFS
),y
)
262 SAMBA4_VFS_MODULES_SHARED
:=$(SAMBA4_VFS_MODULES_SHARED
)vfs_fruit
,vfs_shadow_copy2
,vfs_recycle
,vfs_fake_perms
,vfs_readonly
,vfs_cap
,vfs_offline
,vfs_crossrename
,vfs_catia
,vfs_streams_xattr
,vfs_xattr_tdb
,vfs_widelinks
,
263 ifeq ($(CONFIG_SAMBA4_SERVER_QUOTAS
),y
)
264 SAMBA4_VFS_MODULES_SHARED
:=$(SAMBA4_VFS_MODULES_SHARED
)vfs_default_quota
,
266 ifdef CONFIG_PACKAGE_kmod-fs-btrfs
267 SAMBA4_VFS_MODULES_SHARED
:=$(SAMBA4_VFS_MODULES_SHARED
)vfs_btrfs
,
270 ifeq ($(CONFIG_SAMBA4_SERVER_VFSX
),y
)
271 SAMBA4_VFS_MODULES_SHARED
:=$(SAMBA4_VFS_MODULES_SHARED
)vfs_virusfilter
,vfs_shell_snap
,vfs_commit
,vfs_worm
,vfs_netatalk
,vfs_dirsort
,vfs_fileid
,
272 ifdef CONFIG_PACKAGE_kmod-fs-xfs
273 SAMBA4_VFS_MODULES_SHARED
:=$(SAMBA4_VFS_MODULES_SHARED
)vfs_linux_xfs_sgid
,
276 ifeq ($(CONFIG_SAMBA4_SERVER_AD_DC
),y
)
277 SAMBA4_PDB_MODULES
:=$(SAMBA4_PDB_MODULES
)pdb_samba_dsdb
,pdb_ldapsam
,
278 SAMBA4_AUTH_MODULES
:=$(SAMBA4_AUTH_MODULES
)auth_samba4
,
279 SAMBA4_VFS_MODULES
:=$(SAMBA4_VFS_MODULES
)vfs_posixacl
,
280 SAMBA4_VFS_MODULES_SHARED
:=$(SAMBA4_VFS_MODULES_SHARED
)vfs_audit
,vfs_extd_audit
,vfs_full_audit
,vfs_acl_xattr
,vfs_acl_tdb
,
281 # vfs_zfsacl needs https://github.com/zfsonlinux/zfs/tree/master/include/sys/zfs_acl.h
282 # vfs_nfs4acl_xattr needs https://github.com/notriddle/libdrpc/blob/master/rpc/xdr.h
285 SAMBA4_MODULES
:=${SAMBA4_VFS_MODULES}${SAMBA4_AUTH_MODULES}${SAMBA4_PDB_MODULES}
286 SAMBA4_MODULES_SHARDED
:=${SAMBA4_VFS_MODULES_SHARED}
289 --with-static-modules
=$(SAMBA4_MODULES
)!DEFAULT
,!FORCED \
290 --with-shared-modules
=$(SAMBA4_MODULES_SHARDED
)!DEFAULT
,!FORCED
292 HOST_CONFIGURE_ARGS
+= \
293 --with-static-modules
=!DEFAULT
,!FORCED \
294 --with-shared-modules
=!DEFAULT
,!FORCED
297 PY_VER
:=$(PYTHON3_VERSION_MAJOR
)$(PYTHON3_VERSION_MINOR
)
298 # NOTE: bundle + make private, we want to avoid version configuration (build, link) conflicts
299 HOST_CONFIGURE_ARGS
+= --builtin-libraries
=replace
--nonshared-binary
=asn1_compile
,compile_et
300 SYSTEM_PRIVATE_BUNDLED_LIBS
:=talloc
,tevent
,tevent-util
,texpect
,tdb
,ldb
,tdr
,cmocka
,replace
,com_err
301 SYSTEM_BUNDLED_LIBS
:=
302 PYTHON_BUNDLED_LIBS
:=pytalloc-util.cpython-
$(PY_VER
),pyldb-util.cpython-
$(PY_VER
)
303 # CONFIGURE_ARGS += --builtin-libraries=talloc,tevent,tevent-util,texpect,tdb,ldb,tdr,cmocka,com_err
304 ifdef CONFIG_KERNEL_IO_URING
305 SYSTEM_BUNDLED_LIBS
:=,uring
307 ifeq ($(CONFIG_SAMBA4_SERVER_AD_DC
),y
)
308 CONFIGURE_ARGS
+= --bundled-libraries
=NONE
,$(SYSTEM_PRIVATE_BUNDLED_LIBS
)$(SYSTEM_BUNDLED_LIBS
),$(PYTHON_BUNDLED_LIBS
)
310 CONFIGURE_ARGS
+= --bundled-libraries
=NONE
,$(SYSTEM_PRIVATE_BUNDLED_LIBS
)$(SYSTEM_BUNDLED_LIBS
)
312 CONFIGURE_ARGS
+= --private-libraries
=$(SYSTEM_PRIVATE_BUNDLED_LIBS
)
314 export COMPILE_ET
=$(STAGING_DIR_HOSTPKG
)/bin
/compile_et_samba
315 export ASN1_COMPILE
=$(STAGING_DIR_HOSTPKG
)/bin
/asn1_compile_samba
316 export PYTHONHASHSEED
=1
318 # make sure we use the hostpkg build toolset and we need to find host 'yapp'
319 HOST_CONFIGURE_VARS
+= \
320 PATH
="$(STAGING_DIR_HOSTPKG)/bin:$(STAGING_DIR_HOSTPKG)/usr/bin:$(PATH)"
322 PATH
="$(STAGING_DIR_HOSTPKG)/bin:$(STAGING_DIR_HOSTPKG)/usr/bin:$(PATH)"
324 # we need hostpkg bin and target config
325 ifeq ($(CONFIG_SAMBA4_SERVER_AD_DC
),y
)
327 PYTHON_CONFIG
="$(STAGING_DIR)/host/bin/$(PYTHON3)-config"
330 # we dont need GnuTLS for the host helpers
332 $(call Host
/Prepare
/Default
)
333 $(SED
) 's,mandatory=True,mandatory=False,g' $(HOST_BUILD_DIR
)/wscript_configure_system_gnutls
334 $(SED
) 's,gnutls_version =.*,gnutls_version = gnutls_min_required_version,g' $(HOST_BUILD_DIR
)/wscript_configure_system_gnutls
335 $(SED
) 's,gnutls_version_str.*,gnutls_version_str = "3.7.7",g' $(HOST_BUILD_DIR
)/wscript_configure_system_gnutls
336 $(SED
) 's,(gnutls_version > .*,(parse_version(gnutls_version) > parse_version("3.6.10")):,g' $(HOST_BUILD_DIR
)/wscript_configure_system_gnutls
337 $(SED
) 's,(gnutls_version < .*,(parse_version(gnutls_version) < parse_version("3.5.2")):,g' $(HOST_BUILD_DIR
)/wscript_configure_system_gnutls
340 (cd
$(HOST_BUILD_DIR
); \
341 .
/buildtools
/bin
/waf build \
342 --targets
=asn1_compile
,compile_et \
347 $(INSTALL_DIR
) $(STAGING_DIR_HOSTPKG
)/bin
/
348 # add host tools suffix, prevent conflicts with krb5
349 $(INSTALL_BIN
) $(HOST_BUILD_DIR
)/bin
/asn1_compile
$(STAGING_DIR_HOSTPKG
)/bin
/asn1_compile_samba
350 $(INSTALL_BIN
) $(HOST_BUILD_DIR
)/bin
/compile_et
$(STAGING_DIR_HOSTPKG
)/bin
/compile_et_samba
354 $(Build
/Prepare
/Default
)
355 ifeq ($(CONFIG_SAMBA4_SERVER_AD_DC
),)
356 # un-bundle dnspython
357 $(SED
) '/"dns.resolver":/d' $(PKG_BUILD_DIR
)/third_party
/wscript
359 $(SED
) '/"iso8601":/d' $(PKG_BUILD_DIR
)/third_party
/wscript
361 ifeq ($(CONFIG_HOST_OS_MACOS
),y
)
362 $(SED
) "/^VERSION=/i sys.platform='linux'" $(PKG_BUILD_DIR
)/buildtools
/bin
/waf
366 define Build
/Configure
367 $(CP
) .
/waf-cross-answers
/$(ARCH
).txt
$(PKG_BUILD_DIR
)/cross-answers.txt
368 echo
'Checking uname sysname type: "$(VERSION_DIST)"' >> $(PKG_BUILD_DIR
)/cross-answers.txt
369 echo
'Checking uname machine type: "$(ARCH)"' >> $(PKG_BUILD_DIR
)/cross-answers.txt
370 echo
'Checking uname release type: "$(LINUX_VERSION)"' >> $(PKG_BUILD_DIR
)/cross-answers.txt
371 echo
'Checking uname version type: "$(VERSION_DIST) Linux-$(LINUX_VERSION) $(shell date +%Y-%m-%d)"' >> $(PKG_BUILD_DIR
)/cross-answers.txt
372 # NOTE: special answers for freeBSD/CircleCI
373 echo
'checking for clnt_create(): OK' >> $(PKG_BUILD_DIR
)/cross-answers.txt
374 $(call Build
/Configure
/Default
)
377 # Build via "waf install", avoid the make wrapper. (Samba logic is 'waf install' = build + install)
379 (cd
$(PKG_BUILD_DIR
); \
380 .
/buildtools
/bin
/waf
install \
381 --jobs
=$(shell nproc
) \
382 --destdir
="$(PKG_INSTALL_DIR)" \
386 # No default install see above
390 define Package
/samba4-libs
/install
391 $(INSTALL_DIR
) $(1)/usr
/lib
392 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/*.so
* $(1)/usr
/lib
/
394 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/samba
$(1)/usr
/lib
/
397 define Package
/samba4-client
/install
398 $(INSTALL_DIR
) $(1)/usr
/bin
399 $(INSTALL_BIN
) $(PKG_INSTALL_DIR
)/usr
/bin
/{cifsdd
,smbclient
,smbget
} $(1)/usr
/bin
/
402 define Package
/samba4-admin
/install
403 $(INSTALL_DIR
) $(1)/usr
/bin
404 $(INSTALL_BIN
) $(PKG_INSTALL_DIR
)/usr
/bin
/{net
,smbcontrol
,profiles
,rpcclient
,dbwrap_tool
} $(1)/usr
/bin
/
405 $(INSTALL_BIN
) $(PKG_INSTALL_DIR
)/usr
/bin
/{ldbadd
,ldbdel
,ldbedit
,ldbmodify
,ldbrename
,ldbsearch
} $(1)/usr
/bin
/
406 $(INSTALL_BIN
) $(PKG_INSTALL_DIR
)/usr
/bin
/{tdbbackup
,tdbdump
,tdbrestore
,tdbtool
} $(1)/usr
/bin
/
407 $(INSTALL_DIR
) $(1)/usr
/sbin
408 $(INSTALL_BIN
) $(PKG_INSTALL_DIR
)/usr
/sbin
/eventlogadm
$(1)/usr
/sbin
/
411 define Package
/samba4-utils
/install
412 $(INSTALL_DIR
) $(1)/usr
/bin
413 $(INSTALL_BIN
) $(PKG_INSTALL_DIR
)/usr
/bin
/{smbstatus
,smbtree
,mvxattr
,smbtar
} $(1)/usr
/bin
/
414 ifeq ($(CONFIG_SAMBA4_SERVER_QUOTAS
),y
)
415 $(INSTALL_BIN
) $(PKG_INSTALL_DIR
)/usr
/bin
/smbcquotas
$(1)/usr
/bin
/
419 define Package
/samba4-server
/install
420 $(INSTALL_DIR
) $(1)/usr
/bin
421 $(INSTALL_BIN
) $(PKG_INSTALL_DIR
)/usr
/bin
/{smbpasswd
,pdbedit
,testparm
} $(1)/usr
/bin
/
422 $(INSTALL_DIR
) $(1)/usr
/sbin
423 $(INSTALL_BIN
) $(PKG_INSTALL_DIR
)/usr
/sbin
/smbd
$(1)/usr
/sbin
/
424 ifeq ($(CONFIG_SAMBA4_SERVER_NETBIOS
),y
)
425 $(INSTALL_BIN
) $(PKG_INSTALL_DIR
)/usr
/sbin
/nmbd
$(1)/usr
/sbin
/
426 $(INSTALL_BIN
) $(PKG_INSTALL_DIR
)/usr
/bin
/nmblookup
$(1)/usr
/bin
/
428 ifeq ($(CONFIG_SAMBA4_SERVER_AD_DC
),y
)
429 $(INSTALL_DIR
) $(1)/usr
/lib
430 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/$(PYTHON3
) $(1)/usr
/lib
/
431 $(INSTALL_DIR
) $(1)/usr
/share
/
432 $(CP
) $(PKG_INSTALL_DIR
)/usr
/share
/samba
$(1)/usr
/share
/
433 # fix wrong hardcoded python3 location
434 $(SED
) '1s,^#!/.*python3.*,#!/usr/bin/python3,' $(PKG_INSTALL_DIR
)/usr
/bin
/samba-tool
435 $(SED
) '1s,^#!/.*python3.*,#!/usr/bin/python3,' $(PKG_INSTALL_DIR
)/usr
/sbin
/{samba-gpupdate
,samba_dnsupdate
,samba_kcc
,samba_spnupdate
,samba_upgradedns
,samba_downgrade_db
}
436 $(INSTALL_BIN
) $(PKG_INSTALL_DIR
)/usr
/bin
/{samba-tool
,ntlm_auth
,oLschema2ldif
} $(1)/usr
/bin
/
437 $(INSTALL_BIN
) $(PKG_INSTALL_DIR
)/usr
/bin
/{sharesec
,smbcacls
} $(1)/usr
/bin
/
438 $(INSTALL_BIN
) $(PKG_INSTALL_DIR
)/usr
/sbin
/{samba
,samba-gpupdate
,samba_dnsupdate
,samba_kcc
,samba_spnupdate
,samba_upgradedns
,samba_downgrade_db
} $(1)/usr
/sbin
/
440 $(INSTALL_DIR
) $(1)/etc
/config
$(1)/etc
/samba
$(1)/etc
/init.d
441 $(INSTALL_CONF
) .
/files
/samba.config
$(1)/etc
/config
/samba4
442 $(INSTALL_DATA
) .
/files
/smb.conf.template
$(1)/etc
/samba
443 $(INSTALL_BIN
) .
/files
/samba.init
$(1)/etc
/init.d
/samba4
446 define Package
/samba4-server
/conffiles
448 /etc
/samba
/smb.conf.template
451 /etc
/samba
/secrets.tdb
452 /etc
/samba
/passdb.tdb
458 $(eval
$(call HostBuild
))
459 $(eval
$(call BuildPackage
,samba4-libs
))
460 $(eval
$(call BuildPackage
,samba4-server
))
461 $(eval
$(call BuildPackage
,samba4-client
))
462 $(eval
$(call BuildPackage
,samba4-admin
))
463 $(eval
$(call BuildPackage
,samba4-utils
))