Actualitzant a Samba 4.8 a una xarxa amb FreeBSD 12.0-STABLE i la Raspberry Pi

Actualitzant a Samba 4.8 a una xarxa amb FreeBSD 12.0-STABLE i la Raspberry Pi

En aquest article explique com instal·lar Samba 4.8 a FreeBSD 12.0-STABLE per a compartir directoris de manera centralitzada a la teua xarxa.

A casa tinc un núvol domèstic que comparteix directoris amb documents (fotos, música, pelis, etc) a qualsevol dispositiu informàtic, ja siga aquest una tauleta electrònica, un telèfon intel·ligent, un ordinador, un portàtil, etc. Ara fa un parell d'anys vaig decidir abandonar els núvols comercials i muntar-me el meu propi núvol amb BSD amb dos discs de 4TB cadascú i que es sincronitzen cada 12 hores, i estic més content que Rita Barberà a un after hours.

El primer que cal que sàpigues és que per a l'arquitectura Armv6 hi ha versions per a la Raspberry Pi B i la Raspberry Pi 2 amb armv6 (versions 11.3-STABLE, 12.0-STABLE i 13.0-CURRENT) a ftp://ftp.freebsd.org/pub/FreeBSD/snapshots/arm/armv6/ISO-IMAGES/, i de l'arquitectura Armv7 hi ha la Imatge FreeBSD 12.0-STABLE Armv7 i també la imatge FreeBSD 13.0-CURRENT Armv7.

I bo, jo sé que sóc un poc proselitista, però et recomane tenir un servidor domèstic simplement amb una Raspberry Pi i FreeBSD com ja vaig comentar en aquest article. BSD rocks!

Per a començar a instal·lar (o actualitzar Samba 4.8) actualitzem les fonts dels paquets:

root@generic:/home/freebsd # pkg update
Updating FreeBSD repository catalogue...
Fetching meta.txz: 100% 944 B 0.9kB/s 00:01
Fetching packagesite.txz: 100% 6 MiB 400.3kB/s 00:15
Processing entries: 100%
FreeBSD repository update completed. 28910 packages processed.
All repositories are up to date.

Cercarem quines versions del servidor Samba tenim disponibles:

root@generic:/home/freebsd # pkg search samba
p5-Samba-LDAP-0.05_2 Manage a Samba PDC with an LDAP Backend
p5-Samba-SIDhelper-0.0.0_3 Create SIDs based on G/UIDs
samba-nsupdate-9.13.3_1 nsupdate utility with GSS-TSIG support
samba410-4.10.5 Free SMB/CIFS and AD/DC server and client for Unix
samba46-4.6.16_3 Free SMB/CIFS and AD/DC server and client for Unix
samba47-4.7.12_2 Free SMB/CIFS and AD/DC server and client for Unix
samba48-4.8.12_3 Free SMB/CIFS and AD/DC server and client for Unix
root@generic:/home/freebsd #

Actualitzant a Samba 4.8 a una xarxa amb FreeBSD 12.0-STABLE i la Raspberry Pi

En el meu cas, instal·laré la última versió, la samba48-4.8.12_3, amb:

root@generic:/home/freebsd # pkg install samba48-4.8.12_3
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
Updating database digests format: 100%
The following 35 package(s) will be affected (of 0 checked):
New packages to be INSTALLED:
samba48: 4.8.12_3
libsunacl: 1.0.1
cmocka: 1.1.3
gnutls: 3.6.8
trousers: 0.3.14_2
tpm-emulator: 0.7.4_2
gmp: 6.1.2_1
indexinfo: 0.3.1
p11-kit: 0.23.16.1
libtasn1: 4.13_1
ca_root_nss: 3.45
libffi: 3.2.1_3
nettle: 3.4.1_1
libidn2: 2.2.0
libunistring: 0.9.10_1
gettext-runtime: 0.20.1
openldap-client: 2.4.48
python27: 2.7.16_1
readline: 8.0.0
py27-dnspython: 1.16.0
py27-setuptools: 41.0.1
py27-iso8601: 0.1.12
popt: 1.16_2
libinotify: 20180201_1
jansson: 2.12
gamin: 0.1.10_10
glib: 2.56.3_5,1
libxml2: 2.9.9
python36: 3.6.9
pcre: 8.43_1
libiconv: 1.14_11
libarchive: 3.3.3,1
expat: 2.2.6_1
lzo2: 2.10_1
liblz4: 1.9.1,1
Number of packages to be installed: 35
The process will require 403 MiB more space.
70 MiB to be downloaded.
Proceed with this action? [y/N]: y
[1/35] Fetching samba48-4.8.12_3.txz: 100% 31 MiB 421.6kB/s 01:16
[2/35] Fetching libsunacl-1.0.1.txz: 100% 6 KiB 6.5kB/s 00:01
[3/35] Fetching cmocka-1.1.3.txz: 100% 30 KiB 31.0kB/s 00:01
[4/35] Fetching gnutls-3.6.8.txz: 100% 2 MiB 391.4kB/s 00:06
[5/35] Fetching trousers-0.3.14_2.txz: 100% 404 KiB 413.2kB/s 00:01
[6/35] Fetching tpm-emulator-0.7.4_2.txz: 100% 100 KiB 102.4kB/s 00:01
[7/35] Fetching gmp-6.1.2_1.txz: 100% 382 KiB 390.7kB/s 00:01
[8/35] Fetching indexinfo-0.3.1.txz: 100% 5 KiB 5.5kB/s 00:01
[9/35] Fetching p11-kit-0.23.16.1.txz: 100% 362 KiB 370.7kB/s 00:01
[10/35] Fetching libtasn1-4.13_1.txz: 100% 595 KiB 304.4kB/s 00:02
[11/35] Fetching ca_root_nss-3.45.txz: 100% 294 KiB 301.4kB/s 00:01
[12/35] Fetching libffi-3.2.1_3.txz: 100% 31 KiB 31.6kB/s 00:01
[13/35] Fetching nettle-3.4.1_1.txz: 100% 1 MiB 400.6kB/s 00:03
[14/35] Fetching libidn2-2.2.0.txz: 100% 103 KiB 105.1kB/s 00:01
[15/35] Fetching libunistring-0.9.10_1.txz: 100% 479 KiB 490.4kB/s 00:01
[16/35] Fetching gettext-runtime-0.20.1.txz: 100% 143 KiB 146.6kB/s 00:01
[17/35] Fetching openldap-client-2.4.48.txz: 100% 981 KiB 502.2kB/s 00:02
[18/35] Fetching python27-2.7.16_1.txz: 100% 11 MiB 345.2kB/s 00:32
[19/35] Fetching readline-8.0.0.txz: 100% 326 KiB 333.4kB/s 00:01
[20/35] Fetching py27-dnspython-1.16.0.txz: 100% 177 KiB 181.7kB/s 00:01
[21/35] Fetching py27-setuptools-41.0.1.txz: 100% 476 KiB 243.8kB/s 00:02
[22/35] Fetching py27-iso8601-0.1.12.txz: 100% 12 KiB 12.1kB/s 00:01
[23/35] Fetching popt-1.16_2.txz: 100% 58 KiB 59.5kB/s 00:01
[24/35] Fetching libinotify-20180201_1.txz: 100% 22 KiB 22.6kB/s 00:01
[25/35] Fetching jansson-2.12.txz: 100% 34 KiB 34.9kB/s 00:01
[26/35] Fetching gamin-0.1.10_10.txz: 100% 46 KiB 47.5kB/s 00:01
[27/35] Fetching glib-2.56.3_5,1.txz: 100% 3 MiB 328.1kB/s 00:09
[28/35] Fetching libxml2-2.9.9.txz: 100% 760 KiB 259.5kB/s 00:03
[29/35] Fetching python36-3.6.9.txz: 100% 15 MiB 459.2kB/s 00:34
[30/35] Fetching pcre-8.43_1.txz: 100% 1 MiB 264.3kB/s 00:04
[31/35] Fetching libiconv-1.14_11.txz: 100% 593 KiB 303.7kB/s 00:02
[32/35] Fetching libarchive-3.3.3,1.txz: 100% 653 KiB 222.8kB/s 00:03
[33/35] Fetching expat-2.2.6_1.txz: 100% 98 KiB 100.3kB/s 00:01
[34/35] Fetching lzo2-2.10_1.txz: 100% 94 KiB 96.5kB/s 00:01
[35/35] Fetching liblz4-1.9.1,1.txz: 100% 121 KiB 123.6kB/s 00:01
Checking integrity... done (0 conflicting)
[1/35] Installing indexinfo-0.3.1...
[1/35] Extracting indexinfo-0.3.1: 100%
[2/35] Installing gmp-6.1.2_1...
[2/35] Extracting gmp-6.1.2_1: 100%
[3/35] Installing libffi-3.2.1_3...
[3/35] Extracting libffi-3.2.1_3: 100%
[4/35] Installing gettext-runtime-0.20.1...
[4/35] Extracting gettext-runtime-0.20.1: 100%
[5/35] Installing readline-8.0.0...
[5/35] Extracting readline-8.0.0: 100%
[6/35] Installing tpm-emulator-0.7.4_2...
===> Creating groups.
Creating group '_tss' with gid '601'.
===> Creating users
Creating user '_tss' with uid '601'.
[6/35] Extracting tpm-emulator-0.7.4_2: 100%
[7/35] Installing libtasn1-4.13_1...
[7/35] Extracting libtasn1-4.13_1: 100%
[8/35] Installing ca_root_nss-3.45...
[8/35] Extracting ca_root_nss-3.45: 100%
[9/35] Installing libunistring-0.9.10_1...
[9/35] Extracting libunistring-0.9.10_1: 100%
[10/35] Installing python27-2.7.16_1...
[10/35] Extracting python27-2.7.16_1: 100%
[11/35] Installing libxml2-2.9.9...
[11/35] Extracting libxml2-2.9.9: 100%
[12/35] Installing python36-3.6.9...
[12/35] Extracting python36-3.6.9: 100%
[13/35] Installing pcre-8.43_1...
[13/35] Extracting pcre-8.43_1: 100%
[14/35] Installing libiconv-1.14_11...
[14/35] Extracting libiconv-1.14_11: 100%
[15/35] Installing trousers-0.3.14_2...
===> Creating groups.
Using existing group '_tss'.
===> Creating users
Using existing user '_tss'.
[15/35] Extracting trousers-0.3.14_2: 100%
[16/35] Installing p11-kit-0.23.16.1...
[16/35] Extracting p11-kit-0.23.16.1: 100%
[17/35] Installing nettle-3.4.1_1...
[17/35] Extracting nettle-3.4.1_1: 100%
[18/35] Installing libidn2-2.2.0...
[18/35] Extracting libidn2-2.2.0: 100%
[19/35] Installing py27-setuptools-41.0.1...
[19/35] Extracting py27-setuptools-41.0.1: 100%
[20/35] Installing glib-2.56.3_5,1...
[20/35] Extracting glib-2.56.3_5,1: 100%
No schema files found: doing nothing.
[21/35] Installing expat-2.2.6_1...
[21/35] Extracting expat-2.2.6_1: 100%
[22/35] Installing lzo2-2.10_1...
[22/35] Extracting lzo2-2.10_1: 100%
[23/35] Installing liblz4-1.9.1,1...
[23/35] Extracting liblz4-1.9.1,1: 100%
[24/35] Installing libsunacl-1.0.1...
[24/35] Extracting libsunacl-1.0.1: 100%
[25/35] Installing cmocka-1.1.3...
[25/35] Extracting cmocka-1.1.3: 100%
[26/35] Installing gnutls-3.6.8...
[26/35] Extracting gnutls-3.6.8: 100%
[27/35] Installing openldap-client-2.4.48...
[27/35] Extracting openldap-client-2.4.48: 100%
[28/35] Installing py27-dnspython-1.16.0...
[28/35] Extracting py27-dnspython-1.16.0: 100%
[29/35] Installing py27-iso8601-0.1.12...
[29/35] Extracting py27-iso8601-0.1.12: 100%
[30/35] Installing popt-1.16_2...
[30/35] Extracting popt-1.16_2: 100%
[31/35] Installing libinotify-20180201_1...
[31/35] Extracting libinotify-20180201_1: 100%
[32/35] Installing jansson-2.12...
[32/35] Extracting jansson-2.12: 100%
[33/35] Installing gamin-0.1.10_10...
[33/35] Extracting gamin-0.1.10_10: 100%
[34/35] Installing libarchive-3.3.3,1...
[34/35] Extracting libarchive-3.3.3,1: 100%
[35/35] Installing samba48-4.8.12_3...
[35/35] Extracting samba48-4.8.12_3: 100%

