1. Включаем TFTP-сервер на Synology:

    • в веб-интерфейсе Synology открываем Control Panel, выбираем в блоке File Sharing пункт File Services;
    • открываем вкладку TFTP и ставим галочку напротив пункта Enable TFTP service;
    • нажимаем на кнопку Select, выбираем каталог для TFTP-сервера и нажимаем на кнопку Select (в моём случае каталог /volume1/docker/tftp/);
    • далее нажимаем на кнопку Advanced Settings, и в блоке Allowed clients либо выбираем пункт All connections (если разрешаем подключаться к TFTP-серверу кому угодно), либо выбираем пункт Only allow the following IP address range и прописываем диапазон IP-адресов, с которых будет разрешено подключение к TFTP-серверу;
    • в пункте TFTP Client Permission оставляем значение Read only и нажимаем на кнопку OK;
    • нажимаем на кнопку Apply для включения TFTP-сервера.
  2. Добавляем возможность скачивать файлы из папки /tftp/ через nginx-сервер Synology:

$ nano /usr/local/etc/nginx/conf.d/www.tftp.conf
location /tftp/ {
    alias /volume1/docker/tftp/;
    autoindex on;
}
$ nginx -s reload

Имя файла www.tftp.conf обязательно должно начинаться на www. и иметь расширение .conf, тогда конфигурационный файл будет автоматически загружен с nginx.

Пробуем в браузере открыть ссылку http://192.168.255.2/tftp/ где вместо 192.168.255.2 – IP-адрес Вашего Synology. В браузере должно появиться содержимое папки.

  1. Добавляем PXE-загрузчики в /tftp/ папку:

Возьмём из комплекта утилиты syslinux несколько необходимых файлов:

$ cd /volume1/docker/tftp/
$ wget https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.zip
$ unzip -j syslinux-6.03.zip "bios/core/lpxelinux.0"
$ unzip -j syslinux-6.03.zip "bios/com32/elflink/ldlinux/ldlinux.c32"
$ unzip -j syslinux-6.03.zip "efi64/efi/syslinux.efi"
$ unzip -j syslinux-6.03.zip "efi64/com32/elflink/ldlinux/ldlinux.e64"
$ rm -f syslinux-6.03.zip

Для BIOS-загрузки (Legacy) будем использовать файл lpxelinux.0 вместо стандартного pxelinux.0, т.к. начиная с версии 5.10, данный загрузчик поддерживает загрузку образов по HTTP и FTP, а не только TFTP. Загрузка через HTTP происходит быстрее чем через TFTP. Дополнительную информацию по утилите syslinux читать здесь.

  1. Добавляем файлы для загрузки Fedora CoreOS в /tftp/ папку:

Скачаем файлы kernel-x86_64, initramfs.x86_64.img и rootfs.x86_64.img от дистрибутива Fedora CoreOS со страницы https://getfedora.org/en/coreos/download?tab=metal_virtualized&stream=stable:

$ mkdir fedora-coreos
$ cd fedora-coreos/
$ nano get-fedora-coreos.sh
#!/bin/bash
version="33.20210201.3.0"
base_url="https://builds.coreos.fedoraproject.org/prod/streams/stable/builds"
for filename in kernel-x86_64 initramfs.x86_64.img rootfs.x86_64.img; do
    wget $base_url/${version}/x86_64/fedora-coreos-${version}-live-$filename
    ln -sf fedora-coreos-${version}-live-$filename $filename
done
$ chmod +x get-fedora-coreos.sh
$ ./get-fedora-coreos.sh
$ cd ../
  1. Создадим конфигурационный файл для PXE-загрузчика:

$ mkdir pxelinux.cfg
$ nano pxelinux.cfg/default
DEFAULT pxeboot
TIMEOUT 20
PROMPT 0
LABEL pxeboot
    KERNEL http://192.168.255.2/tftp/fedora-coreos/kernel-x86_64
    INITRD http://192.168.255.2/tftp/fedora-coreos/initramfs.x86_64.img
    APPEND coreos.live.rootfs_url=http://192.168.255.2/tftp/fedora-coreos/rootfs.x86_64.img
