Перейти к основному содержимому

Скрипт для получения списка образов SmartOS в OmniOS

·457 слов·3 минут· ·
Smartos Omnios Illumos Cloud Bash Jq Json
Сергей Бурцев
Автор
Сергей Бурцев
Оглавление

Посчастливилось познакомиться с LX Branded Zones, благополучно перекочевавшими в OmniOS из SmartOS.

Знакомство началось с выковыривания UUID’а нужного образа из простыни JSON и ручной его подстановкой в URL для последующего скачивания и развертывания.

В SmartOS для этих целей существует утилита imgadm. К сожалению, в OmniOS подобного инструмента нет и, видимо, пока не предвидится.

Кругом разруха
#

UPD: невероятно и внезапно, но такой инструмент всё же есть, и есть он прямо в составе zadm, утилиты для управления зонами OmniOS.

pkg install zadm
zadm list-images [--refresh] [--verbose] [-b <brand>] [-p <provider>]

Конкретнее:

zadm list-images --verbose -b lx -p smartos

Почему вместо её использования по первой ссылке этого поста предлагается пройтись по такому ненужному алгоритму – остаётся загадкой. Почему на той же странице по ссылке нам предоставили такое “подробное” описание этой утилиты – тоже. Вероятно, автор тех статей на их написании (и/или последующем обновлении) явно желал сэкономить своё время в ущерб чужому, чтобы осталось больше на портирование драйверов.

А всё, что было написано и сделано мной дальше, я просто оставлю для истории и понимания масштаба тупняка. Чтобы своё время не потратил впустую ещё кто-нибудь, можно не читать. ;)

Найди образ
#

https://images.smartos.org/images – зайди сюда и найди в простыне то, что нужно.

{
    "v": 2,
    "uuid": "50c86f0f-e25e-485c-80ca-8cf8e5640ce6",
    "owner": "00000000-0000-0000-0000-000000000000",
    "name": "almalinux-9",
    "version": "20250120",
    "state": "active",
    "disabled": false,
    "public": true,
    "published_at": "2025-01-20T19:24:01Z",
    "type": "lx-dataset",
    "os": "linux",
    "files": [
      {
        "sha1": "9f90ca1d99365d84b11ba20728b5fe25be6a1afa",
        "size": 134733634,
        "compression": "gzip"
      }
    ],
    "description": "Container-native AlmaLinux 9.5 (Teal Serval) 64-bit image. Built to run on containers with bare metal speed, while offering all the services of a typical unix host.",
    "homepage": "https://docs.tritondatacenter.com/public-cloud/instances/infrastructure/images",
    "requirements": {
      "brand": "lx",
      "min_platform": {
        "7.0": "20220407T001427Z"
      },
      "networks": [
        {
          "description": "public",
          "name": "net0"
        }
      ]
    },
    "tags": {
      "kernel_version": "5.10.0",
      "role": "os"
    }
  }

Подставь найденный UUID в URL
#

https://images.smartos.org/images/<UUID>/file

Загрузи образ, не забыв про формат
#

curl -o /tmp/almalinux95.zss.gz https://images.smartos.org/images/50c86f0f-e25e-485c-80ca-8cf8e5640ce6/file

Но лучше, конечно,..
#

даже корявенький, но bash-скрипт с jq, sed… и так далее.

#!/bin/bash

if ! command -v jq &>/dev/null; then
    echo
    echo -e "  \e[91mОшибка: приложение jq не установлено.\e[0m" >&2
    echo
    exit 1
fi

echo && echo " В публичном репозитории SmartOS доступны следующие образы:"
echo
echo ' Название,ОС,Тип,Описание,>,Дата,URL,Формат,SHA1' > /tmp/sOS.lst
curl -s -S https://images.smartos.org/images | \
jq -r -c '.[] | [ ( .name | .[0:15] ), .os, .type, ( .description | .[0:40] ), ">", ( .published_at | .[0:10] ), "https://images.smartos.org/images/", .uuid, "/file", ( .files[] | .compression, .sha1 ) ]' | \
sed -e 's/^/ /;s/\[//g;s/\]//g;s/"//g;s/https\:\/\/images.smartos.org\/images\/\,/https\:\/\/images.smartos.org\/images\//;s/\,\/file/\/file/' | sort -t . -n -k 1,1n -k 2,2n -k 3,3n -k 4,4n >> /tmp/sOS.lst
column -t -s ',' < /tmp/sOS.lst | more
rm -f /tmp/sOS.lst
exit 0 ## что бы ни произошло, нужно верить в лучшее...

…Запустить неглядя
#

bash <(curl -s https://raw.githubusercontent.com/tape-quotes/it.tpqt.ru/refs/heads/main/content/bin/getimgs.sh)