Кажется, что
--enable password
важен на
https://lists.fedoraproject.org/pipermail/users/2013-November/442288.html
virt-sysprep -a foo.qcow2 --enable password --root-password password:123456
В противном случае virt-sysprep перезаписывает многие другие вещи в необработанном виде. образ, повредив его, так что вы не можете с него загрузиться.
Отсутствие - включить пароль
привело к
$ virt-sysprep -a Fedora-Cloud-Base-22-20150521.i386.raw --root-password password:1234
Examining the guest ...
Performing "yum-uuid" ...
Performing "utmp" ...
Performing "udev-persistent-net" ...
Performing "tmp-files" ...
Performing "sssd-db-log" ...
Performing "ssh-userdir" ...
Performing "ssh-hostkeys" ...
Performing "smolt-uuid" ...
Performing "script" ...
Performing "samba-db-log" ...
...
, но, используя его в первый раз, было не очевидно, что это плохо.
При правильном вызове он касается только парольной части образа:
$ virt-sysprep -a Fedora-Cloud-22-password.i386.raw --enable password --root-password password:XXXX
Examining the guest ...
Performing "password" ...
И теперь я могу войти в виртуальную машину.
Debe usar comillas dobles -en lugar de comillas simples --comillas simples -para evitar que se produzca una expansión variable. Prueba esto en su lugar:
#!/bin/bash
NETWORKNAME=PCEXCHANGE
VERSION=1.1.0
ORGANIZATIONS=( "Asus" "Dell" "HP" "Amazon" )
PRODUCERS=( "Asus" "Dell" "HP" )
MAKERS=( "Amazon" )
for org in ${PRODUCERS[@]}
do
for maker in ${MAKERS[@]}
do
docker exec cli.${maker} bash -c "peer channel create -c ${org,,} -f./channels/${org}.tx -o orderer.${NETWORKNAME,,}.com:7050"
done
done
Чтобы безопасно передавать переменные в bash -c
дочернюю оболочку, вы должны использовать
bash -c 'script goes here' bash "arg1" "arg2" "arg3"...
То есть,
#!/bin/bash
NETWORKNAME=PCEXCHANGE
VERSION=1.1.0
ORGANIZATIONS=( "Asus" "Dell" "HP" "Amazon" )
PRODUCERS=( "Asus" "Dell" "HP" )
MAKERS=( "Amazon" )
for org in "${PRODUCERS[@]}"; do
for maker in "${MAKERS[@]}"; do
docker exec "cli.$maker" \
bash -c 'peer channel create -c "$1" -f "$2" -o "$3"' bash \
"${org,,}" "./channels/$org.tx" "orderer.${NETWORKNAME,,}.com:7050"
done
done
Это позволит дочернему скрипту оболочки работать, даже если в значениях любого из производителей есть пробелы.
Также обратите внимание на цитирование других расширений в скрипте, благодаря чему он работает, даже если производители или производители имеют пробелы в своих значениях.
Аргумент bash
после текста самого скрипта bash -c
передается в $0
. Обычно это имя скрипта или интерпретатора, поэтому мы просто передаем строку bash
.