A continuació, editarem el fitxer /etc/rc.conf i afegirem:

tcsd_enable="YES"
tcsd_mode="emulator"
tpmd_enable="YES"

I editarem afegirem /boot/loader.conf:

fuse_load="YES"

Per defecte, sempre faig les instal·lacions d'OpenBSD o FreeBSD (o Windows o GNU/Linux) amb una IP dinàmica mitjançant DHCP, però després ja em configure les IPs de manera estàtica. Configurarem la IP estàtica a FreeBSD editant el fitxer /etc/rc.conf i afegint:

ifconfig_ue0="inet 192.168.1.2 netmask 255.255.255.0"
defaultrouter="192.168.1.1"

També afegirem en aquest fitxter /etc/rc.conf la configuració horaria amb el protocol NTP:

ntpdate_enable="YES"
ntpdate_program="ntpdate"
ntpdate_flags="-b timeserver.org"

I també afegirem a /etc/rc.conf la següent línia per tal d'arrencar el servidor Samba 4.8 quan iniciem la Raspberry Pi:

samba_server_enable="YES"

I bé, ara arriba el moment més important: la configuració del nostre servidor. Ací és on li direm quins directoris volem compartir a la nostra xarxa. En el meu cas compartisc el disc dur número 1 de 4TB (el segon disc es sincronitza cada 12 hores per a tenir sempre una còpia de seguretat dels fitxers del disc 1) , l'arrel del servidor web així puc editar les pàgines fàcilment des de qualsevol ordinador i el home de cada usuari.

