You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

4.0 KiB

title date draft image categories tags
Compilación de un programa en C utilizando un Makefile 2022-10-16T23:46:57+02:00 False featured.png
práctica
Administración de Sistemas Operativos
C
compilación

Enunciado: Elige el programa escrito en C que prefieras y comprueba en las fuentes que exista un fichero Makefile o Configure. Deberás compilar desde las fuentes. Realiza los pasos necesarios para compilarlo e instálalo en tu equipo en un directorio que no interfiera con tu sistema de paquetes (/opt, /usr/local, etc.) La corrección se hará en clase y deberás ser capaz de explicar qué son todos los ficheros que se hayan instalado y realizar una desinstalación limpia.

El programa elegido es htop, ya que está escrito en C. De momento no tiene ninguno de los ficheros requeridos, pero ejecutando el script autogen.sh se crea el fichero configure.

Instalación

Para obtener las fuentes ejecutamos el siguiente comando:

apt source htop

ó

wget http://deb.debian.org/debian/pool/main/h/htop/htop_3.0.5.orig.tar.gz
tar -xvf htop_3.0.5.orig.tar.gz

Configure

De momento el fichero no existe. Ejecutamos autogen.sh. Necesitaremos además el paquete autoconf:

sudo apt install autoconf
./autogen.sh

ejecucion script autogen Podemos comprobar que se ha generado el fichero configure: ls del directorio de htop Podemos ejecutar el fichero configure directamente. Sin embargo, de cara a una desinstalación más sencilla y a poder tener más localizados los ficheros instalados, vamos a cambiar la ruta que hay por defecto, al directorio opt. Se hace añadiendo la siguiente opción:

sudo mkdir /opt/htop
./configure --prefix=/opt/htop/

salida de la ejecución de configure

En el caso de que se de algún error en la salida del comando, hay que instalar las dependencias indicadas, y repetir el paso anterior.

sudo apt install libncurses*

Makefile

Para poder ejecutar make necesitamos el paquete build-essential, que contiene las utilidades esenciales para compilar un paquete en Debian.

sudo apt install build-essential

Para instalar el paquete ejecutamos:

sudo make install
sudo make clean

Para generar el fichero .deb es necesario que el paquete descargado sea con apt source, o la versión específica de debian.

o bien, para generar el fichero .deb:

instalamos las siguientes dependencias:

sudo apt install libnl-3-dev libnl-genl-3-dev libsensors-dev pkg-config debhelper-compat
# o bien con apt-get build-dep
sudo apt-get build-dep htop
make
dpkg-buildpackage -b
make clean
sudo dpkg -i ../htop_3.0.5-7_amd64.deb

ejecucion de comando make El paquete ya está instalado. Podemos comprobar los ficheros creados en /opt: tree del directorio htop Entre los ficheros que aparecen, los más importantes son el propio binario de htop, y el manual. Para poder utilizar el comando la terminal tenemos que añadirlo al PATH. Para hacerlo, añadimos la siguiente línea al fichero .bashrc:

export PATH="/opt/htop/bin:$PATH"

Manual

Ya que lo hemos instalado en un directorio personal, no se ha creado el manual. Para hacerlo tenemos que crear un enlace simbólico:

sudo mkdir /usr/local/man/man1
sudo ln -s /opt/htop/share/man/man1/* /usr/local/man/man1/

Desinstalación

Para desinstalar el paquete vamos a utilizar otra vez el comando make, esta vez con la opción uninstall:

sudo make uninstall

ejecucion de make uninstall Tras eso, comprobamos si queda algo en la ubicación de la instalación: estructura residual la estructura de carpetas no se ha borrado, la borramos de manera manual. Por último, hay que eliminar la línea de .bashrc que añade la ruta al PATH y eliminar el enlace simbólico:

sudo rm /usr/local/man/man1/htop.1