Tema destacado: Últimos eventos sobre seguridad/inseguridad
Autor
|
Tema: Duda con Makefile [Solucionado] (Leído 1,128 veces)
|
Leo Gutiérrez.
. . .. ... ..... ........ ............. .....................
Moderador
 
Desconectado
Mensajes: 2.968
/^$/
|
Estoy creando un Makefile, bueno, ya está todo hecho, funciona y todo, pero tengo un problema, necesito copiar un script a /usr/local/bin, por lo que necesita permisos para ejecutarse, ya saben:
su - make install
Pero necesito que se copie al usuario actual, cuando hago: sudo make install se hace el proceso pero para root, no para el usuario actual...
Saludos, y gracias de antemano.
EDITO:
He pensado en un script configure que edite una linea del Makefile que apunte al usuario actual, pero bueno, no creo que sea la solución correcta, pero bueno, quizá funcione...
Saludos.
|
|
|
|
« Última modificación: 8 Agosto 2011, 23:36 por Leo Gutiérrez. »
|
En línea
|
|
|
|
|
vertexSymphony
|
Pensalo en términos de shell scripting ^^ Es un mero condicional usando id ... te ilustro la "lógica" : if [ $(id -u) != 0 ]; then echo "No soy root, deberia copiar todo a otro lado"; else echo "Si soy root, deberia copiar al directorio base"; fi Tendrías que tener una variable UID con el valor que retorne id y a eso, hacerle un ifeq, lee la documentación de gnu para ver cómo hacerlo con su formato de makefiles : http://www.gnu.org/software/automake/manual/make/Conditional-Syntax.html#Conditional-SyntaxSaludos. P.S: la forma correcta es hacerlo al estilo autotools, con un parámetro o variable llamada "PREFIX" que indique el directorio "base", que puede ser /, /usr/local, /home/algunUsuario ... y sobre eso se copia la estructura de directorios P.S 2 : no sé si vá a scripting o a programación general, pero acá, no corresponde el hilo ... veré a donde lo mando
|
|
|
|
« Última modificación: 7 Agosto 2011, 16:38 por vertex@Symphony »
|
En línea
|
Mail/PGP/XMPP/D* gpg --recv-keys --keyserver pgp.mit.edu 0xCD21671D
|
|
|
Leo Gutiérrez.
. . .. ... ..... ........ ............. .....................
Moderador
 
Desconectado
Mensajes: 2.968
/^$/
|
Lo del IF me queda claro, pero bueno, invocando al script de esta manera: sudo make install siempre será root, necesito permisos para copiar a /usr/local/bin para que el script se pueda invocar desde donde sea. Esto se está complicando, siendo que podría editar fácilmente la línea con un comando sed :p #!/bin/bash sed -i "s|^LIBDIR=\(.*\)|LIBDIR=$HOME/.pcmenu|g" ./Makefile
Pero claro, sé que no sería la forma adecuada de hacerlo... Me interesa lo que pones en el primer "P.S" voy a ver como tratarlo, quizá viendo un ejemplo. También estoy analizando los permisos que debe llevar el install... Saludos y gracias.
|
|
|
|
« Última modificación: 7 Agosto 2011, 21:35 por Leo Gutiérrez. »
|
En línea
|
|
|
|
Leo Gutiérrez.
. . .. ... ..... ........ ............. .....................
Moderador
 
Desconectado
Mensajes: 2.968
/^$/
|
Bueno, al final hice lo siguiente: Makefile, mandé la libreria al directorio /usr/local/lib y el script lo instale en /usr/local/bin, claro que para instalar se tiene que hacer: su - # ó sudo ..... . . . . make [-B] install
Y parece que funciona. LIBDIR=/usr/local/lib SH_PATH=/usr/local/bin VERSION=1.0 all: test @echo "" @echo "If no error, run make -B install as root" help: @echo "" @echo "Usage: make [test|install|uninstall]" @echo "" @echo "Try make test. If everything is ok, run make -B install as root" @echo "" @echo "You can remove installation using make uninstall as root" @echo "" install: @echo "Install..." install -m666 simple_curses.sh $(LIBDIR)/simple_curses.sh install -m655 paquetes.sh $(SH_PATH)/paquetes.sh || echo -e "Run as root" @echo ".... done" uninstall: @echo "Removing library" rm -rf $(LIBDIR)/simple_curses.sh rm -rf $(SH_PATH)/paquetes.sh || echo -e "Run as root" @echo "done" test: @echo "Check if dmenu,pacman is installed" which pacman &> /dev/null && echo -e "\033[32mpacman found\033[0m" || echo -e "\033[33mpacman ....... not found\033[0m" which dmenu &> /dev/null && echo -e "\033[32mdmenu found\033[0m" || echo -e "dmenu ....... not found"; @echo "Done." dist: mkdir ./pacmenu-$(VERSION) cp LICENSE README AUTHORS INSTALL simple_curses.sh paquetes.sh Makefile ./pacmenu-$(VERSION) tar cvfz pacmenu-$(VERSION).tar.gz ./pacmenu-$(VERSION) rm -rf ./pacmenu-$(VERSION) @echo "pacmenu-$(VERSION).tar.gz done"
|
|
|
|
|
En línea
|
|
|
|
|
vertexSymphony
|
¿ Era eso ? pensé que querías hacer distinto !  Igualmente chusmeate esto -> http://www.math.utpa.edu/lf/codes/toolsmanual.htmlDespués, no te conformes, y andate a cmake (acá toca leer varios CMakeLists.txt, la docu y la wiki), que autotools es un horror (no tanto como mantener Makefiles a mano) Saludos.
|
|
|
|
|
En línea
|
Mail/PGP/XMPP/D* gpg --recv-keys --keyserver pgp.mit.edu 0xCD21671D
|
|
|
Leo Gutiérrez.
. . .. ... ..... ........ ............. .....................
Moderador
 
Desconectado
Mensajes: 2.968
/^$/
|
¿ Era eso ? pensé que querías hacer distinto !  Jaja, ¿que querías?, es un script en shell de 400 líneas, todo escrito en shell, solo quería saber lo básico.
|
|
|
|
|
En línea
|
|
|
|
|
|