что делает 'sshfs-oworkaround=rename', делают?

Хороший и лучший способ состоял бы в том, чтобы иметь измененный apt.conf файл так, чтобы sudo apt-get -c myapt.conf install gnome делает то, что Вы хотите. Это может быть сделано, но способная документация не прямая для быстрого поиска. Unionmounts в корневых файловых системах довольно утомительны также, и я с удовольствием позволю Gilles записать практическое руководство на том.:-)

Как Ваш компьютер как "Разъем" на его имя я думаю, устанавливая Gnome в Вашу реальную ОС, не хорошая идея b/c, если бы оказывается, что Вы не хотите ту установку Gnome на своем компьютере, я даже не доверял бы Debian, чтобы смочь вернуться Ваша ОС к состоянию, которое это имеет прямо сейчас.

Установка Gnome в chroot среду

Для испытания его, я настроил бы корневую среду изменения на внешнем жестком диске для испытания Gnome. Чтобы сделать это, необходимо установить debootstrap на Вашей реальной ОС, но это не большая программа: apt-get install debootstrap. Затем Вы устанавливаете каталог, где Вы хотите свою установку Gnome, устанавливаете основной debian, сделайте это debian клон Вашей текущей ОС и затем установите Gnome на вершине:

mkdir -p /mnt/ExternalHDD/whereever/you/want/Gnome #create target directoy
debootstrap squeeze /mnt/ExternalHDD/whereever/you/want/Gnome #install basic debian, choose your own distro/suite
mount -t proc fooproc /mnt/ExternalHDD/whereever/you/want/Gnome/proc #set up chroot environment
mount -t sysfs foosysfs /mnt/ExternalHDD/whereever/you/want/Gnome/sys #set up chroot environment
mount -o bind /dev /mnt/ExternalHDD/whereever/you/want/Gnome/dev #set up chroot environment
mount -t devpts foodevpts /mnt/ExternalHDD/whereever/you/want/Gnome/dev/pts #set up chroot environment
cp /etc/resolv.conf /mnt/ExternalHDD/whereever/you/want/Gnome/etc #nice to have
cp /etc/hosts /mnt/ExternalHDD/whereever/you/want/Gnome/etc #nice to have
cp /etc/hostname /mnt/ExternalHDD/whereever/you/want/Gnome/etc #nice to have

Теперь у нас есть основная debian установка в Вашем целевом каталоге, который готов использоваться. Важно, чтобы Вы использовали debootstrap для установки того же самого дистрибутива Linux (включая Версию!), поскольку Ваша реальная ОС. См. страницу справочника debootstrap на доступных вариантах. В основном debootstrap может установить любой Linux, пока он использует надлежащий репозиторий debian-стиля. Это должно иметь место для любого дистрибутива, который использует deb-пакеты.

Теперь мы хотим сделать это подобным Вам реальная ОС и затем установить Gnome. Следующие строки могут быть немного неинтуитивными (и мой включать синтаксические ошибки, YMMV)...

dpkg --get-selections | grep -v deinstall | awk '{print $1;}' |\
     xargs chroot /mnt/ExternalHDD/whereever/you/want/Gnome \
           /bin/bash -l -c aptitude -y install
cp -a /etc/* /mnt/ExternalHDD/whereever/you/want/Gnome/etc
chroot /mnt/ExternalHDD/whereever/you/want/Gnome \
       /bin/bash -l -c aptitude install gnome

Теперь на Вашем внешнем жестком диске должна быть хорошая установка Gnome. Обратите внимание на то, что необходимо будет сделать монтировать-волшебство и скопировать/etc/resolv.conf НА КАЖДОМ BOOT. Иначе программы, запущенные в chroot среде, будут не всегда работать правильно.

Создание доступного Gnome

Теперь для части использования! AFAIK там не являются никаким свободным "удаленным рабочим столом", Xservers, но XDMCP работает просто великолепно, и для более сложной установки можно использовать x2go. Установив Gnome на нашей chroot среде мы теперь просто должны настроить и запустить менеджер дисплея Gnome. Основные шаги 1. определение местоположения gdm.conf в chroot каталоге (вероятный/mnt/externalHDD/.../etc/gdm/gdm.conf), 2. включение XDMCP, 3. запуск gdm.

Я полагаю, что можно сделать шаг 1 со стороны себя. Для шага 2 Вы должны добавить

[xdmcp]
Enable=true

к gdm.conf. Поскольку больше опций обратитесь к документации. Для шага 3 важно, чтобы chroot среда была настроена правильно (все монтирование выше). Затем простое chroot /path/to/Gnome /bin/bash -l -c /etc/init.d/gdm start должен добиться цели. Однако недавние дистрибутивы Linux могут использовать что-то другое, чем сценарии в etc/init.d к контрольным службам. Это характерно для Вашего распределения. После этого можно соединиться с gdm на компьютере с любым Xserver.

17
05.04.2014, 06:31
1 ответ
[1121013]sshfs использует протокол передачи файлов SSH (SFTP). Обходной путь, который Вы включили, работает вокруг семантики операции rename() над этим протоколом, когда "новое" имя уже существует.

Поведение POSIX для функции rename() в этом случае заключается в удалении существующего файла и завершении переименования.В протоколе SFTP Вы можете переименовать файл с помощью операции SSH_FXP_RENAME; однако, его поведение, когда целевое имя уже существует, по-видимому, зависит от версии протокола, который Вы используете, и от того, какие флаги Вы передаёте. Страница википедии [1121465] для протокола SFTP [1121466] содержит ссылки на различные черновики RFC для различных версий протокола. В [1121467]черновике 00[1121468] поведение указано как: Это ошибка, если уже существует файл с именем указанное newpath.

В [1121471]Draft 13[1121472], поведение указано как

0022

Если флаги не включают SSH_FXP_RENAME_OVERWRITE, а там уже есть существует файл с именем, заданным newpath, сервер ДОЛЖЕН ответьте SSH_FX_FILE_ALREADY_EXISTS.

Если флаги включают SSH_FXP_RENAME_ATOMIC и целевой файл уже существует, его заменяют атомным способом. Т.е., есть не наблюдаемый момент времени, на который название не ссылается ни то, ни другое старый или новый файл. SSH_FXP_RENAME_ATOMIC подразумевает. SSH_FXP_RENAME_OVERWRITE.

Для того, чтобы справиться с возможным сбоем операции rename() при наличии целевого имени, [1121477]sshfs предоставляет следующее обходное решение (если включено)[1121478]:

В этом коде "из" - это существующее имя файла, который мы хотим переименовать, а "в" - это новое имя, которое мы хотим. Оставляя в стороне некоторую длину пути и учет ошибок, эта работа вокруг

Переименовывает "to" в "totmp"

Переименовывает "из" в "to"

Развязывает (удаляет) "totmp"

Это позволяет избежать конфликта "файл уже существует", но также изменяет семантику операций переименования(), поэтому вы не захотите делать это по умолчанию.[1121032].

10
27.01.2020, 19:47

Теги

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