Небольшое руководство для тех, кто не дожидаясь релиза хочет попробовать 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 <[email protected]>
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 на данный вопрос ответа не дали. В общем пришлось и его пересобирать.
Тестовое сообщение.

2 lampslave: Спасибо! Похоже таки заработало.
File-roller-tmp. В отличие от стандартного File Roller'а сохраняет временные файлы в /tmp а не в .cache, что получается и секьюрнее, и шустрее, и полезнее для SSD (ежели он используется).
Скрипт - можно:
https://wiki.archlinux.org/index.php/Sudo#Sudoers_default_file_permissions

Запустить скрипт при помощи systemd:
https://askubuntu.com/questions/919054/how-do-i-run-a-single-command-at-startup-using-systemd

Чтобы оба условия (именно демон и именно из-под sudoers) - не знаю, не пробовал, по отдельности - работает.
Обновление libvncserver до версии 0.9.12 - кривое. Использую совместно с ним x11vnc. Обновились эти пакеты после длительного периода затишья практически одновременно. После обновления сессии начали зависать, после убийства x11vnc отказывался стартовать с ошибкой, лечилось только перезагрузкой. Вначале откатил x11vnc - не помогло, после отката libvncserver до версии 0.9.11-3 все стало опять нормально работать. Взять старую версию можно как обычно в archive.archlinux.org и приморозить, либо собрать самому с другим именем, дабы pacman не ругался - тут уж кому как удобнее.
2 redix: Как было "когда-то" - не знаю, врать не буду. Последний раз, когда пришлось chroot'иться из Zen Installer'а (сборка от 2018.05.13) делал именно так, как описал.
2 Vadim: [Solved] Cinnamon Pulse Audio removal
2 nafanja: Ну так и сделано ;) А тем кто хочет "большой и чистой любви" - localmodconfig в руки.

2 Vadim: К слову сказать NetworkManager - это глючная поделка команды Gnome.org и к Поттерингу отношения не имеет. Ежели же Вам мешает жить именно pulseaudio то выкусить его можно собрав пакет-заглушку, замещающий libpulse и pulseaudio. Cinnamon после этого работает, только ругается на апплет регулировки уровня громкости при загрузке.

Если же хотите заморочиться и вынести все подчистую - по'grep'айте на предмет упоминаний libpulse исходники cinnamon-desktop и cinnamon-settings-daemon по поводу pulseaudio-alsa. Может еще чего за компанию выкусить придется. Но ничего экстраординарного в этом нет.
OSKiller
Это - уже упоминавшийся выше Zen…
Пришлось заюзать его на новой работе для экономии времени… Виноват, в общем-то, сам, поскольку до этого с UEFI дела не имел - выбрал авторазбивку диска, и, в результате, вся система на одном разделе…
Второй минус - в консоли невозможно залогиниться под рутом: говорит, что неправильный пароль… В терминале в иксах и в софте - нормально всё…
В Zen Installer'е по умолчанию пароль root'а не задан. Так что сначала:
$ sudo passwd root
А потом все прекрасно под ним логинится.
P.S. Прошу прощения за возможный некропостинг.
nafanja
сканируется железо и по базе соответствий железо=модуль подтягиваются модули
Угу. И таким образом мы получаем поддержку только того железа, которое было на момент инсталляции. А дальше необходимо каждый раз сканировать hw на предмет появления чегой-то нового и в случае необходимости радостно сообщать пользователю: "Обнаружено новое оборудование. Вставьте диск с Windo... Ой, Linux". Так? ;-) Опять-таки, есть ядрёные модули всяких виртуальных cryptofs. Как определять, нужны они юзеру, или нет?
P.S. С Вашим инсталл-скриптом - не знаком.