Comment configurer un serveur ELPA?

15

Un copain et moi voulons commencer à écrire des packages emacs spécifiques pour une utilisation dans notre entreprise. (Croyez-moi, rien de ce que nous écrivons ne sera d'un grand intérêt pour quiconque extérieur - c'est l'intégration avec des outils internes.)

Nous aimerions rendre l'installation et la maintenance des packages aussi simples que possible et nous pensons que cela signifie une intégration avec package.el. Que devons-nous faire pour mettre en place un référentiel pour une telle utilisation?

Sean Allred
la source
Je bifurquerais MELPA et j'écrirais des recettes pour vos paquets! Sinon, ne fournissez que les recettes et dirigez vos collègues vers QUELPA.
lunaryorn

Réponses:

18

J'ai mis en place une archive de paquet local (Emacs 24.5) en utilisant package.eld'abord la création de deux répertoires, pkgset local. (Les noms n'ont pas d'importance.) Les fichiers qui composent vos packages entrent pkgset localfiniront par contenir vos archives. Si vous souhaitez mettre une archive à la disposition d'autres personnes, vous pouvez l'exposer à l' localaide d'un serveur Web, mais le processus est identique à la création d'une archive locale.

Je mets ce qui suit dans mon init.eldossier:

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

J'ai mis mes archives dans mon .emacs.drépertoire (d'où le user-emacs-directorydans le expand-file-nameformulaire) mais vous pouvez les mettre où bon vous semble.

Une fois cela évalué, exécutez M-x package-upload-fileet entrez le nom de fichier de votre package à installer. Cela va générer un nouveau package dans local. Vous verrez trois nouveaux fichiers là - dedans, archive-contents, yourpackagename-version.elet yourpackagename-readme.txt. Vous devriez maintenant pouvoir faire M-x package-list-packageset voir votre paquet répertorié. Avec de la chance, ils seront en haut marqués "nouveau". Vous pouvez installer le package comme d'habitude, et vous le verrez apparaître dans votre .emacs.d/elparépertoire comme tout autre package.

Cela devrait fonctionner dès la sortie d'Emacs 24. Je ne suis pas sûr des versions antérieures. Vos utilisateurs peuvent accéder à votre package de la manière habituelle en incluant

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

dans leur init.eldossier.

Pour plus d'informations sur la façon d'écrire un paquet, voir Préparation du code Lisp pour la distribution dans le manuel GNU Emacs Lisp.

Prix ​​de Rodney
la source
Merci! C'est une réponse très bien écrite et cela a bien fonctionné pour moi. J'ai juste une question .. quand je le fais M-x package-update-file, il met le .elfichier directement sous local/dir. Est - il possible de créer un sous - répertoire pour chaque paquet afin que nous nous retrouvons avec local/pkg1/pkg1.el, local/pkg2/pkg2.el...?
Kaushal Modi
Pas à ma connaissance. Le elparépertoire est configuré comme vous le décrivez. Je ne sais vraiment pas pourquoi local. Gardez à l'esprit que ces fichiers sont générés automatiquement, donc personne n'a jamais vraiment à les regarder. Je garde mes fichiers sous contrôle de version avec git, et je place mon localrépertoire .gitignorepour cette raison. Je garde mon pkgsrépertoire bien organisé et sous contrôle de version, mais localc'est ce qu'il est.
Rodney Price du
Merci. Donc, pour confirmer, tous les fichiers sont vidés dans une hiérarchie plate dans votre local/aussi? Je voulais l'arrangement hiérarchique afin que je puisse spécifier les métadonnées URL du package en tant que ;; URL: http://yourdomain.com/path-to-local-dir/pkg1, et ainsi de suite pour différents packages. Mais ce n'est pas grave. Je suis plus ravi de publier mes packages dans un elpa local. :)
Kaushal Modi
1
Le mien est plat aussi. Je ne dirigerais pas vos utilisateurs vers ce localrépertoire de toute façon. Dirigez-les plutôt vers la source d'origine.
Rodney Price
C'est bien! Mais lorsque je l'utilise avec des fichiers tar sur Windows, un tar cassé est téléchargé et je dois le recopier manuellement. Bug dans Emacs? 24.5
fommil