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>"
как объяснено здесь