惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

云风的 BLOG
云风的 BLOG
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
J
Java Code Geeks
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Engineering at Meta
Engineering at Meta
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
小众软件
小众软件
博客园 - 聂微东
酷 壳 – CoolShell
酷 壳 – CoolShell
月光博客
月光博客
Last Week in AI
Last Week in AI
博客园_首页
I
InfoQ
T
Tailwind CSS Blog
爱范儿
爱范儿
雷峰网
雷峰网
Recent Announcements
Recent Announcements
F
Fortinet All Blogs
B
Blog
WordPress大学
WordPress大学
A
About on SuperTechFans
V
Visual Studio Blog
有赞技术团队
有赞技术团队
P
Proofpoint News Feed

中文博客 on 范叶亮 | Leo Van

多智能体系统 (Multi-Agent System) 确定性和掌控欲 - 你的 AI 不是你的 AI LLM Token 消耗节省计划 (How to Save Token for LLM) 智能体的角色定位和身份演化 (Agent Role Orientation and Identity Evolution) 本地部署 OpenClaw,QwenPaw 和 Hermes Agent (Local Deployment of OpenClaw, QwenPaw and Hermes Agent) 本地部署智能体 - OpenClaw,QwenPaw,Hermes Agent ... 部署 Matrix 服务器 Synapse (Deployment of Matrix Server Synapse) 部署 frp 内网穿透服务 (Deployment of frp NAT Traversal Service) 本地部署大模型服务 (Local Deployment of LLM Services) AI 时代的生产力和生产关系 (Forces and Relations of Production in AI Era) 业余无线电入门 - CQ, CQ, CQ, this is BD1CZP. Calling CQ and standing by. 重构 - 之于代码、之于工作、之于生活 大语言模型微调 (Fine-tuning Large Language Models) 提升图片分辨率和质量 - Invoke AI 101 教程 使用画布创建和组合生成新的图片 - Invoke AI 101 教程 探索 AI 模型和概念适配器 - Invoke AI 101 教程 理解图像到图像和降噪过程 - Invoke AI 101 教程 使用控制层和指示控制图片的生成 - Invoke AI 101 教程 使用 Invoke 创作你的第一张图片 - Invoke AI 101 教程 在 OpenWrt 和群晖中自动申请和部署证书 凡人歌 - 凡人,但不要烦心 Shell 调用方式 fork,exec 和 source (Run Shell with fork, exec and source) 重定向和管道 (Redirect and Pipe) 模型压缩和推理加速 (Model Compression and Inference Acceleration) 我们需要多少种编程语言 (How Many Programming Languages do We Need) 数据可视化小贴士 - 面向动态文档生成,秉承规范、统一和实用的理念 从 rm -rf * 说起 - 喜新、怀旧、再出发 当我谈摄影时,我谈些什么 - 色彩篇 Part 1 CSS 布局和定位 (CSS Layout and Position) 当我谈修图时,我谈些什么 - 色彩篇 Part 1
在群晖 NAS 上编译安装 tmux
范叶亮 · 2020-05-07 · via 中文博客 on 范叶亮 | Leo Van

在群晖 NAS 上编译安装 tmux

分类: 编程 / 字数: 1117 / 标签: 群晖, Synology, NAS, tmux, 编译, 构建


工具链安装

登录 NAS 控制台,在系统根目录创建 toolkit 目录:

sudo mkdir /toolkit
sudo chown -R username:users /toolkit

其中 username 为使用的用户名,如果后续使用过程中出现磁盘空间不足的问题,可以在其他具有较大容量的分区建立 toolkit,再在根目录建立软链进行使用:

mkdir /xxx/toolkit
sudo ln -s /xxx/toolkit /toolkit
sudo chown -R username:users /toolkit

之后下载相关工具脚本:

cd /toolkit
git clone https://github.com/SynologyOpenSource/pkgscripts-ng.git

工具脚本使用 Python 3 实现,请确保 NAS 已经安装 Python 3,后续使用过程中如果提示相关 Python 扩展包未安装的情况请自行安装后重试。实验的 Synology NAS 为 DS418play,系统版本为 DSM 6.2.2 系统,处理器为 INTEL Celeron J3355 处理器(产品代号:Apollo Lake),首先利用 EnvDeploy 下载所需的编译环境:

cd /toolkit/pkgscripts-ng
sudo ./EnvDeploy -v 6.2 -p apollolake

请根据自己机器的系统版本和处理器类型自行调整 -v-p 参数。如果下载速度较慢可以手动从 https://sourceforge.net/projects/dsgpl/files/toolkit/DSM6.2/ 下载下列文件:

base_env-6.2.txz
ds.apollolake-6.2.dev.txz
ds.apollolake-6.2.env.txz

将其放置到 /toolkit/toolkit_tarballs 目录中,然后通过如下命令进行部署安装:

sudo ./EnvDeploy -v 6.2 -p apollolake -t /toolkit/toolkit_tarballs

/toolkit 目录下建立 source 文件夹,并将 tmux 源代码(本文以 3.1b 版本为例)下载到该文件夹中:

cd /toolkit
mkdir source
cd source
wget https://github.com/tmux/tmux/releases/download/3.1b/tmux-3.1b.tar.gz
tar -zxvf tmux-3.1b.tar.gz
mv tmux-3.1b tmux

