¿Cómo puedo configurar un servidor ELPA?

15

Un amigo y yo queremos comenzar a escribir paquetes de emacs específicos para su uso en nuestra empresa. (Confía en mí, nada de lo que escribimos será de gran interés para cualquiera que esté fuera: es integración con herramientas internas)

Nos gustaría hacer que la instalación y el mantenimiento del paquete sean lo más fáciles posible y creemos que esto significa integración con package.el. ¿Qué debemos hacer para configurar un repositorio para tal uso?

Sean Allred
fuente
¡Bifurcaría MELPA y escribiría recetas para sus paquetes! Alternativamente, proporcione solo las recetas y señale a sus compañeros de trabajo a QUELPA.
lunaryorn

Respuestas:

18

Configuré un archivo de paquete local (Emacs 24.5) usando package.elprimero creando dos directorios, pkgsy local. (Los nombres no importan). Los archivos que componen sus paquetes entran pkgsy localterminarán manteniendo su archivo. Si desea que un archivo esté disponible para otros, puede exponerlo localutilizando un servidor web, pero el proceso es el mismo que crear un archivo local.

Puse lo siguiente en mi init.elarchivo:

(require 'package)
(setq package-enable-at-startup nil)

(require 'package-x)
(defvar local-archive
  (expand-file-name "local/" user-emacs-directory)
  "Location of the package archive.")
(setq package-archive-upload-base local-archive)
(add-to-list 'package-archives `("local" . ,local-archive) t)

(package-initialize)

Puse mi archivo en mi .emacs.ddirectorio (de ahí user-emacs-directoryel expand-file-nameformulario) pero puedes ponerlo donde quieras.

Una vez que se evalúa esto, ejecute M-x package-upload-filee ingrese el nombre de archivo de su paquete que se instalará. Esto generará un nuevo paquete en local. Verá tres nuevos archivos allí, archive-contents, yourpackagename-version.el, y yourpackagename-readme.txt. Ahora debería poder hacer M-x package-list-packagesy ver su paquete en la lista. Con suerte, estarán en la parte superior marcados como "nuevos". Puede instalar el paquete como de costumbre, y verá que aparece en su .emacs.d/elpadirectorio como cualquier otro paquete.

Esto debería funcionar de inmediato para Emacs 24. No estoy seguro acerca de las versiones anteriores. Sus usuarios pueden acceder a su paquete de la manera habitual al incluir

(require 'package)
(setq package-enable-at-startup nil)
(add-to-list 'package-archives 
  '("archive" . "http://yourdomain.com/path-to-local-dir/"))
(package-initialize)

en su init.elarchivo

Para obtener información sobre cómo escribir un paquete, consulte Preparación del código Lisp para su distribución en el manual GNU Emacs Lisp.

Precio de Rodney
fuente
¡Gracias! Esta es una respuesta muy bien escrita y funcionó bien para mí. Solo tengo una pregunta ... cuando lo hago M-x package-update-file, coloca el .elarchivo directamente bajo local/dir. ¿Hay una manera de crear un subdirectorio para cada paquete de modo que nos encontramos con local/pkg1/pkg1.el, local/pkg2/pkg2.el, ...?
Kaushal Modi
No que yo sepa. El elpadirectorio se configura de la manera que usted describe. Realmente no sé por qué no lo locales. Tenga en cuenta que estos archivos se generan automáticamente, por lo que nadie realmente tiene que mirarlos. Mantengo mis archivos bajo control de versiones con git, y pongo mi localdirectorio .gitignorepor ese motivo. Mantengo mi pkgsdirectorio bien organizado y bajo control de versiones, pero locales lo que es.
Rodney Price
Gracias. Entonces, para confirmar, ¿todos los archivos se vuelcan en una jerarquía plana en tu local/también? Quería la disposición jerárquica para poder especificar los metadatos de URL del paquete como ;; URL: http://yourdomain.com/path-to-local-dir/pkg1, y así sucesivamente para diferentes paquetes. Pero no es gran cosa. Estoy más emocionado de publicar mis paquetes en un elpa local. :)
Kaushal Modi
1
El mío también es plano. No diría a sus usuarios a ese localdirectorio de todos modos. Apúntelos a la fuente original en su lugar.
Rodney Price
¡Esto es genial! Pero cuando lo uso con archivos tar en Windows, se carga un alquitrán roto y tengo que volver a copiarlo manualmente. ¿Error en Emacs? 24.5
fommil