IPAPPEND 2

Вместо 192.168.255.2 необходимо указать IP-адрес Synology. В строчках KERNEL и INITRD можно указать только названия файлов, без http://192.168.255.2/tftp/ префикса, тогда загрузка этих файлов будет проходить через TFTP, но такая загрузка будет медленнее (эксперимент показал, что при суммарном размере kernel и initramfs в 86МБ, загрузка по TFTP на 17 секунд медленнее чем загрузка по HTTP, 35 секунд против 18, т.е. почти в два раза).

  1. Настройка DHCP-сервера на MikroTik для загрузки по сети:

Для того, чтобы компьютер (или виртуальная машина) смогли загрузиться по сети – DHCP-сервер должен передать DHCP-клиенту как минимум две опции: 66 (IP-адрес TFTP-сервера) и 67 (имя загрузчика). Добавим в настройки MikroTik две эти опции и создадим два набора опций для обычной (BIOS/legacy) и EFI-загрузки. Далее нам нужно будет только в свойствах статических адресов для конкретных компьютеров указывать необходимы набор опций: set-pxe-bios или set-pxe-efi.

/ip dhcp-server option
add code=66 name=option66 value="'192.168.255.2'"
add code=67 name=option67-bios value="'lpxelinux.0'"
add code=67 name=option67-efi value="'syslinux.efi'"
/ip dhcp-server option sets
add name=set-pxe-bios options=option66,option67-bios
add name=set-pxe-efi options=option66,option67-efi

Необходимые опции создали. Теперь нужно их прописать для определённого компьютера, для которого уже имеется статическая запись в блоке lease.

/ip dhcp-server lease set dhcp-option-set=set-pxe-bios [ find address="192.168.255.201" ]
/ip dhcp-server lease set dhcp-option-set=set-pxe-bios [ find mac-address="00:50:56:00:01:01" ]               

Можно воспользоваться первой командой, можно второй, а можно просто в WinBox открыть карточку и выбрать необходимое значение в поле DHCP Option Set. В данном примере мы указали набор опций для BIOS/legacy загрузки. Для EFI-загрузки, необходимо указывать набор опций set-pxe-efi. В идеальном мире уже после добавления этих настроек всё должно заработать. Но, к сожалению, многие DHCP-клиенты с такими настройками грузиться не будут. Опция 66 будет игнорироваться, и вместо TFTP-сервера указанного в этой опции, попытки загрузки будет предприниматься с TFTP-сервера 192.168.255.1, т.е. с адреса нашего DHCP-сервера. Для того, чтобы направить клиентов на правильный TFTP-сервер, необходимо в настройках сети заполнить параметр next-server. Для того, чтобы указать правильный адрес TFTP-сервера в поле next-server выполним следующую команду:

/ip dhcp-server network set next-server=192.168.255.2 [ find address="192.168.255.0/24" ]

Вместо [ find address="192.168.255.0/24" ] можно просто указать 0, если у вас в DHCP-сервере прописана только одна сеть. Если возникнет необходимость очистить поле next-server, нужно будет выполнить эту же команду, только вместо IP-адреса TFTP-сервера указать адрес 0.0.0.0. На форуме MikroTik пишут, что создать новую сеть с маской /32 для одного конкретного IP-адреса, и заполнить поле next-server только для этой сети. Но у меня это срабатывало только наполовину, загрузка действительно начиналась, появлялась строка PXELINUX, но дальнейшая загрузка не производилась. Итак, в поле next-server указали IP-адрес, настроенного ранее, TFTP-сервера. В свойствах статической записи указали наборы опций. Можно пробовать загрузиться. Для тестирования удобнее всего воспользоваться какой-нибудь "пустой" виртуальной машиной.

  1. Перенос функционала TFTP-сервера на MikroTik:

