Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: leogtz en 7 Agosto 2011, 10:24 am



Título: Duda con Makefile [Solucionado]
Publicado por: leogtz en 7 Agosto 2011, 10:24 am
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.


Título: Re: Duda con Makefile
Publicado por: Foxy Rider en 7 Agosto 2011, 16:28 pm
Pensalo en términos de shell scripting ^^
Es un mero condicional usando id (http://pubs.opengroup.org/onlinepubs/009695399/utilities/id.html) ... te ilustro la "lógica" :

Código
  1. if [ $(id -u) != 0 ]; then
  2. echo "No soy root, deberia copiar todo a otro lado";
  3. else
  4. echo "Si soy root, deberia copiar al directorio base";
  5. fi
  6.  

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-Syntax

Saludos.

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


Título: Re: Duda con Makefile
Publicado por: leogtz en 7 Agosto 2011, 18:46 pm
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
Código:
#!/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.



Título: Re: Duda con Makefile [Solucionado]
Publicado por: leogtz en 8 Agosto 2011, 23:35 pm
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:

Código:
su - # ó sudo ..... . . . . 
make [-B] install

Y parece que funciona.

Código
  1. LIBDIR=/usr/local/lib
  2. SH_PATH=/usr/local/bin
  3. VERSION=1.0
  4.  
  5. all: test
  6. @echo ""
  7. @echo "If no error, run make -B install as root"
  8.  
  9. help:
  10. @echo ""
  11. @echo "Usage: make [test|install|uninstall]"
  12. @echo ""
  13. @echo "Try make test. If everything is ok, run make -B install as root"
  14. @echo ""
  15. @echo "You can remove installation using make uninstall as root"
  16. @echo ""
  17.  
  18. install:
  19. @echo "Install..."
  20. install -m666 simple_curses.sh $(LIBDIR)/simple_curses.sh
  21. install -m655 paquetes.sh $(SH_PATH)/paquetes.sh || echo -e "Run as root"
  22. @echo ".... done"
  23.  
  24. uninstall:
  25. @echo "Removing library"
  26. rm -rf $(LIBDIR)/simple_curses.sh
  27. rm -rf $(SH_PATH)/paquetes.sh || echo -e "Run as root"
  28. @echo "done"
  29.  
  30. test:
  31. @echo "Check if dmenu,pacman is installed"
  32. which pacman &> /dev/null && echo -e "\033[32mpacman found\033[0m" || echo -e "\033[33mpacman ....... not found\033[0m"
  33. which dmenu &> /dev/null && echo -e "\033[32mdmenu found\033[0m" || echo -e "dmenu ....... not found";
  34. @echo "Done."
  35.  
  36. dist:
  37. mkdir ./pacmenu-$(VERSION)
  38. cp LICENSE README AUTHORS INSTALL simple_curses.sh paquetes.sh Makefile ./pacmenu-$(VERSION)
  39. tar cvfz pacmenu-$(VERSION).tar.gz ./pacmenu-$(VERSION)
  40. rm -rf ./pacmenu-$(VERSION)
  41. @echo "pacmenu-$(VERSION).tar.gz done"
  42.  


Título: Re: Duda con Makefile [Solucionado]
Publicado por: Foxy Rider en 10 Agosto 2011, 08:55 am
¿ Era eso ? pensé que querías hacer distinto !  :xD
Igualmente chusmeate esto -> http://www.math.utpa.edu/lf/codes/toolsmanual.html
Despué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.


Título: Re: Duda con Makefile [Solucionado]
Publicado por: leogtz en 10 Agosto 2011, 08:59 am
¿ Era eso ? pensé que querías hacer distinto !  :xD

Jaja, ¿que querías?, es un script en shell de 400 líneas, todo escrito en shell, solo quería saber lo básico.