Участник с: 09 февраля 2019
|
Небольшое руководство для тех, кто не дожидаясь релиза хочет попробовать Samba 4.10 (тем более когда она будет в Arch'е - вопрос сложный, т.к. ту же 4.9.1 приморозили в Testing'е больше чем на месяц без видимых объективных причин). По личным впечатлениям - всё без всяких ошибок вполне нормально работает, начиная с RC3 (более ранние релизы - не проверял). И да, основная killer feature - отказ от Python 2 - работает!
На всё про всё потребуется порядка 30 минут свободного времени.
Необходимо пересобрать четыре пакета: ldb, talloc, tdb, tevent. Они есть в репозитории Arch, но имеют более старые, нежели необходимо для сборки и работы версии, а также собраны с зависимостью от Python 2. Собираем, как обычно, поместив PKGBUILD и сопутствующие патчи (при наличии оных) рядом с ним и запустив: makepkg -s 1. Итак, пакет ldb:
pkgname=ldb
pkgver=1.5.4
pkgrel=1
epoch=1
pkgdesc="A schema-less, ldap like, API and database"
arch=('x86_64')
url="http://ldb.samba.org/"
source=("http://samba.org/ftp/${pkgname}/${pkgname}-${pkgver}.tar.gz")
license=('GPL3')
depends=('talloc' 'tevent' 'tdb' 'popt' 'lmdb')
makedepends=('python' 'cmocka' 'docbook-xsl')
optdepends=('python: for python bindings')
md5sums=('SKIP')
build() {
cd ${srcdir}/${pkgname}-${pkgver}
./configure --prefix=/usr \
--disable-rpath \
--disable-rpath-install \
--bundled-libraries=NONE \
--builtin-libraries=replace \
--with-modulesdir=/usr/lib/ldb/modules \
--with-privatelibdir=/usr/lib/ldb
make
}
package() {
cd ${srcdir}/${pkgname}-${pkgver}
make DESTDIR=${pkgdir}/ install
}
Несмотря на то, текущая версия ldb на данный момент - 1.62, использовать её для сборки не получится - Samba 4.10 требует только версию в диапазоне 1.53-1.54. 2. Следующий пакет - talloc:
pkgname=talloc
pkgver=2.1.16
pkgrel=2
pkgdesc="Hierarchical pool based memory allocator with destructors"
arch=('x86_64')
license=('GPL3')
url="http://talloc.samba.org/"
depends=('glibc')
makedepends=('python' 'docbook-xsl')
optdepends=('python: for python bindings')
source=("http://samba.org/ftp/${pkgname}/${pkgname}-${pkgver}.tar.gz"
'fix_test_path.patch')
sha1sums=('SKIP' 'SKIP')
prepare() {
cd "${srcdir}/${pkgname}-${pkgver}"
# patch -p1 < ../fix_test_path.patch
}
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
./configure --prefix=/usr \
--sysconfdir=/etc/samba \
--localstatedir=/var \
--bundled-libraries=NONE \
--builtin-libraries=replace \
--enable-talloc-compat1
make
}
check() {
cd "${srcdir}/${pkgname}-${pkgver}"
make check
}
package() {
cd "${srcdir}/${pkgname}-${pkgver}"
make DESTDIR="${pkgdir}" install
}
И fix_test_path.patch - патч для для пакета talloc (от стандартного Arch пакета не подойдет, т.к. изменили имена переменных):
--- a/wscript
+++ b/wscript
@@ -181,7 +181,7 @@
ret = samba_utils.RUN_COMMAND(cmd)
print("testsuite returned %d" % ret)
magic_helper_cmd = os.path.join(Context.g_module.out, 'talloc_test_magic_differs_helper')
- magic_cmd = os.path.join(Context.g_module.top, 'lib', 'talloc',
+ magic_cmd = os.path.join(Context.g_module.top,
'test_magic_differs.sh')
if not os.path.exists(magic_cmd):
magic_cmd = os.path.join(Context.g_module.top, 'test_magic_differs.sh')
3. Следующий пакет - tdb:
pkgname=tdb
pkgver=1.3.18
pkgrel=1
pkgdesc="A Trivial Database similar to GDBM but allows simultaneous commits"
arch=(x86_64)
license=('GPL3')
url="http://tdb.samba.org/"
makedepends=('python' 'libxslt' 'docbook-xsl')
optdepends=('python: for python bindings')
source=("http://samba.org/ftp/${pkgname}/${pkgname}-${pkgver}.tar.gz")
md5sums=('SKIP')
build() {
cd ${srcdir}/${pkgname}-${pkgver}
./configure --prefix=/usr \
--localstatedir=/var \
--sysconfdir=/etc/samba
make
}
package() {
cd ${srcdir}/${pkgname}-${pkgver}
make DESTDIR=$pkgdir/ install
}
И файл 0001-tdb-include-include-stdbool.h-in-tdb.h.patch - патч для пакета tdb (можно взять из комплекта стандартного пакета):
From 4e14a437963ba54987cd58b4e0705d9a6d8aea6f Mon Sep 17 00:00:00 2001
From: Adam Williamson <awilliam@redhat.com>
Date: Fri, 23 May 2014 10:08:14 -0700
Subject: [PATCH] tdb/include: include stdbool.h in tdb.h
Commit db5bda56bf08 (tdb: add TDB_MUTEX_LOCKING support) adds a bool, but does
not include stdbool.h. This causes any build including tdb.h to fail, at least
for me with GCC 4.9.0.
---
lib/tdb/include/tdb.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/include/tdb.h b/include/tdb.h
index 5ea5e60..03e429c 100644
--- a/include/tdb.h
+++ b/include/tdb.h
@@ -31,6 +31,7 @@ extern "C" {
#endif
#include <signal.h>
+#include <stdbool.h>
/**
* @defgroup tdb The tdb API
--
1.9.3
4. И, напоследок, tevent:
pkgname=tevent
pkgver=0.9.39
pkgrel=1
epoch=1
pkgdesc="An event system based on the talloc memory management library"
arch=('x86_64')
url="https://tevent.samba.org/"
source=("http://samba.org/ftp/${pkgname}/${pkgname}-${pkgver}.tar.gz")
license=('GPL3')
depends=('talloc')
makedepends=('python')
optdepends=('python: for python bindings')
md5sums=('SKIP')
build() {
cd ${srcdir}/${pkgname}-${pkgver}
./configure --prefix=/usr \
--bundled-libraries=NONE \
--builtin-libraries=replace
}
package() {
cd ${srcdir}/${pkgname}-${pkgver}
make
make DESTDIR=${pkgdir}/ install
}
5. После сборки и установки вышеперечисленных пакетов (по времени - порядка 10 минут) можно приступать к сборке непосредственно самого пакета Samba 4.10. PKGBUILD (зависимости от Python 2, как и для предыдущих пакетов - удалены):
pkgbase=samba
pkgname=('libwbclient' 'smbclient' 'samba')
pkgver=4.10.0rc4
pkgrel=2
arch=(x86_64)
url="http://www.samba.org"
license=('GPL3')
makedepends=('python' 'docbook-xsl' 'pkg-config' 'libbsd' 'db' 'popt' 'libcups'
'readline' 'tevent>=0.9.38' 'acl' 'libldap' 'libcap' 'ldb>=1.1.15' 'krb5' 'pam'
'systemd' 'gamin' 'gnutls>=2.4.1' 'talloc>=2.1.15' 'tdb>=1.3.17' 'dbus' 'libaio'
'perl-parse-yapp' 'libnsl' 'libtirpc' 'rpcsvc-proto' 'jansson')
# _commit=d94c8992f9a2941868aa3438a3fd7096c65c411d
# source=("git+https://github.com/samba-team/samba#commit=$_commit"
source=("http://us1.samba.org/samba/ftp/rc/${pkgbase}-${pkgver}.tar.gz"
'samba.logrotate'
'samba.pam'
'samba.conf')
md5sums=('SKIP' 'SKIP' 'SKIP' 'SKIP')
build() {
# Use samba-pkg as a staging directory for the split packages
# (This is so RPATHS and symlinks are generated correctly via
# make install, but the otherwise unsplit pieces can be split)
_pkgsrc=${srcdir}/samba-pkg
rm -rf ${_pkgsrc}
cd ${srcdir}/samba-${pkgver}
_samba4_idmap_modules=idmap_ad,idmap_rid,idmap_adex,idmap_hash,idmap_tdb2
_samba4_pdb_modules=pdb_tdbsam,pdb_ldap,pdb_ads,pdb_smbpasswd,pdb_wbc_sam,pdb_samba4
_samba4_auth_modules=auth_unix,auth_wbc,auth_server,auth_netlogond,auth_script,auth_samba4
cd ${srcdir}/samba-${pkgver}
./configure --enable-fhs \
--prefix=/usr \
--sysconfdir=/etc \
--sbindir=/usr/bin \
--libdir=/usr/lib \
--libexecdir=/usr/lib/samba \
--localstatedir=/var \
--with-configdir=/etc/samba \
--with-lockdir=/var/cache/samba \
--with-sockets-dir=/var/run/samba \
--with-piddir=/var/run/samba \
--with-ads \
--with-ldap \
--with-winbind \
--with-acl-support \
--with-systemd \
--systemd-install-services \
--enable-gnutls \
--with-pam \
--with-pammodulesdir=/usr/lib/security \
--bundled-libraries=!tdb,!talloc,!pytalloc-util,!tevent,!popt,!ldb,!pyldb-util \
--with-shared-modules=${_samba4_idmap_modules},${_samba4_pdb_modules},${_samba4_auth_modules} \
--disable-rpath-install \
--python=/usr/bin/python3
# Add this to the options once it's working...
#--with-system-mitkrb5 /opt/heimdal
make
make DESTDIR="${_pkgsrc}/" install
# This gets skipped somehow
if [ ! -e ${_pkgsrc}/usr/bin/smbtar ]; then
install -m755 ${srcdir}/samba-${pkgver}/source3/script/smbtar ${_pkgsrc}/usr/bin/
fi
}
package_libwbclient() {
pkgdesc="Samba winbind client library"
depends=('glibc' 'libbsd')
# Use samba-pkg as a staging directory for the split packages
# (This is so RPATHS and symlinks are generated correctly via
# make install, but the otherwise unsplit pieces can be split)
_pkgsrc=${srcdir}/samba-pkg
install -d -m755 ${pkgdir}/usr/lib
mv ${_pkgsrc}/usr/lib/libwbclient*.so* ${pkgdir}/usr/lib/
install -d -m755 ${pkgdir}/usr/lib/samba
mv ${_pkgsrc}/usr/lib/samba/libwinbind-client*.so* ${pkgdir}/usr/lib/samba/
mv ${_pkgsrc}/usr/lib/samba/libreplace-samba4.so* ${pkgdir}/usr/lib/samba/
install -d -m755 ${pkgdir}/usr/lib/pkgconfig
mv ${_pkgsrc}/usr/lib/pkgconfig/wbclient.pc ${pkgdir}/usr/lib/pkgconfig/
install -d -m755 ${pkgdir}/usr/include/samba-4.0
mv ${_pkgsrc}/usr/include/samba-4.0/wbclient.h ${pkgdir}/usr/include/samba-4.0/
}
package_smbclient() {
pkgdesc="Tools to access a server's filespace and printers via SMB"
depends=('popt' 'cifs-utils' 'tdb' "libwbclient>=$pkgver" 'ldb'
'tevent' 'libgcrypt' 'python' 'talloc' 'readline' 'gnutls'
'libbsd' 'libldap' 'libcups' 'gamin' 'libarchive' 'libnsl' 'jansson')
_smbclient_bins=('smbclient' 'rpcclient' 'smbspool'
'smbtree' 'smbcacls' 'smbcquotas' 'smbget' 'net'
'nmblookup' 'smbtar')
# Use samba-pkg as a staging directory for the split packages
# (This is so RPATHS and symlinks are generated correctly via
# make install, but the otherwise unsplit pieces can be split)
_pkgsrc=${srcdir}/samba-pkg
install -d -m755 ${pkgdir}/usr/bin
for bin in ${_smbclient_bins[@]}; do
mv ${_pkgsrc}/usr/bin/${bin} ${pkgdir}/usr/bin/
done
# smbclient binaries link to the majority of the samba
# libs, so this is a shortcut instead of resolving the
# whole dependency tree by hand
install -d -m755 ${pkgdir}/usr/lib
for lib in ${_pkgsrc}/usr/lib/lib*.so*; do
mv ${lib} ${pkgdir}/usr/lib/
done
install -d -m755 ${pkgdir}/usr/lib/samba
for lib in ${_pkgsrc}/usr/lib/samba/lib*.so*; do
mv ${lib} ${pkgdir}/usr/lib/samba/
done
install -d -m755 ${pkgdir}/usr/lib/pkgconfig
mv ${_pkgsrc}/usr/lib/pkgconfig/smbclient.pc ${pkgdir}/usr/lib/pkgconfig/
mv ${_pkgsrc}/usr/lib/pkgconfig/netapi.pc ${pkgdir}/usr/lib/pkgconfig/
install -d -m755 ${pkgdir}/usr/share/man/man1
install -d -m755 ${pkgdir}/usr/share/man/man7
install -d -m755 ${pkgdir}/usr/share/man/man8
for bin in ${_smbclient_bins[@]}; do
if [ -e ${_pkgsrc}/usr/share/man/man1/${bin}.1 ]; then
mv ${_pkgsrc}/usr/share/man/man1/${bin}.1 ${pkgdir}/usr/share/man/man1/
fi
if [ -e ${_pkgsrc}/usr/share/man/man8/${bin}.8 ]; then
mv ${_pkgsrc}/usr/share/man/man8/${bin}.8 ${pkgdir}/usr/share/man/man8/
fi
done
mv ${_pkgsrc}/usr/share/man/man7/libsmbclient.7 ${pkgdir}/usr/share/man/man7/
install -d -m755 ${pkgdir}/usr/include/samba-4.0
mv ${_pkgsrc}/usr/include/samba-4.0/libsmbclient.h ${pkgdir}/usr/include/samba-4.0/
mv ${_pkgsrc}/usr/include/samba-4.0/netapi.h ${pkgdir}/usr/include/samba-4.0/
mkdir -p ${pkgdir}/usr/lib/cups/backend
ln -sf /usr/bin/smbspool ${pkgdir}/usr/lib/cups/backend/smb
}
package_samba() {
pkgdesc="SMB Fileserver and AD Domain server"
depends=('db>=4.7' 'popt' 'libcups' 'libcap>=2.16' 'gamin' 'gnutls>=2.4.1'
'talloc' 'ldb' 'libbsd' 'python' 'iniparser' 'tdb' 'libaio' 'perl-parse-yapp' "smbclient>=$pkgver" 'gpgme')
backup=(etc/logrotate.d/samba
etc/pam.d/samba
etc/samba/smb.conf
etc/xinetd.d/swat
etc/conf.d/samba)
# Use samba-pkg as a staging directory for the split packages
# (This is so RPATHS and symlinks are generated correctly via
# make install, but the otherwise unsplit pieces can be split)
_pkgsrc=${srcdir}/samba-pkg
# Everything that libwbclient and smbclient didn't install goes
# into the samba package...
mv ${_pkgsrc}/* ${pkgdir}/
rmdir ${_pkgsrc}
# packaging/wscript_build to use /etc/conf.d
sed -i -e '/^EnvironmentFile/ s/sysconfig/conf.d/' "${pkgdir}"/usr/lib/systemd/system/*.service
install -d -m755 "${pkgdir}"/etc/conf.d
install -m644 "${srcdir}"/samba-${pkgver}/packaging/systemd/samba.sysconfig "${pkgdir}"/etc/conf.d/samba
# create ephemeral dirs via tmpfiles rather than shipping them in package
install -D -m644 ${srcdir}/samba.conf ${pkgdir}/usr/lib/tmpfiles.d/samba.conf
# create config dir
install -d -m755 ${pkgdir}/etc/samba
mkdir -p ${pkgdir}/etc/samba/private
chmod 700 ${pkgdir}/etc/samba/private
install -D -m644 ${srcdir}/samba.logrotate ${pkgdir}/etc/logrotate.d/samba
install -D -m644 ${srcdir}/samba.pam ${pkgdir}/etc/pam.d/samba
# spool directory
install -d -m1777 ${pkgdir}/var/spool/samba
rm -rf ${pkgdir}/var/run
rm -rf ${pkgdir}/etc/sysconfig
# copy ldap example
install -D -m644 ${srcdir}/samba-${pkgver}/examples/LDAP/samba.schema ${pkgdir}/usr/share/doc/samba/examples/LDAP/samba.schema
}
Для его сборки кроме PKGBUILD также необходимы еще 3 файла: samba.conf, samba.logrotate и samba.pam. Взять их можно либо от оригинального пакета, либо ниже: samba.conf:
D /run/samba 0755 - - -
d /var/log/samba 0755 - - -
samba.logrotate:
/var/log/samba/log.smbd /var/log/samba/log.nmbd /var/log/samba/*.log {
notifempty
missingok
copytruncate
}
samba.pam:
auth required pam_unix.so
account required pam_unix.so
session required pam_unix.so
Собираем, устанавливаем, перезагружаемся (необязательно), проверяем логи, etc. Поверх установленной 4.9.4 встала нормально, подхватив существующий конфиг. После, в случае если Python 2 уже никому не нужен, можно его с чистой совестью удалить (что я у себя и сделал).
Offtopic. Столкнулся с очередной "шюткой юмора" maintener'ов Arch - Skype цепляется за пакет Gconf (что вполне себе задокументировано), а вот Arch'евский пакет Gconf, с какого-то перепугу цепляется за Python 2... При чем - в виде обязательной зависимости. Зачем - непонятно. Ни Gnome.org, ни LFS на данный вопрос ответа не дали. В общем пришлось и его пересобирать.
|