Smith — это простая утилита командной строки для сборки микроконтейнеров из пакетов rpm или образов oci.
/write
. Любой уникальный конфиг, который понадобится отдельному экземпляру контейнера, должен быть помещён в каталог /read
. Эфемерные файлы, такие как файлы pid, могут быть записаны в /run
.Вы можете собрать и запустить smith двумя способами:
Оба метода описаны ниже, но рекомендуется использовать Docker, так как это самый простой и удобный вариант.
— Docker.
Клонируйте smith:
git clone https://github.com/oracle/smith.git
Соберите Docker-образ smith, используя предоставленный Dockerfile, при необходимости добавив свой собственный docker-repo-id к тегу:
sudo docker build -t [<docker-repo-id>/]smith .
Настройте псевдоним (или скрипт) для запуска smith из командной строки:
smith(){
sudo docker run -it --rm \
--privileged -v $PWD:/write \
-v cache:/var/cache \
-v /tmp:/tmp \
-v mock:/var/lib/mock [<docker-repo-id]/smith $@
}
Теперь вы сможете начать сборку микроконтейнеров (см. ниже).
Сборка может быть выполнена через Makefile:
make
— Docker; — Go.
Чтобы установить go, запустите sudo yum install golang-bin
или sudo apt install golang-go
, в зависимости от ситуации.
Go-зависимости включены в vendor-директорию.
Для сборки из RPM smith требует: — mock.
Mock может иметь проблемы с дистрибутивами, отличными от RPM.
Если у вас возникли проблемы с установкой или запуском smith нативно на дистрибутиве, отличном от RPM, лучше всего собрать его и запустить в Docker-контейнере (см. выше).
Mock можно установить на Debian/Ubuntu с некоторой осторожностью (см. ниже). В частности, вам нужен как минимум mock 1.2. Версия 1.1.X не будет работать, потому что флаг -r не поддерживает abspath к файлу конфигурации mock. Помните, что ваши сборки smith всё ещё могут завершиться неудачно.
Специфические инструкции для Debian/Ubuntu (Здесь живут драконы):
sudo apt install mock createrepo yum
# Fedora rawhide chroot (который mock использует по умолчанию) не работает с
# Debian, поэтому укажите /etc/mock/default.cfg на EPEL 7 (6 на Ubuntu):
sudo ln -s /etc/mock/epel-7-x86_64.cfg /etc/mock/default.cfg
# rpm на Debian имеет патч к макросам, которые портят mock, поэтому отмените его. Обратите внимание,
# что обновление вашей ОС иногда сбрасывает этот файл, и вам придётся снова запускать эту команду.
sudo sed -i 's;%_dbpath\t.*;%_dbpath\t\t%{_var}/lib/rpm;g' /usr/lib/rpm/macros
# на debian/ubuntu по какой-то причине yum пытается установить пакеты для
# нескольких archs, поэтому необходимо обновить раздел yum.conf в
# default.cfg, чтобы предотвратить это. Если вы переключитесь на другой default.cfg, вам
# возможно, придётся сделать это снова.
sudo sed -i '/\[main\]/a multilib_policy=best' /etc/mock/default.cfg
Независимо от используемого дистрибутива убедитесь, что ваш пользователь является членом группы mock:
$ groups
Если ваш пользователь не является членом группы mock, добавьте его:
$ usermod -aG mock <your_username>
В Oracle Linux отредактируйте /etc/mock/site-defaults.cfg и добавьте:
config_opts['use_nspawn'] = False
Установка может быть выполнена через Makefile:
sudo make install
Чтобы использовать smith, просто создайте: Создание микроконтейнеров
Для создания контейнера «hello world» с помощью smith:
mkdir cat
cd cat
package: coreutils
paths:
- /usr/bin/cat
cmd:
- /usr/bin/cat
- /read/data
mkdir rootfs
mkdir rootfs/read
Hello World!
smith
Ваш образ будет сохранён как image.tar.gz. Вы можете изменить имя с помощью параметра:
smith -i cat.tar.gz
У smith есть несколько других опций, которые можно просмотреть с помощью "--help":
smith --help
Типы сборки
Smith может собирать из локальных rpm-файлов или репозиториев. Вы можете изменить конфигурацию yum, изменив ваш /etc/mock/default.cfg.
Smith также может создавать непосредственно из oci-файлов, загруженных через команду download, или из oci напрямую из репозитория docker. Просто укажите это в вашем smith.yaml как package, например:
package: https://registry-1.docker.io/library/fedora
paths:
- /usr/bin/cat
cmd:
- /usr/bin/cat
- /read/data
Чтобы создать Smith непосредственно из oci, команда Docker немного отличается:
smith(){
docker run -it --rm \
-v $PWD:/write \
-v tmp:/tmp vishvananda/smith $@
}
Расширенное использование
Более подробные инструкции по созданию контейнеров см.:
Загрузка
Вы можете загрузить свой образ в репозиторий docker:
smith upload -r https://username:password@registry-1.docker.io/myrepo/cat -i cat.tar.gz
Изображения будут загружены в тег latest. Вы можете указать альтернативное имя тега, добавив его после двоеточия:
smith upload -r https://registry-1.docker.io/myrepo/cat:newtag
Он автоматически загружается в реестр-1.docker.io с использованием типов носителей docker. В противном случае он пытается загрузить с использованием типов носителей oci. Если вы хотите загрузить в частный реестр docker версии 2, который не поддерживает типы носителей oci, вы можете использовать переключатель -d:
smith upload -d -r https://myregistry.com/myrepo/cat -i cat.tar.gz
Вы можете указать имя тега для загрузки, добавив его к имени.
Скачивание
smith также может загружать существующие образы из репозиториев docker:
smith download -r https://registry-1.docker.io/library/hello-world -i hello-world.tar.gz
Они будут преобразованы в tar.gz oci макеты. Будет загружен тег latest. Чтобы загрузить альтернативный тег, добавьте его после двоеточия:
smith download -r https://registry-1.docker.io/library/hello-world:othertag
Вклад
Smith — это проект с открытым исходным кодом. Подробности см. в CONTRIBUTING.md.
Oracle благодарит сообщество за вклад в smith.
Как связаться
Лучший способ связаться — Slack.
Нажмите здесь, чтобы присоединиться к рабочему пространству Oracle Container Tools (https://oraclecontainertools.slack.com).
Затем присоединитесь к каналу Smith (https://oraclecontainertools.slack.com/messages/C8BKS9HT5).
Лицензия
Copyright (c) 2017, Oracle and/или её филиалы. Все права защищены.
Smith имеет двойную лицензию в соответствии с Универсальной Разрешительной Лицензией 1.0 и Apache License 2.0.
Подробности см. в LICENSE.txt.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )