CIFS et 4.0c|d|e sur Ubuntu 12.04

cancel
Showing results for 
Search instead for 
Did you mean: 
mpintor
Member II

CIFS et 4.0c|d|e sur Ubuntu 12.04

Bonjour, j'étudie actuellement Alfresco et, après quelques déboires pour installer la version communautaire sur Ubuntu 12.04, j'en suis à chercher à faire fonctionner le file-server avec CIFS. Il semble que je ne sois pas le 1er à chercher, et quoi que j'essaie d'après la doc ou les posts sur les forums, je ne parviens à rien sur mon réseau…  :?

La configuration est donc la suivante :
o  Alfresco 4.0c ou d ou e
o  tomcat 6.0.35

Mon ./tomcat/webapps/alfresco/WEB-INF/classes/alfresco/subsystems/fileServers/default/file-servers.properties, pratiquement de décoffrage, contient :
# Alfresco filesystem context
filesystem.name=Alfresco
filesystem.acl.global.defaultAccessLevel=

# AVM filesystem context
filesystem.avm.name=AVM
filesystem.avm.enabled=true
# virtual view stores filter can be any of the following: normal, site, staging, author, preview
filesystem.avm.stores=site,staging,author
       
### Root directory to open onto ###
filesystem.storeName=${spaces.store}
filesystem.rootPath=${protocols.rootPath}

# ALF-3856
# File name patterns that trigger rename shuffle detection
filesystem.renameShufflePattern=(.*\\.tmp)|(.*\\.wbk)|(.*\\.bak)|(.*\\~)

# Should we ever set the read only flag on folders? This may cause problematic
# behaviour in Windows clients. See ALF-6727.
filesystem.setReadOnlyFlagOnFolders=false

### CIFS Server Configuration ###
cifs.enabled=true
cifs.serverName=${localname}
cifs.domain=myDomain
cifs.broadcast=255.255.255.255
# An empty value indicates bind to all available network adapters
cifs.bindto=
cifs.ipv6.enabled=false
cifs.hostannounce=true
# Enable the use of asynchronous sockets/NIO code
cifs.disableNIO=false
# Disable the use of JNI code. Only currently affects Windows
cifs.disableNativeCode=false
# Session timeout, in seconds. Defaults to 15 minutes, to match the default Windows client setting.
# If no I/O is received within that time the session is closed by the server
cifs.sessionTimeout=900

# Can be mapped to non-privileged ports, then use firewall rules to forward requests from the standard ports
cifs.tcpipSMB.port=445
cifs.netBIOSSMB.sessionPort=139
cifs.netBIOSSMB.namePort=137
cifs.netBIOSSMB.datagramPort=138

# Optional WINS server primary and secondary IP addresses. Ignored if autoDetectEnabled=true
cifs.WINS.autoDetectEnabled=true
#cifs.WINS.primary=1.2.3.4
#cifs.WINS.secondary=5.6.7.8

# CIFS session debug flags (also enable org.alfresco.fileserver=debug logging level)
# Comma delimeted list of levels :-
#    NETBIOS, STATE, RXDATA, TXDATA, DUMPDATA, NEGOTIATE, TREE, SEARCH, INFO, FILE, FILEIO, TRANSACT
#    ECHO, ERROR, IPC, LOCK, PKTTYPE, DCERPC, STATECACHE, TIMING, NOTIFY, STREAMS, SOCKET, PKTPOOL
#    PKTSTATS, THREADPOOL, BENCHMARK
cifs.sessionDebug=

# Big Switch, are the Desktop Actions and URL shortcuts shown for CIFS ?
cifs.pseudoFiles.enabled=true

# CIFS URL for alfresco explorer
cifs.pseudoFiles.explorerURL.enabled=true
cifs.pseudoFiles.explorerURL.fileName=__Alfresco.url

# Cifs URL for alfresco share
cifs.pseudoFiles.shareURL.enabled=false
cifs.pseudoFiles.shareURL.fileName=__Share.url
Je n'ai pas mis la suite qui comprend les parties concernant FTP, NFS, cluster… que je n'ai absolument pas touchées.

alfresco est démarré en tant que root, je ne pense pas avoir à jouer de l'iptables pour la translation des port numbers…

