Newsgroup: it.comp.os.linux.sys
Titolo: mercurial, subdomain e permessi

allora il problema che ho è questo
su un server (virtuozzo/plesk) ho creato un subdomain (
mercurial.sito.com
)
per un repo mercurial. 
Quindi owner della dir dei singoli repo è mercurial.
Ogni repo corrisponde ad un progetto che sta su un altro subdomain
repoX.sito.com
 con owner sitoX
vorrei , una volta che arriviamo ad una versione stabile dei progetti che 
ci scambiamo tramite mercurial , poter far in modo automatico il deploy 
del sito dall dir dei repo mercurial alla dir del subdomain dove il sito 
sta realmente.
E vorrei farlo senza dover ogni volta entare nel server in ssh, diventare 
root, copiare i files, e dargli i permessi giusti.
Per me non è un problema, lo posso fare in automatico tramite script 
expect, ma ovviamente tale script necessita di avere dentro la pwd di 
root. Visto che voglio dare a qualchje sviluppatore la possibilità di 
fare deploy, come posso fare?

 
repoX.sito.com
 con owner sitoX
ehm.. owner repoX

 come posso fare?
Una soluzione semplice è usare gli hook di mercurial:
http://hgbook.red-bean.com/read/handling-repository-events-with-hooks.html
Puoi creare un hook per l'evento "tag", e fargli eseguire uno script.
Dallo script innanzitutto controlli se hai un tag che marca una versione 
di release, e quindi copi i files alla loro giusta destinazione.
In alternativa a copiare i files, quello che puoi fare e avere nella dir 
del subdomain X un *clone* del repository per repo X.
Dall'hook per l'evento "tag", propaghi le modifiche al repo del sito.
Per fare questo, dato che gli utenti sono diversi, devi impostare 
correttamente i permessi.
Oppure impostare il setuid allo script (che quindi non potrà essere uno 
script, ma un eseguibile).
Ciao  Manlio

 script, ma un eseguibile).
volevi dire: "che quindi lo script dovrà essere un eseguibile" ? :)
in ogni caso grazie mille, credo che la soluzione sia quella giusta, mi 
documento in merito.

 
Non sapevo che termine utilizzare.
Quello che volevo dire è che non puoi impostare il flag setuid su un 
eseguibile che viene eseguito tramite un interprete (che è quello che in 
genere si chiama script - con l'interprete specificato nella shebang).
Ciao  Manlio

 genere si chiama script - con l'interprete specificato nella shebang).
oddio, non ho mica capito.
Non si puo' mettere setuid su un file del tipo:
echo "ciao"
che viene eseguito tramite
sh file
ma si puo' metterlo su un file con permessi x dal contenuto
#!/bin/bash
echo "ciao"
e che viene eseguito con
./file 
?
o cosa?

 oddio, non ho mica capito.
ok, fatte delle prove, il problema è che il mio sistema , ed ho scoperto 
parecchi in giro, non permettono di setuid-are shell scripts, si aggira 
il tutto incapsulando lo script in un eseguibile C che fa system sullo 
script, e mettere setuid all'eseguibile C.
Grazie infinite
 



Scoperto ora che esiste un "template" per fare questo:
http://svn.python.org/projects/python/trunk/Misc/setuid-prog.c
Ciao  Manlio

 
http://svn.python.org/projects/python/trunk/Misc/setuid-prog.c
interessante, io avevo comunque risolto alla buona con:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
   setuid( 0 );
   system( "script.sh" );
   return 0;
}