Administración del administrador de paquetes del sistema operativo mediante Azure IoT y OSConfig
Importante
La versión 1.0.3 (publicada el 28 de junio de 2022) incluye cambios importantes en los nombres de miembros que pueden afectar a los usuarios existentes. Para obtener más información, consulte: Los nombres de miembro pasan de PascalCase a camelCase en la versión 1.0.3.
Este artículo está diseñado para admitir a los usuarios que aprovisionan o administran dispositivos con Azure IoT. Si eso no suena como usted, considere la posibilidad de echar un vistazo a la documentación de Audiences for OSConfig.
Este artículo trata sobre cómo obtener el estado del administrador de paquetes y establecer el estado deseado del administrador de paquetes. Por ejemplo:
Capacidad | Casos de uso |
---|---|
Asegúrese de que los administradores de paquetes extraen de los orígenes deseados | • La directiva de funcionamiento es que los administradores de paquetes de dispositivos deben extraer de un repositorio de paquetes privado con versiones aprobadas de bibliotecas y componentes. • Necesita dispositivos para obtener paquetes del repositorio de un proveedor específico. |
Informar a los administradores de paquetes de los paquetes deseados | • La directiva de funcionamiento es que los dispositivos deben tener un paquete específico como "library-XYZ-v2" • La directiva de funcionamiento es que los dispositivos deben tener un gráfico de dependencias específico de los paquetes. |
Comparación del paquete de dispositivos listas de orígenes o |
• La directiva de funcionamiento es que la lista de paquetes instalados de los dispositivos implementados debe coincidir con un dispositivo correcto conocido. |
Si está aquí para obtener información de referencia en lugar de ejemplos de casos de uso interactivos, puede ir directamente a la sección de referencia.
Importante
En este momento, las distribuciones basadas en apt , incluidas Debian y Ubuntu, están en el ámbito. Si desea desarrollar compatibilidad con distribuciones basadas en RPM, consulte la documentación de extensibilidad.
En un entorno sin apt (por ejemplo, la compilación a partir del origen y la ejecución en una distribución de la familia Red Hat), es posible que vea los siguientes mensajes de registro que indican que el módulo PackageManagerConfiguration no es aplicable.
- En osconfig_pmc.log, líneas que incluyen el texto siguiente:
[ERROR] Cannot run on this platform, could not find required tool apt-get
- En osconfig_pnp_agent.log, líneas que incluyen el texto siguiente:
[ERROR] PackageManagerConfiguration.state: MpiGet failed with 500
Estos ejemplos pueden servir como puntos de partida para adaptarse a su entorno único.
Si usa este artículo como referencia, no hay requisitos previos. Puede revisar los ejemplos, copiar nombres de propiedad, etc.
Si desea probar los ejemplos en sistemas activos (recomendado), siga estos pasos:
Creación de una cuenta gratuita de Azure o uso de una cuenta existente
Conectar al menos un dispositivo habilitado para OSConfig a un IoT Hub
Sugerencia
Para crear fácilmente un IoT Hub con dispositivos (virtuales) conectados, consulte Creación de un entorno de laboratorio de OSConfig (con Azure IoT) en 5 minutos.
Prepárese para seguir las instrucciones de Azure Portal o las instrucciones de la CLI de Azure en los ejemplos:
Si prefiere usar el Azure Portal
- Inicio de sesión en el Azure Portal y acceso a la página Información general de la IoT Hub
-OR- Si prefiere usar la CLI de Azure
- RECOMENDADO: Use Azure Cloud Shell como entorno de Bash iniciando sesión en Azure Portal y, a continuación, iniciando Azure Cloud Shell en modo bash Captura de pantalla .
- ALTERNATIVA: Si prefiere usar su propio entorno de Bash en lugar de Cloud Shell, instale la CLI de Azure e inicie sesión.
- Asegúrese de que la extensión de Azure IoT está lista mediante la ejecución de
az extension add --name azure-iot
En este ejemplo se muestra el flujo de trabajo de Azure IoT para asegurarse de que los dispositivos usan, como uno de sus orígenes de paquetes, el canal packages.microsoft.com prod para Ubuntu 18.04. Puede adaptar este ejemplo para usar cualquier origen de paquete. Por ejemplo, un repositorio público de distribución o versión diferente, un repositorio de un proveedor determinado o un repositorio privado que se conserva.
Las instrucciones están disponibles en tipos para el portal, la CLI, el dispositivo específico y el aprovisionamiento y la administración a escala.
En la página del portal de la IoT Hub, vaya al gemelo OSConfig para el dispositivo que desea administrar y agregue lo siguiente a la
properties.desired
sección, seguido de una coma para separarla del siguiente elemento deproperties.desired
."PackageManagerConfiguration": { "desiredState": { "gpgKeys": { "pkgs-msft_key": "https://packages.microsoft.com/keys/microsoft.asc" }, "sources": { "pkgs-msft_insiders-slow": "deb [arch=amd64,armhf,arm64 signed-by=pkgs-msft_key] https://packages.microsoft.com/ubuntu/18.04/prod insiders-slow main" }, "packages": [ ] } }
El ejemplo 1 consiste en definir un nuevo origen de paquete. Para informar sobre lo mismo, continúe con el ejemplo 2.
En este ejemplo, informaremos sobre:
- Qué orígenes de paquetes se han agregado
- Si algún dispositivo está experimentando errores de PackageManagerConfiguration
En el ejemplo 1 anterior, agregamos un valor PackageManagerConfiguration deseado al módulo gemelo OSConfig de un dispositivo específico. Ahora podemos observar los resultados.
Espere 1 minuto (para las comunicaciones de red, la actividad del lado del dispositivo, etc.) después de haber agregado el packageManagerConfiguration deseado en el ejemplo anterior.
En el módulo gemelo OSConfig del mismo dispositivo, vaya a las propiedades y, a continuación, notifique, PackageManagerConfiguration y, a continuación, estado.
Esto mostrará el estado más reciente de la configuración del administrador de paquetes.
sourcesFileNames
debe reflejar los dos canales agregadosexecutionStatus
debe ser 2. Para conocer los valores posibles, consulte la documentación sobre extensibilidad.
En esta sección se describen las propiedades del gemelo y los comportamientos correspondientes.
Es útil comprender que en Azure IoT hay dos modelos mentales o perspectivas para describir el contenido de los gemelos.
Perspectiva deseada o notificada sin formato
Este es el modelo de objetos principal IoT Hub. Lo usa IoT Hub servicio query, IoT Hub servicio Configurations,
az iot hub module-twin
comandos y vistas de gemelo sin formato en Azure Portal e IoT Explorer.Perspectiva mejorada del lenguaje de definición de gemelo digital (DTDL)
DTDL (con patrones correspondientes, como Azure IoT Plug and Play [PnP]) permite a las aplicaciones y servicios anticipar, validar y contextualizar mejor el contenido gemelo. Esto lo usan las vistas PnP en IoT Explorer, el servicio Azure Digital Twins y, potencialmente, la solución en la nube al interactuar con IoT Hub.
En la mayoría de los casos siguientes, no se necesita ninguna distinción. Por ejemplo, "gpgKeys" se denomina "gpgKeys" en cualquier punto de vista.
En ciertos casos, una distinción puede ser útil. Por ejemplo, los valores path indicados a continuación. En esos casos, primero se da la descripción deseada o notificada sin formato, seguida de una perspectiva mejorada de DTDL entre paréntesis.
Ruta de acceso:
properties.desired.PackageManagerConfiguration.desiredState
(DTDL:PackageManagerConfiguration
componente -->desiredState
propiedad grabable)Descripción: Entrada del administrador; habilita la adición de orígenes de paquetes y paquetes a dispositivos
Miembros
Nombre Tipo Notas sources mapa de sourceName
:sourceDescriptor
pares (cadenas)Para cada par del diccionario:
•sourceName
es un identificador especificado por el administrador, por ejemplo:*my-source-foo*
•sourceDescriptor
es una cadena de definición de origen en el formato utilizado por el administrador de paquetes; por ejemplo:deb [arch=amd64,armhf,arm64 signed-by=my-repo-key] https://packages.microsoft.com/ubuntu/18.04/prod focal main
• DentrosourceDescriptor
del valor pasado asigned-by=
debe ser el nombre de una clave degpgKeys
(descrita a continuación); por ejemplo: signed-by=my-source-foo-key
• Al agregar o modificar un origen, se rellenará un archivo en sources.list.d (sobrescribir el archivo existente si está presente) con el descriptor de origen.
• Para especificar que los dispositivos no deben usar un origen determinado (suponiendo que se definió anteriormente en sources.list.d, no en ningún otro lugar del sistema), incluya un par como"my-source-bar": ""
; Si existe un archivo denominado my-source-bar.list en sources.list.d , se quitará.
• Si ya no necesita una directiva no debe usar (por ejemplo, my-source-bar ya no es relevante después de algún tiempo), puede quitarla del gemelo deseado cambiando el valor de "my-source-bar": "" a "my-source-bar": nullgpgKeys mapa de key-name
:uri
pares (cadenas)Se usa para informar al paquete
administrador de claves públicas del repositorio;
Para cada par del diccionario:
•key-name
es un identificador especificado por el administrador; por ejemplo: my-repo-foo-key, al que se hace referencia desdesigned-by
en .sources
•uri
es la ubicación de la clave pública de un repositorio; por ejemplo:https://packages.microsoft.com/keys/microsoft.asc
• La clave se agrega como un archivo a /usr/share/keyrings/; Tenga en cuenta que, para garantizar la aplicabilidad de la clave, se usa esta ruta de acceso no específica de apt; apt solo aplicará esa clave a los orígenes que están asociados explícitamente (a través designed-by
• Para quitar un archivo de clave de /usr/share/keyrings establecidokey-name
para que coincida con el nombre de archivo (sin extensión) y establecidouri
en ""packages matriz de identificadores de paquete (cadenas) • Indica al administrador de paquetes que asegúrese de que estos paquetes están instalados.
• Análogo a los nombres> de los paquetes de instalación < en Debian
• Aditivo (no destructivo) por naturaleza; por ejemplo, una lista vacía significa "no hacer nada" (no "desinstalar todos los paquetes del sistema")Carga de ejemplo (como se muestra en la sección del
properties.desired
gemelo de un gemelo IoT Hub)"PackageManagerConfiguration": { "desiredState": { "gpgKeys": { "pkgs-msft_key": "https://packages.microsoft.com/keys/microsoft.asc" }, "sources": { "pkgs-msft_insiders-slow": "deb [arch=amd64,armhf,arm64 signed-by=pkgs-msft_key] https://packages.microsoft.com/ubuntu/18.04/prod insiders-slow main" }, "packages": [ "cowsay" ] } }
Ruta de acceso:
properties.reported.PackageManagerConfiguration.state
(perspectiva DTDL:PackageManagerConfiguration
componente -->state
propiedad de solo lectura)Descripción: Estado packageManagerConfiguration según lo notificado por el dispositivo
Miembros
Nombre Tipo Notas packagesFingerprint string • Huella digital opaca para la lista de todos los paquetes instalados en el dispositivo (no limitado a los paquetes a los que se hace referencia en desiredState.packages
)
• Se usa para comparar un gran número de dispositivos con un dispositivo conocidopackages matriz de identificadores de paquete (cadenas) • Nombre y estado (versión o "error") de los paquetes especificados por el administrador de desiredState.packages
• Si un paquete se ha instalado correctamente, el nombre va seguido del número de versión instalado.
• Si no se pudo instalar un paquete, el nombre va seguido de "failed"sourcesFingerprint string • Huella digital opaca de los orígenes del paquete utilizados por el dispositivo
• Se usa para comparar un gran número de dispositivos con un dispositivo conocidosourcesFilenames matriz de nombres de archivo (cadenas) • Lista de orígenes de paquete (como nombres de archivo, por ejemplo my-repo.list) que se han agregado al administrador de paquetes a través de /etc/apt/sources.list.d (en Debian)
• Incluye cualquier fuente presente, independientemente de si se agregaron a través dedesiredState.sources
executionState int • Estado general de éxito/error
• Los valores nominales son 0 (estado inicial, no se ha especificado desiredState) o 2 (correcto)
• Para otros valores, consulte: documentación de extensibilidadexecutionSubstate int • Para conocer los valores posibles, consulte: documentación de extensibilidad. executionSubstateDetails string • Información adicional para solucionar problemas Carga de ejemplo (como se muestra en la sección del
properties.reported
gemelo)"PackageManagerConfiguration": { "state": { "packagesFingerprint": "9e7a85de3d067474e3621d7e1618f6ac0e2e8fc6cb9d60ee92af9927294114d3", "packages": [ "cowsay=3.03+dfsg2-7" ], "executionState": 2, "executionSubstate": 0, "executionSubstateDetails": "", "sourcesFingerprint": "64b7de49c2be4ef2c180e4a978300fbb7b8a743a89e4038ba7ac6a91c31b625f", "sourcesFilenames": [ "pkgs-msft_insiders-slow.list" ] } }
Ruta de acceso:
properties.reported.PackageManagerConfiguration.desiredState
(perspectiva de DTDL:PackageManagerConfiguration
componente :> parte ACK de ladesiredState
propiedad que se puede escribir)Descripción: este elemento notificado adicional es una confirmación del dispositivo; para herramientas de administración e informes que complementa
state
, lo que permite que la cadena de herramientas de administración determine si el dispositivo aún ha recibido la intención de administrador capturada en el administrador grabable/deseado.desiredState
Miembros
Nombre Tipo Notas value object • Debe reflejarse properties.desired.PackageManagerConfiguration.desiredState
ac int • Indica el éxito (valor 200) o error (valor 400) del dispositivo que recibe y procesa desiredState del administrador.
Para obtener información general sobre los escenarios y funcionalidades de OSConfig, consulte:
Para obtener ejemplos prácticos específicos, consulte: