RPM сообщает об отсутствии зависимости, но я уже установил эту библиотеку (из источника)

Вы можете попробовать просто,

Создать файл с именем myscript со следующим содержанием:

#!/bin/bash
echo -n "Enter Run level":
read rl;
sudo init $rl;

Где echo используется для печати того, что вводится, read используется для получения ввода и сохранения в переменной rl и sudo init $rl; для выполнения команды для изменения уровня выполнения.

Для большего контроля/проверки ввода можно использовать циклы, такие как while и case.

Вы должны дать разрешение на выполнение: sudo chmod +x myscript, чтобы он мог быть выполнен.

Затем вы можете запустить скрипт как:

$ ./myscript
$ Enter Run level : 3

EDIT:

как @RuiFRibeiro подсказал, команда для изменения уровня выполнения - telinit:

NAME
       telinit - change system runlevel

SYNOPSIS
       telinit [OPTION]...  RUNLEVEL

DESCRIPTION
       telinit may be used to change the system runlevel.

Поэтому, вы должны использовать telinit вместо init в скрипте.


А для проверки уровня выполнения можно использовать команду who -r или runlevel, которая выводит предыдущий и текущий уровень выполнения.

$ who -r | awk '{print $1,$2}'
run-level 3
$ runlevel
2 3

5
02.08.2016, 01:07
2 ответа

Это хороший повод придерживаться таких менеджеров пакетов, как yum , или, в худшем случае, rpm , но избегать установки из исходников. .

Таким образом, решением было бы установить эту недостающую зависимость с пакетом RPM. Было бы неплохо сначала удалить тот, который вы установили из исходного кода, но иногда это может быть немного сложно.

5
27.01.2020, 20:33

База данных зависимостей RPM не может сказать, что вы установили пакет из исходного кода. База данных RPM знает только о метаданных, присутствующих в пакетах RPM, пакет, установленный из источника, не содержит этих метаданных.

Некоторые сценарии configure, которые собирают пакет из исходного кода, создают pkg-config , который представляет собой метаданные об установленном пакете. Тем не менее, нет четкой интеграции между метаданными из pkg-config и метаданными RPM (или метаданными DEB , или метаданными pacman ). При упаковке дистрибутива упаковщики вставляют метаданные в определенном формате в пакеты (например, пакеты RPM), и эти метаданные используются для определения зависимостей. Не метаданные в какой-либо другой форме.

С другой стороны, в одной системе могут быть разные версии библиотеки. По умолчанию (т.е. согласно стандартам кодирования GNU , которым следует большинство пакетов) сценарий configure должен устанавливать свои продукты в / usr / local .В то время как пакеты, упакованные дистрибутивом (например, RPM ), должны устанавливать свое содержимое в / usr .

Следовательно, если вы следуете соглашению (называемое FHS ) и сохраняете пакеты / библиотеки, установленные из исходного кода в / usr / local , затем устанавливаете ту же библиотеку через RPM не будет конфликтовать с вашей библиотекой (поскольку упаковщики дистрибутива следуют FHS).

Когда RPM недоступен, вы можете создать его самостоятельно. Для этого вам нужно собрать пакет / библиотеку из исходного кода и установить его в фиктивное место (корень сборки). Затем предоставьте метаданные, необходимые для пакета RPM, и упакуйте их в файл RPM. В TLDP есть устаревшее, но очень подробное руководство по созданию RPM .

7
27.01.2020, 20:33

Теги

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