Почему принадлежность файла имеет значение в пакете DEB или об/мин?

Я нашел решение:

Добавление xorg.conf в /etc/X11 помогший.

Теперь отключение мышей работает навсегда, но после включения новой мыши или клавиатуры необходимо включить его вручную с xinput.

$ cat xorg.conf

Section "ServerFlags"
        Option  "AutoAddDevices"        "true"
        Option  "AutoEnableDevices"     "false"
        Option  "AllowMouseOpenFail"    "false"
        Option  "AllowEmptyInput"       "on"
EndSection
4
29.06.2014, 01:23
3 ответа

При использовании Bash 4 или более поздней версии можно использовать сопроцессы :

function f () { a=3; b=4 ; echo "`date`: $a $b"; }
coproc cat
f >&${COPROC[1]}
exec {COPROC[1]}>&-
read c <&${COPROC[0]}
echo a $a
echo b $b
echo c $c

будут выводиться

a 3
b 4
c Sun Jun 29 10:08:15 NZST 2014: 3 4

coproc создает новый процесс, выполняющий заданную команду (здесь cat ). Он сохраняет PID в COPROC _ PID и стандартные дескрипторы выходных/входных файлов в массив COPROC (как и pipe (2) , или см. здесь или здесь ).

Здесь мы запускаем функцию со стандартным выходом, который указывает на наш сопроцессный запуск cat , а затем считываем из него. Поскольку cat просто спиливает входные данные обратно, мы получаем выходные данные функции в нашу переменную. exec {COPROC [1]} > & - закрывает дескриптор файла, так что cat не будет ждать вечно.


Обратите внимание, что чтение занимает только одну строку за раз. Можно использовать mapfile для получения массива строк или просто использовать дескриптор файла, однако использовать его другим способом.

exec {COPROC [1]} > & - работает в текущих версиях Bash, но более ранние 4-серийные версии требуют сначала сохранения дескриптора файла в простую переменную: fd = $ {COPROC [1]}; exec {fd} > & - . Если переменная не задана, она закроет стандартный вывод.


Если вы используете 3-серийную версию Bash, вы можете получить тот же эффект с mkfifo , но это не намного лучше, чем использование реального файла в этот момент.

-121--50404-

Пакеты rpm и deb содержат архивы устанавливаемых файлов ( cpio архивы в случае rpm, tar в случае deb). Эти архивы содержат метаданные о каждом файле, включая его имя, дату изменения, владельца и группу, а также разрешения. Когда пакет установлен, каждый файл получает право собственности, описанное в архиве (если сценарий после установки не изменяет его).

Большинство файлов, установленных пакетами, принадлежат root, поскольку ни один пользователь не имеет прав на их изменение.

Alien преобразует пакеты, распаковывая архив и переупаковывая его (а также другие вещи, такие как преобразование сценариев перед/после установки). Например, чтобы преобразовать rpm в deb, инопланетянин вызывает cpio для извлечения архива во временное местоположение, затем tar для построения нового архива. Если распаковка не выполняется с правами root, то все временные файлы будут принадлежать пользователю, выполняющему распаковку, поэтому, когда файлы будут упакованы в новый архив, они в конечном итоге будут принадлежать этому пользователю.

Alien на самом деле не должен работать как root, так как ему не нужно ничего изменять в системе. Fakeroot выполняет чужую (или любую другую) команду в среде, где эта команда получает фальшивую информацию об операциях файловой системы, делая вид, что операции, которые обычно требуют root (например, изменение владельца файла), прошли успешно. Сюда,распаковка сделана как корень и устанавливает корректный файл owernship (что касается посторонний объект и его подпроцессы), и таким образом переупаковка создает намеченный архив.

1
27.01.2020, 20:52

Используйте фальшивку. Инопланетянину не нужен корень, чтобы манипулировать некоторыми битами. Однострочное описание в man-странице fakeroot адекватно суммирует его:

запустить команду в среде, подделывающей привилегии root для манипулирования файлами

Таким образом, fakeroot - это программа, которая убеждает команду в том, что она запущена от имени root, достаточно хорошо, чтобы права доступа к файлу были установлены от имени root там, где они и должны быть. За более подробной информацией обращайтесь к man fakeroot.

Сообщение об ошибке, которое вы получили, к сожалению, вводит в заблуждение.

В двух словах, do

fakeroot alien ...

Вот сообщение об ошибке, в котором автор инопланетянин, Джоуи Хесс, обсуждает необходимость использования fakeroot. Наверное, не самая лучшая ссылка. Если я найду что-нибудь получше, я опубликую это.

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=16289

3
27.01.2020, 20:52

Потому что для изменения права собственности на файл требуются привилегии 'root'; а не потому, что файлы обязательно должны принадлежать 'root' - хотя многие из них таковыми являются.

Создайте файл в своем домашнем каталоге и попробуйте изменить его владельца:-

touch test.txt
ls -l test.txt
-rw-rw-r--. 1 gareth gareth 0 Jun 28 21:24 test.txt
chown nobody. test.txt
chown: changing ownership of ‘test.txt’: Operation not permitted

Хотя я владелец файла и у меня есть rw права, я не могу изменить владельца.

sudo chown nobody. test.txt
ls -l test.txt
-rw-rw-r--. 1 nobody gareth 0 Jun 28 21:24 test.txt

Но запуск от имени root с помощью sudo работает.

Как сказано в предупреждении; владение будет неправильным. Из этого можно предположить, что alien изменяет право собственности на некоторые файлы.

Системные файлы, как правило, принадлежат "root" с ограничительными привилегиями, так что простые пользователи, такие как вы и я, не изменяют и не удаляют их.

В системе есть и другие пользователи и группы, но в отличие от 'root' они не одинаковы в дистрибутивах. Например, под Fedora (и RedHat и CentOS) веб-сервер Apache работает как apache и файлы данных принадлежат этому пользователю. С другой стороны, я считаю, что Apache работает как www-data на системах Debian/Ubuntu и, следовательно, файлы данных принадлежат этому пользователю. Это означает, что alien должен изменить владельца файлов при преобразовании и для этого, как вы видите в примере выше, он должен быть запущен как 'root'.

2
27.01.2020, 20:52

Теги

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