автономный портативный emacs

Я пытаюсь скомпилировать и статически связать Emacs, потому что на работе я вынужден выполнять разработку JavaScript по ssh на рабочем сервере с CentOS 5.1 с неработающей конфигурацией менеджера пакетов и Emacs21, у которого нет js-режима и выдает ошибки всякий раз, когда я пытаюсь установить и использовать js[23]-mode.el или javascript.el, на отладку которых у меня нет времени на работе.

c-режим отступает все

$().ready(function() {
            like();
            $(this).andIOnlyHave1024Pixels(function () {
                                               etc ();
                                               etc ();

Как мне сделать портативную копию более современной версии Emacs? Или как вариант переделать c-mode? (Или что-нибудь, чтобы не использовать vi...)

Спасибо



person user234461    schedule 05.07.2013    source источник
comment
Вы используете ssh с личной машины на машине с CentOS? Запустите emacs с личной машины и используйте TRAMP! C-x C-f /ssh:... Хотя, даже если это сработает для вас, я все равно хотел бы увидеть, как кто-нибудь опубликует инструкции для «портативного» emacs.   -  person assem    schedule 05.07.2013
comment
@assem Спасибо! К сожалению, я не могу, но это будет очень полезно в будущем.   -  person user234461    schedule 07.07.2013


Ответы (3)


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

tar xf emacs.tar.bz2
cd emacs
./autogen.sh
./configure --with-x=no --prefix=/usr/local
make
mkdir install
make DESTDIR=$PWD/install install

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

Теперь выясним, какие общие библиотеки нужны для запуска Emacs. Беглый взгляд на все исполняемые файлы, поставляемые с Emacs, показывает, что это расширенный набор библиотек, необходимых для всей установки Emacs.

$ ldd install/usr/local/bin/emacs
linux-vdso.so.1 (0x00007fff427fe000)
libasound.so.2 => /usr/lib/libasound.so.2 (0x00007f66b25a0000)
librt.so.1 => /usr/lib/librt.so.1 (0x00007f66b2398000)
libdbus-1.so.3 => /usr/lib/libdbus-1.so.3 (0x00007f66b2151000)
libxml2.so.2 => /usr/lib/libxml2.so.2 (0x00007f66b1de9000)
libgpm.so.2 => /usr/lib/libgpm.so.2 (0x00007f66b1be2000)
libncursesw.so.5 => /usr/lib/libncursesw.so.5 (0x00007f66b1983000)
libgnutls.so.28 => /usr/lib/libgnutls.so.28 (0x00007f66b1673000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f66b1457000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007f66b1159000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f66b0dac000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f66b0ba8000)
/lib64/ld-linux-x86-64.so.2 (0x00007f66b2897000)
libz.so.1 => /usr/lib/libz.so.1 (0x00007f66b0992000)
liblzma.so.5 => /usr/lib/liblzma.so.5 (0x00007f66b076f000)
libp11-kit.so.0 => /usr/lib/libp11-kit.so.0 (0x00007f66b054e000)
libtasn1.so.6 => /usr/lib/libtasn1.so.6 (0x00007f66b033a000)
libnettle.so.4 => /usr/lib/libnettle.so.4 (0x00007f66b010c000)
libhogweed.so.2 => /usr/lib/libhogweed.so.2 (0x00007f66afedd000)
libgmp.so.10 => /usr/lib/libgmp.so.10 (0x00007f66afc66000)

Поэтому скопируйте все эти библиотеки в какой-нибудь каталог в дереве установки. linux-vdso.so является виртуальным и его нельзя/не нужно копировать.

mkdir install/usr/local/solib
cp /usr/lib/libasound.so.2 /usr/lib/librt.so.1 /usr/lib/libdbus-1.so.3 /usr/lib/libxml2.so.2 /usr/lib/libgpm.so.2 /usr/lib/libncursesw.so.5 /usr/lib/libgnutls.so.28 /usr/lib/libpthread.so.0 /usr/lib/libm.so.6 /usr/lib/libc.so.6 /usr/lib/libdl.so.2 /lib64/ld-linux-x86-64.so.2 /usr/lib/libz.so.1 /usr/lib/liblzma.so.5 /usr/lib/libp11-kit.so.0 /usr/lib/libtasn1.so.6 /usr/lib/libnettle.so.4 /usr/lib/libhogweed.so.2 /usr/lib/libgmp.so.10 install/usr/local/solib/

Архивируйте все это. В последнее время мне нравятся squashfs, используйте tar, если хотите.

mksquashfs install/usr/local emacs.sfs -noappend

На рабочей машине извлеките файлы и скопируйте их в префикс. С помощью squashfs мы можем просто смонтировать его.

mount emacs.sfs /usr/local

Запустите emacs с набором LD_LIBRARY_PATH, чтобы использовать библиотеки, которые вы скопировали ранее.

LD_LIBRARY_PATH=/usr/local/solib /usr/local/bin/emacs

Надеюсь, это сработает. Я тестировал на виртуальной машине с довольно похожей ОС на ту, на которой я построил, поэтому, возможно, что-то пойдет не так, когда они сильно различаются.

person jpkotta    schedule 10.07.2013
comment
Хороший подход. Нужен ли этому решению доступ sudo для установки сквоша fs? (если бы у OP был доступ к sudo, он, вероятно, смог бы обновить emacs). Подход на основе FUSE устранит эту проблему? - person juanleon; 11.07.2013
comment
Да, для монтирования требуется sudo (и, возможно, запись в /usr/local). Но если у вас нет sudo, вы можете просто установить префикс в $HOME, извлечь образ squashsfs, как в любом другом формате архива, и скопировать файлы в префикс. - person jpkotta; 11.07.2013

Если вы можете скомпилировать emacs на машине, вы можете запускать ее оттуда, не устанавливая ее. Просто запустите двоичный файл, созданный для вас компиляцией (возможно, вам придется изменить свой путь, поскольку emacsclient из разных версий может не работать вместе).

Я знаю, что это не то, что вы искали (поскольку emacs не является переносимым, и у вас может не быть среды компиляции на этой машине), но этот трюк может сработать для вас.

Конечно, подход TRAMP через ssh, предложенный assem, является лучшим решением (и тем, что я лично использую)

person juanleon    schedule 05.07.2013
comment
Спасибо, я не знал, что это будет работать без его установки. (к сожалению, autotools не установлен и не может быть установлен из-за сломанного менеджера пакетов.) - person user234461; 07.07.2013
comment
@ user234461: IIRC, вам не нужны автоинструменты для компиляции emacs, просто компилятор и создание ... и, возможно, некоторые обязательные библиотеки. - person salva; 11.07.2013

Обычно я использую sshfs для монтирования удаленных файловых систем и редактирования файлов в них с помощью Emacs. Работает довольно надежно.

Другой хорошей альтернативой является клон Emacs mg, так как он намного меньше и проще, компиляция его в статический исполняемый файл должна быть проще. Даже если ему не хватает большинства функций настоящего Emacs, вы все равно будете чувствовать себя как дома.

person salva    schedule 11.07.2013