7

在群晖 NAS 上编译安装 tmux

 2 years ago
source link: https://leovan.me/cn/2020/05/compile-and-install-tmux-on-synology-nas/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

在群晖 NAS 上编译安装 tmux

范叶亮 / 2020-05-07

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


工具链安装

登录 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

编译 tmux

/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

[default]
all="6.2"

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

#!/bin/sh

exit 0

preinst

#!/bin/sh

exit 0

preuninst

#!/bin/sh

exit 0

preupgrade

#!/bin/sh

exit 0

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 版本信息:

tmux 3.1b

在此放出编译好的 tmux 扩展包,方便和 DS418play 具有相同系统的 CPU 架构的小伙伴直接使用。

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

「真诚赞赏,手留余香」
「真诚赞赏,手留余香」

隐马尔可夫 (Hidden Markov Model, HMM),条件随机场 (Conditional Random Fields, CRF) 和序列标注 (Sequence Labeling) 强化学习简介 (Introduction of Reinforcement Learning)


© 2017-2021 Leo Van
Github · ORCID · I am Mr. Black.

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK