Wie kann ich einen ELPA-Server einrichten?

15

Ein Kumpel und ich möchten anfangen, Emacs-Pakete zu schreiben, die für die Verwendung in unserem Unternehmen spezifisch sind. (Vertrauen Sie mir, nichts, was wir schreiben, wird für Dritte von großem Interesse sein - es ist die Integration in interne Tools.)

Wir möchten die Installation und Wartung von Paketen so einfach wie möglich gestalten und glauben, dass dies die Integration in bedeutet package.el. Was müssen wir tun, um ein Repository für eine solche Verwendung einzurichten?

Sean Allred
quelle
Ich würde MELPA gabel und Rezepte für Ihre Pakete schreiben! Alternativ können Sie auch nur die Rezepte angeben und Ihre Mitarbeiter auf QUELPA hinweisen.
Lunaryorn

Antworten:

18

Ich habe ein lokales Paketarchiv (Emacs 24.5) eingerichtet, package.elindem ich zuerst zwei Verzeichnisse erstellt habe, pkgsund local. (Die Namen spielen keine Rolle.) Die Dateien, aus denen Ihre Pakete bestehen, gehen ein pkgsund localwerden Ihr Archiv enthalten. Wenn Sie ein Archiv für andere verfügbar machen möchten, können Sie es localüber einen Webserver verfügbar machen. Der Vorgang entspricht jedoch dem Erstellen eines lokalen Archivs.

Ich habe Folgendes in meine init.elAkte aufgenommen:

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

Ich habe mein Archiv in mein .emacs.dVerzeichnis gestellt (daher user-emacs-directoryin das expand-file-nameFormular), aber Sie können es an einer beliebigen Stelle ablegen.

Sobald dies ausgewertet ist, führen Sie aus M-x package-upload-fileund geben Sie den Dateinamen Ihres zu installierenden Pakets ein. Dadurch wird ein neues Paket in generiert local. Sie werden in drei neue Dateien sehen, archive-contents, yourpackagename-version.el, und yourpackagename-readme.txt. Jetzt sollten Sie in der Lage sein, M-x package-list-packagesIhr Paket aufzulisten und zu sehen. Mit etwas Glück sind sie oben mit "neu" markiert. Sie können das Paket wie gewohnt installieren und es wird .emacs.d/elpawie jedes andere Paket in Ihrem Verzeichnis angezeigt.

Dies sollte für Emacs 24 sofort funktionieren. Bei früheren Versionen bin ich mir nicht sicher. Ihre Benutzer können wie gewohnt auf Ihr Paket zugreifen, indem Sie Folgendes einfügen

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

in ihrer init.elAkte.

Informationen zum Schreiben eines Pakets finden Sie unter Vorbereiten von Lisp-Code für die Verteilung im GNU Emacs Lisp-Handbuch.

Rodney Price
quelle
Vielen Dank! Dies ist eine sehr gut geschriebene Antwort, die für mich gut funktioniert hat. Ich habe nur eine Frage. Wenn ich das tue M-x package-update-file, wird die .elDatei direkt unter local/dir abgelegt . Gibt es eine Möglichkeit , ein Unterverzeichnis für jedes Paket zu erstellen , so dass wir am Ende mit local/pkg1/pkg1.el, local/pkg2/pkg2.el, ...?
Kaushal Modi
Meines Wissens nicht. Das elpaVerzeichnis wird so eingerichtet, wie Sie es beschreiben. Ich weiß wirklich nicht warum local. Denken Sie daran, dass diese Dateien automatisch generiert werden, sodass niemand sie wirklich ansehen muss. Ich behalte meine Dateien mit git unter Versionskontrolle und lege aus diesem Grund mein localVerzeichnis dort ab .gitignore. Ich halte mein pkgsVerzeichnis gut organisiert und unter Versionskontrolle, aber es localist das, was es ist.
Rodney Price
Vielen Dank. Also, um zu bestätigen, dass alle Dateien in Ihrer local/auch in einer flachen Hierarchie gespeichert werden ? Ich wollte die hierarchische Anordnung, damit ich die URL-Metadaten des Pakets als ;; URL: http://yourdomain.com/path-to-local-dir/pkg1usw. für verschiedene Pakete angeben kann . Aber es ist keine große Sache. Ich bin mehr begeistert, meine Pakete in einem lokalen elpa zu veröffentlichen. :)
Kaushal Modi
1
Meins ist auch flach. Ich würde Ihre Benutzer localsowieso nicht auf dieses Verzeichnis verweisen . Zeigen Sie stattdessen auf die Originalquelle.
Rodney Price
Das ist toll! Aber wenn ich es mit TAR-Dateien unter Windows verwende, wird ein defekter Teer hochgeladen und ich muss ihn erneut manuell kopieren. Fehler in Emacs? 24.5
22.
1

Wenn Sie etwas wie MELPA hosten möchten, finden Sie im MELPA-Wiki Anweisungen zum Hosten Ihrer eigenen MELPA-Instanz:

https://github.com/melpa/melpa/wiki/Custom-Melpa-Archive

Im Wesentlichen läuft es auf Folgendes hinaus:

  1. Fork / Clone das MELPA GitHub-Repository
  2. Löschen Sie alle vorhandenen Rezepte aus dem recipes/Verzeichnis
  3. Fügen Sie Ihre eigenen Rezepte hinzu
  4. Rennen make.
Vladimir Panteleev
quelle