在 tmux 源代码根目录中建立 SynoBuildConf 文件夹,并在文件夹中创建如下文件:

cd /toolkit/source/tmux
mkdir SynoBuildConf

build

#!/bin/bash

case ${MakeClean} in
	[Yy][Ee][Ss])
		make distclean
		;;
esac

NCURSES_INCS="$(pkg-config ncurses --cflags)"
NCURSES_LIBS="$(pkg-config ncurses --libs)"

CFLAGS="${CFLAGS} ${NCURSES_INCS}"
LDFLAGS="${LDFLAGS} ${NCURSES_LIBS}"

env CC="${CC}" AR="${AR}" CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" \
./configure ${ConfigOpt}

make ${MAKE_FLAGS}

depends

install

#!/bin/bash

PKG_NAME="tmux"
TGZ_DIR="/tmp/_${PKG_NAME}_tgz"
PKG_DIR="/tmp/_${PKG_NAME}_pkg"
PKG_DEST="/image/packages"

source /pkgscripts-ng/include/pkg_util.sh

create_package_tgz() {
	## clear destination directory
	for dir in $TGZ_DIR $PKG_DIR; do
		rm -rf "$dir"
	done
	for dir in $TGZ_DIR $PKG_DIR; do
		mkdir -p "$dir"
	done

	## install needed file into TGZ_DIR
	DESTDIR="${TGZ_DIR}" make install

	## create package.tgz
	pkg_make_package $TGZ_DIR $PKG_DIR
}

create_package_spk(){
	## Copy package center scripts to PKG_DIR
	cp -r synology/scripts/ $PKG_DIR

	## Copy package icon
	cp -av synology/PACKAGE_ICON*.PNG $PKG_DIR

	## Generate INFO file
	synology/INFO.sh > INFO
	cp INFO $PKG_DIR

	## Create the final spk.
	mkdir -p $PKG_DEST
	pkg_make_spk $PKG_DIR $PKG_DEST
}

main() {
	create_package_tgz
	create_package_spk
}

main "$@"

在 tmux 源代码根目录中建立 synology 文件夹,并在文件夹中创建如下文件:

cd /toolkit/source/tmux
mkdir synology

INFO.sh

#!/bin/sh

. /pkgscripts-ng/include/pkg_util.sh

package="tmux"
version="3.1b"
displayname="tmux"
arch="$(pkg_get_platform) "
maintainer="tmux"
maintainer_url="https://github.com/tmux"
distributor="Leo Van"
distributor_url="https://leovan.me"
description="tmux is a terminal multiplexer: it enables a number of terminals to be created, accessed, and controlled from a single screen. tmux may be detached from a screen and continue running in the background, then later reattached."
support_url="https://github.com/tmux/tmux"
thirdparty="yes"
startable="no"
silent_install="yes"
silent_upgrade="yes"
silent_uninstall="yes"

[ "$(caller)" != "0 NULL" ] && return 0

pkg_dump_info

并为其添加运行权限:

cd /toolkit/source/tmux/scripts
chmod u+x INFO.sh

下载 tmux 图标并将其重命名:

cd /toolkit/source/tmux/synology
wget https://raw.githubusercontent.com/tmux/tmux/master/logo/tmux-logo-huge.png
convert tmux-logo-huge.png -crop 480x480+0+0 -resize 72x PACKAGE_ICON.PNG
convert tmux-logo-huge.png -crop 480x480+0+0 -resize 256x PACKAGE_ICON_256.PNG

此处需要使用 ImageMagick 对图标进行裁剪和缩放,请自行安装,或在本地对图片进行处理后上传到指定目录。在 /toolkit/source/tmux/synology 目录中建立 scripts 文件夹,并在文件夹中创建如下文件:

cd /toolkit/source/tmux/synology
mkdir scripts

postinst

#!/bin/sh

ln -sf "$SYNOPKG_PKGDEST/usr/local/bin/tmux" /usr/bin/

postuninst

#!/bin/sh

rm -f /usr/local/bin/tmux
rm -f /usr/bin/tmux

postupgrade

preinst

preuninst

preupgrade

start-stop-status

#!/bin/sh

case $1 in
	start)
		exit 0
	;;
	stop)
		exit 0
	;;
	status)
		if [ -h "/usr/bin/tmux" ]; then
			exit 0
		else
			exit 1
		fi
	;;
	killall)
        ;;
	log)
		exit 0
	;;
esac

为所有文件添加运行权限:

cd /toolkit/source/tmux/synology/scripts
chmod u+x *

利用 PkgCreate.py 构建 tmux 扩展包:

sudo ./PkgCreate.py -v 6.2 -p apollolake tmux

最终构建完毕的扩展包位于 /toolkit/build_env/ds.apollolake-6.2/image/packages 中。

安装 tmux

/toolkit/build_env/ds.apollolake-6.2/image/packages 目录中有两个编译好的扩展包,分别是 tmux-apollolake-3.1b_debug.spktmux-apollolake-3.1b.spk。其中 tmux-apollolake-3.1b.spk 为 Release 版本,传输到本地,通过 NAS 的套件中心手动安装即可。安装完毕后,套件中心的“已安装”会出现 tmux,如下图所示:

进入 NAS 控制台,运行 tmux -V 可以得到安装好的 tmux 版本信息:

本文主要参考了 Synology 官方的扩展包构建指南:https://help.synology.com/developer-guide/create_package/index.html