UP | HOME

🔙回到目录 | 🔻 本网页更新于 [2026-08-20 周四 16:55]

emacs-在龙芯UOS20旧世界设备上编译最新Emacs等软件


有的时候,你会操作一台龙芯UOS20的旧世界设备,并且想在上面编译一些软件。

1. 编译前准备

首先你需要掌握该设备的密码,然后获取该设备的开发者权限。

对于后者,UOS 论坛上有人做了一个小工具,安装后重启就自动打开了开发者权限,不用在线/离线激活。我们下载安装重启即可。

2. 编译最新Emacs

考虑到兼容性,我们选择关闭 Native-Comp 。并且对于 Linux 电脑上的 Emacs 来说,应该没有可感觉的速度影响吧。

2.1. 安装依赖

sudo apt-get update
sudo apt-get install -y \\
  build-essential autoconf automake pkg-config texinfo \\
  libgtk-3-dev libgnutls28-dev libjansson-dev libncurses-dev libxml2-dev \\
  libharfbuzz-dev libcairo2-dev libfreetype6-dev libfontconfig1-dev \\
  libx11-dev libxft-dev libxpm-dev libxrender-dev \\
  libpng-dev libjpeg-dev libtiff-dev libgif-dev libwebp-dev librsvg2-dev \\
  zlib1g-dev libsqlite3-dev liblcms2-dev libotf-dev libm17n-dev \\
  libdbus-1-dev libsystemd-dev libacl1-dev libselinux1-dev libasound2-dev

2.2. 拉取并编译Emacs

最新正式版是 30.2 :

wget https://ftp.gnu.org/gnu/emacs/emacs-30.2.tar.xz
tar xf emacs-30.2.tar.xz && cd emacs-30.2

但我们也可以安装最新候选版或nightly 版本。这里以最新候选版 31.1-rc1 为例。如果用户想安装最新版,仅需将链接替换为指向 master.zip 的链接即可。

(这里考虑到链接可用性,启用了gh 加速链接)

wget "https://gh-proxy.org/https://github.com/emacs-mirror/emacs/archive/refs/tags/emacs-31.1-rc1.zip"
unzip emacs-31.1-rc1.zip && cd emacs-emacs-31.1-rc1
./autogen.sh

注意,直接从github 拉取的代码需要运行一次 autogen.sh ,但正式版不需要。

然后配置、编译并安装

./configure --prefix=/usr/local/emacs  --with-x-toolkit=gtk3  --without-native-compilation  --without-xwidgets  --with-tree-sitter=no

make -j$(nproc)

sudo make install

最后将 emacs 的安装目录放进 PATH 中:

echo 'export PATH=/usr/local/emacs/bin:$PATH' >> ~/.bashrc

3. 编译安装 Syncthing 2.1.3

3.1. 安装旧世界的Golang

syncthing 是用Go 编写的,好消息是龙芯开源社区有针对旧世界发布 Golang,目前最新的是 1.26.4 版本。
我们在 1.26.4 的下载网页下载 loong64.tar 版本,然后按照「安装指南」替换本地的 Go 。

3.2. 安装依赖

sudo apt-get install -y wget ca-certificates git build-essential iproute2 iptables

3.3. 配置 Go 的全局变量

sudo tee /etc/profile.d/loong-go.sh >/dev/null <<'EOF'
export GOROOT=/usr/local/go
export PATH=/usr/local/go/bin:$PATH
export GOPROXY=https://goproxy.cn,direct
export GOTOOLCHAIN=local
EOF

source /etc/profile.d/loong-go.sh
go env -w GOPROXY=https://goproxy.cn,direct GOTOOLCHAIN=local

3.4. 编译安装 syncthing 2.1.3

mkdir -p ~/src && cd ~/src
git clone --depth 1 --branch v2.1.3 https://gh-proxy.org/https://github.com/syncthing/syncthing.git
cd syncthing

# 原生编译:开启 cgo,使用系统 gcc 编译 C 版 SQLite(官方推荐,性能好)
CGO_ENABLED=1 go run build.go -no-upgrade build

验证:

./syncthing --version             # 期望输出 v2.1.3

3.5. 安装并配置 systemd 服务

sudo install -m 0755 syncthing /usr/local/bin/syncthing

# 使用仓库自带的 systemd 单元,并把路径改成 /usr/local/bin
sudo cp etc/linux-systemd/system/syncthing@.service /etc/systemd/system/syncthing@.service
sudo sed -i 's#ExecStart=/usr/bin/syncthing#ExecStart=/usr/local/bin/syncthing#' /etc/systemd/system/syncthing@.service

sudo systemctl daemon-reload
sudo systemctl enable --now syncthing@$(whoami).service
systemctl --no-pager --lines=20 status syncthing@$(whoami).service

syncthing 默认访问界面是 http://127.0.0.1:8384 。可以打开网页,看看是否成功启动。

4. 编译安装 Tailscale v1.100.0

v1.100.0 正好要求 go 1.26.4,是目前能用龙芯 Go 1.26.4 编译的最新稳定版。

4.1. 编译 Tailscale bin

mkdir -p ~/go/bin
export GOBIN=$HOME/go/bin

# 加 -ldflags="-s -w" 可把 30M+ 的二进制瘦身到 20M 左右,可省略
CGO_ENABLED=0 go install -ldflags="-s -w" tailscale.com/cmd/tailscale@v1.100.0
CGO_ENABLED=0 go install -ldflags="-s -w" tailscale.com/cmd/tailscaled@v1.100.0

4.2. 安装bin

sudo install -m 0755 $HOME/go/bin/tailscale  /usr/bin/tailscale
sudo install -m 0755 $HOME/go/bin/tailscaled /usr/sbin/tailscaled

