Как я могу настроить сервер ELPA?

15

Мы с приятелем хотим начать писать пакеты emacs, специально предназначенные для нашей компании. (Поверьте мне, ничто из того, что мы пишем, не будет представлять большого интереса для кого-либо извне - это интеграция с внутренними инструментами.)

Мы хотим сделать установку и обслуживание пакетов как можно проще, и мы думаем, что это означает интеграцию с package.el. Что нам нужно сделать, чтобы настроить хранилище для такого использования?

Шон Оллред
источник
Я раскошелюсь на MELPA и напишу рецепты для ваших пакетов! Кроме того, предоставьте только рецепты и направьте своих коллег на QUELPA.
lunaryorn

Ответы:

18

Я установил локальный архив пакетов (Emacs 24.5), используя package.elсначала создание двух каталогов, pkgsи local. (Имена не имеют значения.) Файлы, входящие в ваши пакеты, входят pkgsи в localконечном итоге будут содержать ваш архив. Если вы хотите сделать архив доступным для других, вы можете открыть его localс помощью веб-сервера, но процесс такой же, как создание локального архива.

Я положил следующее в моем init.elфайле:

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

Я помещаю свой архив в свой .emacs.dкаталог (отсюда и user-emacs-directoryв expand-file-nameформу), но вы можете поместить его где угодно.

Как только это будет оценено, выполните M-x package-upload-fileи введите имя файла вашего пакета для установки. Это создаст новый пакет в local. Вы увидите три новые файлы там, archive-contents, yourpackagename-version.elи yourpackagename-readme.txt. Теперь вы должны быть в состоянии сделать M-x package-list-packagesи увидеть свой пакет в списке. Если повезет, они будут сверху отмечены как «новые». Вы можете установить пакет как обычно, и вы увидите, что он появится в вашем .emacs.d/elpaкаталоге, как и любой другой пакет.

Это должно работать из коробки для Emacs 24. Я не уверен насчет более ранних версий. Ваши пользователи могут получить доступ к вашему пакету обычным способом, включив

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

в их init.elфайле.

Информацию о том, как написать пакет, смотрите в разделе Подготовка кода Lisp для распространения в руководстве по GNU Emacs Lisp.

Родни Прайс
источник
Благодарность! Это очень хорошо написанный ответ, и он хорошо сработал для меня. У меня есть только один вопрос .. когда я делаю M-x package-update-file, он помещает .elфайл непосредственно в каталог local/. Есть ли способ , чтобы создать подкаталог для каждого пакета , так что мы в конечном итоге local/pkg1/pkg1.el, local/pkg2/pkg2.el...?
Каушал Моди
Не в моих знаниях. elpaКаталог настроен так , как вы описываете. Я действительно не знаю, почему localнет. Имейте в виду, что эти файлы создаются автоматически, поэтому никто никогда не должен смотреть на них. Я держу свои файлы под контролем версий с помощью git и по этой причине помещаю свой localкаталог в .gitignore. Я держу свой pkgsкаталог хорошо организованным и под контролем версий, но localэто то, что он есть.
Родни Прайс
Благодарю. Таким образом, чтобы подтвердить, что все файлы сбрасываются в плоской иерархии в вашем local/тоже? Я хотел иерархическое расположение, чтобы я мог указать метаданные URL пакета как ;; URL: http://yourdomain.com/path-to-local-dir/pkg1, и так далее для разных пакетов. Но это не имеет большого значения. Я более рад опубликовать свои пакеты в местной эльпе. :)
Каушал Моди
1
Мой тоже плоский. Я бы не стал указывать вашим пользователям на этот localкаталог. Вместо этого укажите их на первоисточник.
Родни Прайс
Это круто! Но когда я использую его с файлами tar в Windows, загружается сломанный tar, и мне приходится вручную копировать его снова. Ошибка в Emacs? 24.5
22.12.15
1

Если вы хотите разместить что-то вроде MELPA, вы можете найти в вики MELPA инструкции о том, как разместить собственный экземпляр MELPA:

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

По сути, это сводится к:

  1. Форк / клон репозитория MELPA GitHub
  2. Удалить все существующие рецепты из recipes/каталога
  3. Добавьте свои собственные рецепты
  4. Беги make.
Владимир Пантелеев
источник