Tal i com ens recomana l'ajuda que ens apareix al terminal després d'instal·lar Samba, editem el fitxer /usr/local/etc/smb4.conf i ací configurarem el nostre servidor:

[global]
workgroup = WORKGROUP
server string = Server
security = user
encrypt passwords = yes
max log size = 500
preferred master = yes
hosts allow = 192.168.1.
interfaces = ue0 wlan0
bind interfaces only = yes
socket options = TCP_NODELAY
max protocol = SMB2
ntlm auth = yes
inherit permissions = yes
[homes]
comment = User Home
browseable = no
writeable = yes
directory mask = 0700
create mask = 0700
[disc1]
comment = Disc1
path = /mnt/disc1
public = no
browseable = yes
writeable = yes
write list = @joan
directory mask = 0775
create mask = 0775
valid users = root joan
[www]
comment = Web Root
path = /usr/local/www
public = no
writeable = yes
write list = @joan
directory mask = 0775
create mask = 0775

Per a que un usuari puga accedir, primer de tot ha d'existir a la màquina FreeBSD que fa de servidor. Els usuaris es creen amb l'ordre adduser

I a continuació, els usuaris s'han de crear a Samba amb:

doas pdbedit -a -u joan

Per a saber l'estat del nostre servidor Samba:

root@benicassim:/home/joan # smbstatus
Samba version 4.8.12
PID Username Group Machine Protocol Version Encryption Signing
----------------------------------------------------------------------------------------------------------------------------------------
Service pid Machine Connected at Encryption Signing
---------------------------------------------------------------------------------------------
/var/db/samba4/locking.tdb not initialised
This is normal if an SMB client has never connected to your server.

Si volem llistar tots els usuaris de Samba, farem:

[joan@benicassim ~]$ doas pdbedit -L
Password:

Si volem llistar tots els usuaris de Samba, però tindre tota la informació (grupos, la data de creació, la ruta, etc, haurem d'afegir el paràmetre -v (verbose) de la següent manera:

[joan@benicassim ~]$ doas pdbedit -L -v
Password:

I bé, bàsicament ja tenim un servidor Samba per a centralitzar i compartir fitxers a la teua xarxa local. Al meu OpenBSD amb l'explorador de fitxers pcmanfm queda així:

Actualitzant a Samba 4.8 a una xarxa amb FreeBSD 12.0-STABLE i la Raspberry Pi

Finalment, has de saber que sempre iniciarem i aturarem el servidor Samba amb:

# /usr/local/etc/rc.d/samba_server stop
# /usr/local/etc/rc.d/samba_server start
Performing sanity check on Samba configuration: OK

I podrem saber l'estructura dels directoris que estem compartint amb la utilitat smbtree de Samba:

$ smbtree
Unable to initialize messaging context
WORKGROUP
\\TERRA Server
\\TERRA\IPC$ IPC Service (Server)
\\TERRA\www Web Root
\\TERRA\disc1 Disc1
\\BENICASSIM Server
\\BENICASSIM\IPC$ IPC Service (Server)
\\BENICASSIM\www Web Root
\\BENICASSIM\disc1 Disc1
$

Doncs bé això és tot, espere que trobes útil aquest article i que et motive a compartir els teus trucs, els teus coneixements i els teus experiments amb el Programari Lliure. Pensa-ho, va, que la Comunitat del Programari Lliure va creixent gràcies a la documentació, el disseny, la formació o la programació, sigues part de la Comunitat :-)

La cultura i la lliure circulació de les idees és l'arma més efectiva contra les dictadures del pensament i contra la ignorància.