Closed asukaminato0721 closed 1 year ago
哇哦,这样说,有了PKGBUILD就可以同时构件deb和arch了
@wuyudi 试了一下,感觉可以,只不过下载资源的速度太慢了。。。
备注:克隆子模块:git clone --recursive 仓库地址
如果使用PKGBUILD,我希望可以直接在本地仓库中构建,尽量少的使用下载资源,因为太慢了。
或许把winetricks作为公共基础运行库使用,然后把容器放到winetricks给定的目录,之类的。。。
把 x86_64 改成 amd64会对arch系造成啥影响嘛?
我期望arch与deb可以得到统一的打包方式 :-D
https://gitlab.archlinux.org/pacman/pacman/raw/master/proto/PKGBUILD.proto
https://wiki.archlinuxcn.org/wiki/%E5%88%9B%E5%BB%BA%E8%BD%AF%E4%BB%B6%E5%8C%85
install .install 脚本的名称。这个值应该和 pkgname 相同。pacman 可以在安装、卸载或升级一个软件包时存储及执行一些特定的脚本。在不同的情况下,脚本包含了下面几个函数,并且在特定时刻执行它们:
pre_install - 安装前运行的脚本。可以传递一个参数:版本号。 post_install - 安装后运行的脚本。可以传递一个参数:版本号。 pre_upgrade - 升级前运行的脚本。可以按以下顺序传递两个参数:新版本号,旧版本号。 post_upgrade - 升级后运行的脚本。可以按以下顺序传递两个参数:新版本号,旧版本号。 pre_remove - 卸载前运行的脚本,可以传递一个参数:版本号。 post_remove - 卸载后运行的脚本,可以传递一个参数:版本号。 每一个函数都是在 pacman 安装目录下通过 chroot 运行。参见这个帖子.
提示: 一个 .install 文件的模板(原型)可以在/usr/share/pacman/proto.install 这里找到。 Pacman 钩子也提供相似的功能。 注意: 脚本不要以 exit 结束,否则包含的函数无法被执行。
changelog 软件包的更新日志的文件名。
只不过下载资源的速度太慢了。。。
走代理了吗。
克隆子模块:git clone --recursive 仓库地址
不需要,我没有用 submodule, 因为两个仓库我都直接 git clone 了。只需要里面的一个 foler.
把 x86_64 改成 amd64 会对 arch 系造成啥影响嘛?
https://wiki.archlinux.org/title/PKGBUILD#arch 官方这么写的。反正就改个字段的事。
{pre,post}_* 那堆暂时不用管。
我期望 arch 与 deb 可以得到统一的打包方式 :-D
这个包可能可以,但是别的不行,因为依赖的名字,版本都可能不一样。
{pre,post}_* 那堆暂时不用管。克隆子模块:git clone --recursive 仓库地址
这些是做一个笔记。
这个包可能可以,但是别的不行,因为依赖的名字,版本都可能不一样。
我希望这个软件可以得到统一。
https://wiki.archlinux.org/title/PKGBUILD#arch 官方这么写的。反正就改个字段的事。
所以直接改成amd64就可以了对吧。
走代理了吗。
主机走了,虚拟机不确定。
反正也只是一个收集文件然后组装打包的过程。
所以直接改成 amd64 就可以了对吧。
应该是的。
主机走了,虚拟机不确定。
curl google.com 看看。
反正也只是一个收集文件然后组装打包的过程。
收集文件 + 放到指定地方的指令的序列。
我创建了一个新的分支用于测试makedeb。
@wuyudi 本地家目录下的路径针对不同用户都不好定义。。。。。
local prefix=$pkgdir/$HOME/.local/share/wineprefixes/
对于仅一次性构建并安装者可以这样做,对于管理者发包,emmm。。。
对于xiaoa用户他的家目录就是home/xiaoa/
对于hong用户他的家目录就是home/hong
我想不到用啥方法代表他们的家目录。
所以一般配置/数据文件和软件本体是分开的。
配置放 ~/.config/$pkgname ,用户各自用各自的。owner 是 USER 数据放 /opt/$pkgname/ 之类的地方 ,所有用户都是统一的。owner 是 root
但是这软件是数据本体放一起的。(应该可以改,我不清楚)。
所以我用了一些 trick 把本体塞 $HOME/ 里面了。这样非 root 可读可写,权限也对。
那我们怎样才可以放/opt/pkg/, owner是root呢?@wuyudi
创建链接文件夹应该可以实现数据本体分离
具体说把软件中的system文件夹换成链接文件夹链接到home下
那我们怎样才可以放/opt/pkg/, owner是root呢?@wuyudi
install -Dm755 binary -t "${pkgdir}/opt/apps/${pkgname}/"
OK
@wuyudi 放弃了放弃了,pkgbuild,太复杂了,这不适合我。
编译安装确实蛮好,但我更喜欢deb的打包方式。
不过我还是会做数据软件分离的
编译安装确实蛮好
这个脚本里没有编译啊。。只不过是 pkgbuild 允许把编译过程放进构建脚本。
我最近看了下 deb 的格式,data.tar.xz 里面描述了包的文件的摆放结构。
control.targz 里面的 postinst postrm 是包安装/卸载时的钩子。
别的就是些元信息。
嗯,确实没有编译,算是函数式打包吧。虽然灵活,但需要的额外知识太多了,我自己做不过来。
我希望得到的结果是一个可以快速安装的tall包,或者deb包。
我邀请你了,同意后你将拥有该仓库的修改权限啦 @wuyudi
怎么说呢,实际上要考虑的事情远比想象的情况要多的多,相对来说deb更简单。
我知道怎么做了。。把环境做成压缩包塞到 /opt 下,然后 run.sh
#!/bin/sh
if [ ! -d folder ];
then
tar -xvpf /path/to/data.tar.gz -C folder
fi
wine /path/to/exe
运行 run.sh 是非 root。opt 是 root, 但是这里只读,所以没事。
deepin-wine 系列的应用全是这么做的,直接分发一个 wine 环境,运行第一次时解压到位置里。
赞!
还有一个问题,就是如何组织仓库与pkgbuild呢,pkgbuild在执行时可能会重复下载仓库。
还有一个问题,就是如何组织仓库与pkgbuild呢,pkgbuild在执行时可能会重复下载仓库。
这个不用担心,我为了保证一致性锁定了 commit
那我克隆仓库后,仓库里面有pkgbuild文件它还会再下载仓库吗?
我已经把 PKGBUILD 删掉了,没有问题了。
那我用什么构建软件包呢?😭
那我用什么构建软件包呢?sob
PKGBUILD 就是一个独立的脚本。以及可以把脚本仓库传到 https://mpr.makedeb.org/
https://docs.makedeb.org/introduction/welcome/
tldr:安装好 makedeb 后
按照 https://docs.makedeb.org/makedeb/differences-from-makepkg/ 里的,把 x86_64 改成 amd64
然后在 PKGBUILD 同目录下
makedeb -si
,理论上就能得到一个 deb 的安装包了。手头没有 debian/ubuntu 环境,无法测试。