/myinit

myinit(目前自用)是一个可配置的系统初始化工具和点文件(dotfiles)管理工具,基于 .tar.gz 格式,可解包打包

Primary LanguagePython

myinit - 简要解释

myinit(目前自用)是一个可配置的系统初始化工具和点文件(dotfiles)管理工具,基于 .tar.gz 格式,可解包打包,有简单的版本更新功能。

需要目标系统有 bash、vim(你也可以不用但是要指定 EDITOR 环境变量为你喜欢的编辑器)、 python3.7。也可以试试用 pyinstaller 打包的可执行文件 _myinit,但会出问题,不推荐。

  • [.tar.gz]:存档包
  • [workspace]:配置指定的文件系统中某处的工作区(被用作 build 和版本管理)
  • [system]:文件系统
  • [entry]:配置文件中的条目,每一个条目可以是“文件类型”(大多数是此类型,将存档包中的某个成员和文件系统中的某个位置做关联)和“命令类型”(只在解包时有用,执行此条目时会执行条目内指定的 bash 脚本)

工作区是这样的一个目录:

/path/to/workspace/:
    - config.yaml # 此存档包的配置文件
    - __extra__ # 配置文件所用到的额外文件目录

打包流程

cd /path/to/workspace/
python3.7 myinit.py pack
# 会在当前工作区生成 [config_id].[config_version].tar.gz
[.tar.gz] <= [system files]
[.tar.gz] <= /path/to/workspace/config.yaml
[.tar.gz] <= /path/to/workspace/__extra__/

解包流程

cd /path/to/[archive].tar.gz
python3.7 myinit.py unpack ./[archive].tar.gz
# 将会顺次执行 [archive].tar.gz 中 config.yaml 中所有条目,将文件解包到系统,并执行配置里指定的脚本文件
[.tar.gz] => [system files]
copy [.tar.gz] to /path/to/workspace/
[.tar.gz] => /path/to/workspace/config.yaml # 此两项用来生成新存档包,以及版本追踪
[.tar.gz] => /path/to/workspace/__extra__/ # 此两项用来生成新存档包,以及版本追踪

版本管理

myinit 会在配置里指定的工作区里检测 config.yaml 和对应版本的存档包,来确认当前系统是否已经解包过上一版本的此存档包。如果上一版本存档包对应的文件被修改过,解包新存档包时会提示用户解决此文件的冲突,而不会覆盖,以保证安全。

详见 config.example.yaml.