4.3. 配置 systemd 服务

sudo mkdir -p /etc/default
sudo tee /etc/default/tailscaled >/dev/null <<'EOF'
# Set the port to listen on for incoming VPN packets.
# Remote nodes will automatically be informed about the new port number,
# but you might want to configure this in order to set external firewall
# settings.
PORT="41641"

# Extra flags you might want to pass to tailscaled.
FLAGS=""
EOF

sudo tee /etc/systemd/system/tailscaled.service >/dev/null <<'EOF'
[Unit]
Description=Tailscale node agent
Documentation=https://tailscale.com/docs/
Wants=network-pre.target
After=network-pre.target NetworkManager.service systemd-resolved.service

[Service]
EnvironmentFile=/etc/default/tailscaled
ExecStart=/usr/sbin/tailscaled --state=/var/lib/tailscale/tailscaled.state --socket=/run/tailscale/tailscaled.sock --port=${PORT} $FLAGS
ExecStopPost=/usr/sbin/tailscaled --cleanup

Restart=on-failure

RuntimeDirectory=tailscale
RuntimeDirectoryMode=0755
StateDirectory=tailscale
StateDirectoryMode=0700
CacheDirectory=tailscale
CacheDirectoryMode=0750
Type=notify

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now tailscaled
systemctl --no-pager --lines=20 status tailscaled

4.4. 确保 TUN 可用并登录

ls -l /dev/net/tun
sudo modprobe tun
echo tun | sudo tee /etc/modules-load.d/tun.conf

sudo tailscale up
# 按输出提示打开浏览器完成登录;无 GUI 服务器可用 tailscale up 输出的 URL 在别的电脑上打开
sudo tailscale status

5. 编译安装 Jujutsu v0.35.0

5.1. 安装旧世界的Rust

根据龙芯开源社区的网站,目前最新的旧世界 Rust 版本为 1.92.0 。我们这里直接用官方 Rustup 命令安装:

curl --proto '=https' --tlsv1.2 -sSf https://rust-lang.loongnix.cn/rustup-init.sh | sh

然后按照操作提示更新一下变量:

source $HOME/.cargo/env

5.2. 编译安装 jujutsu v0.35.0

因为 jujutsu 并没有提供龙芯旧世界的官方预编译二进制文件,因此我们按照 Jujutsu 的官方手册,通过以下命令编译安装:

# To install the *prerelease* version from the main branch
cargo install --git https://github.com/jj-vcs/jj.git --locked --bin jj jj-cli

但是如果这样直接安装,会遇见 bstr 组件版本号报错的情况。目前最新的 jj v0.44.0 对 bstr 的版本号要求是 1.13.1 ,而旧世界的 Rust 工具链中能提供的最新版本为 1.12.1 。所以我们需要回退到 v0.35.0 的 jujutsu (这里贴心加入了 ghproxy 链接提速):

cargo install --git https://gh-proxy.org/https://github.com/jj-vcs/jj.git --tag v0.35.0 --locked --bin jj jj-cli

然后可以顺利编译安装。

6. 编译安装 Librime 1.8.5

由于librime 依赖一些开源库,因此我们首先需要添加社区维护的软件源。注意,在添加此软件源后不要执行任何全局升级的动作,否则可能影响系统某些软件,导致不能正常工作。

6.1. 添加社区软件源

# 1. 备份现有源(可选但建议)
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

# 2. 添加 Loongnix 20 稳定源
sudo tee /etc/apt/sources.list.d/loongnix20.list > /dev/null <<'EOF'
deb https://pkg.loongnix.cn/loongnix/20 DaoXiangHu-stable main contrib non-free
EOF

根据贴吧指南,需要导入公钥才可更新此软件源

gpg --recv-key A8C7C20CEDF1B817

gpg --output loongnix20.gpg --armor --export A8C7C20CEDF1B817

sudo apt-key add loongnix20.gpg

sudo apt update

6.2. 安装所需依赖

librime 有一些依赖的库,需要额外安装。

sudo apt install -y git build-essential cmake pkg-config libboost-all-dev libgoogle-glog-dev libleveldb-dev  libmarisa-dev  libopencc-dev   libyaml-cpp-dev   liblua5.3-dev   libcapnp-dev   libx11-dev capnproto

6.3. 获取 librime 1.8.5 和插件源码

git clone --depth 1 --branch 1.8.5 https://github.com/rime/librime.git
cd librime

# 插件目录名必须是 plugins/lua、plugins/octagram、plugins/predict、plugins/proto
git clone https://github.com/hchunhui/librime-lua.git plugins/lua
git -C plugins/lua checkout 03a2bd9

git clone https://github.com/lotem/librime-octagram.git plugins/octagram
git -C plugins/octagram checkout a6ced5a

git clone https://github.com/rime/librime-predict.git plugins/predict
git -C plugins/predict checkout e308495

git clone https://github.com/lotem/librime-proto.git plugins/proto
git -C plugins/proto checkout d92f572

6.4. 配置、编译并安装

配置cmake

cmake . -B build  -DCMAKE_BUILD_TYPE=Release  -DCMAKE_INSTALL_PREFIX=/usr/local  -DBUILD_TEST=OFF  -DBUILD_SHARED_LIBS=ON  -DBUILD_MERGED_PLUGINS=ON  -DENABLE_EXTERNAL_PLUGINS=OFF

编译安装

cmake --build build -j"$(nproc)"
sudo cmake --install build
sudo ldconfig

如有必要,可以通过 fcitx -r 重启 fcitx 。

© Published by Emacs 32.0.50 (Org mode 10.0-pre) | RSS 评论