Сценарий Bash или make-файл для компиляции приложения с последующим выполнением операций с повышенными правами

[  1712.621] (II) [drm] nouveau interface version: 1.3.1
[  1712.621] (EE) Unknown chipset: NV118

Версия драйвера nouveauX11 в Debian 9.x слишком старая для поддержки вашей модели NVidia dGPU. Возможно, вы сможете продолжить использование только iGPU Intel, если конфигурация вашего оборудования позволяет это (, т. е. iGPU физически подключен к дисплеям/разъемам, которые вам нужны; с ноутбуками с несколькими -GPU Optimus, что не всегда может быть правдой ).

В большинстве случаев полный xorg.confфайл больше не нужен в современных версиях Xorg. Вам может сойти с рук написание мини-файла конфигурации -, например /etc/X11/xorg.conf.d/intel-only.conf:

.
Section "ServerLayout"
    Identifier "Layout0"
    Option "AutoAddGPU" "false"
    Screen 0 "IntelScreen"
EndSection

Section "Device"
    Identifier "IntelDevice"
    BusID "PCI:0:2:0"
    Driver "intel" # or maybe "modesetting"?
EndSection

Section "Screen"
    Identifier "IntelScreen"
    Device "IntelDevice"
EndSection

Это ограничит использование X-сервером только iGPU Intel и на данный момент игнорирование dGPU Nvidia, а также автоматическое -определение всех устройств ввода, разрешений экрана и т. д.

2
30.11.2019, 02:44
2 ответа

Хороший вопрос. Одним из возможных решений будет проверка скрипт запускается с sudo, завершается, если это не так, и временно сброс привилегий для запуска команд, которые должны выполняться как обычные Пользователь. Что-то в этом роде:

#!/usr/bin/env sh

if [ -z "$SUDO_USER" ]
then
    printf "Not running with sudo. Exiting\n"
    exit 1
fi

touch SUDO-FILE

# drop privileges temporarily
su "$SUDO_USER" -c 'touch REGULAR-FILE'

После запуска вы увидите 2 файла -SUDO-FILE, принадлежащие root и его основная группа и файл REGULAR-FILE, принадлежащий обычному пользователю и его основная группа:

$ ls -Alhtr SUDO-FILE REGULAR-FILE
-rw-r--r-- 1 root root  0 Dec  5 21:06 SUDO-FILE
-rw-r--r-- 1 ja   users 0 Dec  5 21:06 REGULAR-FILE

Протестировано на Slackware Linux и FreeBSD. Вы также можете использовать su -l, который будет источником сценария входа в оболочку вашего обычного пользователя, такого как ~/.profile.

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

2
27.01.2020, 22:08

Я бы разделил ваш сценарий на два:

  • Один для сборки, который не требует запуска с правами root. (ваш текущий install.sh, который будет переименованbuild.sh)

  • Один для установки, который требует запуска от имени пользователя root. (настоящийdeploy.sh).

И почему бы не 3-й скрипт, который назывался бы install.shи делал бы:

  1. звоните build.shрегулярно.
  2. звонокsudo deploy.sh
0
27.01.2020, 22:08

Теги

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