Сборка распространяемых двоичных файлов в Unix

367
Sayan

Мое намерение состоит в том, чтобы сгенерировать распространяемые двоичные файлы - я делаю ./configure - make - make install на моей машине сборки, и я заархивировал содержимое каталога установки (тот, к которому я дал префикс при выполнении ./configure и make install ) и перенес его на другую машину под другим пользователем для тестирования. После тестирования я вижу, что скопированные файлы все еще пытаются получить доступ к некоторым файлам по пути, который был на моем компьютере сборки - и, следовательно, я получаю permissions deniedошибку. Раньше я думал, что это может быть tarпроблемой при извлечении, но благодаря Дэниелу Беку, который помог мне понять, что это не имеет никакого отношения к процессу архивирования.

У меня нет привилегий root / sudo. Суть в том, как мне собрать одну машину и использовать установочные файлы во многих других, не сталкиваясь с проблемами, связанными с разрешениями? Каковы правила создания универсально распространяемых тарболлов?

Благодарю.

0
Sghosh - это имя пользователя. Это user_01 или user_02? Daniel Beck 13 лет назад 0
Извините, моя ошибка, да, вы правы, я хотел сказать, что я перемещаю файлы из своего пользовательского пространства в другое ... Sayan 13 лет назад 0
Хорошо - а что выводят `ls -l` и` ls -ln` после распаковки на хосте назначения? Daniel Beck 13 лет назад 0
Итак, это вывод `ls -ln` -` drwxr-xr-x 2 10036 501 4096 11.11 04:52 bin` и `ls -l` дает` drwxr-xr-x 2 user_02 staff 4096 11.11 04:52 bin` Sayan 13 лет назад 0
Является ли это выходом для файла (или папки), `user_02` которому запрещен доступ? Daniel Beck 13 лет назад 0
Да, вы правы, user_02 получает «разрешение запрещено». Tarball на самом деле является установкой компилятора ... когда user_02 пытается скомпилировать программу с использованием файлов, ошибка выглядит следующим образом: `cc1: error: /home/sghosh/rpmbuild/buildroot/open64-gcc-4.2.0/include : «Отказано в доступе» - это путь к источникам под моим домом - я не знаю, как это распространяется. Sayan 13 лет назад 0
Наконец-то мы добираемся куда-то. Вы `. / Configure` на своей первой машине и забыли сделать это на второй, или что-то в этом роде? Daniel Beck 13 лет назад 0
Ну, я сделал ./configure на первом компьютере, сгенерировал двоичные файлы (каталог установки) и архивирую только каталог установки. Так что я не собираюсь на второй машине вообще ... скорее использую install-dir как есть после распаковки. Sayan 13 лет назад 0
Вы должны понимать, что это не имеет ничего общего с файлом tar или с тем, как вы его создаете или извлекаете. У вашей программы есть определенные пути, жестко запрограммированные, и без них просто не получится. Я не думаю, что это возможно, если вы не хотите устанавливать программу где-то, чтобы она была доступна всем пользователям обеих систем. // Если вы все еще хотите попробовать, я предлагаю вам полностью пересмотреть свой вопрос, выбрасывая все, что сейчас есть, особенно `tar`, вместо этого спросите, как скомпилировать эту конкретную программу, чтобы результат можно было повторно использовать на другом компьютере с разными путями , Daniel Beck 13 лет назад 0
Да, теперь я понимаю, что это связано с тем, как я строю, я бы пересмотрел вопрос, спасибо за вашу помощь. Sayan 13 лет назад 0

2 ответа на вопрос

1
Fabel

Проблема в том, что многие программы Unix не перемещаются. Они всегда будут искать файлы по пути, указанному вами для настройки (не относительно его собственного местоположения). Если вы хотите, чтобы он был перемещаемым, то его можно установить в любой пользовательский каталог (или в любое другое место) и по-прежнему находить его файлы, где нет другого способа, кроме как изменить программу, чтобы она так себя вел.

Не существует общих правил для создания распространяемых tar-архивов, особенно для программ, созданных для установки из исходного кода. Большинство дистрибутивов Unix имеют какую-то специальную систему пакетов для распространения двоичных файлов. Лучше всего использовать это / те. Большинство коммерческих приложений, которые поставляются в виде двоичных файлов в tar-архивах, используют переменную окружения для определения местоположения своих файлов и используют сценарий оболочки-оболочки, который устанавливает эту переменную (например, путем поиска файлов относительно их собственного пути). С другой стороны, вы, вероятно, должны изменить программу, чтобы вести себя таким образом.

0
Daniel Beck

Используйте tar --no-same-owner(для версии GNU) при распаковке архива. --no-same-permissionsтакже может быть полезным.

Я все еще получаю те же ошибки. Sayan 13 лет назад 0
@ Саян, кому принадлежат эти файлы? Они должны принадлежать извлекающему пользователю, если предоставляется эта опция. Используете ли вы GNU tar, который имеет эту опцию, или что-то еще? Daniel Beck 13 лет назад 0
Хмм, пожалуйста, помогите мне понять - я собираю несколько файлов, предоставляющих опции + x ... и затем загружаю их на веб-сайт, где любой пользователь может загрузить и использовать их; так как мне установить права собственности / разрешения для любого пользователя, который скачивает архив? Да, я использую GNU tar. Sayan 13 лет назад 0
@ Саян, нет. В то время как вы можете установить `chmod` как разрешения для включаемых файлов, используя аргумент` --mode` для GNU `tar`, пользователь-распаковщик обязан отказаться от первоначального владения файлами в архиве tar. Например, я скачал исходный код OpenSSH сегодня. tar tzvf filename.tar.gz` выводит список файлов, принадлежащих пользователю «snap», а tar tzvf --numeric-owner filename.tar.gz` показывает его числовой идентификатор пользователя 1018. В моей системе такого нет пользователь. Я, как пользователь, распаковывающий архив, должен позаботиться об указании `--no-same-owner` или` --owner MyUserName`. Daniel Beck 13 лет назад 1
@Sayan Это происходит только при извлечении от имени пользователя root, поскольку другие пользователи не могут создавать файлы, принадлежащие другому пользователю. Было бы полезно, если бы вы подробно объяснили, как вы создаете и извлекаете архив tar, и включили (частичный) список tar tv, показывающий права доступа и пользователей / группы внутри tar-шара. Daniel Beck 13 лет назад 0
Спасибо за объяснение. Итак, вы говорите, что только человек с правами root сможет извлечь его с возможностью смены владельца? Я обновил свой вопрос. Sayan 13 лет назад 0
@sayan: наоборот, на самом деле Daniel Beck 13 лет назад 0