К этому моменту Fedora CoreOS успешно загружается по сети, и приходит понимание, что TFTP-сервер на Synology в общем-то и не нужен. Непосредственно с TFTP-сервера загружается только PXE-загрузчик и конфигурационный файл, общим размером меньше 1МБ. Эти файлы статичны и их можно перенести на MikroTik. Т.е. перенесём функцию TFTP-сервера с Synology на MikroTik.

/tool fetch http://192.168.255.2/tftp/pxelinux.cfg/default dst-path=tftp/pxelinux.cfg/default
/tool fetch http://192.168.255.2/tftp/lpxelinux.0 dst-path=tftp/
/tool fetch http://192.168.255.2/tftp/ldlinux.c32 dst-path=tftp/
/tool fetch http://192.168.255.2/tftp/syslinux.efi dst-path=tftp/
/tool fetch http://192.168.255.2/tftp/ldlinux.e64 dst-path=tftp/
/ip tftp add ip-addresses=192.168.255.0/24 real-filename=tftp/

Затем переключаем настройки DHCP на использование TFTP-сервера на MikroTik.

/ip dhcp-server option
add code=66 name=option66 value="'192.168.255.1'"
/ip dhcp-server network set next-server=0.0.0.0 [ find address="192.168.255.0/24" ]

После чего пробуем тестируем загрузку по сети. С загрузкой варианта BIOS/legacy проблем не возникает, а вот с EFI-загрузкой с использованием загрузчика syslinux.efi начинаются проблемы. Загрузчик загружается, по TFTP-считывает конфигурационный файл pxelinux.cfg/default, получает IP-адрес по DHCP, далее загрузчик пытается загрузить ядро по ссылке http://192.168.255.2/tftp/fedora-coreos/kernel-x86_64, после чего появляется ошибка Loading http://192.168.255.2/tftp/fedora-coreos/kernel-x86_64 failed: No such file or directory и всё начинается сначала. Переключаем обратно загрузку на TFTP-сервер Synology – всё загружается, возвращаем TFTP-сервер MikroTik – появляется эта ошибка. В итоге, через некоторое время, благодаря Wireshark понимаем, что проблема в файле syslinux.efi. Вместо адреса web-сервера который указан в ссылке (в данном случае 192.168.255.2), используется IP-адрес TFTP-сервера и http-соединение устанавливается с адресом 192.168.255.1, и естественно никакой файл /tftp/fedora-coreos/kernel-x86_64 не находился. Есть даже описание этого бага bug #907805, но он до сих пор не исправлен. Когда мы загружались с TFTP-сервера Synology, у нас IP-адрес TFTP-сервера совпадал с IP-адресом web-сервера, поэтому такая проблема не возникала, как говорится, даже сломанные часы дважды в сутки показывают правильное время. :)

  1. Отказ от syslinux и переход на iPXE:

Ещё настраивая PXE-загрузчики syslinux, я смотрел в сторону iPXE. iPXE-загрузчик должен был загружаться следующим по цепочке, для того, чтобы в финале можно было задействовать matchbox . Нужно было сразу переходить к iPXE, не тратя время на syslinux. Наша задача скомпилировать два iPXE загрузчика с простейшим встроенным скриптом, состоящим из двух команд: dhcp – для того, чтобы загрузчик получил IP-адрес, и chain ${root-path}, для того, чтобы загрузчик по цепочке продолжил выполнение скрипта, ссылка на который находится в переменной ${root-path}. А в переменной ${root-path} у нас будет значение, которое мы передадим загрузчику через DCHP опцию 17.

$ git clone git://git.ipxe.org/ipxe.git
$ cd ipxe/src/
$ echo -e '#!ipxe\ndhcp && chain ${root-path}' >boot.ipxe
$ make bin/ipxe.pxe EMBED=boot.ipxe
$ make bin-x86_64-efi/ipxe.efi EMBED=boot.ipxe

