{"id":94,"date":"2014-01-06T06:00:00","date_gmt":"2014-01-06T06:00:00","guid":{"rendered":"http:\/\/esferas.org\/msqlu\/2014\/01\/06\/mi-propio-repositorio-debian\/"},"modified":"2014-01-06T06:00:00","modified_gmt":"2014-01-06T06:00:00","slug":"mi-propio-repositorio-debian","status":"publish","type":"post","link":"https:\/\/esferas.org\/msqlu\/2014\/01\/06\/mi-propio-repositorio-debian\/","title":{"rendered":"Mi propio repositorio Debian &#8230;"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" alt=\"debian-logo\" src=\"https:\/\/esferas.org\/mt\/msqlu\/logos\/openlogo-100.png\" class=\"mt-image-left\" style=\"float: left; margin: 0 20px 20px 0;\" height=\"123\" width=\"100\" \/>&#8230; para no tener que descargar, construir e instalar desde el principio cada pieza de software que me hace falta y que no encuentro en otros sitios.<\/p>\n<p><strong>Actualizaci\u00f3n: <\/strong>he retocado algunos detalles en la configuraci\u00f3n y el uso del repositorio bas\u00e1ndome en experiencias reales con el mismo. <\/p>\n<p><!--more--><\/p>\n<p>Y es que no es \u00fanicamente por el software que yo puedo crear (que no es tanto), tambi\u00e9n est\u00e1n aquellos m\u00f3dulos Perl que empaqueto para declararlos como dependencias de otros y que no s\u00e9 d\u00f3nde colocar. Claro, en mi lugar de trabajo tengo un repositorio y puedo apa\u00f1arme perfectamente con \u00e9l; es m\u00e1s, se ha vuelto imprescindible dado que todos los equipos funcionan con Debian y las personalizaciones de ajustes son legi\u00f3n.<\/p>\n<p>Pero emplear dicho repositorio desde fuera de la empresa significa abrirlo al exterior y ah\u00ed es cuando me topo con la primera dificultad: a los jefes no les hace ninguna gracia que los programas creados para la empresa puedan ser inspeccionados desde fuera. Y a mi, como responsable del <em>departamento de un s\u00f3lo hombre<\/em> de inform\u00e1tica, tampoco. No es s\u00f3lo cuesti\u00f3n de seguridad, es que toda la l\u00f3gica del negocio (y muchos datos) est\u00e1n all\u00ed. Descartado pues.<\/p>\n<p>As\u00ed que empleando <a href=\"https:\/\/astillas.net\/wiki\/Mini-dinstall\">las notas<\/a> que tom\u00e9 en su momento -y ajustando la configuraci\u00f3n a mis necesidades- me decido a empaquetarlo todo y a describir aqu\u00ed el proceso.<\/p>\n<p>Aviso, eso s\u00ed, de que \u00e9ste sistema es para aqu\u00e9l que construye alg\u00fan paquete Debian y lo env\u00eda empleando los mecanismos habituales y en los que est\u00e1n implicados un archivo <em>.changes<\/em>, un <em>.tar<\/em><em>.gz<\/em>, un <em>.dsc<\/em> y otro <em>.deb<\/em>; no sirve -o no est\u00e1 pensado- para importar un grupo de paquetes\u00a0<em>.deb<\/em> directamente. Sobre ese tema hablar\u00e9 en otra entrada.<\/p>\n<h3>Comenzando<\/h3>\n<p>Todo el montaje est\u00e1 basado en el programa <a href=\"http:\/\/debian-handbook.info\/browse\/stable\/sect.setup-apt-package-repository.html\">mini-dinstall<\/a> que est\u00e1 enfocado a los repositorios personales y, como avisan en la documentaci\u00f3n, hay varios controles que se omiten y que son imprescindibles en los oficiales. Entre ellos mencionan que se puede subir una versi\u00f3n anterior de un paquete y que es posible borrarlos a mano (v\u00eda <em>rm<\/em>) sin que el sistema se inmute. Se limitar\u00eda a reconstruir la lista de paquetes omitiendo los faltantes. A m\u00ed me vale, pero supongo que para otros no.<\/p>\n<p>B\u00e1sicamente lo que hace falta para ponerlo en marcha es:<\/p>\n<ol>\n<li>Instalar el paquete<\/li>\n<li>Crear un usuario y un grupo para trabajar con \u00e9l (yo suelo poner <em>debpkg<\/em> pero vale cualquiera).<\/li>\n<li>Crear o elegir un directorio como ra\u00edz del repositorio y darle la propiedad y permisos del usuario y grupo del punto 2.<\/li>\n<li>Crear un archivo de configuraci\u00f3n.<\/li>\n<li>A\u00f1adir un script de control del programa como demonio.<\/li>\n<li>Configurar un servidor web para tener acceso HTTP al repositorio<\/li>\n<\/ol>\n<p>El archivo de configuraci\u00f3n de <em>mini-dinstall<\/em> que yo empleo es el siguiente:<\/p>\n<pre>#\n#   Aplicable a todas las distribuciones\n#\n\n<span style=\"color: #7f9fbf; font-weight: bold;\">[DEFAULT]<\/span>\n\n#   Ra\u00edz del repositorio \narchivedir <span style=\"color: #808030;\">=<\/span> \/var\/lib\/debian\n\n# Env\u00edo de avisos de <span style=\"color: #800000; font-weight: bold;\">error<\/span> v\u00eda email \nmail_log_level <span style=\"color: #808030;\">=<\/span> ERROR\nmail_to <span style=\"color: #808030;\">=<\/span> <span style=\"color: #7144c4;\">victor@taquiones.net<\/span>\nmail_log_flush_level <span style=\"color: #808030;\">=<\/span> ERROR\nmail_log_flush_count <span style=\"color: #808030;\">=<\/span> <span style=\"color: #008c00;\">10<\/span>\n\n#   Activar el reindexado de los archivos Packages\/Sources tras cada\n#   instalaci\u00f3n de paquete (recomendable desactivarlo si se instalan\n#   <span style=\"color: #696969;\">*muchos* paquetes cada vez)<\/span>\ntrigger_reindex <span style=\"color: #808030;\">=<\/span> <span style=\"color: #008c00;\">1<\/span>\n\n# Desactivar la verificaci\u00f3n de firmas GPG en los archivos .changes (lo <span style=\"color: #800000; font-weight: bold;\">normal<\/span>\n# cuando se construyen paquete deb y <span style=\"color: #797997;\">no<\/span> se firman en <span style=\"color: #800000; font-weight: bold;\">local<\/span>)\nverify_sigs <span style=\"color: #808030;\">=<\/span> <span style=\"color: #008c00;\">0<\/span>\n\n#   Permisos para el directorio de entrada de paquetes. \n#   El valor cero (0) desactiva esta funcionalidad y es necesario poner a mano \n#   los permisos \nincoming_permissions <span style=\"color: #808030;\">=<\/span> <span style=\"color: #008c00;\">0777<\/span>\n\n### A partir de aqu\u00ed las opciones pueden especificarse por cada rama\n\n# Nombre alternativo de la rama\n<span style=\"color: #800000; font-weight: bold;\">alias<\/span> <span style=\"color: #808030;\">=<\/span> unstable\n\n# Arquitecturas posibles en el repositorio\narchitectures <span style=\"color: #808030;\">=<\/span> all<span style=\"color: #808030;\">,<\/span> i386<span style=\"color: #808030;\">,<\/span> amd64\n\n# Estilo de archivo para paquetes:\n#   - El valor <span style=\"color: #0000e6;\">\"flat\"<\/span> es el predeterminado y consiste en poner todos los .deb\n#   en <span style=\"color: #800000; font-weight: bold;\">un<\/span> \u00fanico directorio. \n#   - El valor <span style=\"color: #0000e6;\">\"simple-subdir\"<\/span> crea subdirectorios para cada arquitectura\narchive_style <span style=\"color: #808030;\">=<\/span> simple-subdir\n\n# Enviar <span style=\"color: #800000; font-weight: bold;\">un<\/span> correo tras la instalaci\u00f3n de <span style=\"color: #800000; font-weight: bold;\">un<\/span> paquete con \u00e9xito\nmail_on_success <span style=\"color: #808030;\">=<\/span> <span style=\"color: #008c00;\">1<\/span>\n\n# Conservar los paquetes antiguos o <span style=\"color: #797997;\">no<\/span>. Si se conservan ser\u00eda conveniente\n# efectuar alg\u00fan tipo de limpieza para <span style=\"color: #797997;\">no<\/span> cargar con decenas de versiones de\n# <span style=\"color: #800000; font-weight: bold;\">un<\/span> mismo software.\nkeep_old <span style=\"color: #808030;\">=<\/span> <span style=\"color: #008c00;\">1<\/span>\n\n# Programa a ejecutar antes de instalar <span style=\"color: #800000; font-weight: bold;\">un<\/span> archivo .changes que recibe como\n# par\u00e1metro. Si termina con <span style=\"color: #800000; font-weight: bold;\">error<\/span> provoca que se <span style=\"color: #800000; font-weight: bold;\">ignore<\/span> dicho paquete.\n#pre_install_script <span style=\"color: #808030;\">=<\/span> ~\/bin\/pre-inst.sh\n\n# Programa a ejecutar cuando <span style=\"color: #800000; font-weight: bold;\">un<\/span> archivo .changes se instala\n# satisfactoriamente.\n#post_install_script <span style=\"color: #808030;\">=<\/span> ~\/bin\/post-inst.sh\n\n# Generar o <span style=\"color: #797997;\">no<\/span> <span style=\"color: #800000; font-weight: bold;\">un<\/span> archivo <span style=\"color: #0000e6;\">\"Release\"<\/span>\ngenerate_release <span style=\"color: #808030;\">=<\/span> <span style=\"color: #008c00;\">1<\/span>\n\n# Valor predeterminado para el campo <span style=\"color: #0000e6;\">\"Origin:\"<\/span> en el archivo <span style=\"color: #0000e6;\">\"Release\"<\/span>\n#release_origin <span style=\"color: #808030;\">=<\/span> username\n\n# Valor predeterminado para el campo <span style=\"color: #0000e6;\">\"Label:\"<\/span> del archivo <span style=\"color: #0000e6;\">\"Release\"<\/span>\n#release_label <span style=\"color: #808030;\">=<\/span> username\n\n# Valor predeterminado para el campo <span style=\"color: #0000e6;\">\"Suite:\"<\/span> del archivo <span style=\"color: #0000e6;\">\"Release\"<\/span>\nrelease_suite <span style=\"color: #808030;\">=<\/span> Taquiones\n\n# Valor predeterminado para el campo <span style=\"color: #0000e6;\">\"Description\"<\/span> en el archivo <span style=\"color: #0000e6;\">\"Release\"<\/span>\nrelease_description <span style=\"color: #808030;\">=<\/span> Repositorio local de taquiones.net\n\n# Marcar o <span style=\"color: #797997;\">no<\/span> la rama como experimental\nexperimental_release <span style=\"color: #808030;\">=<\/span> <span style=\"color: #008c00;\">0<\/span>\n\n# Programa llamado para firmar los archivos <span style=\"color: #0000e6;\">\"Release\"<\/span>\n#release_signscript <span style=\"color: #808030;\">=<\/span> \/root\/bin\/sign-release.sh\n\n# Activar el reindexado autom\u00e1tico de los archivos <span style=\"color: #0000e6;\">\"Packages\"<\/span> y <span style=\"color: #0000e6;\">\"Sources\"<\/span>\n# monitorizando el directorio de entrada. S\u00f3lo empleado cuando el programa\n# mini-dinstall funciona como demonio.\ndynamic_reindex <span style=\"color: #808030;\">=<\/span> <span style=\"color: #008c00;\">1<\/span>\n\n# Desactivar el cambio de permisos de acceso para los archivos .changes. \nchown_changes_files <span style=\"color: #808030;\">=<\/span> <span style=\"color: #008c00;\">0<\/span>\n\n# <span style=\"color: #797997;\">No<\/span> emplear el programa \/usr\/bin\/dnotiy (<span style=\"color: #797997;\">no<\/span> funciona en todos los sistmeas)\nuse_dnotify <span style=\"color: #808030;\">=<\/span> <span style=\"color: #008c00;\">0<\/span>\n\n# Tiempo en segundos de muestreo del directorio de entrada de paquetes\npoll_time <span style=\"color: #808030;\">=<\/span> <span style=\"color: #008c00;\">30<\/span>\n\n# Tiempo l\u00edmite de espera para recibir <span style=\"color: #800000; font-weight: bold;\">un<\/span> paquete antes de rechazarlo\nmax_retry_time <span style=\"color: #808030;\">=<\/span> <span style=\"color: #008c00;\">172800<\/span>\n<\/pre>\n<\/p>\n<h3>Esquema de directorios<\/h3>\n<p>El primer gr\u00e1fico muestra c\u00f3mo quedan y para qu\u00e9 se utilizan los diferentes subdirectorios desde el punto de vista del repositorio. El segundo est\u00e1 enfocado en el directorio de trabajo de <em>mini-dinstall<\/em>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"mini-dinstall-schema.png\" src=\"https:\/\/esferas.org\/mt\/msqlu\/2014\/01\/05\/mini-dinstall-schema.png\" class=\"mt-image-center\" style=\"text-align: center; display: block; margin: 0 auto 20px;\" height=\"894\" width=\"693\" \/><img loading=\"lazy\" decoding=\"async\" alt=\"mini-dinstall-work.png\" src=\"https:\/\/esferas.org\/mt\/msqlu\/2014\/01\/05\/mini-dinstall-work.png\" class=\"mt-image-center\" style=\"text-align: center; display: block; margin: 0 auto 20px;\" height=\"646\" width=\"678\" \/><\/p>\n<p>Como puede verse no tiene mucho m\u00e1s misterio; basta con <em>copiar<\/em> los componentes de un paquete\u00a0<em>deb<\/em> al directorio <em>incoming\/<\/em> para que el programa los instale y actualice el archivo\u00a0<em>Packages<\/em> y <em>Sources<\/em> y est\u00e9n listos para ser empleados como cualquier otro repositorio. S\u00ed que hay varios detalles que afinar todav\u00eda y de los que hablo m\u00e1s abajo.<\/p>\n<h3>Script de inicio del demonio<\/h3>\n<p>No he encontrado uno en el propio paquete ya que no siempre se emplea como demonio pero es muy sencillo crearlo. Si se respetan las normas actuales en Wheezy basta con copiar el ejemplo habitual <em>\/etc\/init.d\/skeleton<\/em> y alterar los siguientes campos:<\/p>\n<pre><span style=\"color: #696969;\">### BEGIN INIT INFO<\/span>\n<span style=\"color: #696969;\"># Provides:          taquiones-debian<\/span>\n<span style=\"color: #696969;\"># Required-Start:    $network $local_fs<\/span>\n<span style=\"color: #696969;\"># Required-Stop:<\/span>\n<span style=\"color: #696969;\"># Default-Start:     2 3 4 5<\/span>\n<span style=\"color: #696969;\"># Default-Stop:      0 1 6<\/span>\n<span style=\"color: #696969;\"># Short-Description: Repositorio local de paquetes Debian<\/span>\n<span style=\"color: #696969;\"># Description:       Demonio de mantenimiento del repositorio local<\/span>\n<span style=\"color: #696969;\">#                    de paquetes Debian<\/span>\n<span style=\"color: #696969;\">### END INIT INFO<\/span>\n\n<span style=\"color: #696969;\"># Author: Victor Moral <\/span><span style=\"color: #0000e6;\">&lt;<\/span><span style=\"color: #7144c4;\">victor@taquiones.net<\/span><span style=\"color: #0000e6;\">&gt;<\/span>\n\n<span style=\"color: #696969;\"># PATH should only include \/usr\/* if it runs after the mountnfs.sh script<\/span>\n<span style=\"color: #797997;\">PATH<\/span><span style=\"color: #808030;\">=<\/span><span style=\"color: #40015a;\">\/sbin<\/span><span style=\"color: #808030;\">:<\/span><span style=\"color: #40015a;\">\/usr\/sbin<\/span><span style=\"color: #808030;\">:<\/span><span style=\"color: #40015a;\">\/bin<\/span><span style=\"color: #808030;\">:<\/span><span style=\"color: #40015a;\">\/usr\/bin<\/span>\n<span style=\"color: #797997;\">DESC<\/span><span style=\"color: #808030;\">=<\/span><span style=\"color: #0000e6;\">\"Repositorio local de paquetes Debian\"<\/span>\n<span style=\"color: #797997;\">NAME<\/span><span style=\"color: #808030;\">=<\/span>mini-dinstall\n<span style=\"color: #797997;\">DAEMON<\/span><span style=\"color: #808030;\">=<\/span><span style=\"color: #40015a;\">\/usr\/bin\/mini-dinstall<\/span>\n<span style=\"color: #797997;\">DAEMON_ARGS<\/span><span style=\"color: #808030;\">=<\/span><span style=\"color: #0000e6;\">\"--config <\/span><span style=\"color: #40015a;\">\/etc\/mini-dinstall.conf<\/span><span style=\"color: #0000e6;\">\"<\/span>             \n<span style=\"color: #797997;\">PIDFILE<\/span><span style=\"color: #808030;\">=<\/span><span style=\"color: #40015a;\">\/var\/lib\/debian\/mini-dinstall\/mini-dinstall.lock<\/span>\n<span style=\"color: #797997;\">SCRIPTNAME<\/span><span style=\"color: #808030;\">=<\/span><span style=\"color: #40015a;\">\/etc\/init.d<\/span><span style=\"color: #40015a;\">\/<\/span><span style=\"color: #797997;\">$NAME<\/span>\n<\/pre>\n<p style=\"margin-left: 30px;\"><strong>Aviso<\/strong>: cuidado con el archivo que guarda el PID que est\u00e1 situado y nombrado de forma insual. No utiliza el directorio habitual <em>\/var\/run<\/em> y como no puede cambiarse v\u00eda configuraci\u00f3n es necesario ajustarlo aqu\u00ed.<\/p>\n<h3>C\u00f3mo enviar paquetes<\/h3>\n<p>Enviar paquetes al repositorio precisa de cierta configuraci\u00f3n en el sistema en el que estemos construy\u00e9ndolos. Yo empleo el programa <em>debrelease<\/em> que a su vez utiliza\u00a0<em><\/em>a <em>dupload<\/em> (en mi caso) o a <em>dput<\/em>. Son \u00e9stos los que efect\u00faan la subida real de los datos por lo que a\u00f1ado un archivo de configuraci\u00f3n en <em>$HOME\/.dupload.conf<\/em> como el que sigue:<\/p>\n<pre><span style=\"color: #800000; font-weight: bold;\">package <\/span>config<span style=\"color: #800080;\">;<\/span>\n\n$default_host <span style=\"color: #808030;\">=<\/span> <span style=\"color: #0000e6;\">\"taquiones\"<\/span><span style=\"color: #800080;\">;<\/span>\n\n$preupload<span style=\"color: #808030;\">{<\/span><span style=\"color: #0000e6;\">'changes'<\/span><span style=\"color: #808030;\">}<\/span> <span style=\"color: #808030;\">=<\/span> <span style=\"color: #0000e6;\">''<\/span><span style=\"color: #800080;\">;<\/span>\n\n$cfg<span style=\"color: #808030;\">{<\/span><span style=\"color: #797997;\">taquiones<\/span><span style=\"color: #808030;\">}<\/span> <span style=\"color: #808030;\">=<\/span> <span style=\"color: #800080;\">{<\/span>\n\t<span style=\"color: #797997;\">fqdn\t\t\t<\/span><span style=\"color: #808030;\">=&gt;<\/span>\t<span style=\"color: #800000; font-weight: bold;\">q<\/span><span style=\"color: #800000;\">(<\/span><span style=\"color: #0000e6;\">taquiones.net<\/span><span style=\"color: #800000;\">)<\/span><span style=\"color: #808030;\">,<\/span>\n\t<span style=\"color: #797997;\">login\t\t\t<\/span><span style=\"color: #808030;\">=&gt;<\/span>\t<span style=\"color: #800000; font-weight: bold;\">q<\/span><span style=\"color: #800000;\">(<\/span><span style=\"color: #0000e6;\">victor<\/span><span style=\"color: #800000;\">)<\/span><span style=\"color: #808030;\">,<\/span>\n\t<span style=\"color: #797997;\">incoming\t\t<\/span><span style=\"color: #808030;\">=&gt;<\/span>\t<span style=\"color: #800000; font-weight: bold;\">q<\/span><span style=\"color: #800000;\">(<\/span><span style=\"color: #0000e6;\">\/var\/lib\/debian\/incoming<\/span><span style=\"color: #800000;\">)<\/span><span style=\"color: #808030;\">,<\/span>\n\t<span style=\"color: #797997;\">mailto\t\t\t<\/span><span style=\"color: #808030;\">=&gt;<\/span>\t<span style=\"color: #800000; font-weight: bold;\">q<\/span><span style=\"color: #800000;\">(<\/span><span style=\"color: #0000e6;\">victor@taquiones.net<\/span><span style=\"color: #800000;\">)<\/span><span style=\"color: #808030;\">,<\/span>\n\t<span style=\"color: #797997;\">dinstall_runs\t<\/span><span style=\"color: #808030;\">=&gt;<\/span>\t<span style=\"color: #008c00;\">0<\/span><span style=\"color: #808030;\">,<\/span>\n\t<span style=\"color: #797997;\">fullname\t\t<\/span><span style=\"color: #808030;\">=&gt;<\/span>\t<span style=\"color: #800000; font-weight: bold;\">q<\/span><span style=\"color: #800000;\">(<\/span><span style=\"color: #0000e6;\">Victor Moral<\/span><span style=\"color: #800000;\">)<\/span><span style=\"color: #808030;\">,<\/span>\n\t<span style=\"color: #797997;\">visibleuser\t\t<\/span><span style=\"color: #808030;\">=&gt;<\/span>\t<span style=\"color: #800000; font-weight: bold;\">q<\/span><span style=\"color: #800000;\">(<\/span><span style=\"color: #0000e6;\">victor<\/span><span style=\"color: #800000;\">)<\/span><span style=\"color: #808030;\">,<\/span>\n\t<span style=\"color: #797997;\">method\t\t\t<\/span><span style=\"color: #808030;\">=&gt;<\/span>\t<span style=\"color: #0000e6;\">'scpb'<\/span>\n<span style=\"color: #800080;\">}<\/span><span style=\"color: #800080;\">;<\/span>\n\n<span style=\"color: #008c00;\">1<\/span><span style=\"color: #800080;\">;<\/span>\n<\/pre>\n<p>En \u00e9l le estamos diciendo lo siguiente:<\/p>\n<ul>\n<li>Transfiere los archivos al servidor <em>taquiones.net<\/em> empleando <em>scp<\/em> y usando el usuario <em>victor<\/em> como credencial.<\/li>\n<li>Gu\u00e1rdalos en el directorio <em>\/var\/lib\/debian\/incoming<\/em>.<\/li>\n<li>Env\u00edame un correo cuando est\u00e9.<\/li>\n<li>No ejecutes nada tras la copia ya que <em>mini-dinstall<\/em> se debe encargar de ello.<\/li>\n<\/ul>\n<h3>C\u00f3mo a\u00f1adir seguridad<\/h3>\n<p>Existen dos formas de asegurar el repositorio que se complementan: la primera es firmar digitalmente los paquetes cuando se construyen y decirle a <em>mini-dinstall<\/em> que verifique las firmas y la segunda es, adem\u00e1s, firmar digitalmente tambi\u00e9n las listas de paquetes del repositorio tras cada instalaci\u00f3n.<\/p>\n<p>En mi caso estoy empleando \u00fanicamente la segunda y creo haberla descrito lo suficiente en <a href=\"https:\/\/astillas.net\/wiki\/Mini-dinstall#Repositorio_seguro\">mi wiki<\/a>\u00a0 (con la valiosa ayuda de <a href=\"http:\/\/upsilon.cc\/~zack\/blog\/posts\/2009\/04\/howto:_uploading_to_people.d.o_using_dput\/\">Stefano Zachirolli <\/a>) como para repetirme mucho m\u00e1s aqu\u00ed. Pero como quedan flecos pendientes, especialmente la adaptaci\u00f3n del script de firmado y la seguridad de la clave privada, voy a dejarlo para otra entrada. No est\u00e1 listo a\u00fan en mi paquete y prefiero no dejarlo incompleto.<\/p>\n<h3>C\u00f3mo usar el repositorio<\/h3>\n<p>Emplear el repositorio depende sobre todo de c\u00f3mo est\u00e9 configurado el servidor web para determinar el URL base del mismo. La distribuci\u00f3n y la rama var\u00edan muy poco y en mi caso quedan de la siguiente forma. Es aconsejable que se guarde en un \u00fanico archivo y se almacene bajo <em>\/etc\/apt\/sources.d\/astillas.list<\/em> para controlar mejor su eliminaci\u00f3n.<\/p>\n<p>La variable que se menciona <em>$(ARCH)<\/em> es sustitu\u00edda por <em>apt<\/em> por la arquitectura correspondiente. En mi caso rara vez creo un fichero fuera de <em>all<\/em> porque trabajo en Perl, pero siempre puede existir alg\u00fan caso con software compilado que lo haga necesario.<\/p>\n<pre>deb http:\/\/debian.astillas.net\/ local\/$(ARCH)\/<br \/>deb http:\/\/debian.astillas.net\/ local\/all\/<br \/>deb-src http:\/\/debian.astillas.net\/ local\/source\/<\/pre>\n<p>Si queremos podemos utilizar conexiones seguras con el repositorio, bien utilizando el protocolo HTTPS, bien empleando <em>ssh<\/em> o <em>rsh<\/em> como transporte de paquetes. Para el primer caso debemos instalar en el sistema cliente el paquete <a href=\"http:\/\/packages.debian.org\/wheezy\/apt-transport-https\">apt-transport-https<\/a> y cambiar las URL acorde a \u00e9l. Para el segundo es casi obligado configurar conexiones <em>ssh<\/em> v\u00eda claves p\u00fablicas o perderemos la posibilidad de descargar paquetes de forma desatendida.<\/p>\n<h3>El servidor web para el repositorio<\/h3>\n<p>Con respecto al servidor web lo he hecho lo m\u00e1s sencillo posible: he creado un servidor virtual (aprovechando que los certificados digitales de cacert.org admiten comodines) y lo he a\u00f1adido a mi servidor nginx con la siguiente configuraci\u00f3n b\u00e1sica:<\/p>\n<pre><span style=\"color: #696969;\">#<\/span>\n<span style=\"color: #696969;\">#   Servidor virtual para paquetes Debian<\/span>\n<span style=\"color: #696969;\">#<\/span>\n\nserver {\n        <span style=\"color: #800000; font-weight: bold;\">listen<\/span>          <span style=\"color: #008c00;\">80<\/span>;\n        server_name     debian.astillas.net;\n\n        root            \/var\/lib\/debian;\n        access_log      \/var\/log\/virtual\/debian.astillas.net\/access.log; \n        error_log       \/var\/log\/virtual\/debian.astillas.net\/error.log;\n        rewrite_log     on;\n\n        location <span style=\"color: #0000e6;\">\"\/mini-dinstall\"<\/span> {\n            return <span style=\"color: #008c00;\">404<\/span>;\n        }\n\n        location <span style=\"color: #0000e6;\">\"\/incoming\"<\/span> {\n            return <span style=\"color: #008c00;\">404<\/span>;\n        }\n\n        location \/ {\n            autoindex on;\n        }\n}\n<\/pre>\n<p>Para otros servidores web el mecanismo es similar. Basta con alg\u00fan m\u00f3dulo de listado de directorios (como <em>mod_index<\/em> de Apache) y excluir algunas carpetas de su alcance para asegurar un poco m\u00e1s el servicio. Entre \u00e9stas estar\u00edan la carpeta de las claves de firma de <em>root<\/em> y el directorio de trabajo de <em>mini-dinstall.<\/em><\/p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8230; para no tener que descargar, construir e instalar desde el principio cada pieza de software que me hace falta y que no encuentro en otros sitios. Actualizaci\u00f3n: he retocado algunos detalles en la configuraci\u00f3n y el uso del repositorio bas\u00e1ndome en experiencias reales con el mismo.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"1","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[6],"tags":[159,158,160,139],"class_list":["post-94","post","type-post","status-publish","format-standard","hentry","category-debian","tag-gpg","tag-mini-dinstall","tag-nginx","tag-repositorios"],"_links":{"self":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/94","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/comments?post=94"}],"version-history":[{"count":0,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/94\/revisions"}],"wp:attachment":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/media?parent=94"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/categories?post=94"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/tags?post=94"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}