Jak mogę skonfigurować serwer ELPA?

15

Kumpel i ja chcemy zacząć pisać pakiety emacs przeznaczone do użytku w naszej firmie. (Zaufaj mi, nic, co piszemy, nie zainteresuje nikogo spoza - to integracja z narzędziami wewnętrznymi).

Chcemy, aby instalacja i konserwacja pakietu była jak najłatwiejsza i uważamy, że oznacza to integrację z package.el. Co musimy zrobić, aby skonfigurować repozytorium do takiego użytku?

Sean Allred
źródło
Rozwidlam MELPA i napiszę przepisy na twoje paczki! Ewentualnie podaj tylko przepisy i skieruj współpracowników do QUELPA.
lunaryorn

Odpowiedzi:

18

Skonfigurowałem lokalne archiwum pakietów (Emacs 24.5) przy użyciu package.el, najpierw tworząc dwa katalogi pkgsi local. (Nazwy nie mają znaczenia.) Pliki wchodzące w skład twoich pakietów wchodzą pkgsi localkończą się przechowywaniem twojego archiwum. Jeśli chcesz udostępnić archiwum innym osobom, możesz udostępnić je localza pomocą serwera WWW, ale proces jest taki sam jak w przypadku tworzenia lokalnego archiwum.

W moim init.elpliku umieszczam:

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

Umieszczam moje archiwum w moim .emacs.dkatalogu (stąd user-emacs-directoryw expand-file-nameformularzu), ale możesz je umieścić w dowolnym miejscu.

Po dokonaniu oceny, uruchom M-x package-upload-filei wprowadź nazwę pliku pakietu, który chcesz zainstalować. Spowoduje to wygenerowanie nowego pakietu w local. Będzie można zobaczyć trzy nowe pliki w tam archive-contents, yourpackagename-version.eli yourpackagename-readme.txt. Teraz powinieneś być w stanie to zrobić M-x package-list-packagesi zobaczyć swój pakiet na liście. Przy odrobinie szczęścia znajdą się na górze z oznaczeniem „nowy”. Możesz zainstalować pakiet jak zwykle, a zobaczysz, że pojawia się on w twoim .emacs.d/elpakatalogu, tak jak każdy inny pakiet.

Powinno to działać od razu z Emacsem 24. Nie jestem pewien co do wcześniejszych wersji. Użytkownicy mogą uzyskać dostęp do pakietu w zwykły sposób, włączając

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

w ich init.elaktach.

Aby uzyskać informacje na temat pisania pakietu, patrz Przygotowanie kodu Lisp do dystrybucji w podręczniku GNU Emacs Lisp.

Cena Rodneya
źródło
Dzięki! To jest bardzo dobrze napisana odpowiedź i działała dobrze dla mnie. Mam tylko jedno pytanie ... kiedy to zrobię M-x package-update-file, .elplik jest bezpośrednio pod local/reż. Czy istnieje sposób, aby utworzyć podkatalog dla każdego pakietu tak, że skończy się local/pkg1/pkg1.el, local/pkg2/pkg2.el...?
Kaushal Modi
Nic mi nie wiadomo. elpaKatalogu jest ustawiona tak, jak opisano. Naprawdę nie wiem, dlaczego localtak nie jest. Pamiętaj, że pliki te są generowane automatycznie, więc tak naprawdę nikt nigdy nie musi na nie patrzeć. Trzymam moje pliki pod kontrolą wersji za pomocą git i z tego powodu umieszczam mój localkatalog .gitignore. Mój pkgskatalog jest ładnie uporządkowany i pod kontrolą wersji, ale localtaki właśnie jest.
Rodney Price
Dzięki. Więc, aby potwierdzić, wszystkie pliki są zrzucane w płaskiej hierarchii również w tobie local/? Chciałem hierarchicznego układu, aby móc określić metadane adresu URL pakietu jako ;; URL: http://yourdomain.com/path-to-local-dir/pkg1itd. Dla różnych pakietów. Ale to nie jest wielka sprawa. Jestem bardziej podekscytowany publikowaniem moich pakietów w lokalnej elpie. :)
Kaushal Modi
1
Mój też jest płaski. I tak nie wskazałbym użytkownikom tego localkatalogu. Zamiast tego wskaż oryginalne źródło.
Rodney Price
To jest świetne! Ale kiedy używam go z plikami tar w systemie Windows, przesyłana jest zepsuta tar i muszę ręcznie ją ponownie skopiować. Błąd w Emacsie? 24.5
kwietnia