Come posso configurare un server ELPA?


15

Un amico e io vogliamo iniziare a scrivere pacchetti emacs specifici per l'uso nella nostra azienda. (Fidati di me, nulla di ciò che scriviamo sarà di grande interesse per chiunque al di fuori - è l'integrazione con strumenti interni.)

Vorremmo rendere l'installazione e la manutenzione dei pacchetti il ​​più semplice possibile e riteniamo che ciò significhi integrazione con package.el. Cosa dobbiamo fare per impostare un repository per tale uso?


Forcherei MELPA e scrivo ricette per i tuoi pacchetti! In alternativa, fornisci solo le ricette e indirizza i tuoi colleghi a QUELPA.
lunaryorn,

Risposte:


18

Ho creato un archivio di pacchetti locale (Emacs 24.5) usando package.elper prima cosa creando due directory pkgse local. (I nomi non contano.) I file che compongono i tuoi pacchetti entrano pkgse localfiniranno per contenere il tuo archivio. Se si desidera rendere disponibile un archivio ad altri, è possibile esporre localutilizzando un server Web, ma il processo è lo stesso della creazione di un archivio locale.

Ho inserito quanto segue nel mio init.elfile:

(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)

Ho inserito il mio archivio nella mia .emacs.ddirectory (da qui user-emacs-directoryil expand-file-namemodulo) ma puoi inserirlo ovunque tu voglia.

Una volta valutato, esegui M-x package-upload-filee inserisci il nome del file del pacchetto da installare. Questo genererà un nuovo pacchetto in local. Vedrete tre nuovi file in là, archive-contents, yourpackagename-version.el, e yourpackagename-readme.txt. Ora dovresti essere in grado di fare M-x package-list-packagese vedere il tuo pacchetto elencato. Con un po 'di fortuna, saranno contrassegnati come "nuovi". Puoi installare il pacchetto come al solito, e lo vedrai comparire nella tua .emacs.d/elpadirectory come qualsiasi altro pacchetto.

Questo dovrebbe funzionare immediatamente per Emacs 24. Non sono sicuro delle versioni precedenti. I tuoi utenti possono accedere al tuo pacchetto nel solito modo includendo

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

nel loro init.elfile.

Per informazioni su come scrivere un pacchetto, vedere Preparazione del codice Lisp per la distribuzione nel manuale GNU Emacs Lisp.


Grazie! Questa è una risposta molto ben scritta e ha funzionato bene per me. Ho solo una domanda .. quando lo faccio M-x package-update-file, mette il .elfile direttamente sotto local/dir. C'è un modo per creare una sottodirectory per ogni pacchetto in modo che si finisce con local/pkg1/pkg1.el, local/pkg2/pkg2.el, ...?
Kaushal Modi,

Non a mia conoscenza. La elpadirectory è impostata come descritto. Non so davvero perché localnon lo sia. Tieni presente che questi file vengono generati automaticamente, quindi nessuno deve mai guardarli. Mantengo i miei file sotto controllo di versione con git e inserisco la mia localdirectory .gitignoreper quel motivo. Mantengo la mia pkgsdirectory ben organizzata e sotto il controllo della versione, ma localè quello che è.
Rodney Price,

Grazie. Quindi, per confermare, tutti i file vengono scaricati in una gerarchia piatta anche nel tuo local/? Volevo la disposizione gerarchica in modo da poter specificare i metadati dell'URL del pacchetto ;; URL: http://yourdomain.com/path-to-local-dir/pkg1e così via per pacchetti diversi. Ma non è un grosso problema. Sono più entusiasta di pubblicare i miei pacchetti in un elpa locale. :)
Kaushal Modi,

1
Anche il mio è piatto. Non indirizzerei comunque i tuoi utenti a quella localdirectory. Puntali invece alla fonte originale.
Rodney Price,

Questo è fantastico! Ma quando lo uso con i file tar su Windows, viene caricato un tar rotto e devo copiarlo di nuovo manualmente. Bug in Emacs? 24.5
fommil

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.