Я думаю, что у меня есть начало ответа здесь. Прежде всего, вы должны иметь возможность создавать 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/
Архив все. В последнее время мне нравятся сквошфы, используйте tar, если хотите.
mksquashfs install/usr/local emacs.sfs -noappend
На машине времени выполнения извлеките файлы и скопируйте их в префикс. С squashfs мы можем просто установить его.
mount emacs.sfs /usr/local
Начало Emacs с LD_LIBRARY_PATH
набор использовать библиотеки скопированные ранее.
Надеюсь, что это сработает. Я тестировал в виртуальной машине с довольно похожей ОС к той, на которой я построил, поэтому, возможно, что-то пойдет наперекосяк, когда они будут отличаться большим количеством.
Вы используете ssh с персональной машины в машину CentOS? Запустите emacs с персональной машины и используйте TRAMP! 'C-x C-f/ssh: ...' Хотя, даже если это сработает для вас, мне все равно хотелось бы, чтобы кто-то опубликовал инструкции для «портативных» emacs. – assem
@assem Спасибо! К сожалению, я не могу, но это будет действительно полезно в будущем. – user234461