Avant d'indiquer mon domaine (ici myDomain), je trouvais dans catalina.out :
2012-08-17 17:29:39,557  WARN  [org.alfresco.fileserver] [main] CIFS, Unable to get local domain/workgroup name, using default of WORKGROUP. This may be due to firewall settings or incorrect <broadcast> setting)
2012-08-17 17:29:39,632  ERROR [org.alfresco.fileserver] [CIFS Server] [SMB] Server error : org.alfresco.jlan.server.config.InvalidConfigurationException: Error initializing TCP-IP SMB session handler, Address already in use
2012-08-17 17:29:39,641  ERROR [org.alfresco.fileserver] [CIFS Server] Error from JLAN
org.alfresco.jlan.server.config.InvalidConfigurationException: Error initializing TCP-IP SMB session handler, Address already in use
        at org.alfresco.jlan.smb.server.nio.NIOCifsConnectionsHandler.initializeHandler(NIOCifsConnectionsHandler.java:259)
        at org.alfresco.jlan.smb.server.SMBServer.run(SMBServer.java:475)
        at java.lang.Thread.run(Thread.java:662)
Je trouvais ça encourageant, pensant qu'il était suffisant de préciser que mon domaine était myDomain, mais quand même ce "Address already in use" me chiffonnait un tantisoit, c'est peu de le lire puisque l'ERROR est là !

Je précise que mon serveur partage déjà des dossiers via Samba, et que ça fonctionne nominalement de ce côté-là.
J'ai donc précisé la ligne cifs.domain comme on le voit ci-dessus, et j'avais alors dans catalina.out :
2012-08-17 17:40:39,846  ERROR [org.alfresco.fileserver] [CIFS Server] [SMB] Server error : org.alfresco.jlan.server.config.InvalidConfigurationException: Error initializing TCP-IP SMB session handler, Address already in use
2012-08-17 17:40:39,859  ERROR [org.alfresco.fileserver] [CIFS Server] Error from JLAN
org.alfresco.jlan.server.config.InvalidConfigurationException: Error initializing TCP-IP SMB session handler, Address already in use
        at org.alfresco.jlan.smb.server.nio.NIOCifsConnectionsHandler.initializeHandler(NIOCifsConnectionsHandler.java:259)
        at org.alfresco.jlan.smb.server.SMBServer.run(SMBServer.java:475)
        at java.lang.Thread.run(Thread.java:662)
Same player shoots again, au WARN sur le nom de domaine près, ce qui fait un poil avancer les choses.

J'ai donc arrêté Samba sur la machine (smbd, nmbd, winbindd) et relancé Alfresco, et  catalina.out ne dit plus rien au sujet de CIFS !!!
Je trouve juste :
2012-08-17 18:16:47,952  INFO  [management.subsystems.ChildApplicationContextFactory] [main] Starting 'fileServers' subsystem, ID: [fileServers, default]
2012-08-17 18:16:50,177  INFO  [management.subsystems.ChildApplicationContextFactory] [main] Startup of 'fileServers' subsystem, ID: [fileServers, default] complete
Mais aucun partage sur le réseau…  :cry:

Et si d'aventure, je tente alors de lancer Samba, je trouve comme par hasard dans /var/log/samba/log.smbd un certain nombre d'insultes similaires à :
lib/util_sock.c:667(open_socket_in)
  bind failed on port 445 socket_addr = 0.0.0.0.
  Error = Address already in use
Y aurait-il comme une incompatibilité d'humeur entre Alfresco (du moins version communautaire) et Samba ?

Qu'ai-je raté ?!

Toute aide, piste, réponse exhaustive sera très appréciée.  Smiley Happy

PS : que cifs.bindto soit valué à l'adresse IP de la machine ne change pas la donne.
4 Replies
mpintor
Member II

Re: CIFS et 4.0c|d|e sur Ubuntu 12.04

On avance… mais ça ressemble vraiment à un parcours du combattant, il faut le vouloir cet alfresco…  :roll:

En papillonnant encore sur le net, je suis tombé sur cet article de 2009 : Alfresco and CIFS troubleshooting on Ubuntu, rédigé par Helene Klungvik.

