Сценарий Bash, который может протестировать на конкретный lib

Выполненный ulimit -c 1073741824 до запуска программы. В следующий раз катастрофические отказы программы, дамп ядра будет создан в рабочем каталоге (названный core.<PID>). Можно затем использовать GDB для открытия этого ядра в любое время, Вам нравится.

ulimit -c XXXXX устанавливает максимальный размер файла дампа ядра, созданного, когда программа seg дает сбой. По умолчанию это 0 что означает не выводить ядро.

2
14.01.2012, 00:10
5 ответов

Учитывая, что Вы будете использовать своего рода диспетчер пакетов для установки библиотек, разве не было бы намного легче просто иметь список пакетов, что Вы хотите быть установленными и гарантировать так или иначе, что они установлены?

100% диспетчеров пакетов, которые я знаю, имеют своего рода режим (режим по умолчанию, обычно), что любой устанавливают пакет, если он не установлен, обновления это к последней версии, если он установил, но старый и просто передает, если это уже актуально.

Например, с apt-get можно всегда делать apt-get install a b c d ... для проверки это упаковывает a, b, c, d установлены. С yum это было бы yum install a b c d, и т.д.

При использовании различных систем с различными диспетчерами пакетов в VPSes Вы закончите с записью некоторой логики для обнаружения, который делает диспетчер пакетов это использует так или иначе, таким образом, этот шаг неизбежен.

3
27.01.2020, 21:57

После выполнения команды ldd, как Вы предположили, можно попытаться использовать что-то как

grep "not found" /tmp/lddcheck | awk '// { print $1 }'

получить названия недостающих библиотек.

1
27.01.2020, 21:57
  • 1
    Ну, я предполагаю, что должен разъясниться немного лучше. Это - сценарий, который я могу использовать на разнообразии VPS's, каждый из которых может или не может иметь, они конкретные освобождают установленный. Я знаю два, которые не могут быть там, но мне нужен сценарий к смочь сказать, установили ли конкретному VPS их или нет. Таким образом, я должен смочь поместить его в некоторую переменную или что-то так, чтобы, если "theselibs" возвращает false, то сценарий может установить их. –  Nate 12.01.2012, 05:00
  • 2
    Довольно глупо передать grep по каналу в awk с пустым поиском; можно просто сделать awk '/not found/ {print $1}' /tmp/lddcheck. Или grep 'not found' /tmp/lddcheck | cut -d' ' -f1 –  Michael Mrozek♦ 12.01.2012, 05:59

Принятие библиотек, Вы нуждаетесь в поддержке он, необходимо использовать pkg-config, это - то, для чего это сделано.

$ pkg-config --exists libnotify 
$ echo $?
0
$ pkg-config --exists nonexistant
$ echo $?
1
$ 

Вы можете использовать его, чтобы проверить версию, сказать Вам включение или освобождаете пути и т.д.

1
27.01.2020, 21:57

ldd $YOURBINARY 2>&1 |grep "missing" должен произвести недостающие библиотеки для Вашего двоичного файла.

0
27.01.2020, 21:57

Если Вы плохо знакомы со сценариями, помните это: Вам редко нужен временный файл; когда необходимо сделать несколько этапов обработки на некоторых данных, достигнуть канала. Существует много инструментов обработки текста, из которых можно использовать на выводе ldd. Здесь, я буду использовать awk, обнаружить строки, где третье разделенное от пробела поле not (в противоположность пути к библиотеке), и печать первое поле (название библиотеки). Я собираю вывод в переменную, которая будет содержать разделенный от пробела список недостающих библиотек.

missing=$(ldd /path/to/executable | awk '$3 == "not" {print $1}')
for x in $missing; do
  # whatever it takes to install $x
done

Обратите внимание, что это - вероятно, не правильный подход. Если Вы собираетесь иметь поддержку определенных дистрибутивов, то не делайте универсальный двоичный пакет с пользовательским взаимодействием с диспетчером пакетов. Распределите пакет для того распределения.

Диспетчеры пакетов делают жизнь системных администраторов намного легче; проигрывание хорошо с диспетчером пакетов оставит Ваших пользователей смущенными и сердитыми. Если Вы распределите rpms и debs и так далее, то Ваши пользователи должны будут просто установить зависимости Вашего пакета. Таким образом, Ваш пакет будет зарегистрирован и может быть установлен, обновлен и удалил использование обычного инструмента управления пакета пользователя, а не путем выполнения некоторого сомнительного сценария.

0
27.01.2020, 21:57

Теги

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