Полезные скрипты: Организуем удаленную сборку ПО

Решил в начале Нового Года, что надо разгрести каталог с полезными скриптами, которые используются годами “в хозяйстве” едва ли не на рефлексах, документировать их и закинуть в блог, а лишние снести к чертям. И начну, пожалуй, со скрипта, которым собираю тяжелый софт на “большом” сервере, где много памяти, быстрый SSD и прочие радости жизни. (О том, как я выбирал и настраивал для этого железо, пожалуй, я напишу в другом посте).

Итак, у нас есть такая система:

  • Ноутбук, на котором обычно работаю,
  • Домашний сервер с Intel Xeon, быстрым SSD, кучей оперативной памяти и контейнером с нужным окружением

Хотим работая на ноутбуке (Уж точно не через VNC!), собирать софт удаленно. Каталог сборки я монтирую по NFS. Можно, конечно, извратиться и с SSH, но в домашней сети NFS банально быстрее. Постоянно держать смонтированным каталог сборки не хочется. Так вот и родился вот такой вот костыль:

#!/bin/bash

NFSPATH=192.168.143.2:/srv/sanctuary/build
LOCALPATH=/srv/build
REMOTEPATH=/srv
SSHCMD="ssh buildblade.home -t"

checkmount() {
    MCL=`mount | grep "$LOCALPATH" | wc -l`
    if [ "$MCL" -lt "1" ]; then
        echo "[W] Staging area not mounted, mounting"
        sudo mount -t nfs -o vers=3 $NFSPATH $LOCALPATH
    else
        echo "[I] Staging area already mounted, skipping"
    fi
}

unmount() {
    sudo umount -l $LOCALPATH
}

cmd() {
    checkmount
    CMD="$*"
    CMD=${CMD/${LOCALPATH}/${REMOTEPATH}}
    PWD="`pwd`"
    PWD=${PWD/${LOCALPATH}/${REMOTEPATH}}
    echo "[I] Executing transformed cmd: ${CMD} in ${PWD}"
    $SSHCMD "cd ${PWD} && ${CMD}"
}

case "$1" in
    "--mount")
        checkmount
        ;;
    "--unmount")
        unmount
        ;;
    "--help")
        echo "Usage: bb [--mount | --unmount]"
        echo "Usage: bb cmd"
        ;;
    *)
        cmd $*
        ;;
esac

Этот скрипт кладется в какой-нибудь каталог, который есть в PATH. (У меня он называется bb). Использовать его предельно просто:

  • bb –mount – подмонтировать каталог сборки
  • bb –unmount – размонтировать каталог сборки
  • bb command – выполнить команду в этом же каталоге, но на сервере.

Особенность этой штуки в том, что он сам динамически меняет пути. Каталог сборки может быть примонтирован по одному пути на сервере, и по другому на пользовательской машине. Именно поэтому перед выполнением команды происходит подмена путей.

Для чего-то простого оно годится, а более сложное проще закинуть в скрипт, и вызывать через bb его. Таким вот замысловатым образом я периодически собираю LibreElec, OpenIPC, OpenWRT, crosstool-ng и другие опенсорсные проекты, которые требуют много процессорного времени.

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.