Sa très intéressante lecture confirme d'autres similaires sur le sujet : que vous lanciez alfresco en tant que root ou non, si vous escomptez mettre en œuvre CIFS vous DEVEZ jouer sur les ports, ce n'est pas une option pour Linux et MacOS, c'est obligatoire !

Et donc, à preuve du contraire, les deux premières phrases qu'on peut lire ici ou est donc simplement fausses (au moins pour Ubuntu) et font perdre beaucoup de temps pour rien.  :evil:

C'est certainement la raison pour laquelle je constatais ces conflits sur les ports utilisés par Samba et alfresco/CIF lorsque je tentais de les faire fonctionner en même temps.

Au final, l'un (Samba) et l'autre (alfresco/CIFS) fonctionnent en même temps, mais à part sur la machine qui héberge alfresco elle-même, les autres clients ne voient plus que les shares d'alfresco, et plus ceux de Samba… Alors que le serveur ne voit lui que ceux de Samba, et pas ceux d'alfresco…

Dans son article, Helene indique :
The configuration files for file-server setups:
$ALFRESCO_HOME/tomcat/webapps/alfresco/WEB-INF/classes/alfresco/file-servers.xml
$ALFRESCO_HOME/tomcat/webapps/alfresco/WEB-INF/classes/alfresco/file-servers.properties

Uncomment these lines in file-servers.xml (though to make sure this is permanent – create file-servers-custom.xml):
<tcpipSMB port="1445" ipv6="${cifs.ipv6}" platforms="linux,solaris,macosx"/>
<netBIOSSMB sessionPort="1139" namePort="1137" datagramPort="1138" platforms="linux,solaris,macosx"/>
mais sur une 4.0c, d ou e, ces fichiers xml n'existent pas là où elle mentionne, et seul tomcat/webapps/alfresco/WEB-INF/classes/alfresco/subsystems/fileServers/default/file-servers.properties a pu être trouvé…

Ce n'est pas important (à court terme, mais au prochain changement de version…), il suffit en fait de configurer les ports dans ce fichier file-servers.properties :
# Can be mapped to non-privileged ports, then use firewall rules to forward requests from the standard ports
cifs.tcpipSMB.port=1445
cifs.netBIOSSMB.sessionPort=1139
cifs.netBIOSSMB.namePort=1137
cifs.netBIOSSMB.datagramPort=1138
Ensuite, il faut bien entendu définir les règles de redirection des ports via iptables :
sudo su
echo 1 > /proc/sys/net/ipv4/ip_forward
modprobe iptable_nat
iptables -F
iptables -t nat -F
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -A PREROUTING -p tcp –dport 445 -j REDIRECT –to-ports 1445
iptables -t nat -A PREROUTING -p tcp –dport 139 -j REDIRECT –to-ports 1139
iptables -t nat -A PREROUTING -p udp –dport 137 -j REDIRECT –to-ports 1137
iptables -t nat -A PREROUTING -p udp –dport 138 -j REDIRECT –to-ports 1138
C'est à faire à chaque lancement d'alfresco, bien entendu.
Voilà mon /opt/alfresco40e/alfresco.sh que j'utilise pour démarrer/arrêter alfresco :
#!/bin/sh
# Start or stop Alfresco server
# Set the following to where tomcat is installed
ALF_HOME=/opt/alfresco40e
cd "$ALF_HOME"
APPSERVER="${ALF_HOME}/tomcat"
export CATALINA_HOME="$APPSERVER"
# Set any default JVM values
export JAVA_OPTS='-Xms512m -Xmx1024m -Xss1024k -XX:MaxPermSize=256m -XX:NewSize=256m -server'
#export JAVA_OPTS='-Xms512m -Xmx768m -Xss768k -XX:MaxPermSize=256m -XX:NewSize=256m -server'
export JAVA_OPTS="${JAVA_OPTS} -Dalfresco.home=${ALF_HOME} -Dcom.sun.management.jmxremote"
#

