Zacharia2 / SuperMemo18-ON-Wine

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

尝试数据软件分离 #14

Closed Zacharia2 closed 1 year ago

Zacharia2 commented 1 year ago

尝试使用winetricks依赖代替wine.appimage

Zacharia2 commented 1 year ago

$HOME/.local/share/wineprefixes/容器名

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

Zacharia2 commented 1 year ago

这样的话(wine改成winetricks依赖项),仅需要将容器与软件放到预制环境中的预设位置就可以了。在设置一下安装时与删除时的动作添加额外的快捷使用方式。

Zacharia2 commented 1 year ago

只是依赖的安装时间可能会过长,不过可以试一下。

但也可以使用一个好的源仓库解决,比如国内的华为源

Zacharia2 commented 1 year ago

安装后执行的脚本:post_install

卸载后执行的脚本:post_remove

https://github.com/Zacharia2/SuperMemo18-ON-Wine/blob/c425c49d91222719f4b05fa9391f82faccdd8d38/deb-package/DEBIAN/postinst

Zacharia2 commented 1 year ago

wine-6.0.3 (Ubuntu 6.0.3~repack-1),目前只能使用这个版本了,winehq官网最新8.0版安装参数太复杂。

Zacharia2 commented 1 year ago

git clone --recursive https://github.com/Zacharia2/SuperMemo18-ON-Wine.git

/home/whitefall/桌面/SuperMemo18-ON-Wine/SM18.05-WINE-Vessel/drive_c/windows/notepad.exe

env WINEARCH=win32 WINEPREFIX="/home/whitefall/桌面/SuperMemo18-ON-Wine/SM18.05-WINE-Vessel" wine notepad.exe

Zacharia2 commented 1 year ago

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

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

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

Zacharia2 commented 1 year ago

可以将仓库克隆下来在执行构建命令,本地打包,最终用户安装的方式

Zacharia2 commented 1 year ago

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

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

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

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

install -Dm755 binary -t "${pkgdir}/opt/apps/${pkgname}/"

Zacharia2 commented 1 year ago

打包安装阶段时不可以,但软件启动后就可以了呀。

Zacharia2 commented 1 year ago

所以可以额外写个脚本,用于第一次使用的初始化。

Zacharia2 commented 1 year ago

SUDO_USER=whitefall,如果是使用这个的话。

LOGNAME=whitefall

su - user -c "systemctl --user start chrome-setup.service"

需要判断是不是sudo,那就需要判断有无SUDO_USER变量。

Zacharia2 commented 1 year ago

mkdir -p "/home/"${LOGNAME}"/桌面/SuperMemo卡组与资料库/"

Zacharia2 commented 1 year ago

未完成的事情: 桌面/SuperMemo卡组与资料库/ 的创建于删除脚本。。。。

heisaari commented 1 year ago

有个初级问题,为啥C既有卡组也有资料库,D和E只有卡组目录呢

Zacharia2 commented 1 year ago

因为SuperMemo装在wine的c盘,你也可以自己设置 @heisaari

Zacharia2 commented 1 year ago

仅知超级用户需要知道普通用户的名称才可以。

那可以写一个startup脚本,绑定快捷方式。脚本中仅执行一次初始化任务。

Zacharia2 commented 1 year ago
   sudo -u $(who | grep "(:0)" | awk '{print $1}') sh /path/to/script.sh

其中,/path/to/script.sh是指要执行的脚本的路径和文件名。