Как иметь chroot систему, монтируются совместно использованный с ее хостом?

Можно генерировать использование с открытым ключом ssh-keygen -y. Если Ваш закрытый ключ находится в месте по умолчанию, можно использовать следующее для помещения открытого ключа на то же место:

ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
2
13.11.2013, 10:47
2 ответа

Прототип!

Способ сделать это было бы следующим сценарием, работающим на хосте:

#!/bin/bash
# host: bind-mount
PREFIX="~/myroot"
MNT="/mnt"

MNT=${MNT#/}
CMD=$PREFIX/$MNT/.mounts.cmd
OUT=$PREFIX/$MNT/.mounts.out
ERR=$OUT
#ERR=$PREFIX/$MNT/.mounts.err


echo "Using prefix $PREFIX"
if ! [ -d $PREFIX/$MNT ]; then
    mkdir -p $PREFIX/$MNT
    echo "Created $PREFIX/mnt"
fi
for i in $CMD $OUT $ERR; do
    if ! [ -e $i ]; then
        mkfifo $i
        echo "Created $i"
    fi
done

trap "exit 0" SIGINT

while true; do
(   # subshell for better output redirection
    line=$(cat $CMD)
    # FIXME there's a problem if this script doesn't react fast
    # enough such that .mounts.cmd contains more than one line...

    # This is a VERY primitive parser of arguments that will fail
    # in many situations, hence PROTOTYPE
    if [ "$line" == "QUIT" ]; then
        exit 254;
    fi
    isopttype=false
    for para in $line; do
        if $isopttype; then
            switches="$switches$para "
            isopttype=false
        else
            case $para in
                -a)
                    echo "mount -a not supported!" >&2
                    exit 253
                    ;;
                -o|-O|-t)
                    isopttype=true
                    switches="$switches$para "
                    ;;
                -*)
                    switches="$switches$para "
                    ;;
                *)
                    if [ -z "$src" ]; then
                        src=$para
                    elif [ -z "$dest" ]; then
                        dest=$para
                    else
                        echo "Confused by $para after src=$src and dest=$dest" >&2
                        exit 252
                    fi
                    ;;
            esac
        fi
    done

    if [ -z "$src" ] || [ -z "$dest" ]; then
        echo "Please provide both mount source and destination!" >&2
        exit 251
    fi
    mount $PREFIX/${src#/} $dest $switches && mount --bind $dest $PREFIX/${dest#/}
) >>$OUT 2>>$ERR
[[ $? == 254 ]] && exit 0
done

for i in $CMD $OUT $ERR; do
    rm $i
done

Это слушает именованный канал (~/myroot/mnt/.mounts.cmd), который chrootредактор mount запишет во вместо того, чтобы делать фактическое монтирование, и после монтирования на хосте связывают - монтируют новое монтирование к chroot- среда.

chrootредактор mount заменяется этим:

#!/bin/bash
# chroot: talk to hosts mount-listener
MNT="/mnt"

CMD=$MNT/.mounts.cmd
OUT=$MNT/.mounts.out
ERR=$OUT
#ERR=$MNT/.mounts.err

echo "$@" > $CMD
cat < $OUT  # TODO output $ERR to stderr
1
27.01.2020, 22:14

Я думаю busybox опция, в которой Вы нуждаетесь, -o shared.

1
27.01.2020, 22:14
  • 1
    я боюсь, что это имеет тот же эффект, а именно, mount тихо игнорирование этого :( –  Tobias Kienzler 13.11.2013, 10:33

Теги

Похожие вопросы