Далее, при помощи sftp, копируем файлы bin/ipxe.pxe и bin-x86_64-efi/ipxe.efi на MikroTik (IP-адрес роутера в примере 192.168.255.1).

$ sftp admin@192.168.255.1:/ <<< $'mkdir tftp'
$ sftp admin@192.168.255.1:/tftp <<< $'put bin/ipxe.pxe'
$ sftp admin@192.168.255.1:/tftp <<< $'put bin-x86_64-efi/ipxe.efi'

Первая команда mkdir tftp нужна, если такая папка ранее не создавалась. Следующие команды завершатся с ошибкой, в случае если папка /tftp не будет предварительно создана.

Так же можно переносить файлы на MikroTik используя веб-сервер, как мы это делали ранее.

/tool fetch http://192.168.255.2/tftp/ipxe.efi dst-path=tftp/
/tool fetch http://192.168.255.2/tftp/ipxe.efi dst-path=tftp/

В идеальном мире должен работать ещё и такой способ, с использованием scp. Но у меня данный вариант зависал после создания файла на удалённой стороне, и копирование не происходило.

$ scp bin/ipxe.pxe admin@192.168.255.1:/tftp/ipxe.pxe
$ scp ibin-x86_64-efi/pxe.efi admin@192.168.255.1:/tftp/ipxe.efi

Включим TFTP-сервер на MikroTik, если ранее его не включали:

/ip tftp add ip-addresses=192.168.255.0/24 real-filename=tftp/

После компиляции и переноса на MikroTik iPXE-загрузчиков, произведём необходимые настройки DHCP-сервера. Если ранее PXE не настраивали – выполняем следущие команды.

/ip dhcp-server option
add code=17 name=option17 value="'http://192.168.255.2/tftp/fedora-coreos.ipxe'"
add code=67 name=option67-bios value="'ipxe.pxe'"
add code=67 name=option67-efi value="'ipxe.efi'"
/ip dhcp-server option sets
add name=set-pxe-bios options=option17,option67-bios
add name=set-pxe-efi options=option17,option67-efi

А если ранее PXE уже настраивали, то вместо добавления опций, отредактируем имеющиеся.

/ip dhcp-server option
add code=17 name=option17 value="'http://192.168.255.2/tftp/fedora-coreos.ipxe'"
set code=67 value="'ipxe.pxe'" [ find name="option67-bios" ]
set code=67 value="'ipxe.efi'" [ find name="option67-efi" ]
/ip dhcp-server option sets
set options=option17,option67-bios [ find name="set-pxe-bios" ]
set options=option17,option67-efi [ find name="set-pxe-efi" ]

Теперь пропишем наши dhcp-опции для определённого компьютера, для которого уже имеется статическая запись в блоке lease (нужную запись можно определять по IP-адресу или MAC-адресу).

/ip dhcp-server lease set dhcp-option-set=set-pxe-bios [ find address="192.168.255.201" ]
/ip dhcp-server lease set dhcp-option-set=set-pxe-bios [ find mac-address="00:50:56:00:01:01" ]               

Осталось создать файл fedora-coreos.ipxe и разместить его на web-сервере Synology, для того, чтобы он был доступен по адресу http://192.168.255.2/tftp/fedora-coreos.ipxe

$ nano /volume1/docker/tftp/fedora-coreos.ipxe
#!ipxe

set KERNELFILE kernel-x86_64
set INITRDFILE initramfs.x86_64.img
set ROOTFSFILE rootfs.x86_64.img

set BASEURL http://192.168.255.2/tftp/fedora-coreos
set ROOTFSURL ${BASEURL}/${ROOTFSFILE}

set KERNELOPT console=tty1
set COREOSOPT coreos.live.rootfs_url=${ROOTFSURL}

