rkt/ сборка образа: инструкции по запуску acbuild "игнорируются"

Я испытываю неожиданное поведение при использовании acbuild run, Чтобы привыкнуть к rkt, идея состояла в том, чтобы начать с контейнера на базе CentOS7, работающего на хосте SSH. Пустой контейнер CentOS 7, указанный ниже как centos7.aci был создан при современной установке CentOS7 с использованием приведенных здесь инструкций. Сценарий, используемый для создания SSHd ACI

#! /bin/bash
acbuild begin ./centos7.aci
acbuild run -- yum install -y openssh-server
acbuild run -- mkdir /var/run/sshd
acbuild run -- sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
acbuild run -- sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
acbuild run -- ssh-keygen -A -C "" -N "" -q
acbuild run -- echo 'root:screencast' | chpasswd
acbuild set-name centos7-sshd
acbuild set-exec -- /usr/sbin/sshd -D
acbuild port add ssh tcp 22
acbuild write --overwrite centos7-sshd.aci
acbuild end

Когда он раскручивается с помощью rkt run --insecure-options=image ./centos7-sshd.aciсервер работает, но попытки подключения терпят неудачу, потому что пароль не принят. Если я использую rkt enter забраться в работающий контейнер и перезапустить echo 'root:screencast' | chpasswd внутри я могу войти. Так что инструкция acbuild run по какой-то причине просто не сработала... Чтобы проверить немного больше, я заменил ее на acbuild run -- mkdir ~/.ssh acbuild run -- echo "<rkt host SSH public key>“ >> ~/.ssh/authorized_keys

включить ключ на основе вместо пароля логин. Это не работает: ключ отказан. Причина очевидна, если вы посмотрите в контейнер: там нет authorized_keys файл в ~/.ssh/, Если я добавлю
acbuild run -- touch ~/.ssh/authorized_keys инструкция перед попыткой добавления ключа, файл создан, но он все еще пуст. Итак, снова инструкция по запуску acbuild не сработала - без уведомления об ошибке. Может ли это быть связано с тем, что обе "игнорируемые" инструкции используют такие операторы, как >> а также |? Все команды, показанные в примерах, которые я видел, не используют никаких таких операторов, но в документах ничего не упоминается, и поиск в Google тоже не помогает. В докерфайле RUN инструкции у них тоже нормально работают... что тут не так?

PS: я пытался использовать chroot вместо по умолчанию systemd-nspawn двигатель в режиме "игнорируется" acbuild run инструкции => те же результаты

PPS: нет acbuild пометить еще на Stackru, поэтому мне пришлось пометить это как rkt - Может ли кто-нибудь с достаточной репутацией создать его, пожалуйста? Спасибо

1 ответ

Хорошо, я понял, что происходит с помощью acbuild run --debug вариант. когда

acbuild run -- echo 'root:screencast' | chpasswd

исполняется возвращается Running: [echo root:screencast] Труба выполняется на хост-машине. Чтобы получить желаемый результат, он должен быть

acbuild run -- /bin/sh -c "echo 'root:screencast' | chpasswd"

или в общей форме

acbuild run -- /bin/sh -c "<cmd with pipes>"

как объяснено здесь

Другие вопросы по тегам