Упаковка: /usr/lib против /usr/lib/*-linux-gnu

Я строил новую версию Spice в контейнере LXC, в основном для экспериментов. Однако одна странная вещь, с которой я столкнулся, заключалась в том, что make install установлены libspice-server.so.1.9.0 в /usr/lib, В результате при использовании драйвера QXL произошел неприятный сбой из-за того факта, что libspice-server.so.1.8.0 из хранилищ был расположен в /usr/lib/x86_64-linux-gnu, который имеет более высокий приоритет в ldconfig, Таким образом, оно динамически связывало старую версию библиотеки с новым кодом - ничего хорошего.

Во всяком случае, это заставило меня задуматься: кроме ldconfig порядок (который, я думаю, не имеет к этому никакого отношения), есть ли функциональная или философская разница между размещением библиотеки в /usr/lib по сравнению с размещением библиотеки в /usr/lib/{x86_64,i386}-linux-gnu?

Я понимаю необходимость отдельного /usr/lib/i386-linux-gnu а также /usr/lib/x86_64-linux-gnu каталоги из-за того, что Debian не использует /usr/lib/usr/lib32 иерархия, используемая некоторыми другими дистрибутивами. Но, делать библиотеки, которые находятся непосредственно в /usr/lib имеют какое-то особое значение, или это просто для обратной совместимости, возможно?

2 ответа

Решение

В Debian и Ubuntu, а также в FHS, /usr/lib и варианты "принадлежат" продавцу. В данном случае это означает ваше распространение. Вы не должны помещать файлы туда вообще. Конечно, вы можете делать как вам угодно, но инструментальные средства (такие как dpkg) просто перезаписывают файлы, которые вы там размещаете, без запроса, потому что система по проекту рассматривает эти места только для пакетов распространения. Ваша система - ваша, чтобы сломать, как вы хотите, но вы также можете сохранить кусочки:-)

Место, зарезервированное для владельца системы / администратора для размещения дополнительных общесистемных библиотек, составляет /usr/local/lib, Это в FHS, поэтому оно должно быть доступно и настроено для всех соответствующих стандартам распределений. Вышестоящее программное обеспечение должно иметь make install поместите туда библиотеки по умолчанию.

... есть ли функциональная или философская разница между размещением библиотеки в /usr/lib и размещением библиотеки в /usr/lib/{x86_64,i386}-linux-gnu?

Пакеты распространения, которые используют /usr/lib не может быть одновременно установлена ​​другая архитектура (например, i386 или amd64), что, как отмечали другие, полезно для настольных компьютеров, работающих как с 32-разрядным, так и с 64-разрядным ПО, а также для разработчиков, использующих код, созданный для других архитектур путем эмуляции., Это единственная причина для подкаталогов multiarch.

То же самое относится и к библиотекам, которые вы устанавливаете самостоятельно. Делаете ли вы это в /usr/lib или же /usr/local/libвы не сможете одновременно поддерживать несколько архитектур. Вы всегда можете добавить несколько путей: /usr/local/lib/{x86_64,i386}-linux-gnu в /etc/ld.so.conf.d/ чтобы включить это, конечно.

Вы правы, в традиционной системе все библиотеки были установлены в /usr/lib, Как вы уже упоминали, тот факт, что пользователям нравится выполнять 32-разрядные двоичные файлы на 64-разрядных платформах, является одной из причин разделения библиотек по их архитектуре. Этот подход известен как Multiarch (по крайней мере, в мире Debian).

Кроме того, разработчики любят устанавливать библиотеки других архитектур (например, ARM) для кросс-компиляции своих приложений.

FHS рекомендует помещать 32-/64-битные библиотеки в папки /usr/lib{32,64}, Этот подход является своего рода негибким, поскольку нет поддержки для других архитектур (например, ARM). Существует даже несколько 64-битных ABI, которые не совместимы друг с другом и могут оказаться в одной папке.

Дальнейшая информация:

Другие вопросы по тегам