kernel ${BASEURL}/${KERNELFILE} initrd=${INITRDFILE} ${COREOSOPT} ${KERNELOPT}
initrd ${BASEURL}/${INITRDFILE}

boot

Обратите внимание, что в строке kernel – присутствует запись initrd=${INITRDFILE}, она должна быть обязательно, иначе при загрузке появится kernel panic с ошибкой VFS: Unable to mount root fs on unknown-block(0,0). Этой записью мы говорим, что файл, который мы загружаем строкой initrd – это и есть наш Initial RAM Disk. Теперь можно загружать наш компьютер или виртуальную машину. Сначала загрузчик iPXE обратится к конфигурационному файлу, который мы вкомпилировали в загрузчик: dhcp && chain ${root-path}, затем iPXE получит IP-адрес по DHCP и по цепочке перейдёт к конфигурационному файлу, ссылка на который находится в переменной ${root-path}, а в эту переменную попадает то, что указано в 17-й опции DHCP, т.е. ссылка http://192.168.255.2/tftp/fedora-coreos.ipxe. Далее загрузка будет проходить по этому скрипту.

  1. Создание Ignition файлов для первоначальной настройки Fedora CoreOS:

В Fedora CoreOS, так же как и в RedHat Enterprise Linux CoreOS (RHCOS) для инициализации дисков и первоначальной установки и настройки используется утилита Ignition . Ignition – это утилита для манипулирования дисками во время загрузки initramfs. Это включает в себя разбиение дисков, форматирование разделов, запись файлов и настройку пользователей. При первой загрузке Ignition считывает свои настройки из конфигурационного файла и применяет эту конфигурацию. Создадим простой файл для Ignition, в котором мы пропишем ssh-ключ для пользователя core, включим автологин для консоли tty1, пропишем часовой пояс и отключим debug-сообщения в консоли.

$ nano /volume1/docker/tftp/fedora-coreos/config.ign
{
  "ignition": { "version": "3.0.0" },
  "passwd": {
    "users": [
      {
        "name": "core",
        "sshAuthorizedKeys": [
          "ssh-rsa AAAA..."
        ],
        "groups": [ "sudo", "docker" ]
      }
    ]
  },
  "storage": {
    "files": [
      {
        "path": "/etc/sysctl.d/20-silence-audit.conf",
        "contents": {
          "source": "data:,%23%20Raise%20console%20message%20logging%20level%20from%20DEBUG%20(7)%20to%20WARNING%20(4)%0A%23%20to%20hide%20audit%20messages%20from%20the%20interactive%20console%0Akernel.printk%3D4%0A"
        },
        "mode": 420
      }
    ],
    "links": [
      {
        "path": "/etc/localtime",
        "target": "/usr/share/zoneinfo/Europe/Moscow"
      }
    ]
  },
  "systemd": {
    "units": [
      {
        "dropins": [
          {
            "contents": "[Service]\n# Override Execstart in main unit\nExecStart=\n# Add new Execstart with `-` prefix to ignore failure`\nExecStart=-/usr/sbin/agetty --autologin core --noclear %I $TERM\n",
            "name": "autologin-core.conf"
          }
        ],
        "name": "getty@tty1.service"
      }
    ]
  }
}

Для того, чтобы данный файл был обработан при загрузке CoreOS, необходимо в файл fedora-coreos.ipxe добавить необходимые опции ядра для работы с файлом Ignition.

$ nano /volume1/docker/tftp/fedora-coreos.ipxe
#!ipxe

set KERNELFILE kernel-x86_64
set INITRDFILE initramfs.x86_64.img
set ROOTFSFILE rootfs.x86_64.img

set BASEURL http://192.168.255.2/tftp/fedora-coreos
set ROOTFSURL ${BASEURL}/${ROOTFSFILE}
set CONFIGURL ${BASEURL}/config.ign

set KERNELOPT console=tty1
set COREOSOPT coreos.live.rootfs_url=${ROOTFSURL}
set IGNITNOPT ignition.firstboot ignition.platform.id=metal ignition.config.url=${CONFIGURL}

kernel ${BASEURL}/${KERNELFILE} initrd=${INITRDFILE} ${COREOSOPT} ${IGNITNOPT} ${KERNELOPT}
initrd ${BASEURL}/${INITRDFILE}

boot

Теперь можно перезагружать компьютер или виртуальную машину.

Обращаю внимание на то, что оставлять настроенный автологин небезопасно, после экспериментов его необходимо отключить.

На официальном сайте Ignition можно посмотреть различные варианты настроек, включая автоматическое присвоение имени хоста. Но так же имя хоста для CoreOS можно передавать через DHCP-опцию 12 и оно будет автоматически прописано после загрузки. На MikroTik эту опцию можно прописать таким образом:

/ip dhcp-server option
add code=12 name=k8s-master-01 value="s'k8s-master-01.acmelabs.spb.ru'"
add code=12 name=k8s-master-02 value="s'k8s-master-02.acmelabs.spb.ru'"
add code=12 name=k8s-master-03 value="s'k8s-master-03.acmelabs.spb.ru'"
add code=12 name=k8s-worker-01 value="s'k8s-worker-01.acmelabs.spb.ru'"
add code=12 name=k8s-worker-02 value="s'k8s-worker-02.acmelabs.spb.ru'"
add code=12 name=k8s-worker-03 value="s'k8s-worker-03.acmelabs.spb.ru'"
/ip dhcp-server lease
set dhcp-option=k8s-master-01 [ find address="192.168.255.51" ]
set dhcp-option=k8s-master-02 [ find address="192.168.255.52" ]
set dhcp-option=k8s-master-03 [ find address="192.168.255.53" ]
set dhcp-option=k8s-worker-01 [ find address="192.168.255.54" ]
set dhcp-option=k8s-worker-02 [ find address="192.168.255.55" ]
set dhcp-option=k8s-worker-03 [ find address="192.168.255.56" ]
  1. Настройка автоматического обновления образов CoreOS:

Для автоматического обновления образов Fedora CoreOS я написал небольшой скрипт, который запускает Task Scheduler на Synology раз в сутки. Когда появляется новое обновление – по почте приходит письмо от Task Scheduler.

$ nano /volume1/docker/tftp/fedora-coreos/get-fedora-coreos.sh
#!/bin/bash

ARCH="x86_64"
STREAM="stable"
PLATFORM="metal"
DEST_DIR=${1:-"$PWD"}
LATESTFILE="$DEST_DIR/.latest.txt"
KERNELFILE="kernel-$ARCH"
INITRDFILE="initramfs.$ARCH.img"
ROOTFSFILE="rootfs.$ARCH.img"
META_URL="https://builds.coreos.fedoraproject.org/streams/$STREAM.json"
META_JSON=`curl --silent $META_URL 2>/dev/null`
COMMON_JSON=".architectures.$ARCH.artifacts.$PLATFORM"

# Make curl silent for dumb terminals.
if [ "$TERM" == "dumb" ] || [ "$TERM" == "vt102" ]; then
    CURL_PBAR="--silent"
else
    CURL_PBAR="--progress-bar"
fi

download_file() {
    [ ! $# -eq 2 ] && return 0
    local FILE_TYPE="$1"
    local FILE_NAME="fedora-coreos-$VERSION-live-$2"
    local FILE_URL=`echo $META_JSON | jq --raw-output $COMMON_JSON.formats.pxe.$FILE_TYPE.location 2>/dev/null`
    local FILE_SHA=`echo $META_JSON | jq --raw-output $COMMON_JSON.formats.pxe.$FILE_TYPE.sha256 2>/dev/null`
    echo "$FILE_NAME: downloading..."
    curl $CURL_PBAR $FILE_URL --output $DEST_DIR/$FILE_NAME.tmp --remote-time
    echo "$FILE_SHA $DEST_DIR/$FILE_NAME.tmp" | sha256sum --check --status 2>/dev/null
    if [ $? -eq 0 ]; then
        echo "$FILE_NAME: checksum ok"
        return 1
    else
        >&2 echo "ERROR: $FILE_NAME: checksum failed"
        return 0
    fi
}

# Check destination directory.
if [ ! -d "$DEST_DIR" ]; then
    echo "Creating destination directory $DEST_DIR"
    mkdir -p $DEST_DIR
fi

# Get actual version data.
VERSION=`echo $META_JSON | jq --exit-status --raw-output $COMMON_JSON.release 2>/dev/null`
if [ ! $? -eq 0 ]; then
    >&2 echo "ERROR: Unable to extract version data from json at $META_URL"
    exit 1
fi

# Exit if actual version is already installed.
[ "$VERSION" == "$(cat $LATESTFILE 2>/dev/null)" ] && exit 0
echo "Detected a new version of Fedora CoreOS: $VERSION"

TOTAL_RESULT=0
download_file "kernel"    $KERNELFILE; ((TOTAL_RESULT += $?))
download_file "initramfs" $INITRDFILE; ((TOTAL_RESULT += $?))
download_file "rootfs"    $ROOTFSFILE; ((TOTAL_RESULT += $?))

# Check result codes.
if [ ! $TOTAL_RESULT -eq 3 ]; then
    # Some files were downloaded with errors.
    >&2 echo "ERROR: Errors occurred during the execution of the script"
    rm -f *.tmp
    exit 1
fi

echo "Latest symlinks are redirecting to the actual version: $VERSION"
for filename in $KERNELFILE $INITRDFILE $ROOTFSFILE; do
    # Renaming the downloaded files and creating symlinks to the latest version.
    FILE="fedora-coreos-$VERSION-live-$filename"
    mv -f $DEST_DIR/$FILE.tmp $DEST_DIR/$FILE && ln -sf $FILE $DEST_DIR/$filename

    # Remove very old files (keep only 4 last versions).
    ls -tr1 $DEST_DIR/fedora-coreos-*-$filename | head -n -4 | xargs -I {} rm -- {}
done

# Save installed version.
echo $VERSION >$LATESTFILE

# Hack for Synology only. To send notifications, the exit code must be non-zero.
[ -f /etc/synoinfo.conf ] && exit 255

Для включения автозапуска данного скрипта раз в сутки на Synology, сделаем следующее:

  • в веб-интерфейсе Synology открываем Control Panel, выбираем в блоке System пункт Task Scheduler;
  • открываем вкладку TFTP и ставим галочку напротив пункта Enable TFTP service;
  • нажимаем на кнопку Create и выбираем в меню пункт Scheduled Task \ User-defined script;
  • во вкладке General в поле Task пишем Fedora CoreOS Updater;
  • во вкладке Schedule выбираем время для запуска скрипта и ежедневный тип запуска;
  • во вкладке Task Settings отмечаем галочкой отправку уведомлений по почте, вводим свой почтовый адрес и отмечаем галочкой пункт Send run details only when the script terminates abnormally;
  • далее в пункте User-defined script пишем команду /volume1/docker/tftp/fedora-coreos/get-fedora-coreos.sh /volume1/docker/tftp/fedora-coreos;
  • нажимаем на кнопку OK для сохранения задачи.

Как видно из настроек Task Scheduler, уведомление по почте Synology может отправлять или каждый раз при запуске задачи, или только при появлении ошибок. Поэтому в последней строчке скрипта специально выполняется команда exit 255 для симуляции ошибки, для того, чтобы уведомление приходило каждый раз, как будут обновлены образы Fedora CoreOS.

В следующей заметке настроим matchbox , для того, чтобы каждая нода кластера kubernetes получала свой собственный iPXE скрипт и конфигурационный файл Ignition.


Предыдущая запись