如何优雅的安装 tar.gz 格式的程序 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
tommark
V2EX    Linux

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

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

    很多 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     Solana     1012 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 21ms UTC 18:10 PVG 02:10 LAX 11:10 JFK 14:10
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86