2

Я разработал приложение для Debian и создал установочный пакет .deb, используя эквив-сборку. В контрольном файле, который я использовал для создания пакета, есть строка, запускающая скрипт postinst, setup.sh. В этом файле я попытался получить имя пользователя, используя несколько методов, в том числе:

USER=$(logname)
USER=$(who am i | awk '{print $1}')

Эти способы работают правильно, когда я пытаюсь использовать их как root в окне терминала. К сожалению, все они потерпели неудачу во время установки, и имя пользователя для входа в систему получено как "root". Это приводит к тому, что все пути в сценарии неверны, и сценарий завершается с ошибкой, в результате чего Software Center показывает сообщение об ошибке и останавливает установку.

Тем не менее, используя dpkg для установки пакета, как показано ниже, мое приложение было успешно установлено.

dpkg -i package-name

Итак, почему это происходит? Как правильно получить логин?

1 ответ1

0

То, что вы пытаетесь сделать, не может работать правильно.

Пакеты .deb не являются частными для каждого пользователя - все они установлены в масштабе всей системы, поэтому вывод 'logname' показывает "root" - поэтому они должны работать одинаково для всех пользователей и не могут иметь чей-либо домашний каталог в жестком коде. общесистемные файлы конфигурации.

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

Разница между dpkg и Software Center в том, что первый выполняет все действия и запускает сценарии напрямую, поэтому сценарии postinst по-прежнему выполняются в течение сеанса входа пользователя. Однако Центр программного обеспечения делегирует фактическую установку фоновой службе, которая запускается "вне" любых сеансов входа в систему и никак не взаимодействует с пользователями.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .