公司网是离线的,安装emacs比较费劲。近期又要到其他单位去搞开发,他们都不用emacs,系统上也没有安装,且我自己装的话还要重新配置。我在想有没有可能搞一个离线的自己配置好的安装包,可以在不同的linux系统下执行的那种,比如.appimage形式的包,不需要软件是最新版的,只要是一个稳定版就可以。有没有大神给提供个思路啥的。
创建
使用 guix 的 guix pack 功能来创建一个,可以在同CPU架构,同是Linux的机器上运行的程序包: 甚至你的 openwrt x86_64, android x86_64 上面都能执行
guix pack \
-RR \
-S /opt/emacs/bin=bin \
-S /opt/emacs/lib=lib \
-S /opt/emacs/etc=etc \
glibc-utf8-locales emacs-no-x emacs-rime ... 插件,或者工具
执行这个命令会得到一个压缩包, 这个压缩包包括了所有依赖库和你需要的包。
使用
需要做的只是发送压缩包到目标机器上, 然后解压得到 gnu 和 opt 文件夹 可以解压在任何地方,也可以解压到 /
并创建个进入环境的脚本:
#!/bin/sh
# 需要在解压的地方放置此脚本
POS=$(dirname $(realpath ${0}))
# 如果解压到/就要更改POS为
#POS=/
# 中文显示
export GUIX_LOCPATH=${POS}/opt/emacs/lib/locale
if [ -z ${LANG} ]
then
export LANG=en_US.UTF-8
fi
# 添加需要的环境变量
export PATH=${POS}/opt/emacs/bin:${PATH}
source ${POS}/opt/emacs/etc/profile
# 执行你的shell或者bash
$SHELL || bash
然后需要做的就是在 ${HOME}/.emacs.d 或者其他地方放置你的emacs配置文件
执行刚才的脚本进入环境
然后执行:
emacs
就可以使用你想要的Emacs环境了
补充
-RR 里面有 proot 和 user namespace 的后端,可以保证在绝大多数地方都能执行
当然,你也可以把环境一块打包里面,比如:
...
--ad-hoc coreutils util-linux gawk grep sed findutils diffutils patch \
--ad-hoc git ccls python-language-server gcc-toolchain make clang-toolchain \
--ad-hoc tmux screen fish \
...
# 只要guix有的打包,你就可以放进去。
我的一个 emacs-with-rime 示例:
gnu/store 下面的结构:
ls gnu/store
01b4w3m6mp55y531kyi1g8shh722kwqm-gcc-7.5.0-lib/ fvhj74pghapbjvsvj27skvkra1by1965-bash-minimal-5.0.16/
0g0j5j7m52mcfwazd8scip4qb7r001m9-attr-2.4.48/ hifh6nqwi9yzrcj5msmmqpd43x8c62ar-info-dir/
0n6nnvzgxyisg0bszb5zqxp2gzdwh7h3-pack-audit.so i5a9qb07y9xjh9ry8hp6km43kji16nmd-libltdl-2.4.6/
17vxkkfggl0m15c73yd21nkgcr0flavd-emacs-no-x-27.2R/ i8h2pcxqdq07ijm3ibkka8f4smn1w48v-bzip2-1.0.8/
18hp7flyb3yid3yp49i6qcdq0sbi5l1n-guile-3.0.2/ ig9ynfhzji7ds1pb2ai3lmlyvws8f0fp-capnproto-0.8.0/
1hyfryzw145ipq8yn0k2399snmw34z6r-opencc-1.1.1/ klrqcn5m4axr58lbp1nzhcnlw2armb52-leveldb-1.22/
1zhd9fk3xjnz2cgdcjwngi5yw882xggx-glog-0.4.0/ krpyb0zi700dcrg9cc8932w4v0qivdg9-pkg-config-0.29.2/
2gl9vhwb805pfmknizxni9bi84xlflkm-emacs-popup-0.5.8R/ kx2q4fnwkdlzmdmv350s3qvgbq6sd4xr-emacs-rime-1.0.4/
2ql96jy3ilx219ddra32a6bdm8abzpzg-yaml-cpp-0.6.3/ mmhimfwmmidf09jw1plw3aw1g1zn2nkh-bash-static-5.0.16/
2sac9zy7af0r9975rwcwzp0a5iwq4pcf-emacs-dash-2.18.1R/ mz5fvdfks10rmwxf29n95bp9bim6wq7g-nettle-3.5.1/
2wqjj3mkqdvsvksndr2hpjpi7qqwi7kr-icu4c-66.1/ pwcp239kjf7lnj5i4lkdzcfcxwcfyk72-bash-minimal-5.0.16/
35afkywncrr5xsb4cxcljf6rpjcb7f61-gmp-6.2.0/ pzm72ywfyqv1g0h4571p6zlhg566cwwd-libidn2-2.3.0/
3kzq9gr6px2rbc26y73r7i9hcdc18xsa-rime-data-0.38.20200623/ qqib9cfwcpr4x8m2306sg0zi3p31wlyp-glibc-utf8-locales-2.31R/
4i9lvjz9z9j4kj412jpqv4zxjcik9qcb-libunistring-0.9.10/ r7k859hmcnkazf492fasqvk25jflnfk6-xz-5.2.4/
5gbblqc44adpbc87s34csnsq62wvnwkw-marisa-0.2.6/ rgydar9dfvflqqz2irgh7njj34amaxc6-glibc-utf8-locales-2.31/
5yvzilh78996627i8avq532sl2c03i95-gnutls-3.6.15/ rykm237xkmq7rl1p0nwass01p090p88x-zlib-1.2.11/
6nw2xslykar9g67n70j6jb9w8lqy5vfs-emacs-dash-2.18.1/ sdmy0v0nl29j5bw48r3b2rq162vi7y8g-profile/
760kd4dbz3l88crwmckcls6riah4jhrs-libfakechroot.so sh7fvkvwhwa2a8k8g4q3qail5gypx2ch-emacs-posframe-1.0.2R/
7c32nw1dwdh96bk4zxn5v5qabra9s0m9-proot-static-5.1.0/ v5rgf8v6cjxjbngkzjcznj98dkxj8svg-jansson-2.12/
8jkmy3n06cqmq2w5gcrs8apjnx6lzqmb-emacs-posframe-1.0.2/ vb12knxd3cdrgnk548l4f6m628ikg8pf-libtasn1-4.16.0/
97p5gvb7jglmn9jpgwwf5al1798wi61f-acl-2.2.53/ vfkr7aaahpi68d08wan04rfmyfc1axgy-librime-1.6.1/
9860f1abqj8wjjnwl8a9v54pdcc3bhgf-xz-5.2.4/ vp2s1nxsc9vvc1ix66xpbf041f8nacxr-boost-1.72.0/
9b07hm07vmd9ab2k2d66nshjyqz8aj4c-emacs-popup-0.5.8/ vwf622r52hxawb1fxix3djshzcf1ydzw-manual-database/
bw15z9kh9c65ycc2vbhl2izwfwfva7p1-libffi-3.3/ w5xwq1l2ayif2p264lklaii7r9nhy1qn-emacs-rime-1.0.4R/
c8w9z48vvx2a3q3k44ch9yn00wk1qwhb-libxml2-2.9.10/ z1iyvbvnkd7zkjxsx157n6qx2iwzxq7p-alsa-lib-1.2.4/
cx3lbyhspkharxnrknsqg96p9wa1yp5f-emacs-no-x-27.2/ zg126cjicrpm2p6zc08ra5vh4ddag7ww-libgc-8.0.4/
djn4r0klwccqglwr4lwm5dpkkcdzffv4-snappy-1.1.8/ zzkly5rbfvahwqgcs7crz0ilpi7x5g5p-ncurses-6.2/
fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/
如果要32位的:
guix pack -s i686-linux
当然,也可以给其他平台生成:
交叉编译方式:
guix pack --target=aarch64-linux-gnu # aarch64-linux
guix pack --target=arm-linux-gnueabihf # armhf-linux
guix pack --target=i586-gnu # gnu hurd
但是需要注意的是当前为止(2021.05): 有些build-system没有实现交叉编译.而且有的软件需要额外的设置才能交叉编译成功.
所以建议qemu-binfmt方式
qemu-binfmt方式:
guix pack -s aarch64-linux
guix pack -s armhf-linux
3 个赞
急速体验MatthewZMD私人发行版M-EMACS - Emacs-general - Emacs China (emacs-china.org)
参考之前我发的这个帖子中的链接,基于docker 镜像。 只要目标宿主可以支持docker那么就可以运行。 配置啥的都可以固定下载。 可以保证迁移不同系统都保持环境一致。
具体可参考以下仓库中的脚本。 github.com
允许用自己电脑的话,用自己本机的 emacs 搭配 标配的 tramp 编辑远程文件。