case "$1" in
    start)
        echo 1 > /proc/sys/net/ipv4/ip_forward
        modprobe iptable_nat
        iptables -F
        iptables -t nat -F
        iptables -P INPUT ACCEPT
        iptables -P FORWARD ACCEPT
        iptables -P OUTPUT ACCEPT
        iptables -t nat -A PREROUTING -p tcp –dport 445 -j REDIRECT –to-ports 1445
        iptables -t nat -A PREROUTING -p tcp –dport 139 -j REDIRECT –to-ports 1139
        iptables -t nat -A PREROUTING -p udp –dport 137 -j REDIRECT –to-ports 1137
        iptables -t nat -A PREROUTING -p udp –dport 138 -j REDIRECT –to-ports 1138   
        "${APPSERVER}/bin/startup.sh"
        ;;

    stop)
        "${APPSERVER}/bin/shutdown.sh"
    ;;

    *)
        echo "Usage: alfresco.sh {start|stop}"
esac
Arrêt/relance d'alfresco (en tant que root) et enfin, après quelques instants, les shares "Alfresco" (et "AVM") apparaissent dans le domaine "myDomain" !!  Smiley Happy

A ce point, c'est franchement une avancée par rapport à mon message précédent !
Reste que :

1) quand je double-clique sur le share Alfresco (ou l'autre), il m'est demandé un mot de passe pour "monter" le share.  :mrgreen:

Je lis ici :
Password Error

Sometimes, when connecting to an Alfresco share, the login dialog appears several times until finally taking effect. This problem can be caused by the client connecting to the Windows file server that is running on native SMB/port 445 rather than trying to connect via NetBIOS.
Suit une série de méthodes pour Windows, mais rien pour les autres.

Mais je lis aussi ici :
If Samba is installed, one can connect to the CIFS server from Linux though the Samba Client (smbclient):

[root@mybox alfresco]# smbclient -U admin \\\\127.0.0.1\\alfresco admin
J'ai donc un workaround : utiliser admin/admin en user/pass !
Ça ne me rassure guère, mais pour une étude du logiciel et dans un 1er temps ça permet d'avancer !!

2) j'imaginais que j'aurais une interface de configuration dans la console d'administration d'alfresco, or il n'y a rien sur la gestion de fileservers dans cette console ! Les pages 108/109 du guides Alfresco Enterprise 4.0.2 Admnistrator me laisse sur ma faim ! C'est donc pas implémenté dans la version communautaire.  :roll:
michaelh
Active Member

Re: CIFS et 4.0c|d|e sur Ubuntu 12.04

Bonjour,

En papillonnant encore sur le net, je suis tombé sur cet article de 2009 : Alfresco and CIFS troubleshooting on Ubuntu, rédigé par Helene Klungvik.
Cet article donne surtout de mauvaises pratiques, comme des liens (obsolètes) vers des fichiers de conf qu'on est pas censé modifier.
Voir http://docs.alfresco.com/4.0/index.jsp?topic=%2Fcom.alfresco.enterprise.doc%2Fconcepts%2Fconfigurati...

Sa très intéressante lecture confirme d'autres similaires sur le sujet : que vous lanciez alfresco en tant que root ou non, si vous escomptez mettre en œuvre CIFS vous DEVEZ jouer sur les ports, ce n'est pas une option pour Linux et MacOS, c'est obligatoire !
C'est un fondamental du monde Unix et dérivés. Pour ouvrir un port privilégié il faut être root, sinon passer par de la redirection de ports. Cela s'applique à n'importe quel service.

Et donc, à preuve du contraire, les deux premières phrases qu'on peut lire ici ou est donc simplement fausses (au moins pour Ubuntu) et font perdre beaucoup de temps pour rien.  :evil:
J'ai beau chercher, je ne vois aucune erreur sur ces pages. C'est peut être moi cela dit. Vous pourriez être plus précis ?

C'est certainement la raison pour laquelle je constatais ces conflits sur les ports utilisés par Samba et alfresco/CIF lorsque je tentais de les faire fonctionner en même temps.
Ou pas Smiley Happy

Sometimes, when connecting to an Alfresco share, the login dialog appears several times until finally taking effect. This problem can be caused by the client connecting to the Windows file server that is running on native SMB/port 445 rather than trying to connect via NetBIOS. Suit une série de méthodes pour Windows, mais rien pour les autres.
C'est un problème qui n'affecte que Windows en même temps Smiley Happy

