全部产品
Search
文档中心

系统运维管理:批量管理我的软件

更新时间:Feb 07, 2024

通过OOS批量管理软件,除了可安装阿里云Agent或软件包管理工具的软件,也支持安装我的软件。我的软件支持以rpm、deb、msi等为后缀的常规软件包,通过维护我的软件,您可高效管理各类平台及架构的软件,本文将详细介绍下创建和批量管理我的软件的操作方法。

前提条件

  1. 我的软件的安装或卸载,仅支持在网络类型是专有网络的ECS实例下进行,请确保实例在VPC专有网络下。

  2. 对ECS实例安装或卸载我的软件前,请确保该实例已被授予实例RAM角色,且其被授予的RAM角色所拥有的权限需包含如下JSON中的权限策略。授予方式可参考配置ECS实例RAM角色

权限策略JSON脚本:

{
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "oos:GetTemplate"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "oss:GetObject",
                "oss:GetBucketAcl"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

检查网络类型

  1. 登录ECS管理控制台

  2. 在左侧导航栏,单击实例与镜像>实例。

  3. 确认将安装软件的实例的网络类型是专有网络。

实例RAM角色的授予

  1. 首先检查实例的RAM角色授予情况。在实例列表中,单击蓝色的实例ID。

  2. 查看实例详情,若RAM角色为空则为实例尚未被授予RAM角色。

  3. 单击RAM控制台

  4. 单击权限管理>权限策略>创建权限策略>脚本编辑。并将本文前提条件中的JSON脚本复制粘贴到脚本配置的编辑栏中。 image

  5. 单击继续编辑基本信息>输入名称>单击确定image

  6. 单击角色>创建角色,选择可信实体类型阿里云服务。单击下一步image

  7. 角色类型选择普通服务角色,填写角色名称选择受信服务云服务器。 单击完成image

  8. 单击为角色授权,选择上面步骤中创建的自定义策略,单击确定

  9. 接下来则需将RAM角色授予给目标实例,返回ECS管理控制台实例列表

  10. 找到将安装软件的实例,单击更多>实例设置>授予或收回RAM角色

  11. 选中已创建的RAM角色。

  12. 单击确定,则完成了为实例授予RAM角色。

  13. 再次单击蓝色实例ID,则可在实例详情中看到该实例已被成功授予RAM角色。

创建OSS存储空间

  1. 登录OSS控制台。 创建一个用来存储我的软件的OOS Bucket。

  2. 单击Bucket 列表>创建 Bucket

  3. 输入Bucket 名称

  4. 根据OOS的当前地域,选择地域。其它属性如存储类型等可根据您的需求确定,或直接使用默认值。image

  5. 单击确定

我的软件的创建

  1. 登录OOS控制台

  2. 单击扩展程序。单击创建扩展自定义程序。

  3. 单击软件信息。

  4. 输入扩展程序名称,扩展程序描述,版本描述,单击下一步。image.png

  5. 上传软件包并配置安装脚本、卸载脚本、平台以及架构image.png

    1. 安装执行脚本示例:

      #!/bin/bash
      #######  单进程软件包安装脚本模版说明  #########
      #1. 此脚本默认在根路径下执行 Linux系统默认为 /root
      #2. 脚本安装软件执行成功后 默认会删除远程下载的路径
      #3. 用户自定义实现 建议在 job_start 下
      #4. 需遵循进程ID的存储约束 软件包进程ID标识需存储到指定路径
      
      #######  error code specification  #########
      # Please update this documentation if new error code is added.
      # 1   => install fail
      # 2   => check health fail
      # 3   => record process id fail
      # 4   => user shell fail
      
      function user_shell() {
          #用户自定义安装脚本 START
          $nohup java -jar demo-1.0.0-SNAPSHOT.jar > /demo.log 2>&1 &
          #用户自定义安装脚本 END
      }
      
      ##### 可在脚本开始运行时调用,打印当时的时间戳及PID,同时记录软件包进程ID到指定路径。
      function job_start() {
          user_shell
          if [ $? -ne 0 ]; then
              exit4
          else
              # 此处约束禁止删除
              now=$(date +'%Y-%m-%d %H:%M:%S')
              pid=$!
              echo "[$now][$pid] job_start"
              pidPath="/etc/aliyun"
              if [ ! -d $pidPath ]; then
                  mkdir -p /etc/aliyun
                  echo "创建PID存储路径 $pidPath"
              fi
              echo "$pid" > "$pidPath/main_process_id"
              if [ $? -ne 0 ]; then
                  exit3
              fi
          fi
      }
      
      ##### 在此函数中检查服务是否起来,可以是检查进程,curl http地址等方式
      function check_health() {
          now=$(date +'%Y-%m-%d %H:%M:%S')
          echo "[$now][$$] check_health"
      }
      
      function exit1() {
        echo "exit code 1, install fail"
        exit 1
      }
      
      function exit2() {
        echo "exit code 2, check health fail"
        exit 2
      }
      
      function exit3() {
        echo "exit code 3, record process id fail"
        exit 3
      }
      
      function exit4() {
        echo "exit code 4, user shell fail"
        exit 4
      }
      
      
      ##### 如果返回值为0,则认为此执行成功,如果非0,则认为执行失败
      function main() {
          job_start
          if [ $? -ne 0 ]; then
              exit1
          fi
          check_health
          if [ $? -ne 0 ]; then
              exit2
          fi
      }
      
      ##### 触发执行 日志由OOS自动记录
      main
    2. 卸载执行脚本示例:

      #!/bin/bash
      ##### 可在脚本开始运行时调用,打印当时的时间戳及PID。
      function job_stop() {
          pid=$(cat /etc/aliyun/main_process_id)
          kill -9 $pid
          now=`date +'%Y-%m-%d %H:%M:%S'`
          echo "[$now][$pid] job_stop"
      }
      
      job_stop
      if [ $? -ne 0 ]; then
          echo "[$now][$$] job stop failed."
          exit 1
      fi
  6. 单击创建

我的软件的安装

  1. 开始安装前请确保目标资源已满足本文的前提条件一节,安装我的软件有两个入口,可直接通过我的软件来安装,也可在批量管理软件中进行安装,本示例通过批量管理软件来完成自定义软件的安装。

  2. 单击批量管理软件,单击创建软件类型选择我的软件操作内容选择安装,并选择将安装的软件名称。 image

  3. 单击选择实例。本示例通过手动选择实例,并确保选择的是网络类型为VPC的实例。单击立即执行

    image

  4. 确认参数无误后单击确定创建执行。可通过批量管理软件下的任务查看安装详情。image

我的软件的卸载

  1. 开始卸载前请确保目标资源已满足本文的前提条件一节,单击批量管理软件

  2. 单击创建软件类型选择我的软件

  3. 操作内容选择卸载,并选择将卸载的软件名称。

  4. 单击选择实例。本示例通过手动选择实例,并选中网络类型为VPC的实例。

  5. 单击立即执行

  6. 可通过批量管理软件下的任务查看卸载详情。