{"id":2457,"date":"2017-11-24T10:27:40","date_gmt":"2017-11-24T10:27:40","guid":{"rendered":"https:\/\/esferas.org\/msqlu\/?p=2457"},"modified":"2017-11-24T10:27:40","modified_gmt":"2017-11-24T10:27:40","slug":"reprepro-presentando-al-mundo-el-repositorio","status":"publish","type":"post","link":"https:\/\/esferas.org\/msqlu\/2017\/11\/24\/reprepro-presentando-al-mundo-el-repositorio\/","title":{"rendered":"reprepro: presentando al mundo el repositorio"},"content":{"rendered":"<p>En entradas anteriores he hablado sobre c\u00f3mo estoy empleando el programa <em>reprepro\u00a0<\/em>y <em>git<\/em> para gestionar repositorios Debian personales.<\/p>\n<p>Ahora vamos a vestir al mu\u00f1eco para que sea vendible.<\/p>\n<p><!--more--><\/p>\n<p>Hasta ahora lo que hemos hecho ha sido crear el repositorio para que pueda ser utilizado directamente con <em>apt<\/em> y, de momento s\u00f3lo tenemos un \u00e1rbol pelado de archivos que el servidor web nos muestra.<\/p>\n<p>Queremos conseguir lo siguiente:<\/p>\n<p><a href=\"https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2017\/11\/debian.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2458 size-large\" src=\"https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2017\/11\/debian-1024x725.png\" alt=\"\" width=\"1024\" height=\"725\" srcset=\"https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2017\/11\/debian.png 1024w, https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2017\/11\/debian-300x212.png 300w, https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2017\/11\/debian-768x544.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p>As\u00ed que, dentro del repositorio <em>git<\/em> que a su vez contiene el repositorio <em>Debian<\/em>, vamos a a\u00f1adir una carpeta con las cosas de la web.<\/p>\n<pre class=\"lang:sh decode:true \">victor@gladius:~\/tmp\/myrepo$ mkdir html\r\nvictor@gladius:~\/tmp\/myrepo$ mkdir html\/{css,images,include}\r\nvictor@gladius:~\/tmp\/myrepo$ cp ~\/plantillas\/html\/include\/* html\/include\/\r\nvictor@gladius:~\/tmp\/myrepo$ cp ~\/plantillas\/css\/* html\/css\/\r\nvictor@gladius:~\/tmp\/myrepo$ tree html\/\r\nhtml\/\r\n\u251c\u2500\u2500 css\r\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 autoindex.css\r\n\u251c\u2500\u2500 images\r\n\u2514\u2500\u2500 include\r\n    \u251c\u2500\u2500 FOOTER.html\r\n    \u2514\u2500\u2500 HEADER.html\r\n\r\n3 directories, 3 files\r\n<\/pre>\n<p>He trampeado un poquillo con los contenidos porque proceden de otro repositorio pero el concepto es el mismo: indicar al servidor web Apache y su m\u00f3dulo <em>autoindex<\/em> que utilice esos archivos para mejorar la apariencia de la p\u00e1gina.<\/p>\n<p>Luego hay tres archivos muy \u00fatiles y que en la imagen corresponden al repositorio en <a href=\"https:\/\/debian.astillas.net\">astillas<\/a>:<\/p>\n<ul>\n<li>astillas.key: clave de firma de los paquetes.<\/li>\n<li>astillas.list: configuraci\u00f3n lista para emplear en <em>apt<\/em>.<\/li>\n<li>setup.sh peque\u00f1o script que facilita el uso de este repositorio en una m\u00e1quina <em>Debian<\/em>.<\/li>\n<\/ul>\n<p>Extraer la clave p\u00fablica es sencillo:<\/p>\n<pre class=\"lang:default decode:true\">$ gpg --armor --output html\/astillas.key --export root@astillas.net<\/pre>\n<p>El archivo <em>.list<\/em> debe contener lo siguiente:<\/p>\n<pre class=\"lang:default decode:true \">#\r\n#   Repositorio de paquetes de astillas.net\r\n#\r\ndeb https:\/\/debian.astillas.net debian main \r\ndeb-src https:\/\/debian.astillas.net debian main\r\n<\/pre>\n<p>Ajust\u00e1ndolo a la distribuci\u00f3n (<em>debian<\/em>) y a la rama o ramas (<em>main<\/em>) que tengamos en nuestro repositorio.<\/p>\n<p>Por \u00faltimo est\u00e1 el programa de configuraci\u00f3n llamado <em>setup.sh<\/em> sobre el que quiero comentar dos cosas:<\/p>\n<ol>\n<li>El acceso al repositorio se hace mediante conexi\u00f3n segura. En Debian esto no es necesario ya que la cadena de custodia es muy s\u00f3lida y no se utilizan credenciales descargar paquetes, pero en mi caso, con todos lo servidores empleando <em>https<\/em> el tener uno que no era m\u00e1s molesto que beneficioso.<\/li>\n<li>En todas las instalaciones que gestiono -y desde hace mucho tiempo- estoy utilizando el programa <a href=\"http:\/\/etckeeper.branchable.com\/\">etckeeper<\/a> (de Joey Hess) para mantener el \u00e1rbol de configuraci\u00f3n de la m\u00e1quina bajo control de <em>git<\/em>. Es muy recomendable pero tiene como servidumbre que es necesario informarle de cada cambio que hacemos o se perder\u00e1 su prop\u00f3sito.<\/li>\n<\/ol>\n<pre class=\"striped:true scroll:true tab-convert:true lang:sh decode:true \">#!\/usr\/bin\/env bash\r\n\r\nURLBASE=https:\/\/debian.astillas.net\r\nURLKEY=$URLBASE\/astillas.key\r\nURLLIST=$URLBASE\/astillas.list\r\nLIST=\/etc\/apt\/sources.list.d\/astillas.list\r\nWGET=$(which wget)\r\n\r\necho \"Comprobando si podemos a\u00f1adir fuentes de paquetes seguras \"\r\nif [ ! $(dpkg -s apt-transport-https | egrep installed) ]; then \r\n    echo \"Instalando apt-transport-https...\" \r\n    sudo apt install apt-transport-https || exit 2\r\nfi \r\n\r\necho \"Descargando e instalando clave del repositorio de $URLKEY ...\" \r\n\r\n$WGET --quiet -O- $URLKEY | sudo apt-key add -\r\n\r\nif [ $? -ne 0 ]; then\r\n    echo \"$0: fallo al a\u00f1adir la clave del repositorio\" &gt;&amp;2\r\n    exit 1\r\nfi \r\n\r\necho \"Descargando e instalando fuente de paquetes para apt de $URLLIST\" \r\n$WGET --quiet -O $LIST $URLLIST \r\n\r\nif [ $? -ne 0 ]; then\r\n    echo \"$0: error instalando el archivo de fuentes de apt\" \r\n    exit 1\r\nfi \r\n\r\nif [ $(which etckeeper) ]; then \r\n    echo \"Registrando cambios en el repositorio bajo \/etc ...\" \r\n    etckeeper commit \"Importado repositorio debian.astillas.net\"\r\nfi \r\n\r\necho \"Leyendo listas de paquetes ...\"\r\nsudo apt update\r\n<\/pre>\n<p>Si se tiene la suficiente confianza en el administrador del repositorio es posible configurar el sistema de una tacada con algo como lo siguiente:<\/p>\n<pre class=\"lang:sh decode:true \">$ wget --quiet -O- https:\/\/debian.astillas.net\/setup.sh | sudo bash -\r\n<\/pre>\n<p>Y as\u00ed queda todo bastante cuqui y muy sencillo de emplear.<\/p>\n<p>Con seguridad adem\u00e1s, que desde que lleg\u00f3 <a href=\"https:\/\/manpages.debian.org\/stretch\/apt\/apt-secure.8.en.html\">Stretch<\/a> las cosas se han puesto serias entre <em>apt<\/em> y los repositorios locales.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En entradas anteriores he hablado sobre c\u00f3mo estoy empleando el programa reprepro\u00a0y git para gestionar repositorios Debian personales. Ahora vamos a vestir al mu\u00f1eco para que sea vendible.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","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":[167,586,730],"class_list":["post-2457","post","type-post","status-publish","format-standard","hentry","category-debian","tag-apt","tag-etckeeper","tag-reprepro"],"_links":{"self":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/2457","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=2457"}],"version-history":[{"count":0,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/2457\/revisions"}],"wp:attachment":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/media?parent=2457"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/categories?post=2457"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/tags?post=2457"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}