J'ai donc un workaround : utiliser admin/admin en user/pass !
Ça ne me rassure guère, mais pour une étude du logiciel et dans un 1er temps ça permet d'avancer !!
Ça fonctionne aussi avec n'importe quel compte déclaré.

2) j'imaginais que j'aurais une interface de configuration dans la console d'administration d'alfresco, or il n'y a rien sur la gestion de fileservers dans cette console ! Les pages 108/109 du guides Alfresco Enterprise 4.0.2 Admnistrator me laisse sur ma faim ! C'est donc pas implémenté dans la version communautaire.  :roll:
En effet, mais entre nous les problèmes que vous rencontrez auraient été les mêmes.
mpintor
Member II

Re: CIFS et 4.0c|d|e sur Ubuntu 12.04

Bonjour, merci de l'intérêt que vous portez à mon problème.

Sa très intéressante lecture confirme d'autres similaires sur le sujet : que vous lanciez alfresco en tant que root ou non, si vous escomptez mettre en œuvre CIFS vous DEVEZ jouer sur les ports, ce n'est pas une option pour Linux et MacOS, c'est obligatoire !
C'est un fondamental du monde Unix et dérivés. Pour ouvrir un port privilégié il faut être root, sinon passer par de la redirection de ports. Cela s'applique à n'importe quel service.

Et donc, à preuve du contraire, les deux premières phrases qu'on peut lire ici ou est donc simplement fausses (au moins pour Ubuntu) et font perdre beaucoup de temps pour rien.  :evil:
J'ai beau chercher, je ne vois aucune erreur sur ces pages. C'est peut être moi cela dit. Vous pourriez être plus précis ?
Je me suis sans doute mal exprimé, mais pour le formuler autrement ce qui est écrit dans ces pages indique que pour que le serveur CIFS d'alfresco utilise les ports standard (TCP 139/445 UDP 137/138) il faut lancer alfresco en tant que root, sinon il est possible de basculer sur des ports non "privileged" pour un démarrage sans être root et en ayant monté des règles iptables.

Or ce n'est pas ce que j'ai constaté, et qu'on lance alfresco en root ou non il faut passer par la redirection de ports.

Ou encore dit autrement, en ne touchant pas les ports dans le fichier de conf et en lançant l'appli par root, il y a conflit avec Samba et le serveur CIFS d'alfresco ne fonctionne pas.
C'est ce que je reportais dans mon 1er post, avec la ligne :
 org.alfresco.jlan.server.config.InvalidConfigurationException: Error initializing TCP-IP SMB session handler, Address already in use

J'ai donc un workaround : utiliser admin/admin en user/pass !
Ça ne me rassure guère, mais pour une étude du logiciel et dans un 1er temps ça permet d'avancer !!
Ça fonctionne aussi avec n'importe quel compte déclaré.
Effectivement, merci pour l'info.
michaelh
Active Member

Re: CIFS et 4.0c|d|e sur Ubuntu 12.04

Je me suis sans doute mal exprimé, mais pour le formuler autrement ce qui est écrit dans ces pages indique que pour que le serveur CIFS d'alfresco utilise les ports standard (TCP 139/445 UDP 137/138) il faut lancer alfresco en tant que root, sinon il est possible de basculer sur des ports non "privileged" pour un démarrage sans être root et en ayant monté des règles iptables.

Or ce n'est pas ce que j'ai constaté, et qu'on lance alfresco en root ou non il faut passer par la redirection de ports.
Message à ceux qui liront cette affirmation plus tard : c'est bien évidemment faux.

Ou encore dit autrement, en ne touchant pas les ports dans le fichier de conf et en lançant l'appli par root, il y a conflit avec Samba et le serveur CIFS d'alfresco ne fonctionne pas.
C'est ce que je reportais dans mon 1er post, avec la ligne :
 org.alfresco.jlan.server.config.InvalidConfigurationException: Error initializing TCP-IP SMB session handler, Address already in use
Ça n'a rien à voir avec les privilèges utilisateur.
Il ne peut y avoir qu'un seul service à l'écoute sur un port donné et à un moment donné.
Et c'est valable pour tout type de service, ce n'est pas spécifique à Alfresco.