Como posso configurar um servidor ELPA?


15

Eu e um amigo queremos começar a escrever pacotes emacs específicos para uso em nossa empresa. (Confie em mim, nada do que escrevermos será de grande interesse para quem estiver de fora - é integração com ferramentas internas.)

Gostaríamos de tornar a instalação e manutenção de pacotes o mais fácil possível e achamos que isso significa integração com package.el. O que precisamos fazer para configurar um repositório para esse uso?


Eu garfo MELPA e escrever receitas para seus pacotes! Como alternativa, forneça apenas as receitas e aponte seus colegas para QUELPA.
lunaryorn

Respostas:


18

Eu configurei um arquivo de pacote local (Emacs 24.5) usando package.elprimeiro criando dois diretórios, pkgse local. (Os nomes não importam.) Os arquivos que compõem seus pacotes entram pkgse localacabam mantendo seu arquivo morto. Se você deseja disponibilizar um arquivo morto para outras pessoas, é possível expor localusando um servidor da Web, mas o processo é o mesmo que criar um arquivo local.

Coloquei o seguinte no meu init.elarquivo:

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

Coloquei meu arquivo no meu .emacs.ddiretório (daí user-emacs-directoryo expand-file-nameformulário), mas você pode colocá-lo onde quiser.

Depois que isso for avaliado, execute M-x package-upload-filee digite o nome do arquivo do seu pacote a ser instalado. Isso irá gerar um novo pacote no local. Você verá três novos arquivos lá, archive-contents, yourpackagename-version.el, e yourpackagename-readme.txt. Agora você deve poder fazer M-x package-list-packagese ver seu pacote listado. Com sorte, eles estarão no topo marcado como "novo". Você pode instalar o pacote como de costume, e ele será exibido em seu .emacs.d/elpadiretório como em qualquer outro pacote.

Isso deve funcionar imediatamente para o Emacs 24. Não tenho certeza das versões anteriores. Seus usuários podem acessar seu pacote da maneira usual, incluindo

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

no init.elarquivo deles .

Para obter informações sobre como escrever um pacote, consulte Preparando o código Lisp para distribuição no manual GNU Emacs Lisp.


Obrigado! Esta é uma resposta muito bem escrita e funcionou bem para mim. Eu tenho apenas uma pergunta .. quando eu faço M-x package-update-file, coloca o .elarquivo diretamente em local/dir. Existe uma maneira de criar um subdiretório para cada pacote de modo que vamos acabar com local/pkg1/pkg1.el, local/pkg2/pkg2.el...?
Kaushal Modi

Não que eu saiba. O elpadiretório é configurado da maneira que você descreve. Eu realmente não sei porque localnão é. Lembre-se de que esses arquivos são gerados automaticamente, para que ninguém realmente precise vê-los. Eu mantenho meus arquivos sob controle de versão com o git e coloco meu localdiretório .gitignorepor esse motivo. Eu mantenho meu pkgsdiretório bem organizado e sob controle de versão, mas localé o que é.
Rodney Price

Obrigado. Então, para confirmar, todos os arquivos também são despejados em uma hierarquia plana na sua local/? Eu queria o arranjo hierárquico para poder especificar os metadados de URL do pacote como ;; URL: http://yourdomain.com/path-to-local-dir/pkg1e assim por diante para pacotes diferentes. Mas não é grande coisa. Estou mais empolgado em publicar meus pacotes em um elpa local. :)
Kaushal Modi

11
A minha também é plana. Eu não apontaria seus usuários para esse localdiretório de qualquer maneira. Aponte-os para a fonte original.
Rodney Price

Isso é ótimo! Mas quando eu o uso com arquivos tar no Windows, um tar quebrado é carregado e eu tenho que copiá-lo manualmente novamente. Bug no Emacs? 24.5
fommil 22/12/2015

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.