很多 linux 程序的安装文件都是 tar.gz 格式的,一般都是手动解压,然后把里面的目录放到对应的 linux 文件节点上,有没有像 deb 文件这样,可以自动完成这一切,同时系统里能自动注册程序包,以后可以用标准的成 apt-get remove 卸载程序。
1
Bardon 2016-09-11 09:50:11 +08:00 1
建议了解下 Gentoo 这类 source distributions 的包管理工作原理就知道了。
或者 ArchLinux 的 ABS |
2
sylecn 2016-09-11 09:50:27 +08:00 via Android 1
fpm 可以把 tar.gz 格式的文件打成标准 deb 包。
对于 Oracle JDK ,我一直是这样打包部署和升级的。 |
3
arrow2015 2016-09-11 11:28:49 +08:00
我是把 tag.gz 解压到~/Programs 文件夹下,./executable 这样使用的。之前每次启动都要 cd 到 executable 所在目录,非常麻烦。后来创建了~/start 文件夹,把 Programs 下所有软件的可执行文件 link 到~/start 文件夹下,再把~/start 加入 PATH ,现在我启动软件的流程是启动一个终端,然后直接输入 start 下的链接文件名启动。
|
4
andyhuzhill 2016-09-11 11:32:13 +08:00
.tar.gz 一般不是源码包么? 要 ./configure && make && make install 安装的吧
|
5
arrow2015 2016-09-11 11:54:27 +08:00
@andyhuzhill .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
|
6
notolddriver 2016-09-11 12:08:54 +08:00
tar.gz 一般是认为是文件的压缩包格式啊
所以你的问题等同于 如何优雅的安装打成压缩包的程序 具体如何安装也要看程序项目是如何打包的了。 比如很多 linux 程序提供*.tar.gz 的源码包,那么他的安装方式,通常便是:./configure && make && make install 而有的程序是直接提供给你可运行的二进制文件*.tar.gz 压缩包了,那么你解压出来放到 bin 或者 sbin 目录下去,直接 shell 中调用即可了。 所以说啊,这个根本没法控制的。。。 |
7
bdbai 2016-09-11 12:14:34 +08:00 via Android
@notolddriver 自己解压的可以放进 /usr/local/bin
|
8
neosfung 2016-09-11 12:20:37 +08:00
一般来说编译的是./configure && make && make install
删除 make uninstall 直接提供的二进制文件的就拉到 /usr/local/bin 下面,要删除的话直接删除就好了 |
9
loading 2016-09-11 12:24:04 +08:00 via Android
很多安装包都是用压缩打包的方式,打包后使用一定扩展名,里面包含了约定的一个文件包含包信息和安装命令等(目录也是约定的)。
你可以下载一个 debian 的 deb 包解开看看。 |
10
loading 2016-09-11 12:25:16 +08:00 via Android
如果你用 debian ,可以先把源代码做成 deb 包保存,以后也能用。
建议看看 archlinux 的 aur ,哈哈。 |
11
skydiver 2016-09-11 12:38:11 +08:00 via Android
打成
|
12
skydiver 2016-09-11 12:39:22 +08:00 via Android
打成发行版的包就行了,看一下文档,一般都有教程教你如何打成 deb 或者 rpm 或者 pkg.tar.xz
|
13
sylecn 2016-09-11 12:57:15 +08:00
楼上提到的那些需要编译后再安装的包, 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 . |
14
jyf007 2016-09-11 20:57:22 +08:00 via Android
emerge gentoo 欢迎你。
|
15
Owenjia 2016-09-11 21:35:26 +08:00
为什么需要使用这种方式安装?使用包管理工具不是更好?
使用包管理工具的话,所安装的文件都可以被追踪到,卸载方便,同时处理依赖也方便。 即使是官方仓库没有的,大多数 distro 也都提供了对第三方仓库的支持,实在想不到有什么理由这么用。 |
16
linux40 2016-09-12 08:24:19 +08:00 via Android
README
|
17
wizardoz 2016-09-12 09:32:05 +08:00
tar.gz 就是一种压缩方式.
这个问题就相当于问: 如何优雅的安装.rar 格式的程序 |
18
icris 2016-09-12 13:32:35 +08:00
@Owenjia 我的 windows 10 里的 bash , apt show nodejs 显示 Version: 0.10.25~dfsg2-2ubuntu1
|
19
zhujq 2016-09-12 15:06:02 +08:00
知乎吗
|
20
Owenjia 2016-09-12 17:19:17 +08:00 via Android
|
21
icris 2016-09-13 14:17:07 +08:00
@Owenjia 只是例子,不针对 nodejs ,别的包也可能有这问题(只要官方只提供 tar.gz ),针对 node 的话 有 nvm 和 n 俩工具呢。
|
22
Owenjia 2016-09-13 15:42:28 +08:00
@icris
我知道是例子,有些官方仓库中的版本确实会比较低 , 但这种情况一般都可以通过添加第三方仓库解决,个人认为没有足够好的理由来手动编译安装, 主要是存在依赖处理、版本更新等问题,这些更适合由包管理来做。 |
23
vastchen 2016-09-13 16:02:29 +08:00
打包成发行版格式就可以了主流的 rpm deb 都可以打包 arch aru gentoo ebuild
|
24
yumenami 2016-09-18 11:49:05 +08:00
说下我的方法:
二进制包,直接解压到一个公共目录,个人用 /opt ,然后用环境变量控制使用哪一个(多个 release 的话) 源码包类似, configure --prefix 到 /opt 下面,然后也用环境变量控制 还有上面说不用包管理工具的,要知道不是所有的版本的 release , source 里面都会有的,所以这种方法还是必要的。当然手动管理的成本也有点高就是= = |
26
sylecn 2016-09-21 17:10:01 +08:00
>> 带有图标的怎么弄? fpm 打包之后安装图标不能显示,有办法解决么
@CuminLo 什么程序的图标? rpm/deb 都是默认图标的,应该不能自定义。 安装好之后 app 自己的桌面图标一般是写 .desktop 文件。 app 自己的图标,这是 GUI 框架里面写好的。 |
27
CuminLo 2016-09-21 19:38:34 +08:00
@sylecn 比如 www.syntevo.com/smartgit/download?file=smartgit/smartgit-linux-8_0_1.tar.gz 这个用 fpm 打包成 deb 后安装,并没有写入 desktop ,而且在菜单中还搜索不到,需要输入完整的命令才行
|