Игнорирование зависимостей при установке с помощью yum (Scientific Linux)

Как игнорировать зависимости одного пакета, который я пытаюсь установить с помощью yum в Scientific Linux? Ответ, по-видимому, будет таким же для CentOS / RHEL.

Чтобы уточнить, я ищу, чтобы получить утилиту lsb_release , которая, как я знаю, будет помещена в /usr/bin/lsb_release . Команда yum whatprovides /usr/bin/lsb_release сообщает мне, что она является частью пакетов redhat-lsb (для соответствующих архитектур), но у них есть куча зависимостей, включая некоторые связанные с X11.

Поскольку я только после программы lsb_release , я бы хотел уклониться от «crud», который поставляется с зависимостями. Как я могу это достичь?

Вы не можете. Установка X-материала, вероятно, бессмысленна, если у вас нет крошечного объема памяти и каждого подсчета MB, или если он включает в себя весь DE (что, вероятно, нет), поскольку это может включать в себя некоторую конфигурацию системы, которую вы не хотите.

Если вы по-прежнему не хотите идти по этому маршруту, вы должны найти подходящую .rpm (вы можете использовать yum для получения одного из репо без установки, см. Здесь : я не пробовал и не знаю, будут ли зависимости сложными, проще всего использовать rpmfind ). Затем вы можете распаковать rpm с помощью rpm2cpio и rpm2cpio установить lsb_release; сначала проверьте его с помощью ldd lsb_release чтобы убедиться, что библиотеки, в которых они нуждаются, доступны. Там могут быть и другие маленькие кусочки в оборотах, которые вам нужны.

Уже есть объяснения rpm2cpio онлайн, поэтому я не буду повторять все это. Если вы используете файл mc filebrowser, вы можете использовать это вместо rpm2cpio – он позволит вам просматривать внутреннюю часть rpm так же, как вы можете использовать файл tarball или zip.

Основываясь на подсказках от ответа goldilocks, я придумал этот маленький скрипт, который делает именно то , что я хочу, и не более того. Он был написан и протестирован на Scientific Linux 6.3, но может работать и с другими производными RHEL. Я назвал сценарий redhat-lsb.sh (как не творческий).

 #!/usr/bin/env bash WKPKG=redhat-lsb WKDIR=$HOME/$WKPKG [[ -d "$WKDIR" ]] && [[ "x$1" != "xf" ]] && { echo "ERROR: not removing $WKDIR. Use -f to force it."; exit 1; } ( [[ -d "$WKDIR" ]] && rm -rf "$WKDIR" mkdir "$WKDIR" && \ cd "$WKDIR" && \ yumdownloader $WKPKG && \ cd / && \ rpm2cpio "$WKDIR"/redhat-lsb-*.$(uname -m).rpm | cpio -idmv ) && rm -rf "$WKDIR" 

Вызовите sudo ./redhat-lsb.sh или sudo ./redhat-lsb.sh -f (последний удаляет рабочий каталог, если он уже существует).

Что это делает:

  1. использует папку $HOME/redhat-lsb для работы.
  2. использует yumdownloader для загрузки пакета.
  3. использует shell globbing для выбора правильного .rpm : redhat-lsb-*.$(uname -m).rpm
  4. изменения в / потому что мы хотим установить его
  5. использует rpm2cpio чтобы распаковать его на stdout
  6. cpio ловит его и распаковывает в текущий каталог (это шаг, который требует sudo )
  7. наконец удаляет рабочую папку

И после этого, большой успех … он работает … без всех зависимостей:

 $ lsb_release -a LSB Version: :core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch Distributor ID: Scientific Description: Scientific Linux release 6.3 (Carbon) Release: 6.3 Codename: Carbon 

Оказывается, сам пакет содержит только один статически связанный исполняемый файл. Остальные – это скрипты и данные оболочки.