windows下使用salt安装软件

2021-02-18 08:16

阅读:517

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_ngwinrepo_dir选项,可以在主配置文件中更改此位置 

MAINTAINING WINDOWS REPO DEFINITIONS IN GIT REPOSITORIES

可以托管在一个或多个Git存储库中,默认存储库由SaltStack托管在GitHub上。这些包括各种开源软件项目的软件定义文件。这些软件定义文件是.sls文件。有两个默认的存储库:salt-winreposalt-winrepo-ngsalt-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_reposrunner 从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-winrepowin/repo-ng/salt-winrepo-ng在每次运行时清除winrepo.update_git_repos

此外,当您运行winrepo.genrepopkg.refresh_db下的全部内容win/repowin/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解析器会删除尾随的零。

 

 

 

 

 

 

 

 

 

 

 

 

 

 


评论


亲,登录后才可以留言!