Zacharia2 / SuperMemo18-ON-Wine

Linux/Mac SuperMemo18.05 WINE32 DEB安装包、渐进学习
https://zhuanlan.zhihu.com/p/554277420
37 stars 2 forks source link

看上去有个 makedeb #13

Closed asukaminato0721 closed 1 year ago

asukaminato0721 commented 1 year ago

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 环境,无法测试。

Zacharia2 commented 1 year ago

哇哦,这样说,有了PKGBUILD就可以同时构件deb和arch了

Zacharia2 commented 1 year ago

@wuyudi 试了一下,感觉可以,只不过下载资源的速度太慢了。。。 image

备注:克隆子模块:git clone --recursive 仓库地址

Zacharia2 commented 1 year ago

如果使用PKGBUILD,我希望可以直接在本地仓库中构建,尽量少的使用下载资源,因为太慢了。

Zacharia2 commented 1 year ago

或许把winetricks作为公共基础运行库使用,然后把容器放到winetricks给定的目录,之类的。。。

Zacharia2 commented 1 year ago

把 x86_64 改成 amd64会对arch系造成啥影响嘛?

Zacharia2 commented 1 year ago

我期望arch与deb可以得到统一的打包方式 :-D

Zacharia2 commented 1 year ago

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 软件包的更新日志的文件名。

asukaminato0721 commented 1 year ago

只不过下载资源的速度太慢了。。。

走代理了吗。

克隆子模块:git clone --recursive 仓库地址

不需要,我没有用 submodule, 因为两个仓库我都直接 git clone 了。只需要里面的一个 foler.

把 x86_64 改成 amd64 会对 arch 系造成啥影响嘛?

https://wiki.archlinux.org/title/PKGBUILD#arch 官方这么写的。反正就改个字段的事。

{pre,post}_* 那堆暂时不用管。

我期望 arch 与 deb 可以得到统一的打包方式 :-D

这个包可能可以,但是别的不行,因为依赖的名字,版本都可能不一样。

Zacharia2 commented 1 year ago

{pre,post}_* 那堆暂时不用管。克隆子模块:git clone --recursive 仓库地址

这些是做一个笔记。

这个包可能可以,但是别的不行,因为依赖的名字,版本都可能不一样。

我希望这个软件可以得到统一。

https://wiki.archlinux.org/title/PKGBUILD#arch 官方这么写的。反正就改个字段的事。

所以直接改成amd64就可以了对吧。

走代理了吗。

主机走了,虚拟机不确定。

Zacharia2 commented 1 year ago

反正也只是一个收集文件然后组装打包的过程。

asukaminato0721 commented 1 year ago

所以直接改成 amd64 就可以了对吧。

应该是的。

主机走了,虚拟机不确定。

curl google.com 看看。

反正也只是一个收集文件然后组装打包的过程。

收集文件 + 放到指定地方的指令的序列。

Zacharia2 commented 1 year ago

我创建了一个新的分支用于测试makedeb。

Zacharia2 commented 1 year ago

@wuyudi 本地家目录下的路径针对不同用户都不好定义。。。。。

local prefix=$pkgdir/$HOME/.local/share/wineprefixes/

对于仅一次性构建并安装者可以这样做,对于管理者发包,emmm。。。

Zacharia2 commented 1 year ago

对于xiaoa用户他的家目录就是home/xiaoa/

对于hong用户他的家目录就是home/hong

我想不到用啥方法代表他们的家目录。

asukaminato0721 commented 1 year ago

所以一般配置/数据文件和软件本体是分开的。

配置放 ~/.config/$pkgname ,用户各自用各自的。owner 是 USER 数据放 /opt/$pkgname/ 之类的地方 ,所有用户都是统一的。owner 是 root

但是这软件是数据本体放一起的。(应该可以改,我不清楚)。

所以我用了一些 trick 把本体塞 $HOME/ 里面了。这样非 root 可读可写,权限也对。

Zacharia2 commented 1 year ago

那我们怎样才可以放/opt/pkg/, owner是root呢?@wuyudi

Zacharia2 commented 1 year ago

创建链接文件夹应该可以实现数据本体分离

Zacharia2 commented 1 year ago

具体说把软件中的system文件夹换成链接文件夹链接到home下

asukaminato0721 commented 1 year ago

那我们怎样才可以放/opt/pkg/, owner是root呢?@wuyudi

install -Dm755 binary -t "${pkgdir}/opt/apps/${pkgname}/"
Zacharia2 commented 1 year ago

OK

Zacharia2 commented 1 year ago

@wuyudi 放弃了放弃了,pkgbuild,太复杂了,这不适合我。

编译安装确实蛮好,但我更喜欢deb的打包方式。

Zacharia2 commented 1 year ago

不过我还是会做数据软件分离的

asukaminato0721 commented 1 year ago

编译安装确实蛮好

这个脚本里没有编译啊。。只不过是 pkgbuild 允许把编译过程放进构建脚本。


我最近看了下 deb 的格式,data.tar.xz 里面描述了包的文件的摆放结构。

control.targz 里面的 postinst postrm 是包安装/卸载时的钩子。

别的就是些元信息。

Zacharia2 commented 1 year ago

嗯,确实没有编译,算是函数式打包吧。虽然灵活,但需要的额外知识太多了,我自己做不过来。

Zacharia2 commented 1 year ago

我希望得到的结果是一个可以快速安装的tall包,或者deb包。

Zacharia2 commented 1 year ago

我邀请你了,同意后你将拥有该仓库的修改权限啦 @wuyudi

Zacharia2 commented 1 year ago

怎么说呢,实际上要考虑的事情远比想象的情况要多的多,相对来说deb更简单。

asukaminato0721 commented 1 year ago

我知道怎么做了。。把环境做成压缩包塞到 /opt 下,然后 run.sh

ref https://stackoverflow.com/questions/59838/how-do-i-check-if-a-directory-exists-or-not-in-a-bash-shell-script

#!/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 环境,运行第一次时解压到位置里。

Zacharia2 commented 1 year ago

赞!

Zacharia2 commented 1 year ago

还有一个问题,就是如何组织仓库与pkgbuild呢,pkgbuild在执行时可能会重复下载仓库。

asukaminato0721 commented 1 year ago

还有一个问题,就是如何组织仓库与pkgbuild呢,pkgbuild在执行时可能会重复下载仓库。

这个不用担心,我为了保证一致性锁定了 commit

Zacharia2 commented 1 year ago

那我克隆仓库后,仓库里面有pkgbuild文件它还会再下载仓库吗?

asukaminato0721 commented 1 year ago

我已经把 PKGBUILD 删掉了,没有问题了。

Zacharia2 commented 1 year ago

那我用什么构建软件包呢?😭

asukaminato0721 commented 1 year ago

那我用什么构建软件包呢?sob

PKGBUILD 就是一个独立的脚本。以及可以把脚本仓库传到 https://mpr.makedeb.org/