
Контекст:
Я пытаюсь преобразовать .deb
пакет для .rpm
использованиячужак, я использую эту команду:
$ alien -r foo.deb
но он жалуется так:
> Warning: alien is not running as root!
> Warning: Ownerships of files in the generated packages will probably be wrong.
Я думаю, что все, что alien
нужно root
, это гарантировать, что у него есть разрешение на создание файлов, принадлежащих , для foo.deb
вывода , но я в этом не уверен.root
foo.rpm
Вопросы:
- Всегда ли пакетам нужны некоторые
root
файлы, принадлежащие им? root
Зачем им вообще нужны файлы, принадлежащие кому-либо?- Если я не прав, то
alien
почемуroot
?
решение1
Используйте fakeroot. Alien не нужен root для манипуляции некоторыми битами. Однострочное описание на странице руководства fakeroot адекватно резюмирует это:
выполнить команду в среде, подделывающей привилегии root для манипуляции файлами
Итак, fakeroot — это программа, которая убеждает команду в том, что она запущена как root, достаточно хорошо, чтобы права доступа к файлам были установлены как root, где они и должны быть. Для получения дополнительной информации см. man fakeroot
.
К сожалению, полученное вами сообщение об ошибке вводит в заблуждение.
Короче говоря, сделайте
fakeroot alien ...
Вот отчет об ошибке, где автор alien, Джоуи Хесс, обсуждает необходимость использования fakeroot. Возможно, не лучшая ссылка. Если найду что-то получше, выложу.
решение2
Потому что для смены владельца файла требуются привилегии «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'.
решение3
Пакеты Rpm и deb содержат архивы файлов для установки (cpioархивы в случае RPM,смолав случае deb). Эти архивы содержат метаданные о каждом файле, включая его имя, дату изменения, владельца пользователя и группу, а также разрешения. Когда пакет установлен, каждый файл в конечном итоге получает владельца, описанного в архиве (если только скрипт после установки не изменяет его).
Большинство файлов, устанавливаемых пакетами, принадлежат пользователю root, поскольку ни один пользователь не имеет права изменять их.
Alien преобразует пакеты, распаковывая архив и переупаковывая его (а также выполняя другие действия, такие как преобразование скриптов до/после установки). Например, чтобы преобразовать rpm в deb, alien вызывает cpio
извлечение архива во временное местоположение, а затем tar
создание нового архива. Если распаковка не выполняется с правами root, то все временные файлы будут принадлежать пользователю, который выполняет распаковку, поэтому, когда файлы будут упакованы в новый архив, они в конечном итоге будут принадлежать этому пользователю.
Alien на самом деле не обязательно запускать от имени root, поскольку ему не нужно ничего менять в системе.Fakerootзапускает alien (или любую другую команду) в среде, где эта команда получает фальшивую информацию об операциях файловой системы, делая вид, что операции, которые обычно требуют root (например, изменение владельца файла), были выполнены успешно. Таким образом, распаковка выполняется как root и устанавливает правильное владение файлом (в отношении alien
и его подпроцессов), и, таким образом, перепаковка создает предполагаемый архив.