V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
tommark
V2EX  ›  Linux

如何优雅的安装 tar.gz 格式的程序

  •  
  •   tommark · 2016-09-11 09:38:43 +08:00 · 7297 次点击
    这是一个创建于 2972 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    29 条回复    2016-10-06 10:03:39 +08:00
    Bardon
        1
    Bardon  
       2016-09-11 09:50:11 +08:00   ❤️ 1
    建议了解下 Gentoo 这类 source distributions 的包管理工作原理就知道了。
    或者 ArchLinux 的 ABS
    sylecn
        2
    sylecn  
       2016-09-11 09:50:27 +08:00 via Android   ❤️ 1
    fpm 可以把 tar.gz 格式的文件打成标准 deb 包。
    对于 Oracle JDK ,我一直是这样打包部署和升级的。
    arrow2015
        3
    arrow2015  
       2016-09-11 11:28:49 +08:00
    我是把 tag.gz 解压到~/Programs 文件夹下,./executable 这样使用的。之前每次启动都要 cd 到 executable 所在目录,非常麻烦。后来创建了~/start 文件夹,把 Programs 下所有软件的可执行文件 link 到~/start 文件夹下,再把~/start 加入 PATH ,现在我启动软件的流程是启动一个终端,然后直接输入 start 下的链接文件名启动。
    andyhuzhill
        4
    andyhuzhill  
       2016-09-11 11:32:13 +08:00
    .tar.gz 一般不是源码包么? 要 ./configure && make && make install 安装的吧
    arrow2015
        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
    notolddriver
        6
    notolddriver  
       2016-09-11 12:08:54 +08:00
    tar.gz 一般是认为是文件的压缩包格式啊
    所以你的问题等同于 如何优雅的安装打成压缩包的程序
    具体如何安装也要看程序项目是如何打包的了。
    比如很多 linux 程序提供*.tar.gz 的源码包,那么他的安装方式,通常便是:./configure && make && make install
    而有的程序是直接提供给你可运行的二进制文件*.tar.gz 压缩包了,那么你解压出来放到 bin 或者 sbin 目录下去,直接 shell 中调用即可了。
    所以说啊,这个根本没法控制的。。。
    bdbai
        7
    bdbai  
       2016-09-11 12:14:34 +08:00 via Android
    @notolddriver 自己解压的可以放进 /usr/local/bin
    neosfung
        8
    neosfung  
       2016-09-11 12:20:37 +08:00
    一般来说编译的是./configure && make && make install
    删除 make uninstall
    直接提供的二进制文件的就拉到 /usr/local/bin 下面,要删除的话直接删除就好了
    loading
        9
    loading  
       2016-09-11 12:24:04 +08:00 via Android
    很多安装包都是用压缩打包的方式,打包后使用一定扩展名,里面包含了约定的一个文件包含包信息和安装命令等(目录也是约定的)。

    你可以下载一个 debian 的 deb 包解开看看。
    loading
        10
    loading  
       2016-09-11 12:25:16 +08:00 via Android
    如果你用 debian ,可以先把源代码做成 deb 包保存,以后也能用。

    建议看看 archlinux 的 aur ,哈哈。
    skydiver
        11
    skydiver  
       2016-09-11 12:38:11 +08:00 via Android
    打成
    skydiver
        12
    skydiver  
       2016-09-11 12:39:22 +08:00 via Android
    打成发行版的包就行了,看一下文档,一般都有教程教你如何打成 deb 或者 rpm 或者 pkg.tar.xz
    sylecn
        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 .
    jyf007
        14
    jyf007  
       2016-09-11 20:57:22 +08:00 via Android
    emerge gentoo 欢迎你。
    Owenjia
        15
    Owenjia  
       2016-09-11 21:35:26 +08:00
    为什么需要使用这种方式安装?使用包管理工具不是更好?
    使用包管理工具的话,所安装的文件都可以被追踪到,卸载方便,同时处理依赖也方便。
    即使是官方仓库没有的,大多数 distro 也都提供了对第三方仓库的支持,实在想不到有什么理由这么用。
    linux40
        16
    linux40  
       2016-09-12 08:24:19 +08:00 via Android
    README
    wizardoz
        17
    wizardoz  
       2016-09-12 09:32:05 +08:00
    tar.gz 就是一种压缩方式.
    这个问题就相当于问: 如何优雅的安装.rar 格式的程序
    icris
        18
    icris  
       2016-09-12 13:32:35 +08:00
    @Owenjia 我的 windows 10 里的 bash , apt show nodejs 显示 Version: 0.10.25~dfsg2-2ubuntu1
    zhujq
        19
    zhujq  
       2016-09-12 15:06:02 +08:00
    知乎吗
    Owenjia
        20
    Owenjia  
       2016-09-12 17:19:17 +08:00 via Android
    @icris
    试下添加第三方仓库?
    https://github.com/nodesource/distributions
    icris
        21
    icris  
       2016-09-13 14:17:07 +08:00
    @Owenjia 只是例子,不针对 nodejs ,别的包也可能有这问题(只要官方只提供 tar.gz ),针对 node 的话 有 nvm 和 n 俩工具呢。
    Owenjia
        22
    Owenjia  
       2016-09-13 15:42:28 +08:00
    @icris
    我知道是例子,有些官方仓库中的版本确实会比较低
    但这种情况一般都可以通过添加第三方仓库解决,个人认为没有足够好的理由来手动编译安装,
    主要是存在依赖处理、版本更新等问题,这些更适合由包管理来做。
    vastchen
        23
    vastchen  
       2016-09-13 16:02:29 +08:00
    打包成发行版格式就可以了主流的 rpm deb 都可以打包 arch aru gentoo ebuild
    yumenami
        24
    yumenami  
       2016-09-18 11:49:05 +08:00
    说下我的方法:
    二进制包,直接解压到一个公共目录,个人用 /opt ,然后用环境变量控制使用哪一个(多个 release 的话)
    源码包类似, configure --prefix 到 /opt 下面,然后也用环境变量控制
    还有上面说不用包管理工具的,要知道不是所有的版本的 release , source 里面都会有的,所以这种方法还是必要的。当然手动管理的成本也有点高就是= =
    CuminLo
        25
    CuminLo  
       2016-09-21 16:11:04 +08:00
    @sylecn 带有图标的怎么弄? fpm 打包之后安装图标不能显示,有办法解决么
    sylecn
        26
    sylecn  
       2016-09-21 17:10:01 +08:00
    >> 带有图标的怎么弄? fpm 打包之后安装图标不能显示,有办法解决么

    @CuminLo 什么程序的图标? rpm/deb 都是默认图标的,应该不能自定义。
    安装好之后 app 自己的桌面图标一般是写 .desktop 文件。 app 自己的图标,这是 GUI 框架里面写好的。
    CuminLo
        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 ,而且在菜单中还搜索不到,需要输入完整的命令才行
    sylecn
        28
    sylecn  
       2016-09-22 11:40:57 +08:00
    @CuminLo 如果原来的软件自己没有带 .desktop 文件,可以在打包前自己写一个,然后放到系统级别的能识别的目录,比如 $DEST/usr/share/applications/smartgit.desktop 。.desktop 文件是文本格式的,格式也简单,一看就会。
    mritd
        29
    mritd  
       2016-10-06 10:03:39 +08:00 via iPhone
    @sylecn fpmfpm 大法好😊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1330 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 23:38 · PVG 07:38 · LAX 16:38 · JFK 19:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.