技术解析

如何优雅的安装 tar.gz 格式的程序
0
2021-07-02 15:31:21
idczone

很多 linux 程序的安装文件都是 tar.gz 格式的,一般都是手动解压,然后把里面的目录放到对应的 linux 文件节点上,有没有像 deb 文件这样,可以自动完成这一切,同时系统里能自动注册程序包,以后可以用标准的成 apt-get remove 卸载程序。


建议了解下 Gentoo 这类 source distributions 的包管理工作原理就知道了。
或者 ArchLinux 的 ABS

fpm 可以把 tar.gz 格式的文件打成标准 deb 包。
对于 Oracle JDK ,我一直是这样打包部署和升级的。

我是把 tag.gz 解压到~/Programs 文件夹下,./executable 这样使用的。之前每次启动都要 cd 到 executable 所在目录,非常麻烦。后来创建了~/start 文件夹,把 Programs 下所有软件的可执行文件 link 到~/start 文件夹下,再把~/start 加入 PATH ,现在我启动软件的流程是启动一个终端,然后直接输入 start 下的链接文件名启动。

.tar.gz 一般不是源码包么? 要 ./configure && make && make install 安装的吧

.tar.gz 我不怎么清楚。我知道有几个不是源码包的: atom-amd64.tar.gz, ideaIC-15.0.2.tar.gz, CLion-2016.2.1.tar.gz. 这几个不用 configure && make && make install. 你不说我还没有意识到有这2种区别的.tar.gz

tar.gz 一般是认为是文件的压缩包格式啊
所以你的问题等同于 如何优雅的安装打成压缩包的程序
具体如何安装也要看程序项目是如何打包的了。
比如很多 linux 程序提供*.tar.gz 的源码包,那么他的安装方式,通常便是:./configure && make && make install
而有的程序是直接提供给你可运行的二进制文件*.tar.gz 压缩包了,那么你解压出来放到 bin 或者 sbin 目录下去,直接 shell 中调用即可了。
所以说啊,这个根本没法控制的。。。

自己解压的可以放进 /usr/local/bin

一般来说编译的是./configure && make && make install
删除 make uninstall
直接提供的二进制文件的就拉到 /usr/local/bin 下面,要删除的话直接删除就好了

很多安装包都是用压缩打包的方式,打包后使用一定扩展名,里面包含了约定的一个文件包含包信息和安装命令等(目录也是约定的)。
你可以下载一个 debian 的 deb 包解开看看。

如果你用 debian ,可以先把源代码做成 deb 包保存,以后也能用。
建议看看 archlinux 的 aur ,哈哈。

打成

打成发行版的包就行了,看一下文档,一般都有教程教你如何打成 deb 或者 rpm 或者 pkg.tar.xz

楼上提到的那些需要编译后再安装的包, fpm 已可以提供支持的。
只要 make install 那一步添加一下 DESTDIR ,然后再打包。
比如我曾经打 libestr 这个包的时候:
get source from http://libestr.adiscon.com/files/download/libestr-0.1.8.tar.gz
./configure
make
make install DESTDIR=$PWD/fpm-dest
fpm -s dir -t deb -n libestr -v 0.1.8 --url "http://libestr.sourceforge.net/" --description "Helper functions for handling strings" -C fpm-dest .

emerge gentoo 欢迎你。

为什么需要使用这种方式安装?使用包管理工具不是更好?
使用包管理工具的话,所安装的文件都可以被追踪到,卸载方便,同时处理依赖也方便。
即使是官方仓库没有的,大多数 distro 也都提供了对第三方仓库的支持,实在想不到有什么理由这么用。

README

tar.gz 就是一种压缩方式.
这个问题就相当于问: 如何优雅的安装.rar 格式的程序

我的 windows 10 里的 bash , apt show nodejs 显示 Version: 0.10.25~dfsg2-2ubuntu1

知乎吗


试下添加第三方仓库?
https://github.com/nodesource/distributions

只是例子,不针对 nodejs ,别的包也可能有这问题(只要官方只提供 tar.gz ),针对 node 的话 有 nvm 和 n 俩工具呢。


我知道是例子,有些官方仓库中的版本确实会比较低
但这种情况一般都可以通过添加第三方仓库解决,个人认为没有足够好的理由来手动编译安装,
主要是存在依赖处理、版本更新等问题,这些更适合由包管理来做。

打包成发行版格式就可以了主流的 rpm deb 都可以打包 arch aru gentoo ebuild

说下我的方法:
二进制包,直接解压到一个公共目录,个人用 /opt ,然后用环境变量控制使用哪一个(多个 release 的话)
源码包类似, configure --prefix 到 /opt 下面,然后也用环境变量控制
还有上面说不用包管理工具的,要知道不是所有的版本的 release , source 里面都会有的,所以这种方法还是必要的。当然手动管理的成本也有点高就是= =

带有图标的怎么弄? fpm 打包之后安装图标不能显示,有办法解决么

>> 带有图标的怎么弄? fpm 打包之后安装图标不能显示,有办法解决么
什么程序的图标? rpm/deb 都是默认图标的,应该不能自定义。
安装好之后 app 自己的桌面图标一般是写 .desktop 文件。 app 自己的图标,这是 GUI 框架里面写好的。

比如 www.syntevo.com/smartgit/download?file=smartgit/smartgit-linux-8_0_1.tar.gz 这个用 fpm 打包成 deb 后安装,并没有写入 desktop ,而且在菜单中还搜索不到,需要输入完整的命令才行

如果原来的软件自己没有带 .desktop 文件,可以在打包前自己写一个,然后放到系统级别的能识别的目录,比如 $DEST/usr/share/applications/smartgit.desktop 。.desktop 文件是文本格式的,格式也简单,一看就会。

fpmfpm 大法好
数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服