https://docs.saltstack.com/en/latest/topics/windows/windows-package-manager.html
可以看官网文档,本人英文差,翻译不好,谅解
在2015.8.0及更高版本中,Windows Software Repository缓存是在Salt Minion上编译的
SaltStack Windows软件资源库提供了一个软件包管理器和软件资源库,类似于Linux上的yum和apt提供的资源库。该存储库可以使用远程Windows系统上的安装程序来安装软件。
In many senses, the operation is similar to that of the other package managers salt is aware of:
the pkg.installed
and similar states work on Windows.
the pkg.install
and similar module functions work on Windows.
和yum的区别
1,存储库元数据(SLS文件)通过salt或git托管。
2,软件包可以从salt仓库,git仓库或http(s)或ftp URL下载。
3,包之间的依赖关系需要手动管理。
使用之前的要求是:GitPython 0.3或更高版本,或者在Salt mast上安装libgit 0.20.0或更高版本的pygit2 0.20.3。Windows软件包定义是使用Git下载和更新的。
默认情况下salt不会进行分发用于安装Windows软件包的SLS文件,需要运行以下命令以初始化您的Salt主机上的存储库:
salt-run winrepo.update_git_repos
SYNC REPO TO WINDOWS MINIONS
Run pkg.refresh_db
on each of your Windows minions to synchronize the package repository.
salt -G‘os : windows‘pkg.refresh_db
接下来就可以安装windows软件
显示已安装的软件包 salt -G‘os : windows‘pkg.list_pkgs
您可以使用Salt pkg模块查询软件包的可用版本 salt winminion pkg.list_available firefox
安装最新版本的Firefox salt winminion pkg.install‘firefox ‘
卸载WINDOWS软件
使用pkg模块卸载软件
salt winminion pkg.remove firefox salt winminion pkg.purge firefox
Note
pkg.purge
just executes pkg.remove
on Windows. At some point in the future pkg.purge
may direct the installer to remove all configs and settings for software packages that support that option
存储库位置
Salt维护SLS文件的存储库来安装大量的Windows软件包:
- 2015.8.0及以后的版本:https://github.com/saltstack/salt-winrepo-ng
- 早期版本:https://github.com/saltstack/salt-winrepo
默认情况下,这些存储库被镜像到/srv/salt/win/repo-ng
和/srv/salt/win/repo
。
通过设置winrepo_dir_ng
和winrepo_dir
选项,可以在主配置文件中更改此位置 。
MAINTAINING WINDOWS REPO DEFINITIONS IN GIT REPOSITORIES
可以托管在一个或多个Git存储库中,默认存储库由SaltStack托管在GitHub上。这些包括各种开源软件项目的软件定义文件。这些软件定义文件是.sls
文件。有两个默认的存储库:salt-winrepo
和salt-winrepo-ng
。salt-winrepo
包含旧版本(旧版本2015.8.0)的软件定义文件。salt-winrepo-ng
是为更新的奴才(2015.8.0和更新)。
每个软件定义文件都包含salt在安装该软件所需的所有信息,包括安装程序文件的HTTP或FTP位置,用于静默安装的所需命令等, Anyone is welcome to send a pull request to this repo to add new package definitions. The repos can be browsed here: salt-winrepo salt-winrepo-ng
Note
The newer software definition files are run through the salt‘s parser which allows for the use of jinja.
通过修改或扩展winrepo_remotes
和 winrepo_remotes_ng
选项,配置主服务器可以搜索包定义的那些git存储库。
Important
winrepo_remotes
was called win_gitrepos
in Salt versions earlier than 2015.8.0
软件包定义通过运行winrepo.update_git_repos
runner 从online存储库中取出 。该命令在主服务器上运行:
salt-run winrepo.update_git_repos
This will pull down the software definition files for older minions (salt-winrepo
) and new minions (salt-winrepo-ng
). They are stored in the file_roots
under win/repo/salt-winrepo
andwin/repo-ng/salt-winrepo-ng
respectively.
重要
如果您有自定义的软件定义文件,而这些软件定义文件不是在版本库中维护的,那么应该将这些文件存储在win/repo
较旧的版本和 win/repo-ng
较新版本的版本中。这样做的原因是,内容win/repo/salt-winrepo
和win/repo-ng/salt-winrepo-ng
在每次运行时清除winrepo.update_git_repos
。
此外,当您运行winrepo.genrepo
和pkg.refresh_db
下的全部内容win/repo
和win/repo-ng
,包括所有子目录,用于创建msgpack文件
The next step (if you have older minions) is to create the msgpack file for the repo (winrepo.p
). This is done by running the winrepo.genrepo
runner. This is also run on the master:
salt-run winrepo.genrepo
Note
If you have only 2015.8.0 and newer minions, you no longer need to run salt-run winrepo.genrepo
on the master.
最后,您需要通过运行该pkg.refresh_db
命令来刷新minion数据库 。这也在master上运行:
salt ‘*‘ pkg.refresh_db
On older minions (older than 2015.8.0) this will copy the winrepo.p file down to the minion. On newer minions (2015.8.0 and newer) this will copy all the software definition files (.sls) down to the minion and then create the msgpack file (winrepo.p
) locally. The reason this is done locally is because the jinja needs to be parsed using the minion‘s grains.
每次在master服务器上修改软件定义文件时,无论是通过运行,修改现有文件,还是通过创建自己的文件,都需要刷新minion上的数据库, For older minions, that means running salt-run winrepo.genrepo
and thensalt ‘*‘ pkg.refresh_db
. For newer minions (2015.8.0 and newer) it is just salt ‘*‘ pkg.refresh_db
.
注意
如果这个winrepo.genrepo
或者pkg.refresh_db
失败了,那么在一个软件定义文件中,这可能是一个jinja 问题。这将导致操作停止。您需要修复语法,才能成功创建msgpack文件。
要禁用其中一个repo,请将其设置[]
为主配置中的空白列表。例如,要禁用winrepo_remotes
在主配置文件中设置以下内容:winrepo_remotes:[]
创建一个包定义SLS文件
包定义文件是一个yaml文件,其中包含使用salt安装一个软件所需的所有信息。它定义了有关软件包的信息,包括版本,全名,安装程序和卸载程序所需的标志,是否使用Windows任务计划程序安装软件包,以及如何查找安装软件包等。
看看Firefox的这个例子:
firefox: ‘17.0.1‘: installer: ‘salt://win/repo/firefox/English/Firefox Setup 17.0.1.exe‘ full_name: Mozilla Firefox 17.0.1 (x86 en-US) locale: en_US reboot: False install_flags: ‘-ms‘ uninstaller: ‘%ProgramFiles(x86)%/Mozilla Firefox/uninstall/helper.exe‘ uninstall_flags: ‘/S‘ ‘16.0.2‘: installer: ‘salt://win/repo/firefox/English/Firefox Setup 16.0.2.exe‘ full_name: Mozilla Firefox 16.0.2 (x86 en-US) locale: en_US reboot: False install_flags: ‘-ms‘ uninstaller: ‘%ProgramFiles(x86)%/Mozilla Firefox/uninstall/helper.exe‘ uninstall_flags: ‘/S‘ ‘15.0.1‘: installer: ‘salt://win/repo/firefox/English/Firefox Setup 15.0.1.exe‘ full_name: Mozilla Firefox 15.0.1 (x86 en-US) locale: en_US reboot: False install_flags: ‘-ms‘ uninstaller: ‘%ProgramFiles(x86)%/Mozilla Firefox/uninstall/helper.exe‘ uninstall_flags: ‘/S‘
每个软件定义文件都以该软件的软件包名称开头。如上例所示firefox
。下一行缩进两个空格,并包含要定义的版本。如上例所示,软件定义文件可以为同一个软件定义多个版本。该版本后面的行缩进了两个空格,并包含安装该软件包所需的全部信息。
警告
软件包名称和full_name
软件存储库中的所有其他软件包必须是唯一的。
版本行是要安装的软件包的版本。当您需要安装某个软件的特定版本时使用它。
警告
版本必须用引号括起来,否则yaml解析器会删除尾随的零。