帮顶!
不要停留在构想,任何计算机问题,都可以通过中间层来解决,加油搞搞
帮顶!
不要停留在构想,任何计算机问题,都可以通过中间层来解决,加油搞搞
不要继续做了,真的。
现有的包管理器比如 apt
已经能很好地工作了,用户并不需要另一个包管理器(诸如仅用户安装等功能虽然确实有用,但没有也不是大问题)。
appimage
、flatpak
和 snap
基本上都是试图解决跨发行版打包麻烦以及依赖的问题,虽然这三者都有缺点,但你要开发的这个包管理器也不能解决这个问题呀。
对于你说的把系统和应用软件包分开处理,尽管有些道理,但这不是必须开发一个新的包管理器的理由,linux
众多发行版这么多年一直都是统一处理的,发展到今天也没有遇到什么问题,如果你开发了一个新的包管理器,然后告诉大家能把系统和应用软件包分开处理,你觉得用户会因此而使用这个新的包管理器吗?我觉得不会。
LINUX的依赖版本不同,名称却一样,导致只能在环境变量中只有一个依赖,除非手动编译指定它,我们是否可以自动识别版本号,来自动识别应该使用哪个版本的依赖文件及位置呢
听起来有点像 homebrew
LINUX的依赖版本不同,名称却一样,导致只能在环境变量中只有一个依赖,除非手动编译指定它,我们是否可以自动识别版本号,来自动识别应该使用哪个版本的依赖文件及位置呢
这就是 Nix 在做的事情
不要继续做了,真的。
现有的包管理器比如 apt
已经能很好地工作了,用户并不需要另一个包管理器(诸如仅用户安装等功能虽然确实有用,但没有也不是大问题)。
appimage
、flatpak
和 snap
基本上都是试图解决跨发行版打包麻烦以及依赖的问题,虽然这三者都有缺点,但你要开发的这个包管理器也不能解决这个问题呀。
对于你说的把系统和应用软件包分开处理,尽管有些道理,但这不是必须开发一个新的包管理器的理由,linux
众多发行版这么多年一直都是统一处理的,发展到今天也没有遇到什么问题,如果你开发了一个新的包管理器,然后告诉大家能把系统和应用软件包分开处理,你觉得用户会因此而使用这个新的包管理器吗?我觉得不会。
是的,但是Linux发展了这么多年,出现的flatpak,snap,appimage确实是对于这些问题的解决方案。
而且可以确定的是,有些问题不可能完美的解决。他们各自有各自的问题。
但是统一管理的方式我认为已经过时了,倒不是说在整个linux生态发展里过时了,而是在linux桌面环境的发展过程中过时了,当linux不再专一的执行指定任务时,统一的包管理器就展现出了它的弊端。
现在flatpak和snap的方案,确实对用户来说很好,但是对于开发者和打包者的压力稍大。而且容器这中方案也会带来一些麻烦。
appimage解决了大部分问题,我认为最大的缺点就是不方便管理。
LINUX的依赖版本不同,名称却一样,导致只能在环境变量中只有一个依赖,除非手动编译指定它,我们是否可以自动识别版本号,来自动识别应该使用哪个版本的依赖文件及位置呢
自动识别依赖应该可以实现,但是识别出需要的版本恐怕困难
虽然不太懂,点赞是必须的
是的,但是Linux发展了这么多年,出现的flatpak,snap,appimage确实是对于这些问题的解决方案。
而且可以确定的是,有些问题不可能完美的解决。他们各自有各自的问题。
但是统一管理的方式我认为已经过时了,倒不是说在整个linux生态发展里过时了,而是在linux桌面环境的发展过程中过时了,当linux不再专一的执行指定任务时,统一的包管理器就展现出了它的弊端。
现在flatpak和snap的方案,确实对用户来说很好,但是对于开发者和打包者的压力稍大。而且容器这中方案也会带来一些麻烦。
appimage解决了大部分问题,我认为最大的缺点就是不方便管理。
传统的包管理器确实显得有些过时了,但并非所有系统和应用全都管的包管理器都过时了。Nix 管得甚至比传统包管理器更宽,但它是新式的解决方案之一。个人觉得给 nix-env 做一个类似应用商店的前端,或者将其与 packagekit 结合(EDIT: 似乎已经有轮子了),都比重新造个轮子更现实
传统的包管理器确实显得有些过时了,但并非所有系统和应用全都管的包管理器都过时了。Nix 管得甚至比传统包管理器更宽,但它是新式的解决方案之一。个人觉得给 nix-env 做一个类似应用商店的前端,或者将其与 packagekit 结合(EDIT: 似乎已经有轮子了),都比重新造个轮子更现实
nix这个之前还真没了解过,刚大概看了一下确实很不错,再去详细了解试用一下
自动识别依赖应该可以实现,但是识别出需要的版本恐怕困难
这也是中间件要做的,
绝大多数可以使用 -V 输出它的版本号,如果没有使用APT,DEB,而是使用MAKE源码构建安装,我觉得依赖,就是一个编译好的文件,需要什么版本,我们去告诉它路径即可,也就是文件名+版本号,
比如 A 1.1 依赖B2.3 系统中只有B2.1
那我们装一个B2.3即可,2.1不动它
当然我们可以轻松管理每一个依赖,是否被引用所需,或者没有被引用,重而进行缩小系统
这个是一个中间层,也就是 让大多软件依赖库多版本共存, 需要什么版本,告诉它 在哪里,PYENV解决啦PY的版本路径问题,只是一个思路,但是可行不可行不知道
依赖有很多种的,比如库依赖、可执行文件的依赖、插件依赖、资源依赖,并非所有的软件包都是标准二进制程序。
如果是普通程序
库依赖好说,使用ldd命令即可获得其依赖库的列表,但是其还可能用到了其他命令,比如wget,比如apt,这些,如果程序中使用了这些命令,我们肯定无法在程序运行前的阶段发现,这时就只能由开发者说明了,这是个例子,说明自动获取需要哪些依赖不是完全可行的。
另外就是依赖版本
还是拿普通程序举例,如果是库依赖,要获取版本,只要在可以运行的环境下,检测当前环境库的版本,记录即可,这样做的缺点是记录的库版本并不一定是最低需求版本。如果是可执行程序依赖,确实很多程序-v可以得到版本号,但是这并不是强制标准,其输出的格式也不一样,因此不能用这个方法。
所以,依赖的标注以能依靠开发者或者打包者去提前编写。
我们要解决的问题是,就像你说的,要安装多个版本的依赖,这个暂时还没有实现。
依赖有很多种的,比如库依赖、可执行文件的依赖、插件依赖、资源依赖,并非所有的软件包都是标准二进制程序。
如果是普通程序
库依赖好说,使用ldd命令即可获得其依赖库的列表,但是其还可能用到了其他命令,比如wget,比如apt,这些,如果程序中使用了这些命令,我们肯定无法在程序运行前的阶段发现,这时就只能由开发者说明了,这是个例子,说明自动获取需要哪些依赖不是完全可行的。
另外就是依赖版本
还是拿普通程序举例,如果是库依赖,要获取版本,只要在可以运行的环境下,检测当前环境库的版本,记录即可,这样做的缺点是记录的库版本并不一定是最低需求版本。如果是可执行程序依赖,确实很多程序-v可以得到版本号,但是这并不是强制标准,其输出的格式也不一样,因此不能用这个方法。
所以,依赖的标注以能依靠开发者或者打包者去提前编写。
我们要解决的问题是,就像你说的,要安装多个版本的依赖,这个暂时还没有实现。
这个中间层就是要做这个,能够解决这个问题,
我们可以自我一种 原则标准,可以让用户添加,
例如:我们给出 版本号的标准,用户可以自己填上所需版本号,和路径,然后跳入
这个可能是一个长效机制,需要大量的日积月累,这个配置文件可以共享,
社区可以把源码和二进制按规定放到对应版本路径及信息里面,或者其他形式
也不知道可以实现不,我现在所有的软件 就是 编译后路径加版本号, 但是其他一些不同的软件或者依赖形式,也需要慢慢解决,
APT不就是日记月累
是的,但是Linux发展了这么多年,出现的flatpak,snap,appimage确实是对于这些问题的解决方案。
而且可以确定的是,有些问题不可能完美的解决。他们各自有各自的问题。
但是统一管理的方式我认为已经过时了,倒不是说在整个linux生态发展里过时了,而是在linux桌面环境的发展过程中过时了,当linux不再专一的执行指定任务时,统一的包管理器就展现出了它的弊端。
现在flatpak和snap的方案,确实对用户来说很好,但是对于开发者和打包者的压力稍大。而且容器这中方案也会带来一些麻烦。
appimage解决了大部分问题,我认为最大的缺点就是不方便管理。
appimage是支持增量更新的
https://docs.appimage.org/packaging-guide/optional/updates.html
原理是基于zsync实现的
大佬啥时候毕业,来deepin么?
大佬啥时候毕业,来deepin么?
抱歉这几天忙,今天才看到,我还有一年毕业,能去deepin那肯定非常乐意啊
抱歉这几天忙,今天才看到,我还有一年毕业,能去deepin那肯定非常乐意啊
Popular Events
More
一直有个设想,能否把传统包管理器分来,另传统包管理器(apt、yum)只负责系统层面的安装和更新,应用的安装和更新交给另外的包管理器做,针对这个设想,我总结了下面这些理由:
该包管理器为了解决传统现有的包管理器的以下问题:
现有的其他方案存在的问题:
我们都能很好解决吗?
不能。
其实我们的目标并非完全解决这些问题,就比如flatpak的方案,我们不能既要容器机制带来的安全性,又摒弃它所带来的弊端,我们只能寻求一个平衡的方案。我们希望提供当前状况下的最优解,而非真正意义上的最优解。
定位
首先确定一下这款新的包管理器的定位,目前来说,我们要解决的问题只是关于普通应用程序的问题,因此该包管理器仅用于管理普通应用,类似AppStore,他并不会涉及到系统包管理器(例如apt、yum这些)。
计划
作为一个现代的包管理器,我认为他应当至少具有一下特性:
目前我已经开始尝试开发了一部分,简单描述一下已经实现部分的细节:
已经落实部分
打包
最基础的就是软件的打包,这部分使用tar进行打包,使用gzip进行压缩,并且支持软链接的打包和压缩,并且可以在不解压的情况下计算解压后所占空间。
包的结构大致如下:
工作目录/data
下,也就是说,这个是可以用来安装主题,字体等内容的。解包
打包的反向操作。
安装
安装机制需要特殊说明,这里我需要定义两个目录:
这两个目录的作用相同,区别就是一个针对全部用户,一个针对当前用户(管理器将根据当前运行的用户身份确定使用哪个)。这两个目录将称为工作目录。
工作目录的子目录data将在用户登录时加入XDG_DATA_DIRS环境变量中,也就是说:
/usr/share/finc/data和~/.local/share/finc/data
这两个目录将等同于我们通常使用的
/usr/share
目录。另外还有一个子目录exe,这个子目录将被加入到PATH环境变量中,也就是说:
/usr/share/finc/exe和~/.local/share/finc/exe
这两个目录将等同于我们通常使用的/usr/bin目录。
这么做的好处就是将包管理器本身所管理的内容于系统中现有内容隔离,提高可靠性,降低故障率。
另外工作目录还有一个子目录apps,这个目录将用于存放软件的主要文件。
安装过程
安装过程就是按照现有的规范将软件包中相应的文件该解压的解压,该链接的链接。
工作目录/apps/包名
对应文件夹下。工作目录/data
目录下。工作目录/exe
中,内容大致如下(以motrix举例):工作目录/apps/包名/runtime
中的对应目录下。(暂时未做,因为依赖的部分逻辑暂时还没实现)至此,便基本上实现了大致的流程。
假设问答
怎么划分哪些是应用程序哪些是系统程序?
像虚拟机程序这种,在安装过程中必须用到root权限的怎么办?
只支持软件吗?
最后
上边是对于这个东西的初步想法和实现的尝试,肯定有诸多不完善,希望大家能尽情的提出建议,由于现在只是初步,所以大家的建议将影响这个东西怎么做,做成什么样,甚至是要不要继续做。
欢迎一起讨论!!!!!!!!!!!!